From 3bbdef77d439cb76b9bc0db6957cb3d994769e03 Mon Sep 17 00:00:00 2001 From: Adhityan K V Date: Thu, 3 Oct 2024 22:42:30 +0200 Subject: [PATCH 1/3] feat: switch to monorepo --- .editorconfig | 13 + .eslintrc.js | 25 - .github/workflows/build.yml | 2 +- .github/workflows/publish.yml | 43 + .gitignore | 216 +- .husky/commit-msg | 1 + .prettierignore | 5 + .prettierrc | 14 +- .vscode/extensions.json | 3 + CONTRIBUTING.md | 2 +- README.md | 164 +- commitlint.config.js | 1 + core/embedjs-interfaces/CHANGELOG.md | 5 + core/embedjs-interfaces/README.md | 8 + core/embedjs-interfaces/eslint.config.js | 20 + core/embedjs-interfaces/package.json | 40 + core/embedjs-interfaces/project.json | 29 + .../embedjs-interfaces/src}/constants.ts | 14 +- core/embedjs-interfaces/src/index.ts | 10 + .../src}/interfaces/base-cache.ts | 24 +- .../src}/interfaces/base-conversations.ts | 22 +- .../src}/interfaces/base-db.ts | 22 +- .../src}/interfaces/base-embeddings.ts | 10 +- .../src}/interfaces/base-loader.ts | 302 +- .../src}/interfaces/base-model.ts | 198 +- .../embedjs-interfaces/src}/types.ts | 168 +- core/embedjs-interfaces/tsconfig.cjs.json | 7 + .../embedjs-interfaces/tsconfig.json | 48 +- core/embedjs-interfaces/tsconfig.lib.json | 10 + core/embedjs-utils/CHANGELOG.md | 5 + core/embedjs-utils/README.md | 8 + core/embedjs-utils/eslint.config.js | 20 + core/embedjs-utils/package.json | 38 + core/embedjs-utils/project.json | 29 + core/embedjs-utils/src/index.ts | 4 + .../embedjs-utils/src}/util/arrays.ts | 50 +- {src => core/embedjs-utils/src}/util/log.ts | 10 +- .../embedjs-utils/src}/util/stream.ts | 22 +- .../embedjs-utils/src}/util/strings.ts | 120 +- core/embedjs-utils/tsconfig.cjs.json | 7 + core/embedjs-utils/tsconfig.json | 26 + core/embedjs-utils/tsconfig.lib.json | 10 + core/embedjs/CHANGELOG.md | 5 + core/embedjs/README.md | 1312 ++ core/embedjs/eslint.config.js | 20 + core/embedjs/package.json | 49 + core/embedjs/project.json | 29 + .../embedjs/src}/cache/memory-cache.ts | 86 +- .../src}/conversation/memory-conversations.ts | 82 +- .../src}/core/dynamic-loader-selector.ts | 294 +- .../src}/core/rag-application-builder.ts | 292 +- .../embedjs/src}/core/rag-application.ts | 759 +- .../embedjs/src}/core/rag-embedding.ts | 72 +- core/embedjs/src/index.ts | 9 + .../embedjs/src}/loaders/json-loader.ts | 116 +- .../embedjs/src}/loaders/local-path-loader.ts | 125 +- .../embedjs/src}/loaders/text-loader.ts | 68 +- .../embedjs/src}/loaders/url-loader.ts | 74 +- {src => core/embedjs/src}/util/mime.ts | 85 +- core/embedjs/tsconfig.cjs.json | 7 + core/embedjs/tsconfig.json | 26 + core/embedjs/tsconfig.lib.json | 10 + databases/embedjs-astra/CHANGELOG.md | 5 + databases/embedjs-astra/README.md | 8 + databases/embedjs-astra/eslint.config.js | 20 + databases/embedjs-astra/package.json | 39 + databases/embedjs-astra/project.json | 29 + .../embedjs-astra/src}/astra-db.ts | 3 +- databases/embedjs-astra/src/index.ts | 1 + databases/embedjs-astra/tsconfig.cjs.json | 7 + databases/embedjs-astra/tsconfig.json | 26 + databases/embedjs-astra/tsconfig.lib.json | 10 + databases/embedjs-cosmos/CHANGELOG.md | 5 + databases/embedjs-cosmos/README.md | 8 + databases/embedjs-cosmos/eslint.config.js | 20 + databases/embedjs-cosmos/package.json | 39 + databases/embedjs-cosmos/project.json | 29 + .../embedjs-cosmos/src}/cosmos-db.ts | 426 +- databases/embedjs-cosmos/src/index.ts | 1 + databases/embedjs-cosmos/tsconfig.cjs.json | 7 + databases/embedjs-cosmos/tsconfig.json | 26 + databases/embedjs-cosmos/tsconfig.lib.json | 10 + databases/embedjs-hnswlib/CHANGELOG.md | 5 + databases/embedjs-hnswlib/README.md | 8 + databases/embedjs-hnswlib/eslint.config.js | 20 + databases/embedjs-hnswlib/package.json | 39 + databases/embedjs-hnswlib/project.json | 29 + .../embedjs-hnswlib/src}/hnswlib-db.ts | 115 +- databases/embedjs-hnswlib/src/index.ts | 1 + databases/embedjs-hnswlib/tsconfig.cjs.json | 7 + databases/embedjs-hnswlib/tsconfig.json | 26 + databases/embedjs-hnswlib/tsconfig.lib.json | 10 + databases/embedjs-lancedb/CHANGELOG.md | 5 + databases/embedjs-lancedb/README.md | 8 + databases/embedjs-lancedb/eslint.config.js | 20 + databases/embedjs-lancedb/package.json | 39 + databases/embedjs-lancedb/project.json | 29 + databases/embedjs-lancedb/src/index.ts | 1 + .../embedjs-lancedb/src}/lance-db.ts | 3 +- databases/embedjs-lancedb/tsconfig.cjs.json | 7 + databases/embedjs-lancedb/tsconfig.json | 26 + databases/embedjs-lancedb/tsconfig.lib.json | 10 + databases/embedjs-lmdb/CHANGELOG.md | 5 + databases/embedjs-lmdb/README.md | 8 + databases/embedjs-lmdb/eslint.config.js | 20 + databases/embedjs-lmdb/package.json | 38 + databases/embedjs-lmdb/project.json | 29 + databases/embedjs-lmdb/src/index.ts | 1 + .../embedjs-lmdb/src}/lmdb-cache.ts | 100 +- databases/embedjs-lmdb/tsconfig.cjs.json | 7 + databases/embedjs-lmdb/tsconfig.json | 26 + databases/embedjs-lmdb/tsconfig.lib.json | 10 + databases/embedjs-mongodb/CHANGELOG.md | 5 + databases/embedjs-mongodb/README.md | 8 + databases/embedjs-mongodb/eslint.config.js | 20 + databases/embedjs-mongodb/package.json | 39 + databases/embedjs-mongodb/project.json | 29 + databases/embedjs-mongodb/src/index.ts | 3 + .../embedjs-mongodb/src}/mongo-cache.ts | 153 +- .../src}/mongo-conversations.ts | 166 +- .../embedjs-mongodb/src}/mongo-db.ts | 349 +- databases/embedjs-mongodb/tsconfig.cjs.json | 7 + databases/embedjs-mongodb/tsconfig.json | 26 + databases/embedjs-mongodb/tsconfig.lib.json | 10 + databases/embedjs-pinecone/CHANGELOG.md | 5 + databases/embedjs-pinecone/README.md | 8 + databases/embedjs-pinecone/eslint.config.js | 20 + databases/embedjs-pinecone/package.json | 39 + databases/embedjs-pinecone/project.json | 29 + databases/embedjs-pinecone/src/index.ts | 1 + .../embedjs-pinecone/src}/pinecone-db.ts | 223 +- databases/embedjs-pinecone/tsconfig.cjs.json | 7 + databases/embedjs-pinecone/tsconfig.json | 26 + databases/embedjs-pinecone/tsconfig.lib.json | 10 + databases/embedjs-qdrant/CHANGELOG.md | 5 + databases/embedjs-qdrant/README.md | 8 + databases/embedjs-qdrant/eslint.config.js | 20 + databases/embedjs-qdrant/package.json | 40 + databases/embedjs-qdrant/project.json | 29 + databases/embedjs-qdrant/src/index.ts | 1 + .../embedjs-qdrant/src}/qdrant-db.ts | 216 +- databases/embedjs-qdrant/tsconfig.cjs.json | 7 + databases/embedjs-qdrant/tsconfig.json | 26 + databases/embedjs-qdrant/tsconfig.lib.json | 10 + databases/embedjs-redis/CHANGELOG.md | 5 + databases/embedjs-redis/README.md | 8 + databases/embedjs-redis/eslint.config.js | 20 + databases/embedjs-redis/package.json | 38 + databases/embedjs-redis/project.json | 29 + databases/embedjs-redis/src/index.ts | 1 + .../embedjs-redis/src}/redis-cache.ts | 108 +- databases/embedjs-redis/tsconfig.cjs.json | 7 + databases/embedjs-redis/tsconfig.json | 26 + databases/embedjs-redis/tsconfig.lib.json | 10 + databases/embedjs-weaviate/CHANGELOG.md | 5 + databases/embedjs-weaviate/README.md | 8 + databases/embedjs-weaviate/eslint.config.js | 20 + databases/embedjs-weaviate/package.json | 40 + databases/embedjs-weaviate/project.json | 29 + databases/embedjs-weaviate/src/index.ts | 1 + .../embedjs-weaviate/src}/weaviate-db.ts | 311 +- databases/embedjs-weaviate/tsconfig.cjs.json | 7 + databases/embedjs-weaviate/tsconfig.json | 26 + databases/embedjs-weaviate/tsconfig.lib.json | 10 + eslint.config.js | 50 + examples/chroma/example.env | 1 - examples/chroma/package-lock.json | 207 - examples/chroma/package.json | 18 - examples/chroma/src/index.ts | 24 - examples/chroma/tsconfig.json | 103 - examples/cohere/example.env | 2 - examples/cohere/package-lock.json | 207 - examples/cohere/package.json | 18 - examples/cohere/src/index.ts | 26 - examples/cohere/tsconfig.json | 103 - examples/ollama/README.md | 27 - examples/ollama/package-lock.json | 195 - examples/ollama/package.json | 17 - examples/ollama/src/index.ts | 38 - examples/ollama/tsconfig.json | 104 - examples/pinecone/example.env | 2 - examples/pinecone/package-lock.json | 207 - examples/pinecone/package.json | 18 - examples/pinecone/src/index.ts | 39 - examples/pinecone/tsconfig.json | 103 - examples/simple/example.env | 1 - examples/simple/package-lock.json | 207 - examples/simple/package.json | 18 - examples/simple/src/index.ts | 21 - examples/simple/tsconfig.json | 103 - examples/vertexai/README.md | 59 - examples/vertexai/example.env | 8 - examples/vertexai/package-lock.json | 207 - examples/vertexai/package.json | 18 - examples/vertexai/src/index.ts | 28 - examples/vertexai/tsconfig.json | 103 - .../embedjs-loader-confluence/CHANGELOG.md | 5 + loaders/embedjs-loader-confluence/README.md | 8 + .../eslint.config.js | 20 + .../embedjs-loader-confluence/package.json | 40 + .../embedjs-loader-confluence/project.json | 29 + .../src}/confluence-loader.ts | 201 +- .../embedjs-loader-confluence/src/index.ts | 1 + .../tsconfig.cjs.json | 7 + .../embedjs-loader-confluence/tsconfig.json | 26 + .../tsconfig.lib.json | 10 + loaders/embedjs-loader-csv/CHANGELOG.md | 5 + loaders/embedjs-loader-csv/README.md | 8 + loaders/embedjs-loader-csv/eslint.config.js | 20 + loaders/embedjs-loader-csv/package.json | 41 + loaders/embedjs-loader-csv/project.json | 29 + .../embedjs-loader-csv/src}/csv-loader.ts | 117 +- loaders/embedjs-loader-csv/src/index.ts | 1 + loaders/embedjs-loader-csv/tsconfig.cjs.json | 7 + loaders/embedjs-loader-csv/tsconfig.json | 26 + loaders/embedjs-loader-csv/tsconfig.lib.json | 10 + loaders/embedjs-loader-msoffice/CHANGELOG.md | 5 + loaders/embedjs-loader-msoffice/README.md | 8 + .../embedjs-loader-msoffice/eslint.config.js | 20 + loaders/embedjs-loader-msoffice/package.json | 40 + loaders/embedjs-loader-msoffice/project.json | 29 + .../src}/docx-loader.ts | 99 +- .../src}/excel-loader.ts | 99 +- loaders/embedjs-loader-msoffice/src/index.ts | 3 + .../src}/ppt-loader.ts | 99 +- .../embedjs-loader-msoffice/tsconfig.cjs.json | 7 + loaders/embedjs-loader-msoffice/tsconfig.json | 26 + .../embedjs-loader-msoffice/tsconfig.lib.json | 10 + loaders/embedjs-loader-pdf/CHANGELOG.md | 5 + loaders/embedjs-loader-pdf/README.md | 8 + loaders/embedjs-loader-pdf/eslint.config.js | 20 + loaders/embedjs-loader-pdf/package.json | 40 + loaders/embedjs-loader-pdf/project.json | 29 + loaders/embedjs-loader-pdf/src/index.ts | 1 + .../embedjs-loader-pdf/src}/pdf-loader.ts | 94 +- loaders/embedjs-loader-pdf/tsconfig.cjs.json | 7 + loaders/embedjs-loader-pdf/tsconfig.json | 26 + loaders/embedjs-loader-pdf/tsconfig.lib.json | 10 + loaders/embedjs-loader-sitemap/CHANGELOG.md | 5 + loaders/embedjs-loader-sitemap/README.md | 8 + .../embedjs-loader-sitemap/eslint.config.js | 20 + loaders/embedjs-loader-sitemap/package.json | 40 + loaders/embedjs-loader-sitemap/project.json | 29 + loaders/embedjs-loader-sitemap/src/index.ts | 1 + .../src}/sitemap-loader.ts | 110 +- .../embedjs-loader-sitemap/tsconfig.cjs.json | 7 + loaders/embedjs-loader-sitemap/tsconfig.json | 26 + .../embedjs-loader-sitemap/tsconfig.lib.json | 10 + loaders/embedjs-loader-web/CHANGELOG.md | 5 + loaders/embedjs-loader-web/README.md | 8 + loaders/embedjs-loader-web/eslint.config.js | 20 + loaders/embedjs-loader-web/package.json | 45 + loaders/embedjs-loader-web/project.json | 29 + loaders/embedjs-loader-web/src/index.ts | 1 + .../embedjs-loader-web/src}/web-loader.ts | 125 +- loaders/embedjs-loader-web/tsconfig.cjs.json | 7 + loaders/embedjs-loader-web/tsconfig.json | 26 + loaders/embedjs-loader-web/tsconfig.lib.json | 10 + loaders/embedjs-loader-youtube/CHANGELOG.md | 5 + loaders/embedjs-loader-youtube/README.md | 8 + .../embedjs-loader-youtube/eslint.config.js | 20 + loaders/embedjs-loader-youtube/package.json | 44 + loaders/embedjs-loader-youtube/project.json | 29 + loaders/embedjs-loader-youtube/src/index.ts | 3 + .../src}/youtube-channel-loader.ts | 106 +- .../src}/youtube-loader.ts | 102 +- .../src}/youtube-search-loader.ts | 120 +- .../embedjs-loader-youtube/tsconfig.cjs.json | 7 + loaders/embedjs-loader-youtube/tsconfig.json | 26 + .../embedjs-loader-youtube/tsconfig.lib.json | 10 + models/embedjs-anthropic/CHANGELOG.md | 5 + models/embedjs-anthropic/README.md | 8 + models/embedjs-anthropic/eslint.config.js | 20 + models/embedjs-anthropic/package.json | 40 + models/embedjs-anthropic/project.json | 29 + .../embedjs-anthropic/src}/anthropic-model.ts | 109 +- models/embedjs-anthropic/src/index.ts | 1 + models/embedjs-anthropic/tsconfig.cjs.json | 7 + models/embedjs-anthropic/tsconfig.json | 26 + models/embedjs-anthropic/tsconfig.lib.json | 10 + models/embedjs-cohere/CHANGELOG.md | 5 + models/embedjs-cohere/README.md | 8 + models/embedjs-cohere/eslint.config.js | 20 + models/embedjs-cohere/package.json | 39 + models/embedjs-cohere/project.json | 29 + .../embedjs-cohere/src}/cohere-embeddings.ts | 53 +- models/embedjs-cohere/src/index.ts | 1 + models/embedjs-cohere/tsconfig.cjs.json | 7 + models/embedjs-cohere/tsconfig.json | 26 + models/embedjs-cohere/tsconfig.lib.json | 10 + models/embedjs-huggingface/CHANGELOG.md | 5 + models/embedjs-huggingface/README.md | 8 + models/embedjs-huggingface/eslint.config.js | 20 + models/embedjs-huggingface/package.json | 40 + models/embedjs-huggingface/project.json | 29 + .../src}/huggingface-model.ts | 127 +- models/embedjs-huggingface/src/index.ts | 1 + models/embedjs-huggingface/tsconfig.cjs.json | 7 + models/embedjs-huggingface/tsconfig.json | 26 + models/embedjs-huggingface/tsconfig.lib.json | 10 + models/embedjs-mistral/CHANGELOG.md | 5 + models/embedjs-mistral/README.md | 8 + models/embedjs-mistral/eslint.config.js | 20 + models/embedjs-mistral/package.json | 40 + models/embedjs-mistral/project.json | 29 + models/embedjs-mistral/src/index.ts | 1 + .../embedjs-mistral/src}/mistral-model.ts | 105 +- models/embedjs-mistral/tsconfig.cjs.json | 7 + models/embedjs-mistral/tsconfig.json | 26 + models/embedjs-mistral/tsconfig.lib.json | 10 + models/embedjs-ollama/CHANGELOG.md | 5 + models/embedjs-ollama/README.md | 8 + models/embedjs-ollama/eslint.config.js | 20 + models/embedjs-ollama/package.json | 40 + models/embedjs-ollama/project.json | 29 + models/embedjs-ollama/src/index.ts | 2 + .../embedjs-ollama/src}/ollama-embeddings.ts | 72 +- .../embedjs-ollama/src}/ollama-model.ts | 95 +- models/embedjs-ollama/tsconfig.cjs.json | 7 + models/embedjs-ollama/tsconfig.json | 26 + models/embedjs-ollama/tsconfig.lib.json | 10 + models/embedjs-openai/CHANGELOG.md | 5 + models/embedjs-openai/README.md | 8 + models/embedjs-openai/eslint.config.js | 20 + models/embedjs-openai/package.json | 40 + models/embedjs-openai/project.json | 29 + .../embedjs-openai/src}/ada-embeddings.ts | 54 +- models/embedjs-openai/src/index.ts | 4 + .../src}/openai-3large-embeddings.ts | 70 +- .../src}/openai-3small-embeddings.ts | 54 +- .../embedjs-openai/src}/openai-model.ts | 135 +- models/embedjs-openai/tsconfig.cjs.json | 7 + models/embedjs-openai/tsconfig.json | 26 + models/embedjs-openai/tsconfig.lib.json | 10 + models/embedjs-vertexai/CHANGELOG.md | 5 + models/embedjs-vertexai/README.md | 8 + models/embedjs-vertexai/eslint.config.js | 20 + models/embedjs-vertexai/package.json | 40 + models/embedjs-vertexai/project.json | 29 + .../embedjs-vertexai/src}/gecko-embeddings.ts | 44 +- models/embedjs-vertexai/src/index.ts | 2 + .../embedjs-vertexai/src}/vertexai-model.ts | 87 +- models/embedjs-vertexai/tsconfig.cjs.json | 7 + models/embedjs-vertexai/tsconfig.json | 26 + models/embedjs-vertexai/tsconfig.lib.json | 10 + nx.json | 60 + package-lock.json | 15467 ++++++++++------ package.json | 289 +- scripts/move-cjs-to-dist.js | 4 +- scripts/publish-via-nx.js | 103 + src/index.ts | 73 - src/vectorDb/chroma-db.ts | 76 - tsconfig.base.json | 49 + tsconfig.cjs.json | 9 - 354 files changed, 18945 insertions(+), 12726 deletions(-) create mode 100644 .editorconfig delete mode 100644 .eslintrc.js create mode 100644 .github/workflows/publish.yml create mode 100644 .husky/commit-msg create mode 100644 .vscode/extensions.json create mode 100644 commitlint.config.js create mode 100644 core/embedjs-interfaces/CHANGELOG.md create mode 100644 core/embedjs-interfaces/README.md create mode 100644 core/embedjs-interfaces/eslint.config.js create mode 100644 core/embedjs-interfaces/package.json create mode 100644 core/embedjs-interfaces/project.json rename {src/global => core/embedjs-interfaces/src}/constants.ts (95%) create mode 100644 core/embedjs-interfaces/src/index.ts rename {src => core/embedjs-interfaces/src}/interfaces/base-cache.ts (98%) rename {src => core/embedjs-interfaces/src}/interfaces/base-conversations.ts (86%) rename {src => core/embedjs-interfaces/src}/interfaces/base-db.ts (68%) rename {src => core/embedjs-interfaces/src}/interfaces/base-embeddings.ts (97%) rename {src => core/embedjs-interfaces/src}/interfaces/base-loader.ts (95%) rename {src => core/embedjs-interfaces/src}/interfaces/base-model.ts (94%) rename {src/global => core/embedjs-interfaces/src}/types.ts (96%) create mode 100644 core/embedjs-interfaces/tsconfig.cjs.json rename tsconfig.json => core/embedjs-interfaces/tsconfig.json (68%) create mode 100644 core/embedjs-interfaces/tsconfig.lib.json create mode 100644 core/embedjs-utils/CHANGELOG.md create mode 100644 core/embedjs-utils/README.md create mode 100644 core/embedjs-utils/eslint.config.js create mode 100644 core/embedjs-utils/package.json create mode 100644 core/embedjs-utils/project.json create mode 100644 core/embedjs-utils/src/index.ts rename {src => core/embedjs-utils/src}/util/arrays.ts (77%) rename {src => core/embedjs-utils/src}/util/log.ts (75%) rename {src => core/embedjs-utils/src}/util/stream.ts (88%) rename {src => core/embedjs-utils/src}/util/strings.ts (85%) create mode 100644 core/embedjs-utils/tsconfig.cjs.json create mode 100644 core/embedjs-utils/tsconfig.json create mode 100644 core/embedjs-utils/tsconfig.lib.json create mode 100644 core/embedjs/CHANGELOG.md create mode 100644 core/embedjs/README.md create mode 100644 core/embedjs/eslint.config.js create mode 100644 core/embedjs/package.json create mode 100644 core/embedjs/project.json rename {src => core/embedjs/src}/cache/memory-cache.ts (93%) rename {src => core/embedjs/src}/conversation/memory-conversations.ts (88%) rename {src => core/embedjs/src}/core/dynamic-loader-selector.ts (87%) rename {src => core/embedjs/src}/core/rag-application-builder.ts (87%) rename {src => core/embedjs/src}/core/rag-application.ts (94%) rename {src => core/embedjs/src}/core/rag-embedding.ts (85%) create mode 100644 core/embedjs/src/index.ts rename {src => core/embedjs/src}/loaders/json-loader.ts (86%) rename {src => core/embedjs/src}/loaders/local-path-loader.ts (89%) rename {src => core/embedjs/src}/loaders/text-loader.ts (83%) rename {src => core/embedjs/src}/loaders/url-loader.ts (85%) rename {src => core/embedjs/src}/util/mime.ts (76%) create mode 100644 core/embedjs/tsconfig.cjs.json create mode 100644 core/embedjs/tsconfig.json create mode 100644 core/embedjs/tsconfig.lib.json create mode 100644 databases/embedjs-astra/CHANGELOG.md create mode 100644 databases/embedjs-astra/README.md create mode 100644 databases/embedjs-astra/eslint.config.js create mode 100644 databases/embedjs-astra/package.json create mode 100644 databases/embedjs-astra/project.json rename {src/vectorDb => databases/embedjs-astra/src}/astra-db.ts (95%) create mode 100644 databases/embedjs-astra/src/index.ts create mode 100644 databases/embedjs-astra/tsconfig.cjs.json create mode 100644 databases/embedjs-astra/tsconfig.json create mode 100644 databases/embedjs-astra/tsconfig.lib.json create mode 100644 databases/embedjs-cosmos/CHANGELOG.md create mode 100644 databases/embedjs-cosmos/README.md create mode 100644 databases/embedjs-cosmos/eslint.config.js create mode 100644 databases/embedjs-cosmos/package.json create mode 100644 databases/embedjs-cosmos/project.json rename {src/vectorDb => databases/embedjs-cosmos/src}/cosmos-db.ts (95%) create mode 100644 databases/embedjs-cosmos/src/index.ts create mode 100644 databases/embedjs-cosmos/tsconfig.cjs.json create mode 100644 databases/embedjs-cosmos/tsconfig.json create mode 100644 databases/embedjs-cosmos/tsconfig.lib.json create mode 100644 databases/embedjs-hnswlib/CHANGELOG.md create mode 100644 databases/embedjs-hnswlib/README.md create mode 100644 databases/embedjs-hnswlib/eslint.config.js create mode 100644 databases/embedjs-hnswlib/package.json create mode 100644 databases/embedjs-hnswlib/project.json rename {src/vectorDb => databases/embedjs-hnswlib/src}/hnswlib-db.ts (87%) create mode 100644 databases/embedjs-hnswlib/src/index.ts create mode 100644 databases/embedjs-hnswlib/tsconfig.cjs.json create mode 100644 databases/embedjs-hnswlib/tsconfig.json create mode 100644 databases/embedjs-hnswlib/tsconfig.lib.json create mode 100644 databases/embedjs-lancedb/CHANGELOG.md create mode 100644 databases/embedjs-lancedb/README.md create mode 100644 databases/embedjs-lancedb/eslint.config.js create mode 100644 databases/embedjs-lancedb/package.json create mode 100644 databases/embedjs-lancedb/project.json create mode 100644 databases/embedjs-lancedb/src/index.ts rename {src/vectorDb => databases/embedjs-lancedb/src}/lance-db.ts (96%) create mode 100644 databases/embedjs-lancedb/tsconfig.cjs.json create mode 100644 databases/embedjs-lancedb/tsconfig.json create mode 100644 databases/embedjs-lancedb/tsconfig.lib.json create mode 100644 databases/embedjs-lmdb/CHANGELOG.md create mode 100644 databases/embedjs-lmdb/README.md create mode 100644 databases/embedjs-lmdb/eslint.config.js create mode 100644 databases/embedjs-lmdb/package.json create mode 100644 databases/embedjs-lmdb/project.json create mode 100644 databases/embedjs-lmdb/src/index.ts rename {src/cache => databases/embedjs-lmdb/src}/lmdb-cache.ts (83%) create mode 100644 databases/embedjs-lmdb/tsconfig.cjs.json create mode 100644 databases/embedjs-lmdb/tsconfig.json create mode 100644 databases/embedjs-lmdb/tsconfig.lib.json create mode 100644 databases/embedjs-mongodb/CHANGELOG.md create mode 100644 databases/embedjs-mongodb/README.md create mode 100644 databases/embedjs-mongodb/eslint.config.js create mode 100644 databases/embedjs-mongodb/package.json create mode 100644 databases/embedjs-mongodb/project.json create mode 100644 databases/embedjs-mongodb/src/index.ts rename {src/cache => databases/embedjs-mongodb/src}/mongo-cache.ts (95%) rename {src/conversation => databases/embedjs-mongodb/src}/mongo-conversations.ts (93%) rename {src/vectorDb => databases/embedjs-mongodb/src}/mongo-db.ts (95%) create mode 100644 databases/embedjs-mongodb/tsconfig.cjs.json create mode 100644 databases/embedjs-mongodb/tsconfig.json create mode 100644 databases/embedjs-mongodb/tsconfig.lib.json create mode 100644 databases/embedjs-pinecone/CHANGELOG.md create mode 100644 databases/embedjs-pinecone/README.md create mode 100644 databases/embedjs-pinecone/eslint.config.js create mode 100644 databases/embedjs-pinecone/package.json create mode 100644 databases/embedjs-pinecone/project.json create mode 100644 databases/embedjs-pinecone/src/index.ts rename {src/vectorDb => databases/embedjs-pinecone/src}/pinecone-db.ts (90%) create mode 100644 databases/embedjs-pinecone/tsconfig.cjs.json create mode 100644 databases/embedjs-pinecone/tsconfig.json create mode 100644 databases/embedjs-pinecone/tsconfig.lib.json create mode 100644 databases/embedjs-qdrant/CHANGELOG.md create mode 100644 databases/embedjs-qdrant/README.md create mode 100644 databases/embedjs-qdrant/eslint.config.js create mode 100644 databases/embedjs-qdrant/package.json create mode 100644 databases/embedjs-qdrant/project.json create mode 100644 databases/embedjs-qdrant/src/index.ts rename {src/vectorDb => databases/embedjs-qdrant/src}/qdrant-db.ts (90%) create mode 100644 databases/embedjs-qdrant/tsconfig.cjs.json create mode 100644 databases/embedjs-qdrant/tsconfig.json create mode 100644 databases/embedjs-qdrant/tsconfig.lib.json create mode 100644 databases/embedjs-redis/CHANGELOG.md create mode 100644 databases/embedjs-redis/README.md create mode 100644 databases/embedjs-redis/eslint.config.js create mode 100644 databases/embedjs-redis/package.json create mode 100644 databases/embedjs-redis/project.json create mode 100644 databases/embedjs-redis/src/index.ts rename {src/cache => databases/embedjs-redis/src}/redis-cache.ts (93%) create mode 100644 databases/embedjs-redis/tsconfig.cjs.json create mode 100644 databases/embedjs-redis/tsconfig.json create mode 100644 databases/embedjs-redis/tsconfig.lib.json create mode 100644 databases/embedjs-weaviate/CHANGELOG.md create mode 100644 databases/embedjs-weaviate/README.md create mode 100644 databases/embedjs-weaviate/eslint.config.js create mode 100644 databases/embedjs-weaviate/package.json create mode 100644 databases/embedjs-weaviate/project.json create mode 100644 databases/embedjs-weaviate/src/index.ts rename {src/vectorDb => databases/embedjs-weaviate/src}/weaviate-db.ts (94%) create mode 100644 databases/embedjs-weaviate/tsconfig.cjs.json create mode 100644 databases/embedjs-weaviate/tsconfig.json create mode 100644 databases/embedjs-weaviate/tsconfig.lib.json create mode 100644 eslint.config.js delete mode 100644 examples/chroma/example.env delete mode 100644 examples/chroma/package-lock.json delete mode 100644 examples/chroma/package.json delete mode 100644 examples/chroma/src/index.ts delete mode 100644 examples/chroma/tsconfig.json delete mode 100644 examples/cohere/example.env delete mode 100644 examples/cohere/package-lock.json delete mode 100644 examples/cohere/package.json delete mode 100644 examples/cohere/src/index.ts delete mode 100644 examples/cohere/tsconfig.json delete mode 100644 examples/ollama/README.md delete mode 100644 examples/ollama/package-lock.json delete mode 100644 examples/ollama/package.json delete mode 100644 examples/ollama/src/index.ts delete mode 100644 examples/ollama/tsconfig.json delete mode 100644 examples/pinecone/example.env delete mode 100644 examples/pinecone/package-lock.json delete mode 100644 examples/pinecone/package.json delete mode 100644 examples/pinecone/src/index.ts delete mode 100644 examples/pinecone/tsconfig.json delete mode 100644 examples/simple/example.env delete mode 100644 examples/simple/package-lock.json delete mode 100644 examples/simple/package.json delete mode 100644 examples/simple/src/index.ts delete mode 100644 examples/simple/tsconfig.json delete mode 100644 examples/vertexai/README.md delete mode 100644 examples/vertexai/example.env delete mode 100644 examples/vertexai/package-lock.json delete mode 100644 examples/vertexai/package.json delete mode 100644 examples/vertexai/src/index.ts delete mode 100644 examples/vertexai/tsconfig.json create mode 100644 loaders/embedjs-loader-confluence/CHANGELOG.md create mode 100644 loaders/embedjs-loader-confluence/README.md create mode 100644 loaders/embedjs-loader-confluence/eslint.config.js create mode 100644 loaders/embedjs-loader-confluence/package.json create mode 100644 loaders/embedjs-loader-confluence/project.json rename {src/loaders => loaders/embedjs-loader-confluence/src}/confluence-loader.ts (92%) create mode 100644 loaders/embedjs-loader-confluence/src/index.ts create mode 100644 loaders/embedjs-loader-confluence/tsconfig.cjs.json create mode 100644 loaders/embedjs-loader-confluence/tsconfig.json create mode 100644 loaders/embedjs-loader-confluence/tsconfig.lib.json create mode 100644 loaders/embedjs-loader-csv/CHANGELOG.md create mode 100644 loaders/embedjs-loader-csv/README.md create mode 100644 loaders/embedjs-loader-csv/eslint.config.js create mode 100644 loaders/embedjs-loader-csv/package.json create mode 100644 loaders/embedjs-loader-csv/project.json rename {src/loaders => loaders/embedjs-loader-csv/src}/csv-loader.ts (86%) create mode 100644 loaders/embedjs-loader-csv/src/index.ts create mode 100644 loaders/embedjs-loader-csv/tsconfig.cjs.json create mode 100644 loaders/embedjs-loader-csv/tsconfig.json create mode 100644 loaders/embedjs-loader-csv/tsconfig.lib.json create mode 100644 loaders/embedjs-loader-msoffice/CHANGELOG.md create mode 100644 loaders/embedjs-loader-msoffice/README.md create mode 100644 loaders/embedjs-loader-msoffice/eslint.config.js create mode 100644 loaders/embedjs-loader-msoffice/package.json create mode 100644 loaders/embedjs-loader-msoffice/project.json rename {src/loaders => loaders/embedjs-loader-msoffice/src}/docx-loader.ts (86%) rename {src/loaders => loaders/embedjs-loader-msoffice/src}/excel-loader.ts (86%) create mode 100644 loaders/embedjs-loader-msoffice/src/index.ts rename {src/loaders => loaders/embedjs-loader-msoffice/src}/ppt-loader.ts (86%) create mode 100644 loaders/embedjs-loader-msoffice/tsconfig.cjs.json create mode 100644 loaders/embedjs-loader-msoffice/tsconfig.json create mode 100644 loaders/embedjs-loader-msoffice/tsconfig.lib.json create mode 100644 loaders/embedjs-loader-pdf/CHANGELOG.md create mode 100644 loaders/embedjs-loader-pdf/README.md create mode 100644 loaders/embedjs-loader-pdf/eslint.config.js create mode 100644 loaders/embedjs-loader-pdf/package.json create mode 100644 loaders/embedjs-loader-pdf/project.json create mode 100644 loaders/embedjs-loader-pdf/src/index.ts rename {src/loaders => loaders/embedjs-loader-pdf/src}/pdf-loader.ts (86%) create mode 100644 loaders/embedjs-loader-pdf/tsconfig.cjs.json create mode 100644 loaders/embedjs-loader-pdf/tsconfig.json create mode 100644 loaders/embedjs-loader-pdf/tsconfig.lib.json create mode 100644 loaders/embedjs-loader-sitemap/CHANGELOG.md create mode 100644 loaders/embedjs-loader-sitemap/README.md create mode 100644 loaders/embedjs-loader-sitemap/eslint.config.js create mode 100644 loaders/embedjs-loader-sitemap/package.json create mode 100644 loaders/embedjs-loader-sitemap/project.json create mode 100644 loaders/embedjs-loader-sitemap/src/index.ts rename {src/loaders => loaders/embedjs-loader-sitemap/src}/sitemap-loader.ts (88%) create mode 100644 loaders/embedjs-loader-sitemap/tsconfig.cjs.json create mode 100644 loaders/embedjs-loader-sitemap/tsconfig.json create mode 100644 loaders/embedjs-loader-sitemap/tsconfig.lib.json create mode 100644 loaders/embedjs-loader-web/CHANGELOG.md create mode 100644 loaders/embedjs-loader-web/README.md create mode 100644 loaders/embedjs-loader-web/eslint.config.js create mode 100644 loaders/embedjs-loader-web/package.json create mode 100644 loaders/embedjs-loader-web/project.json create mode 100644 loaders/embedjs-loader-web/src/index.ts rename {src/loaders => loaders/embedjs-loader-web/src}/web-loader.ts (87%) create mode 100644 loaders/embedjs-loader-web/tsconfig.cjs.json create mode 100644 loaders/embedjs-loader-web/tsconfig.json create mode 100644 loaders/embedjs-loader-web/tsconfig.lib.json create mode 100644 loaders/embedjs-loader-youtube/CHANGELOG.md create mode 100644 loaders/embedjs-loader-youtube/README.md create mode 100644 loaders/embedjs-loader-youtube/eslint.config.js create mode 100644 loaders/embedjs-loader-youtube/package.json create mode 100644 loaders/embedjs-loader-youtube/project.json create mode 100644 loaders/embedjs-loader-youtube/src/index.ts rename {src/loaders => loaders/embedjs-loader-youtube/src}/youtube-channel-loader.ts (90%) rename {src/loaders => loaders/embedjs-loader-youtube/src}/youtube-loader.ts (88%) rename {src/loaders => loaders/embedjs-loader-youtube/src}/youtube-search-loader.ts (90%) create mode 100644 loaders/embedjs-loader-youtube/tsconfig.cjs.json create mode 100644 loaders/embedjs-loader-youtube/tsconfig.json create mode 100644 loaders/embedjs-loader-youtube/tsconfig.lib.json create mode 100644 models/embedjs-anthropic/CHANGELOG.md create mode 100644 models/embedjs-anthropic/README.md create mode 100644 models/embedjs-anthropic/eslint.config.js create mode 100644 models/embedjs-anthropic/package.json create mode 100644 models/embedjs-anthropic/project.json rename {src/models => models/embedjs-anthropic/src}/anthropic-model.ts (87%) create mode 100644 models/embedjs-anthropic/src/index.ts create mode 100644 models/embedjs-anthropic/tsconfig.cjs.json create mode 100644 models/embedjs-anthropic/tsconfig.json create mode 100644 models/embedjs-anthropic/tsconfig.lib.json create mode 100644 models/embedjs-cohere/CHANGELOG.md create mode 100644 models/embedjs-cohere/README.md create mode 100644 models/embedjs-cohere/eslint.config.js create mode 100644 models/embedjs-cohere/package.json create mode 100644 models/embedjs-cohere/project.json rename {src/embeddings => models/embedjs-cohere/src}/cohere-embeddings.ts (87%) create mode 100644 models/embedjs-cohere/src/index.ts create mode 100644 models/embedjs-cohere/tsconfig.cjs.json create mode 100644 models/embedjs-cohere/tsconfig.json create mode 100644 models/embedjs-cohere/tsconfig.lib.json create mode 100644 models/embedjs-huggingface/CHANGELOG.md create mode 100644 models/embedjs-huggingface/README.md create mode 100644 models/embedjs-huggingface/eslint.config.js create mode 100644 models/embedjs-huggingface/package.json create mode 100644 models/embedjs-huggingface/project.json rename {src/models => models/embedjs-huggingface/src}/huggingface-model.ts (87%) create mode 100644 models/embedjs-huggingface/src/index.ts create mode 100644 models/embedjs-huggingface/tsconfig.cjs.json create mode 100644 models/embedjs-huggingface/tsconfig.json create mode 100644 models/embedjs-huggingface/tsconfig.lib.json create mode 100644 models/embedjs-mistral/CHANGELOG.md create mode 100644 models/embedjs-mistral/README.md create mode 100644 models/embedjs-mistral/eslint.config.js create mode 100644 models/embedjs-mistral/package.json create mode 100644 models/embedjs-mistral/project.json create mode 100644 models/embedjs-mistral/src/index.ts rename {src/models => models/embedjs-mistral/src}/mistral-model.ts (85%) create mode 100644 models/embedjs-mistral/tsconfig.cjs.json create mode 100644 models/embedjs-mistral/tsconfig.json create mode 100644 models/embedjs-mistral/tsconfig.lib.json create mode 100644 models/embedjs-ollama/CHANGELOG.md create mode 100644 models/embedjs-ollama/README.md create mode 100644 models/embedjs-ollama/eslint.config.js create mode 100644 models/embedjs-ollama/package.json create mode 100644 models/embedjs-ollama/project.json create mode 100644 models/embedjs-ollama/src/index.ts rename {src/embeddings => models/embedjs-ollama/src}/ollama-embeddings.ts (73%) rename {src/models => models/embedjs-ollama/src}/ollama-model.ts (82%) create mode 100644 models/embedjs-ollama/tsconfig.cjs.json create mode 100644 models/embedjs-ollama/tsconfig.json create mode 100644 models/embedjs-ollama/tsconfig.lib.json create mode 100644 models/embedjs-openai/CHANGELOG.md create mode 100644 models/embedjs-openai/README.md create mode 100644 models/embedjs-openai/eslint.config.js create mode 100644 models/embedjs-openai/package.json create mode 100644 models/embedjs-openai/project.json rename {src/embeddings => models/embedjs-openai/src}/ada-embeddings.ts (89%) create mode 100644 models/embedjs-openai/src/index.ts rename {src/embeddings => models/embedjs-openai/src}/openai-3large-embeddings.ts (91%) rename {src/embeddings => models/embedjs-openai/src}/openai-3small-embeddings.ts (90%) rename {src/models => models/embedjs-openai/src}/openai-model.ts (88%) create mode 100644 models/embedjs-openai/tsconfig.cjs.json create mode 100644 models/embedjs-openai/tsconfig.json create mode 100644 models/embedjs-openai/tsconfig.lib.json create mode 100644 models/embedjs-vertexai/CHANGELOG.md create mode 100644 models/embedjs-vertexai/README.md create mode 100644 models/embedjs-vertexai/eslint.config.js create mode 100644 models/embedjs-vertexai/package.json create mode 100644 models/embedjs-vertexai/project.json rename {src/embeddings => models/embedjs-vertexai/src}/gecko-embeddings.ts (87%) create mode 100644 models/embedjs-vertexai/src/index.ts rename {src/models => models/embedjs-vertexai/src}/vertexai-model.ts (85%) create mode 100644 models/embedjs-vertexai/tsconfig.cjs.json create mode 100644 models/embedjs-vertexai/tsconfig.json create mode 100644 models/embedjs-vertexai/tsconfig.lib.json create mode 100644 nx.json create mode 100644 scripts/publish-via-nx.js delete mode 100644 src/index.ts delete mode 100644 src/vectorDb/chroma-db.ts create mode 100644 tsconfig.base.json delete mode 100644 tsconfig.cjs.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..9b735217 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index b52b3ef5..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname, - sourceType: 'module', - }, - plugins: ['@typescript-eslint/eslint-plugin'], - extends: ['plugin:@typescript-eslint/recommended'], - root: true, - env: { - node: true, - jest: true, - }, - ignorePatterns: ['.eslintrc.js'], - rules: { - '@typescript-eslint/interface-name-prefix': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/ban-types': ['error', { types: { Function: false }, extendDefaults: true }], - '@typescript-eslint/ban-ts-comment': 'off', - }, -}; diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 15abeb79..a76fbd9d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,4 +20,4 @@ jobs: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npm ci - - run: npm run build --if-present + - run: npm run build:esm diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..c47c50af --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,43 @@ +name: Publish + +on: + #Run manually using the GitHub Actions UI + workflow_dispatch: + + #When a new release is published + release: + types: [published] + +jobs: + test: + name: Publish + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write # needed for provenance data generation + timeout-minutes: 10 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version: 22 + registry-url: https://registry.npmjs.org/ + + - name: Install dependencies + run: npm ci + + - name: Print Environment Info + run: npx nx report + shell: bash + + - name: Publish packages + run: npx nx release publish + shell: bash + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }} + NPM_CONFIG_PROVENANCE: true diff --git a/.gitignore b/.gitignore index 204d780d..759d17e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,153 +1,65 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -#Application specific -other/ - -#build folders -build/ -dist/ - -#databases -local.db -data/ -mysql/ -postgres/ -mariadb/ -redis/ -nats/ -db/ -keys/ -kafka/ -zookeeper/ -acme.json -temp/ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +dist +tmp +/out-tsc + +# dependencies +node_modules + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db + +.nx/cache +.nx/workspace-data + +#Application specific +other/ + +#build folders +build/ +dist/ + +#databases +local.db +data/ +mysql/ +postgres/ +mariadb/ +redis/ +nats/ +db/ +keys/ +kafka/ +zookeeper/ +acme.json +temp/ storage/ \ No newline at end of file diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 00000000..df6e5e87 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx --no-install --yes commitlint --edit $1 diff --git a/.prettierignore b/.prettierignore index e69de29b..e26f0b3f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -0,0 +1,5 @@ +# Add files here to ignore them from prettier formatting +/dist +/coverage +/.nx/cache +/.nx/workspace-data \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 91975b62..8b50b90d 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,7 +1,7 @@ -{ - "singleQuote": true, - "trailingComma": "all", - "semi": true, - "printWidth": 120, - "tabWidth": 4 -} +{ + "singleQuote": true, + "trailingComma": "all", + "semi": true, + "printWidth": 120, + "tabWidth": 4 +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..04521d12 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["nrwl.angular-console", "esbenp.prettier-vscode"] +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e93c3b46..28a86d7a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ To make a contribution, please follow these steps: 1. Fork and clone this repository 2. Do the changes on your fork with dedicated feature branch `feature/f1` 3. Include proper documentation and examples to run the feature -4. Verify the build is working using `npm run build:local` +4. Verify the build is working using `npm run build:pipeline` 5. Submit a pull request For more details about pull requests, please read [GitHub's guides](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request). diff --git a/README.md b/README.md index 6a8475df..0bf37efe 100644 --- a/README.md +++ b/README.md @@ -133,8 +133,6 @@ You can install the library via NPM or Yarn npm i @llm-tools/embedjs ``` -**Note:** The library uses the newer ES6 modules and `import` syntax. - ## Usage To configure a new EmbedJs application, you need to do three steps - @@ -280,7 +278,15 @@ Loaders take a specific format, process the input and create chunks of the data. ## Youtube video -To add any youtube video to your app, use `YoutubeLoader`. +To add any youtube video to your app, follow these steps - + +- Install Youtube loader package in your project + +```bash +npm install @llm-tools/embedjs-loader-youtube +``` + +- Now you can use the `YoutubeLoader` ```TS .addLoader(new YoutubeLoader({ videoIdOrUrl: 'w2KbwC-s7pY' })) @@ -288,7 +294,15 @@ To add any youtube video to your app, use `YoutubeLoader`. ## Youtube channel -To add all videos in a youtube channel, use `YoutubeChannelLoader`. +To add all videos in a youtube channel, follow these steps - + +- Install Youtube loader package in your project + +```bash +npm install @llm-tools/embedjs-loader-youtube +``` + +- Now you can use the `YoutubeChannelLoader` ```TS .addLoader(new YoutubeChannelLoader({ youtubeChannelId: '...' })) @@ -296,7 +310,15 @@ To add all videos in a youtube channel, use `YoutubeChannelLoader`. ## Youtube search -To do a general youtube search and add the popular search results, use `YoutubeSearchLoader`. +To do a general youtube search and add the popular search results, follow these steps - + +- Install Youtube loader package in your project + +```bash +npm install @llm-tools/embedjs-loader-youtube +``` + +- Now you can use the `YoutubeSearchLoader` ```TS .addLoader(new YoutubeSearchLoader({ youtubeSearchString: '...' })) @@ -304,7 +326,13 @@ To do a general youtube search and add the popular search results, use `YoutubeS ## PDF file -To add a pdf file, use `PdfLoader`. You can add a local file - +To add a pdf file, use `PdfLoader`. To get started, install the PdfLoader addon - + +```bash +npm install @llm-tools/embedjs-loader-pdf +``` + +Now, you can add a local file - ```TS .addLoader(new PdfLoader({ filePathOrUrl: path.resolve('paxos-simple.pdf') })) @@ -320,7 +348,13 @@ Or, you can add a remote file - ## Docx file -To add a docx file, use `DocxLoader`. You can add a local file - +To add a docx file, use `DocxLoader`. To get started, install the MSOffice loader addon - + +```bash +npm install @llm-tools/embedjs-loader-msoffice +``` + +Now, you can add a local file - ```TS .addLoader(new DocxLoader({ filePathOrUrl: path.resolve('paxos.docx') })) @@ -334,7 +368,13 @@ Or, you can add a remote file - ## Excel file -To add an excel xlsx file, use `ExcelLoader`. You can add a local file - +To add an excel xlsx file, use `ExcelLoader`. To get started, install the MSOffice loader addon - + +```bash +npm install @llm-tools/embedjs-loader-msoffice +``` + +Now, you can add a local file - ```TS .addLoader(new ExcelLoader({ filePathOrUrl: path.resolve('numbers.xlsx') })) @@ -348,7 +388,13 @@ Or, you can add a remote file - ## Powerpoint file -To add an powerpoint / pptx file, use `PptLoader`. You can add a local file - +To add an powerpoint / pptx file, use `PptLoader`. To get started, install the MSOffice loader addon - + +```bash +npm install @llm-tools/embedjs-loader-msoffice +``` + +Now, you can add a local file - ```TS .addLoader(new PptLoader({ filePathOrUrl: path.resolve('wow.pptx') })) @@ -362,7 +408,15 @@ Or, you can add a remote file - ## Web page -To add a web page, use `WebLoader`. +To add a web page, follow these steps - + +- Install Web loader addon in your project + +```bash +npm install @llm-tools/embedjs-loader-web +``` + +- Now you can use the `WebLoader` ```TS .addLoader(new WebLoader({ urlOrContent: 'https://en.wikipedia.org/wiki/Formula_One' })) @@ -370,13 +424,15 @@ To add a web page, use `WebLoader`. ## Confluence -To add a confluence space, use `ConfluenceLoader`. +To add a confluence space, follow these steps - -```TS -.addLoader(new ConfluenceLoader({ spaceNames: ['...'] })) +- Install the Confluence loader addon in your project + +```bash +npm install @llm-tools/embedjs-loader-confluence ``` -You also need to set the following environment variables - +- set the following environment variables - ```bash CONFLUENCE_BASE_URL= @@ -386,9 +442,23 @@ CONFLUENCE_API_TOKEN= **Note:** The confluence space name is the value you see in the url in the space overview page `/wiki/spaces/{{ space name }}/overview`. +- Now you can use the `ConfluenceLoader` + +```TS +.addLoader(new ConfluenceLoader({ spaceNames: ['...'] })) +``` + ## Sitemap -To add a XML sitemap, use `SitemapLoader`. +To add a XML sitemap, follow these steps - + +- Install the Sitemap loader addon in your project + +```bash +npm install @llm-tools/embedjs-loader-sitemap +``` + +- Now you can use the `SitemapLoader` ```TS .addLoader(new SitemapLoader({ url: '...' })) @@ -418,7 +488,15 @@ To add a parsed Javascript object to your embeddings, use `JsonLoader`. The libr ## Csv -To add a Csv file (or URL) to your embeddings, use `CsvLoader`. The library will parse the Csv and add each row to its vector database. +To add a Csv file (or URL) to your embeddings, use `CsvLoader`. The library will parse the Csv and add each row to its vector database. To get started, follow these steps - + +- Install the Csv loader addon in your project + +```bash +npm install @llm-tools/embedjs-loader-csv +``` + +- Now you can use the `CsvLoader` like so - ```TS .addLoader(new CsvLoader({ filePathOrUrl: '...' })) @@ -462,7 +540,13 @@ The first step is to obtain an API Key from OpenAI. You can do this by visiting OPENAI_API_KEY="" ``` -Once this is done, it is relatively easy to run OpenAI LLMs. All you need is to indicate the model type you want to run. +Next, you need to install the OpenAI addon - + +```bash +npm install @llm-tools/embedjs-openai +``` + +Once these two steps are done, it is relatively easy to run OpenAI LLMs. All you need is to indicate the model type you want to run. - For GPT 3.5 Turbo @@ -491,7 +575,7 @@ const ragApplication = await new RAGApplicationBuilder() In order to be able to use an OpenAI model on Azure, it first needs to be deployed. Please refer to [Azure OpenAI documentation](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/) on how to deploy a model on Azure. To run this library, you will need to deploy two models - -- text-embedding-ada +- text-embedding-ada (or any of the newer models) - GPT-3.5-turbo (or the 4 series) Once these models are deployed, using Azure OpenAI instead of the regular OpenAI is easy to do. Just follow these steps - @@ -515,11 +599,17 @@ AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME=text-embedding-ada-002 AZURE_OPENAI_API_DEPLOYMENT_NAME=gpt-35-turbo ``` -You can all set and can now run the Azure OpenAI LLMs using the [`OpenAi` model](#openai) steps detailed above. +You are now all set and can now run the Azure OpenAI LLMs using the [`OpenAi` model](#openai) steps detailed above. ## Mistral -To use Mirstal's models, you will need to get an API Key from Mistral. You can do this from their [console](https://console.mistral.ai/user/api-keys/). Once you have obtained a key, set Mistral as your LLM of choice - +To use Mirstal's models, you will need to get an API Key from Mistral. You can do this from their [console](https://console.mistral.ai/user/api-keys/). Next, you need to install the Mistral addon to embedJs - + +```bash +npm install @llm-tools/embedjs-mistral +``` + +Once these steps are complete, set Mistral as your LLM of choice - ```TS const ragApplication = await new RAGApplicationBuilder() @@ -545,7 +635,13 @@ You can get an API Token by signing up for hugging face and generate a token fro HUGGINGFACEHUB_API_KEY="" ``` -That's all, now you can use any hugging face model. To do this set `HuggingFace` as your model processor of choice - +Next you need to install the hugging face addon for embedJs - + +```bash +npm install @llm-tools/embedjs-huggingface +``` + +That's all, now you can use any of the hugging face models. To do this set `HuggingFace` as your model processor of choice - ```TS const ragApplication = await new RAGApplicationBuilder() @@ -564,7 +660,13 @@ To use Anthropic's Claude models, you will need to get an API Key from Anthropic ANTHROPIC_API_KEY="" ``` -Once this is done, it is relatively easy to use Anthropic's Claude in your RAG application. Simply set Anthropic as your LLM of choice - +Next, you need to install the Anthropic extension for embedJs like so - + +```bash +npm install @llm-tools/embedjs-anthropic +``` + +Once these are done, it is relatively easy to use Anthropic's Claude in your RAG application. Simply set Anthropic as your LLM of choice - ```TS const ragApplication = await new RAGApplicationBuilder() @@ -598,7 +700,13 @@ gcloud auth application-default login GOOGLE_APPLICATION_CREDENTIALS="" ``` -Once done, all you need to do is set the model to `VertexAI`. Here's an example - +- Install the vertex ai addon for embedJs + +```bash +npm install @llm-tools/embedjs-vertexai +``` + +Now all you need to do is set the model to `VertexAI`. Here's an example - ```TS const ragApplication = await new RAGApplicationBuilder() @@ -614,7 +722,13 @@ See also `/examples/vertexai` for [further documentation](/examples/vertexai/REA You can also use locally running Ollama models. Installation instructions for Ollama can be found [here](https://ollama.com/). -Once Ollama is installed, you can start a local LLM by executing `ollama run `. Once this is done, you can use that in the `Ollama` constructor by passing the `modelName` parameter. Here's an example - +Once Ollama is installed, you can start a local LLM by executing `ollama run `. Next to be able to use Ollama in embedJs, install the Ollama addon - + +```bash +npm install @llm-tools/embedjs-ollama +``` + +Once this is done, you can use that in the `Ollama` constructor by passing the `modelName` parameter. Here's an example - ```TS const ragApplication = await new RAGApplicationBuilder() @@ -848,6 +962,8 @@ In this case, the `path` property is used as a prefix to create the temporary di ## Chroma +**Note:** The chroma addon is currently not published / supported. There are some type issues in the upstream dependencies that are being resolved. + [Chroma](https://trychroma.com/) is an open source vector database. It's designed to be Python first and to connect to it from NodeJS, you will need to run Chroma in a container following the steps [listed here](https://docs.trychroma.com/deployment). Once done, follow these steps to use Chroma as your vector database - - Install Chroma package in your project diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 00000000..3f5e287f --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1 @@ +export default { extends: ['@commitlint/config-conventional'] }; diff --git a/core/embedjs-interfaces/CHANGELOG.md b/core/embedjs-interfaces/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/core/embedjs-interfaces/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/core/embedjs-interfaces/README.md b/core/embedjs-interfaces/README.md new file mode 100644 index 00000000..da5f3c65 --- /dev/null +++ b/core/embedjs-interfaces/README.md @@ -0,0 +1,8 @@ +# embedjs-interfaces + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/core/embedjs-interfaces/eslint.config.js b/core/embedjs-interfaces/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/core/embedjs-interfaces/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/core/embedjs-interfaces/package.json b/core/embedjs-interfaces/package.json new file mode 100644 index 00000000..a966f85b --- /dev/null +++ b/core/embedjs-interfaces/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-interfaces", + "version": "0.0.1", + "description": "Interfaces for extending the embedjs ecosystem", + "dependencies": { + "uuid": "^10.0.0", + "debug": "^4.3.7", + "md5": "^2.3.0" + }, + "type": "module", + "main": "./src/index.js", + "typings": "./src/index.d.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/core/embedjs-interfaces/project.json b/core/embedjs-interfaces/project.json new file mode 100644 index 00000000..6353af15 --- /dev/null +++ b/core/embedjs-interfaces/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-interfaces", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "core/embedjs-interfaces/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-interfaces", + "main": "core/embedjs-interfaces/src/index.ts", + "tsConfig": "core/embedjs-interfaces/tsconfig.lib.json", + "assets": ["core/embedjs-interfaces/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-interfaces", + "main": "core/embedjs-interfaces/src/index.ts", + "tsConfig": "core/embedjs-interfaces/tsconfig.cjs.json" + } + } + } +} diff --git a/src/global/constants.ts b/core/embedjs-interfaces/src/constants.ts similarity index 95% rename from src/global/constants.ts rename to core/embedjs-interfaces/src/constants.ts index 7fcddb0f..a9150ccb 100644 --- a/src/global/constants.ts +++ b/core/embedjs-interfaces/src/constants.ts @@ -1,7 +1,7 @@ -export const DEFAULT_INSERT_BATCH_SIZE = 500; - -export enum SIMPLE_MODELS { - 'OPENAI_GPT3.5_TURBO', - 'OPENAI_GPT4_TURBO', - 'OPENAI_GPT4_O', -} +export const DEFAULT_INSERT_BATCH_SIZE = 500; + +export enum SIMPLE_MODELS { + 'OPENAI_GPT3.5_TURBO', + 'OPENAI_GPT4_TURBO', + 'OPENAI_GPT4_O', +} diff --git a/core/embedjs-interfaces/src/index.ts b/core/embedjs-interfaces/src/index.ts new file mode 100644 index 00000000..f23f0b1d --- /dev/null +++ b/core/embedjs-interfaces/src/index.ts @@ -0,0 +1,10 @@ +import { BaseLoader } from './interfaces/base-loader.js'; +import { BaseDb } from './interfaces/base-db.js'; +import { BaseEmbeddings } from './interfaces/base-embeddings.js'; +import { BaseCache } from './interfaces/base-cache.js'; +import { BaseModel } from './interfaces/base-model.js'; +import { BaseConversation } from './interfaces/base-conversations.js'; + +export * from './types.js'; +export * from './constants.js'; +export { BaseDb, BaseCache, BaseLoader, BaseEmbeddings, BaseModel, BaseConversation }; diff --git a/src/interfaces/base-cache.ts b/core/embedjs-interfaces/src/interfaces/base-cache.ts similarity index 98% rename from src/interfaces/base-cache.ts rename to core/embedjs-interfaces/src/interfaces/base-cache.ts index 8d430439..662c7cb2 100644 --- a/src/interfaces/base-cache.ts +++ b/core/embedjs-interfaces/src/interfaces/base-cache.ts @@ -1,12 +1,12 @@ -export interface BaseCache { - init(): Promise; - addLoader(loaderId: string, chunkCount: number): Promise; - getLoader(loaderId: string): Promise<{ chunkCount: number }>; - hasLoader(loaderId: string): Promise; - deleteLoader(loaderId: string): Promise; - - loaderCustomSet>(loaderCombinedId: string, value: T): Promise; - loaderCustomGet>(loaderCombinedId: string): Promise; - loaderCustomHas(loaderCombinedId: string): Promise; - loaderCustomDelete(loaderCombinedId: string): Promise; -} +export interface BaseCache { + init(): Promise; + addLoader(loaderId: string, chunkCount: number): Promise; + getLoader(loaderId: string): Promise<{ chunkCount: number }>; + hasLoader(loaderId: string): Promise; + deleteLoader(loaderId: string): Promise; + + loaderCustomSet>(loaderCombinedId: string, value: T): Promise; + loaderCustomGet>(loaderCombinedId: string): Promise; + loaderCustomHas(loaderCombinedId: string): Promise; + loaderCustomDelete(loaderCombinedId: string): Promise; +} diff --git a/src/interfaces/base-conversations.ts b/core/embedjs-interfaces/src/interfaces/base-conversations.ts similarity index 86% rename from src/interfaces/base-conversations.ts rename to core/embedjs-interfaces/src/interfaces/base-conversations.ts index 9dc2e1c9..2c300fdb 100644 --- a/src/interfaces/base-conversations.ts +++ b/core/embedjs-interfaces/src/interfaces/base-conversations.ts @@ -1,11 +1,11 @@ -import { Conversation, Message } from '../global/types.js'; - -export interface BaseConversation { - init(): Promise; - addConversation(conversationId: string): Promise; - getConversation(conversationId: string): Promise; - hasConversation(conversationId: string): Promise; - deleteConversation(conversationId: string): Promise; - addEntryToConversation(conversationId: string, entry: Message): Promise; - clearConversations(): Promise; -} +import { Conversation, Message } from '../types.js'; + +export interface BaseConversation { + init(): Promise; + addConversation(conversationId: string): Promise; + getConversation(conversationId: string): Promise; + hasConversation(conversationId: string): Promise; + deleteConversation(conversationId: string): Promise; + addEntryToConversation(conversationId: string, entry: Message): Promise; + clearConversations(): Promise; +} diff --git a/src/interfaces/base-db.ts b/core/embedjs-interfaces/src/interfaces/base-db.ts similarity index 68% rename from src/interfaces/base-db.ts rename to core/embedjs-interfaces/src/interfaces/base-db.ts index cba3aab9..b494a186 100644 --- a/src/interfaces/base-db.ts +++ b/core/embedjs-interfaces/src/interfaces/base-db.ts @@ -1,11 +1,11 @@ -import { ExtractChunkData, InsertChunkData } from '../global/types.js'; - -export interface BaseDb { - init({}: { dimensions: number }): Promise; - insertChunks(chunks: InsertChunkData[]): Promise; - similaritySearch(query: number[], k: number): Promise; - getVectorCount(): Promise; - - deleteKeys(uniqueLoaderId: string): Promise; - reset(): Promise; -} +import { ExtractChunkData, InsertChunkData } from '../types.js'; + +export interface BaseDb { + init({ dimensions }: { dimensions: number }): Promise; + insertChunks(chunks: InsertChunkData[]): Promise; + similaritySearch(query: number[], k: number): Promise; + getVectorCount(): Promise; + + deleteKeys(uniqueLoaderId: string): Promise; + reset(): Promise; +} diff --git a/src/interfaces/base-embeddings.ts b/core/embedjs-interfaces/src/interfaces/base-embeddings.ts similarity index 97% rename from src/interfaces/base-embeddings.ts rename to core/embedjs-interfaces/src/interfaces/base-embeddings.ts index 541c1131..ddfca1ca 100644 --- a/src/interfaces/base-embeddings.ts +++ b/core/embedjs-interfaces/src/interfaces/base-embeddings.ts @@ -1,5 +1,5 @@ -export interface BaseEmbeddings { - embedDocuments(texts: string[]): Promise; - embedQuery(text: string): Promise; - getDimensions(): Promise; -} +export interface BaseEmbeddings { + embedDocuments(texts: string[]): Promise; + embedQuery(text: string): Promise; + getDimensions(): Promise; +} diff --git a/src/interfaces/base-loader.ts b/core/embedjs-interfaces/src/interfaces/base-loader.ts similarity index 95% rename from src/interfaces/base-loader.ts rename to core/embedjs-interfaces/src/interfaces/base-loader.ts index 20596130..04e4f1e3 100644 --- a/src/interfaces/base-loader.ts +++ b/core/embedjs-interfaces/src/interfaces/base-loader.ts @@ -1,151 +1,151 @@ -import md5 from 'md5'; -import createDebugMessages from 'debug'; -import { EventEmitter } from 'node:events'; - -import { LoaderChunk, LoaderList, UnfilteredLoaderChunk } from '../global/types.js'; -import { BaseCache } from './base-cache.js'; - -export abstract class BaseLoader< - T extends Record = Record, - M extends Record = Record, -> extends EventEmitter { - private static cache?: Pick< - BaseCache, - 'loaderCustomDelete' | 'loaderCustomGet' | 'loaderCustomHas' | 'loaderCustomSet' - >; - private static readonly LOADERS_LIST_CACHE_KEY = 'LOADERS_LIST_CACHE_KEY'; - - public static setCache(cache?: BaseCache) { - BaseLoader.cache = cache; - } - - private static async recordLoaderInCache( - loaderName: string, - uniqueId: string, - loaderMetadata: Record, - ) { - if (!BaseLoader.cache) return; - - if (await BaseLoader.cache.loaderCustomHas(BaseLoader.LOADERS_LIST_CACHE_KEY)) { - const current = await BaseLoader.cache.loaderCustomGet<{ list: LoaderList }>( - BaseLoader.LOADERS_LIST_CACHE_KEY, - ); - - current.list.push({ - type: loaderName, - uniqueId, - loaderMetadata, - }); - - current.list = [...new Map(current.list.map((item) => [item.uniqueId, item])).values()]; - BaseLoader.cache.loaderCustomSet(BaseLoader.LOADERS_LIST_CACHE_KEY, current); - } else { - BaseLoader.cache.loaderCustomSet<{ list: LoaderList }>(BaseLoader.LOADERS_LIST_CACHE_KEY, { - list: [ - { - type: loaderName, - uniqueId, - loaderMetadata, - }, - ], - }); - } - } - - public static async getLoadersList() { - if (!BaseLoader.cache) return null; - - if (await BaseLoader.cache.loaderCustomHas(BaseLoader.LOADERS_LIST_CACHE_KEY)) { - const current = await BaseLoader.cache.loaderCustomGet<{ list: LoaderList }>( - BaseLoader.LOADERS_LIST_CACHE_KEY, - ); - - return current.list; - } else return []; - } - - protected readonly uniqueId: string; - private readonly _canIncrementallyLoad: boolean; - protected readonly chunkOverlap: number; - protected readonly chunkSize: number; - - constructor( - uniqueId: string, - loaderMetadata: Record, - chunkSize: number = 5, - chunkOverlap: number = 0, - canIncrementallyLoad: boolean = false, - ) { - super(); - - this.uniqueId = uniqueId; - this._canIncrementallyLoad = canIncrementallyLoad; - this.chunkOverlap = chunkOverlap; - this.chunkSize = chunkSize; - - BaseLoader.recordLoaderInCache(this.constructor.name, uniqueId, loaderMetadata); - createDebugMessages('embedjs:loader:BaseLoader')(`New loader class initalized with key ${uniqueId}`); - } - - public async init(): Promise {} - - public get canIncrementallyLoad() { - return this._canIncrementallyLoad; - } - - public getUniqueId(): string { - return this.uniqueId; - } - - private getCustomCacheKey(key: string) { - return `LOADER_CUSTOM_${this.uniqueId}_${key}`; - } - - protected async checkInCache(key: string) { - if (!BaseLoader.cache) return false; - return BaseLoader.cache.loaderCustomHas(this.getCustomCacheKey(key)); - } - - protected async getFromCache(key: string) { - if (!BaseLoader.cache) return null; - return BaseLoader.cache.loaderCustomGet(this.getCustomCacheKey(key)); - } - - protected async saveToCache(key: string, value: M) { - if (!BaseLoader.cache) return; - await BaseLoader.cache.loaderCustomSet(this.getCustomCacheKey(key), value); - } - - protected async deleteFromCache(key: string) { - if (!BaseLoader.cache) return false; - return BaseLoader.cache.loaderCustomDelete(this.getCustomCacheKey(key)); - } - - protected async loadIncrementalChunk(incrementalGenerator: AsyncGenerator, void, void>) { - this.emit('incrementalChunkAvailable', incrementalGenerator); - } - - /** - * This TypeScript function asynchronously processes chunks of data, cleans up the content, - * calculates a content hash, and yields the modified chunks. - */ - public async *getChunks(): AsyncGenerator, void, void> { - const chunks = await this.getUnfilteredChunks(); - - for await (const chunk of chunks) { - chunk.pageContent = chunk.pageContent - .replace(/(\r\n|\n|\r)/gm, ' ') - .replace(/\s\s+/g, ' ') - .trim(); - - if (chunk.pageContent.length > 0) { - yield { - ...chunk, - contentHash: md5(chunk.pageContent), - }; - } - } - } - - abstract getUnfilteredChunks(): AsyncGenerator, void, void>; -} +import md5 from 'md5'; +import createDebugMessages from 'debug'; +import { EventEmitter } from 'node:events'; + +import { BaseCache } from './base-cache.js'; +import { LoaderList, LoaderChunk, UnfilteredLoaderChunk } from '../types.js'; + +export abstract class BaseLoader< + T extends Record = Record, + M extends Record = Record, +> extends EventEmitter { + private static cache?: Pick< + BaseCache, + 'loaderCustomDelete' | 'loaderCustomGet' | 'loaderCustomHas' | 'loaderCustomSet' + >; + private static readonly LOADERS_LIST_CACHE_KEY = 'LOADERS_LIST_CACHE_KEY'; + + public static setCache(cache?: BaseCache) { + BaseLoader.cache = cache; + } + + private static async recordLoaderInCache( + loaderName: string, + uniqueId: string, + loaderMetadata: Record, + ) { + if (!BaseLoader.cache) return; + + if (await BaseLoader.cache.loaderCustomHas(BaseLoader.LOADERS_LIST_CACHE_KEY)) { + const current = await BaseLoader.cache.loaderCustomGet<{ list: LoaderList }>( + BaseLoader.LOADERS_LIST_CACHE_KEY, + ); + + current.list.push({ + type: loaderName, + uniqueId, + loaderMetadata, + }); + + current.list = [...new Map(current.list.map((item) => [item.uniqueId, item])).values()]; + BaseLoader.cache.loaderCustomSet(BaseLoader.LOADERS_LIST_CACHE_KEY, current); + } else { + BaseLoader.cache.loaderCustomSet<{ list: LoaderList }>(BaseLoader.LOADERS_LIST_CACHE_KEY, { + list: [ + { + type: loaderName, + uniqueId, + loaderMetadata, + }, + ], + }); + } + } + + public static async getLoadersList() { + if (!BaseLoader.cache) return null; + + if (await BaseLoader.cache.loaderCustomHas(BaseLoader.LOADERS_LIST_CACHE_KEY)) { + const current = await BaseLoader.cache.loaderCustomGet<{ list: LoaderList }>( + BaseLoader.LOADERS_LIST_CACHE_KEY, + ); + + return current.list; + } else return []; + } + + protected readonly uniqueId: string; + private readonly _canIncrementallyLoad: boolean; + protected readonly chunkOverlap: number; + protected readonly chunkSize: number; + + constructor( + uniqueId: string, + loaderMetadata: Record, + chunkSize: number = 5, + chunkOverlap: number = 0, + canIncrementallyLoad: boolean = false, + ) { + super(); + + this.uniqueId = uniqueId; + this._canIncrementallyLoad = canIncrementallyLoad; + this.chunkOverlap = chunkOverlap; + this.chunkSize = chunkSize; + + BaseLoader.recordLoaderInCache(this.constructor.name, uniqueId, loaderMetadata); + createDebugMessages('embedjs:loader:BaseLoader')(`New loader class initalized with key ${uniqueId}`); + } + + public async init(): Promise {} + + public get canIncrementallyLoad() { + return this._canIncrementallyLoad; + } + + public getUniqueId(): string { + return this.uniqueId; + } + + private getCustomCacheKey(key: string) { + return `LOADER_CUSTOM_${this.uniqueId}_${key}`; + } + + protected async checkInCache(key: string) { + if (!BaseLoader.cache) return false; + return BaseLoader.cache.loaderCustomHas(this.getCustomCacheKey(key)); + } + + protected async getFromCache(key: string) { + if (!BaseLoader.cache) return null; + return BaseLoader.cache.loaderCustomGet(this.getCustomCacheKey(key)); + } + + protected async saveToCache(key: string, value: M) { + if (!BaseLoader.cache) return; + await BaseLoader.cache.loaderCustomSet(this.getCustomCacheKey(key), value); + } + + protected async deleteFromCache(key: string) { + if (!BaseLoader.cache) return false; + return BaseLoader.cache.loaderCustomDelete(this.getCustomCacheKey(key)); + } + + protected async loadIncrementalChunk(incrementalGenerator: AsyncGenerator, void, void>) { + this.emit('incrementalChunkAvailable', incrementalGenerator); + } + + /** + * This TypeScript function asynchronously processes chunks of data, cleans up the content, + * calculates a content hash, and yields the modified chunks. + */ + public async *getChunks(): AsyncGenerator, void, void> { + const chunks = await this.getUnfilteredChunks(); + + for await (const chunk of chunks) { + chunk.pageContent = chunk.pageContent + .replace(/(\r\n|\n|\r)/gm, ' ') + .replace(/\s\s+/g, ' ') + .trim(); + + if (chunk.pageContent.length > 0) { + yield { + ...chunk, + contentHash: md5(chunk.pageContent), + }; + } + } + } + + abstract getUnfilteredChunks(): AsyncGenerator, void, void>; +} diff --git a/src/interfaces/base-model.ts b/core/embedjs-interfaces/src/interfaces/base-model.ts similarity index 94% rename from src/interfaces/base-model.ts rename to core/embedjs-interfaces/src/interfaces/base-model.ts index 33010051..c5740270 100644 --- a/src/interfaces/base-model.ts +++ b/core/embedjs-interfaces/src/interfaces/base-model.ts @@ -1,99 +1,99 @@ -import createDebugMessages from 'debug'; -import { v4 as uuidv4 } from 'uuid'; - -import { BaseConversation } from './base-conversations.js'; -import { Chunk, Message, ModelResponse, QueryResponse, SourceDetail } from '../global/types.js'; - -export abstract class BaseModel { - private readonly baseDebug = createDebugMessages('embedjs:model:BaseModel'); - - private static conversations: BaseConversation; - private static defaultTemperature: number; - - public static setDefaultTemperature(temperature?: number) { - BaseModel.defaultTemperature = temperature; - } - - public static setConversations(conversations: BaseConversation) { - BaseModel.conversations = conversations; - } - - private readonly _temperature?: number; - - constructor(temperature?: number) { - this._temperature = temperature; - } - - public get temperature() { - return this._temperature ?? BaseModel.defaultTemperature; - } - - public async init(): Promise {} - - public async query( - system: string, - userQuery: string, - supportingContext: Chunk[], - conversationId: string = 'default', - ): Promise { - const conversation = await BaseModel.conversations.getConversation(conversationId); - this.baseDebug(`${conversation.entries.length} history entries found for conversationId '${conversationId}'`); - - // Add user query to history - await BaseModel.conversations.addEntryToConversation(conversationId, { - id: uuidv4(), - timestamp: new Date(), - actor: 'HUMAN', - content: userQuery, - }); - - // Run LLM implementation in subclass - const response = await this.runQuery(system, userQuery, supportingContext, conversation.entries.slice(0, -1)); - - const uniqueSources = this.extractUniqueSources(supportingContext); - const newEntry: Message = { - id: uuidv4(), - timestamp: new Date(), - content: response.result, - actor: 'AI', - sources: uniqueSources, - }; - - // Add AI response to history - await BaseModel.conversations.addEntryToConversation(conversationId, newEntry); - return { - ...newEntry, - tokenUse: { - inputTokens: response.tokenUse?.inputTokens ?? 'UNKNOWN', - outputTokens: response.tokenUse?.outputTokens ?? 'UNKNOWN', - }, - }; - } - - private extractUniqueSources(supportingContext: Chunk[]): SourceDetail[] { - const uniqueSources = new Map(); // Use a Map to track unique sources by URL - - supportingContext.forEach((item) => { - const { metadata } = item; - if (metadata && metadata.source) { - // Use the source URL as the key to ensure uniqueness - if (!uniqueSources.has(metadata.source)) { - uniqueSources.set(metadata.source, { - source: metadata.source, - loaderId: metadata.uniqueLoaderId, // Assuming this field always exists - }); - } - } - }); - - // Convert the values of the Map to an array - return Array.from(uniqueSources.values()); - } - - protected abstract runQuery( - system: string, - userQuery: string, - supportingContext: Chunk[], - pastConversations: Message[], - ): Promise; -} +import createDebugMessages from 'debug'; +import { v4 as uuidv4 } from 'uuid'; + +import { BaseConversation } from './base-conversations.js'; +import { Chunk, QueryResponse, Message, SourceDetail, ModelResponse } from '../types.js'; + +export abstract class BaseModel { + private readonly baseDebug = createDebugMessages('embedjs:model:BaseModel'); + + private static conversations: BaseConversation; + private static defaultTemperature: number; + + public static setDefaultTemperature(temperature?: number) { + BaseModel.defaultTemperature = temperature; + } + + public static setConversations(conversations: BaseConversation) { + BaseModel.conversations = conversations; + } + + private readonly _temperature?: number; + + constructor(temperature?: number) { + this._temperature = temperature; + } + + public get temperature() { + return this._temperature ?? BaseModel.defaultTemperature; + } + + public async init(): Promise {} + + public async query( + system: string, + userQuery: string, + supportingContext: Chunk[], + conversationId: string = 'default', + ): Promise { + const conversation = await BaseModel.conversations.getConversation(conversationId); + this.baseDebug(`${conversation.entries.length} history entries found for conversationId '${conversationId}'`); + + // Add user query to history + await BaseModel.conversations.addEntryToConversation(conversationId, { + id: uuidv4(), + timestamp: new Date(), + actor: 'HUMAN', + content: userQuery, + }); + + // Run LLM implementation in subclass + const response = await this.runQuery(system, userQuery, supportingContext, conversation.entries.slice(0, -1)); + + const uniqueSources = this.extractUniqueSources(supportingContext); + const newEntry: Message = { + id: uuidv4(), + timestamp: new Date(), + content: response.result, + actor: 'AI', + sources: uniqueSources, + }; + + // Add AI response to history + await BaseModel.conversations.addEntryToConversation(conversationId, newEntry); + return { + ...newEntry, + tokenUse: { + inputTokens: response.tokenUse?.inputTokens ?? 'UNKNOWN', + outputTokens: response.tokenUse?.outputTokens ?? 'UNKNOWN', + }, + }; + } + + private extractUniqueSources(supportingContext: Chunk[]): SourceDetail[] { + const uniqueSources = new Map(); // Use a Map to track unique sources by URL + + supportingContext.forEach((item) => { + const { metadata } = item; + if (metadata && metadata.source) { + // Use the source URL as the key to ensure uniqueness + if (!uniqueSources.has(metadata.source)) { + uniqueSources.set(metadata.source, { + source: metadata.source, + loaderId: metadata.uniqueLoaderId, // Assuming this field always exists + }); + } + } + }); + + // Convert the values of the Map to an array + return Array.from(uniqueSources.values()); + } + + protected abstract runQuery( + system: string, + userQuery: string, + supportingContext: Chunk[], + pastConversations: Message[], + ): Promise; +} diff --git a/src/global/types.ts b/core/embedjs-interfaces/src/types.ts similarity index 96% rename from src/global/types.ts rename to core/embedjs-interfaces/src/types.ts index 84dd6b39..440a95e3 100644 --- a/src/global/types.ts +++ b/core/embedjs-interfaces/src/types.ts @@ -1,84 +1,84 @@ -export type LoaderMetadata = T & { source: string }; -export type LoaderChunk< - Meta extends Record = Record, -> = { - pageContent: string; - contentHash: string; - metadata: LoaderMetadata; -}; -export type UnfilteredLoaderChunk< - Meta extends Record = Record, -> = { - pageContent: string; - metadata: LoaderMetadata; -}; - -export type Metadata = T & { id: string; uniqueLoaderId: string; source: string }; -export type Chunk = Record> = - { - pageContent: string; - metadata: Metadata; - }; - -export type InsertChunkData< - Meta extends Record = Record, -> = { - vector: number[]; - pageContent: string; - metadata: Metadata; -}; - -export type ExtractChunkData< - Meta extends Record = Record, -> = { - score: number; - pageContent: string; - metadata: Metadata; -}; - -export type AddLoaderReturn = { entriesAdded: number; uniqueId: string; loaderType: string }; - -export type SourceDetail = { - loaderId: string; - source: string; -}; - -export type LoaderList = { - type: string; - uniqueId: string; - loaderMetadata: Record; -}[]; - -export type Message = { - id: string; - timestamp: Date; - content: string; -} & ( - | { - actor: 'HUMAN' | 'SYSTEM'; - } - | { - actor: 'AI'; - sources: SourceDetail[]; - } -); - -export type Conversation = { - conversationId: string; - entries: Message[]; -}; - -export type ModelResponse = { - result: string; - tokenUse?: { - inputTokens: number; - outputTokens: number; - }; -}; - -export type QueryResponse = Extract & { - tokenUse: { - inputTokens: number | 'UNKNOWN'; - outputTokens: number | 'UNKNOWN'; - }; -}; +export type LoaderMetadata = T & { source: string }; +export type LoaderChunk< + Meta extends Record = Record, +> = { + pageContent: string; + contentHash: string; + metadata: LoaderMetadata; +}; +export type UnfilteredLoaderChunk< + Meta extends Record = Record, +> = { + pageContent: string; + metadata: LoaderMetadata; +}; + +export type Metadata = T & { id: string; uniqueLoaderId: string; source: string }; +export type Chunk = Record> = + { + pageContent: string; + metadata: Metadata; + }; + +export type InsertChunkData< + Meta extends Record = Record, +> = { + vector: number[]; + pageContent: string; + metadata: Metadata; +}; + +export type ExtractChunkData< + Meta extends Record = Record, +> = { + score: number; + pageContent: string; + metadata: Metadata; +}; + +export type AddLoaderReturn = { entriesAdded: number; uniqueId: string; loaderType: string }; + +export type SourceDetail = { + loaderId: string; + source: string; +}; + +export type LoaderList = { + type: string; + uniqueId: string; + loaderMetadata: Record; +}[]; + +export type Message = { + id: string; + timestamp: Date; + content: string; +} & ( + | { + actor: 'HUMAN' | 'SYSTEM'; + } + | { + actor: 'AI'; + sources: SourceDetail[]; + } +); + +export type Conversation = { + conversationId: string; + entries: Message[]; +}; + +export type ModelResponse = { + result: string; + tokenUse?: { + inputTokens: number; + outputTokens: number; + }; +}; + +export type QueryResponse = Extract & { + tokenUse: { + inputTokens: number | 'UNKNOWN'; + outputTokens: number | 'UNKNOWN'; + }; +}; diff --git a/core/embedjs-interfaces/tsconfig.cjs.json b/core/embedjs-interfaces/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/core/embedjs-interfaces/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/tsconfig.json b/core/embedjs-interfaces/tsconfig.json similarity index 68% rename from tsconfig.json rename to core/embedjs-interfaces/tsconfig.json index daa06e3f..fe536db3 100644 --- a/tsconfig.json +++ b/core/embedjs-interfaces/tsconfig.json @@ -1,22 +1,26 @@ -{ - "extends": "@tsconfig/recommended", - "compilerOptions": { - "rootDir": "./src", - "target": "ES2021", - "lib": ["ES2021", "ES2022.Object", "DOM"], - "module": "NodeNext", - "moduleResolution": "nodenext", - "esModuleInterop": true, - "declaration": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useDefineForClassFields": true, - "strictPropertyInitialization": false, - "allowJs": false, - "strict": false - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist", "docs"] -} +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/core/embedjs-interfaces/tsconfig.lib.json b/core/embedjs-interfaces/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/core/embedjs-interfaces/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/core/embedjs-utils/CHANGELOG.md b/core/embedjs-utils/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/core/embedjs-utils/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/core/embedjs-utils/README.md b/core/embedjs-utils/README.md new file mode 100644 index 00000000..57222501 --- /dev/null +++ b/core/embedjs-utils/README.md @@ -0,0 +1,8 @@ +# embedjs-utils + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/core/embedjs-utils/eslint.config.js b/core/embedjs-utils/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/core/embedjs-utils/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/core/embedjs-utils/package.json b/core/embedjs-utils/package.json new file mode 100644 index 00000000..c12d56bf --- /dev/null +++ b/core/embedjs-utils/package.json @@ -0,0 +1,38 @@ +{ + "name": "@llm-tools/embedjs-utils", + "version": "0.0.1", + "description": "Useful util functions when extending the embedjs ecosystem", + "dependencies": { + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "typings": "./src/index.d.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/core/embedjs-utils/project.json b/core/embedjs-utils/project.json new file mode 100644 index 00000000..1e068a1c --- /dev/null +++ b/core/embedjs-utils/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-utils", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "core/embedjs-utils/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-utils", + "main": "core/embedjs-utils/src/index.ts", + "tsConfig": "core/embedjs-utils/tsconfig.lib.json", + "assets": ["core/embedjs-utils/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-utils", + "main": "core/embedjs-utils/src/index.ts", + "tsConfig": "core/embedjs-utils/tsconfig.cjs.json" + } + } + } +} diff --git a/core/embedjs-utils/src/index.ts b/core/embedjs-utils/src/index.ts new file mode 100644 index 00000000..3ca3280a --- /dev/null +++ b/core/embedjs-utils/src/index.ts @@ -0,0 +1,4 @@ +export * from './util/arrays.js'; +export * from './util/log.js'; +export * from './util/stream.js'; +export * from './util/strings.js'; diff --git a/src/util/arrays.ts b/core/embedjs-utils/src/util/arrays.ts similarity index 77% rename from src/util/arrays.ts rename to core/embedjs-utils/src/util/arrays.ts index f8926dd7..a1780a8e 100644 --- a/src/util/arrays.ts +++ b/core/embedjs-utils/src/util/arrays.ts @@ -1,25 +1,25 @@ -export function mapAsync( - array: T[], - callbackfn: (value: T, index: number, array: T[]) => Promise, -): Promise { - return Promise.all(array.map(callbackfn)); -} - -export async function filterAsync( - array: T[], - callbackfn: (value: T, index: number, array: T[]) => Promise, -): Promise { - const filterMap = await mapAsync(array, callbackfn); - return array.filter((_value, index) => filterMap[index]); -} - -export function createArrayChunks(arr: T[], size: number) { - return Array.from({ length: Math.ceil(arr.length / size) }, (_v, i) => arr.slice(i * size, i * size + size)); -} - -export function getUnique(array: Array, K: string) { - var seen = {}; - return array.filter(function (item) { - return seen.hasOwnProperty(item[K]()) ? false : (seen[item[K]()] = true); - }); -} +export function mapAsync( + array: T[], + callbackfn: (value: T, index: number, array: T[]) => Promise, +): Promise { + return Promise.all(array.map(callbackfn)); +} + +export async function filterAsync( + array: T[], + callbackfn: (value: T, index: number, array: T[]) => Promise, +): Promise { + const filterMap = await mapAsync(array, callbackfn); + return array.filter((_value, index) => filterMap[index]); +} + +export function createArrayChunks(arr: T[], size: number) { + return Array.from({ length: Math.ceil(arr.length / size) }, (_v, i) => arr.slice(i * size, i * size + size)); +} + +export function getUnique(array: Array, K: string) { + const seen = {}; + return array.filter(function (item) { + return Object.prototype.hasOwnProperty.call(seen, item[K]()) ? false : (seen[item[K]()] = true); + }); +} diff --git a/src/util/log.ts b/core/embedjs-utils/src/util/log.ts similarity index 75% rename from src/util/log.ts rename to core/embedjs-utils/src/util/log.ts index 39014f52..b04ec65e 100644 --- a/src/util/log.ts +++ b/core/embedjs-utils/src/util/log.ts @@ -1,5 +1,5 @@ -import util from 'util'; - -export function deepLog(obj: any) { - console.log(util.inspect(obj, { depth: null, colors: true, sorted: true, compact: false })); -} +import util from 'util'; + +export function deepLog(obj: unknown) { + console.log(util.inspect(obj, { depth: null, colors: true, sorted: true, compact: false })); +} diff --git a/src/util/stream.ts b/core/embedjs-utils/src/util/stream.ts similarity index 88% rename from src/util/stream.ts rename to core/embedjs-utils/src/util/stream.ts index cf6eb15f..09a893e3 100644 --- a/src/util/stream.ts +++ b/core/embedjs-utils/src/util/stream.ts @@ -1,11 +1,11 @@ -import { Stream } from 'stream'; - -export async function stream2buffer(stream: Stream): Promise { - return new Promise((resolve, reject) => { - const _buf = Array(); - - stream.on('data', (chunk) => _buf.push(chunk)); - stream.on('end', () => resolve(Buffer.concat(_buf))); - stream.on('error', (err) => reject(`error converting stream - ${err}`)); - }); -} +import { Stream } from 'stream'; + +export async function stream2buffer(stream: Stream): Promise { + return new Promise((resolve, reject) => { + const _buf = Array(); + + stream.on('data', (chunk) => _buf.push(chunk)); + stream.on('end', () => resolve(Buffer.concat(_buf))); + stream.on('error', (err) => reject(`error converting stream - ${err}`)); + }); +} diff --git a/src/util/strings.ts b/core/embedjs-utils/src/util/strings.ts similarity index 85% rename from src/util/strings.ts rename to core/embedjs-utils/src/util/strings.ts index 21db6102..4f79a8a9 100644 --- a/src/util/strings.ts +++ b/core/embedjs-utils/src/util/strings.ts @@ -1,60 +1,60 @@ -import { Message } from '../global/types.js'; - -export function truncateCenterString(fullStr: string, strLen: number, separator?: string) { - if (fullStr.length <= strLen) return fullStr; - - separator = separator || '...'; - - var sepLen = separator.length, - charsToShow = strLen - sepLen, - frontChars = Math.ceil(charsToShow / 2), - backChars = Math.floor(charsToShow / 2); - - return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars); -} - -export function cleanString(text: string) { - text = text.replace(/\\/g, ''); - text = text.replace(/#/g, ' '); - text = text.replace(/\. \./g, '.'); - text = text.replace(/\s\s+/g, ' '); - text = text.replace(/(\r\n|\n|\r)/gm, ' '); - - return text.trim(); -} - -export function stringFormat(template: string, ...args: any[]) { - return template.replace(/{(\d+)}/g, function (match, number) { - return typeof args[number] != 'undefined' ? args[number] : match; - }); -} - -export function historyToString(history: Message[]) { - return history.reduce((p: string, c: Message) => { - return p.concat(`${c.actor}: ${c.content}`); - }, ''); -} - -export function toTitleCase(str: string) { - return str.replace(/\w\S*/g, function (txt) { - return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); - }); -} - -export function isValidURL(url: string) { - try { - new URL(url); - return true; - } catch (error) { - return false; - } -} - -export function isValidJson(str: string) { - try { - JSON.parse(str); - return true; - } catch (error) { - return false; - } -} +import { Message } from '@llm-tools/embedjs-interfaces'; + +export function truncateCenterString(fullStr: string, strLen: number, separator?: string) { + if (fullStr.length <= strLen) return fullStr; + + separator = separator || '...'; + + const sepLen = separator.length, + charsToShow = strLen - sepLen, + frontChars = Math.ceil(charsToShow / 2), + backChars = Math.floor(charsToShow / 2); + + return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars); +} + +export function cleanString(text: string) { + text = text.replace(/\\/g, ''); + text = text.replace(/#/g, ' '); + text = text.replace(/\. \./g, '.'); + text = text.replace(/\s\s+/g, ' '); + text = text.replace(/(\r\n|\n|\r)/gm, ' '); + + return text.trim(); +} + +export function stringFormat(template: string, ...args: string[]) { + return template.replace(/{(\d+)}/g, function (match, number) { + return typeof args[number] != 'undefined' ? args[number] : match; + }); +} + +export function historyToString(history: Message[]) { + return history.reduce((p: string, c: Message) => { + return p.concat(`${c.actor}: ${c.content}`); + }, ''); +} + +export function toTitleCase(str: string) { + return str.replace(/\w\S*/g, function (txt) { + return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); + }); +} + +export function isValidURL(url: string) { + try { + new URL(url); + return true; + } catch { + return false; + } +} + +export function isValidJson(str: string) { + try { + JSON.parse(str); + return true; + } catch { + return false; + } +} diff --git a/core/embedjs-utils/tsconfig.cjs.json b/core/embedjs-utils/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/core/embedjs-utils/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/core/embedjs-utils/tsconfig.json b/core/embedjs-utils/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/core/embedjs-utils/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/core/embedjs-utils/tsconfig.lib.json b/core/embedjs-utils/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/core/embedjs-utils/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/core/embedjs/CHANGELOG.md b/core/embedjs/CHANGELOG.md new file mode 100644 index 00000000..e5c022fc --- /dev/null +++ b/core/embedjs/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. \ No newline at end of file diff --git a/core/embedjs/README.md b/core/embedjs/README.md new file mode 100644 index 00000000..0bf37efe --- /dev/null +++ b/core/embedjs/README.md @@ -0,0 +1,1312 @@ +# EmbedJs + +

+License +NPM Version +

+ +EmbedJs is an Open Source Framework for personalizing LLM responses. An ultimate toolkit for building powerful Retrieval-Augmented Generation (RAG) and Large Language Model (LLM) applications with ease in Node.js. + +It segments data into manageable chunks, generates relevant embeddings, and stores them in a vector database for optimized retrieval. It enables users to extract contextual information, find precise answers, or engage in interactive chat conversations, all tailored to their own data. + +Here's an example of how easy it is to get started - + +```TS +const ragApplication = await new RAGApplicationBuilder() + .addLoader({ type: 'YoutubeSearch', youtubeSearchString: 'Tesla cars' }) + .addLoader('https://en.wikipedia.org/wiki/Tesla,_Inc.') + .addLoader('https://tesla-info.com/sitemap.xml') + .setVectorDb(new LanceDb({ path: '.db' })) + .build(); +``` + +That's it. Now you can ask questions - + +```TS +console.log(await ragApplication.query('Give me the history of Tesla?')); +``` + +## Features + +- Supports all popular large language models - paid and open source + +- Supports many vector databases including self-hosted and cloud variants. + +- Load different kinds of unstructured data. Comes built in with several loaders that makes this easy. + +- Supports several cache options that can greatly improve the performance of your RAG applications in production. + +- Exposes a simple and highly configureable API allows both quick launch and deep customizabilty. + +- Use just as an embedding engine or a full blown chat API with history + +## Quick note + +The author(s) are looking to add core maintainers for this opensource project. Reach out on [Linkedin](https://www.linkedin.com/in/adhityan/) if you are interested. If you want to contribute in general - create issues on GitHub or send in PRs. + +# Contents + +- [EmbedJs](#embedjs) + - [Features](#features) + - [Quick note](#quick-note) +- [Contents](#contents) +- [Getting started](#getting-started) + - [Installation](#installation) + - [Usage](#usage) + - [Temperature](#temperature) + - [Search results count](#search-results-count) + - [Customize the prompt](#customize-the-prompt) + - [Get context (dry run)](#get-context-dry-run) + - [Delete loader](#delete-loader) + - [Get count of embedded chunks](#get-count-of-embedded-chunks) + - [Remove all embeddings / reset](#remove-all-embeddings--reset) + - [Set cut-off for relevance](#set-cut-off-for-relevance) + - [Add new loaders later](#add-new-loaders-later) + - [Loader inference](#loader-inference) +- [Loaders supported](#loaders-supported) + - [Youtube video](#youtube-video) + - [Youtube channel](#youtube-channel) + - [Youtube search](#youtube-search) + - [PDF file](#pdf-file) + - [Docx file](#docx-file) + - [Excel file](#excel-file) + - [Powerpoint file](#powerpoint-file) + - [Web page](#web-page) + - [Confluence](#confluence) + - [Sitemap](#sitemap) + - [Text](#text) + - [Json](#json) + - [Csv](#csv) + - [Add a custom loader](#add-a-custom-loader) + - [More loaders coming soon](#more-loaders-coming-soon) +- [LLMs](#llms) + - [OpenAI](#openai) + - [Azure OpenAI](#azure-openai) + - [Mistral](#mistral) + - [Hugging Face](#hugging-face) + - [Anthropic](#anthropic) + - [Vertex AI](#vertex-ai) + - [Ollama](#ollama) + - [Use custom LLM model](#use-custom-llm-model) + - [More LLMs coming soon](#more-llms-coming-soon) +- [Embedding models](#embedding-models) + - [OpenAI v3 Small](#openai-v3-small) + - [OpenAI v3 Large](#openai-v3-large) + - [Ada](#ada) + - [Cohere](#cohere) + - [Gecko Embedding](#gecko-embedding) + - [Ollama local embedding](#ollama-local-embedding) + - [Use custom embedding model](#use-custom-embedding-model) + - [More embedding models coming soon](#more-embedding-models-coming-soon) +- [Vector databases supported](#vector-databases-supported) + - [Pinecone](#pinecone) + - [LanceDB](#lancedb) + - [Chroma](#chroma) + - [HNSWLib](#hnswlib) + - [Weaviate](#weaviate) + - [Qdrant](#qdrant) + - [MongoDB (vector database)](#mongodb-vector-database) + - [Astra DB](#astra-db) + - [Bring your own database](#bring-your-own-database) + - [More databases coming soon](#more-databases-coming-soon) +- [Caches](#caches) + - [LMDB](#lmdb) + - [InMemory (cache)](#inmemory-cache) + - [Redis](#redis) + - [MongoDB (cache)](#mongodb-cache) + - [Bring your own cache](#bring-your-own-cache) + - [More caches coming soon](#more-caches-coming-soon) +- [Conversation history](#conversation-history) + - [InMemory (conversation)](#inmemory-conversation) + - [MongoDB (conversation)](#mongodb-conversation) +- [Langsmith Integration](#langsmith-integration) +- [Sample projects](#sample-projects) +- [Contributing](#contributing) + +# Getting started + +## Installation + +You can install the library via NPM or Yarn + +```bash +npm i @llm-tools/embedjs +``` + +## Usage + +To configure a new EmbedJs application, you need to do three steps - + +> **1. Pick an LLM**
+> The library supports several LLMs. Activate one by allowing the instructions in the [LLM](#llms) section. + +```TS +const ragApplication = await new RAGApplicationBuilder() + .setModel(new HuggingFace({ modelName: 'mistralai/Mixtral-8x7B-v0.1' })) + ... +``` + +**Note:** To use the library only for embeddings and not instantiate a LLM, you can pass the string `NO_MODEL` to the setModel function here. This will disable the option to call the `query` function but you can still get the embeddings with the [`getContext`](#get-context-dry-run) method. + +> **2. Pick a Vector database**
+> The library supports several vector databases. Enable one by allowing the instructions in the [Vector Databases](#vector-databases-supported) section. + +```TS + .setVectorDb(new PineconeDb({ projectName: 'test', namespace: 'dev' })) +``` + +> **3. Load some data**
+> The library supports several kinds of loaders. You can use zero, one or many kinds of loaders together to import custom knowledge. Read the [loaders](#loaders-supported) section to learn more about the different supported loaders. + +```TS + .addLoader(new YoutubeSearchLoader({ searchString: 'Tesla cars' })) + .addLoader(new SitemapLoader({ url: 'https://tesla-info.com/sitemap.xml' })) + .build(); +``` + +That's it! Now that you have your instance of `RAGApplication`, you can use it to query against the loaded data sets, like so - + +```TS +await ragApplication.query('What is Tesla?'); +``` + +## Temperature + +The temperature is a number between 0 and 1. It governs the randomness and creativity of the LLM responses. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. You can alter it by - + +```TS +await new RAGApplicationBuilder() +.setTemperature(0.1) +``` + +**NOTE:** The default value is 0.1, which makes the GPT responses very precise. + +## Search results count + +This is the number of documents to aim for when retrieving results from the vector database. A high number of results might mean there is more non-relevant data in the context. A low number might mean none of the relevant documents are retrieved. You need to set the number that works best for you. The parameter can be altered by - + +```TS +await new RAGApplicationBuilder() +.setSearchResultCount(10) +``` + +**NOTE:** The default value is 7. + +It is important to note that the library does not simply dump all contextual document chunks into the prompt. It sends them to the model marking them as context documents. The number of documents still counts toward the token limit. + +When the number of documents fetched leads to a request above the token limit, the library uses the following strategy - + +> It runs a preprocessing step to select relevant sections from each document until the total number of tokens is less than the maximum number of tokens allowed by the model. It then uses the transformed documents as context to answer the question. + +## Customize the prompt + +LLM models need some care. The models are notorious for inventing responses when they don't know the answer. Keeping this in mind, the library auto adds a wrapper to all user queries. The default prompt is - + +> Use all the provided context to answer the query at the end. Answer in full. If you don't know the answer, just say that you don't know, don't try to make up an answer. Query: {0} + +The placeholder `{0}` is replaced with the input query. In some cases, you may want to customize this prompt. This can be done with ease by - + +```TS +await new RAGApplicationBuilder() +.setQueryTemplate('My own query template') +``` + +## Get context (dry run) + +During development, you may want to test the performance and quality of the `Loaders` you have enabled without making any LLM calls. You can do this by using the `getContext` method - + +```TS +await ragApplication.getContext('What is Steve Jobs?') +``` + +## Delete loader + +You can remove the embeddings added from a specific loader by calling the `deleteLoader` method with the uniqueId of the loader. + +```TS +await ragApplication.deleteLoader('uniqueId...', true) +``` + +## Get count of embedded chunks + +You can fetch the count of embeddedings stored in your vector database at any time by calling the `getEmbeddingsCount` method - + +```TS +await ragApplication.getEmbeddingsCount() +``` + +## Remove all embeddings / reset + +You can remove all stored embeddings in the vectorDb using the `deleteAllEmbeddings` method - + +```TS +await ragApplication.deleteAllEmbeddings(true) +``` + +## Set cut-off for relevance + +The library can filter the embeddings returned from a vector store that have a low relevance score to the query being asked. To do this, set the cut-off value using the `setEmbeddingRelevanceCutOff` method - + +```TS +await ragApplication.setEmbeddingRelevanceCutOff(0.23) +``` + +## Add new loaders later + +You can add new loaders at any point dynamically (even after calling the `build` function on `RAGApplicationBuilder`). To do this, simply call the `addLoader` method - + +```TS +await ragApplication.addLoader(new YoutubeLoader({ videoIdOrUrl: 'pQiT2U5E9tI' })); +``` + +**Note:** Do not forget to await the dynamically added loaders to ensure you wait for the load to complete before making queries on it. + +## Loader inference + +You can add most loaders by passing a string to the `addLoader` or the `addLoaders` methods. The value can be a URL, path, JSON or youtube video id. The library will infer the type of content and invoke the appropirate loader automatically. + +```TS +await ragApplication.addLoader('pQiT2U5E9tI'); //invokes youtube URL +await ragApplication.addLoader('https://lamport.azurewebsites.net/pubs/paxos-simple.pdf'); //invokes PDF loader +``` + +**Note:** If you pass the path to a local directory, every file in that directory is recursively added (including subfolders)! + +# Loaders supported + +Loaders take a specific format, process the input and create chunks of the data. You can import all the loaders from the path `@llm-tools/embedjs`. Currently, the library supports the following formats - + +## Youtube video + +To add any youtube video to your app, follow these steps - + +- Install Youtube loader package in your project + +```bash +npm install @llm-tools/embedjs-loader-youtube +``` + +- Now you can use the `YoutubeLoader` + +```TS +.addLoader(new YoutubeLoader({ videoIdOrUrl: 'w2KbwC-s7pY' })) +``` + +## Youtube channel + +To add all videos in a youtube channel, follow these steps - + +- Install Youtube loader package in your project + +```bash +npm install @llm-tools/embedjs-loader-youtube +``` + +- Now you can use the `YoutubeChannelLoader` + +```TS +.addLoader(new YoutubeChannelLoader({ youtubeChannelId: '...' })) +``` + +## Youtube search + +To do a general youtube search and add the popular search results, follow these steps - + +- Install Youtube loader package in your project + +```bash +npm install @llm-tools/embedjs-loader-youtube +``` + +- Now you can use the `YoutubeSearchLoader` + +```TS +.addLoader(new YoutubeSearchLoader({ youtubeSearchString: '...' })) +``` + +## PDF file + +To add a pdf file, use `PdfLoader`. To get started, install the PdfLoader addon - + +```bash +npm install @llm-tools/embedjs-loader-pdf +``` + +Now, you can add a local file - + +```TS +.addLoader(new PdfLoader({ filePathOrUrl: path.resolve('paxos-simple.pdf') })) +``` + +Or, you can add a remote file - + +```TS +.addLoader(new PdfLoader({ url: 'https://lamport.azurewebsites.net/pubs/paxos-simple.pdf' })) +``` + +**Note:** Currently there is no support for PDF forms and password protected documents + +## Docx file + +To add a docx file, use `DocxLoader`. To get started, install the MSOffice loader addon - + +```bash +npm install @llm-tools/embedjs-loader-msoffice +``` + +Now, you can add a local file - + +```TS +.addLoader(new DocxLoader({ filePathOrUrl: path.resolve('paxos.docx') })) +``` + +Or, you can add a remote file - + +```TS +.addLoader(new DocxLoader({ filePathOrUrl: 'https://xxx' })) +``` + +## Excel file + +To add an excel xlsx file, use `ExcelLoader`. To get started, install the MSOffice loader addon - + +```bash +npm install @llm-tools/embedjs-loader-msoffice +``` + +Now, you can add a local file - + +```TS +.addLoader(new ExcelLoader({ filePathOrUrl: path.resolve('numbers.xlsx') })) +``` + +Or, you can add a remote file - + +```TS +.addLoader(new ExcelLoader({ filePathOrUrl: 'https://xxx' })) +``` + +## Powerpoint file + +To add an powerpoint / pptx file, use `PptLoader`. To get started, install the MSOffice loader addon - + +```bash +npm install @llm-tools/embedjs-loader-msoffice +``` + +Now, you can add a local file - + +```TS +.addLoader(new PptLoader({ filePathOrUrl: path.resolve('wow.pptx') })) +``` + +Or, you can add a remote file - + +```TS +.addLoader(new PptLoader({ filePathOrUrl: 'https://xxx' })) +``` + +## Web page + +To add a web page, follow these steps - + +- Install Web loader addon in your project + +```bash +npm install @llm-tools/embedjs-loader-web +``` + +- Now you can use the `WebLoader` + +```TS +.addLoader(new WebLoader({ urlOrContent: 'https://en.wikipedia.org/wiki/Formula_One' })) +``` + +## Confluence + +To add a confluence space, follow these steps - + +- Install the Confluence loader addon in your project + +```bash +npm install @llm-tools/embedjs-loader-confluence +``` + +- set the following environment variables - + +```bash +CONFLUENCE_BASE_URL= +CONFLUENCE_USER_NAME= +CONFLUENCE_API_TOKEN= +``` + +**Note:** The confluence space name is the value you see in the url in the space overview page `/wiki/spaces/{{ space name }}/overview`. + +- Now you can use the `ConfluenceLoader` + +```TS +.addLoader(new ConfluenceLoader({ spaceNames: ['...'] })) +``` + +## Sitemap + +To add a XML sitemap, follow these steps - + +- Install the Sitemap loader addon in your project + +```bash +npm install @llm-tools/embedjs-loader-sitemap +``` + +- Now you can use the `SitemapLoader` + +```TS +.addLoader(new SitemapLoader({ url: '...' })) +``` + +This will load all URLs in a sitemap via the WebLoader. + +## Text + +To supply your own text, use `TextLoader`. + +```TS +.addLoader(new TextLoader({ text: 'The best company name for a company making colorful socks is MrSocks' })) +``` + +**Note:** Feel free to add your custom text without worrying about duplication. The library will chuck, cache and update the vector databases without duplication. + +## Json + +To add a parsed Javascript object to your embeddings, use `JsonLoader`. The library will not parse a string to JSON on its own but once this is done, it can be injested easily. + +```TS +.addLoader(new JsonLoader({ object: { key: value, ... } })) +``` + +**Note:** if you want to restrict the keys that get added to the vectorDb in a dynamically obtained object, you can use the `pickKeysForEmbedding` optional parameter in the `JsonLoader` constructor. + +## Csv + +To add a Csv file (or URL) to your embeddings, use `CsvLoader`. The library will parse the Csv and add each row to its vector database. To get started, follow these steps - + +- Install the Csv loader addon in your project + +```bash +npm install @llm-tools/embedjs-loader-csv +``` + +- Now you can use the `CsvLoader` like so - + +```TS +.addLoader(new CsvLoader({ filePathOrUrl: '...' })) +``` + +**Note:** You can control how the `CsvLoader` parses the file in great detail by passing in the optional `csvParseOptions` constructor parameter. + +## Add a custom loader + +You can pass along a custom loader to the `addLoader` method by extending and implementing the abstract class `BaseLoader`. Here's how that would look like - + +```TS +class CustomLoader extends BaseLoader<{ customChunkMetadata: string }> { + constructor() { + super('uniqueId'); + } + + async *getChunks() { + throw new Error('Method not implemented.'); + } +} +``` + +We really encourage you send in a PR to this library if you are implementing a common loader pattern, so the community can benefit from it. + +## More loaders coming soon + +If you want to add any other format, please create an [issue](https://github.com/llm-tools/embedjs/issues) and we will add it to the list of supported formats. All PRs are welcome. + +# LLMs + +It's relatively easy to switch between different LLMs using the library. You can import any of the LLMs from the path `@llm-tools/embedjs`. We support the following LLMs today - + +## OpenAI + +To use the OpenAI LLM models, you need a API key from OpenAI. You can alternatively use Azure OpenAI to run these models. Read the [Azure OpenAI](#azure-openai) section below to learn more about this. In this section, we will cover how to use OpenAI provided LLMs. + +The first step is to obtain an API Key from OpenAI. You can do this by visiting their [API Portal](https://platform.openai.com/api-keys). Once you obtain a key, set it as an environment variable, like so - + +```bash +OPENAI_API_KEY="" +``` + +Next, you need to install the OpenAI addon - + +```bash +npm install @llm-tools/embedjs-openai +``` + +Once these two steps are done, it is relatively easy to run OpenAI LLMs. All you need is to indicate the model type you want to run. + +- For GPT 3.5 Turbo + +```TS +const ragApplication = await new RAGApplicationBuilder() +.setModel(SIMPLE_MODELS.OPENAI_GPT3_TURBO) +``` + +- For GPT 4 + +```TS +const ragApplication = await new RAGApplicationBuilder() +.setModel(SIMPLE_MODELS.OPENAI_GPT4) +``` + +- To use a custom model name + +```TS +const ragApplication = await new RAGApplicationBuilder() +.setModel(new OpenAi({ modelName: 'gpt-4' })) +``` + +**Note:** GPT 3.5 Turbo is used as the default model if you do not specifiy one. + +## Azure OpenAI + +In order to be able to use an OpenAI model on Azure, it first needs to be deployed. Please refer to [Azure OpenAI documentation](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/) on how to deploy a model on Azure. To run this library, you will need to deploy two models - + +- text-embedding-ada (or any of the newer models) +- GPT-3.5-turbo (or the 4 series) + +Once these models are deployed, using Azure OpenAI instead of the regular OpenAI is easy to do. Just follow these steps - + +- Remove the `OPENAI_API_KEY` environment variable if you have set it already. + +- Set the following environment variables - + +```bash +# Set this to `azure` +OPENAI_API_TYPE=azure +# The API version you want to use +AZURE_OPENAI_API_VERSION=2023-05-15 +# The base URL for your Azure OpenAI resource. You can find this in the Azure portal under your Azure OpenAI resource. +export AZURE_OPENAI_BASE_PATH=https://your-resource-name.openai.azure.com/openai/deployments +# The API key1 or key2 for your Azure OpenAI resource +export AZURE_OPENAI_API_KEY= +# The deployment name you used for your embedding model +AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME=text-embedding-ada-002 +# The deployment name you used for your llm +AZURE_OPENAI_API_DEPLOYMENT_NAME=gpt-35-turbo +``` + +You are now all set and can now run the Azure OpenAI LLMs using the [`OpenAi` model](#openai) steps detailed above. + +## Mistral + +To use Mirstal's models, you will need to get an API Key from Mistral. You can do this from their [console](https://console.mistral.ai/user/api-keys/). Next, you need to install the Mistral addon to embedJs - + +```bash +npm install @llm-tools/embedjs-mistral +``` + +Once these steps are complete, set Mistral as your LLM of choice - + +```TS +const ragApplication = await new RAGApplicationBuilder() +.setModel(new Mistral({ accessToken: "" })) +``` + +By default, the `mistral-medium` model from Mistral is used. If you want to use a different Mistral model, you can specify it via the optional parameter to the Mistral constructor, like so - + +```TS +const ragApplication = await new RAGApplicationBuilder() +.setModel(new Mistral({ accessToken: "", modelName: "..." })) +``` + +**Note:** If you want to run Mistral open source for free, you can do so using the HuggingFace platform (read below). Just make sure to set the modelName to `mistralai/Mistral-7B-v0.1` or the version you want to run. + +## Hugging Face + +Hugging face needs no introduction. They host a variety of open source LLMs and you can use most of them for free. To run hugging face inference based LLMs with this library, you will need a free hugging face token. + +You can get an API Token by signing up for hugging face and generate a token from [this page](https://huggingface.co/settings/tokens). Once you get the token, set it to the environment like so - + +```bash +HUGGINGFACEHUB_API_KEY="" +``` + +Next you need to install the hugging face addon for embedJs - + +```bash +npm install @llm-tools/embedjs-huggingface +``` + +That's all, now you can use any of the hugging face models. To do this set `HuggingFace` as your model processor of choice - + +```TS +const ragApplication = await new RAGApplicationBuilder() +.setModel(new HuggingFace({ modelName: "..." }))) +``` + +**Note:** Not all hugging face models are fully free to consume via their API. Since running these models takes a lot of resources, Hugging Face charges a fee for a few of the larger ones. This is the case with Meta's `meta-llama/Llama-2-7b-hf`, for example. + +To use these 'not-free' models via HuggingFace, you need to subscribe to their [Pro plan](https://huggingface.co/pricing) or create a custom [inference endpoint](https://ui.endpoints.huggingface.co/). It is possible to self host these models for free and run them locally via Ollama - support for which is coming soon. + +## Anthropic + +To use Anthropic's Claude models, you will need to get an API Key from Anthropic. You can do this from their [console](https://console.anthropic.com/settings/keys). Once you obtain a key, set it in the environment variable, like so - + +```bash +ANTHROPIC_API_KEY="" +``` + +Next, you need to install the Anthropic extension for embedJs like so - + +```bash +npm install @llm-tools/embedjs-anthropic +``` + +Once these are done, it is relatively easy to use Anthropic's Claude in your RAG application. Simply set Anthropic as your LLM of choice - + +```TS +const ragApplication = await new RAGApplicationBuilder() +.setModel(new Anthropic()) +``` + +By default, the `claude-3-sonnet-20240229` model from Anthropic is used. If you want to use a different Anthropic model, you can specify it via the optional parameter to the Anthropic constructor, like so - + +```TS +const ragApplication = await new RAGApplicationBuilder() +.setModel(new Anthropic({ modelName: "..." })) +``` + +You can read more about the various models provided by Anthropic [here](https://docs.anthropic.com/claude/docs/models-overview). + +## Vertex AI + +You to use Gemini LLM and other models on Google Cloud Platform via [VertexAI](https://cloud.google.com/vertex-ai?hl=en). Read more about all the supported [LLMs](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models). + +To get started, you need to set the right access credentials to google cloud. You have two options here - + +- Authenticate by using `gcloud` CLI: + +``` +gcloud auth application-default login +``` + +- Authentication using Service Account with JSON key and environment variable: + +```bash +GOOGLE_APPLICATION_CREDENTIALS="" +``` + +- Install the vertex ai addon for embedJs + +```bash +npm install @llm-tools/embedjs-vertexai +``` + +Now all you need to do is set the model to `VertexAI`. Here's an example - + +```TS +const ragApplication = await new RAGApplicationBuilder() + .setModel(new VertexAI({ modelName: 'gemini-1.5-pro-preview-0409'})) + .setEmbeddingModel(new GeckoEmbedding()) +``` + +See also `/examples/vertexai` for [further documentation](/examples/vertexai/README.md) about authentication options and how to use it. + +**Note:** Default model is `gemini-1.0-pro`. + +## Ollama + +You can also use locally running Ollama models. Installation instructions for Ollama can be found [here](https://ollama.com/). + +Once Ollama is installed, you can start a local LLM by executing `ollama run `. Next to be able to use Ollama in embedJs, install the Ollama addon - + +```bash +npm install @llm-tools/embedjs-ollama +``` + +Once this is done, you can use that in the `Ollama` constructor by passing the `modelName` parameter. Here's an example - + +```TS +const ragApplication = await new RAGApplicationBuilder() +.setModel(new Ollama({ + modelName: "llama3", + baseUrl: 'http://localhost:11434' +})) +``` + +**Note:** Default port in which Ollama runs, is `11434`, but if for some reason you use something else, you can pass `baseUrl` with the port number as the second argument: + +## Use custom LLM model + +You can use a custom LLM model by implementing the `BaseModel` interface. Here's how that would look like - + +```TS +class MyOwnLLMImplementation implements BaseModel { + override async init(): Promise {} //optional to override + + protected abstract runQuery( + system: string, //the system prompt + userQuery: string, //the current user query + supportingContext: Chunk[], //all supporting documents + pastConversations: ConversationHistory[], //the chat history so far + ): Promise { + throw new Error("Method not implemented."); + } +} +``` + +Once done, you can pass this class to the `setModel` method like shown in the examples above. That said, we really encourage you send in a PR to this library if you are implementing a famous or common LLM, so the community can benefit from it. + +## More LLMs coming soon + +If you want us to add support for a specific LLM, please create an [issue](https://github.com/llm-tools/embedjs/issues) and we will prioritize it. All PRs are welcome. + +Currently, we next plan to add support for Ollama. + +# Embedding models + +Embedding models are LLMs that convert a string into vector better suited for processing. In most cases, the default `text-embedding-3-small` model from OpenAI is going to be good enough. If you want to use this model, you do not have to do anything extra. + +However in some advanced cases, you may want to change this; after all, different embedding models perform differently under different curcumstances. The library allows you to do this using the method `setEmbeddingModel` while building the `RAGApplication`. + +The library supports the following embedding models - + +## OpenAI v3 Small + +The `text-embedding-3-small` is a new standard embedding model released by OpenAI in Jan, 2024. It is the default used by the libary. This model is cheaper and better than their older Ada model. This model returns vectors with dimension 1536. + +You do not have to do anything to enable it. + +## OpenAI v3 Large + +The `text-embedding-3-large` is also a new standard embedding model released by OpenAI in Jan, 2024. This model is the best embedding model provided by OpenAI as of now but is also the most expensive. This model returns vectors with dimension 3072. + +To set it as your model of choice - + +- Set `OpenAi3LargeEmbeddings` as your embedding model on `RAGApplicationBuilder` + +```TS +import { OpenAi3LargeEmbeddings } from '@llm-tools/embedjs'; + +await new RAGApplicationBuilder() +.setEmbeddingModel(new OpenAi3LargeEmbeddings()) +``` + +## Ada + +The `text-embedding-ada-002` is a well known model from OpenAI. You can read more about it [here](https://openai.com/blog/new-and-improved-embedding-model). This model returns vectors with dimension 1536. + +To set it as your model of choice - + +- Set `AdaEmbeddings` as your embedding model on `RAGApplicationBuilder` + +```TS +import { AdaEmbeddings } from '@llm-tools/embedjs'; + +await new RAGApplicationBuilder() +.setEmbeddingModel(new AdaEmbeddings()) +``` + +## Cohere + +The library supports usage of [Cohere-AI](https://cohere.com) `embed-english-v2.0` embedding model out of the box. This model returns vectors with dimension 4096. + +Here's what you have to do to enable it - + +- Sign up for an account with Cohere-AI if you have not done so already. Once done, go to the [API Keys](https://dashboard.cohere.ai/api-keys) section and copy an API_KEY. + +- Load the key you just obtained in the environment variable `COHERE_API_KEY` + +```bash +COHERE_API_KEY="" +``` + +- Set `CohereEmbeddings` as your embedding model on `RAGApplicationBuilder` + +```TS +import { CohereEmbeddings } from '@llm-tools/embedjs'; + +await new RAGApplicationBuilder() +.setEmbeddingModel(new CohereEmbeddings()) +``` + +## Gecko Embedding + +The libaray supports the embedding model `textembedding-gecko` with 768 dimensions on [VertexAI](https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-text-embeddings). + +To use this, you can authenticate to Vertex AI on GCP. Refer [here](#vertex-ai) on how to do this. Once done, simply set `GeckoEmbedding` as your choice of embedding model, like so - + +```TS +import { GeckoEmbeddings } from '@llm-tools/embedjs'; + +await new RAGApplicationBuilder() +.setEmbeddingModel(new GeckoEmbeddings()) +``` + +For an example usage of GeckoEmbeddings with Gemini LLM on VertexAI check the folder `/examples/vertexai/`. + +## Ollama local embedding + +The libaray supports fully local embeddings via `Ollama`. Read more here [Ollama embeddings](https://ollama.com/blog/embedding-models). + +To use this, you need to setup and have Ollama working locally. Refer to their Github [here](https://github.com/ollama/ollama) to understand how to do this. Once done, simply set `OllamaEmbeddings` as your choice of embedding model, like so - + +```TS +import { OllamaEmbeddings } from '@llm-tools/embedjs'; + +await new RAGApplicationBuilder() +.setEmbeddingModel(new OllamaEmbeddings({ + model: '...', + baseUrl: '...' +})) +``` + +## Use custom embedding model + +You can use your own custom embedding model by implementing the `BaseEmbeddings` interface. Here's how that would look like - + +```TS +class MyOwnEmbeddingImplementation implements BaseEmbeddings { + embedDocuments(texts: string[]): Promise { + throw new Error("Method not implemented."); + } + + embedQuery(text: string): Promise { + throw new Error("Method not implemented."); + } + + getDimensions(): number { + throw new Error("Method not implemented."); + } +} +``` + +Once done, you can pass this class to the `setEmbeddingModel` method like shown in the Cohere example above. That said, we really encourage you send in a PR to this library if you are implementing a famous or common embedding provider, so the community can benefit from it. + +## More embedding models coming soon + +If you want us to add support for a specific embedding model, please create an [issue](https://github.com/llm-tools/embedjs/issues) and we will prioritize it. All PRs are welcome. + +# Vector databases supported + +The library allows you to save your processed and unique embeddings with the vector databases of your choice. Here are the supported databases right now - + +## Pinecone + +You can enable Pinecone storage by following these steps - + +- Create an account with [Pinecone](https://www.pinecone.io/) if you don't have one already. There is a _good free tier_. + +- Install pinecone package in your project + +```bash +npm install @pinecone-database/pinecone +``` + +- Set the pinecone environment variable `PINECONE_API_KEY`. This can be obtained from the **API Keys** section on the Pinecone dashboard. + +```bash +PINECONE_API_KEY= +``` + +- Set the Pinecone database as your choice of `vectorDb` + +```TS +import { PineconeDb } from '@llm-tools/embedjs/vectorDb/pinecone'; + +.setVectorDb(new PineconeDb({ + projectName: 'test', + namespace: 'dev', + indexSpec: { + pod: { + podType: 'p1.x1', + environment: 'us-east1-gcp', + }, + }, +})) +``` + +**Note:** Pinecone supports serverless and pod based index deployments. You can control how you want your index created using the indexSpec attribute. This is mandatory to be provided but comes with full type specification. Read more about configuring this [here](https://github.com/pinecone-io/pinecone-ts-client/blob/main/v2-migration.md). + +## LanceDB + +[LanceDB](https://lancedb.com/) is a local vector database with great performance. Follow these steps to use LanceDB as your vector database - + +- Install LanceDb package in your project + +```bash +npm install @lancedb/lancedb +``` + +- Set LanceDB database as your choice of `vectorDb` + +```TS +import { LanceDb } from '@llm-tools/embedjs/vectorDb/lance'; + +.setVectorDb(new LanceDb({ path: path.resolve('/db') })) +``` + +**Note:** The `path` property will be used by LanceDB to create a directory to host all the database files. There is also support for creating temporary directories for testing - + +```TS +import { LanceDb } from '@llm-tools/embedjs/vectorDb/lance'; + +.setVectorDb(new LanceDb({ path: 'lance-', isTemp: true })) +``` + +In this case, the `path` property is used as a prefix to create the temporary directory in the OS temp directory folder. + +## Chroma + +**Note:** The chroma addon is currently not published / supported. There are some type issues in the upstream dependencies that are being resolved. + +[Chroma](https://trychroma.com/) is an open source vector database. It's designed to be Python first and to connect to it from NodeJS, you will need to run Chroma in a container following the steps [listed here](https://docs.trychroma.com/deployment). Once done, follow these steps to use Chroma as your vector database - + +- Install Chroma package in your project + +```bash +npm install chromadb +``` + +- Set Chroma database as your choice of `vectorDb` + +```TS +import { ChromaDb } from '@llm-tools/embedjs/vectorDb/chroma'; + +.setVectorDb(new ChromaDb({ url: 'http://localhost:8000' })) +``` + +**Note:** This is the default url and port if you run the Chroma docker container using the command `docker-compose up -d --build`. + +A warning - + +> In our testing, chroma performed the poorest in being able to retrieve relevant documents among the supported vector databases. + +## HNSWLib + +[HNSWLib](https://github.com/nmslib/hnswlib) is an in-memory vectorstore. It is great for beginners to get started with since you do not need access to the file system or a cloud service. Follow these steps to use HNSWLib as your vector database - + +- Install HNSWLib package in your project + +```bash +npm install hnswlib-node +``` + +- Set HNSWLib database as your choice of `vectorDb` + +```TS +import { HNSWDb } from '@llm-tools/embedjs/vectorDb/hnswlib'; + +.setVectorDb(new HNSWDb()) +``` + +**Note:** This is a purely in-memory vector store. All values are lost when application is restarted. + +## Weaviate + +[Weaviate](https://weaviate.io/) is an open source vector store. You can deploy it locally on docker or use their managed cloud offering. Follow these steps to use Weaviate as your vector database - + +- Install Weaviate package in your project + +```bash +npm install weaviate-ts-client +``` + +- Set Weaviate database as your choice of `vectorDb` + +```TS +import { WeaviateDb } from '@llm-tools/embedjs/vectorDb/weaviate'; + +.setVectorDb(new WeaviateDb({ host: '...', apiKey: '...', className: '...', scheme: '...' })) +``` + +## Qdrant + +[Qdrant](https://qdrant.tech/) is an Open-Source Vector Database and Vector Search Engine written in Rust. To use it - + +- Install Qdrant package in your project + +```bash +npm install @qdrant/js-client-rest +``` + +- Set Qdrant database as your choice of `vectorDb` + +```TS +import { QdrantDb } from '@llm-tools/embedjs/vectorDb/qdrant'; + +.setVectorDb(new QdrantDb({ apiKey: '...'; url: '...'; clusterName: '...' })) +``` + +## MongoDB (vector database) + +[MongoDB](https://www.mongodb.com/products/platform/atlas-vector-search) is an open source document database. They offer a managed cloud offering **MongoDB Atlas**. As of right now, only the Atlas version supports vector search while the open source version does not. + +To use MongoDB as your vector database, follow these steps - + +- Sign up for a MongoDB Atlas account if you haven't already. Once you have signed up, you will need to spin up a new cluster (or use an existing one) + +**Note:** you will need to provision a M10 (or higher) instance type to use Atlas vector search. Cheaper instance types or the free version (M0) give an error when vector indexes are created programatically. + +- The cluster creation takes a few minutes. Once the cluster is ready, click on the connect button on the dashboard to get the connection string. + +**Note:** You will need to add a users separately and allow IP access from your relevant development and production environments. + +- Install mongodb package in your project + +```bash +npm install mongodb +``` + +- Set MongoDB database as your choice of `vectorDb` + +```TS +import { MongoDb } from '@llm-tools/embedjs/vectorDb/mongodb'; + +.setVectorDb( + new MongoDb({ + connectionString: 'mongodb+srv://:@', + }), +) +``` + +**Note:** you can also optionally configure the database and collection name the library will use with the constructor parameters `dbName` and `collectionName`. Default values are used if these are not provided. + +## Astra DB + +[Astra DB is a document database with a highly performant vector index](https://www.datastax.com/products/datastax-astra) powered by Apache Cassandra and available as a managed service. + +To use Astra DB as your vector database follow these steps: + +- [Sign up for an Astra DB account](https://astra.datastax.com/signup). It is free to sign up and doesn't require a credit card. +- Create a database (this takes a couple of minutes to provision) +- From the database overview page get the API Endpoint and generate an Application Token +- Install the Astra DB package in your project: + ```bash + npm install @datastax/astra-db-ts + ``` +- Set Astra DB as your choice of `vectorDb` + + ```TS + import { AstraDb } from '@llm-tools/embedjs/vectorDb/astra-db' + + .setVectorDb( + new AstraDb({ + endpoint: process.env.ASTRA_DB_API_ENDPOINT, + apiKey: process.env.ASTRA_DB_APP_TOKEN, + collectionName: "documents" + }), + ) + ``` + +## Bring your own database + +You can pass along your vector database to the `setVectorDb` method by implementing the interface `BaseDb`. Here's how that would look like - + +```TS +class MyOwnDb implements BaseDb { + async init({ dimensions }: { dimensions: number }): Promise { + throw new Error('Method not implemented.'); + } + + async insertChunks(chunks: EmbeddedChunk[]): Promise { + throw new Error('Method not implemented.'); + } + + async similaritySearch(query: number[], k: number): Promise { + throw new Error('Method not implemented.'); + } + + async getVectorCount(): Promise { + throw new Error('Method not implemented.'); + } + + async deleteKeys(keys: string[]): Promise { + throw new Error('Method not implemented.'); + } + + async reset(): Promise { + throw new Error('Method not implemented.'); + } +} +``` + +We really encourage you send in a PR to this library if you are implementing a famous or common database, so the community can benefit from it. + +## More databases coming soon + +If you want to add support for any other vector database, please create an [issue](https://github.com/llm-tools/embedjs/issues) and we will add it to the list of supported databases. All PRs are welcome. + +# Caches + +Caches serve to reduce re-processing embeddings, loaders and queries. There is no need to load, chunk and store a large PDF File or web page on every run. Caching smartly is built in and can be enabled out of the box simply by setting a cache processor using the method `setCache` while building the `RAGApplication`. + +The library supports the following caches - + +## LMDB + +You can use [LMDB](https://dbdb.io/db/lmdb) to cache values locally on disk. + +- Install LMDB package in your project + +```bash +npm install lmdb +``` + +- Set `LmdbCache` as your cache provider on `RAGApplicationBuilder` + +```TS +import { LmdbCache } from '@llm-tools/embedjs/cache/lmdb'; + +await new RAGApplicationBuilder() +.setCache(new LmdbCache({ path: path.resolve('./cache') })) +``` + +**Note:** The `path` property will be used by the LMDB driver to create a folder housing the LMDB database files. + +## InMemory (cache) + +You can use a simple in-memory cache to store values during testing. + +- Set `MemoryCache` as your cache provider on `RAGApplicationBuilder` + +```TS +import { MemoryCache } from '@llm-tools/embedjs/cache/memory'; + +await new RAGApplicationBuilder() +.setCache(new MemoryCache()) +``` + +**Note:** Although this cache can remove duplicate loaders and chunks, its store does not persist between process restarts. You should only be using it for testing. + +## Redis + +You can use redis as a cache to store values. + +- Set `RedisCache` as your cache provider on `RAGApplicationBuilder` + +```TS +import { RedisCache } from '@llm-tools/embedjs/cache/redis'; + +await new RAGApplicationBuilder() +.setCache(new RedisCache({ ... })) +``` + +**Note:** The library internally uses `IORedis` to work with redis. `RedisCache` constructor supports all `IORedis` constructor parameters. Check [`IORedis` documentation](https://github.com/redis/ioredis) for more detials. + +## MongoDB (cache) + +You can use a MongoDB as a cache to cache values. + +- Set `MongoCache` as your cache provider on `RAGApplicationBuilder` + +```TS +import { MemoryCache } from '@llm-tools/embedjs/cache/mongo'; + +await new RAGApplicationBuilder() +.setCache(new MongoCache({ ... })) +``` + +## Bring your own cache + +You can pass along your own cache provider to the `setCache` method by implementing the interface `BaseCache`. Here's how that would look like - + +```TS +class MyOwnCache implements BaseCache { + async init(): Promise { + throw new Error("Method not implemented."); + } + + async addLoader(loaderId: string, chunkCount: number ): Promise { + throw new Error("Method not implemented."); + } + + async getLoader(loaderId: string): Promise<{ chunkCount: number }> { + throw new Error("Method not implemented."); + } + + async hasLoader(loaderId: string): Promise { + throw new Error("Method not implemented."); + } +} +``` + +We really encourage you send in a PR to this library if you are implementing a famous or common cache provider, so the community can benefit from it. + +## More caches coming soon + +If you want to add support for any other cache providers, please create an [issue](https://github.com/llm-tools/embedjs/issues) and we will add it to the list of supported caches. All PRs are welcome. + +# Conversation history + +EmbedJS allows the addition of various storage layers for conversations. This allows the conversation history to be stored and made persistant between sessions. Like all other aspects of embedJS there is a base interface for conversations and you can create your own conversation history implementation. + +The library supports the following conversation history types out of the box - + +## InMemory (conversation) + +You can use a simple in-memory object to store conversation history during testing. This is the default activated conversation history manager if you don't specify anything else. This cache is used by **default** if no other cache is specified. + +- Set `InMemoryConversation` as your cache provider on `RAGApplicationBuilder` + +```TS +import { MemoryConversations } from '@llm-tools/embedjs/conversation/memory'; + +await new RAGApplicationBuilder() +.setConversationEngine(new InMemoryConversation()) +``` + +**Note:** Although this cache does remove duplicate loaders and chunks, its store does not persist between process restarts. + +## MongoDB (conversation) + +Can be used with any version of MongoDb. + +- Set `MongoConversation` as your cache provider on `RAGApplicationBuilder` + +```TS +import { MongoConversation } from '@llm-tools/embedjs/conversation/mongo'; + +await new RAGApplicationBuilder() +.setConversationEngine(new MongoConversations({ + uri: MONGODB_URI, + dbName: DB_NAME, + collectionName: CONVERSATIONS_COLLECTION_NAME +});) +``` + +# Langsmith Integration + +Langsmith allows you to keep track of how you use LLM and embedding models. It logs histories, token uses and other metadata. Follow these three simple steps to enable - + +- Sign up for an account with [Langsmith](https://smith.langchain.com/) +- Generate an API Key from your admin page +- Set the following environment keys in your project + +```bash +export LANGCHAIN_TRACING_V2=true +export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com" +export LANGCHAIN_PROJECT="" +export LANGCHAIN_API_KEY="" +``` + +# Sample projects + +Here's a list of projects / examples built with RagKit + +| **Project** | **Description** | +| ------------------------------------------------------------ | ---------------------------------------------------------------------- | +| [slack-bot](https://github.com/llm-tools/slack-bot-template) | A NestJs based slack bot that can answer questions based on confluence | + +# Contributing + +Contributions are welcome! Please check out the issues on the repository, and feel free to open a pull request. +For more information, please see the [contributing guidelines](CONTRIBUTING.md). + + + + diff --git a/core/embedjs/eslint.config.js b/core/embedjs/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/core/embedjs/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/core/embedjs/package.json b/core/embedjs/package.json new file mode 100644 index 00000000..0f022edc --- /dev/null +++ b/core/embedjs/package.json @@ -0,0 +1,49 @@ +{ + "type": "module", + "name": "@llm-tools/embedjs", + "version": "0.0.1", + "description": "A NodeJS RAG framework to easily work with LLMs and custom datasets", + "dependencies": { + "axios": "^1.7.7", + "debug": "^4.3.7", + "langchain": "^0.3.2", + "md5": "^2.3.0", + "mime": "^4.0.4", + "stream-mime-type": "^2.0.0", + "@llm-tools/embedjs-utils": "0.0.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "devDependencies": { + "@types/debug": "^4.1.12", + "@types/md5": "^2.3.5", + "@types/node": "^22.7.4" + }, + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/core/embedjs/project.json b/core/embedjs/project.json new file mode 100644 index 00000000..3c8ab94a --- /dev/null +++ b/core/embedjs/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "core/embedjs/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs", + "main": "core/embedjs/src/index.ts", + "tsConfig": "core/embedjs/tsconfig.lib.json", + "assets": ["core/embedjs/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs", + "main": "core/embedjs/src/index.ts", + "tsConfig": "core/embedjs/tsconfig.cjs.json" + } + } + } +} diff --git a/src/cache/memory-cache.ts b/core/embedjs/src/cache/memory-cache.ts similarity index 93% rename from src/cache/memory-cache.ts rename to core/embedjs/src/cache/memory-cache.ts index b3e31c11..49cc52a7 100644 --- a/src/cache/memory-cache.ts +++ b/core/embedjs/src/cache/memory-cache.ts @@ -1,43 +1,43 @@ -import { BaseCache } from '../interfaces/base-cache.js'; - -export class MemoryCache implements BaseCache { - private loaderList: Record; - private loaderCustomValues: Record>; - - async init(): Promise { - this.loaderList = {}; - this.loaderCustomValues = {}; - } - - async addLoader(loaderId: string, chunkCount: number): Promise { - this.loaderList[loaderId] = { chunkCount }; - } - - async getLoader(loaderId: string): Promise<{ chunkCount: number }> { - return this.loaderList[loaderId]; - } - - async hasLoader(loaderId: string): Promise { - return this.loaderList.hasOwnProperty(loaderId); - } - - async loaderCustomSet>(loaderCombinedId: string, value: T): Promise { - this.loaderCustomValues[loaderCombinedId] = value; - } - - async loaderCustomGet>(loaderCombinedId: string): Promise { - return this.loaderCustomValues[loaderCombinedId]; - } - - async loaderCustomHas(loaderCombinedId: string): Promise { - return this.loaderCustomValues.hasOwnProperty(loaderCombinedId); - } - - async deleteLoader(loaderId: string): Promise { - delete this.loaderList[loaderId]; - } - - async loaderCustomDelete(loaderCombinedId: string): Promise { - delete this.loaderList[loaderCombinedId]; - } -} +import { BaseCache } from '@llm-tools/embedjs-interfaces'; + +export class MemoryCache implements BaseCache { + private loaderList: Record; + private loaderCustomValues: Record>; + + async init(): Promise { + this.loaderList = {}; + this.loaderCustomValues = {}; + } + + async addLoader(loaderId: string, chunkCount: number): Promise { + this.loaderList[loaderId] = { chunkCount }; + } + + async getLoader(loaderId: string): Promise<{ chunkCount: number }> { + return this.loaderList[loaderId]; + } + + async hasLoader(loaderId: string): Promise { + return this.loaderList.hasOwnProperty(loaderId); + } + + async loaderCustomSet>(loaderCombinedId: string, value: T): Promise { + this.loaderCustomValues[loaderCombinedId] = value; + } + + async loaderCustomGet>(loaderCombinedId: string): Promise { + return this.loaderCustomValues[loaderCombinedId]; + } + + async loaderCustomHas(loaderCombinedId: string): Promise { + return this.loaderCustomValues.hasOwnProperty(loaderCombinedId); + } + + async deleteLoader(loaderId: string): Promise { + delete this.loaderList[loaderId]; + } + + async loaderCustomDelete(loaderCombinedId: string): Promise { + delete this.loaderList[loaderCombinedId]; + } +} diff --git a/src/conversation/memory-conversations.ts b/core/embedjs/src/conversation/memory-conversations.ts similarity index 88% rename from src/conversation/memory-conversations.ts rename to core/embedjs/src/conversation/memory-conversations.ts index 94ef9eb0..8e54093e 100644 --- a/src/conversation/memory-conversations.ts +++ b/core/embedjs/src/conversation/memory-conversations.ts @@ -1,41 +1,41 @@ -import { Conversation, Message } from '../global/types.js'; -import { BaseConversation } from '../interfaces/base-conversations.js'; - -export class InMemoryConversation implements BaseConversation { - private conversations: Map = new Map(); - - async init(): Promise { - this.conversations.clear(); - } - - async addConversation(conversationId: string): Promise { - if (!this.conversations.has(conversationId)) { - this.conversations.set(conversationId, { conversationId, entries: [] }); - } - } - - async getConversation(conversationId: string): Promise { - if (!this.conversations.has(conversationId)) { - // Automatically create a new conversation if it does not exist - this.conversations.set(conversationId, { conversationId, entries: [] }); - } - return this.conversations.get(conversationId)!; - } - - async hasConversation(conversationId: string): Promise { - return this.conversations.has(conversationId); - } - - async deleteConversation(conversationId: string): Promise { - this.conversations.delete(conversationId); - } - - async addEntryToConversation(conversationId: string, entry: Message): Promise { - const conversation = await this.getConversation(conversationId); - conversation.entries.push(entry); - } - - async clearConversations(): Promise { - this.conversations.clear(); - } -} +import { BaseConversation, Conversation, Message } from '@llm-tools/embedjs-interfaces'; + +export class InMemoryConversation implements BaseConversation { + private conversations: Map = new Map(); + + async init(): Promise { + this.conversations.clear(); + } + + async addConversation(conversationId: string): Promise { + if (!this.conversations.has(conversationId)) { + this.conversations.set(conversationId, { conversationId, entries: [] }); + } + } + + async getConversation(conversationId: string): Promise { + if (!this.conversations.has(conversationId)) { + // Automatically create a new conversation if it does not exist + this.conversations.set(conversationId, { conversationId, entries: [] }); + } + + return this.conversations.get(conversationId)!; + } + + async hasConversation(conversationId: string): Promise { + return this.conversations.has(conversationId); + } + + async deleteConversation(conversationId: string): Promise { + this.conversations.delete(conversationId); + } + + async addEntryToConversation(conversationId: string, entry: Message): Promise { + const conversation = await this.getConversation(conversationId); + conversation.entries.push(entry); + } + + async clearConversations(): Promise { + this.conversations.clear(); + } +} diff --git a/src/core/dynamic-loader-selector.ts b/core/embedjs/src/core/dynamic-loader-selector.ts similarity index 87% rename from src/core/dynamic-loader-selector.ts rename to core/embedjs/src/core/dynamic-loader-selector.ts index 347bf54e..2a178053 100644 --- a/src/core/dynamic-loader-selector.ts +++ b/core/embedjs/src/core/dynamic-loader-selector.ts @@ -1,149 +1,145 @@ -import fs from 'node:fs'; -import path from 'node:path'; -import createDebugMessages from 'debug'; - -import { isValidJson, isValidURL } from '../util/strings.js'; -import { DocxLoader } from '../loaders/docx-loader.js'; -import { ExcelLoader } from '../loaders/excel-loader.js'; -import { WebLoader } from '../loaders/web-loader.js'; -import { PdfLoader } from '../loaders/pdf-loader.js'; -import { PptLoader } from '../loaders/ppt-loader.js'; -import { TextLoader } from '../loaders/text-loader.js'; -import { SitemapLoader } from '../loaders/sitemap-loader.js'; -import { ConfluenceLoader } from '../loaders/confluence-loader.js'; -import { YoutubeChannelLoader } from '../loaders/youtube-channel-loader.js'; -import { YoutubeSearchLoader } from '../loaders/youtube-search-loader.js'; -import { YoutubeLoader } from '../loaders/youtube-loader.js'; -import { BaseLoader } from '../interfaces/base-loader.js'; -import { JsonLoader } from '../loaders/json-loader.js'; -import { UrlLoader } from '../loaders/url-loader.js'; -import { LocalPathLoader } from '../loaders/local-path-loader.js'; -import { CsvLoader } from '../loaders/csv-loader.js'; - -export type LoaderParam = - | string - | BaseLoader - | ({ type: 'Confluence' } & ConstructorParameters[0]) - | ({ type: 'Web' } & ConstructorParameters[0]) - | ({ type: 'Doc' } & ConstructorParameters[0]) - | ({ type: 'Excel' } & ConstructorParameters[0]) - | ({ type: 'Json' } & ConstructorParameters[0]) - | ({ type: 'Pdf' } & ConstructorParameters[0]) - | ({ type: 'Ppt' } & ConstructorParameters[0]) - | ({ type: 'Sitemap' } & ConstructorParameters[0]) - | ({ type: 'Text' } & ConstructorParameters[0]) - | ({ type: 'YoutubeChannel' } & ConstructorParameters[0]) - | ({ type: 'Youtube' } & ConstructorParameters[0]) - | ({ type: 'YoutubeSearch' } & ConstructorParameters[0]) - | ({ type: 'LocalPath' } & ConstructorParameters[0]) - | ({ type: 'Url' } & ConstructorParameters[0]) - | ({ type: 'Csv' } & ConstructorParameters[0]); - -/** - * This class generates different types of loaders based on a string input. - */ -export class DynamicLoader { - private static readonly debug = createDebugMessages('embedjs:DynamicLoader'); - - /** - * The function `unfurlLoader` determines the type of loader based on the input string and returns - * the corresponding loader object. - * @param {string} loader - The `loader` parameter in the `unfurlLoader` function is a string that - * represents the source from which data will be loaded. It can be a URL, a local file path, a JSON - * string, or a YouTube video ID. The function checks the type of loader and returns an appropriate - * @returns The function `unfurlLoader` returns an instance of a subclass of `BaseLoader` based on - * the type of input `loader` provided. The possible return types are `UrlLoader`, - * `LocalPathLoader`, `JsonLoader`, or `YoutubeLoader`. - */ - private static async unfurlLoader(loader: string): Promise { - if (isValidURL(loader)) { - DynamicLoader.debug('Loader is a valid URL!'); - return new UrlLoader({ url: loader }); - } else if (fs.existsSync(path.resolve(loader))) { - DynamicLoader.debug('Loader is a valid path on local filesystem!'); - return new LocalPathLoader({ path: path.resolve(loader) }); - } else if (isValidJson(loader)) { - DynamicLoader.debug('Loader is a valid JSON!'); - return new JsonLoader({ object: JSON.parse(loader) }); - } else if (loader.length === 11) { - DynamicLoader.debug('Loader is likely a youtube video id!'); - return new YoutubeLoader({ videoIdOrUrl: loader }); - } else { - throw new SyntaxError(`Unknown loader ${loader}`); - } - } - - /** - * The function `createLoader` dynamically creates and returns a loader object based on the input provided. - * @param {LoaderParam} loader - The `createLoader` function is designed to create a loader based - * on the input provided. The `loader` parameter can be of type `string`, an instance of - * `BaseLoader`, or an object with a `type` property specifying the type of loader to create. - * @returns The `createLoader` function returns a Promise that resolves to an instance of a - * specific type of loader based on the input `loader` parameter. The function checks the type of - * the `loader` parameter and returns different loader instances based on the type or properties of - * the input. - */ - public static async createLoader(loader: LoaderParam): Promise { - if (typeof loader === 'string') { - DynamicLoader.debug('Loader is of type string; unfurling'); - return await DynamicLoader.unfurlLoader(loader); - } - - if (loader instanceof BaseLoader) { - DynamicLoader.debug('Loader is of type BaseLoader; returning as is'); - return loader; - } - - if (loader.type) { - DynamicLoader.debug('Loader is an object of specific type; 1to1 match can be done...'); - switch (loader.type) { - case 'Confluence': - return new ConfluenceLoader(loader); - case 'Web': - return new WebLoader(loader); - case 'Doc': - return new DocxLoader(loader); - case 'Excel': - return new ExcelLoader(loader); - case 'Json': - return new JsonLoader(loader); - case 'Pdf': - return new PdfLoader(loader); - case 'Ppt': - return new PptLoader(loader); - case 'Sitemap': - return new SitemapLoader(loader); - case 'Text': - return new TextLoader(loader); - case 'YoutubeChannel': - return new YoutubeChannelLoader(loader); - case 'Youtube': - return new YoutubeLoader(loader); - case 'YoutubeSearch': - return new YoutubeSearchLoader(loader); - case 'LocalPath': - return new LocalPathLoader(loader); - case 'Url': - return new UrlLoader(loader); - case 'Csv': - return new CsvLoader(loader); - default: - throw new SyntaxError(`Unknown loader type ${(loader).type}`); - } - } - - DynamicLoader.debug('Loader could not be parsed!'); - throw new SyntaxError(`Unknown loader ${loader}`); - } - - /** - * The function `createLoaders` asynchronously creates multiple loaders using the provided - * parameters and returns them as an array. - * @param {LoaderParam[]} loaders - An array of LoaderParam objects. - * @returns An array of BaseLoader objects is being returned after creating loaders using the - * DynamicLoader class. - */ - public static async createLoaders(loaders: LoaderParam[]): Promise { - return await Promise.all(loaders.map(DynamicLoader.createLoader)); - } -} +import fs from 'node:fs'; +import path from 'node:path'; +import createDebugMessages from 'debug'; + +import { TextLoader } from '../loaders/text-loader.js'; +import { JsonLoader } from '../loaders/json-loader.js'; +import { UrlLoader } from '../loaders/url-loader.js'; +import { LocalPathLoader } from '../loaders/local-path-loader.js'; +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { isValidJson, isValidURL } from '@llm-tools/embedjs-utils'; +import { CsvLoader } from '@llm-tools/embedjs-loader-csv'; +import { WebLoader } from '@llm-tools/embedjs-loader-web'; +import { YoutubeChannelLoader, YoutubeLoader, YoutubeSearchLoader } from '@llm-tools/embedjs-loader-youtube'; +import { ConfluenceLoader } from '@llm-tools/embedjs-loader-confluence'; +import { DocxLoader, ExcelLoader, PptLoader } from '@llm-tools/embedjs-loader-msoffice'; +import { PdfLoader } from '@llm-tools/embedjs-loader-pdf'; +import { SitemapLoader } from '@llm-tools/embedjs-loader-sitemap'; + +export type LoaderParam = + | string + | BaseLoader + | ({ type: 'Confluence' } & ConstructorParameters[0]) + | ({ type: 'Web' } & ConstructorParameters[0]) + | ({ type: 'Doc' } & ConstructorParameters[0]) + | ({ type: 'Excel' } & ConstructorParameters[0]) + | ({ type: 'Json' } & ConstructorParameters[0]) + | ({ type: 'Pdf' } & ConstructorParameters[0]) + | ({ type: 'Ppt' } & ConstructorParameters[0]) + | ({ type: 'Sitemap' } & ConstructorParameters[0]) + | ({ type: 'Text' } & ConstructorParameters[0]) + | ({ type: 'YoutubeChannel' } & ConstructorParameters[0]) + | ({ type: 'Youtube' } & ConstructorParameters[0]) + | ({ type: 'YoutubeSearch' } & ConstructorParameters[0]) + | ({ type: 'LocalPath' } & ConstructorParameters[0]) + | ({ type: 'Url' } & ConstructorParameters[0]) + | ({ type: 'Csv' } & ConstructorParameters[0]); + +/** + * This class generates different types of loaders based on a string input. + */ +export class DynamicLoader { + private static readonly debug = createDebugMessages('embedjs:DynamicLoader'); + + /** + * The function `unfurlLoader` determines the type of loader based on the input string and returns + * the corresponding loader object. + * @param {string} loader - The `loader` parameter in the `unfurlLoader` function is a string that + * represents the source from which data will be loaded. It can be a URL, a local file path, a JSON + * string, or a YouTube video ID. The function checks the type of loader and returns an appropriate + * @returns The function `unfurlLoader` returns an instance of a subclass of `BaseLoader` based on + * the type of input `loader` provided. The possible return types are `UrlLoader`, + * `LocalPathLoader`, `JsonLoader`, or `YoutubeLoader`. + */ + private static async unfurlLoader(loader: string): Promise { + if (isValidURL(loader)) { + DynamicLoader.debug('Loader is a valid URL!'); + return new UrlLoader({ url: loader }); + } else if (fs.existsSync(path.resolve(loader))) { + DynamicLoader.debug('Loader is a valid path on local filesystem!'); + return new LocalPathLoader({ path: path.resolve(loader) }); + } else if (isValidJson(loader)) { + DynamicLoader.debug('Loader is a valid JSON!'); + return new JsonLoader({ object: JSON.parse(loader) }); + } else if (loader.length === 11) { + DynamicLoader.debug('Loader is likely a youtube video id!'); + return new YoutubeLoader({ videoIdOrUrl: loader }); + } else { + throw new SyntaxError(`Unknown loader ${loader}`); + } + } + + /** + * The function `createLoader` dynamically creates and returns a loader object based on the input provided. + * @param {LoaderParam} loader - The `createLoader` function is designed to create a loader based + * on the input provided. The `loader` parameter can be of type `string`, an instance of + * `BaseLoader`, or an object with a `type` property specifying the type of loader to create. + * @returns The `createLoader` function returns a Promise that resolves to an instance of a + * specific type of loader based on the input `loader` parameter. The function checks the type of + * the `loader` parameter and returns different loader instances based on the type or properties of + * the input. + */ + public static async createLoader(loader: LoaderParam): Promise { + if (typeof loader === 'string') { + DynamicLoader.debug('Loader is of type string; unfurling'); + return await DynamicLoader.unfurlLoader(loader); + } + + if (loader instanceof BaseLoader) { + DynamicLoader.debug('Loader is of type BaseLoader; returning as is'); + return loader; + } + + if (loader.type) { + DynamicLoader.debug('Loader is an object of specific type; 1to1 match can be done...'); + switch (loader.type) { + case 'Confluence': + return new ConfluenceLoader(loader); + case 'Web': + return new WebLoader(loader); + case 'Doc': + return new DocxLoader(loader); + case 'Excel': + return new ExcelLoader(loader); + case 'Json': + return new JsonLoader(loader); + case 'Pdf': + return new PdfLoader(loader); + case 'Ppt': + return new PptLoader(loader); + case 'Sitemap': + return new SitemapLoader(loader); + case 'Text': + return new TextLoader(loader); + case 'YoutubeChannel': + return new YoutubeChannelLoader(loader); + case 'Youtube': + return new YoutubeLoader(loader); + case 'YoutubeSearch': + return new YoutubeSearchLoader(loader); + case 'LocalPath': + return new LocalPathLoader(loader); + case 'Url': + return new UrlLoader(loader); + case 'Csv': + return new CsvLoader(loader); + default: + throw new SyntaxError(`Unknown loader type ${(<{ type: string }>loader).type}`); + } + } + + DynamicLoader.debug('Loader could not be parsed!'); + throw new SyntaxError(`Unknown loader ${loader}`); + } + + /** + * The function `createLoaders` asynchronously creates multiple loaders using the provided + * parameters and returns them as an array. + * @param {LoaderParam[]} loaders - An array of LoaderParam objects. + * @returns An array of BaseLoader objects is being returned after creating loaders using the + * DynamicLoader class. + */ + public static async createLoaders(loaders: LoaderParam[]): Promise { + return await Promise.all(loaders.map(DynamicLoader.createLoader)); + } +} diff --git a/src/core/rag-application-builder.ts b/core/embedjs/src/core/rag-application-builder.ts similarity index 87% rename from src/core/rag-application-builder.ts rename to core/embedjs/src/core/rag-application-builder.ts index 93b41d95..72eaf030 100644 --- a/src/core/rag-application-builder.ts +++ b/core/embedjs/src/core/rag-application-builder.ts @@ -1,145 +1,147 @@ -import { BaseDb } from '../interfaces/base-db.js'; -import { RAGApplication } from './rag-application.js'; -import { BaseCache } from '../interfaces/base-cache.js'; -import { BaseEmbeddings } from '../interfaces/base-embeddings.js'; -import { BaseModel } from '../interfaces/base-model.js'; -import { SIMPLE_MODELS } from '../global/constants.js'; -import { OpenAi } from '../models/openai-model.js'; -import { LoaderParam } from './dynamic-loader-selector.js'; -import { BaseConversation } from '../interfaces/base-conversations.js'; - -export class RAGApplicationBuilder { - private temperature: number; - private queryTemplate: string; - private cache?: BaseCache; - private model: BaseModel | null; - private searchResultCount: number; - private embeddingModel: BaseEmbeddings; - private embeddingRelevanceCutOff: number; - private loaders: LoaderParam[]; - private vectorDb: BaseDb; - private conversations: BaseConversation; - - constructor() { - this.loaders = []; - this.temperature = 0.1; - this.searchResultCount = 7; - - this.queryTemplate = `You are a helpful human like chat bot. Use relevant provided context and chat history to answer the query at the end. Answer in full. - If you don't know the answer, just say that you don't know, don't try to make up an answer. - - Do not use words like context or training data when responding. You can say you do not have all the information but do not indicate that you are not a reliable source.`; - - this.setModel(SIMPLE_MODELS.OPENAI_GPT4_O); - this.embeddingRelevanceCutOff = 0; - } - - async build() { - const entity = new RAGApplication(this); - await entity.init(); - return entity; - } - - addLoader(loader: LoaderParam) { - this.loaders.push(loader); - return this; - } - - setSearchResultCount(searchResultCount: number) { - this.searchResultCount = searchResultCount; - return this; - } - - setVectorDb(vectorDb: BaseDb) { - this.vectorDb = vectorDb; - return this; - } - - setTemperature(temperature: number) { - this.temperature = temperature; - if (this.model) this.setModel(this.model); - return this; - } - - setEmbeddingRelevanceCutOff(embeddingRelevanceCutOff: number) { - this.embeddingRelevanceCutOff = embeddingRelevanceCutOff; - return this; - } - - setQueryTemplate(queryTemplate: string) { - // if (!queryTemplate.includes('{0}')) - // throw new Error('queryTemplate must include a placeholder for the query using {0}'); - - this.queryTemplate = queryTemplate; - return this; - } - - setCache(cache: BaseCache) { - this.cache = cache; - return this; - } - - setEmbeddingModel(embeddingModel: BaseEmbeddings) { - this.embeddingModel = embeddingModel; - return this; - } - - setModel(model: 'NO_MODEL' | SIMPLE_MODELS | BaseModel) { - if (typeof model === 'object') this.model = model; - else { - if (model === SIMPLE_MODELS.OPENAI_GPT4_O) this.model = new OpenAi({ modelName: 'gpt-4o' }); - else if (model === SIMPLE_MODELS['OPENAI_GPT4_TURBO']) - this.model = new OpenAi({ modelName: 'gpt-4-turbo' }); - else if (model === SIMPLE_MODELS['OPENAI_GPT3.5_TURBO']) - this.model = new OpenAi({ modelName: 'gpt-3.5-turbo' }); - else this.model = null; - } - - return this; - } - - getLoaders() { - return this.loaders; - } - - getSearchResultCount() { - return this.searchResultCount; - } - - getVectorDb() { - return this.vectorDb; - } - - getTemperature() { - return this.temperature; - } - - getEmbeddingRelevanceCutOff() { - return this.embeddingRelevanceCutOff; - } - - getQueryTemplate() { - return this.queryTemplate; - } - - getCache() { - return this.cache; - } - - getEmbeddingModel() { - return this.embeddingModel; - } - - getModel() { - return this.model; - } - - setConversationEngine(conversations: BaseConversation) { - this.conversations = conversations; - return this; - } - - getConversationsEngine() { - return this.conversations; - } -} +import { RAGApplication } from './rag-application.js'; +import { LoaderParam } from './dynamic-loader-selector.js'; +import { + BaseCache, + BaseConversation, + BaseDb, + BaseEmbeddings, + BaseModel, + SIMPLE_MODELS, +} from '@llm-tools/embedjs-interfaces'; +import { OpenAi } from '@llm-tools/embedjs-openai'; + +export class RAGApplicationBuilder { + private temperature: number; + private queryTemplate: string; + private cache?: BaseCache; + private model: BaseModel | null; + private searchResultCount: number; + private embeddingModel: BaseEmbeddings; + private embeddingRelevanceCutOff: number; + private loaders: LoaderParam[]; + private vectorDb: BaseDb; + private conversations: BaseConversation; + + constructor() { + this.loaders = []; + this.temperature = 0.1; + this.searchResultCount = 7; + + this.queryTemplate = `You are a helpful human like chat bot. Use relevant provided context and chat history to answer the query at the end. Answer in full. + If you don't know the answer, just say that you don't know, don't try to make up an answer. + + Do not use words like context or training data when responding. You can say you do not have all the information but do not indicate that you are not a reliable source.`; + + this.setModel(SIMPLE_MODELS.OPENAI_GPT4_O); + this.embeddingRelevanceCutOff = 0; + } + + async build() { + const entity = new RAGApplication(this); + await entity.init(); + return entity; + } + + addLoader(loader: LoaderParam) { + this.loaders.push(loader); + return this; + } + + setSearchResultCount(searchResultCount: number) { + this.searchResultCount = searchResultCount; + return this; + } + + setVectorDb(vectorDb: BaseDb) { + this.vectorDb = vectorDb; + return this; + } + + setTemperature(temperature: number) { + this.temperature = temperature; + if (this.model) this.setModel(this.model); + return this; + } + + setEmbeddingRelevanceCutOff(embeddingRelevanceCutOff: number) { + this.embeddingRelevanceCutOff = embeddingRelevanceCutOff; + return this; + } + + setQueryTemplate(queryTemplate: string) { + // if (!queryTemplate.includes('{0}')) + // throw new Error('queryTemplate must include a placeholder for the query using {0}'); + + this.queryTemplate = queryTemplate; + return this; + } + + setCache(cache: BaseCache) { + this.cache = cache; + return this; + } + + setEmbeddingModel(embeddingModel: BaseEmbeddings) { + this.embeddingModel = embeddingModel; + return this; + } + + setModel(model: 'NO_MODEL' | SIMPLE_MODELS | BaseModel) { + if (typeof model === 'object') this.model = model; + else { + if (model === SIMPLE_MODELS.OPENAI_GPT4_O) this.model = new OpenAi({ modelName: 'gpt-4o' }); + else if (model === SIMPLE_MODELS['OPENAI_GPT4_TURBO']) + this.model = new OpenAi({ modelName: 'gpt-4-turbo' }); + else if (model === SIMPLE_MODELS['OPENAI_GPT3.5_TURBO']) + this.model = new OpenAi({ modelName: 'gpt-3.5-turbo' }); + else this.model = null; + } + + return this; + } + + getLoaders() { + return this.loaders; + } + + getSearchResultCount() { + return this.searchResultCount; + } + + getVectorDb() { + return this.vectorDb; + } + + getTemperature() { + return this.temperature; + } + + getEmbeddingRelevanceCutOff() { + return this.embeddingRelevanceCutOff; + } + + getQueryTemplate() { + return this.queryTemplate; + } + + getCache() { + return this.cache; + } + + getEmbeddingModel() { + return this.embeddingModel; + } + + getModel() { + return this.model; + } + + setConversationEngine(conversations: BaseConversation) { + this.conversations = conversations; + return this; + } + + getConversationsEngine() { + return this.conversations; + } +} diff --git a/src/core/rag-application.ts b/core/embedjs/src/core/rag-application.ts similarity index 94% rename from src/core/rag-application.ts rename to core/embedjs/src/core/rag-application.ts index ed898a4a..ee6c6ea7 100644 --- a/src/core/rag-application.ts +++ b/core/embedjs/src/core/rag-application.ts @@ -1,377 +1,382 @@ -import createDebugMessages from 'debug'; - -import { BaseDb } from '../interfaces/base-db.js'; -import { BaseLoader } from '../interfaces/base-loader.js'; -import { AddLoaderReturn, Chunk, InsertChunkData, LoaderChunk, QueryResponse } from '../global/types.js'; -import { DynamicLoader, LoaderParam } from './dynamic-loader-selector.js'; -import { RAGApplicationBuilder } from './rag-application-builder.js'; -import { DEFAULT_INSERT_BATCH_SIZE } from '../global/constants.js'; -import { BaseModel } from '../interfaces/base-model.js'; -import { BaseCache } from '../interfaces/base-cache.js'; -import { RAGEmbedding } from './rag-embedding.js'; -import { cleanString } from '../util/strings.js'; -import { getUnique } from '../util/arrays.js'; -import { OpenAi3SmallEmbeddings } from '../index.js'; -import { InMemoryConversation } from '../conversation/memory-conversations.js'; - -export class RAGApplication { - private readonly debug = createDebugMessages('embedjs:core'); - private readonly queryTemplate: string; - private readonly searchResultCount: number; - private readonly cache?: BaseCache; - private readonly vectorDb: BaseDb; - private readonly model: BaseModel; - private readonly embeddingRelevanceCutOff: number; - - private readonly rawLoaders: LoaderParam[]; - private loaders: BaseLoader[]; - - constructor(llmBuilder: RAGApplicationBuilder) { - this.cache = llmBuilder.getCache(); - BaseLoader.setCache(this.cache); - - this.model = llmBuilder.getModel(); - if (!this.model) this.debug('No base model set; query function unavailable!'); - else { - BaseModel.setDefaultTemperature(llmBuilder.getTemperature()); - BaseModel.setConversations(llmBuilder.getConversationsEngine() || new InMemoryConversation()); - } - - this.queryTemplate = cleanString(llmBuilder.getQueryTemplate()); - this.debug(`Using system query template - "${this.queryTemplate}"`); - - this.vectorDb = llmBuilder.getVectorDb(); - if (!this.vectorDb) throw new SyntaxError('VectorDb not set'); - - this.rawLoaders = llmBuilder.getLoaders(); - this.searchResultCount = llmBuilder.getSearchResultCount(); - this.embeddingRelevanceCutOff = llmBuilder.getEmbeddingRelevanceCutOff(); - - RAGEmbedding.init(llmBuilder.getEmbeddingModel() ?? new OpenAi3SmallEmbeddings()); - } - - /** - * The function `embedChunks` embeds the content of chunks by invoking the planned embedding model. - * @param {Pick[]} chunks - The `chunks` parameter is an array of objects - * that have a property `pageContent` which contains text content for each chunk. - * @returns The `embedChunks` function is returning the embedded vectors for the chunks. - */ - private async embedChunks(chunks: Pick[]) { - const texts = chunks.map(({ pageContent }) => pageContent); - return RAGEmbedding.getEmbedding().embedDocuments(texts); - } - - /** - * The function `getChunkUniqueId` generates a unique identifier by combining a loader unique ID and - * an increment ID. - * @param {string} loaderUniqueId - A unique identifier for the loader. - * @param {number} incrementId - The `incrementId` parameter is a number that represents the - * increment value used to generate a unique chunk identifier. - * @returns The function `getChunkUniqueId` returns a string that combines the `loaderUniqueId` and - * `incrementId`. - */ - private getChunkUniqueId(loaderUniqueId: string, incrementId: number) { - return `${loaderUniqueId}_${incrementId}`; - } - - /** - * This async function initializes various components such as loaders, model, vector database, - * cache, and pre-loaders. - */ - public async init() { - this.loaders = await DynamicLoader.createLoaders(this.rawLoaders); - - if (this.model) { - await this.model.init(); - this.debug('Initialized LLM class'); - } - - await this.vectorDb.init({ dimensions: await RAGEmbedding.getEmbedding().getDimensions() }); - this.debug('Initialized vector database'); - - if (this.cache) { - await this.cache.init(); - this.debug('Initialized cache'); - } - - this.loaders = getUnique(this.loaders, 'getUniqueId'); - for await (const loader of this.loaders) { - await this.addLoader(loader); - } - this.debug('Initialized pre-loaders'); - } - - /** - * The function `addLoader` asynchronously initalizes a loader using the provided parameters and adds - * it to the system. - * @param {LoaderParam} loaderParam - The `loaderParam` parameter is a string, object or instance of BaseLoader - * that contains the necessary information to create a loader. - * @returns The function `addLoader` returns an object with the following properties: - * - `entriesAdded`: Number of new entries added during the loader operation - * - `uniqueId`: Unique identifier of the loader - * - `loaderType`: Name of the loader's constructor class - */ - public async addLoader(loaderParam: LoaderParam): Promise { - const loader = await DynamicLoader.createLoader(loaderParam); - return this._addLoader(loader); - } - - /** - * The function `_addLoader` asynchronously adds a loader, processes its chunks, and handles - * incremental loading if supported by the loader. - * @param {BaseLoader} loader - The `loader` parameter in the `_addLoader` method is an instance of the - * `BaseLoader` class. - * @returns The function `_addLoader` returns an object with the following properties: - * - `entriesAdded`: Number of new entries added during the loader operation - * - `uniqueId`: Unique identifier of the loader - * - `loaderType`: Name of the loader's constructor class - */ - private async _addLoader(loader: BaseLoader): Promise { - const uniqueId = loader.getUniqueId(); - this.debug('Add loader called for', uniqueId); - await loader.init(); - - const chunks = await loader.getChunks(); - if (this.cache && (await this.cache.hasLoader(uniqueId))) { - const { chunkCount: previousChunkCount } = await this.cache.getLoader(uniqueId); - - this.debug(`Loader previously run. Deleting previous ${previousChunkCount} keys`, uniqueId); - if (previousChunkCount > 0) { - await this.deleteLoader(uniqueId, true); - } - } - - const { newInserts, formattedChunks } = await this.batchLoadChunks(uniqueId, chunks); - if (this.cache) await this.cache.addLoader(uniqueId, formattedChunks.length); - this.debug(`Add loader completed with ${newInserts} new entries for`, uniqueId); - - if (loader.canIncrementallyLoad) { - this.debug(`Registering incremental loader`, uniqueId); - - loader.on('incrementalChunkAvailable', async (incrementalGenerator) => { - await this.incrementalLoader(uniqueId, incrementalGenerator); - }); - } - - this.loaders = this.loaders.filter((x) => x.getUniqueId() != loader.getUniqueId()); - this.loaders.push(loader); - - this.debug(`Add loader ${uniqueId} wrap`); - return { entriesAdded: newInserts, uniqueId, loaderType: loader.constructor.name }; - } - - /** - * The `incrementalLoader` function asynchronously processes incremental chunks for a loader. - * @param {string} uniqueId - The `uniqueId` parameter is a string that serves as an identifier for - * the loader. - * @param incrementalGenerator - The `incrementalGenerator` parameter is an asynchronous generator - * function that yields `LoaderChunk` objects. It is used to incrementally load chunks of data for a specific loader - */ - private async incrementalLoader(uniqueId: string, incrementalGenerator: AsyncGenerator) { - this.debug(`incrementalChunkAvailable for loader`, uniqueId); - const { newInserts } = await this.batchLoadChunks(uniqueId, incrementalGenerator); - this.debug(`${newInserts} new incrementalChunks processed`, uniqueId); - } - - /** - * The function `getLoaders` asynchronously retrieves a list of loaders loaded so far. This includes - * internal loaders that were loaded by other loaders. It requires that cache is enabled to work. - * @returns The list of loaders with some metadata about them. - */ - public async getLoaders() { - return BaseLoader.getLoadersList(); - } - - /** - * The function `deleteLoader` deletes embeddings from a loader after confirming the action. - * @param {string} uniqueLoaderId - The `uniqueLoaderId` parameter is a string that represents the - * identifier of the loader that you want to delete. - * @param {boolean} [areYouSure=false] - The `areYouSure` parameter is a boolean flag that - * indicates whether the user has confirmed their intention to delete embeddings from a loader. If - * `areYouSure` is `true`, the function proceeds with the deletion process. If `areYouSure` is - * `false`, a warning message is logged and no action is taken - * @returns The `deleteLoader` method returns a boolean value indicating the success of the operation. - */ - public async deleteLoader(uniqueLoaderId: string, areYouSure: boolean = false) { - if (!areYouSure) { - console.warn('Delete embeddings from loader called without confirmation. No action taken.'); - return false; - } - - const deleteResult = await this.vectorDb.deleteKeys(uniqueLoaderId); - if (this.cache && deleteResult) await this.cache.deleteLoader(uniqueLoaderId); - this.loaders = this.loaders.filter((x) => x.getUniqueId() != uniqueLoaderId); - return deleteResult; - } - - /** - * The function `batchLoadChunks` processes chunks of data in batches and formats them for insertion. - * @param {string} uniqueId - The `uniqueId` parameter is a string that represents a unique - * identifier for loader being processed. - * @param incrementalGenerator - The `incrementalGenerator` parameter in the `batchLoadChunks` - * function is an asynchronous generator that yields `LoaderChunk` objects. - * @returns The `batchLoadChunks` function returns an object with two properties: - * 1. `newInserts`: The total number of new inserts made during the batch loading process. - * 2. `formattedChunks`: An array containing the formatted chunks that were processed during the - * batch loading process. - */ - private async batchLoadChunks(uniqueId: string, incrementalGenerator: AsyncGenerator) { - let i = 0, - batchSize = 0, - newInserts = 0, - formattedChunks: Chunk[] = []; - - for await (const chunk of incrementalGenerator) { - batchSize++; - - const formattedChunk = { - pageContent: chunk.pageContent, - metadata: { - ...chunk.metadata, - uniqueLoaderId: uniqueId, - id: this.getChunkUniqueId(uniqueId, i++), - }, - }; - formattedChunks.push(formattedChunk); - - if (batchSize % DEFAULT_INSERT_BATCH_SIZE === 0) { - newInserts += await this.batchLoadEmbeddings(uniqueId, formattedChunks); - formattedChunks = []; - batchSize = 0; - } - } - - newInserts += await this.batchLoadEmbeddings(uniqueId, formattedChunks); - return { newInserts, formattedChunks }; - } - - /** - * The function `batchLoadEmbeddings` asynchronously loads embeddings for formatted chunks and - * inserts them into a vector database. - * @param {string} loaderUniqueId - The `loaderUniqueId` parameter is a unique identifier for the - * loader that is used to load embeddings. - * @param {Chunk[]} formattedChunks - `formattedChunks` is an array of Chunk objects that contain - * page content, metadata, and other information needed for processing. The `batchLoadEmbeddings` - * function processes these chunks in batches to obtain embeddings for each chunk and then inserts - * them into a database for further use. - * @returns The function `batchLoadEmbeddings` returns the result of inserting the embed chunks - * into the vector database. - */ - private async batchLoadEmbeddings(loaderUniqueId: string, formattedChunks: Chunk[]) { - if (formattedChunks.length === 0) return 0; - - this.debug(`Processing batch (size ${formattedChunks.length}) for loader ${loaderUniqueId}`); - const embeddings = await this.embedChunks(formattedChunks); - this.debug(`Batch embeddings (size ${formattedChunks.length}) obtained for loader ${loaderUniqueId}`); - - const embedChunks = formattedChunks.map((chunk, index) => { - return { - pageContent: chunk.pageContent, - vector: embeddings[index], - metadata: chunk.metadata, - }; - }); - - this.debug(`Inserting chunks for loader ${loaderUniqueId} to vectorDb`); - return this.vectorDb.insertChunks(embedChunks); - } - - /** - * The function `getEmbeddingsCount` returns the count of embeddings stored in a vector database - * asynchronously. - * @returns The `getEmbeddingsCount` method is returning the number of embeddings stored in the - * vector database. It is an asynchronous function that returns a Promise with the count of - * embeddings as a number. - */ - public async getEmbeddingsCount(): Promise { - return this.vectorDb.getVectorCount(); - } - - /** - * The function `deleteAllEmbeddings` deletes all embeddings from the vector database if a - * confirmation is provided. - * @param {boolean} [areYouSure=false] - The `areYouSure` parameter is a boolean parameter that - * serves as a confirmation flag. It is used to ensure that the deletion of all embeddings is - * intentional and requires the caller to explicitly confirm by passing `true` as the value. If - * `areYouSure` is `false`, a warning message is logged. - * @returns The `deleteAllEmbeddings` function returns a boolean value indicating the result. - */ - public async deleteAllEmbeddings(areYouSure: boolean = false) { - if (!areYouSure) { - console.warn('Reset embeddings called without confirmation. No action taken.'); - return false; - } - - await this.vectorDb.reset(); - return true; - } - - /** - * The function `getEmbeddings` retrieves embeddings for a query, performs similarity search, - * filters and sorts the results based on relevance score, and returns a subset of the top results. - * @param {string} cleanQuery - The `cleanQuery` parameter is a string that represents the query - * input after it has been cleaned or processed to remove any unnecessary characters, symbols, or - * noise. This clean query is then used to generate embeddings for similarity search. - * @returns The `getEmbeddings` function returns a filtered and sorted array of search results based - * on the similarity score of the query embedded in the cleanQuery string. The results are filtered - * based on a relevance cutoff value, sorted in descending order of score, and then sliced to return - * only the number of results specified by the `searchResultCount` property. - */ - public async getEmbeddings(cleanQuery: string) { - const queryEmbedded = await RAGEmbedding.getEmbedding().embedQuery(cleanQuery); - const unfilteredResultSet = await this.vectorDb.similaritySearch(queryEmbedded, this.searchResultCount + 10); - this.debug(`Query resulted in ${unfilteredResultSet.length} chunks before filteration...`); - - return unfilteredResultSet - .filter((result) => result.score > this.embeddingRelevanceCutOff) - .sort((a, b) => b.score - a.score) - .slice(0, this.searchResultCount); - } - - /** - * The getContext function retrieves the unique embeddings for a given query without calling a LLM. - * @param {string} query - The `query` parameter is a string that represents the input query that - * needs to be processed. - * @returns An array of unique page content items / chunks. - */ - public async getContext(query: string) { - const cleanQuery = cleanString(query); - const rawContext = await this.getEmbeddings(cleanQuery); - - return [...new Map(rawContext.map((item) => [item.pageContent, item])).values()]; - } - - /** - * This function takes a user query, retrieves relevant context, identifies unique sources, and - * returns the query result along with the list of sources. - * @param {string} userQuery - The `userQuery` parameter is a string that represents the query - * input provided by the user. It is used as input to retrieve context and ultimately generate a - * result based on the query. - * @param {string} [conversationId] - The `conversationId` parameter in the `query` method is an - * optional parameter that represents the unique identifier for a conversation. It allows you to - * track and associate the query with a specific conversation thread if needed. If provided, it can be - * used to maintain context or history related to the conversation. - * @param {Chunk} [customContext] - You can pass in custom context from your own RAG stack. Passing. - * your own context will disable the inbuilt RAG retrieval for that specific query - * @returns The `query` method returns a Promise that resolves to an object with two properties: - * `result` and `sources`. The `result` property is a string representing the result of querying - * the LLM model with the provided query template, user query, context, and conversation history. The - * `sources` property is an array of strings representing unique sources used to generate the LLM response. - */ - public async query(userQuery: string, conversationId?: string, customContext?: Chunk[]): Promise { - if (!this.model) { - throw new Error('LLM Not set; query method not available'); - } - - if (!customContext) { - customContext = await this.getContext(userQuery); - } - - const sources = [...new Set(customContext.map((chunk) => chunk.metadata.source))]; - this.debug( - `Query resulted in ${customContext.length} chunks after filteration; chunks from ${sources.length} unique sources.`, - ); - - return this.model.query(this.queryTemplate, userQuery, customContext, conversationId); - } -} +import createDebugMessages from 'debug'; + +import { DynamicLoader, LoaderParam } from './dynamic-loader-selector.js'; +import { RAGApplicationBuilder } from './rag-application-builder.js'; +import { RAGEmbedding } from './rag-embedding.js'; +import { InMemoryConversation } from '../conversation/memory-conversations.js'; +import { + AddLoaderReturn, + BaseCache, + BaseDb, + BaseLoader, + BaseModel, + Chunk, + DEFAULT_INSERT_BATCH_SIZE, + InsertChunkData, + LoaderChunk, + QueryResponse, +} from '@llm-tools/embedjs-interfaces'; +import { cleanString, getUnique } from '@llm-tools/embedjs-utils'; +import { OpenAi3SmallEmbeddings } from '@llm-tools/embedjs-openai'; + +export class RAGApplication { + private readonly debug = createDebugMessages('embedjs:core'); + private readonly queryTemplate: string; + private readonly searchResultCount: number; + private readonly cache?: BaseCache; + private readonly vectorDb: BaseDb; + private readonly model: BaseModel; + private readonly embeddingRelevanceCutOff: number; + + private readonly rawLoaders: LoaderParam[]; + private loaders: BaseLoader[]; + + constructor(llmBuilder: RAGApplicationBuilder) { + this.cache = llmBuilder.getCache(); + BaseLoader.setCache(this.cache); + + this.model = llmBuilder.getModel(); + if (!this.model) this.debug('No base model set; query function unavailable!'); + else { + BaseModel.setDefaultTemperature(llmBuilder.getTemperature()); + BaseModel.setConversations(llmBuilder.getConversationsEngine() || new InMemoryConversation()); + } + + this.queryTemplate = cleanString(llmBuilder.getQueryTemplate()); + this.debug(`Using system query template - "${this.queryTemplate}"`); + + this.vectorDb = llmBuilder.getVectorDb(); + if (!this.vectorDb) throw new SyntaxError('VectorDb not set'); + + this.rawLoaders = llmBuilder.getLoaders(); + this.searchResultCount = llmBuilder.getSearchResultCount(); + this.embeddingRelevanceCutOff = llmBuilder.getEmbeddingRelevanceCutOff(); + + RAGEmbedding.init(llmBuilder.getEmbeddingModel() ?? new OpenAi3SmallEmbeddings()); + } + + /** + * The function `embedChunks` embeds the content of chunks by invoking the planned embedding model. + * @param {Pick[]} chunks - The `chunks` parameter is an array of objects + * that have a property `pageContent` which contains text content for each chunk. + * @returns The `embedChunks` function is returning the embedded vectors for the chunks. + */ + private async embedChunks(chunks: Pick[]) { + const texts = chunks.map(({ pageContent }) => pageContent); + return RAGEmbedding.getEmbedding().embedDocuments(texts); + } + + /** + * The function `getChunkUniqueId` generates a unique identifier by combining a loader unique ID and + * an increment ID. + * @param {string} loaderUniqueId - A unique identifier for the loader. + * @param {number} incrementId - The `incrementId` parameter is a number that represents the + * increment value used to generate a unique chunk identifier. + * @returns The function `getChunkUniqueId` returns a string that combines the `loaderUniqueId` and + * `incrementId`. + */ + private getChunkUniqueId(loaderUniqueId: string, incrementId: number) { + return `${loaderUniqueId}_${incrementId}`; + } + + /** + * This async function initializes various components such as loaders, model, vector database, + * cache, and pre-loaders. + */ + public async init() { + this.loaders = await DynamicLoader.createLoaders(this.rawLoaders); + + if (this.model) { + await this.model.init(); + this.debug('Initialized LLM class'); + } + + await this.vectorDb.init({ dimensions: await RAGEmbedding.getEmbedding().getDimensions() }); + this.debug('Initialized vector database'); + + if (this.cache) { + await this.cache.init(); + this.debug('Initialized cache'); + } + + this.loaders = getUnique(this.loaders, 'getUniqueId'); + for await (const loader of this.loaders) { + await this.addLoader(loader); + } + this.debug('Initialized pre-loaders'); + } + + /** + * The function `addLoader` asynchronously initalizes a loader using the provided parameters and adds + * it to the system. + * @param {LoaderParam} loaderParam - The `loaderParam` parameter is a string, object or instance of BaseLoader + * that contains the necessary information to create a loader. + * @returns The function `addLoader` returns an object with the following properties: + * - `entriesAdded`: Number of new entries added during the loader operation + * - `uniqueId`: Unique identifier of the loader + * - `loaderType`: Name of the loader's constructor class + */ + public async addLoader(loaderParam: LoaderParam): Promise { + const loader = await DynamicLoader.createLoader(loaderParam); + return this._addLoader(loader); + } + + /** + * The function `_addLoader` asynchronously adds a loader, processes its chunks, and handles + * incremental loading if supported by the loader. + * @param {BaseLoader} loader - The `loader` parameter in the `_addLoader` method is an instance of the + * `BaseLoader` class. + * @returns The function `_addLoader` returns an object with the following properties: + * - `entriesAdded`: Number of new entries added during the loader operation + * - `uniqueId`: Unique identifier of the loader + * - `loaderType`: Name of the loader's constructor class + */ + private async _addLoader(loader: BaseLoader): Promise { + const uniqueId = loader.getUniqueId(); + this.debug('Add loader called for', uniqueId); + await loader.init(); + + const chunks = await loader.getChunks(); + if (this.cache && (await this.cache.hasLoader(uniqueId))) { + const { chunkCount: previousChunkCount } = await this.cache.getLoader(uniqueId); + + this.debug(`Loader previously run. Deleting previous ${previousChunkCount} keys`, uniqueId); + if (previousChunkCount > 0) { + await this.deleteLoader(uniqueId, true); + } + } + + const { newInserts, formattedChunks } = await this.batchLoadChunks(uniqueId, chunks); + if (this.cache) await this.cache.addLoader(uniqueId, formattedChunks.length); + this.debug(`Add loader completed with ${newInserts} new entries for`, uniqueId); + + if (loader.canIncrementallyLoad) { + this.debug(`Registering incremental loader`, uniqueId); + + loader.on('incrementalChunkAvailable', async (incrementalGenerator) => { + await this.incrementalLoader(uniqueId, incrementalGenerator); + }); + } + + this.loaders = this.loaders.filter((x) => x.getUniqueId() != loader.getUniqueId()); + this.loaders.push(loader); + + this.debug(`Add loader ${uniqueId} wrap`); + return { entriesAdded: newInserts, uniqueId, loaderType: loader.constructor.name }; + } + + /** + * The `incrementalLoader` function asynchronously processes incremental chunks for a loader. + * @param {string} uniqueId - The `uniqueId` parameter is a string that serves as an identifier for + * the loader. + * @param incrementalGenerator - The `incrementalGenerator` parameter is an asynchronous generator + * function that yields `LoaderChunk` objects. It is used to incrementally load chunks of data for a specific loader + */ + private async incrementalLoader(uniqueId: string, incrementalGenerator: AsyncGenerator) { + this.debug(`incrementalChunkAvailable for loader`, uniqueId); + const { newInserts } = await this.batchLoadChunks(uniqueId, incrementalGenerator); + this.debug(`${newInserts} new incrementalChunks processed`, uniqueId); + } + + /** + * The function `getLoaders` asynchronously retrieves a list of loaders loaded so far. This includes + * internal loaders that were loaded by other loaders. It requires that cache is enabled to work. + * @returns The list of loaders with some metadata about them. + */ + public async getLoaders() { + return BaseLoader.getLoadersList(); + } + + /** + * The function `deleteLoader` deletes embeddings from a loader after confirming the action. + * @param {string} uniqueLoaderId - The `uniqueLoaderId` parameter is a string that represents the + * identifier of the loader that you want to delete. + * @param {boolean} [areYouSure=false] - The `areYouSure` parameter is a boolean flag that + * indicates whether the user has confirmed their intention to delete embeddings from a loader. If + * `areYouSure` is `true`, the function proceeds with the deletion process. If `areYouSure` is + * `false`, a warning message is logged and no action is taken + * @returns The `deleteLoader` method returns a boolean value indicating the success of the operation. + */ + public async deleteLoader(uniqueLoaderId: string, areYouSure = false) { + if (!areYouSure) { + console.warn('Delete embeddings from loader called without confirmation. No action taken.'); + return false; + } + + const deleteResult = await this.vectorDb.deleteKeys(uniqueLoaderId); + if (this.cache && deleteResult) await this.cache.deleteLoader(uniqueLoaderId); + this.loaders = this.loaders.filter((x) => x.getUniqueId() != uniqueLoaderId); + return deleteResult; + } + + /** + * The function `batchLoadChunks` processes chunks of data in batches and formats them for insertion. + * @param {string} uniqueId - The `uniqueId` parameter is a string that represents a unique + * identifier for loader being processed. + * @param incrementalGenerator - The `incrementalGenerator` parameter in the `batchLoadChunks` + * function is an asynchronous generator that yields `LoaderChunk` objects. + * @returns The `batchLoadChunks` function returns an object with two properties: + * 1. `newInserts`: The total number of new inserts made during the batch loading process. + * 2. `formattedChunks`: An array containing the formatted chunks that were processed during the + * batch loading process. + */ + private async batchLoadChunks(uniqueId: string, incrementalGenerator: AsyncGenerator) { + let i = 0, + batchSize = 0, + newInserts = 0, + formattedChunks: Chunk[] = []; + + for await (const chunk of incrementalGenerator) { + batchSize++; + + const formattedChunk = { + pageContent: chunk.pageContent, + metadata: { + ...chunk.metadata, + uniqueLoaderId: uniqueId, + id: this.getChunkUniqueId(uniqueId, i++), + }, + }; + formattedChunks.push(formattedChunk); + + if (batchSize % DEFAULT_INSERT_BATCH_SIZE === 0) { + newInserts += await this.batchLoadEmbeddings(uniqueId, formattedChunks); + formattedChunks = []; + batchSize = 0; + } + } + + newInserts += await this.batchLoadEmbeddings(uniqueId, formattedChunks); + return { newInserts, formattedChunks }; + } + + /** + * The function `batchLoadEmbeddings` asynchronously loads embeddings for formatted chunks and + * inserts them into a vector database. + * @param {string} loaderUniqueId - The `loaderUniqueId` parameter is a unique identifier for the + * loader that is used to load embeddings. + * @param {Chunk[]} formattedChunks - `formattedChunks` is an array of Chunk objects that contain + * page content, metadata, and other information needed for processing. The `batchLoadEmbeddings` + * function processes these chunks in batches to obtain embeddings for each chunk and then inserts + * them into a database for further use. + * @returns The function `batchLoadEmbeddings` returns the result of inserting the embed chunks + * into the vector database. + */ + private async batchLoadEmbeddings(loaderUniqueId: string, formattedChunks: Chunk[]) { + if (formattedChunks.length === 0) return 0; + + this.debug(`Processing batch (size ${formattedChunks.length}) for loader ${loaderUniqueId}`); + const embeddings = await this.embedChunks(formattedChunks); + this.debug(`Batch embeddings (size ${formattedChunks.length}) obtained for loader ${loaderUniqueId}`); + + const embedChunks = formattedChunks.map((chunk, index) => { + return { + pageContent: chunk.pageContent, + vector: embeddings[index], + metadata: chunk.metadata, + }; + }); + + this.debug(`Inserting chunks for loader ${loaderUniqueId} to vectorDb`); + return this.vectorDb.insertChunks(embedChunks); + } + + /** + * The function `getEmbeddingsCount` returns the count of embeddings stored in a vector database + * asynchronously. + * @returns The `getEmbeddingsCount` method is returning the number of embeddings stored in the + * vector database. It is an asynchronous function that returns a Promise with the count of + * embeddings as a number. + */ + public async getEmbeddingsCount(): Promise { + return this.vectorDb.getVectorCount(); + } + + /** + * The function `deleteAllEmbeddings` deletes all embeddings from the vector database if a + * confirmation is provided. + * @param {boolean} [areYouSure=false] - The `areYouSure` parameter is a boolean parameter that + * serves as a confirmation flag. It is used to ensure that the deletion of all embeddings is + * intentional and requires the caller to explicitly confirm by passing `true` as the value. If + * `areYouSure` is `false`, a warning message is logged. + * @returns The `deleteAllEmbeddings` function returns a boolean value indicating the result. + */ + public async deleteAllEmbeddings(areYouSure = false) { + if (!areYouSure) { + console.warn('Reset embeddings called without confirmation. No action taken.'); + return false; + } + + await this.vectorDb.reset(); + return true; + } + + /** + * The function `getEmbeddings` retrieves embeddings for a query, performs similarity search, + * filters and sorts the results based on relevance score, and returns a subset of the top results. + * @param {string} cleanQuery - The `cleanQuery` parameter is a string that represents the query + * input after it has been cleaned or processed to remove any unnecessary characters, symbols, or + * noise. This clean query is then used to generate embeddings for similarity search. + * @returns The `getEmbeddings` function returns a filtered and sorted array of search results based + * on the similarity score of the query embedded in the cleanQuery string. The results are filtered + * based on a relevance cutoff value, sorted in descending order of score, and then sliced to return + * only the number of results specified by the `searchResultCount` property. + */ + public async getEmbeddings(cleanQuery: string) { + const queryEmbedded = await RAGEmbedding.getEmbedding().embedQuery(cleanQuery); + const unfilteredResultSet = await this.vectorDb.similaritySearch(queryEmbedded, this.searchResultCount + 10); + this.debug(`Query resulted in ${unfilteredResultSet.length} chunks before filteration...`); + + return unfilteredResultSet + .filter((result) => result.score > this.embeddingRelevanceCutOff) + .sort((a, b) => b.score - a.score) + .slice(0, this.searchResultCount); + } + + /** + * The getContext function retrieves the unique embeddings for a given query without calling a LLM. + * @param {string} query - The `query` parameter is a string that represents the input query that + * needs to be processed. + * @returns An array of unique page content items / chunks. + */ + public async getContext(query: string) { + const cleanQuery = cleanString(query); + const rawContext = await this.getEmbeddings(cleanQuery); + + return [...new Map(rawContext.map((item) => [item.pageContent, item])).values()]; + } + + /** + * This function takes a user query, retrieves relevant context, identifies unique sources, and + * returns the query result along with the list of sources. + * @param {string} userQuery - The `userQuery` parameter is a string that represents the query + * input provided by the user. It is used as input to retrieve context and ultimately generate a + * result based on the query. + * @param {string} [conversationId] - The `conversationId` parameter in the `query` method is an + * optional parameter that represents the unique identifier for a conversation. It allows you to + * track and associate the query with a specific conversation thread if needed. If provided, it can be + * used to maintain context or history related to the conversation. + * @param {Chunk} [customContext] - You can pass in custom context from your own RAG stack. Passing. + * your own context will disable the inbuilt RAG retrieval for that specific query + * @returns The `query` method returns a Promise that resolves to an object with two properties: + * `result` and `sources`. The `result` property is a string representing the result of querying + * the LLM model with the provided query template, user query, context, and conversation history. The + * `sources` property is an array of strings representing unique sources used to generate the LLM response. + */ + public async query(userQuery: string, conversationId?: string, customContext?: Chunk[]): Promise { + if (!this.model) { + throw new Error('LLM Not set; query method not available'); + } + + if (!customContext) { + customContext = await this.getContext(userQuery); + } + + const sources = [...new Set(customContext.map((chunk) => chunk.metadata.source))]; + this.debug( + `Query resulted in ${customContext.length} chunks after filteration; chunks from ${sources.length} unique sources.`, + ); + + return this.model.query(this.queryTemplate, userQuery, customContext, conversationId); + } +} diff --git a/src/core/rag-embedding.ts b/core/embedjs/src/core/rag-embedding.ts similarity index 85% rename from src/core/rag-embedding.ts rename to core/embedjs/src/core/rag-embedding.ts index d5f3fd6d..9c669bba 100644 --- a/src/core/rag-embedding.ts +++ b/core/embedjs/src/core/rag-embedding.ts @@ -1,37 +1,35 @@ -import { Document } from 'langchain/document'; - -import { Chunk } from '../global/types.js'; -import { BaseEmbeddings } from '../interfaces/base-embeddings.js'; - -export class RAGEmbedding { - private static singleton: RAGEmbedding; - - public static init(embeddingModel: BaseEmbeddings) { - if (!this.singleton) { - this.singleton = new RAGEmbedding(embeddingModel); - } - } - - public static getInstance() { - return RAGEmbedding.singleton; - } - - public static getEmbedding() { - return RAGEmbedding.getInstance().embedding; - } - - public static translateChunks(chunks: Chunk[]) { - return chunks.map((chunk) => { - return { - pageContent: chunk.pageContent, - metadata: chunk.metadata, - }; - }); - } - - private readonly embedding: BaseEmbeddings; - - private constructor(embeddingModel: BaseEmbeddings) { - this.embedding = embeddingModel; - } -} +import { BaseEmbeddings, Chunk } from '@llm-tools/embedjs-interfaces'; +import { Document } from 'langchain/document'; + +export class RAGEmbedding { + private static singleton: RAGEmbedding; + + public static init(embeddingModel: BaseEmbeddings) { + if (!this.singleton) { + this.singleton = new RAGEmbedding(embeddingModel); + } + } + + public static getInstance() { + return RAGEmbedding.singleton; + } + + public static getEmbedding() { + return RAGEmbedding.getInstance().embedding; + } + + public static translateChunks(chunks: Chunk[]) { + return chunks.map((chunk) => { + return { + pageContent: chunk.pageContent, + metadata: chunk.metadata, + }; + }); + } + + private readonly embedding: BaseEmbeddings; + + private constructor(embeddingModel: BaseEmbeddings) { + this.embedding = embeddingModel; + } +} diff --git a/core/embedjs/src/index.ts b/core/embedjs/src/index.ts new file mode 100644 index 00000000..92071411 --- /dev/null +++ b/core/embedjs/src/index.ts @@ -0,0 +1,9 @@ +import { RAGApplication } from './core/rag-application.js'; +import { RAGApplicationBuilder } from './core/rag-application-builder.js'; +import { TextLoader } from './loaders/text-loader.js'; +import { JsonLoader } from './loaders/json-loader.js'; +import { LocalPathLoader } from './loaders/local-path-loader.js'; +import { UrlLoader } from './loaders/url-loader.js'; +import { SIMPLE_MODELS } from '@llm-tools/embedjs-interfaces'; + +export { RAGApplication, RAGApplicationBuilder, TextLoader, JsonLoader, UrlLoader, LocalPathLoader, SIMPLE_MODELS }; diff --git a/src/loaders/json-loader.ts b/core/embedjs/src/loaders/json-loader.ts similarity index 86% rename from src/loaders/json-loader.ts rename to core/embedjs/src/loaders/json-loader.ts index 627a082d..f6b35c1f 100644 --- a/src/loaders/json-loader.ts +++ b/core/embedjs/src/loaders/json-loader.ts @@ -1,60 +1,56 @@ -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { cleanString, truncateCenterString } from '../util/strings.js'; - -export class JsonLoader extends BaseLoader<{ type: 'JsonLoader' }> { - private readonly object: Record | Record[]; - private readonly pickKeysForEmbedding?: string[]; - - constructor({ - object, - pickKeysForEmbedding, - }: { - object: Record | Record[]; - pickKeysForEmbedding?: string[]; - }) { - super(`JsonLoader_${md5(cleanString(JSON.stringify(object)))}`, { - object: truncateCenterString(JSON.stringify(object), 50), - }); - - this.pickKeysForEmbedding = pickKeysForEmbedding; - this.object = object; - } - - override async *getUnfilteredChunks() { - const tuncatedObjectString = truncateCenterString(JSON.stringify(this.object), 50); - const array = Array.isArray(this.object) ? this.object : [this.object]; - - let i = 0; - for (const entry of array) { - let s: string; - if (this.pickKeysForEmbedding) { - const subset = Object.fromEntries( - this.pickKeysForEmbedding - .filter((key) => key in entry) // line can be removed to make it inclusive - .map((key) => [key, entry[key]]), - ); - s = cleanString(JSON.stringify(subset)); - } else { - s = cleanString(JSON.stringify(entry)); - } - - if ('id' in entry) { - entry.preEmbedId = entry.id; - delete entry.id; - } - - yield { - pageContent: s, - metadata: { - type: <'JsonLoader'>'JsonLoader', - source: tuncatedObjectString, - ...entry, - }, - }; - - i++; - } - } -} +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { cleanString, truncateCenterString } from '@llm-tools/embedjs-utils'; +import md5 from 'md5'; + +export class JsonLoader extends BaseLoader<{ type: 'JsonLoader' }> { + private readonly object: Record | Record[]; + private readonly pickKeysForEmbedding?: string[]; + + constructor({ + object, + pickKeysForEmbedding, + }: { + object: Record | Record[]; + pickKeysForEmbedding?: string[]; + }) { + super(`JsonLoader_${md5(cleanString(JSON.stringify(object)))}`, { + object: truncateCenterString(JSON.stringify(object), 50), + }); + + this.pickKeysForEmbedding = pickKeysForEmbedding; + this.object = object; + } + + override async *getUnfilteredChunks() { + const tuncatedObjectString = truncateCenterString(JSON.stringify(this.object), 50); + const array = Array.isArray(this.object) ? this.object : [this.object]; + + for (const entry of array) { + let s: string; + if (this.pickKeysForEmbedding) { + const subset = Object.fromEntries( + this.pickKeysForEmbedding + .filter((key) => key in entry) // line can be removed to make it inclusive + .map((key) => [key, entry[key]]), + ); + s = cleanString(JSON.stringify(subset)); + } else { + s = cleanString(JSON.stringify(entry)); + } + + if ('id' in entry) { + entry.preEmbedId = entry.id; + delete entry.id; + } + + yield { + pageContent: s, + metadata: { + type: 'JsonLoader' as const, + source: tuncatedObjectString, + ...entry, + }, + }; + } + } +} diff --git a/src/loaders/local-path-loader.ts b/core/embedjs/src/loaders/local-path-loader.ts similarity index 89% rename from src/loaders/local-path-loader.ts rename to core/embedjs/src/loaders/local-path-loader.ts index e9bfdd8e..f2b1e4b4 100644 --- a/src/loaders/local-path-loader.ts +++ b/core/embedjs/src/loaders/local-path-loader.ts @@ -1,63 +1,62 @@ -import { getMimeType } from 'stream-mime-type'; -import createDebugMessages from 'debug'; -import path from 'node:path'; -import fs from 'node:fs'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { createLoaderFromMimeType } from '../util/mime.js'; -import { UnfilteredLoaderChunk } from '../global/types.js'; - -export class LocalPathLoader extends BaseLoader<{ type: 'LocalPathLoader' }> { - private readonly debug = createDebugMessages('embedjs:loader:LocalPathLoader'); - private readonly path: string; - - constructor({ path }: { path: string }) { - super(`LocalPathLoader_${md5(path)}`, { path }); - this.path = path; - } - - override async *getUnfilteredChunks() { - for await (const result of await this.recursivelyAddPath(this.path)) { - yield { - ...result, - metadata: { - ...result.metadata, - type: <'LocalPathLoader'>'LocalPathLoader', - originalPath: this.path, - }, - }; - } - } - - private async *recursivelyAddPath(currentPath: string): AsyncGenerator { - const isDir = fs.lstatSync(currentPath).isDirectory(); - this.debug(`Processing path '${currentPath}'. It is a ${isDir ? 'Directory!' : 'file...'}`); - - if (!isDir) { - const stream = fs.createReadStream(currentPath); - const { mime } = await getMimeType(stream); - this.debug(`File '${this.path}' has mime type '${mime}'`); - stream.destroy(); - - const loader = await createLoaderFromMimeType(currentPath, mime); - for await (const result of await loader.getUnfilteredChunks()) { - yield { - pageContent: result.pageContent, - metadata: { - source: currentPath, - }, - }; - } - } else { - const files = fs.readdirSync(currentPath); - this.debug(`Dir '${currentPath}' has ${files.length} entries inside`, files); - - for (const file of files) { - for await (const result of await this.recursivelyAddPath(path.resolve(currentPath, file))) { - yield result; - } - } - } - } -} +import { getMimeType } from 'stream-mime-type'; +import createDebugMessages from 'debug'; +import path from 'node:path'; +import fs from 'node:fs'; +import md5 from 'md5'; + +import { BaseLoader, UnfilteredLoaderChunk } from '@llm-tools/embedjs-interfaces'; +import { createLoaderFromMimeType } from '../util/mime.js'; + +export class LocalPathLoader extends BaseLoader<{ type: 'LocalPathLoader' }> { + private readonly debug = createDebugMessages('embedjs:loader:LocalPathLoader'); + private readonly path: string; + + constructor({ path }: { path: string }) { + super(`LocalPathLoader_${md5(path)}`, { path }); + this.path = path; + } + + override async *getUnfilteredChunks() { + for await (const result of await this.recursivelyAddPath(this.path)) { + yield { + ...result, + metadata: { + ...result.metadata, + type: 'LocalPathLoader' as const, + originalPath: this.path, + }, + }; + } + } + + private async *recursivelyAddPath(currentPath: string): AsyncGenerator { + const isDir = fs.lstatSync(currentPath).isDirectory(); + this.debug(`Processing path '${currentPath}'. It is a ${isDir ? 'Directory!' : 'file...'}`); + + if (!isDir) { + const stream = fs.createReadStream(currentPath); + const { mime } = await getMimeType(stream); + this.debug(`File '${this.path}' has mime type '${mime}'`); + stream.destroy(); + + const loader = await createLoaderFromMimeType(currentPath, mime); + for await (const result of await loader.getUnfilteredChunks()) { + yield { + pageContent: result.pageContent, + metadata: { + source: currentPath, + }, + }; + } + } else { + const files = fs.readdirSync(currentPath); + this.debug(`Dir '${currentPath}' has ${files.length} entries inside`, files); + + for (const file of files) { + for await (const result of await this.recursivelyAddPath(path.resolve(currentPath, file))) { + yield result; + } + } + } + } +} diff --git a/src/loaders/text-loader.ts b/core/embedjs/src/loaders/text-loader.ts similarity index 83% rename from src/loaders/text-loader.ts rename to core/embedjs/src/loaders/text-loader.ts index 1daaac0b..126faf9c 100644 --- a/src/loaders/text-loader.ts +++ b/core/embedjs/src/loaders/text-loader.ts @@ -1,34 +1,34 @@ -import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { cleanString, truncateCenterString } from '../util/strings.js'; - -export class TextLoader extends BaseLoader<{ type: 'TextLoader' }> { - private readonly text: string; - - constructor({ text, chunkSize, chunkOverlap }: { text: string; chunkSize?: number; chunkOverlap?: number }) { - super(`TextLoader_${md5(text)}`, { text: truncateCenterString(text, 50) }, chunkSize ?? 300, chunkOverlap ?? 0); - this.text = text; - } - - override async *getUnfilteredChunks() { - const tuncatedObjectString = truncateCenterString(this.text, 50); - const chunker = new RecursiveCharacterTextSplitter({ - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - const chunks = await chunker.splitText(cleanString(this.text)); - - for (const chunk of chunks) { - yield { - pageContent: chunk, - metadata: { - type: <'TextLoader'>'TextLoader', - source: tuncatedObjectString, - textId: this.uniqueId, - }, - }; - } - } -} +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; +import md5 from 'md5'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { truncateCenterString, cleanString } from '@llm-tools/embedjs-utils'; + +export class TextLoader extends BaseLoader<{ type: 'TextLoader' }> { + private readonly text: string; + + constructor({ text, chunkSize, chunkOverlap }: { text: string; chunkSize?: number; chunkOverlap?: number }) { + super(`TextLoader_${md5(text)}`, { text: truncateCenterString(text, 50) }, chunkSize ?? 300, chunkOverlap ?? 0); + this.text = text; + } + + override async *getUnfilteredChunks() { + const tuncatedObjectString = truncateCenterString(this.text, 50); + const chunker = new RecursiveCharacterTextSplitter({ + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + const chunks = await chunker.splitText(cleanString(this.text)); + + for (const chunk of chunks) { + yield { + pageContent: chunk, + metadata: { + type: 'TextLoader' as const, + source: tuncatedObjectString, + textId: this.uniqueId, + }, + }; + } + } +} diff --git a/src/loaders/url-loader.ts b/core/embedjs/src/loaders/url-loader.ts similarity index 85% rename from src/loaders/url-loader.ts rename to core/embedjs/src/loaders/url-loader.ts index 836b3857..c468308e 100644 --- a/src/loaders/url-loader.ts +++ b/core/embedjs/src/loaders/url-loader.ts @@ -1,37 +1,37 @@ -import { getMimeType } from 'stream-mime-type'; -import createDebugMessages from 'debug'; -import axios from 'axios'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { createLoaderFromMimeType } from '../util/mime.js'; -import { truncateCenterString } from '../util/strings.js'; - -export class UrlLoader extends BaseLoader<{ type: 'UrlLoader' }> { - private readonly debug = createDebugMessages('embedjs:loader:UrlLoader'); - private readonly url: string; - - constructor({ url }: { url: string }) { - super(`UrlLoader_${md5(url)}`, { url: truncateCenterString(url, 50) }); - this.url = url; - } - - override async *getUnfilteredChunks() { - this.debug('Loader is a valid URL!'); - const stream = (await axios.get(this.url, { responseType: 'stream' })).data; - const { mime } = await getMimeType(stream); - this.debug(`Loader type detected as '${mime}'`); - stream.destroy(); - - const loader = await createLoaderFromMimeType(this.url, mime); - for await (const result of await loader.getUnfilteredChunks()) { - yield { - pageContent: result.pageContent, - metadata: { - type: <'UrlLoader'>'UrlLoader', - source: this.url, - }, - }; - } - } -} +import { getMimeType } from 'stream-mime-type'; +import createDebugMessages from 'debug'; +import axios from 'axios'; +import md5 from 'md5'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { truncateCenterString } from '@llm-tools/embedjs-utils'; +import { createLoaderFromMimeType } from '../util/mime.js'; + +export class UrlLoader extends BaseLoader<{ type: 'UrlLoader' }> { + private readonly debug = createDebugMessages('embedjs:loader:UrlLoader'); + private readonly url: string; + + constructor({ url }: { url: string }) { + super(`UrlLoader_${md5(url)}`, { url: truncateCenterString(url, 50) }); + this.url = url; + } + + override async *getUnfilteredChunks() { + this.debug('Loader is a valid URL!'); + const stream = (await axios.get(this.url, { responseType: 'stream' })).data; + const { mime } = await getMimeType(stream); + this.debug(`Loader type detected as '${mime}'`); + stream.destroy(); + + const loader = await createLoaderFromMimeType(this.url, mime); + for await (const result of await loader.getUnfilteredChunks()) { + yield { + pageContent: result.pageContent, + metadata: { + type: 'UrlLoader' as const, + source: this.url, + }, + }; + } + } +} diff --git a/src/util/mime.ts b/core/embedjs/src/util/mime.ts similarity index 76% rename from src/util/mime.ts rename to core/embedjs/src/util/mime.ts index e1726922..dcdd6deb 100644 --- a/src/util/mime.ts +++ b/core/embedjs/src/util/mime.ts @@ -1,43 +1,42 @@ -import mime from 'mime'; -import createDebugMessages from 'debug'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { DocxLoader } from '../loaders/docx-loader.js'; -import { ExcelLoader } from '../loaders/excel-loader.js'; -import { PdfLoader } from '../loaders/pdf-loader.js'; -import { PptLoader } from '../loaders/ppt-loader.js'; -import { SitemapLoader } from '../loaders/sitemap-loader.js'; -import { TextLoader } from '../loaders/text-loader.js'; -import { WebLoader } from '../loaders/web-loader.js'; -import { CsvLoader } from '../loaders/csv-loader.js'; - -export async function createLoaderFromMimeType(loader: string, mimeType: string): Promise { - switch (mimeType) { - case 'application/msword': - case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': - return new DocxLoader({ filePathOrUrl: loader }); - case 'application/vnd.ms-excel': - case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': - return new ExcelLoader({ filePathOrUrl: loader }); - case 'application/pdf': - return new PdfLoader({ filePathOrUrl: loader }); - case 'application/vnd.openxmlformats-officedocument.presentationml.presentation': - return new PptLoader({ filePathOrUrl: loader }); - case 'text/plain': - const fineType = mime.getType(loader); - createDebugMessages('embedjs:createLoaderFromMimeType')(`Fine type for '${loader}' is '${fineType}'`); - if (fineType === 'text/csv') return new CsvLoader({ filePathOrUrl: loader }); - else return new TextLoader({ text: loader }); - case 'application/csv': - return new CsvLoader({ filePathOrUrl: loader }); - case 'text/html': - return new WebLoader({ urlOrContent: loader }); - case 'text/xml': - if (await SitemapLoader.test(loader)) { - return new SitemapLoader({ url: loader }); - } - throw new SyntaxError(`No processor found for generic xml`); - default: - throw new SyntaxError(`Unknown mime type '${mimeType}'`); - } -} +import mime from 'mime'; +import createDebugMessages from 'debug'; + +import { TextLoader } from '../loaders/text-loader.js'; +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { CsvLoader } from '@llm-tools/embedjs-loader-csv'; +import { DocxLoader, ExcelLoader, PptLoader } from '@llm-tools/embedjs-loader-msoffice'; +import { PdfLoader } from '@llm-tools/embedjs-loader-pdf'; +import { SitemapLoader } from '@llm-tools/embedjs-loader-sitemap'; +import { WebLoader } from '@llm-tools/embedjs-loader-web'; + +export async function createLoaderFromMimeType(loader: string, mimeType: string): Promise { + switch (mimeType) { + case 'application/msword': + case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': + return new DocxLoader({ filePathOrUrl: loader }); + case 'application/vnd.ms-excel': + case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': + return new ExcelLoader({ filePathOrUrl: loader }); + case 'application/pdf': + return new PdfLoader({ filePathOrUrl: loader }); + case 'application/vnd.openxmlformats-officedocument.presentationml.presentation': + return new PptLoader({ filePathOrUrl: loader }); + case 'text/plain': { + const fineType = mime.getType(loader); + createDebugMessages('embedjs:createLoaderFromMimeType')(`Fine type for '${loader}' is '${fineType}'`); + if (fineType === 'text/csv') return new CsvLoader({ filePathOrUrl: loader }); + else return new TextLoader({ text: loader }); + } + case 'application/csv': + return new CsvLoader({ filePathOrUrl: loader }); + case 'text/html': + return new WebLoader({ urlOrContent: loader }); + case 'text/xml': + if (await SitemapLoader.test(loader)) { + return new SitemapLoader({ url: loader }); + } + throw new SyntaxError(`No processor found for generic xml`); + default: + throw new SyntaxError(`Unknown mime type '${mimeType}'`); + } +} diff --git a/core/embedjs/tsconfig.cjs.json b/core/embedjs/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/core/embedjs/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/core/embedjs/tsconfig.json b/core/embedjs/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/core/embedjs/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/core/embedjs/tsconfig.lib.json b/core/embedjs/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/core/embedjs/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-astra/CHANGELOG.md b/databases/embedjs-astra/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-astra/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-astra/README.md b/databases/embedjs-astra/README.md new file mode 100644 index 00000000..72420e64 --- /dev/null +++ b/databases/embedjs-astra/README.md @@ -0,0 +1,8 @@ +# embedjs-cosmos + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-astra/eslint.config.js b/databases/embedjs-astra/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-astra/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-astra/package.json b/databases/embedjs-astra/package.json new file mode 100644 index 00000000..4b89b0ab --- /dev/null +++ b/databases/embedjs-astra/package.json @@ -0,0 +1,39 @@ +{ + "name": "@llm-tools/embedjs-astra", + "version": "0.0.1", + "description": "Add AstraDB support to embedjs", + "dependencies": { + "debug": "^4.3.7", + "@datastax/astra-db-ts": "^1.5.0", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-astra/project.json b/databases/embedjs-astra/project.json new file mode 100644 index 00000000..dd97f430 --- /dev/null +++ b/databases/embedjs-astra/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-astra", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-astra/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-astra", + "main": "databases/embedjs-astra/src/index.ts", + "tsConfig": "databases/embedjs-astra/tsconfig.lib.json", + "assets": ["databases/embedjs-astra/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-astra", + "main": "databases/embedjs-astra/src/index.ts", + "tsConfig": "databases/embedjs-astra/tsconfig.cjs.json" + } + } + } +} diff --git a/src/vectorDb/astra-db.ts b/databases/embedjs-astra/src/astra-db.ts similarity index 95% rename from src/vectorDb/astra-db.ts rename to databases/embedjs-astra/src/astra-db.ts index fce3b0fb..3a87433d 100644 --- a/src/vectorDb/astra-db.ts +++ b/databases/embedjs-astra/src/astra-db.ts @@ -1,6 +1,5 @@ -import { BaseDb } from '../interfaces/base-db.js'; import { Collection, DataAPIClient, Db } from '@datastax/astra-db-ts'; -import { InsertChunkData, ExtractChunkData } from '../global/types.js'; +import { BaseDb, InsertChunkData, ExtractChunkData } from '@llm-tools/embedjs-interfaces'; export class AstraDb implements BaseDb { private db: Db; diff --git a/databases/embedjs-astra/src/index.ts b/databases/embedjs-astra/src/index.ts new file mode 100644 index 00000000..52023aff --- /dev/null +++ b/databases/embedjs-astra/src/index.ts @@ -0,0 +1 @@ +export { AstraDb } from './astra-db.js'; diff --git a/databases/embedjs-astra/tsconfig.cjs.json b/databases/embedjs-astra/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-astra/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-astra/tsconfig.json b/databases/embedjs-astra/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-astra/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-astra/tsconfig.lib.json b/databases/embedjs-astra/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-astra/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-cosmos/CHANGELOG.md b/databases/embedjs-cosmos/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-cosmos/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-cosmos/README.md b/databases/embedjs-cosmos/README.md new file mode 100644 index 00000000..72420e64 --- /dev/null +++ b/databases/embedjs-cosmos/README.md @@ -0,0 +1,8 @@ +# embedjs-cosmos + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-cosmos/eslint.config.js b/databases/embedjs-cosmos/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-cosmos/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-cosmos/package.json b/databases/embedjs-cosmos/package.json new file mode 100644 index 00000000..df94a02a --- /dev/null +++ b/databases/embedjs-cosmos/package.json @@ -0,0 +1,39 @@ +{ + "name": "@llm-tools/embedjs-cosmos", + "version": "0.0.1", + "description": "Add CosmosDB support to embedjs", + "dependencies": { + "debug": "^4.3.7", + "@azure/cosmos": "^4.1.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-cosmos/project.json b/databases/embedjs-cosmos/project.json new file mode 100644 index 00000000..8df13b48 --- /dev/null +++ b/databases/embedjs-cosmos/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-cosmos", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-cosmos/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-cosmos", + "main": "databases/embedjs-cosmos/src/index.ts", + "tsConfig": "databases/embedjs-cosmos/tsconfig.lib.json", + "assets": ["databases/embedjs-cosmos/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-cosmos", + "main": "databases/embedjs-cosmos/src/index.ts", + "tsConfig": "databases/embedjs-cosmos/tsconfig.cjs.json" + } + } + } +} diff --git a/src/vectorDb/cosmos-db.ts b/databases/embedjs-cosmos/src/cosmos-db.ts similarity index 95% rename from src/vectorDb/cosmos-db.ts rename to databases/embedjs-cosmos/src/cosmos-db.ts index dc3952fd..5ff19723 100644 --- a/src/vectorDb/cosmos-db.ts +++ b/databases/embedjs-cosmos/src/cosmos-db.ts @@ -1,214 +1,212 @@ -import { CosmosClient, CosmosClientOptions, Container } from '@azure/cosmos'; -import createDebugMessages from 'debug'; - -import { BaseDb } from '../interfaces/base-db.js'; -import { ExtractChunkData, InsertChunkData } from '../global/types.js'; - -export class CosmosDb implements BaseDb { - private readonly debug = createDebugMessages('embedjs:vector:CosmosDb'); - - private static readonly DEFAULT_DB_NAME = 'embedjs'; - private static readonly CONTAINER_NAME = 'vectors'; - - private static readonly VECTOR_FIELD_NAME = 'v_fld'; - private static readonly LOADER_FIELD_NAME = 'l_fld'; - - private readonly client: CosmosClient; - private readonly dbName: string; - - private container: Container; - private readonly containerName: string; - - constructor({ - dbName, - containerName, - cosmosClientOptions, - }: { - dbName?: string; - containerName?: string; - cosmosClientOptions: CosmosClientOptions; - }) { - this.containerName = containerName ?? CosmosDb.CONTAINER_NAME; - this.dbName = dbName ?? CosmosDb.DEFAULT_DB_NAME; - this.client = new CosmosClient(cosmosClientOptions); - } - - async init({ dimensions }: { dimensions: number }) { - this.debug('Connecting to database'); - const { database } = await this.client.databases.createIfNotExists({ id: this.dbName }); - this.debug('Connected'); - - const { container } = await database.containers.createIfNotExists({ - //Have to use tyepcast any because lib not updated to support indexingPolicy or vectorEmbeddingPolicy - id: this.containerName, - partitionKey: { - paths: [`/${CosmosDb.LOADER_FIELD_NAME}`], - version: 2, - }, - vectorEmbeddingPolicy: { - vectorEmbeddings: [ - { - path: `/${CosmosDb.VECTOR_FIELD_NAME}`, - distanceFunction: 'cosine', - dataType: 'float32', - dimensions, - }, - ], - }, - indexingPolicy: { - automatic: true, - indexingMode: 'consistent', - vectorIndexes: [ - { - path: `/${CosmosDb.VECTOR_FIELD_NAME}`, - type: 'quantizedFlat', - }, - ], - }, - }); - this.debug('Container reference obtained'); - this.container = container; - } - - async insertChunks(chunks: InsertChunkData[]): Promise { - this.debug(`Inserting ${chunks.length} chunks`); - - const response = await this.container.items.bulk( - chunks.map((chunk) => { - const uniqueLoaderId = chunk.metadata.uniqueLoaderId; - delete chunk.metadata.uniqueLoaderId; - - const uniqueId = chunk.metadata.id; - delete chunk.metadata.id; - - return { - operationType: 'Create', - resourceBody: { - id: uniqueId, - [CosmosDb.VECTOR_FIELD_NAME]: chunk.vector, - [CosmosDb.LOADER_FIELD_NAME]: uniqueLoaderId, - pageContent: chunk.pageContent, - metadata: chunk.metadata, - }, - }; - }), - ); - - return response.length; - } - - async similaritySearch(query: number[], k: number): Promise { - this.debug(`Searching with query dimension ${query.length}`); - const encodedQuery = query.join(','); - - const queryResponse = await this.container.items - .query( - `SELECT c.id, c.${CosmosDb.LOADER_FIELD_NAME}, c.pageContent, c.metadata, - VectorDistance(c.${CosmosDb.VECTOR_FIELD_NAME}, [${encodedQuery}]) AS score - FROM c - ORDER BY VectorDistance(c.${CosmosDb.VECTOR_FIELD_NAME}, [${encodedQuery}]) - OFFSET 0 LIMIT ${k}`, - { forceQueryPlan: true, maxItemCount: k }, - ) - // This ORDER BY part is necessary to enable the correct content to be available. - // TODO: but unfortunately the Cosmos node library has poor support for vector data and this query is not supported - // The documentation provides a workaround that they have forgotten to actually include in the lib; it shows TS errors - // Current implementation is expensive to run but since there is no real support for vector search in NodeJs library, this will have to do - .fetchAll(); - - return queryResponse.resources.map((entry) => { - return { - score: entry.score, - pageContent: entry.pageContent, - metadata: { - ...entry.metadata, - uniqueLoaderId: entry[CosmosDb.LOADER_FIELD_NAME], - id: entry.id, - }, - }; - }); - } - - async getVectorCount(): Promise { - this.debug('Getting count of chunks in store'); - const largeQueryResponse = await this.container.items - .query('SELECT VALUE COUNT(1) FROM c', { maxItemCount: -1, forceQueryPlan: true }) - .fetchAll(); //This is bad for performance; unfortunately Cosmos offers no solution to get count atm - - const count = largeQueryResponse.resources[0] ?? 0; - this.debug(`Found '${count}' entries`); - return count; - } - - private async bulkDeleteValues(IDs: string[]) { - const response = await this.container.items.bulk( - IDs.map((id) => { - return { - operationType: 'Delete', - id, - }; - }), - ); - - return response.length; - } - - private async bulkDeleteValuesByBatch(IDs: string[]) { - let batchNumber = 0, - totalDeletes = 0, - batch: string[] = []; - this.debug(`Total entries to delete '${IDs.length}'`); - - for (let i = 1; i <= IDs.length; i++) { - if (i % 100 === 0) { - batchNumber++; - this.debug(`Sending batch delete command number '${batchNumber}'`); - - totalDeletes += await this.bulkDeleteValues(batch); - batch = []; - } else batch.push(IDs[i]); - } - - if (batch.length != 0) { - batchNumber++; - this.debug(`Sending batch delete command number '${batchNumber}'`); - totalDeletes += await this.bulkDeleteValues(batch); - } - - return totalDeletes; - } - - async deleteKeys(uniqueLoaderId: string): Promise { - this.debug(`Starting delete for keys tied to loader '${uniqueLoaderId}'`); - - const queryResponse = await this.container.items - .query(`SELECT c.id FROM c WHERE c.${CosmosDb.LOADER_FIELD_NAME} = '${uniqueLoaderId}'`, { - forceQueryPlan: true, - }) - .fetchAll(); - const IDs = queryResponse.resources.map((x) => x.id); - - if (IDs.length > 0) { - this.debug('Something to delete indeed'); - const deleteCount = await this.bulkDeleteValuesByBatch(IDs); - return deleteCount > 0; - } else { - this.debug('Nothing to delete'); - return true; - } - } - - async reset(): Promise { - this.debug('Starting reset'); - - const queryResponse = await this.container.items - .query(`SELECT c.id FROM c`, { forceQueryPlan: true }) - .fetchAll(); - const IDs = queryResponse.resources.map((x) => x.id); - - if (IDs.length > 0) { - this.debug('Something to delete indeed'); - await this.bulkDeleteValuesByBatch(IDs); - } else this.debug('Nothing to delete'); - } -} +import createDebugMessages from 'debug'; +import { CosmosClient, CosmosClientOptions, Container } from '@azure/cosmos'; +import { BaseDb, ExtractChunkData, InsertChunkData } from '@llm-tools/embedjs-interfaces'; + +export class CosmosDb implements BaseDb { + private readonly debug = createDebugMessages('embedjs:vector:CosmosDb'); + + private static readonly DEFAULT_DB_NAME = 'embedjs'; + private static readonly CONTAINER_NAME = 'vectors'; + + private static readonly VECTOR_FIELD_NAME = 'v_fld'; + private static readonly LOADER_FIELD_NAME = 'l_fld'; + + private readonly client: CosmosClient; + private readonly dbName: string; + + private container: Container; + private readonly containerName: string; + + constructor({ + dbName, + containerName, + cosmosClientOptions, + }: { + dbName?: string; + containerName?: string; + cosmosClientOptions: CosmosClientOptions; + }) { + this.containerName = containerName ?? CosmosDb.CONTAINER_NAME; + this.dbName = dbName ?? CosmosDb.DEFAULT_DB_NAME; + this.client = new CosmosClient(cosmosClientOptions); + } + + async init({ dimensions }: { dimensions: number }) { + this.debug('Connecting to database'); + const { database } = await this.client.databases.createIfNotExists({ id: this.dbName }); + this.debug('Connected'); + + const { container } = await database.containers.createIfNotExists({ + //Have to use tyepcast any because lib not updated to support indexingPolicy or vectorEmbeddingPolicy + id: this.containerName, + partitionKey: { + paths: [`/${CosmosDb.LOADER_FIELD_NAME}`], + version: 2, + }, + vectorEmbeddingPolicy: { + vectorEmbeddings: [ + { + path: `/${CosmosDb.VECTOR_FIELD_NAME}`, + distanceFunction: 'cosine', + dataType: 'float32', + dimensions, + }, + ], + }, + indexingPolicy: { + automatic: true, + indexingMode: 'consistent', + vectorIndexes: [ + { + path: `/${CosmosDb.VECTOR_FIELD_NAME}`, + type: 'quantizedFlat', + }, + ], + }, + }); + this.debug('Container reference obtained'); + this.container = container; + } + + async insertChunks(chunks: InsertChunkData[]): Promise { + this.debug(`Inserting ${chunks.length} chunks`); + + const response = await this.container.items.bulk( + chunks.map((chunk) => { + const uniqueLoaderId = chunk.metadata.uniqueLoaderId; + delete chunk.metadata.uniqueLoaderId; + + const uniqueId = chunk.metadata.id; + delete chunk.metadata.id; + + return { + operationType: 'Create', + resourceBody: { + id: uniqueId, + [CosmosDb.VECTOR_FIELD_NAME]: chunk.vector, + [CosmosDb.LOADER_FIELD_NAME]: uniqueLoaderId, + pageContent: chunk.pageContent, + metadata: chunk.metadata, + }, + }; + }), + ); + + return response.length; + } + + async similaritySearch(query: number[], k: number): Promise { + this.debug(`Searching with query dimension ${query.length}`); + const encodedQuery = query.join(','); + + const queryResponse = await this.container.items + .query( + `SELECT c.id, c.${CosmosDb.LOADER_FIELD_NAME}, c.pageContent, c.metadata, + VectorDistance(c.${CosmosDb.VECTOR_FIELD_NAME}, [${encodedQuery}]) AS score + FROM c + ORDER BY VectorDistance(c.${CosmosDb.VECTOR_FIELD_NAME}, [${encodedQuery}]) + OFFSET 0 LIMIT ${k}`, + { forceQueryPlan: true, maxItemCount: k }, + ) + // This ORDER BY part is necessary to enable the correct content to be available. + // TODO: but unfortunately the Cosmos node library has poor support for vector data and this query is not supported + // The documentation provides a workaround that they have forgotten to actually include in the lib; it shows TS errors + // Current implementation is expensive to run but since there is no real support for vector search in NodeJs library, this will have to do + .fetchAll(); + + return queryResponse.resources.map((entry) => { + return { + score: entry.score, + pageContent: entry.pageContent, + metadata: { + ...entry.metadata, + uniqueLoaderId: entry[CosmosDb.LOADER_FIELD_NAME], + id: entry.id, + }, + }; + }); + } + + async getVectorCount(): Promise { + this.debug('Getting count of chunks in store'); + const largeQueryResponse = await this.container.items + .query('SELECT VALUE COUNT(1) FROM c', { maxItemCount: -1, forceQueryPlan: true }) + .fetchAll(); //This is bad for performance; unfortunately Cosmos offers no solution to get count atm + + const count = largeQueryResponse.resources[0] ?? 0; + this.debug(`Found '${count}' entries`); + return count; + } + + private async bulkDeleteValues(IDs: string[]) { + const response = await this.container.items.bulk( + IDs.map((id) => { + return { + operationType: 'Delete', + id, + }; + }), + ); + + return response.length; + } + + private async bulkDeleteValuesByBatch(IDs: string[]) { + let batchNumber = 0, + totalDeletes = 0, + batch: string[] = []; + this.debug(`Total entries to delete '${IDs.length}'`); + + for (let i = 1; i <= IDs.length; i++) { + if (i % 100 === 0) { + batchNumber++; + this.debug(`Sending batch delete command number '${batchNumber}'`); + + totalDeletes += await this.bulkDeleteValues(batch); + batch = []; + } else batch.push(IDs[i]); + } + + if (batch.length != 0) { + batchNumber++; + this.debug(`Sending batch delete command number '${batchNumber}'`); + totalDeletes += await this.bulkDeleteValues(batch); + } + + return totalDeletes; + } + + async deleteKeys(uniqueLoaderId: string): Promise { + this.debug(`Starting delete for keys tied to loader '${uniqueLoaderId}'`); + + const queryResponse = await this.container.items + .query(`SELECT c.id FROM c WHERE c.${CosmosDb.LOADER_FIELD_NAME} = '${uniqueLoaderId}'`, { + forceQueryPlan: true, + }) + .fetchAll(); + const IDs = queryResponse.resources.map((x) => x.id); + + if (IDs.length > 0) { + this.debug('Something to delete indeed'); + const deleteCount = await this.bulkDeleteValuesByBatch(IDs); + return deleteCount > 0; + } else { + this.debug('Nothing to delete'); + return true; + } + } + + async reset(): Promise { + this.debug('Starting reset'); + + const queryResponse = await this.container.items + .query(`SELECT c.id FROM c`, { forceQueryPlan: true }) + .fetchAll(); + const IDs = queryResponse.resources.map((x) => x.id); + + if (IDs.length > 0) { + this.debug('Something to delete indeed'); + await this.bulkDeleteValuesByBatch(IDs); + } else this.debug('Nothing to delete'); + } +} diff --git a/databases/embedjs-cosmos/src/index.ts b/databases/embedjs-cosmos/src/index.ts new file mode 100644 index 00000000..7b9ce2f7 --- /dev/null +++ b/databases/embedjs-cosmos/src/index.ts @@ -0,0 +1 @@ +export { CosmosDb } from './cosmos-db.js'; diff --git a/databases/embedjs-cosmos/tsconfig.cjs.json b/databases/embedjs-cosmos/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-cosmos/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-cosmos/tsconfig.json b/databases/embedjs-cosmos/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-cosmos/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-cosmos/tsconfig.lib.json b/databases/embedjs-cosmos/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-cosmos/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-hnswlib/CHANGELOG.md b/databases/embedjs-hnswlib/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-hnswlib/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-hnswlib/README.md b/databases/embedjs-hnswlib/README.md new file mode 100644 index 00000000..4c9d787a --- /dev/null +++ b/databases/embedjs-hnswlib/README.md @@ -0,0 +1,8 @@ +# embedjs-hnswlib + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-hnswlib/eslint.config.js b/databases/embedjs-hnswlib/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-hnswlib/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-hnswlib/package.json b/databases/embedjs-hnswlib/package.json new file mode 100644 index 00000000..7dfe7df6 --- /dev/null +++ b/databases/embedjs-hnswlib/package.json @@ -0,0 +1,39 @@ +{ + "name": "@llm-tools/embedjs-hnswlib", + "version": "0.0.1", + "description": "Add HNSWLib support to embedjs", + "dependencies": { + "debug": "^4.3.7", + "hnswlib-node": "^3.0.0", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-hnswlib/project.json b/databases/embedjs-hnswlib/project.json new file mode 100644 index 00000000..25127557 --- /dev/null +++ b/databases/embedjs-hnswlib/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-hnswlib", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-hnswlib/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-hnswlib", + "main": "databases/embedjs-hnswlib/src/index.ts", + "tsConfig": "databases/embedjs-hnswlib/tsconfig.lib.json", + "assets": ["databases/embedjs-hnswlib/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-hnswlib", + "main": "databases/embedjs-hnswlib/src/index.ts", + "tsConfig": "databases/embedjs-hnswlib/tsconfig.cjs.json" + } + } + } +} diff --git a/src/vectorDb/hnswlib-db.ts b/databases/embedjs-hnswlib/src/hnswlib-db.ts similarity index 87% rename from src/vectorDb/hnswlib-db.ts rename to databases/embedjs-hnswlib/src/hnswlib-db.ts index ce5ae44d..4f3ee756 100644 --- a/src/vectorDb/hnswlib-db.ts +++ b/databases/embedjs-hnswlib/src/hnswlib-db.ts @@ -1,58 +1,57 @@ -import HNSWLib from 'hnswlib-node'; -import createDebugMessages from 'debug'; - -import { BaseDb } from '../interfaces/base-db.js'; -import { ExtractChunkData, InsertChunkData, Metadata } from '../global/types.js'; - -export class HNSWDb implements BaseDb { - private readonly debug = createDebugMessages('embedjs:vector:HNSWDb'); - private index: HNSWLib.HierarchicalNSW; - - private docCount: number; - private docMap: Map> }>; - - async init({ dimensions }: { dimensions: number }) { - this.index = await new HNSWLib.HierarchicalNSW('cosine', dimensions); - this.index.initIndex(0); - this.docMap = new Map(); - this.docCount = 0; - } - - async insertChunks(chunks: InsertChunkData[]): Promise { - const needed = this.index.getCurrentCount() + chunks.length; - this.index.resizeIndex(needed); - - for (const chunk of chunks) { - this.docCount++; - this.index.addPoint(chunk.vector, this.docCount); - this.docMap.set(this.docCount, { pageContent: chunk.pageContent, metadata: chunk.metadata }); - } - - return chunks.length; - } - - async similaritySearch(query: number[], k: number): Promise { - k = Math.min(k, this.index.getCurrentCount()); - const result = this.index.searchKnn(query, k, (label) => this.docMap.has(label)); - - return result.neighbors.map((label, index) => { - return { - ...this.docMap.get(label), - score: result.distances[index], - }; - }); - } - - async getVectorCount(): Promise { - return this.index.getCurrentCount(); - } - - async deleteKeys(_uniqueLoaderId: string): Promise { - this.debug('deleteKeys is not supported by HNSWDb'); - return false; - } - - async reset(): Promise { - await this.init({ dimensions: this.index.getNumDimensions() }); - } -} +import HNSWLib from 'hnswlib-node'; +import createDebugMessages from 'debug'; + +import { BaseDb, ExtractChunkData, InsertChunkData, Metadata } from '@llm-tools/embedjs-interfaces'; + +export class HNSWDb implements BaseDb { + private readonly debug = createDebugMessages('embedjs:vector:HNSWDb'); + private index: HNSWLib.HierarchicalNSW; + + private docCount: number; + private docMap: Map> }>; + + async init({ dimensions }: { dimensions: number }) { + this.index = await new HNSWLib.HierarchicalNSW('cosine', dimensions); + this.index.initIndex(0); + this.docMap = new Map(); + this.docCount = 0; + } + + async insertChunks(chunks: InsertChunkData[]): Promise { + const needed = this.index.getCurrentCount() + chunks.length; + this.index.resizeIndex(needed); + + for (const chunk of chunks) { + this.docCount++; + this.index.addPoint(chunk.vector, this.docCount); + this.docMap.set(this.docCount, { pageContent: chunk.pageContent, metadata: chunk.metadata }); + } + + return chunks.length; + } + + async similaritySearch(query: number[], k: number): Promise { + k = Math.min(k, this.index.getCurrentCount()); + const result = this.index.searchKnn(query, k, (label) => this.docMap.has(label)); + + return result.neighbors.map((label, index) => { + return { + ...this.docMap.get(label), + score: result.distances[index], + }; + }); + } + + async getVectorCount(): Promise { + return this.index.getCurrentCount(); + } + + async deleteKeys(): Promise { + this.debug('deleteKeys is not supported by HNSWDb'); + return false; + } + + async reset(): Promise { + await this.init({ dimensions: this.index.getNumDimensions() }); + } +} diff --git a/databases/embedjs-hnswlib/src/index.ts b/databases/embedjs-hnswlib/src/index.ts new file mode 100644 index 00000000..81d2bccc --- /dev/null +++ b/databases/embedjs-hnswlib/src/index.ts @@ -0,0 +1 @@ +export * from './hnswlib-db.js'; diff --git a/databases/embedjs-hnswlib/tsconfig.cjs.json b/databases/embedjs-hnswlib/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-hnswlib/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-hnswlib/tsconfig.json b/databases/embedjs-hnswlib/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-hnswlib/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-hnswlib/tsconfig.lib.json b/databases/embedjs-hnswlib/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-hnswlib/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-lancedb/CHANGELOG.md b/databases/embedjs-lancedb/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-lancedb/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-lancedb/README.md b/databases/embedjs-lancedb/README.md new file mode 100644 index 00000000..94483e87 --- /dev/null +++ b/databases/embedjs-lancedb/README.md @@ -0,0 +1,8 @@ +# embedjs-lancedb + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-lancedb/eslint.config.js b/databases/embedjs-lancedb/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-lancedb/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-lancedb/package.json b/databases/embedjs-lancedb/package.json new file mode 100644 index 00000000..81289c8e --- /dev/null +++ b/databases/embedjs-lancedb/package.json @@ -0,0 +1,39 @@ +{ + "name": "@llm-tools/embedjs-lancedb", + "version": "0.0.1", + "description": "Add LanceDb support to embedjs", + "dependencies": { + "@lancedb/lancedb": "^0.10.0", + "compute-cosine-similarity": "^1.1.0", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-lancedb/project.json b/databases/embedjs-lancedb/project.json new file mode 100644 index 00000000..508fe719 --- /dev/null +++ b/databases/embedjs-lancedb/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-lancedb", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-lancedb/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-lancedb", + "main": "databases/embedjs-lancedb/src/index.ts", + "tsConfig": "databases/embedjs-lancedb/tsconfig.lib.json", + "assets": ["databases/embedjs-lancedb/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-lancedb", + "main": "databases/embedjs-lancedb/src/index.ts", + "tsConfig": "databases/embedjs-lancedb/tsconfig.cjs.json" + } + } + } +} diff --git a/databases/embedjs-lancedb/src/index.ts b/databases/embedjs-lancedb/src/index.ts new file mode 100644 index 00000000..f3bc0277 --- /dev/null +++ b/databases/embedjs-lancedb/src/index.ts @@ -0,0 +1 @@ +export * from './lance-db.js'; diff --git a/src/vectorDb/lance-db.ts b/databases/embedjs-lancedb/src/lance-db.ts similarity index 96% rename from src/vectorDb/lance-db.ts rename to databases/embedjs-lancedb/src/lance-db.ts index f75ace95..f20ad512 100644 --- a/src/vectorDb/lance-db.ts +++ b/databases/embedjs-lancedb/src/lance-db.ts @@ -3,8 +3,7 @@ import * as fs from 'node:fs/promises'; import similarity from 'compute-cosine-similarity'; import { Table, connect } from '@lancedb/lancedb'; -import { BaseDb } from '../interfaces/base-db.js'; -import { ExtractChunkData, InsertChunkData } from '../global/types.js'; +import { BaseDb, ExtractChunkData, InsertChunkData } from '@llm-tools/embedjs-interfaces'; export class LanceDb implements BaseDb { private static readonly STATIC_DB_NAME = 'vectors'; diff --git a/databases/embedjs-lancedb/tsconfig.cjs.json b/databases/embedjs-lancedb/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-lancedb/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-lancedb/tsconfig.json b/databases/embedjs-lancedb/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-lancedb/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-lancedb/tsconfig.lib.json b/databases/embedjs-lancedb/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-lancedb/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-lmdb/CHANGELOG.md b/databases/embedjs-lmdb/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-lmdb/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-lmdb/README.md b/databases/embedjs-lmdb/README.md new file mode 100644 index 00000000..dab5d917 --- /dev/null +++ b/databases/embedjs-lmdb/README.md @@ -0,0 +1,8 @@ +# embedjs-lmdb + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-lmdb/eslint.config.js b/databases/embedjs-lmdb/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-lmdb/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-lmdb/package.json b/databases/embedjs-lmdb/package.json new file mode 100644 index 00000000..0eb12fdd --- /dev/null +++ b/databases/embedjs-lmdb/package.json @@ -0,0 +1,38 @@ +{ + "name": "@llm-tools/embedjs-lmdb", + "version": "0.0.1", + "description": "Add LMDB support to embedjs", + "dependencies": { + "lmdb": "^3.1.3", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-lmdb/project.json b/databases/embedjs-lmdb/project.json new file mode 100644 index 00000000..a9589018 --- /dev/null +++ b/databases/embedjs-lmdb/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-lmdb", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-lmdb/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-lmdb", + "main": "databases/embedjs-lmdb/src/index.ts", + "tsConfig": "databases/embedjs-lmdb/tsconfig.lib.json", + "assets": ["databases/embedjs-lmdb/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-lmdb", + "main": "databases/embedjs-lmdb/src/index.ts", + "tsConfig": "databases/embedjs-lmdb/tsconfig.cjs.json" + } + } + } +} diff --git a/databases/embedjs-lmdb/src/index.ts b/databases/embedjs-lmdb/src/index.ts new file mode 100644 index 00000000..b9f687d6 --- /dev/null +++ b/databases/embedjs-lmdb/src/index.ts @@ -0,0 +1 @@ +export * from './lmdb-cache.js'; diff --git a/src/cache/lmdb-cache.ts b/databases/embedjs-lmdb/src/lmdb-cache.ts similarity index 83% rename from src/cache/lmdb-cache.ts rename to databases/embedjs-lmdb/src/lmdb-cache.ts index 5a4468d2..cae11483 100644 --- a/src/cache/lmdb-cache.ts +++ b/databases/embedjs-lmdb/src/lmdb-cache.ts @@ -1,50 +1,50 @@ -import * as lmdb from 'lmdb'; -import { BaseCache } from '../interfaces/base-cache.js'; - -export class LmdbCache implements BaseCache { - private readonly dataPath: string; - private database: lmdb.RootDatabase; - - constructor({ path }: { path: string }) { - this.dataPath = path; - } - - async init(): Promise { - this.database = lmdb.open({ - path: this.dataPath, - compression: true, - }); - } - - async addLoader(loaderId: string, chunkCount: number): Promise { - await this.database.put(loaderId, { chunkCount }); - } - - async getLoader(loaderId: string): Promise<{ chunkCount: number }> { - return this.database.get(loaderId); - } - - async hasLoader(loaderId: string): Promise { - return this.database.doesExist(loaderId); - } - - async loaderCustomSet>(loaderCombinedId: string, value: T): Promise { - await this.database.put(loaderCombinedId, value); - } - - async loaderCustomGet>(loaderCombinedId: string): Promise { - return this.database.get(loaderCombinedId); - } - - async loaderCustomHas(loaderCombinedId: string): Promise { - return this.database.doesExist(loaderCombinedId); - } - - async deleteLoader(loaderId: string): Promise { - await this.database.remove(loaderId); - } - - async loaderCustomDelete(loaderCombinedId: string): Promise { - await this.database.remove(loaderCombinedId); - } -} +import { BaseCache } from '@llm-tools/embedjs-interfaces'; +import * as lmdb from 'lmdb'; + +export class LmdbCache implements BaseCache { + private readonly dataPath: string; + private database: lmdb.RootDatabase, lmdb.Key>; + + constructor({ path }: { path: string }) { + this.dataPath = path; + } + + async init(): Promise { + this.database = lmdb.open({ + path: this.dataPath, + compression: true, + }); + } + + async addLoader(loaderId: string, chunkCount: number): Promise { + await this.database.put(loaderId, { chunkCount }); + } + + async getLoader(loaderId: string): Promise<{ chunkCount: number }> { + return <{ chunkCount: number }>this.database.get(loaderId); + } + + async hasLoader(loaderId: string): Promise { + return this.database.doesExist(loaderId); + } + + async loaderCustomSet>(loaderCombinedId: string, value: T): Promise { + await this.database.put(loaderCombinedId, value); + } + + async loaderCustomGet>(loaderCombinedId: string): Promise { + return this.database.get(loaderCombinedId); + } + + async loaderCustomHas(loaderCombinedId: string): Promise { + return this.database.doesExist(loaderCombinedId); + } + + async deleteLoader(loaderId: string): Promise { + await this.database.remove(loaderId); + } + + async loaderCustomDelete(loaderCombinedId: string): Promise { + await this.database.remove(loaderCombinedId); + } +} diff --git a/databases/embedjs-lmdb/tsconfig.cjs.json b/databases/embedjs-lmdb/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-lmdb/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-lmdb/tsconfig.json b/databases/embedjs-lmdb/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-lmdb/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-lmdb/tsconfig.lib.json b/databases/embedjs-lmdb/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-lmdb/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-mongodb/CHANGELOG.md b/databases/embedjs-mongodb/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-mongodb/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-mongodb/README.md b/databases/embedjs-mongodb/README.md new file mode 100644 index 00000000..8a33e5a7 --- /dev/null +++ b/databases/embedjs-mongodb/README.md @@ -0,0 +1,8 @@ +# embedjs-mongodb + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-mongodb/eslint.config.js b/databases/embedjs-mongodb/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-mongodb/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-mongodb/package.json b/databases/embedjs-mongodb/package.json new file mode 100644 index 00000000..52650fc0 --- /dev/null +++ b/databases/embedjs-mongodb/package.json @@ -0,0 +1,39 @@ +{ + "name": "@llm-tools/embedjs-mongodb", + "version": "0.0.1", + "description": "Add MongoDB support to embedjs", + "dependencies": { + "mongodb": "^6.9.0", + "debug": "^4.3.7", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-mongodb/project.json b/databases/embedjs-mongodb/project.json new file mode 100644 index 00000000..43cea5a9 --- /dev/null +++ b/databases/embedjs-mongodb/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-mongodb", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-mongodb/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-mongodb", + "main": "databases/embedjs-mongodb/src/index.ts", + "tsConfig": "databases/embedjs-mongodb/tsconfig.lib.json", + "assets": ["databases/embedjs-mongodb/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-mongodb", + "main": "databases/embedjs-mongodb/src/index.ts", + "tsConfig": "databases/embedjs-mongodb/tsconfig.cjs.json" + } + } + } +} diff --git a/databases/embedjs-mongodb/src/index.ts b/databases/embedjs-mongodb/src/index.ts new file mode 100644 index 00000000..ba6eb43c --- /dev/null +++ b/databases/embedjs-mongodb/src/index.ts @@ -0,0 +1,3 @@ +export * from './mongo-cache.js'; +export * from './mongo-db.js'; +export * from './mongo-conversations.js'; diff --git a/src/cache/mongo-cache.ts b/databases/embedjs-mongodb/src/mongo-cache.ts similarity index 95% rename from src/cache/mongo-cache.ts rename to databases/embedjs-mongodb/src/mongo-cache.ts index 25648235..943f05b7 100644 --- a/src/cache/mongo-cache.ts +++ b/databases/embedjs-mongodb/src/mongo-cache.ts @@ -1,77 +1,76 @@ -import createDebugMessages from 'debug'; -import { Collection, Document, MongoClient } from 'mongodb'; - -import { BaseCache } from '../interfaces/base-cache.js'; - -export class MongoCache implements BaseCache { - private readonly debug = createDebugMessages('embedjs:cache:MongoCache'); - private readonly uri: string; - private readonly dbName: string; - private readonly collectionName: string; - private collection: Collection; - - constructor({ uri, dbName, collectionName }: { uri: string; dbName: string; collectionName: string }) { - this.uri = uri; - this.dbName = dbName; - this.collectionName = collectionName; - } - - async init(): Promise { - const client = new MongoClient(this.uri); - await client.connect(); - - // Create index on loaderId field - this.collection = client.db(this.dbName).collection(this.collectionName); - try { - await this.collection.createIndex({ loaderId: 1 }, { unique: true }); - } catch { - this.debug('Index on loaderId already exists.'); - } - } - - async addLoader(loaderId: string, chunkCount: number): Promise { - await this.collection.insertOne({ loaderId, chunkCount }); - } - - async getLoader(loaderId: string): Promise<{ chunkCount: number }> { - const result = await this.collection.findOne({ loaderId }); - return { chunkCount: result ? result.chunkCount : 0 }; // Assuming a default value of 0 if result is null - } - - async hasLoader(loaderId: string): Promise { - return !!(await this.collection.findOne({ loaderId })); - } - - async loaderCustomSet>(loaderCombinedId: string, value: T): Promise { - const result = await this.collection.updateOne( - { loaderId: loaderCombinedId }, - { $setOnInsert: { loaderId: loaderCombinedId, value } }, - { upsert: false }, - ); - - if (result.matchedCount === 0) { - await this.collection.insertOne({ loaderId: loaderCombinedId, value }); - } - } - - async loaderCustomGet>(loaderCombinedId: string): Promise { - const result = await this.collection.findOne({ loaderId: loaderCombinedId }); - return result?.value; - } - - async loaderCustomHas(loaderCombinedId: string): Promise { - return !!(await this.collection.findOne({ loaderId: loaderCombinedId })); - } - - async clear(): Promise { - await this.collection.deleteMany({}); - } - - async deleteLoader(loaderId: string): Promise { - await this.collection.deleteOne({ loaderId }); - } - - async loaderCustomDelete(loaderCombinedId: string): Promise { - await this.collection.deleteOne({ loaderId: loaderCombinedId }); - } -} +import { BaseCache } from '@llm-tools/embedjs-interfaces'; +import createDebugMessages from 'debug'; +import { Collection, Document, MongoClient } from 'mongodb'; + +export class MongoCache implements BaseCache { + private readonly debug = createDebugMessages('embedjs:cache:MongoCache'); + private readonly uri: string; + private readonly dbName: string; + private readonly collectionName: string; + private collection: Collection; + + constructor({ uri, dbName, collectionName }: { uri: string; dbName: string; collectionName: string }) { + this.uri = uri; + this.dbName = dbName; + this.collectionName = collectionName; + } + + async init(): Promise { + const client = new MongoClient(this.uri); + await client.connect(); + + // Create index on loaderId field + this.collection = client.db(this.dbName).collection(this.collectionName); + try { + await this.collection.createIndex({ loaderId: 1 }, { unique: true }); + } catch { + this.debug('Index on loaderId already exists.'); + } + } + + async addLoader(loaderId: string, chunkCount: number): Promise { + await this.collection.insertOne({ loaderId, chunkCount }); + } + + async getLoader(loaderId: string): Promise<{ chunkCount: number }> { + const result = await this.collection.findOne({ loaderId }); + return { chunkCount: result ? result.chunkCount : 0 }; // Assuming a default value of 0 if result is null + } + + async hasLoader(loaderId: string): Promise { + return !!(await this.collection.findOne({ loaderId })); + } + + async loaderCustomSet>(loaderCombinedId: string, value: T): Promise { + const result = await this.collection.updateOne( + { loaderId: loaderCombinedId }, + { $setOnInsert: { loaderId: loaderCombinedId, value } }, + { upsert: false }, + ); + + if (result.matchedCount === 0) { + await this.collection.insertOne({ loaderId: loaderCombinedId, value }); + } + } + + async loaderCustomGet>(loaderCombinedId: string): Promise { + const result = await this.collection.findOne({ loaderId: loaderCombinedId }); + return result?.value; + } + + async loaderCustomHas(loaderCombinedId: string): Promise { + return !!(await this.collection.findOne({ loaderId: loaderCombinedId })); + } + + async clear(): Promise { + await this.collection.deleteMany({}); + } + + async deleteLoader(loaderId: string): Promise { + await this.collection.deleteOne({ loaderId }); + } + + async loaderCustomDelete(loaderCombinedId: string): Promise { + await this.collection.deleteOne({ loaderId: loaderCombinedId }); + } +} diff --git a/src/conversation/mongo-conversations.ts b/databases/embedjs-mongodb/src/mongo-conversations.ts similarity index 93% rename from src/conversation/mongo-conversations.ts rename to databases/embedjs-mongodb/src/mongo-conversations.ts index 981a7435..567249ff 100644 --- a/src/conversation/mongo-conversations.ts +++ b/databases/embedjs-mongodb/src/mongo-conversations.ts @@ -1,84 +1,82 @@ -import createDebugMessages from 'debug'; -import { Collection, MongoClient } from 'mongodb'; - -import { Conversation, Message } from '../global/types.js'; -import { BaseConversation } from '../interfaces/base-conversations.js'; - -interface ConversationDocument { - _id?: string; // optional MongoDB ID field - conversationId: string; - entries: Message[]; // Explicitly stating this is an array of ConversationHistory -} - -export class MongoConversation implements BaseConversation { - private readonly debug = createDebugMessages('embedjs:conversation:MongoConversation'); - private readonly uri: string; - private readonly dbName: string; - private readonly collectionName: string; - private collection: Collection; - - constructor({ uri, dbName, collectionName }: { uri: string; dbName: string; collectionName: string }) { - this.uri = uri; - this.dbName = dbName; - this.collectionName = collectionName; - } - - async init(): Promise { - const client = new MongoClient(this.uri); - await client.connect(); - - this.collection = client.db(this.dbName).collection(this.collectionName); - - try { - await this.collection.createIndex({ conversationId: 1 }); - } catch { - this.debug('Index on conversationId already exists.'); - } - - try { - await this.collection.createIndex({ 'entries._id': 1 }); - } catch { - this.debug('Index on `entries._id` already exists.'); - } - } - - async addConversation(conversationId: string): Promise { - // Check if conversation already exists to prevent duplication - const exists = await this.hasConversation(conversationId); - if (!exists) { - await this.collection.insertOne({ conversationId, entries: [] }); - } - } - - async getConversation(conversationId: string): Promise { - const document = await this.collection.findOne({ conversationId }); - if (!document) { - // If not found, create a new one automatically - await this.addConversation(conversationId); - return { conversationId, entries: [] }; - } - return { - conversationId: document.conversationId, - entries: document.entries as Message[], - }; - } - - async hasConversation(conversationId: string): Promise { - return !!(await this.collection.findOne({ conversationId })); - } - - async deleteConversation(conversationId: string): Promise { - await this.collection.deleteOne({ conversationId }); - } - - async addEntryToConversation(conversationId: string, entry: Message): Promise { - await this.collection.updateOne( - { conversationId }, - { $push: { entries: entry } }, // Correctly structured $push operation - ); - } - - async clearConversations(): Promise { - await this.collection.deleteMany({}); - } -} +import createDebugMessages from 'debug'; +import { Collection, MongoClient } from 'mongodb'; +import { BaseConversation, Conversation, Message } from '@llm-tools/embedjs-interfaces'; + +interface ConversationDocument { + _id?: string; // optional MongoDB ID field + conversationId: string; + entries: Message[]; // Explicitly stating this is an array of ConversationHistory +} + +export class MongoConversation implements BaseConversation { + private readonly debug = createDebugMessages('embedjs:conversation:MongoConversation'); + private readonly uri: string; + private readonly dbName: string; + private readonly collectionName: string; + private collection: Collection; + + constructor({ uri, dbName, collectionName }: { uri: string; dbName: string; collectionName: string }) { + this.uri = uri; + this.dbName = dbName; + this.collectionName = collectionName; + } + + async init(): Promise { + const client = new MongoClient(this.uri); + await client.connect(); + + this.collection = client.db(this.dbName).collection(this.collectionName); + + try { + await this.collection.createIndex({ conversationId: 1 }); + } catch { + this.debug('Index on conversationId already exists.'); + } + + try { + await this.collection.createIndex({ 'entries._id': 1 }); + } catch { + this.debug('Index on `entries._id` already exists.'); + } + } + + async addConversation(conversationId: string): Promise { + // Check if conversation already exists to prevent duplication + const exists = await this.hasConversation(conversationId); + if (!exists) { + await this.collection.insertOne({ conversationId, entries: [] }); + } + } + + async getConversation(conversationId: string): Promise { + const document = await this.collection.findOne({ conversationId }); + if (!document) { + // If not found, create a new one automatically + await this.addConversation(conversationId); + return { conversationId, entries: [] }; + } + return { + conversationId: document.conversationId, + entries: document.entries as Message[], + }; + } + + async hasConversation(conversationId: string): Promise { + return !!(await this.collection.findOne({ conversationId })); + } + + async deleteConversation(conversationId: string): Promise { + await this.collection.deleteOne({ conversationId }); + } + + async addEntryToConversation(conversationId: string, entry: Message): Promise { + await this.collection.updateOne( + { conversationId }, + { $push: { entries: entry } }, // Correctly structured $push operation + ); + } + + async clearConversations(): Promise { + await this.collection.deleteMany({}); + } +} diff --git a/src/vectorDb/mongo-db.ts b/databases/embedjs-mongodb/src/mongo-db.ts similarity index 95% rename from src/vectorDb/mongo-db.ts rename to databases/embedjs-mongodb/src/mongo-db.ts index b47101a4..0459eb0e 100644 --- a/src/vectorDb/mongo-db.ts +++ b/databases/embedjs-mongodb/src/mongo-db.ts @@ -1,175 +1,174 @@ -import { Collection, MongoClient } from 'mongodb'; -import createDebugMessages from 'debug'; - -import { BaseDb } from '../interfaces/base-db.js'; -import { ExtractChunkData, InsertChunkData } from '../global/types.js'; - -export class MongoDb implements BaseDb { - private readonly debug = createDebugMessages('embedjs:vector:MongoDb'); - - private static readonly DEFAULT_DB_NAME = 'embedjs'; - private static readonly COLLECTION_NAME = 'vectors'; - private static readonly VECTOR_FIELD_NAME = 'v_fld'; - private static readonly LOADER_FIELD_NAME = 'l_fld'; - private static readonly UNIQUE_FIELD_NAME = 'u_fld'; - private static readonly INDEX_PREFIX = 'index_'; - - private readonly client: MongoClient; - private readonly dbName: string; - - private collection: Collection; - private readonly collectionName: string; - - constructor({ - connectionString, - dbName, - collectionName, - }: { - connectionString: string; - dbName?: string; - collectionName?: string; - }) { - this.collectionName = collectionName ?? MongoDb.COLLECTION_NAME; - this.dbName = dbName ?? MongoDb.DEFAULT_DB_NAME; - this.client = new MongoClient(connectionString); - } - - private getIndexName(indexName: string) { - return MongoDb.INDEX_PREFIX + indexName; - } - - async init({ dimensions }: { dimensions: number }) { - this.debug('Connecting to database'); - await this.client.connect(); - const database = this.client.db(this.dbName); - this.debug('Connected'); - - const collections = await database.collections({ nameOnly: true, authorizedCollections: true }); - if (!collections.some((x) => x.collectionName === this.collectionName)) { - this.debug(`Creating collection '${this.collectionName}'`); - await database.createCollection(this.collectionName); - } - this.collection = database.collection(this.collectionName); - this.debug('Collection reference obtained'); - - const vectorIndexName = this.getIndexName(MongoDb.VECTOR_FIELD_NAME); - if ((await this.collection.listSearchIndexes(vectorIndexName).toArray()).length === 0) { - this.debug(`Creating vector search index '${vectorIndexName}'`); - await this.collection.createSearchIndex({ - name: vectorIndexName, - type: 'vectorSearch', - definition: { - fields: [ - { - type: 'vector', - numDimensions: dimensions, - path: MongoDb.VECTOR_FIELD_NAME, - similarity: 'cosine', - }, - ], - }, - }); - } - - const loaderIndexName = this.getIndexName(MongoDb.LOADER_FIELD_NAME); - if ( - !( - ( - (await this.collection.indexExists(loaderIndexName)) || - (await this.collection.indexExists(`${loaderIndexName}_1`)) - ) //MongoDB atlas sometimes appends _1 to index names - ) - ) { - this.debug(`Creating unique loader index '${loaderIndexName}'`); - await this.collection.createIndex({ [loaderIndexName]: 1 }); - } - - this.debug('All indexes created / exist already'); - } - - async insertChunks(chunks: InsertChunkData[]): Promise { - this.debug(`Inserting ${chunks.length} chunks`); - const insertResult = await this.collection.insertMany( - chunks.map((chunk) => { - const metadata = chunk.metadata; - - const uniqueLoaderId = metadata.uniqueLoaderId; - delete metadata.uniqueLoaderId; - - const source = metadata.source; - delete metadata.source; - - const id = metadata.id; - delete metadata.id; - - return { - [MongoDb.UNIQUE_FIELD_NAME]: id, - [MongoDb.VECTOR_FIELD_NAME]: chunk.vector, - [MongoDb.LOADER_FIELD_NAME]: uniqueLoaderId, - pageContent: chunk.pageContent, - source: source, - metadata, - }; - }), - ); - - return insertResult.insertedCount; - } - - async similaritySearch(query: number[], k: number): Promise { - this.debug(`Searching with query dimension ${query.length}`); - return ( - await this.collection - .aggregate([ - { - $vectorSearch: { - index: this.getIndexName(MongoDb.VECTOR_FIELD_NAME), - path: MongoDb.VECTOR_FIELD_NAME, - numCandidates: 25 * k, - queryVector: query, - limit: k, - }, - }, - { - $project: { - _id: 0, - source: 1, - metadata: 1, - pageContent: 1, - [MongoDb.UNIQUE_FIELD_NAME]: 1, - [MongoDb.LOADER_FIELD_NAME]: 1, - score: { - $meta: 'vectorSearchScore', - }, - }, - }, - ]) - .toArray() - ).map((row) => { - return { - score: row.score, - pageContent: row.pageContent, - metadata: { - ...row.metadata, - source: row.source, - id: row[MongoDb.UNIQUE_FIELD_NAME], - uniqueLoaderId: row[MongoDb.LOADER_FIELD_NAME], - }, - }; - }); - } - - async getVectorCount(): Promise { - return this.collection.countDocuments(); - } - - async deleteKeys(uniqueLoaderId: string): Promise { - this.debug(`Deleting keys tied to loader '${uniqueLoaderId}'`); - const result = await this.collection.deleteMany({ [MongoDb.LOADER_FIELD_NAME]: uniqueLoaderId }); - return !!result.deletedCount; - } - - async reset(): Promise { - await this.collection.deleteMany({}); - } -} \ No newline at end of file +import { Collection, MongoClient } from 'mongodb'; +import createDebugMessages from 'debug'; + +import { BaseDb, ExtractChunkData, InsertChunkData } from '@llm-tools/embedjs-interfaces'; + +export class MongoDb implements BaseDb { + private readonly debug = createDebugMessages('embedjs:vector:MongoDb'); + + private static readonly DEFAULT_DB_NAME = 'embedjs'; + private static readonly COLLECTION_NAME = 'vectors'; + private static readonly VECTOR_FIELD_NAME = 'v_fld'; + private static readonly LOADER_FIELD_NAME = 'l_fld'; + private static readonly UNIQUE_FIELD_NAME = 'u_fld'; + private static readonly INDEX_PREFIX = 'index_'; + + private readonly client: MongoClient; + private readonly dbName: string; + + private collection: Collection; + private readonly collectionName: string; + + constructor({ + connectionString, + dbName, + collectionName, + }: { + connectionString: string; + dbName?: string; + collectionName?: string; + }) { + this.collectionName = collectionName ?? MongoDb.COLLECTION_NAME; + this.dbName = dbName ?? MongoDb.DEFAULT_DB_NAME; + this.client = new MongoClient(connectionString); + } + + private getIndexName(indexName: string) { + return MongoDb.INDEX_PREFIX + indexName; + } + + async init({ dimensions }: { dimensions: number }) { + this.debug('Connecting to database'); + await this.client.connect(); + const database = this.client.db(this.dbName); + this.debug('Connected'); + + const collections = await database.collections({ nameOnly: true, authorizedCollections: true }); + if (!collections.some((x) => x.collectionName === this.collectionName)) { + this.debug(`Creating collection '${this.collectionName}'`); + await database.createCollection(this.collectionName); + } + this.collection = database.collection(this.collectionName); + this.debug('Collection reference obtained'); + + const vectorIndexName = this.getIndexName(MongoDb.VECTOR_FIELD_NAME); + if ((await this.collection.listSearchIndexes(vectorIndexName).toArray()).length === 0) { + this.debug(`Creating vector search index '${vectorIndexName}'`); + await this.collection.createSearchIndex({ + name: vectorIndexName, + type: 'vectorSearch', + definition: { + fields: [ + { + type: 'vector', + numDimensions: dimensions, + path: MongoDb.VECTOR_FIELD_NAME, + similarity: 'cosine', + }, + ], + }, + }); + } + + const loaderIndexName = this.getIndexName(MongoDb.LOADER_FIELD_NAME); + if ( + !( + ( + (await this.collection.indexExists(loaderIndexName)) || + (await this.collection.indexExists(`${loaderIndexName}_1`)) + ) //MongoDB atlas sometimes appends _1 to index names + ) + ) { + this.debug(`Creating unique loader index '${loaderIndexName}'`); + await this.collection.createIndex({ [loaderIndexName]: 1 }); + } + + this.debug('All indexes created / exist already'); + } + + async insertChunks(chunks: InsertChunkData[]): Promise { + this.debug(`Inserting ${chunks.length} chunks`); + const insertResult = await this.collection.insertMany( + chunks.map((chunk) => { + const metadata = chunk.metadata; + + const uniqueLoaderId = metadata.uniqueLoaderId; + delete metadata.uniqueLoaderId; + + const source = metadata.source; + delete metadata.source; + + const id = metadata.id; + delete metadata.id; + + return { + [MongoDb.UNIQUE_FIELD_NAME]: id, + [MongoDb.VECTOR_FIELD_NAME]: chunk.vector, + [MongoDb.LOADER_FIELD_NAME]: uniqueLoaderId, + pageContent: chunk.pageContent, + source: source, + metadata, + }; + }), + ); + + return insertResult.insertedCount; + } + + async similaritySearch(query: number[], k: number): Promise { + this.debug(`Searching with query dimension ${query.length}`); + return ( + await this.collection + .aggregate([ + { + $vectorSearch: { + index: this.getIndexName(MongoDb.VECTOR_FIELD_NAME), + path: MongoDb.VECTOR_FIELD_NAME, + numCandidates: 25 * k, + queryVector: query, + limit: k, + }, + }, + { + $project: { + _id: 0, + source: 1, + metadata: 1, + pageContent: 1, + [MongoDb.UNIQUE_FIELD_NAME]: 1, + [MongoDb.LOADER_FIELD_NAME]: 1, + score: { + $meta: 'vectorSearchScore', + }, + }, + }, + ]) + .toArray() + ).map((row) => { + return { + score: row.score, + pageContent: row.pageContent, + metadata: { + ...row.metadata, + source: row.source, + id: row[MongoDb.UNIQUE_FIELD_NAME], + uniqueLoaderId: row[MongoDb.LOADER_FIELD_NAME], + }, + }; + }); + } + + async getVectorCount(): Promise { + return this.collection.countDocuments(); + } + + async deleteKeys(uniqueLoaderId: string): Promise { + this.debug(`Deleting keys tied to loader '${uniqueLoaderId}'`); + const result = await this.collection.deleteMany({ [MongoDb.LOADER_FIELD_NAME]: uniqueLoaderId }); + return !!result.deletedCount; + } + + async reset(): Promise { + await this.collection.deleteMany({}); + } +} diff --git a/databases/embedjs-mongodb/tsconfig.cjs.json b/databases/embedjs-mongodb/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-mongodb/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-mongodb/tsconfig.json b/databases/embedjs-mongodb/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-mongodb/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-mongodb/tsconfig.lib.json b/databases/embedjs-mongodb/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-mongodb/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-pinecone/CHANGELOG.md b/databases/embedjs-pinecone/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-pinecone/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-pinecone/README.md b/databases/embedjs-pinecone/README.md new file mode 100644 index 00000000..765ba2c6 --- /dev/null +++ b/databases/embedjs-pinecone/README.md @@ -0,0 +1,8 @@ +# embedjs-pinecone + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-pinecone/eslint.config.js b/databases/embedjs-pinecone/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-pinecone/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-pinecone/package.json b/databases/embedjs-pinecone/package.json new file mode 100644 index 00000000..76127984 --- /dev/null +++ b/databases/embedjs-pinecone/package.json @@ -0,0 +1,39 @@ +{ + "name": "@llm-tools/embedjs-pinecone", + "version": "0.0.1", + "description": "Add Pinecone support to embedjs", + "dependencies": { + "debug": "^4.3.7", + "@pinecone-database/pinecone": "^3.0.3", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-pinecone/project.json b/databases/embedjs-pinecone/project.json new file mode 100644 index 00000000..d63b0984 --- /dev/null +++ b/databases/embedjs-pinecone/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-pinecone", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-pinecone/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-pinecone", + "main": "databases/embedjs-pinecone/src/index.ts", + "tsConfig": "databases/embedjs-pinecone/tsconfig.lib.json", + "assets": ["databases/embedjs-pinecone/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-pinecone", + "main": "databases/embedjs-pinecone/src/index.ts", + "tsConfig": "databases/embedjs-pinecone/tsconfig.cjs.json" + } + } + } +} diff --git a/databases/embedjs-pinecone/src/index.ts b/databases/embedjs-pinecone/src/index.ts new file mode 100644 index 00000000..804e6f3e --- /dev/null +++ b/databases/embedjs-pinecone/src/index.ts @@ -0,0 +1 @@ +export * from './pinecone-db.js'; diff --git a/src/vectorDb/pinecone-db.ts b/databases/embedjs-pinecone/src/pinecone-db.ts similarity index 90% rename from src/vectorDb/pinecone-db.ts rename to databases/embedjs-pinecone/src/pinecone-db.ts index e4255f62..7d7a559b 100644 --- a/src/vectorDb/pinecone-db.ts +++ b/databases/embedjs-pinecone/src/pinecone-db.ts @@ -1,112 +1,111 @@ -import { CreateIndexSpec } from '@pinecone-database/pinecone/dist/control/createIndex.js'; -import { Pinecone, PineconeRecord } from '@pinecone-database/pinecone'; -import createDebugMessages from 'debug'; - -import { BaseDb } from '../interfaces/base-db.js'; -import { ExtractChunkData, InsertChunkData } from '../global/types.js'; - -export class PineconeDb implements BaseDb { - private readonly debug = createDebugMessages('embedjs:vector:PineconeDb'); - private static readonly PINECONE_INSERT_CHUNK_SIZE = 200; //Pinecone only allows inserting 2MB worth of chunks at a time; this is an approximation - - private readonly client: Pinecone; - private readonly namespace: string; - private readonly projectName: string; - private readonly indexSpec: CreateIndexSpec; - - constructor({ - projectName, - namespace, - indexSpec, - }: { - projectName: string; - namespace: string; - indexSpec: CreateIndexSpec; - }) { - this.client = new Pinecone(); - - this.projectName = projectName; - this.namespace = namespace; - this.indexSpec = indexSpec; - } - - async init({ dimensions }: { dimensions: number }) { - const list = (await this.client.listIndexes()).indexes.map((i) => i.name); - if (list.indexOf(this.projectName) > -1) return; - - await this.client.createIndex({ - name: this.projectName, - dimension: dimensions, - metric: 'cosine', - spec: this.indexSpec, - }); - } - - async insertChunks(chunks: InsertChunkData[]): Promise { - let processed = 0; - const index = this.client.Index(this.projectName).namespace(this.namespace); - - for (let i = 0; i < chunks.length; i += PineconeDb.PINECONE_INSERT_CHUNK_SIZE) { - const chunkBatch = chunks.slice(i, i + PineconeDb.PINECONE_INSERT_CHUNK_SIZE); - - const upsertCommand: PineconeRecord[] = chunkBatch.map((chunk) => { - return { - id: chunk.metadata.id, - values: chunk.vector, - metadata: { pageContent: chunk.pageContent, ...chunk.metadata }, - }; - }); - - this.debug(`Inserting Pinecone batch`); - await index.upsert(upsertCommand); - processed += chunkBatch.length; - } - - return processed; - } - - async similaritySearch(query: number[], k: number): Promise { - const index = this.client.Index(this.projectName).namespace(this.namespace); - const queryResponse = await index.query({ - topK: k, - vector: query, - includeMetadata: true, - includeValues: true, - }); - - return queryResponse.matches.map((match) => { - const pageContent = (match.metadata).pageContent; - delete (match.metadata).pageContent; - - return { - score: match.score, - pageContent, - metadata: match.metadata, - }; - }); - } - - async getVectorCount(): Promise { - const index = this.client.Index(this.projectName).namespace(this.namespace); - return (await index.describeIndexStats()).totalRecordCount; - } - - async deleteKeys(uniqueLoaderId: string): Promise { - const index = await this.client.Index(this.projectName).namespace(this.namespace); - - try { - await index.deleteMany({ uniqueLoaderId: { $eq: uniqueLoaderId } }); - return true; - } catch (e) { - this.debug( - `Failed to delete keys for loader '${uniqueLoaderId}'. -Pinecone does not allow deleting by metadata filtering in serverless and free (what they call starter) instances`, - ); - return false; - } - } - - async reset(): Promise { - await this.client.Index(this.projectName).namespace(this.namespace).deleteAll(); - } -} +import { CreateIndexSpec } from '@pinecone-database/pinecone/dist/control/createIndex.js'; +import { Pinecone, PineconeRecord } from '@pinecone-database/pinecone'; +import createDebugMessages from 'debug'; + +import { BaseDb, ExtractChunkData, InsertChunkData } from '@llm-tools/embedjs-interfaces'; + +export class PineconeDb implements BaseDb { + private readonly debug = createDebugMessages('embedjs:vector:PineconeDb'); + private static readonly PINECONE_INSERT_CHUNK_SIZE = 200; //Pinecone only allows inserting 2MB worth of chunks at a time; this is an approximation + + private readonly client: Pinecone; + private readonly namespace: string; + private readonly projectName: string; + private readonly indexSpec: CreateIndexSpec; + + constructor({ + projectName, + namespace, + indexSpec, + }: { + projectName: string; + namespace: string; + indexSpec: CreateIndexSpec; + }) { + this.client = new Pinecone(); + + this.projectName = projectName; + this.namespace = namespace; + this.indexSpec = indexSpec; + } + + async init({ dimensions }: { dimensions: number }) { + const list = (await this.client.listIndexes()).indexes.map((i) => i.name); + if (list.indexOf(this.projectName) > -1) return; + + await this.client.createIndex({ + name: this.projectName, + dimension: dimensions, + metric: 'cosine', + spec: this.indexSpec, + }); + } + + async insertChunks(chunks: InsertChunkData[]): Promise { + let processed = 0; + const index = this.client.Index(this.projectName).namespace(this.namespace); + + for (let i = 0; i < chunks.length; i += PineconeDb.PINECONE_INSERT_CHUNK_SIZE) { + const chunkBatch = chunks.slice(i, i + PineconeDb.PINECONE_INSERT_CHUNK_SIZE); + + const upsertCommand: PineconeRecord[] = chunkBatch.map((chunk) => { + return { + id: chunk.metadata.id, + values: chunk.vector, + metadata: { pageContent: chunk.pageContent, ...chunk.metadata }, + }; + }); + + this.debug(`Inserting Pinecone batch`); + await index.upsert(upsertCommand); + processed += chunkBatch.length; + } + + return processed; + } + + async similaritySearch(query: number[], k: number): Promise { + const index = this.client.Index(this.projectName).namespace(this.namespace); + const queryResponse = await index.query({ + topK: k, + vector: query, + includeMetadata: true, + includeValues: true, + }); + + return queryResponse.matches.map((match) => { + const pageContent = match.metadata.pageContent; + delete match.metadata.pageContent; + + return { + score: match.score, + pageContent, + metadata: match.metadata, + }; + }); + } + + async getVectorCount(): Promise { + const index = this.client.Index(this.projectName).namespace(this.namespace); + return (await index.describeIndexStats()).totalRecordCount; + } + + async deleteKeys(uniqueLoaderId: string): Promise { + const index = await this.client.Index(this.projectName).namespace(this.namespace); + + try { + await index.deleteMany({ uniqueLoaderId: { $eq: uniqueLoaderId } }); + return true; + } catch { + this.debug( + `Failed to delete keys for loader '${uniqueLoaderId}'. +Pinecone does not allow deleting by metadata filtering in serverless and free (what they call starter) instances`, + ); + return false; + } + } + + async reset(): Promise { + await this.client.Index(this.projectName).namespace(this.namespace).deleteAll(); + } +} diff --git a/databases/embedjs-pinecone/tsconfig.cjs.json b/databases/embedjs-pinecone/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-pinecone/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-pinecone/tsconfig.json b/databases/embedjs-pinecone/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-pinecone/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-pinecone/tsconfig.lib.json b/databases/embedjs-pinecone/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-pinecone/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-qdrant/CHANGELOG.md b/databases/embedjs-qdrant/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-qdrant/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-qdrant/README.md b/databases/embedjs-qdrant/README.md new file mode 100644 index 00000000..36bcd9dd --- /dev/null +++ b/databases/embedjs-qdrant/README.md @@ -0,0 +1,8 @@ +# embedjs-qdrant + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-qdrant/eslint.config.js b/databases/embedjs-qdrant/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-qdrant/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-qdrant/package.json b/databases/embedjs-qdrant/package.json new file mode 100644 index 00000000..2e553e95 --- /dev/null +++ b/databases/embedjs-qdrant/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-qdrant", + "version": "0.0.1", + "description": "Add Qdrant support to embedjs", + "dependencies": { + "uuid": "^10.0.0", + "debug": "^4.3.7", + "@qdrant/js-client-rest": "^1.11.0", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-qdrant/project.json b/databases/embedjs-qdrant/project.json new file mode 100644 index 00000000..c932f8b8 --- /dev/null +++ b/databases/embedjs-qdrant/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-qdrant", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-qdrant/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-qdrant", + "main": "databases/embedjs-qdrant/src/index.ts", + "tsConfig": "databases/embedjs-qdrant/tsconfig.lib.json", + "assets": ["databases/embedjs-qdrant/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-qdrant", + "main": "databases/embedjs-qdrant/src/index.ts", + "tsConfig": "databases/embedjs-qdrant/tsconfig.cjs.json" + } + } + } +} diff --git a/databases/embedjs-qdrant/src/index.ts b/databases/embedjs-qdrant/src/index.ts new file mode 100644 index 00000000..f910c940 --- /dev/null +++ b/databases/embedjs-qdrant/src/index.ts @@ -0,0 +1 @@ +export * from './qdrant-db.js'; diff --git a/src/vectorDb/qdrant-db.ts b/databases/embedjs-qdrant/src/qdrant-db.ts similarity index 90% rename from src/vectorDb/qdrant-db.ts rename to databases/embedjs-qdrant/src/qdrant-db.ts index bbf15051..cd98cf6b 100644 --- a/src/vectorDb/qdrant-db.ts +++ b/databases/embedjs-qdrant/src/qdrant-db.ts @@ -1,109 +1,107 @@ -import { QdrantClient } from '@qdrant/js-client-rest'; -import createDebugMessages from 'debug'; -import { v4 as uuid } from 'uuid'; - -import { BaseDb } from '../interfaces/base-db.js'; -import { ExtractChunkData, InsertChunkData } from '../global/types.js'; - -export class QdrantDb implements BaseDb { - private readonly debug = createDebugMessages('embedjs:vector:QdrantDb'); - private static readonly QDRANT_INSERT_CHUNK_SIZE = 500; - - private readonly client: QdrantClient; - private readonly clusterName: string; - - constructor({ apiKey, url, clusterName }: { apiKey: string; url: string; clusterName: string }) { - this.client = new QdrantClient({ apiKey, url }); - this.clusterName = clusterName; - } - - async init({ dimensions }: { dimensions: number }) { - const list = (await this.client.getCollections()).collections.map((c) => c.name); - if (list.indexOf(this.clusterName) > -1) return; - - await this.client.createCollection(this.clusterName, { - vectors: { - size: dimensions, - distance: 'Cosine', - }, - }); - - await this.client.createPayloadIndex(this.clusterName, { - wait: true, - field_name: 'uniqueLoaderId', - field_schema: 'text', - ordering: 'weak', - }); - } - - async insertChunks(chunks: InsertChunkData[]): Promise { - let processed = 0; - - for (let i = 0; i < chunks.length; i += QdrantDb.QDRANT_INSERT_CHUNK_SIZE) { - const chunkBatch = chunks.slice(i, i + QdrantDb.QDRANT_INSERT_CHUNK_SIZE); - - const upsertCommand = chunkBatch.map((chunk) => { - return { - id: uuid(), - vector: chunk.vector, - payload: { pageContent: chunk.pageContent, ...chunk.metadata }, - }; - }); - - this.debug(`Inserting QDrant batch`); - await this.client.upsert(this.clusterName, { - wait: true, - points: upsertCommand, - }); - processed += chunkBatch.length; - } - - return processed; - } - - async similaritySearch(query: number[], k: number): Promise { - const queryResponse = await this.client.search(this.clusterName, { - limit: k, - vector: query, - with_payload: true, - }); - - return queryResponse.map((match) => { - const pageContent = (match.payload).pageContent; - delete (match.payload).pageContent; - - return { - score: match.score, - pageContent, - metadata: match.payload, - }; - }); - } - - async getVectorCount(): Promise { - return (await this.client.getCollection(this.clusterName)).points_count; - } - - async deleteKeys(uniqueLoaderId: string): Promise { - await this.client.delete(this.clusterName, { - wait: true, - filter: { - must: [ - { - key: 'uniqueLoaderId', - match: { - value: uniqueLoaderId, - }, - }, - ], - }, - }); - return true; - } - - async reset(): Promise { - await this.client.delete(this.clusterName, { - filter: {}, - }); - } -} +import { QdrantClient } from '@qdrant/js-client-rest'; +import createDebugMessages from 'debug'; +import { v4 as uuid } from 'uuid'; +import { BaseDb, ExtractChunkData, InsertChunkData } from '@llm-tools/embedjs-interfaces'; + +export class QdrantDb implements BaseDb { + private readonly debug = createDebugMessages('embedjs:vector:QdrantDb'); + private static readonly QDRANT_INSERT_CHUNK_SIZE = 500; + + private readonly client: QdrantClient; + private readonly clusterName: string; + + constructor({ apiKey, url, clusterName }: { apiKey: string; url: string; clusterName: string }) { + this.client = new QdrantClient({ apiKey, url }); + this.clusterName = clusterName; + } + + async init({ dimensions }: { dimensions: number }) { + const list = (await this.client.getCollections()).collections.map((c) => c.name); + if (list.indexOf(this.clusterName) > -1) return; + + await this.client.createCollection(this.clusterName, { + vectors: { + size: dimensions, + distance: 'Cosine', + }, + }); + + await this.client.createPayloadIndex(this.clusterName, { + wait: true, + field_name: 'uniqueLoaderId', + field_schema: 'text', + ordering: 'weak', + }); + } + + async insertChunks(chunks: InsertChunkData[]): Promise { + let processed = 0; + + for (let i = 0; i < chunks.length; i += QdrantDb.QDRANT_INSERT_CHUNK_SIZE) { + const chunkBatch = chunks.slice(i, i + QdrantDb.QDRANT_INSERT_CHUNK_SIZE); + + const upsertCommand = chunkBatch.map((chunk) => { + return { + id: uuid(), + vector: chunk.vector, + payload: { pageContent: chunk.pageContent, ...chunk.metadata }, + }; + }); + + this.debug(`Inserting QDrant batch`); + await this.client.upsert(this.clusterName, { + wait: true, + points: upsertCommand, + }); + processed += chunkBatch.length; + } + + return processed; + } + + async similaritySearch(query: number[], k: number): Promise { + const queryResponse = await this.client.search(this.clusterName, { + limit: k, + vector: query, + with_payload: true, + }); + + return queryResponse.map((match) => { + const pageContent = match.payload.pageContent; + delete match.payload.pageContent; + + return { + score: match.score, + pageContent, + metadata: match.payload, + }; + }); + } + + async getVectorCount(): Promise { + return (await this.client.getCollection(this.clusterName)).points_count; + } + + async deleteKeys(uniqueLoaderId: string): Promise { + await this.client.delete(this.clusterName, { + wait: true, + filter: { + must: [ + { + key: 'uniqueLoaderId', + match: { + value: uniqueLoaderId, + }, + }, + ], + }, + }); + return true; + } + + async reset(): Promise { + await this.client.delete(this.clusterName, { + filter: {}, + }); + } +} diff --git a/databases/embedjs-qdrant/tsconfig.cjs.json b/databases/embedjs-qdrant/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-qdrant/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-qdrant/tsconfig.json b/databases/embedjs-qdrant/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-qdrant/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-qdrant/tsconfig.lib.json b/databases/embedjs-qdrant/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-qdrant/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-redis/CHANGELOG.md b/databases/embedjs-redis/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-redis/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-redis/README.md b/databases/embedjs-redis/README.md new file mode 100644 index 00000000..91f6f5a6 --- /dev/null +++ b/databases/embedjs-redis/README.md @@ -0,0 +1,8 @@ +# embedjs-redis + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-redis/eslint.config.js b/databases/embedjs-redis/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-redis/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-redis/package.json b/databases/embedjs-redis/package.json new file mode 100644 index 00000000..15495f5a --- /dev/null +++ b/databases/embedjs-redis/package.json @@ -0,0 +1,38 @@ +{ + "name": "@llm-tools/embedjs-redis", + "version": "0.0.1", + "description": "Add Redis support to embedjs", + "dependencies": { + "ioredis": "^5.4.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-redis/project.json b/databases/embedjs-redis/project.json new file mode 100644 index 00000000..13dd105a --- /dev/null +++ b/databases/embedjs-redis/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-redis", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-redis/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-redis", + "main": "databases/embedjs-redis/src/index.ts", + "tsConfig": "databases/embedjs-redis/tsconfig.lib.json", + "assets": ["databases/embedjs-redis/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-redis", + "main": "databases/embedjs-redis/src/index.ts", + "tsConfig": "databases/embedjs-redis/tsconfig.cjs.json" + } + } + } +} diff --git a/databases/embedjs-redis/src/index.ts b/databases/embedjs-redis/src/index.ts new file mode 100644 index 00000000..acaf8221 --- /dev/null +++ b/databases/embedjs-redis/src/index.ts @@ -0,0 +1 @@ +export * from './redis-cache.js'; diff --git a/src/cache/redis-cache.ts b/databases/embedjs-redis/src/redis-cache.ts similarity index 93% rename from src/cache/redis-cache.ts rename to databases/embedjs-redis/src/redis-cache.ts index b5dfa917..4637802d 100644 --- a/src/cache/redis-cache.ts +++ b/databases/embedjs-redis/src/redis-cache.ts @@ -1,54 +1,54 @@ -import { Redis, RedisOptions } from 'ioredis'; -import { BaseCache } from '../interfaces/base-cache.js'; - -export class RedisCache implements BaseCache { - private readonly options: RedisOptions; - private redis: Redis; - - constructor(options: RedisOptions) { - options.keyPrefix = options.keyPrefix ?? 'REDIS_CACHE'; - this.options = options; - } - - async init(): Promise { - this.redis = new Redis(this.options); - } - - async addLoader(loaderId: string, chunkCount: number): Promise { - await this.redis.set(loaderId, JSON.stringify({ chunkCount })); - } - - async getLoader(loaderId: string): Promise<{ chunkCount: number } | null> { - const result = await this.redis.get(loaderId); - - if (!result) return null; - return JSON.parse(result); - } - - async hasLoader(loaderId: string): Promise { - return !!(await this.redis.get(loaderId)); - } - - async loaderCustomSet>(loaderCombinedId: string, value: T): Promise { - await this.redis.set(loaderCombinedId, JSON.stringify(value)); - } - - async loaderCustomGet>(loaderCombinedId: string): Promise { - const result = await this.redis.get(loaderCombinedId); - - if (!result) return null; - return JSON.parse(result); - } - - async loaderCustomHas(loaderCombinedId: string): Promise { - return !!(await this.redis.get(loaderCombinedId)); - } - - async deleteLoader(loaderId: string): Promise { - await this.redis.del(loaderId); - } - - async loaderCustomDelete(loaderCombinedId: string): Promise { - await this.redis.del(loaderCombinedId); - } -} +import { BaseCache } from '@llm-tools/embedjs-interfaces'; +import { Redis, RedisOptions } from 'ioredis'; + +export class RedisCache implements BaseCache { + private readonly options: RedisOptions; + private redis: Redis; + + constructor(options: RedisOptions) { + options.keyPrefix = options.keyPrefix ?? 'REDIS_CACHE'; + this.options = options; + } + + async init(): Promise { + this.redis = new Redis(this.options); + } + + async addLoader(loaderId: string, chunkCount: number): Promise { + await this.redis.set(loaderId, JSON.stringify({ chunkCount })); + } + + async getLoader(loaderId: string): Promise<{ chunkCount: number } | null> { + const result = await this.redis.get(loaderId); + + if (!result) return null; + return JSON.parse(result); + } + + async hasLoader(loaderId: string): Promise { + return !!(await this.redis.get(loaderId)); + } + + async loaderCustomSet>(loaderCombinedId: string, value: T): Promise { + await this.redis.set(loaderCombinedId, JSON.stringify(value)); + } + + async loaderCustomGet>(loaderCombinedId: string): Promise { + const result = await this.redis.get(loaderCombinedId); + + if (!result) return null; + return JSON.parse(result); + } + + async loaderCustomHas(loaderCombinedId: string): Promise { + return !!(await this.redis.get(loaderCombinedId)); + } + + async deleteLoader(loaderId: string): Promise { + await this.redis.del(loaderId); + } + + async loaderCustomDelete(loaderCombinedId: string): Promise { + await this.redis.del(loaderCombinedId); + } +} diff --git a/databases/embedjs-redis/tsconfig.cjs.json b/databases/embedjs-redis/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-redis/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-redis/tsconfig.json b/databases/embedjs-redis/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-redis/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-redis/tsconfig.lib.json b/databases/embedjs-redis/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-redis/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/databases/embedjs-weaviate/CHANGELOG.md b/databases/embedjs-weaviate/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/databases/embedjs-weaviate/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/databases/embedjs-weaviate/README.md b/databases/embedjs-weaviate/README.md new file mode 100644 index 00000000..169b5ef7 --- /dev/null +++ b/databases/embedjs-weaviate/README.md @@ -0,0 +1,8 @@ +# embedjs-weaviate + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/databases/embedjs-weaviate/eslint.config.js b/databases/embedjs-weaviate/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/databases/embedjs-weaviate/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/databases/embedjs-weaviate/package.json b/databases/embedjs-weaviate/package.json new file mode 100644 index 00000000..7a7e4352 --- /dev/null +++ b/databases/embedjs-weaviate/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-weaviate", + "version": "0.0.1", + "description": "Add Weaviate support to embedjs", + "dependencies": { + "debug": "^4.3.7", + "compute-cosine-similarity": "^1.1.0", + "weaviate-ts-client": "^2.2.0", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/databases/embedjs-weaviate/project.json b/databases/embedjs-weaviate/project.json new file mode 100644 index 00000000..6dba88f4 --- /dev/null +++ b/databases/embedjs-weaviate/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-weaviate", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "databases/embedjs-weaviate/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-weaviate", + "main": "databases/embedjs-weaviate/src/index.ts", + "tsConfig": "databases/embedjs-weaviate/tsconfig.lib.json", + "assets": ["databases/embedjs-weaviate/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-weaviate", + "main": "databases/embedjs-weaviate/src/index.ts", + "tsConfig": "databases/embedjs-weaviate/tsconfig.cjs.json" + } + } + } +} diff --git a/databases/embedjs-weaviate/src/index.ts b/databases/embedjs-weaviate/src/index.ts new file mode 100644 index 00000000..63590c4e --- /dev/null +++ b/databases/embedjs-weaviate/src/index.ts @@ -0,0 +1 @@ +export * from './weaviate-db.js'; diff --git a/src/vectorDb/weaviate-db.ts b/databases/embedjs-weaviate/src/weaviate-db.ts similarity index 94% rename from src/vectorDb/weaviate-db.ts rename to databases/embedjs-weaviate/src/weaviate-db.ts index a00807d7..e626d19f 100644 --- a/src/vectorDb/weaviate-db.ts +++ b/databases/embedjs-weaviate/src/weaviate-db.ts @@ -1,156 +1,155 @@ -import createDebugMessages from 'debug'; -import weaviate, { WeaviateClient, ApiKey, generateUuid5 } from 'weaviate-ts-client'; -import similarity from 'compute-cosine-similarity'; - -import { toTitleCase } from '../util/strings.js'; -import { BaseDb } from '../interfaces/base-db.js'; -import { ExtractChunkData, InsertChunkData } from '../global/types.js'; - -export class WeaviateDb implements BaseDb { - private readonly debug = createDebugMessages('embedjs:vector:WeaviateDb'); - private static readonly WEAVIATE_INSERT_CHUNK_SIZE = 500; - - private dimensions: number; - private readonly className: string; - private readonly client: WeaviateClient; - - constructor({ - host, - apiKey, - className, - scheme = 'https', - }: { - host: string; - apiKey: string; - className: string; - scheme: 'http' | 'https'; - }) { - // @ts-ignore - this.client = weaviate.client({ scheme, host, apiKey: new ApiKey(apiKey) }); - this.className = toTitleCase(className); // Weaviate translates the className during create to title case and errors at other places - } - - async init({ dimensions }: { dimensions: number }) { - this.dimensions = dimensions; - const { classes: list } = await this.client.schema.getter().do(); - if (list.map((l) => l.class).indexOf(this.className) > -1) return; - - await this.client.schema - .classCreator() - .withClass({ - class: this.className, - properties: [ - { - name: 'realId', - dataType: ['text'], - }, - { - name: 'pageContent', - dataType: ['text'], - }, - { - name: 'uniqueLoaderId', - dataType: ['text'], - }, - { - name: 'source', - dataType: ['text'], - }, - ], - vectorIndexConfig: { - distance: 'cosine', - }, - }) - .do(); - } - - async insertChunks(chunks: InsertChunkData[]): Promise { - let processed = 0; - const batcher = this.client.batch.objectsBatcher(); - - for (let i = 0; i < chunks.length; i += WeaviateDb.WEAVIATE_INSERT_CHUNK_SIZE) { - const chunkBatch = chunks.slice(i, i + WeaviateDb.WEAVIATE_INSERT_CHUNK_SIZE); - - this.debug(`Inserting Weaviate batch`); - const result = await batcher - .withObjects( - ...chunkBatch.map((chunk) => { - const chunkId = chunk.metadata.id; - delete chunk.metadata.id; - - return { - class: this.className, - id: generateUuid5(chunkId), - vector: chunk.vector, - properties: { - uniqueLoaderId: chunk.metadata.uniqueLoaderId, - pageContent: chunk.pageContent, - ...chunk.metadata, - }, - }; - }), - ) - .do(); - - this.debug( - 'Weaviate errors', - result.map((r) => r.result?.errors?.error?.[0].message ?? 'NONE'), - ); - processed += chunkBatch.length; - } - - return processed; - } - - async similaritySearch(query: number[], k: number): Promise { - const queryResponse = await this.client.graphql - .get() - .withClassName(this.className) - .withNearVector({ vector: query }) - .withFields('uniqueLoaderId pageContent source _additional { vector }') - .withLimit(k) - .do(); - - return queryResponse.data.Get[this.className].map((match) => { - const pageContent = match.pageContent; - delete match.pageContent; - - const vector = match._additional.vector; - delete match._additional; - - return { - score: similarity(query, vector), - pageContent, - metadata: match, - }; - }); - } - - async getVectorCount(): Promise { - const queryResponse = await this.client.graphql - .aggregate() - .withClassName(this.className) - .withFields('meta { count }') - .do(); - - return queryResponse.data.Aggregate[this.className][0].meta.count; - } - - async deleteKeys(uniqueLoaderId: string): Promise { - await this.client.batch - .objectsBatchDeleter() - .withClassName(this.className) - .withWhere({ - path: ['uniqueLoaderId'], - operator: 'ContainsAny', - valueTextArray: [uniqueLoaderId], - }) - .do(); - return true; - } - - async reset(): Promise { - await this.client.schema.classDeleter().withClassName(this.className).do(); - await this.init({ dimensions: this.dimensions }); - } -} +import createDebugMessages from 'debug'; +import weaviate, { WeaviateClient, ApiKey, generateUuid5 } from 'weaviate-ts-client'; +import similarity from 'compute-cosine-similarity'; + +import { BaseDb, ExtractChunkData, InsertChunkData } from '@llm-tools/embedjs-interfaces'; +import { toTitleCase } from '@llm-tools/embedjs-utils'; + +export class WeaviateDb implements BaseDb { + private readonly debug = createDebugMessages('embedjs:vector:WeaviateDb'); + private static readonly WEAVIATE_INSERT_CHUNK_SIZE = 500; + + private dimensions: number; + private readonly className: string; + private readonly client: WeaviateClient; + + constructor({ + host, + apiKey, + className, + scheme = 'https', + }: { + host: string; + apiKey: string; + className: string; + scheme: 'http' | 'https'; + }) { + // @ts-ignore + this.client = weaviate.client({ scheme, host, apiKey: new ApiKey(apiKey) }); + this.className = toTitleCase(className); // Weaviate translates the className during create to title case and errors at other places + } + + async init({ dimensions }: { dimensions: number }) { + this.dimensions = dimensions; + const { classes: list } = await this.client.schema.getter().do(); + if (list.map((l) => l.class).indexOf(this.className) > -1) return; + + await this.client.schema + .classCreator() + .withClass({ + class: this.className, + properties: [ + { + name: 'realId', + dataType: ['text'], + }, + { + name: 'pageContent', + dataType: ['text'], + }, + { + name: 'uniqueLoaderId', + dataType: ['text'], + }, + { + name: 'source', + dataType: ['text'], + }, + ], + vectorIndexConfig: { + distance: 'cosine', + }, + }) + .do(); + } + + async insertChunks(chunks: InsertChunkData[]): Promise { + let processed = 0; + const batcher = this.client.batch.objectsBatcher(); + + for (let i = 0; i < chunks.length; i += WeaviateDb.WEAVIATE_INSERT_CHUNK_SIZE) { + const chunkBatch = chunks.slice(i, i + WeaviateDb.WEAVIATE_INSERT_CHUNK_SIZE); + + this.debug(`Inserting Weaviate batch`); + const result = await batcher + .withObjects( + ...chunkBatch.map((chunk) => { + const chunkId = chunk.metadata.id; + delete chunk.metadata.id; + + return { + class: this.className, + id: generateUuid5(chunkId), + vector: chunk.vector, + properties: { + uniqueLoaderId: chunk.metadata.uniqueLoaderId, + pageContent: chunk.pageContent, + ...chunk.metadata, + }, + }; + }), + ) + .do(); + + this.debug( + 'Weaviate errors', + result.map((r) => r.result?.errors?.error?.[0].message ?? 'NONE'), + ); + processed += chunkBatch.length; + } + + return processed; + } + + async similaritySearch(query: number[], k: number): Promise { + const queryResponse = await this.client.graphql + .get() + .withClassName(this.className) + .withNearVector({ vector: query }) + .withFields('uniqueLoaderId pageContent source _additional { vector }') + .withLimit(k) + .do(); + + return queryResponse.data.Get[this.className].map((match) => { + const pageContent = match.pageContent; + delete match.pageContent; + + const vector = match._additional.vector; + delete match._additional; + + return { + score: similarity(query, vector), + pageContent, + metadata: match, + }; + }); + } + + async getVectorCount(): Promise { + const queryResponse = await this.client.graphql + .aggregate() + .withClassName(this.className) + .withFields('meta { count }') + .do(); + + return queryResponse.data.Aggregate[this.className][0].meta.count; + } + + async deleteKeys(uniqueLoaderId: string): Promise { + await this.client.batch + .objectsBatchDeleter() + .withClassName(this.className) + .withWhere({ + path: ['uniqueLoaderId'], + operator: 'ContainsAny', + valueTextArray: [uniqueLoaderId], + }) + .do(); + return true; + } + + async reset(): Promise { + await this.client.schema.classDeleter().withClassName(this.className).do(); + await this.init({ dimensions: this.dimensions }); + } +} diff --git a/databases/embedjs-weaviate/tsconfig.cjs.json b/databases/embedjs-weaviate/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/databases/embedjs-weaviate/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/databases/embedjs-weaviate/tsconfig.json b/databases/embedjs-weaviate/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/databases/embedjs-weaviate/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/databases/embedjs-weaviate/tsconfig.lib.json b/databases/embedjs-weaviate/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/databases/embedjs-weaviate/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..2dee5e7a --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,50 @@ +import defaults from '@eslint/js'; +import { FlatCompat } from '@eslint/eslintrc'; +import nxEslintPlugin from '@nx/eslint-plugin'; + +const compat = new FlatCompat({ + recommendedConfig: defaults.configs.recommended, +}); + +export default [ + { plugins: { '@nx': nxEslintPlugin } }, + { + files: ['**/*.ts', '**/*.js'], + rules: { + '@typescript-eslint/ban-ts-comment': 'off', + }, + }, + { + files: ['**/*.ts', '**/*.js'], + ignores: ['**/eslint.config.js'], + rules: { + '@nx/enforce-module-boundaries': [ + 'error', + { + allow: [], + enforceBuildableLibDependency: true, + depConstraints: [ + { + sourceTag: '*', + onlyDependOnLibsWithTags: ['*'], + }, + ], + }, + ], + }, + }, + ...compat.config({ extends: ['plugin:@nx/typescript'] }).map((config) => ({ + ...config, + files: ['**/*.ts'], + rules: { + ...config.rules, + }, + })), + ...compat.config({ extends: ['plugin:@nx/javascript'] }).map((config) => ({ + ...config, + files: ['**/*.js'], + rules: { + ...config.rules, + }, + })), +]; diff --git a/examples/chroma/example.env b/examples/chroma/example.env deleted file mode 100644 index 9847a1df..00000000 --- a/examples/chroma/example.env +++ /dev/null @@ -1 +0,0 @@ -OPENAI_API_KEY= \ No newline at end of file diff --git a/examples/chroma/package-lock.json b/examples/chroma/package-lock.json deleted file mode 100644 index 78ba95f8..00000000 --- a/examples/chroma/package-lock.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "name": "chroma", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "chroma", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.11.24" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - } - } -} diff --git a/examples/chroma/package.json b/examples/chroma/package.json deleted file mode 100644 index d43af39d..00000000 --- a/examples/chroma/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "chroma", - "version": "1.0.0", - "type": "module", - "private": true, - "scripts": { - "start": "tsc && node dist/examples/chroma/src/index.js" - }, - "author": "", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.12.11" - } -} diff --git a/examples/chroma/src/index.ts b/examples/chroma/src/index.ts deleted file mode 100644 index 3b71c6eb..00000000 --- a/examples/chroma/src/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import 'dotenv/config'; - -import { RAGApplicationBuilder, WebLoader, YoutubeLoader, SitemapLoader } from '../../../src/index.js'; -import { ChromaDb } from '../../../src/vectorDb/chroma-db.js'; - -const llmApplication = await new RAGApplicationBuilder() - .setSearchResultCount(30) - .setVectorDb(new ChromaDb({ url: 'http://localhost:8000' })) - .build(); - -await llmApplication.addLoader(new YoutubeLoader({ videoIdOrUrl: 'pQiT2U5E9tI' })); -await llmApplication.addLoader(new SitemapLoader({ url: 'https://tesla-info.com/sitemap.xml' })); -await llmApplication.addLoader(new WebLoader({ urlOrContent: 'https://en.wikipedia.org/wiki/Tesla,_Inc.' })); - -console.log((await llmApplication.query('Who founded Tesla?')).result); -// The founder of Tesla is Elon Musk. He co-founded the company with JB Straubel, Martin Eberhard, Marc Tarpenning, and Ian Wright in 2003. Elon Musk is also the CEO of SpaceX and Neuralink. - -console.log((await llmApplication.query('Tell me about the history of Tesla?')).result); -// Tesla, Inc. was founded in 2003 by Martin Eberhard and Marc Tarpenning with the goal of creating electric vehicles that could compete with traditional gasoline-powered cars. Elon Musk led the company's Series A financing round in February 2004, and has since played a significant role in the company's development. -// The company's first vehicle, the Tesla Roadster, was released in 2008. It was the first highway-legal all-electric vehicle to use lithium-ion battery cells, and could travel 245 miles (394 km) on a single charge. The Roadster was followed by the Model S, a full-sized luxury sedan, in 2012. The Model S was the world's best-selling plug-in electric vehicle in 2015 and 2016. -// In 2015, Tesla released the Model X, a mid-size luxury SUV, and in 2017, it began production of the Model 3, a four-door sedan aimed at the mass market. The Model 3 became the world's best-selling electric vehicle in 2018. Tesla also produces the Tesla Semi, a Class 8 semi-truck, and the Tesla Cybertruck, a full - -console.log((await llmApplication.query('What cars does Tesla have')).result); -// Tesla currently offers six vehicle models: Model S, Model X, Model 3, Model Y, Tesla Semi, and Cybertruck. The first-generation Tesla Roadster is no longer sold, but Tesla has plans for a second-generation Roadster. Tesla also has joint projects with Mercedes, Toyota, and Smart. diff --git a/examples/chroma/tsconfig.json b/examples/chroma/tsconfig.json deleted file mode 100644 index 8e3cb4dd..00000000 --- a/examples/chroma/tsconfig.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "compilerOptions": { - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, - "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "nodenext" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist" /* Specify an output folder for all emitted files. */, - "removeComments": true /* Disable emitting comments. */, - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": false /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "types": ["node"] - }, - "include": ["src/**/*", "../../src/**/*"] -} diff --git a/examples/cohere/example.env b/examples/cohere/example.env deleted file mode 100644 index 710fa2fe..00000000 --- a/examples/cohere/example.env +++ /dev/null @@ -1,2 +0,0 @@ -COHERE_API_KEY= -HUGGINGFACEHUB_API_KEY= \ No newline at end of file diff --git a/examples/cohere/package-lock.json b/examples/cohere/package-lock.json deleted file mode 100644 index aee6e5cd..00000000 --- a/examples/cohere/package-lock.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "name": "cohere", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "cohere", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.11.24" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - } - } -} diff --git a/examples/cohere/package.json b/examples/cohere/package.json deleted file mode 100644 index 81e28427..00000000 --- a/examples/cohere/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "cohere", - "version": "1.0.0", - "type": "module", - "private": true, - "scripts": { - "start": "tsc && node dist/examples/cohere/src/index.js" - }, - "author": "", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.12.11" - } -} diff --git a/examples/cohere/src/index.ts b/examples/cohere/src/index.ts deleted file mode 100644 index 4b7395af..00000000 --- a/examples/cohere/src/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import 'dotenv/config'; - -import { RAGApplicationBuilder, WebLoader, HuggingFace, SitemapLoader, YoutubeLoader } from '../../../src/index.js'; -import { CohereEmbeddings } from '../../../src/embeddings/cohere-embeddings.js'; -import { HNSWDb } from '../../../src/vectorDb/hnswlib-db.js'; - -const llmApplication = await new RAGApplicationBuilder() - .setEmbeddingModel(new CohereEmbeddings()) - .setModel(new HuggingFace({ modelName: 'mistralai/Mixtral-8x7B-Instruct-v0.1' })) - .setVectorDb(new HNSWDb()) - .build(); - -await llmApplication.addLoader(new YoutubeLoader({ videoIdOrUrl: 'pQiT2U5E9tI' })); -await llmApplication.addLoader(new SitemapLoader({ url: 'https://tesla-info.com/sitemap.xml' })); -await llmApplication.addLoader(new WebLoader({ urlOrContent: 'https://en.wikipedia.org/wiki/Tesla,_Inc.' })); - -console.log((await llmApplication.query('Who founded Tesla?')).result); -// The founder of Tesla is Elon Musk. He co-founded the company with JB Straubel, Martin Eberhard, Marc Tarpenning, and Ian Wright in 2003. Elon Musk is also the CEO of SpaceX and Neuralink. - -console.log((await llmApplication.query('Tell me about the history of Tesla?')).result); -// Tesla, Inc. was founded in 2003 by Martin Eberhard and Marc Tarpenning with the goal of creating electric vehicles that could compete with traditional gasoline-powered cars. Elon Musk led the company's Series A financing round in February 2004, and has since played a significant role in the company's development. -// The company's first vehicle, the Tesla Roadster, was released in 2008. It was the first highway-legal all-electric vehicle to use lithium-ion battery cells, and could travel 245 miles (394 km) on a single charge. The Roadster was followed by the Model S, a full-sized luxury sedan, in 2012. The Model S was the world's best-selling plug-in electric vehicle in 2015 and 2016. -// In 2015, Tesla released the Model X, a mid-size luxury SUV, and in 2017, it began production of the Model 3, a four-door sedan aimed at the mass market. The Model 3 became the world's best-selling electric vehicle in 2018. Tesla also produces the Tesla Semi, a Class 8 semi-truck, and the Tesla Cybertruck, a full - -console.log((await llmApplication.query('What cars does Tesla have')).result); -// Tesla currently offers six vehicle models: Model S, Model X, Model 3, Model Y, Tesla Semi, and Cybertruck. The first-generation Tesla Roadster is no longer sold, but Tesla has plans for a second-generation Roadster. Tesla also has joint projects with Mercedes, Toyota, and Smart. diff --git a/examples/cohere/tsconfig.json b/examples/cohere/tsconfig.json deleted file mode 100644 index 8e3cb4dd..00000000 --- a/examples/cohere/tsconfig.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "compilerOptions": { - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, - "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "nodenext" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist" /* Specify an output folder for all emitted files. */, - "removeComments": true /* Disable emitting comments. */, - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": false /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "types": ["node"] - }, - "include": ["src/**/*", "../../src/**/*"] -} diff --git a/examples/ollama/README.md b/examples/ollama/README.md deleted file mode 100644 index 978f0dab..00000000 --- a/examples/ollama/README.md +++ /dev/null @@ -1,27 +0,0 @@ -## Requirements - -This example consists of a Node.js application that uses vector embeddings with `embedJs` RAG library to store text from various sources to database, retrieve them with similarity search and interpret with Ollama LLM. - -Main motivation is on the open-source and local running of the RAG application. - -### Install NodeJS dependencies - -```bash -npm install -``` - -### Tesla example - -You have to had installed ollama ([https://ollama.com/](https://ollama.com/)) and run at least once: - -```bash -ollama run llama3 -``` - -Run the "Tesla text" retrieval simple example with default parameters: - -```bash -npm start -- llama3 -``` - -That will output similarity search results interpreted by local Ollama llama3 LLM after the content has been first retrieved from internet and indexed to the in-memory vector database. diff --git a/examples/ollama/package-lock.json b/examples/ollama/package-lock.json deleted file mode 100644 index 13c3468d..00000000 --- a/examples/ollama/package-lock.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "name": "ollama", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ollama", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.11.24" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/node": { - "version": "20.12.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", - "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - } - } -} diff --git a/examples/ollama/package.json b/examples/ollama/package.json deleted file mode 100644 index 78d87710..00000000 --- a/examples/ollama/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "ollama", - "version": "1.0.0", - "type": "module", - "private": true, - "scripts": { - "start": "tsc && node dist/examples/ollama/src/index.js" - }, - "author": "", - "license": "ISC", - "dependencies": { - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.12.11" - } -} diff --git a/examples/ollama/src/index.ts b/examples/ollama/src/index.ts deleted file mode 100644 index 58d297d2..00000000 --- a/examples/ollama/src/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { - RAGApplicationBuilder, - WebLoader, - YoutubeLoader, - SitemapLoader, - Ollama, - AdaEmbeddings, -} from '../../../src/index.js'; -import { HNSWDb } from '../../../src/vectorDb/hnswlib-db.js'; - -const modelName = process.argv[2] || 'llama3'; - -const llmApplication = await new RAGApplicationBuilder() - .setEmbeddingModel(new AdaEmbeddings()) - .setModel( - new Ollama({ - modelName: modelName, - baseUrl: 'http://localhost:11434', - }), - ) - .setSearchResultCount(30) - .setVectorDb(new HNSWDb()) - .build(); - -await llmApplication.addLoader(new YoutubeLoader({ videoIdOrUrl: 'pQiT2U5E9tI' })); -await llmApplication.addLoader(new SitemapLoader({ url: 'https://tesla-info.com/sitemap.xml' })); -await llmApplication.addLoader(new WebLoader({ urlOrContent: 'https://en.wikipedia.org/wiki/Tesla,_Inc.' })); - -console.log((await llmApplication.query('Who founded Tesla?')).result); -// The founder of Tesla is Elon Musk. He co-founded the company with JB Straubel, Martin Eberhard, Marc Tarpenning, and Ian Wright in 2003. Elon Musk is also the CEO of SpaceX and Neuralink. - -console.log((await llmApplication.query('Tell me about the history of Tesla?')).result); -// Tesla, Inc. was founded in 2003 by Martin Eberhard and Marc Tarpenning with the goal of creating electric vehicles that could compete with traditional gasoline-powered cars. Elon Musk led the company's Series A financing round in February 2004, and has since played a significant role in the company's development. -// The company's first vehicle, the Tesla Roadster, was released in 2008. It was the first highway-legal all-electric vehicle to use lithium-ion battery cells, and could travel 245 miles (394 km) on a single charge. The Roadster was followed by the Model S, a full-sized luxury sedan, in 2012. The Model S was the world's best-selling plug-in electric vehicle in 2015 and 2016. -// In 2015, Tesla released the Model X, a mid-size luxury SUV, and in 2017, it began production of the Model 3, a four-door sedan aimed at the mass market. The Model 3 became the world's best-selling electric vehicle in 2018. Tesla also produces the Tesla Semi, a Class 8 semi-truck, and the Tesla Cybertruck, a full - -console.log((await llmApplication.query('What cars does Tesla have')).result); -// Tesla currently offers six vehicle models: Model S, Model X, Model 3, Model Y, Tesla Semi, and Cybertruck. The first-generation Tesla Roadster is no longer sold, but Tesla has plans for a second-generation Roadster. Tesla also has joint projects with Mercedes, Toyota, and Smart. diff --git a/examples/ollama/tsconfig.json b/examples/ollama/tsconfig.json deleted file mode 100644 index 465334d4..00000000 --- a/examples/ollama/tsconfig.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "compilerOptions": { - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, - "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "nodenext" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist" /* Specify an output folder for all emitted files. */, - "removeComments": true /* Disable emitting comments. */, - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": false /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "types": ["node"] - }, - "include": ["src/**/*", "../../src/**/*"] - } - \ No newline at end of file diff --git a/examples/pinecone/example.env b/examples/pinecone/example.env deleted file mode 100644 index 55b00ef5..00000000 --- a/examples/pinecone/example.env +++ /dev/null @@ -1,2 +0,0 @@ -OPENAI_API_KEY= -PINECONE_API_KEY= \ No newline at end of file diff --git a/examples/pinecone/package-lock.json b/examples/pinecone/package-lock.json deleted file mode 100644 index 4f6864c9..00000000 --- a/examples/pinecone/package-lock.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "name": "pinecone", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "pinecone", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.11.24" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - } - } -} diff --git a/examples/pinecone/package.json b/examples/pinecone/package.json deleted file mode 100644 index 0ca43a90..00000000 --- a/examples/pinecone/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "pinecone", - "version": "1.0.0", - "type": "module", - "private": true, - "scripts": { - "start": "tsc && node dist/examples/pinecone/src/index.js" - }, - "author": "", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.12.11" - } -} diff --git a/examples/pinecone/src/index.ts b/examples/pinecone/src/index.ts deleted file mode 100644 index 2b437120..00000000 --- a/examples/pinecone/src/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import 'dotenv/config'; -import * as path from 'node:path'; -import { fileURLToPath } from 'url'; - -import { RAGApplicationBuilder, YoutubeLoader, SitemapLoader, WebLoader } from '../../../src/index.js'; -import { PineconeDb } from '../../../src/vectorDb/pinecone-db.js'; -import { LmdbCache } from '../../../src/cache/lmdb-cache.js'; - -const __filename = fileURLToPath(import.meta.url); -const llmApplication = await new RAGApplicationBuilder() - .setCache(new LmdbCache({ path: path.resolve(path.dirname(__filename), '../../../cache') })) - .setVectorDb( - new PineconeDb({ - projectName: 'test', - namespace: 'dev', - indexSpec: { - pod: { - podType: 'p1.x1', - environment: 'us-east1-gcp', - }, - }, - }), - ) - .build(); - -await llmApplication.addLoader(new YoutubeLoader({ videoIdOrUrl: 'pQiT2U5E9tI' })); -await llmApplication.addLoader(new SitemapLoader({ url: 'https://tesla-info.com/sitemap.xml' })); -await llmApplication.addLoader(new WebLoader({ urlOrContent: 'https://en.wikipedia.org/wiki/Tesla,_Inc.' })); - -console.log((await llmApplication.query('Who founded Tesla?')).result); -// The founder of Tesla is Elon Musk. He co-founded the company with JB Straubel, Martin Eberhard, Marc Tarpenning, and Ian Wright in 2003. Elon Musk is also the CEO of SpaceX and Neuralink. - -console.log((await llmApplication.query('Tell me about the history of Tesla?')).result); -// Tesla, Inc. was founded in 2003 by Martin Eberhard and Marc Tarpenning with the goal of creating electric vehicles that could compete with traditional gasoline-powered cars. Elon Musk led the company's Series A financing round in February 2004, and has since played a significant role in the company's development. -// The company's first vehicle, the Tesla Roadster, was released in 2008. It was the first highway-legal all-electric vehicle to use lithium-ion battery cells, and could travel 245 miles (394 km) on a single charge. The Roadster was followed by the Model S, a full-sized luxury sedan, in 2012. The Model S was the world's best-selling plug-in electric vehicle in 2015 and 2016. -// In 2015, Tesla released the Model X, a mid-size luxury SUV, and in 2017, it began production of the Model 3, a four-door sedan aimed at the mass market. The Model 3 became the world's best-selling electric vehicle in 2018. Tesla also produces the Tesla Semi, a Class 8 semi-truck, and the Tesla Cybertruck, a full - -console.log((await llmApplication.query('What cars does Tesla have')).result); -// Tesla currently offers six vehicle models: Model S, Model X, Model 3, Model Y, Tesla Semi, and Cybertruck. The first-generation Tesla Roadster is no longer sold, but Tesla has plans for a second-generation Roadster. Tesla also has joint projects with Mercedes, Toyota, and Smart. diff --git a/examples/pinecone/tsconfig.json b/examples/pinecone/tsconfig.json deleted file mode 100644 index 8e3cb4dd..00000000 --- a/examples/pinecone/tsconfig.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "compilerOptions": { - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, - "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "nodenext" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist" /* Specify an output folder for all emitted files. */, - "removeComments": true /* Disable emitting comments. */, - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": false /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "types": ["node"] - }, - "include": ["src/**/*", "../../src/**/*"] -} diff --git a/examples/simple/example.env b/examples/simple/example.env deleted file mode 100644 index 9847a1df..00000000 --- a/examples/simple/example.env +++ /dev/null @@ -1 +0,0 @@ -OPENAI_API_KEY= \ No newline at end of file diff --git a/examples/simple/package-lock.json b/examples/simple/package-lock.json deleted file mode 100644 index d3a277e0..00000000 --- a/examples/simple/package-lock.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "name": "simple", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "simple", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.12.11" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/node": { - "version": "20.12.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", - "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - } - } -} diff --git a/examples/simple/package.json b/examples/simple/package.json deleted file mode 100644 index d525a10b..00000000 --- a/examples/simple/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "simple", - "version": "1.0.0", - "type": "module", - "private": true, - "scripts": { - "start": "tsc && DEBUG=embedjs:* node dist/examples/simple/src/index.js" - }, - "author": "", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.12.11" - } -} diff --git a/examples/simple/src/index.ts b/examples/simple/src/index.ts deleted file mode 100644 index 7951b22f..00000000 --- a/examples/simple/src/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -import 'dotenv/config'; - -import { RAGApplicationBuilder, WebLoader, YoutubeLoader, SitemapLoader } from '../../../src/index.js'; -import { HNSWDb } from '../../../src/vectorDb/hnswlib-db.js'; - -const llmApplication = await new RAGApplicationBuilder().setSearchResultCount(30).setVectorDb(new HNSWDb()).build(); - -await llmApplication.addLoader(new YoutubeLoader({ videoIdOrUrl: 'pQiT2U5E9tI' })); -await llmApplication.addLoader(new SitemapLoader({ url: 'https://tesla-info.com/sitemap.xml' })); -await llmApplication.addLoader(new WebLoader({ urlOrContent: 'https://en.wikipedia.org/wiki/Tesla,_Inc.' })); - -console.log((await llmApplication.query('Who founded Tesla?')).result); -// The founder of Tesla is Elon Musk. He co-founded the company with JB Straubel, Martin Eberhard, Marc Tarpenning, and Ian Wright in 2003. Elon Musk is also the CEO of SpaceX and Neuralink. - -console.log((await llmApplication.query('Tell me about the history of Tesla?')).result); -// Tesla, Inc. was founded in 2003 by Martin Eberhard and Marc Tarpenning with the goal of creating electric vehicles that could compete with traditional gasoline-powered cars. Elon Musk led the company's Series A financing round in February 2004, and has since played a significant role in the company's development. -// The company's first vehicle, the Tesla Roadster, was released in 2008. It was the first highway-legal all-electric vehicle to use lithium-ion battery cells, and could travel 245 miles (394 km) on a single charge. The Roadster was followed by the Model S, a full-sized luxury sedan, in 2012. The Model S was the world's best-selling plug-in electric vehicle in 2015 and 2016. -// In 2015, Tesla released the Model X, a mid-size luxury SUV, and in 2017, it began production of the Model 3, a four-door sedan aimed at the mass market. The Model 3 became the world's best-selling electric vehicle in 2018. Tesla also produces the Tesla Semi, a Class 8 semi-truck, and the Tesla Cybertruck, a full - -console.log((await llmApplication.query('What cars does Tesla have')).result); -// Tesla currently offers six vehicle models: Model S, Model X, Model 3, Model Y, Tesla Semi, and Cybertruck. The first-generation Tesla Roadster is no longer sold, but Tesla has plans for a second-generation Roadster. Tesla also has joint projects with Mercedes, Toyota, and Smart. diff --git a/examples/simple/tsconfig.json b/examples/simple/tsconfig.json deleted file mode 100644 index 8e3cb4dd..00000000 --- a/examples/simple/tsconfig.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "compilerOptions": { - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, - "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "nodenext" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist" /* Specify an output folder for all emitted files. */, - "removeComments": true /* Disable emitting comments. */, - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": false /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "types": ["node"] - }, - "include": ["src/**/*", "../../src/**/*"] -} diff --git a/examples/vertexai/README.md b/examples/vertexai/README.md deleted file mode 100644 index d621fc31..00000000 --- a/examples/vertexai/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# Example for Gemini and VertexAI - -Example for using Gemini LLM and Embeddings with `textembedding-gecko` on VertexAI. - -``` -const llmApplication = await new RAGApplicationBuilder() - .setModel(new VertexAI({ modelName: 'gemini-1.5-pro-preview-0409'})) - .setEmbeddingModel(new GeckoEmbedding()) -``` - -List of Gemini LLM models: https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models. - - -## VertexAI on Google Cloud Platform - -- Playground: https://console.cloud.google.com/vertex-ai/generative/multimodal/ - -- Gemini Documentation: https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/overview - -- VertexAI Pricing: https://cloud.google.com/vertex-ai/generative-ai/pricing - -### Setup VertexAI - -#### 1. Setup GCP Project, gcloud CLI and Vertex AI -Instructions: (https://cloud.google.com/vertex-ai/docs/start/cloud-environment) - -#### 2. (Optional) [Create a new Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts) with least permissive role. -_You can use role [Vertex AI User](https://cloud.google.com/vertex-ai/docs/general/access-control#aiplatform.user) `roles/aiplatform.user`._ - -#### 3. Authentication - - Documentation: [VertexAI Authentication](https://cloud.google.com/vertex-ai/docs/authentication) - -Option 1) `gcloud CLI` Application Default Login. **Prefered for local development.** - -Documentation: https://cloud.google.com/docs/authentication/application-default-credentials#personal - - You should be logged in an account, which have permissions for the project. - ``` - gcloud auth application-default login - ``` - -Option 2) On Google Cloud Platform: using a service account which have permissions to the project and VertexAI - -Documentation: https://cloud.google.com/vertex-ai/docs/authentication#on-gcp - -Option 3) Environment variable with path to JSON key for Service Account - -Documentation: https://cloud.google.com/docs/authentication/application-default-credentials#GAC - -- Download the Service Account's key after you have created it in Step 2. - -- Setup `GOOGLE_APPLICATION_CREDENTIALS` .env variable with the path to the downloaded JSON credentials: -``` -GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json -``` - -NOTE: Using service account with JSON key can impose security risk if not stored correctly. Please revise [Best Practices](https://cloud.google.com/iam/docs/best-practices-for-managing-service-account-keys). - diff --git a/examples/vertexai/example.env b/examples/vertexai/example.env deleted file mode 100644 index 85172b57..00000000 --- a/examples/vertexai/example.env +++ /dev/null @@ -1,8 +0,0 @@ -# Authenticate VertexAI on Google Cloud Platform -# 1.Provide Application Default Credentials -# https://cloud.google.com/docs/authentication/provide-credentials-adc -# 2. Authenticate with Service Account JSON file by setting GOOGLE_APPLICATION_CREDENTIALS -# https://cloud.google.com/docs/authentication/application-default-credentials#GAC -# -# Replace /path/to/your/credentials.json with the path to your GCP credentials file -#GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/credentials.json diff --git a/examples/vertexai/package-lock.json b/examples/vertexai/package-lock.json deleted file mode 100644 index 537b96fb..00000000 --- a/examples/vertexai/package-lock.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "name": "simple", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "simple", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.11.24" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - } - } -} diff --git a/examples/vertexai/package.json b/examples/vertexai/package.json deleted file mode 100644 index 41eed401..00000000 --- a/examples/vertexai/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "simple", - "version": "1.0.0", - "type": "module", - "private": true, - "scripts": { - "start": "tsc && node dist/examples/vertexai/src/index.js" - }, - "author": "", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.12.11" - } -} diff --git a/examples/vertexai/src/index.ts b/examples/vertexai/src/index.ts deleted file mode 100644 index 3355803f..00000000 --- a/examples/vertexai/src/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import 'dotenv/config'; - -import { RAGApplicationBuilder, WebLoader, YoutubeLoader, SitemapLoader } from '../../../src/index.js'; -import { HNSWDb } from '../../../src/vectorDb/hnswlib-db.js'; -import { VertexAI, GeckoEmbedding } from '../../../src/index.js'; - -const llmApplication = await new RAGApplicationBuilder() - .setModel(new VertexAI({ modelName: 'gemini-1.5-pro-preview-0409' })) - .setEmbeddingModel(new GeckoEmbedding()) - .setSearchResultCount(30) - .setVectorDb(new HNSWDb()) - .build(); - -await llmApplication.addLoader(new YoutubeLoader({ videoIdOrUrl: 'pQiT2U5E9tI' })); -await llmApplication.addLoader(new SitemapLoader({ url: 'https://tesla-info.com/sitemap.xml' })); -await llmApplication.addLoader(new WebLoader({ urlOrContent: 'https://en.wikipedia.org/wiki/Tesla,_Inc.' })); - -let question = 'Who founded Tesla?'; -console.log('[QUESTION]', question); -console.log((await llmApplication.query(question)).result); - -question = 'Tell me about the history of Tesla?'; -console.log('[QUESTION]', question); -console.log((await llmApplication.query(question)).result); - -question = 'What cars does Tesla have'; -console.log('[QUESTION]', question); -console.log((await llmApplication.query(question)).result); diff --git a/examples/vertexai/tsconfig.json b/examples/vertexai/tsconfig.json deleted file mode 100644 index 8e3cb4dd..00000000 --- a/examples/vertexai/tsconfig.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "compilerOptions": { - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ES2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, - "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */, - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "nodenext" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist" /* Specify an output folder for all emitted files. */, - "removeComments": true /* Disable emitting comments. */, - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": false /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "types": ["node"] - }, - "include": ["src/**/*", "../../src/**/*"] -} diff --git a/loaders/embedjs-loader-confluence/CHANGELOG.md b/loaders/embedjs-loader-confluence/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/loaders/embedjs-loader-confluence/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/loaders/embedjs-loader-confluence/README.md b/loaders/embedjs-loader-confluence/README.md new file mode 100644 index 00000000..36c51481 --- /dev/null +++ b/loaders/embedjs-loader-confluence/README.md @@ -0,0 +1,8 @@ +# embedjs-loader-confluence + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/loaders/embedjs-loader-confluence/eslint.config.js b/loaders/embedjs-loader-confluence/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/loaders/embedjs-loader-confluence/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/loaders/embedjs-loader-confluence/package.json b/loaders/embedjs-loader-confluence/package.json new file mode 100644 index 00000000..aace2671 --- /dev/null +++ b/loaders/embedjs-loader-confluence/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-loader-confluence", + "version": "0.0.1", + "dependencies": { + "debug": "^4.3.7", + "confluence.js": "^1.7.4", + "md5": "^2.3.0", + "@llm-tools/embedjs-interfaces": "^0.0.1", + "@llm-tools/embedjs-loader-web": "^0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/loaders/embedjs-loader-confluence/project.json b/loaders/embedjs-loader-confluence/project.json new file mode 100644 index 00000000..00e24fe3 --- /dev/null +++ b/loaders/embedjs-loader-confluence/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-loader-confluence", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "loaders/embedjs-loader-confluence/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-loader-confluence", + "main": "loaders/embedjs-loader-confluence/src/index.ts", + "tsConfig": "loaders/embedjs-loader-confluence/tsconfig.lib.json", + "assets": ["loaders/embedjs-loader-confluence/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-loader-confluence", + "main": "loaders/embedjs-loader-confluence/src/index.ts", + "tsConfig": "loaders/embedjs-loader-confluence/tsconfig.cjs.json" + } + } + } +} diff --git a/src/loaders/confluence-loader.ts b/loaders/embedjs-loader-confluence/src/confluence-loader.ts similarity index 92% rename from src/loaders/confluence-loader.ts rename to loaders/embedjs-loader-confluence/src/confluence-loader.ts index 8cab8779..f767431b 100644 --- a/src/loaders/confluence-loader.ts +++ b/loaders/embedjs-loader-confluence/src/confluence-loader.ts @@ -1,100 +1,101 @@ -import { Content } from 'confluence.js/out/api/models/content.js'; -import { ConfluenceClient } from 'confluence.js'; -import createDebugMessages from 'debug'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { WebLoader } from './web-loader.js'; - -export class ConfluenceLoader extends BaseLoader<{ type: 'ConfluenceLoader' }> { - private readonly debug = createDebugMessages('embedjs:loader:ConfluenceLoader'); - - private readonly confluence: ConfluenceClient; - private readonly confluenceBaseUrl: string; - private readonly spaceNames: string[]; - - constructor({ - spaceNames, - confluenceBaseUrl, - confluenceUsername, - confluenceToken, - chunkSize, - chunkOverlap, - }: { - spaceNames: [string, ...string[]]; - confluenceBaseUrl?: string; - confluenceUsername?: string; - confluenceToken?: string; - chunkSize?: number; - chunkOverlap?: number; - }) { - super(`ConfluenceLoader_${md5(spaceNames.join(','))}`, { spaceNames }, chunkSize ?? 2000, chunkOverlap ?? 200); - - this.spaceNames = spaceNames; - this.confluenceBaseUrl = confluenceBaseUrl ?? process.env.CONFLUENCE_BASE_URL; - - this.confluence = new ConfluenceClient({ - host: this.confluenceBaseUrl, - authentication: { - basic: { - username: confluenceUsername ?? process.env.CONFLUENCE_USER_NAME, - password: confluenceToken ?? process.env.CONFLUENCE_API_TOKEN, - }, - }, - }); - } - - override async *getUnfilteredChunks() { - for (const spaceKey of this.spaceNames) { - try { - const spaceContent = await this.confluence.space.getContentForSpace({ spaceKey }); - this.debug( - `Confluence space (length ${spaceContent['page'].results.length}) obtained for space`, - spaceKey, - ); - - for await (const result of this.getContentChunks(spaceContent['page'].results)) { - yield result; - } - } catch (e) { - this.debug('Could not get space details', spaceKey, e); - continue; - } - } - } - - private async *getContentChunks(contentArray: Content[]) { - for (const { id } of contentArray) { - const content = await this.confluence.content.getContentById({ - id: id, - expand: ['body', 'children.page', 'body.view'], - }); - - if (!content.body.view.value) continue; - const webLoader = new WebLoader({ - urlOrContent: content.body.view.value, - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - for await (const result of await webLoader.getUnfilteredChunks()) { - //remove all types of empty brackets from string - result.pageContent = result.pageContent.replace(/[\[\]\(\)\{\}]/g, ''); - - yield { - pageContent: result.pageContent, - metadata: { - type: <'ConfluenceLoader'>'ConfluenceLoader', - source: `${this.confluenceBaseUrl}/wiki${content._links.webui}`, - }, - }; - } - - if (content.children) { - for await (const result of this.getContentChunks(content.children.page.results)) { - yield result; - } - } - } - } -} +import { Content } from 'confluence.js/out/api/models/content.js'; +import { ConfluenceClient } from 'confluence.js'; +import createDebugMessages from 'debug'; +import md5 from 'md5'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { WebLoader } from '@llm-tools/embedjs-loader-web'; + +export class ConfluenceLoader extends BaseLoader<{ type: 'ConfluenceLoader' }> { + private readonly debug = createDebugMessages('embedjs:loader:ConfluenceLoader'); + + private readonly confluence: ConfluenceClient; + private readonly confluenceBaseUrl: string; + private readonly spaceNames: string[]; + + constructor({ + spaceNames, + confluenceBaseUrl, + confluenceUsername, + confluenceToken, + chunkSize, + chunkOverlap, + }: { + spaceNames: [string, ...string[]]; + confluenceBaseUrl?: string; + confluenceUsername?: string; + confluenceToken?: string; + chunkSize?: number; + chunkOverlap?: number; + }) { + super(`ConfluenceLoader_${md5(spaceNames.join(','))}`, { spaceNames }, chunkSize ?? 2000, chunkOverlap ?? 200); + + this.spaceNames = spaceNames; + this.confluenceBaseUrl = confluenceBaseUrl ?? process.env.CONFLUENCE_BASE_URL; + + this.confluence = new ConfluenceClient({ + host: this.confluenceBaseUrl, + authentication: { + basic: { + username: confluenceUsername ?? process.env.CONFLUENCE_USER_NAME, + password: confluenceToken ?? process.env.CONFLUENCE_API_TOKEN, + }, + }, + }); + } + + override async *getUnfilteredChunks() { + for (const spaceKey of this.spaceNames) { + try { + const spaceContent = await this.confluence.space.getContentForSpace({ spaceKey }); + this.debug( + `Confluence space (length ${spaceContent['page'].results.length}) obtained for space`, + spaceKey, + ); + + for await (const result of this.getContentChunks(spaceContent['page'].results)) { + yield result; + } + } catch (e) { + this.debug('Could not get space details', spaceKey, e); + continue; + } + } + } + + private async *getContentChunks(contentArray: Content[]) { + for (const { id } of contentArray) { + const content = await this.confluence.content.getContentById({ + id: id, + expand: ['body', 'children.page', 'body.view'], + }); + + if (!content.body.view.value) continue; + const webLoader = new WebLoader({ + urlOrContent: content.body.view.value, + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + for await (const result of await webLoader.getUnfilteredChunks()) { + //remove all types of empty brackets from string + // eslint-disable-next-line no-useless-escape + result.pageContent = result.pageContent.replace(/[\[\]\(\)\{\}]/g, ''); + + yield { + pageContent: result.pageContent, + metadata: { + type: 'ConfluenceLoader' as const, + source: `${this.confluenceBaseUrl}/wiki${content._links.webui}`, + }, + }; + } + + if (content.children) { + for await (const result of this.getContentChunks(content.children.page.results)) { + yield result; + } + } + } + } +} diff --git a/loaders/embedjs-loader-confluence/src/index.ts b/loaders/embedjs-loader-confluence/src/index.ts new file mode 100644 index 00000000..5120a111 --- /dev/null +++ b/loaders/embedjs-loader-confluence/src/index.ts @@ -0,0 +1 @@ +export * from './confluence-loader.js'; diff --git a/loaders/embedjs-loader-confluence/tsconfig.cjs.json b/loaders/embedjs-loader-confluence/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/loaders/embedjs-loader-confluence/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/loaders/embedjs-loader-confluence/tsconfig.json b/loaders/embedjs-loader-confluence/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/loaders/embedjs-loader-confluence/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/loaders/embedjs-loader-confluence/tsconfig.lib.json b/loaders/embedjs-loader-confluence/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/loaders/embedjs-loader-confluence/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/loaders/embedjs-loader-csv/CHANGELOG.md b/loaders/embedjs-loader-csv/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/loaders/embedjs-loader-csv/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/loaders/embedjs-loader-csv/README.md b/loaders/embedjs-loader-csv/README.md new file mode 100644 index 00000000..6dddb97c --- /dev/null +++ b/loaders/embedjs-loader-csv/README.md @@ -0,0 +1,8 @@ +# embedjs-loader-csv + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/loaders/embedjs-loader-csv/eslint.config.js b/loaders/embedjs-loader-csv/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/loaders/embedjs-loader-csv/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/loaders/embedjs-loader-csv/package.json b/loaders/embedjs-loader-csv/package.json new file mode 100644 index 00000000..6cf16fe5 --- /dev/null +++ b/loaders/embedjs-loader-csv/package.json @@ -0,0 +1,41 @@ +{ + "name": "@llm-tools/embedjs-loader-csv", + "version": "0.0.1", + "dependencies": { + "md5": "^2.3.0", + "axios": "^1.7.7", + "debug": "^4.3.7", + "csv-parse": "^5.5.6", + "@llm-tools/embedjs-utils": "0.0.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/loaders/embedjs-loader-csv/project.json b/loaders/embedjs-loader-csv/project.json new file mode 100644 index 00000000..217dad8f --- /dev/null +++ b/loaders/embedjs-loader-csv/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-loader-csv", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "loaders/embedjs-loader-csv/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-loader-csv", + "main": "loaders/embedjs-loader-csv/src/index.ts", + "tsConfig": "loaders/embedjs-loader-csv/tsconfig.lib.json", + "assets": ["loaders/embedjs-loader-csv/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-loader-csv", + "main": "loaders/embedjs-loader-csv/src/index.ts", + "tsConfig": "loaders/embedjs-loader-csv/tsconfig.cjs.json" + } + } + } +} diff --git a/src/loaders/csv-loader.ts b/loaders/embedjs-loader-csv/src/csv-loader.ts similarity index 86% rename from src/loaders/csv-loader.ts rename to loaders/embedjs-loader-csv/src/csv-loader.ts index fc8d57f4..95cc9bc7 100644 --- a/src/loaders/csv-loader.ts +++ b/loaders/embedjs-loader-csv/src/csv-loader.ts @@ -1,59 +1,58 @@ -import { parse, Options as CsvParseOptions } from 'csv-parse'; -import createDebugMessages from 'debug'; -import axios from 'axios'; -import fs from 'node:fs'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { cleanString, isValidURL } from '../util/strings.js'; -import { stream2buffer } from '../util/stream.js'; - -export class CsvLoader extends BaseLoader<{ type: 'CsvLoader' }> { - private readonly debug = createDebugMessages('embedjs:loader:CsvLoader'); - private readonly csvParseOptions: CsvParseOptions; - private readonly filePathOrUrl: string; - private readonly isUrl: boolean; - - constructor({ - filePathOrUrl, - csvParseOptions, - chunkOverlap, - chunkSize, - }: { - filePathOrUrl: string; - csvParseOptions?: CsvParseOptions; - chunkSize?: number; - chunkOverlap?: number; - }) { - super(`CsvLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); - - this.filePathOrUrl = filePathOrUrl; - this.isUrl = isValidURL(filePathOrUrl) ? true : false; - this.csvParseOptions = csvParseOptions ?? { autoParse: true }; - } - - override async *getUnfilteredChunks() { - const stream = await stream2buffer( - this.isUrl - ? (await axios.get(this.filePathOrUrl, { responseType: 'stream' })).data - : fs.createReadStream(this.filePathOrUrl), - ); - this.debug('CsvParser stream created'); - const parser = parse(stream, this.csvParseOptions); - this.debug('CSV parsing started...'); - - let i = 0; - for await (const record of parser) { - yield { - pageContent: cleanString(record.join(',')), - metadata: { - type: <'CsvLoader'>'CsvLoader', - source: this.filePathOrUrl, - }, - }; - i++; - } - - this.debug(`CsvParser for filePathOrUrl '${this.filePathOrUrl}' resulted in ${i} entries`); - } -} +import { parse, Options as CsvParseOptions } from 'csv-parse'; +import createDebugMessages from 'debug'; +import axios from 'axios'; +import fs from 'node:fs'; +import md5 from 'md5'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { cleanString, isValidURL, stream2buffer } from '@llm-tools/embedjs-utils'; + +export class CsvLoader extends BaseLoader<{ type: 'CsvLoader' }> { + private readonly debug = createDebugMessages('embedjs:loader:CsvLoader'); + private readonly csvParseOptions: CsvParseOptions; + private readonly filePathOrUrl: string; + private readonly isUrl: boolean; + + constructor({ + filePathOrUrl, + csvParseOptions, + chunkOverlap, + chunkSize, + }: { + filePathOrUrl: string; + csvParseOptions?: CsvParseOptions; + chunkSize?: number; + chunkOverlap?: number; + }) { + super(`CsvLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); + + this.filePathOrUrl = filePathOrUrl; + this.isUrl = isValidURL(filePathOrUrl) ? true : false; + this.csvParseOptions = csvParseOptions ?? { autoParse: true }; + } + + override async *getUnfilteredChunks() { + const stream = await stream2buffer( + this.isUrl + ? (await axios.get(this.filePathOrUrl, { responseType: 'stream' })).data + : fs.createReadStream(this.filePathOrUrl), + ); + this.debug('CsvParser stream created'); + const parser = parse(stream, this.csvParseOptions); + this.debug('CSV parsing started...'); + + let i = 0; + for await (const record of parser) { + yield { + pageContent: cleanString(record.join(',')), + metadata: { + type: 'CsvLoader' as const, + source: this.filePathOrUrl, + }, + }; + i++; + } + + this.debug(`CsvParser for filePathOrUrl '${this.filePathOrUrl}' resulted in ${i} entries`); + } +} diff --git a/loaders/embedjs-loader-csv/src/index.ts b/loaders/embedjs-loader-csv/src/index.ts new file mode 100644 index 00000000..1b244da1 --- /dev/null +++ b/loaders/embedjs-loader-csv/src/index.ts @@ -0,0 +1 @@ +export { CsvLoader } from './csv-loader.js'; diff --git a/loaders/embedjs-loader-csv/tsconfig.cjs.json b/loaders/embedjs-loader-csv/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/loaders/embedjs-loader-csv/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/loaders/embedjs-loader-csv/tsconfig.json b/loaders/embedjs-loader-csv/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/loaders/embedjs-loader-csv/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/loaders/embedjs-loader-csv/tsconfig.lib.json b/loaders/embedjs-loader-csv/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/loaders/embedjs-loader-csv/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/loaders/embedjs-loader-msoffice/CHANGELOG.md b/loaders/embedjs-loader-msoffice/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/loaders/embedjs-loader-msoffice/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/loaders/embedjs-loader-msoffice/README.md b/loaders/embedjs-loader-msoffice/README.md new file mode 100644 index 00000000..e41c8b8a --- /dev/null +++ b/loaders/embedjs-loader-msoffice/README.md @@ -0,0 +1,8 @@ +# embedjs-loader-msoffice + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/loaders/embedjs-loader-msoffice/eslint.config.js b/loaders/embedjs-loader-msoffice/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/loaders/embedjs-loader-msoffice/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/loaders/embedjs-loader-msoffice/package.json b/loaders/embedjs-loader-msoffice/package.json new file mode 100644 index 00000000..6947beb4 --- /dev/null +++ b/loaders/embedjs-loader-msoffice/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-loader-msoffice", + "version": "0.0.1", + "dependencies": { + "md5": "^2.3.0", + "office-text-extractor": "^3.0.3", + "langchain": "^0.3.2", + "@llm-tools/embedjs-utils": "0.0.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/loaders/embedjs-loader-msoffice/project.json b/loaders/embedjs-loader-msoffice/project.json new file mode 100644 index 00000000..84fcbe5d --- /dev/null +++ b/loaders/embedjs-loader-msoffice/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-loader-msoffice", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "loaders/embedjs-loader-msoffice/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-loader-msoffice", + "main": "loaders/embedjs-loader-msoffice/src/index.ts", + "tsConfig": "loaders/embedjs-loader-msoffice/tsconfig.lib.json", + "assets": ["loaders/embedjs-loader-msoffice/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-loader-msoffice", + "main": "loaders/embedjs-loader-msoffice/src/index.ts", + "tsConfig": "loaders/embedjs-loader-msoffice/tsconfig.cjs.json" + } + } + } +} diff --git a/src/loaders/docx-loader.ts b/loaders/embedjs-loader-msoffice/src/docx-loader.ts similarity index 86% rename from src/loaders/docx-loader.ts rename to loaders/embedjs-loader-msoffice/src/docx-loader.ts index 0825a54a..cf9aa433 100644 --- a/src/loaders/docx-loader.ts +++ b/loaders/embedjs-loader-msoffice/src/docx-loader.ts @@ -1,50 +1,49 @@ -import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; -import { getTextExtractor } from 'office-text-extractor'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { cleanString, isValidURL } from '../util/strings.js'; - -export class DocxLoader extends BaseLoader<{ type: 'DocxLoader' }> { - private readonly filePathOrUrl: string; - private readonly isUrl: boolean; - - constructor({ - filePathOrUrl, - chunkOverlap, - chunkSize, - }: { - filePathOrUrl: string; - chunkSize?: number; - chunkOverlap?: number; - }) { - super(`DocxLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); - - this.filePathOrUrl = filePathOrUrl; - this.isUrl = isValidURL(filePathOrUrl) ? true : false; - } - - override async *getUnfilteredChunks() { - const chunker = new RecursiveCharacterTextSplitter({ - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - const extractor = getTextExtractor(); - const docxParsed = await extractor.extractText({ - input: this.filePathOrUrl, - type: this.isUrl ? 'url' : 'file', - }); - - const chunks = await chunker.splitText(cleanString(docxParsed)); - for (const chunk of chunks) { - yield { - pageContent: chunk, - metadata: { - type: <'DocxLoader'>'DocxLoader', - source: this.filePathOrUrl, - }, - }; - } - } -} +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; +import { getTextExtractor } from 'office-text-extractor'; +import md5 from 'md5'; +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { isValidURL, cleanString } from '@llm-tools/embedjs-utils'; + +export class DocxLoader extends BaseLoader<{ type: 'DocxLoader' }> { + private readonly filePathOrUrl: string; + private readonly isUrl: boolean; + + constructor({ + filePathOrUrl, + chunkOverlap, + chunkSize, + }: { + filePathOrUrl: string; + chunkSize?: number; + chunkOverlap?: number; + }) { + super(`DocxLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); + + this.filePathOrUrl = filePathOrUrl; + this.isUrl = isValidURL(filePathOrUrl) ? true : false; + } + + override async *getUnfilteredChunks() { + const chunker = new RecursiveCharacterTextSplitter({ + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + const extractor = getTextExtractor(); + const docxParsed = await extractor.extractText({ + input: this.filePathOrUrl, + type: this.isUrl ? 'url' : 'file', + }); + + const chunks = await chunker.splitText(cleanString(docxParsed)); + for (const chunk of chunks) { + yield { + pageContent: chunk, + metadata: { + type: 'DocxLoader' as const, + source: this.filePathOrUrl, + }, + }; + } + } +} diff --git a/src/loaders/excel-loader.ts b/loaders/embedjs-loader-msoffice/src/excel-loader.ts similarity index 86% rename from src/loaders/excel-loader.ts rename to loaders/embedjs-loader-msoffice/src/excel-loader.ts index 75d36c66..c1919b73 100644 --- a/src/loaders/excel-loader.ts +++ b/loaders/embedjs-loader-msoffice/src/excel-loader.ts @@ -1,50 +1,49 @@ -import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; -import { getTextExtractor } from 'office-text-extractor'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { cleanString, isValidURL } from '../util/strings.js'; - -export class ExcelLoader extends BaseLoader<{ type: 'ExcelLoader' }> { - private readonly filePathOrUrl: string; - private readonly isUrl: boolean; - - constructor({ - filePathOrUrl, - chunkOverlap, - chunkSize, - }: { - filePathOrUrl: string; - chunkSize?: number; - chunkOverlap?: number; - }) { - super(`ExcelLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); - - this.filePathOrUrl = filePathOrUrl; - this.isUrl = isValidURL(filePathOrUrl) ? true : false; - } - - override async *getUnfilteredChunks() { - const chunker = new RecursiveCharacterTextSplitter({ - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - const extractor = getTextExtractor(); - const xlsxParsed = await extractor.extractText({ - input: this.filePathOrUrl, - type: this.isUrl ? 'url' : 'file', - }); - - const chunks = await chunker.splitText(cleanString(xlsxParsed)); - for (const chunk of chunks) { - yield { - pageContent: chunk, - metadata: { - type: <'ExcelLoader'>'ExcelLoader', - source: this.filePathOrUrl, - }, - }; - } - } -} +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; +import { getTextExtractor } from 'office-text-extractor'; +import md5 from 'md5'; +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { isValidURL, cleanString } from '@llm-tools/embedjs-utils'; + +export class ExcelLoader extends BaseLoader<{ type: 'ExcelLoader' }> { + private readonly filePathOrUrl: string; + private readonly isUrl: boolean; + + constructor({ + filePathOrUrl, + chunkOverlap, + chunkSize, + }: { + filePathOrUrl: string; + chunkSize?: number; + chunkOverlap?: number; + }) { + super(`ExcelLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); + + this.filePathOrUrl = filePathOrUrl; + this.isUrl = isValidURL(filePathOrUrl) ? true : false; + } + + override async *getUnfilteredChunks() { + const chunker = new RecursiveCharacterTextSplitter({ + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + const extractor = getTextExtractor(); + const xlsxParsed = await extractor.extractText({ + input: this.filePathOrUrl, + type: this.isUrl ? 'url' : 'file', + }); + + const chunks = await chunker.splitText(cleanString(xlsxParsed)); + for (const chunk of chunks) { + yield { + pageContent: chunk, + metadata: { + type: 'ExcelLoader' as const, + source: this.filePathOrUrl, + }, + }; + } + } +} diff --git a/loaders/embedjs-loader-msoffice/src/index.ts b/loaders/embedjs-loader-msoffice/src/index.ts new file mode 100644 index 00000000..340bb128 --- /dev/null +++ b/loaders/embedjs-loader-msoffice/src/index.ts @@ -0,0 +1,3 @@ +export { DocxLoader } from './docx-loader.js'; +export { ExcelLoader } from './excel-loader.js'; +export { PptLoader } from './ppt-loader.js'; diff --git a/src/loaders/ppt-loader.ts b/loaders/embedjs-loader-msoffice/src/ppt-loader.ts similarity index 86% rename from src/loaders/ppt-loader.ts rename to loaders/embedjs-loader-msoffice/src/ppt-loader.ts index 35be42c2..b0e8eb1b 100644 --- a/src/loaders/ppt-loader.ts +++ b/loaders/embedjs-loader-msoffice/src/ppt-loader.ts @@ -1,50 +1,49 @@ -import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; -import { getTextExtractor } from 'office-text-extractor'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { cleanString, isValidURL } from '../util/strings.js'; - -export class PptLoader extends BaseLoader<{ type: 'PptLoader' }> { - private readonly filePathOrUrl: string; - private readonly isUrl: boolean; - - constructor({ - filePathOrUrl, - chunkOverlap, - chunkSize, - }: { - filePathOrUrl: string; - chunkSize?: number; - chunkOverlap?: number; - }) { - super(`PptLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); - - this.filePathOrUrl = filePathOrUrl; - this.isUrl = isValidURL(filePathOrUrl) ? true : false; - } - - override async *getUnfilteredChunks() { - const chunker = new RecursiveCharacterTextSplitter({ - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - const extractor = getTextExtractor(); - const docxParsed = await extractor.extractText({ - input: this.filePathOrUrl, - type: this.isUrl ? 'url' : 'file', - }); - - const chunks = await chunker.splitText(cleanString(docxParsed)); - for (const chunk of chunks) { - yield { - pageContent: chunk, - metadata: { - type: <'PptLoader'>'PptLoader', - source: this.filePathOrUrl, - }, - }; - } - } -} +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; +import { getTextExtractor } from 'office-text-extractor'; +import md5 from 'md5'; +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { isValidURL, cleanString } from '@llm-tools/embedjs-utils'; + +export class PptLoader extends BaseLoader<{ type: 'PptLoader' }> { + private readonly filePathOrUrl: string; + private readonly isUrl: boolean; + + constructor({ + filePathOrUrl, + chunkOverlap, + chunkSize, + }: { + filePathOrUrl: string; + chunkSize?: number; + chunkOverlap?: number; + }) { + super(`PptLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); + + this.filePathOrUrl = filePathOrUrl; + this.isUrl = isValidURL(filePathOrUrl) ? true : false; + } + + override async *getUnfilteredChunks() { + const chunker = new RecursiveCharacterTextSplitter({ + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + const extractor = getTextExtractor(); + const docxParsed = await extractor.extractText({ + input: this.filePathOrUrl, + type: this.isUrl ? 'url' : 'file', + }); + + const chunks = await chunker.splitText(cleanString(docxParsed)); + for (const chunk of chunks) { + yield { + pageContent: chunk, + metadata: { + type: 'PptLoader' as const, + source: this.filePathOrUrl, + }, + }; + } + } +} diff --git a/loaders/embedjs-loader-msoffice/tsconfig.cjs.json b/loaders/embedjs-loader-msoffice/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/loaders/embedjs-loader-msoffice/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/loaders/embedjs-loader-msoffice/tsconfig.json b/loaders/embedjs-loader-msoffice/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/loaders/embedjs-loader-msoffice/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/loaders/embedjs-loader-msoffice/tsconfig.lib.json b/loaders/embedjs-loader-msoffice/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/loaders/embedjs-loader-msoffice/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/loaders/embedjs-loader-pdf/CHANGELOG.md b/loaders/embedjs-loader-pdf/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/loaders/embedjs-loader-pdf/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/loaders/embedjs-loader-pdf/README.md b/loaders/embedjs-loader-pdf/README.md new file mode 100644 index 00000000..069b4e99 --- /dev/null +++ b/loaders/embedjs-loader-pdf/README.md @@ -0,0 +1,8 @@ +# embedjs-loader-pdf + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/loaders/embedjs-loader-pdf/eslint.config.js b/loaders/embedjs-loader-pdf/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/loaders/embedjs-loader-pdf/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/loaders/embedjs-loader-pdf/package.json b/loaders/embedjs-loader-pdf/package.json new file mode 100644 index 00000000..2eb2aa7a --- /dev/null +++ b/loaders/embedjs-loader-pdf/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-loader-pdf", + "version": "0.0.1", + "dependencies": { + "md5": "^2.3.0", + "office-text-extractor": "^3.0.3", + "langchain": "^0.3.2", + "@llm-tools/embedjs-utils": "0.0.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/loaders/embedjs-loader-pdf/project.json b/loaders/embedjs-loader-pdf/project.json new file mode 100644 index 00000000..124bb2bf --- /dev/null +++ b/loaders/embedjs-loader-pdf/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-loader-pdf", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "loaders/embedjs-loader-pdf/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-loader-pdf", + "main": "loaders/embedjs-loader-pdf/src/index.ts", + "tsConfig": "loaders/embedjs-loader-pdf/tsconfig.lib.json", + "assets": ["loaders/embedjs-loader-pdf/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-loader-pdf", + "main": "loaders/embedjs-loader-pdf/src/index.ts", + "tsConfig": "loaders/embedjs-loader-pdf/tsconfig.cjs.json" + } + } + } +} diff --git a/loaders/embedjs-loader-pdf/src/index.ts b/loaders/embedjs-loader-pdf/src/index.ts new file mode 100644 index 00000000..8b323662 --- /dev/null +++ b/loaders/embedjs-loader-pdf/src/index.ts @@ -0,0 +1 @@ +export { PdfLoader } from './pdf-loader.js'; diff --git a/src/loaders/pdf-loader.ts b/loaders/embedjs-loader-pdf/src/pdf-loader.ts similarity index 86% rename from src/loaders/pdf-loader.ts rename to loaders/embedjs-loader-pdf/src/pdf-loader.ts index 4cb15f67..aac8a32a 100644 --- a/src/loaders/pdf-loader.ts +++ b/loaders/embedjs-loader-pdf/src/pdf-loader.ts @@ -1,47 +1,47 @@ -import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; -import { getTextExtractor } from 'office-text-extractor'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { cleanString, isValidURL } from '../util/strings.js'; - -export class PdfLoader extends BaseLoader<{ type: 'PdfLoader' }> { - private readonly filePathOrUrl: string; - private readonly isUrl: boolean; - - constructor({ - filePathOrUrl, - chunkOverlap, - chunkSize, - }: { - filePathOrUrl: string; - chunkSize?: number; - chunkOverlap?: number; - }) { - super(`PdfLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); - - this.filePathOrUrl = filePathOrUrl; - this.isUrl = isValidURL(filePathOrUrl) ? true : false; - } - - override async *getUnfilteredChunks() { - const chunker = new RecursiveCharacterTextSplitter({ - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - const extractor = getTextExtractor(); - const pdfParsed = await extractor.extractText({ input: this.filePathOrUrl, type: this.isUrl ? 'url' : 'file' }); - - const chunks = await chunker.splitText(cleanString(pdfParsed)); - for (const chunk of chunks) { - yield { - pageContent: chunk, - metadata: { - type: <'PdfLoader'>'PdfLoader', - source: this.filePathOrUrl, - }, - }; - } - } -} +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; +import { getTextExtractor } from 'office-text-extractor'; +import md5 from 'md5'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { isValidURL, cleanString } from '@llm-tools/embedjs-utils'; + +export class PdfLoader extends BaseLoader<{ type: 'PdfLoader' }> { + private readonly filePathOrUrl: string; + private readonly isUrl: boolean; + + constructor({ + filePathOrUrl, + chunkOverlap, + chunkSize, + }: { + filePathOrUrl: string; + chunkSize?: number; + chunkOverlap?: number; + }) { + super(`PdfLoader_${md5(filePathOrUrl)}`, { filePathOrUrl }, chunkSize ?? 1000, chunkOverlap ?? 0); + + this.filePathOrUrl = filePathOrUrl; + this.isUrl = isValidURL(filePathOrUrl) ? true : false; + } + + override async *getUnfilteredChunks() { + const chunker = new RecursiveCharacterTextSplitter({ + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + const extractor = getTextExtractor(); + const pdfParsed = await extractor.extractText({ input: this.filePathOrUrl, type: this.isUrl ? 'url' : 'file' }); + + const chunks = await chunker.splitText(cleanString(pdfParsed)); + for (const chunk of chunks) { + yield { + pageContent: chunk, + metadata: { + type: 'PdfLoader' as const, + source: this.filePathOrUrl, + }, + }; + } + } +} diff --git a/loaders/embedjs-loader-pdf/tsconfig.cjs.json b/loaders/embedjs-loader-pdf/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/loaders/embedjs-loader-pdf/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/loaders/embedjs-loader-pdf/tsconfig.json b/loaders/embedjs-loader-pdf/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/loaders/embedjs-loader-pdf/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/loaders/embedjs-loader-pdf/tsconfig.lib.json b/loaders/embedjs-loader-pdf/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/loaders/embedjs-loader-pdf/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/loaders/embedjs-loader-sitemap/CHANGELOG.md b/loaders/embedjs-loader-sitemap/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/loaders/embedjs-loader-sitemap/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/loaders/embedjs-loader-sitemap/README.md b/loaders/embedjs-loader-sitemap/README.md new file mode 100644 index 00000000..8153f574 --- /dev/null +++ b/loaders/embedjs-loader-sitemap/README.md @@ -0,0 +1,8 @@ +# embedjs-loader-sitemap + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/loaders/embedjs-loader-sitemap/eslint.config.js b/loaders/embedjs-loader-sitemap/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/loaders/embedjs-loader-sitemap/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/loaders/embedjs-loader-sitemap/package.json b/loaders/embedjs-loader-sitemap/package.json new file mode 100644 index 00000000..3b6aa557 --- /dev/null +++ b/loaders/embedjs-loader-sitemap/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-loader-sitemap", + "version": "0.0.1", + "dependencies": { + "md5": "^2.3.0", + "debug": "^4.3.7", + "sitemapper": "^3.2.12", + "@llm-tools/embedjs-interfaces": "^0.0.1", + "@llm-tools/embedjs-loader-web": "^0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/loaders/embedjs-loader-sitemap/project.json b/loaders/embedjs-loader-sitemap/project.json new file mode 100644 index 00000000..c1d2bc8f --- /dev/null +++ b/loaders/embedjs-loader-sitemap/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-loader-sitemap", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "loaders/embedjs-loader-sitemap/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-loader-sitemap", + "main": "loaders/embedjs-loader-sitemap/src/index.ts", + "tsConfig": "loaders/embedjs-loader-sitemap/tsconfig.lib.json", + "assets": ["loaders/embedjs-loader-sitemap/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-loader-sitemap", + "main": "loaders/embedjs-loader-sitemap/src/index.ts", + "tsConfig": "loaders/embedjs-loader-sitemap/tsconfig.cjs.json" + } + } + } +} diff --git a/loaders/embedjs-loader-sitemap/src/index.ts b/loaders/embedjs-loader-sitemap/src/index.ts new file mode 100644 index 00000000..e00bbae6 --- /dev/null +++ b/loaders/embedjs-loader-sitemap/src/index.ts @@ -0,0 +1 @@ +export { SitemapLoader } from './sitemap-loader.js'; diff --git a/src/loaders/sitemap-loader.ts b/loaders/embedjs-loader-sitemap/src/sitemap-loader.ts similarity index 88% rename from src/loaders/sitemap-loader.ts rename to loaders/embedjs-loader-sitemap/src/sitemap-loader.ts index 3d6e6745..5b551f2d 100644 --- a/src/loaders/sitemap-loader.ts +++ b/loaders/embedjs-loader-sitemap/src/sitemap-loader.ts @@ -1,55 +1,55 @@ -import md5 from 'md5'; -import Sitemapper from 'sitemapper'; -import createDebugMessages from 'debug'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { WebLoader } from './web-loader.js'; - -export class SitemapLoader extends BaseLoader<{ type: 'SitemapLoader' }> { - public static async test(url: string): Promise { - try { - // @ts-ignore - await new Sitemapper({ url, timeout: 15000 }).fetch(); - return true; - } catch { - return false; - } - } - - private readonly debug = createDebugMessages('embedjs:loader:SitemapLoader'); - private readonly url: string; - - constructor({ url, chunkSize, chunkOverlap }: { url: string; chunkSize?: number; chunkOverlap?: number }) { - super(`SitemapLoader_${md5(url)}`, { url }, chunkSize ?? 2000, chunkOverlap); - this.url = url; - } - - override async *getUnfilteredChunks() { - try { - // @ts-ignore - const { sites } = await new Sitemapper({ url: this.url, timeout: 15000 }).fetch(); - this.debug(`Sitemap '${this.url}' returned ${sites.length} URLs`); - - for (const url of sites) { - const webLoader = new WebLoader({ - urlOrContent: url, - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - for await (const chunk of webLoader.getUnfilteredChunks()) { - yield { - ...chunk, - metadata: { - ...chunk.metadata, - type: <'SitemapLoader'>'SitemapLoader', - originalSource: this.url, - }, - }; - } - } - } catch (e) { - this.debug('Could not get sites from sitemap url', this.url, e); - } - } -} +import md5 from 'md5'; +import Sitemapper from 'sitemapper'; +import createDebugMessages from 'debug'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { WebLoader } from '@llm-tools/embedjs-loader-web'; + +export class SitemapLoader extends BaseLoader<{ type: 'SitemapLoader' }> { + public static async test(url: string): Promise { + try { + // @ts-ignore + await new Sitemapper({ url, timeout: 15000 }).fetch(); + return true; + } catch { + return false; + } + } + + private readonly debug = createDebugMessages('embedjs:loader:SitemapLoader'); + private readonly url: string; + + constructor({ url, chunkSize, chunkOverlap }: { url: string; chunkSize?: number; chunkOverlap?: number }) { + super(`SitemapLoader_${md5(url)}`, { url }, chunkSize ?? 2000, chunkOverlap); + this.url = url; + } + + override async *getUnfilteredChunks() { + try { + // @ts-ignore + const { sites } = await new Sitemapper({ url: this.url, timeout: 15000 }).fetch(); + this.debug(`Sitemap '${this.url}' returned ${sites.length} URLs`); + + for (const url of sites) { + const webLoader = new WebLoader({ + urlOrContent: url, + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + for await (const chunk of webLoader.getUnfilteredChunks()) { + yield { + ...chunk, + metadata: { + ...chunk.metadata, + type: 'SitemapLoader' as const, + originalSource: this.url, + }, + }; + } + } + } catch (e) { + this.debug('Could not get sites from sitemap url', this.url, e); + } + } +} diff --git a/loaders/embedjs-loader-sitemap/tsconfig.cjs.json b/loaders/embedjs-loader-sitemap/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/loaders/embedjs-loader-sitemap/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/loaders/embedjs-loader-sitemap/tsconfig.json b/loaders/embedjs-loader-sitemap/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/loaders/embedjs-loader-sitemap/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/loaders/embedjs-loader-sitemap/tsconfig.lib.json b/loaders/embedjs-loader-sitemap/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/loaders/embedjs-loader-sitemap/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/loaders/embedjs-loader-web/CHANGELOG.md b/loaders/embedjs-loader-web/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/loaders/embedjs-loader-web/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/loaders/embedjs-loader-web/README.md b/loaders/embedjs-loader-web/README.md new file mode 100644 index 00000000..f05330f1 --- /dev/null +++ b/loaders/embedjs-loader-web/README.md @@ -0,0 +1,8 @@ +# embedjs-loader-web + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/loaders/embedjs-loader-web/eslint.config.js b/loaders/embedjs-loader-web/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/loaders/embedjs-loader-web/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/loaders/embedjs-loader-web/package.json b/loaders/embedjs-loader-web/package.json new file mode 100644 index 00000000..9ef04e05 --- /dev/null +++ b/loaders/embedjs-loader-web/package.json @@ -0,0 +1,45 @@ +{ + "name": "@llm-tools/embedjs-loader-web", + "version": "0.0.1", + "dependencies": { + "md5": "^2.3.0", + "axios": "^1.7.7", + "debug": "^4.3.7", + "html-to-text": "^9.0.5", + "langchain": "^0.3.2", + "@llm-tools/embedjs-utils": "0.0.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "devDependencies": { + "@types/html-to-text": "^9.0.4" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/loaders/embedjs-loader-web/project.json b/loaders/embedjs-loader-web/project.json new file mode 100644 index 00000000..3414903b --- /dev/null +++ b/loaders/embedjs-loader-web/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-loader-web", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "loaders/embedjs-loader-web/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-loader-web", + "main": "loaders/embedjs-loader-web/src/index.ts", + "tsConfig": "loaders/embedjs-loader-web/tsconfig.lib.json", + "assets": ["loaders/embedjs-loader-web/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-loader-web", + "main": "loaders/embedjs-loader-web/src/index.ts", + "tsConfig": "loaders/embedjs-loader-web/tsconfig.cjs.json" + } + } + } +} diff --git a/loaders/embedjs-loader-web/src/index.ts b/loaders/embedjs-loader-web/src/index.ts new file mode 100644 index 00000000..b43f04a0 --- /dev/null +++ b/loaders/embedjs-loader-web/src/index.ts @@ -0,0 +1 @@ +export { WebLoader } from './web-loader.js'; diff --git a/src/loaders/web-loader.ts b/loaders/embedjs-loader-web/src/web-loader.ts similarity index 87% rename from src/loaders/web-loader.ts rename to loaders/embedjs-loader-web/src/web-loader.ts index 9925116c..169ae060 100644 --- a/src/loaders/web-loader.ts +++ b/loaders/embedjs-loader-web/src/web-loader.ts @@ -1,63 +1,62 @@ -import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; -import createDebugMessages from 'debug'; -import { convert } from 'html-to-text'; -import axios from 'axios'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { cleanString, isValidURL, truncateCenterString } from '../util/strings.js'; - -export class WebLoader extends BaseLoader<{ type: 'WebLoader' }> { - private readonly debug = createDebugMessages('embedjs:loader:WebLoader'); - private readonly urlOrContent: string; - private readonly isUrl: boolean; - - constructor({ - urlOrContent, - chunkSize, - chunkOverlap, - }: { - urlOrContent: string; - chunkSize?: number; - chunkOverlap?: number; - }) { - super(`WebLoader_${md5(urlOrContent)}`, { urlOrContent }, chunkSize ?? 2000, chunkOverlap ?? 0); - - this.isUrl = isValidURL(urlOrContent) ? true : false; - this.urlOrContent = urlOrContent; - ``; - } - - override async *getUnfilteredChunks() { - const chunker = new RecursiveCharacterTextSplitter({ - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - try { - const data = this.isUrl - ? (await axios.get(this.urlOrContent, { responseType: 'document' })).data - : this.urlOrContent; - - const text = convert(data, { - wordwrap: false, - preserveNewlines: false, - }).replace(/(?:https?|ftp):\/\/[\n\S]+/g, ''); - - const tuncatedObjectString = this.isUrl ? undefined : truncateCenterString(this.urlOrContent, 50); - - const chunks = await chunker.splitText(cleanString(text)); - for (const chunk of chunks) { - yield { - pageContent: chunk, - metadata: { - type: <'WebLoader'>'WebLoader', - source: this.isUrl ? this.urlOrContent : tuncatedObjectString, - }, - }; - } - } catch (e) { - this.debug('Could not parse input', this.urlOrContent, e); - } - } -} +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; +import createDebugMessages from 'debug'; +import { convert } from 'html-to-text'; +import axios from 'axios'; +import md5 from 'md5'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { isValidURL, truncateCenterString, cleanString } from '@llm-tools/embedjs-utils'; + +export class WebLoader extends BaseLoader<{ type: 'WebLoader' }> { + private readonly debug = createDebugMessages('embedjs:loader:WebLoader'); + private readonly urlOrContent: string; + private readonly isUrl: boolean; + + constructor({ + urlOrContent, + chunkSize, + chunkOverlap, + }: { + urlOrContent: string; + chunkSize?: number; + chunkOverlap?: number; + }) { + super(`WebLoader_${md5(urlOrContent)}`, { urlOrContent }, chunkSize ?? 2000, chunkOverlap ?? 0); + + this.isUrl = isValidURL(urlOrContent) ? true : false; + this.urlOrContent = urlOrContent; + } + + override async *getUnfilteredChunks() { + const chunker = new RecursiveCharacterTextSplitter({ + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + try { + const data = this.isUrl + ? (await axios.get(this.urlOrContent, { responseType: 'document' })).data + : this.urlOrContent; + + const text = convert(data, { + wordwrap: false, + preserveNewlines: false, + }).replace(/(?:https?|ftp):\/\/[\n\S]+/g, ''); + + const tuncatedObjectString = this.isUrl ? undefined : truncateCenterString(this.urlOrContent, 50); + + const chunks = await chunker.splitText(cleanString(text)); + for (const chunk of chunks) { + yield { + pageContent: chunk, + metadata: { + type: 'WebLoader' as const, + source: this.isUrl ? this.urlOrContent : tuncatedObjectString, + }, + }; + } + } catch (e) { + this.debug('Could not parse input', this.urlOrContent, e); + } + } +} diff --git a/loaders/embedjs-loader-web/tsconfig.cjs.json b/loaders/embedjs-loader-web/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/loaders/embedjs-loader-web/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/loaders/embedjs-loader-web/tsconfig.json b/loaders/embedjs-loader-web/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/loaders/embedjs-loader-web/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/loaders/embedjs-loader-web/tsconfig.lib.json b/loaders/embedjs-loader-web/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/loaders/embedjs-loader-web/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/loaders/embedjs-loader-youtube/CHANGELOG.md b/loaders/embedjs-loader-youtube/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/loaders/embedjs-loader-youtube/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/loaders/embedjs-loader-youtube/README.md b/loaders/embedjs-loader-youtube/README.md new file mode 100644 index 00000000..3e63bfd5 --- /dev/null +++ b/loaders/embedjs-loader-youtube/README.md @@ -0,0 +1,8 @@ +# embedjs-loader-youtube + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/loaders/embedjs-loader-youtube/eslint.config.js b/loaders/embedjs-loader-youtube/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/loaders/embedjs-loader-youtube/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/loaders/embedjs-loader-youtube/package.json b/loaders/embedjs-loader-youtube/package.json new file mode 100644 index 00000000..b71277b2 --- /dev/null +++ b/loaders/embedjs-loader-youtube/package.json @@ -0,0 +1,44 @@ +{ + "name": "@llm-tools/embedjs-loader-youtube", + "version": "0.0.1", + "dependencies": { + "md5": "^2.3.0", + "debug": "^4.3.7", + "usetube": "^2.2.7", + "youtube-transcript": "^1.2.1", + "@llm-tools/embedjs-utils": "0.0.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "devDependencies": { + "@types/usetube": "^2.1.2" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/loaders/embedjs-loader-youtube/project.json b/loaders/embedjs-loader-youtube/project.json new file mode 100644 index 00000000..0ad15a31 --- /dev/null +++ b/loaders/embedjs-loader-youtube/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-loader-youtube", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "loaders/embedjs-loader-youtube/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-loader-youtube", + "main": "loaders/embedjs-loader-youtube/src/index.ts", + "tsConfig": "loaders/embedjs-loader-youtube/tsconfig.lib.json", + "assets": ["loaders/embedjs-loader-youtube/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-loader-youtube", + "main": "loaders/embedjs-loader-youtube/src/index.ts", + "tsConfig": "loaders/embedjs-loader-youtube/tsconfig.cjs.json" + } + } + } +} diff --git a/loaders/embedjs-loader-youtube/src/index.ts b/loaders/embedjs-loader-youtube/src/index.ts new file mode 100644 index 00000000..3b1b4ac4 --- /dev/null +++ b/loaders/embedjs-loader-youtube/src/index.ts @@ -0,0 +1,3 @@ +export * from './youtube-loader.js'; +export * from './youtube-search-loader.js'; +export * from './youtube-channel-loader.js'; diff --git a/src/loaders/youtube-channel-loader.ts b/loaders/embedjs-loader-youtube/src/youtube-channel-loader.ts similarity index 90% rename from src/loaders/youtube-channel-loader.ts rename to loaders/embedjs-loader-youtube/src/youtube-channel-loader.ts index ba867b29..3afeb047 100644 --- a/src/loaders/youtube-channel-loader.ts +++ b/loaders/embedjs-loader-youtube/src/youtube-channel-loader.ts @@ -1,53 +1,53 @@ -import md5 from 'md5'; -import usetube from 'usetube'; -import createDebugMessages from 'debug'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { YoutubeLoader } from './youtube-loader.js'; - -export class YoutubeChannelLoader extends BaseLoader<{ type: 'YoutubeChannelLoader' }> { - private readonly debug = createDebugMessages('embedjs:loader:YoutubeChannelLoader'); - private readonly channelId: string; - - constructor({ - youtubeChannelId, - chunkSize, - chunkOverlap, - }: { - youtubeChannelId: string; - chunkSize?: number; - chunkOverlap?: number; - }) { - super(`YoutubeChannelLoader_${md5(youtubeChannelId)}`, { youtubeChannelId }, chunkSize ?? 2000, chunkOverlap); - this.channelId = youtubeChannelId; - } - - override async *getUnfilteredChunks() { - try { - const videos = await usetube.getChannelVideos(this.channelId); - this.debug(`Channel '${this.channelId}' returned ${videos.length} videos`); - const videoIds = videos.map((v) => v.id); - - for (const videoId of videoIds) { - const youtubeLoader = new YoutubeLoader({ - videoIdOrUrl: videoId, - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - for await (const chunk of youtubeLoader.getUnfilteredChunks()) { - yield { - ...chunk, - metadata: { - ...chunk.metadata, - type: <'YoutubeChannelLoader'>'YoutubeChannelLoader', - originalSource: this.channelId, - }, - }; - } - } - } catch (e) { - this.debug('Could not get videos for channel', this.channelId, e); - } - } -} +import md5 from 'md5'; +import usetube from 'usetube'; +import createDebugMessages from 'debug'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { YoutubeLoader } from './youtube-loader.js'; + +export class YoutubeChannelLoader extends BaseLoader<{ type: 'YoutubeChannelLoader' }> { + private readonly debug = createDebugMessages('embedjs:loader:YoutubeChannelLoader'); + private readonly channelId: string; + + constructor({ + youtubeChannelId, + chunkSize, + chunkOverlap, + }: { + youtubeChannelId: string; + chunkSize?: number; + chunkOverlap?: number; + }) { + super(`YoutubeChannelLoader_${md5(youtubeChannelId)}`, { youtubeChannelId }, chunkSize ?? 2000, chunkOverlap); + this.channelId = youtubeChannelId; + } + + override async *getUnfilteredChunks() { + try { + const videos = await usetube.getChannelVideos(this.channelId); + this.debug(`Channel '${this.channelId}' returned ${videos.length} videos`); + const videoIds = videos.map((v) => v.id); + + for (const videoId of videoIds) { + const youtubeLoader = new YoutubeLoader({ + videoIdOrUrl: videoId, + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + for await (const chunk of youtubeLoader.getUnfilteredChunks()) { + yield { + ...chunk, + metadata: { + ...chunk.metadata, + type: 'YoutubeChannelLoader' as const, + originalSource: this.channelId, + }, + }; + } + } + } catch (e) { + this.debug('Could not get videos for channel', this.channelId, e); + } + } +} diff --git a/src/loaders/youtube-loader.ts b/loaders/embedjs-loader-youtube/src/youtube-loader.ts similarity index 88% rename from src/loaders/youtube-loader.ts rename to loaders/embedjs-loader-youtube/src/youtube-loader.ts index 09553e53..c09b23b5 100644 --- a/src/loaders/youtube-loader.ts +++ b/loaders/embedjs-loader-youtube/src/youtube-loader.ts @@ -1,51 +1,51 @@ -import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; -import { YoutubeTranscript } from 'youtube-transcript'; -import createDebugMessages from 'debug'; -import md5 from 'md5'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { cleanString } from '../util/strings.js'; - -export class YoutubeLoader extends BaseLoader<{ type: 'YoutubeLoader' }> { - private readonly debug = createDebugMessages('embedjs:loader:YoutubeLoader'); - private readonly videoIdOrUrl: string; - - constructor({ - videoIdOrUrl, - chunkSize, - chunkOverlap, - }: { - videoIdOrUrl: string; - chunkSize?: number; - chunkOverlap?: number; - }) { - super(`YoutubeLoader_${md5(videoIdOrUrl)}`, { videoIdOrUrl }, chunkSize ?? 2000, chunkOverlap ?? 0); - this.videoIdOrUrl = videoIdOrUrl; - } - - override async *getUnfilteredChunks() { - const chunker = new RecursiveCharacterTextSplitter({ - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - try { - const transcripts = await YoutubeTranscript.fetchTranscript(this.videoIdOrUrl, { lang: 'en' }); - this.debug(`Transcripts (length ${transcripts.length}) obtained for video`, this.videoIdOrUrl); - - for (const transcript of transcripts) { - for (const chunk of await chunker.splitText(cleanString(transcript.text))) { - yield { - pageContent: chunk, - metadata: { - type: <'YoutubeLoader'>'YoutubeLoader', - source: this.videoIdOrUrl, - }, - }; - } - } - } catch (e) { - this.debug('Could not get transcripts for video', this.videoIdOrUrl, e); - } - } -} +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; +import { YoutubeTranscript } from 'youtube-transcript'; +import createDebugMessages from 'debug'; +import md5 from 'md5'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { cleanString } from '@llm-tools/embedjs-utils'; + +export class YoutubeLoader extends BaseLoader<{ type: 'YoutubeLoader' }> { + private readonly debug = createDebugMessages('embedjs:loader:YoutubeLoader'); + private readonly videoIdOrUrl: string; + + constructor({ + videoIdOrUrl, + chunkSize, + chunkOverlap, + }: { + videoIdOrUrl: string; + chunkSize?: number; + chunkOverlap?: number; + }) { + super(`YoutubeLoader_${md5(videoIdOrUrl)}`, { videoIdOrUrl }, chunkSize ?? 2000, chunkOverlap ?? 0); + this.videoIdOrUrl = videoIdOrUrl; + } + + override async *getUnfilteredChunks() { + const chunker = new RecursiveCharacterTextSplitter({ + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + try { + const transcripts = await YoutubeTranscript.fetchTranscript(this.videoIdOrUrl, { lang: 'en' }); + this.debug(`Transcripts (length ${transcripts.length}) obtained for video`, this.videoIdOrUrl); + + for (const transcript of transcripts) { + for (const chunk of await chunker.splitText(cleanString(transcript.text))) { + yield { + pageContent: chunk, + metadata: { + type: 'YoutubeLoader' as const, + source: this.videoIdOrUrl, + }, + }; + } + } + } catch (e) { + this.debug('Could not get transcripts for video', this.videoIdOrUrl, e); + } + } +} diff --git a/src/loaders/youtube-search-loader.ts b/loaders/embedjs-loader-youtube/src/youtube-search-loader.ts similarity index 90% rename from src/loaders/youtube-search-loader.ts rename to loaders/embedjs-loader-youtube/src/youtube-search-loader.ts index 7d9b25d4..52b01630 100644 --- a/src/loaders/youtube-search-loader.ts +++ b/loaders/embedjs-loader-youtube/src/youtube-search-loader.ts @@ -1,60 +1,60 @@ -import md5 from 'md5'; -import usetube from 'usetube'; -import createDebugMessages from 'debug'; - -import { BaseLoader } from '../interfaces/base-loader.js'; -import { YoutubeChannelLoader } from './youtube-channel-loader.js'; - -export class YoutubeSearchLoader extends BaseLoader<{ type: 'YoutubeSearchLoader' }> { - private readonly debug = createDebugMessages('embedjs:loader:YoutubeSearchLoader'); - private readonly searchString: string; - - constructor({ - youtubeSearchString, - chunkSize, - chunkOverlap, - }: { - youtubeSearchString: string; - chunkSize?: number; - chunkOverlap?: number; - }) { - super( - `YoutubeSearchLoader${md5(youtubeSearchString)}`, - { youtubeSearchString }, - chunkSize ?? 2000, - chunkOverlap, - ); - this.searchString = youtubeSearchString; - } - - override async *getUnfilteredChunks() { - try { - const { channels } = await usetube.searchChannel(this.searchString); - this.debug( - `Search for channels with search string '${this.searchString}' found ${channels.length} entries`, - ); - const channelIds = channels.map((c) => c.channel_id); - - for (const youtubeChannelId of channelIds) { - const youtubeLoader = new YoutubeChannelLoader({ - youtubeChannelId, - chunkSize: this.chunkSize, - chunkOverlap: this.chunkOverlap, - }); - - for await (const chunk of youtubeLoader.getUnfilteredChunks()) { - yield { - ...chunk, - metadata: { - ...chunk.metadata, - type: <'YoutubeSearchLoader'>'YoutubeSearchLoader', - originalSource: this.searchString, - }, - }; - } - } - } catch (e) { - this.debug('Could not search for string', this.searchString, e); - } - } -} +import md5 from 'md5'; +import usetube from 'usetube'; +import createDebugMessages from 'debug'; + +import { BaseLoader } from '@llm-tools/embedjs-interfaces'; +import { YoutubeChannelLoader } from './youtube-channel-loader.js'; + +export class YoutubeSearchLoader extends BaseLoader<{ type: 'YoutubeSearchLoader' }> { + private readonly debug = createDebugMessages('embedjs:loader:YoutubeSearchLoader'); + private readonly searchString: string; + + constructor({ + youtubeSearchString, + chunkSize, + chunkOverlap, + }: { + youtubeSearchString: string; + chunkSize?: number; + chunkOverlap?: number; + }) { + super( + `YoutubeSearchLoader${md5(youtubeSearchString)}`, + { youtubeSearchString }, + chunkSize ?? 2000, + chunkOverlap, + ); + this.searchString = youtubeSearchString; + } + + override async *getUnfilteredChunks() { + try { + const { channels } = await usetube.searchChannel(this.searchString); + this.debug( + `Search for channels with search string '${this.searchString}' found ${channels.length} entries`, + ); + const channelIds = channels.map((c) => c.channel_id); + + for (const youtubeChannelId of channelIds) { + const youtubeLoader = new YoutubeChannelLoader({ + youtubeChannelId, + chunkSize: this.chunkSize, + chunkOverlap: this.chunkOverlap, + }); + + for await (const chunk of youtubeLoader.getUnfilteredChunks()) { + yield { + ...chunk, + metadata: { + ...chunk.metadata, + type: 'YoutubeSearchLoader' as const, + originalSource: this.searchString, + }, + }; + } + } + } catch (e) { + this.debug('Could not search for string', this.searchString, e); + } + } +} diff --git a/loaders/embedjs-loader-youtube/tsconfig.cjs.json b/loaders/embedjs-loader-youtube/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/loaders/embedjs-loader-youtube/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/loaders/embedjs-loader-youtube/tsconfig.json b/loaders/embedjs-loader-youtube/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/loaders/embedjs-loader-youtube/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/loaders/embedjs-loader-youtube/tsconfig.lib.json b/loaders/embedjs-loader-youtube/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/loaders/embedjs-loader-youtube/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/models/embedjs-anthropic/CHANGELOG.md b/models/embedjs-anthropic/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/models/embedjs-anthropic/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/models/embedjs-anthropic/README.md b/models/embedjs-anthropic/README.md new file mode 100644 index 00000000..7fb6e08d --- /dev/null +++ b/models/embedjs-anthropic/README.md @@ -0,0 +1,8 @@ +# embedjs-anthropic + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/models/embedjs-anthropic/eslint.config.js b/models/embedjs-anthropic/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/models/embedjs-anthropic/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/models/embedjs-anthropic/package.json b/models/embedjs-anthropic/package.json new file mode 100644 index 00000000..8cd3351f --- /dev/null +++ b/models/embedjs-anthropic/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-anthropic", + "version": "0.0.1", + "description": "Enable usage of Anthropic models with embedjs", + "dependencies": { + "debug": "^4.3.7", + "@langchain/core": "^0.3.6", + "@langchain/anthropic": "^0.3.3", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/models/embedjs-anthropic/project.json b/models/embedjs-anthropic/project.json new file mode 100644 index 00000000..b94b8dc8 --- /dev/null +++ b/models/embedjs-anthropic/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-anthropic", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "models/embedjs-anthropic/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-anthropic", + "main": "models/embedjs-anthropic/src/index.ts", + "tsConfig": "models/embedjs-anthropic/tsconfig.lib.json", + "assets": ["models/embedjs-anthropic/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-anthropic", + "main": "models/embedjs-anthropic/src/index.ts", + "tsConfig": "models/embedjs-anthropic/tsconfig.cjs.json" + } + } + } +} diff --git a/src/models/anthropic-model.ts b/models/embedjs-anthropic/src/anthropic-model.ts similarity index 87% rename from src/models/anthropic-model.ts rename to models/embedjs-anthropic/src/anthropic-model.ts index 36dff8e3..8e172e2f 100644 --- a/src/models/anthropic-model.ts +++ b/models/embedjs-anthropic/src/anthropic-model.ts @@ -1,56 +1,53 @@ -import createDebugMessages from 'debug'; -import { ChatAnthropic } from '@langchain/anthropic'; -import { HumanMessage, AIMessage, SystemMessage } from '@langchain/core/messages'; - -import { BaseModel } from '../interfaces/base-model.js'; -import { Chunk, Message, ModelResponse } from '../global/types.js'; - -export class Anthropic extends BaseModel { - private readonly debug = createDebugMessages('embedjs:model:Anthropic'); - private readonly modelName: string; - private model: ChatAnthropic; - - constructor(params?: { temperature?: number; modelName?: string }) { - super(params?.temperature); - this.modelName = params?.modelName ?? 'claude-3-sonnet-20240229'; - } - - override async init(): Promise { - this.model = new ChatAnthropic({ temperature: this.temperature, model: this.modelName }); - } - - override async runQuery( - system: string, - userQuery: string, - supportingContext: Chunk[], - pastConversations: Message[], - ): Promise { - const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [ - new SystemMessage( - `${system}. Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`, - ), - ]; - - pastMessages.push.apply( - pastMessages, - pastConversations.map((c) => { - if (c.actor === 'AI') return new AIMessage({ content: c.content }); - else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); - else return new HumanMessage({ content: c.content }); - }), - ); - pastMessages.push(new HumanMessage(`${userQuery}?`)); - - this.debug('Executing anthropic model with prompt -', userQuery); - const result = await this.model.invoke(pastMessages); - this.debug('Anthropic response -', result); - - return { - result: result.content.toString(), - tokenUse: { - inputTokens: result.response_metadata.usage.input_tokens, - outputTokens: result.response_metadata.usage.output_tokens, - }, - }; - } -} +import createDebugMessages from 'debug'; +import { ChatAnthropic } from '@langchain/anthropic'; +import { HumanMessage, AIMessage, SystemMessage } from '@langchain/core/messages'; +import { BaseModel, Chunk, Message, ModelResponse } from '@llm-tools/embedjs-interfaces'; + +export class Anthropic extends BaseModel { + private readonly debug = createDebugMessages('embedjs:model:Anthropic'); + private readonly modelName: string; + private model: ChatAnthropic; + + constructor(params?: { temperature?: number; modelName?: string }) { + super(params?.temperature); + this.modelName = params?.modelName ?? 'claude-3-sonnet-20240229'; + } + + override async init(): Promise { + this.model = new ChatAnthropic({ temperature: this.temperature, model: this.modelName }); + } + + override async runQuery( + system: string, + userQuery: string, + supportingContext: Chunk[], + pastConversations: Message[], + ): Promise { + const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [ + new SystemMessage( + `${system}. Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`, + ), + ]; + + pastMessages.push( + ...pastConversations.map((c) => { + if (c.actor === 'AI') return new AIMessage({ content: c.content }); + else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); + else return new HumanMessage({ content: c.content }); + }), + ); + pastMessages.push(new HumanMessage(`${userQuery}?`)); + + this.debug('Executing anthropic model with prompt -', userQuery); + const result = await this.model.invoke(pastMessages); + this.debug('Anthropic response -', result); + + return { + result: result.content.toString(), + tokenUse: { + inputTokens: result.response_metadata.usage.input_tokens, + outputTokens: result.response_metadata.usage.output_tokens, + }, + }; + } +} diff --git a/models/embedjs-anthropic/src/index.ts b/models/embedjs-anthropic/src/index.ts new file mode 100644 index 00000000..39467b0e --- /dev/null +++ b/models/embedjs-anthropic/src/index.ts @@ -0,0 +1 @@ +export * from './anthropic-model.js'; diff --git a/models/embedjs-anthropic/tsconfig.cjs.json b/models/embedjs-anthropic/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/models/embedjs-anthropic/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/models/embedjs-anthropic/tsconfig.json b/models/embedjs-anthropic/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/models/embedjs-anthropic/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/models/embedjs-anthropic/tsconfig.lib.json b/models/embedjs-anthropic/tsconfig.lib.json new file mode 100644 index 00000000..d5488f87 --- /dev/null +++ b/models/embedjs-anthropic/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/models/embedjs-cohere/CHANGELOG.md b/models/embedjs-cohere/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/models/embedjs-cohere/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/models/embedjs-cohere/README.md b/models/embedjs-cohere/README.md new file mode 100644 index 00000000..34269246 --- /dev/null +++ b/models/embedjs-cohere/README.md @@ -0,0 +1,8 @@ +# embedjs-cohere + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/models/embedjs-cohere/eslint.config.js b/models/embedjs-cohere/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/models/embedjs-cohere/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/models/embedjs-cohere/package.json b/models/embedjs-cohere/package.json new file mode 100644 index 00000000..c0958e23 --- /dev/null +++ b/models/embedjs-cohere/package.json @@ -0,0 +1,39 @@ +{ + "name": "@llm-tools/embedjs-cohere", + "version": "0.0.1", + "description": "Enable usage of Cohere models with embedjs", + "dependencies": { + "cohere-ai": "^7.14.0", + "@langchain/cohere": "^0.3.0", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/models/embedjs-cohere/project.json b/models/embedjs-cohere/project.json new file mode 100644 index 00000000..12a8fa4b --- /dev/null +++ b/models/embedjs-cohere/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-cohere", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "models/embedjs-cohere/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-cohere", + "main": "models/embedjs-cohere/src/index.ts", + "tsConfig": "models/embedjs-cohere/tsconfig.lib.json", + "assets": ["models/embedjs-cohere/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-cohere", + "main": "models/embedjs-cohere/src/index.ts", + "tsConfig": "models/embedjs-cohere/tsconfig.cjs.json" + } + } + } +} diff --git a/src/embeddings/cohere-embeddings.ts b/models/embedjs-cohere/src/cohere-embeddings.ts similarity index 87% rename from src/embeddings/cohere-embeddings.ts rename to models/embedjs-cohere/src/cohere-embeddings.ts index 7b4ee85f..e7c90d63 100644 --- a/src/embeddings/cohere-embeddings.ts +++ b/models/embedjs-cohere/src/cohere-embeddings.ts @@ -1,27 +1,26 @@ -import { CohereEmbeddings as LangChainCohereEmbeddings } from '@langchain/cohere'; - -import { BaseEmbeddings } from '../interfaces/base-embeddings.js'; - -export class CohereEmbeddings implements BaseEmbeddings { - private model: LangChainCohereEmbeddings; - - constructor() { - this.model = new LangChainCohereEmbeddings({ - model: 'embed-english-v2.0', - maxConcurrency: 3, - maxRetries: 5, - }); - } - - async getDimensions(): Promise { - return 4096; - } - - async embedDocuments(texts: string[]): Promise { - return this.model.embedDocuments(texts); - } - - async embedQuery(text: string): Promise { - return this.model.embedQuery(text); - } -} +import { CohereEmbeddings as LangChainCohereEmbeddings } from '@langchain/cohere'; +import { BaseEmbeddings } from '@llm-tools/embedjs-interfaces'; + +export class CohereEmbeddings implements BaseEmbeddings { + private model: LangChainCohereEmbeddings; + + constructor() { + this.model = new LangChainCohereEmbeddings({ + model: 'embed-english-v2.0', + maxConcurrency: 3, + maxRetries: 5, + }); + } + + async getDimensions(): Promise { + return 4096; + } + + async embedDocuments(texts: string[]): Promise { + return this.model.embedDocuments(texts); + } + + async embedQuery(text: string): Promise { + return this.model.embedQuery(text); + } +} diff --git a/models/embedjs-cohere/src/index.ts b/models/embedjs-cohere/src/index.ts new file mode 100644 index 00000000..a6ea83bd --- /dev/null +++ b/models/embedjs-cohere/src/index.ts @@ -0,0 +1 @@ +export * from './cohere-embeddings.js'; diff --git a/models/embedjs-cohere/tsconfig.cjs.json b/models/embedjs-cohere/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/models/embedjs-cohere/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/models/embedjs-cohere/tsconfig.json b/models/embedjs-cohere/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/models/embedjs-cohere/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/models/embedjs-cohere/tsconfig.lib.json b/models/embedjs-cohere/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/models/embedjs-cohere/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/models/embedjs-huggingface/CHANGELOG.md b/models/embedjs-huggingface/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/models/embedjs-huggingface/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/models/embedjs-huggingface/README.md b/models/embedjs-huggingface/README.md new file mode 100644 index 00000000..dce18a8a --- /dev/null +++ b/models/embedjs-huggingface/README.md @@ -0,0 +1,8 @@ +# embedjs-huggingface + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/models/embedjs-huggingface/eslint.config.js b/models/embedjs-huggingface/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/models/embedjs-huggingface/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/models/embedjs-huggingface/package.json b/models/embedjs-huggingface/package.json new file mode 100644 index 00000000..b7fbd554 --- /dev/null +++ b/models/embedjs-huggingface/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-huggingface", + "version": "0.0.1", + "description": "Enable usage of HuggingFace models with embedjs", + "dependencies": { + "debug": "^4.3.7", + "@langchain/community": "^0.3.4", + "@huggingface/inference": "^2.8.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/models/embedjs-huggingface/project.json b/models/embedjs-huggingface/project.json new file mode 100644 index 00000000..94180f1d --- /dev/null +++ b/models/embedjs-huggingface/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-huggingface", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "models/embedjs-huggingface/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-huggingface", + "main": "models/embedjs-huggingface/src/index.ts", + "tsConfig": "models/embedjs-huggingface/tsconfig.lib.json", + "assets": ["models/embedjs-huggingface/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-huggingface", + "main": "models/embedjs-huggingface/src/index.ts", + "tsConfig": "models/embedjs-huggingface/tsconfig.cjs.json" + } + } + } +} diff --git a/src/models/huggingface-model.ts b/models/embedjs-huggingface/src/huggingface-model.ts similarity index 87% rename from src/models/huggingface-model.ts rename to models/embedjs-huggingface/src/huggingface-model.ts index d0d83aa8..d6906dd3 100644 --- a/src/models/huggingface-model.ts +++ b/models/embedjs-huggingface/src/huggingface-model.ts @@ -1,65 +1,62 @@ -import createDebugMessages from 'debug'; -import { HuggingFaceInference } from '@langchain/community/llms/hf'; - -import { BaseModel } from '../interfaces/base-model.js'; -import { Chunk, Message, ModelResponse } from '../global/types.js'; - -export class HuggingFace extends BaseModel { - private readonly debug = createDebugMessages('embedjs:model:HuggingFace'); - - private readonly modelName: string; - private readonly maxNewTokens: number; - private readonly endpointUrl?: string; - private model: HuggingFaceInference; - - constructor(params?: { modelName?: string; temperature?: number; maxNewTokens?: number; endpointUrl?: string }) { - super(params?.temperature); - - this.endpointUrl = params?.endpointUrl; - this.maxNewTokens = params?.maxNewTokens ?? 300; - this.modelName = params?.modelName ?? 'mistralai/Mixtral-8x7B-Instruct-v0.1'; - } - - override async init(): Promise { - this.model = new HuggingFaceInference({ - model: this.modelName, - maxTokens: this.maxNewTokens, - temperature: this.temperature, - endpointUrl: this.endpointUrl, - verbose: false, - maxRetries: 1, - }); - } - - override async runQuery( - system: string, - userQuery: string, - supportingContext: Chunk[], - pastConversations: Message[], - ): Promise { - const pastMessages = [system]; - pastMessages.push(`Data: ${supportingContext.map((s) => s.pageContent).join('; ')}`); - - pastMessages.push.apply( - pastMessages, - pastConversations.map((c) => { - if (c.actor === 'AI') return `AI: ${c.content}`; - else if (c.actor === 'SYSTEM') return `SYSTEM: ${c.content}`; - else return `HUMAN: ${c.content}`; - }), - ); - - pastMessages.push(`Question: ${userQuery}?`); - pastMessages.push('Answer: '); - - const finalPrompt = pastMessages.join('\n'); - // this.debug('Final prompt being sent to HF - ', finalPrompt); - this.debug(`Executing hugging face '${this.model.model}' model with prompt -`, userQuery); - const result = await this.model.invoke(finalPrompt); - this.debug('Hugging response -', result); - - return { - result, - }; - } -} +import createDebugMessages from 'debug'; +import { HuggingFaceInference } from '@langchain/community/llms/hf'; +import { BaseModel, Chunk, Message, ModelResponse } from '@llm-tools/embedjs-interfaces'; + +export class HuggingFace extends BaseModel { + private readonly debug = createDebugMessages('embedjs:model:HuggingFace'); + + private readonly modelName: string; + private readonly maxNewTokens: number; + private readonly endpointUrl?: string; + private model: HuggingFaceInference; + + constructor(params?: { modelName?: string; temperature?: number; maxNewTokens?: number; endpointUrl?: string }) { + super(params?.temperature); + + this.endpointUrl = params?.endpointUrl; + this.maxNewTokens = params?.maxNewTokens ?? 300; + this.modelName = params?.modelName ?? 'mistralai/Mixtral-8x7B-Instruct-v0.1'; + } + + override async init(): Promise { + this.model = new HuggingFaceInference({ + model: this.modelName, + maxTokens: this.maxNewTokens, + temperature: this.temperature, + endpointUrl: this.endpointUrl, + verbose: false, + maxRetries: 1, + }); + } + + override async runQuery( + system: string, + userQuery: string, + supportingContext: Chunk[], + pastConversations: Message[], + ): Promise { + const pastMessages = [system]; + pastMessages.push(`Data: ${supportingContext.map((s) => s.pageContent).join('; ')}`); + + pastMessages.push( + ...pastConversations.map((c) => { + if (c.actor === 'AI') return `AI: ${c.content}`; + else if (c.actor === 'SYSTEM') return `SYSTEM: ${c.content}`; + else return `HUMAN: ${c.content}`; + }), + ); + + pastMessages.push(`Question: ${userQuery}?`); + pastMessages.push('Answer: '); + + const finalPrompt = pastMessages.join('\n'); + // this.debug('Final prompt being sent to HF - ', finalPrompt); + this.debug(`Executing hugging face '${this.model.model}' model with prompt -`, userQuery); + const result = await this.model.invoke(finalPrompt); + this.debug('Hugging response -', result); + + return { + result, + }; + } +} diff --git a/models/embedjs-huggingface/src/index.ts b/models/embedjs-huggingface/src/index.ts new file mode 100644 index 00000000..b3f09087 --- /dev/null +++ b/models/embedjs-huggingface/src/index.ts @@ -0,0 +1 @@ +export * from './huggingface-model.js'; diff --git a/models/embedjs-huggingface/tsconfig.cjs.json b/models/embedjs-huggingface/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/models/embedjs-huggingface/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/models/embedjs-huggingface/tsconfig.json b/models/embedjs-huggingface/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/models/embedjs-huggingface/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/models/embedjs-huggingface/tsconfig.lib.json b/models/embedjs-huggingface/tsconfig.lib.json new file mode 100644 index 00000000..d5488f87 --- /dev/null +++ b/models/embedjs-huggingface/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/models/embedjs-mistral/CHANGELOG.md b/models/embedjs-mistral/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/models/embedjs-mistral/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/models/embedjs-mistral/README.md b/models/embedjs-mistral/README.md new file mode 100644 index 00000000..4c7a2e6e --- /dev/null +++ b/models/embedjs-mistral/README.md @@ -0,0 +1,8 @@ +# embedjs-mistral + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/models/embedjs-mistral/eslint.config.js b/models/embedjs-mistral/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/models/embedjs-mistral/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/models/embedjs-mistral/package.json b/models/embedjs-mistral/package.json new file mode 100644 index 00000000..2813e4e1 --- /dev/null +++ b/models/embedjs-mistral/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-mistral", + "version": "0.0.1", + "description": "Enable usage of Mistral models with embedjs", + "dependencies": { + "debug": "^4.3.7", + "@langchain/core": "^0.3.6", + "@langchain/mistralai": "^0.1.1", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/models/embedjs-mistral/project.json b/models/embedjs-mistral/project.json new file mode 100644 index 00000000..2defbd87 --- /dev/null +++ b/models/embedjs-mistral/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-mistral", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "models/embedjs-mistral/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-mistral", + "main": "models/embedjs-mistral/src/index.ts", + "tsConfig": "models/embedjs-mistral/tsconfig.lib.json", + "assets": ["models/embedjs-mistral/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-mistral", + "main": "models/embedjs-mistral/src/index.ts", + "tsConfig": "models/embedjs-mistral/tsconfig.cjs.json" + } + } + } +} diff --git a/models/embedjs-mistral/src/index.ts b/models/embedjs-mistral/src/index.ts new file mode 100644 index 00000000..9a8b7f01 --- /dev/null +++ b/models/embedjs-mistral/src/index.ts @@ -0,0 +1 @@ +export * from './mistral-model.js'; diff --git a/src/models/mistral-model.ts b/models/embedjs-mistral/src/mistral-model.ts similarity index 85% rename from src/models/mistral-model.ts rename to models/embedjs-mistral/src/mistral-model.ts index 04ab4e36..4dccd7bc 100644 --- a/src/models/mistral-model.ts +++ b/models/embedjs-mistral/src/mistral-model.ts @@ -1,54 +1,51 @@ -import createDebugMessages from 'debug'; -import { ChatMistralAI } from '@langchain/mistralai'; -import { AIMessage, HumanMessage, SystemMessage } from '@langchain/core/messages'; - -import { Chunk, Message, ModelResponse } from '../global/types.js'; -import { BaseModel } from '../interfaces/base-model.js'; - -export class Mistral extends BaseModel { - private readonly debug = createDebugMessages('embedjs:model:Mistral'); - private model: ChatMistralAI; - - constructor({ - temperature, - accessToken, - modelName, - }: { - temperature?: number; - accessToken: string; - modelName?: string; - }) { - super(temperature); - this.model = new ChatMistralAI({ apiKey: accessToken, model: modelName ?? 'mistral-medium' }); - } - - override async runQuery( - system: string, - userQuery: string, - supportingContext: Chunk[], - pastConversations: Message[], - ): Promise { - const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [new SystemMessage(system)]; - pastMessages.push( - new SystemMessage(`Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`), - ); - - pastMessages.push.apply( - pastMessages, - pastConversations.map((c) => { - if (c.actor === 'AI') return new AIMessage({ content: c.content }); - else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); - else return new HumanMessage({ content: c.content }); - }), - ); - pastMessages.push(new HumanMessage(`${userQuery}?`)); - - this.debug('Executing mistral model with prompt -', userQuery); - const result = await this.model.invoke(pastMessages); - this.debug('Mistral response -', result); - - return { - result: result.content.toString(), - }; - } -} +import createDebugMessages from 'debug'; +import { ChatMistralAI } from '@langchain/mistralai'; +import { AIMessage, HumanMessage, SystemMessage } from '@langchain/core/messages'; +import { BaseModel, Chunk, Message, ModelResponse } from '@llm-tools/embedjs-interfaces'; + +export class Mistral extends BaseModel { + private readonly debug = createDebugMessages('embedjs:model:Mistral'); + private model: ChatMistralAI; + + constructor({ + temperature, + accessToken, + modelName, + }: { + temperature?: number; + accessToken: string; + modelName?: string; + }) { + super(temperature); + this.model = new ChatMistralAI({ apiKey: accessToken, model: modelName ?? 'mistral-medium' }); + } + + override async runQuery( + system: string, + userQuery: string, + supportingContext: Chunk[], + pastConversations: Message[], + ): Promise { + const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [new SystemMessage(system)]; + pastMessages.push( + new SystemMessage(`Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`), + ); + + pastMessages.push( + ...pastConversations.map((c) => { + if (c.actor === 'AI') return new AIMessage({ content: c.content }); + else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); + else return new HumanMessage({ content: c.content }); + }), + ); + pastMessages.push(new HumanMessage(`${userQuery}?`)); + + this.debug('Executing mistral model with prompt -', userQuery); + const result = await this.model.invoke(pastMessages); + this.debug('Mistral response -', result); + + return { + result: result.content.toString(), + }; + } +} diff --git a/models/embedjs-mistral/tsconfig.cjs.json b/models/embedjs-mistral/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/models/embedjs-mistral/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/models/embedjs-mistral/tsconfig.json b/models/embedjs-mistral/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/models/embedjs-mistral/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/models/embedjs-mistral/tsconfig.lib.json b/models/embedjs-mistral/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/models/embedjs-mistral/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/models/embedjs-ollama/CHANGELOG.md b/models/embedjs-ollama/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/models/embedjs-ollama/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/models/embedjs-ollama/README.md b/models/embedjs-ollama/README.md new file mode 100644 index 00000000..319c3989 --- /dev/null +++ b/models/embedjs-ollama/README.md @@ -0,0 +1,8 @@ +# embedjs-ollama + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/models/embedjs-ollama/eslint.config.js b/models/embedjs-ollama/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/models/embedjs-ollama/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/models/embedjs-ollama/package.json b/models/embedjs-ollama/package.json new file mode 100644 index 00000000..2ee08589 --- /dev/null +++ b/models/embedjs-ollama/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-ollama", + "version": "0.0.1", + "description": "Enable usage of Ollama with embedjs", + "dependencies": { + "debug": "^4.3.7", + "@langchain/core": "^0.3.6", + "@langchain/ollama": "^0.1.0", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/models/embedjs-ollama/project.json b/models/embedjs-ollama/project.json new file mode 100644 index 00000000..30eb07fb --- /dev/null +++ b/models/embedjs-ollama/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-ollama", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "models/embedjs-ollama/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-ollama", + "main": "models/embedjs-ollama/src/index.ts", + "tsConfig": "models/embedjs-ollama/tsconfig.lib.json", + "assets": ["models/embedjs-ollama/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-ollama", + "main": "models/embedjs-ollama/src/index.ts", + "tsConfig": "models/embedjs-ollama/tsconfig.cjs.json" + } + } + } +} diff --git a/models/embedjs-ollama/src/index.ts b/models/embedjs-ollama/src/index.ts new file mode 100644 index 00000000..46eb6105 --- /dev/null +++ b/models/embedjs-ollama/src/index.ts @@ -0,0 +1,2 @@ +export * from './ollama-model.js'; +export * from './ollama-embeddings.js'; diff --git a/src/embeddings/ollama-embeddings.ts b/models/embedjs-ollama/src/ollama-embeddings.ts similarity index 73% rename from src/embeddings/ollama-embeddings.ts rename to models/embedjs-ollama/src/ollama-embeddings.ts index 625e9f10..74b36e81 100644 --- a/src/embeddings/ollama-embeddings.ts +++ b/models/embedjs-ollama/src/ollama-embeddings.ts @@ -1,38 +1,34 @@ -import { OllamaEmbeddings as OllamaEmbedding } from '@langchain/community/embeddings/ollama'; -import { OllamaInput } from '@langchain/community/llms/ollama'; - -import { BaseEmbeddings } from '../interfaces/base-embeddings.js'; - -export class OllamaEmbeddings implements BaseEmbeddings { - private model: OllamaEmbedding; - - constructor(options: { - model: string; - baseUrl: string; - /** Defaults to "5m" */ - keepAlive?: string; - headers?: Record; - requestOptions?: Omit; - }) { - this.model = new OllamaEmbedding({ - model: options.model, - baseUrl: options.baseUrl, - keepAlive: options?.keepAlive, - headers: options?.headers, - requestOptions: options?.requestOptions, - }); - } - - async getDimensions(): Promise { - const sample = await this.model.embedDocuments(['sample']); - return sample[0].length; - } - - async embedDocuments(texts: string[]): Promise { - return this.model.embedDocuments(texts); - } - - async embedQuery(text: string): Promise { - return this.model.embedQuery(text); - } -} +import { OllamaEmbeddings as OllamaEmbedding, OllamaInput } from '@langchain/ollama'; +import { BaseEmbeddings } from '@llm-tools/embedjs-interfaces'; + +export class OllamaEmbeddings implements BaseEmbeddings { + private model: OllamaEmbedding; + + constructor(options: { + model: string; + baseUrl: string; + /** Defaults to "5m" */ + keepAlive?: string; + requestOptions?: Omit; + }) { + this.model = new OllamaEmbedding({ + model: options.model, + baseUrl: options.baseUrl, + keepAlive: options?.keepAlive, + requestOptions: options?.requestOptions, + }); + } + + async getDimensions(): Promise { + const sample = await this.model.embedDocuments(['sample']); + return sample[0].length; + } + + async embedDocuments(texts: string[]): Promise { + return this.model.embedDocuments(texts); + } + + async embedQuery(text: string): Promise { + return this.model.embedQuery(text); + } +} diff --git a/src/models/ollama-model.ts b/models/embedjs-ollama/src/ollama-model.ts similarity index 82% rename from src/models/ollama-model.ts rename to models/embedjs-ollama/src/ollama-model.ts index 68bc15f6..e66dcfbc 100644 --- a/src/models/ollama-model.ts +++ b/models/embedjs-ollama/src/ollama-model.ts @@ -1,49 +1,46 @@ -import createDebugMessages from 'debug'; -import { Ollama as ChatOllamaAI } from '@langchain/community/llms/ollama'; -import { AIMessage, HumanMessage, SystemMessage } from '@langchain/core/messages'; - -import { Chunk, Message, ModelResponse } from '../global/types.js'; -import { BaseModel } from '../interfaces/base-model.js'; - -export class Ollama extends BaseModel { - private readonly debug = createDebugMessages('embedjs:model:Ollama'); - private model: ChatOllamaAI; - - constructor({ baseUrl, temperature, modelName }: { baseUrl?: string; temperature?: number; modelName?: string }) { - super(temperature); - this.model = new ChatOllamaAI({ - model: modelName ?? 'llama2', - baseUrl: baseUrl ?? 'http://localhost:11434', - }); - } - - override async runQuery( - system: string, - userQuery: string, - supportingContext: Chunk[], - pastConversations: Message[], - ): Promise { - const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [new SystemMessage(system)]; - pastMessages.push( - new SystemMessage(`Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`), - ); - - pastMessages.push.apply( - pastMessages, - pastConversations.map((c) => { - if (c.actor === 'AI') return new AIMessage({ content: c.content }); - else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); - else return new HumanMessage({ content: c.content }); - }), - ); - pastMessages.push(new HumanMessage(`${userQuery}?`)); - - this.debug(`Executing ollama model ${this.model} with prompt -`, userQuery); - const result = await this.model.invoke(pastMessages); - this.debug('Ollama response -', result); - - return { - result: result.toString(), - }; - } -} +import createDebugMessages from 'debug'; +import { Ollama as ChatOllamaAI } from '@langchain/ollama'; +import { AIMessage, HumanMessage, SystemMessage } from '@langchain/core/messages'; +import { BaseModel, Chunk, Message, ModelResponse } from '@llm-tools/embedjs-interfaces'; + +export class Ollama extends BaseModel { + private readonly debug = createDebugMessages('embedjs:model:Ollama'); + private model: ChatOllamaAI; + + constructor({ baseUrl, temperature, modelName }: { baseUrl?: string; temperature?: number; modelName?: string }) { + super(temperature); + this.model = new ChatOllamaAI({ + model: modelName ?? 'llama2', + baseUrl: baseUrl ?? 'http://localhost:11434', + }); + } + + override async runQuery( + system: string, + userQuery: string, + supportingContext: Chunk[], + pastConversations: Message[], + ): Promise { + const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [new SystemMessage(system)]; + pastMessages.push( + new SystemMessage(`Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`), + ); + + pastMessages.push( + ...pastConversations.map((c) => { + if (c.actor === 'AI') return new AIMessage({ content: c.content }); + else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); + else return new HumanMessage({ content: c.content }); + }), + ); + pastMessages.push(new HumanMessage(`${userQuery}?`)); + + this.debug(`Executing ollama model ${this.model} with prompt -`, userQuery); + const result = await this.model.invoke(pastMessages); + this.debug('Ollama response -', result); + + return { + result: result.toString(), + }; + } +} diff --git a/models/embedjs-ollama/tsconfig.cjs.json b/models/embedjs-ollama/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/models/embedjs-ollama/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/models/embedjs-ollama/tsconfig.json b/models/embedjs-ollama/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/models/embedjs-ollama/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/models/embedjs-ollama/tsconfig.lib.json b/models/embedjs-ollama/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/models/embedjs-ollama/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/models/embedjs-openai/CHANGELOG.md b/models/embedjs-openai/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/models/embedjs-openai/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/models/embedjs-openai/README.md b/models/embedjs-openai/README.md new file mode 100644 index 00000000..c441e43f --- /dev/null +++ b/models/embedjs-openai/README.md @@ -0,0 +1,8 @@ +# embedjs-openai + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/models/embedjs-openai/eslint.config.js b/models/embedjs-openai/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/models/embedjs-openai/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/models/embedjs-openai/package.json b/models/embedjs-openai/package.json new file mode 100644 index 00000000..b28f5f20 --- /dev/null +++ b/models/embedjs-openai/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-openai", + "version": "0.0.1", + "description": "Enable usage of OpenAI models with embedjs", + "dependencies": { + "debug": "^4.3.7", + "@langchain/core": "^0.3.6", + "@langchain/openai": "^0.3.5", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/models/embedjs-openai/project.json b/models/embedjs-openai/project.json new file mode 100644 index 00000000..378a4921 --- /dev/null +++ b/models/embedjs-openai/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-openai", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "models/embedjs-openai/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-openai", + "main": "models/embedjs-openai/src/index.ts", + "tsConfig": "models/embedjs-openai/tsconfig.lib.json", + "assets": ["models/embedjs-openai/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-openai", + "main": "models/embedjs-openai/src/index.ts", + "tsConfig": "models/embedjs-openai/tsconfig.cjs.json" + } + } + } +} diff --git a/src/embeddings/ada-embeddings.ts b/models/embedjs-openai/src/ada-embeddings.ts similarity index 89% rename from src/embeddings/ada-embeddings.ts rename to models/embedjs-openai/src/ada-embeddings.ts index 85623421..8a6648f8 100644 --- a/src/embeddings/ada-embeddings.ts +++ b/models/embedjs-openai/src/ada-embeddings.ts @@ -1,27 +1,27 @@ -import { ClientOptions, OpenAIEmbeddings } from '@langchain/openai'; -import { BaseEmbeddings } from '../interfaces/base-embeddings.js'; - -export class AdaEmbeddings implements BaseEmbeddings { - private model: OpenAIEmbeddings; - - constructor(options?: { configuration?: ClientOptions; maxConcurrency: number; maxRetries: number }) { - this.model = new OpenAIEmbeddings({ - modelName: 'text-embedding-ada-002', - configuration: options?.configuration, - maxConcurrency: options?.maxConcurrency ?? 3, - maxRetries: options?.maxRetries ?? 5, - }); - } - - async getDimensions(): Promise { - return 1536; - } - - async embedDocuments(texts: string[]): Promise { - return this.model.embedDocuments(texts); - } - - async embedQuery(text: string): Promise { - return this.model.embedQuery(text); - } -} +import { ClientOptions, OpenAIEmbeddings } from '@langchain/openai'; +import { BaseEmbeddings } from '@llm-tools/embedjs-interfaces'; + +export class AdaEmbeddings implements BaseEmbeddings { + private model: OpenAIEmbeddings; + + constructor(options?: { configuration?: ClientOptions; maxConcurrency: number; maxRetries: number }) { + this.model = new OpenAIEmbeddings({ + modelName: 'text-embedding-ada-002', + configuration: options?.configuration, + maxConcurrency: options?.maxConcurrency ?? 3, + maxRetries: options?.maxRetries ?? 5, + }); + } + + async getDimensions(): Promise { + return 1536; + } + + async embedDocuments(texts: string[]): Promise { + return this.model.embedDocuments(texts); + } + + async embedQuery(text: string): Promise { + return this.model.embedQuery(text); + } +} diff --git a/models/embedjs-openai/src/index.ts b/models/embedjs-openai/src/index.ts new file mode 100644 index 00000000..9d6cc0c1 --- /dev/null +++ b/models/embedjs-openai/src/index.ts @@ -0,0 +1,4 @@ +export * from './ada-embeddings.js'; +export * from './openai-3small-embeddings.js'; +export * from './openai-3large-embeddings.js'; +export * from './openai-model.js'; diff --git a/src/embeddings/openai-3large-embeddings.ts b/models/embedjs-openai/src/openai-3large-embeddings.ts similarity index 91% rename from src/embeddings/openai-3large-embeddings.ts rename to models/embedjs-openai/src/openai-3large-embeddings.ts index 1881ed59..3b7c1184 100644 --- a/src/embeddings/openai-3large-embeddings.ts +++ b/models/embedjs-openai/src/openai-3large-embeddings.ts @@ -1,35 +1,35 @@ -import { ClientOptions, OpenAIEmbeddings } from '@langchain/openai'; -import { BaseEmbeddings } from '../interfaces/base-embeddings.js'; - -export class OpenAi3LargeEmbeddings implements BaseEmbeddings { - private model: OpenAIEmbeddings; - private readonly dynamicDimension: number; - - constructor(options?: { - configuration?: ClientOptions; - dynamicDimension?: number; - maxConcurrency: number; - maxRetries: number; - }) { - this.dynamicDimension = options?.dynamicDimension ?? 3072; - - this.model = new OpenAIEmbeddings({ - modelName: 'text-embedding-3-large', - configuration: options?.configuration, - maxConcurrency: options?.maxConcurrency ?? 3, - maxRetries: options?.maxRetries ?? 5, - }); - } - - async getDimensions(): Promise { - return this.dynamicDimension; - } - - async embedDocuments(texts: string[]): Promise { - return this.model.embedDocuments(texts); - } - - async embedQuery(text: string): Promise { - return this.model.embedQuery(text); - } -} +import { ClientOptions, OpenAIEmbeddings } from '@langchain/openai'; +import { BaseEmbeddings } from '@llm-tools/embedjs-interfaces'; + +export class OpenAi3LargeEmbeddings implements BaseEmbeddings { + private model: OpenAIEmbeddings; + private readonly dynamicDimension: number; + + constructor(options?: { + configuration?: ClientOptions; + dynamicDimension?: number; + maxConcurrency: number; + maxRetries: number; + }) { + this.dynamicDimension = options?.dynamicDimension ?? 3072; + + this.model = new OpenAIEmbeddings({ + modelName: 'text-embedding-3-large', + configuration: options?.configuration, + maxConcurrency: options?.maxConcurrency ?? 3, + maxRetries: options?.maxRetries ?? 5, + }); + } + + async getDimensions(): Promise { + return this.dynamicDimension; + } + + async embedDocuments(texts: string[]): Promise { + return this.model.embedDocuments(texts); + } + + async embedQuery(text: string): Promise { + return this.model.embedQuery(text); + } +} diff --git a/src/embeddings/openai-3small-embeddings.ts b/models/embedjs-openai/src/openai-3small-embeddings.ts similarity index 90% rename from src/embeddings/openai-3small-embeddings.ts rename to models/embedjs-openai/src/openai-3small-embeddings.ts index 6481cc46..7376a476 100644 --- a/src/embeddings/openai-3small-embeddings.ts +++ b/models/embedjs-openai/src/openai-3small-embeddings.ts @@ -1,27 +1,27 @@ -import { ClientOptions, OpenAIEmbeddings } from '@langchain/openai'; -import { BaseEmbeddings } from '../interfaces/base-embeddings.js'; - -export class OpenAi3SmallEmbeddings implements BaseEmbeddings { - private model: OpenAIEmbeddings; - - constructor(options?: { configuration?: ClientOptions; maxConcurrency: number; maxRetries: number }) { - this.model = new OpenAIEmbeddings({ - modelName: 'text-embedding-3-small', - configuration: options?.configuration, - maxConcurrency: options?.maxConcurrency ?? 3, - maxRetries: options?.maxRetries ?? 5, - }); - } - - async getDimensions(): Promise { - return 1536; - } - - async embedDocuments(texts: string[]): Promise { - return this.model.embedDocuments(texts); - } - - async embedQuery(text: string): Promise { - return this.model.embedQuery(text); - } -} +import { ClientOptions, OpenAIEmbeddings } from '@langchain/openai'; +import { BaseEmbeddings } from '@llm-tools/embedjs-interfaces'; + +export class OpenAi3SmallEmbeddings implements BaseEmbeddings { + private model: OpenAIEmbeddings; + + constructor(options?: { configuration?: ClientOptions; maxConcurrency: number; maxRetries: number }) { + this.model = new OpenAIEmbeddings({ + modelName: 'text-embedding-3-small', + configuration: options?.configuration, + maxConcurrency: options?.maxConcurrency ?? 3, + maxRetries: options?.maxRetries ?? 5, + }); + } + + async getDimensions(): Promise { + return 1536; + } + + async embedDocuments(texts: string[]): Promise { + return this.model.embedDocuments(texts); + } + + async embedQuery(text: string): Promise { + return this.model.embedQuery(text); + } +} diff --git a/src/models/openai-model.ts b/models/embedjs-openai/src/openai-model.ts similarity index 88% rename from src/models/openai-model.ts rename to models/embedjs-openai/src/openai-model.ts index ee71d3b5..82af365c 100644 --- a/src/models/openai-model.ts +++ b/models/embedjs-openai/src/openai-model.ts @@ -1,69 +1,66 @@ -import createDebugMessages from 'debug'; -import { ChatOpenAI, ClientOptions } from '@langchain/openai'; -import { HumanMessage, AIMessage, SystemMessage } from '@langchain/core/messages'; - -import { BaseModel } from '../interfaces/base-model.js'; -import { Chunk, Message, ModelResponse } from '../global/types.js'; - -export class OpenAi extends BaseModel { - private readonly debug = createDebugMessages('embedjs:model:OpenAi'); - private readonly configuration: ClientOptions; - private readonly modelName: string; - private model: ChatOpenAI; - - constructor({ - modelName, - temperature, - configuration, - }: { - modelName: string; - temperature?: number; - configuration?: ClientOptions; - }) { - super(temperature); - this.modelName = modelName; - this.configuration = configuration; - } - - override async init(): Promise { - this.model = new ChatOpenAI({ - temperature: this.temperature, - model: this.modelName, - configuration: this.configuration, - }); - } - - override async runQuery( - system: string, - userQuery: string, - supportingContext: Chunk[], - pastConversations: Message[], - ): Promise { - const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [new SystemMessage(system)]; - pastMessages.push( - new SystemMessage(`Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`), - ); - - pastMessages.push.apply( - pastMessages, - pastConversations.map((c) => { - if (c.actor === 'AI') return new AIMessage({ content: c.content }); - else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); - else return new HumanMessage({ content: c.content }); - }), - ); - pastMessages.push(new HumanMessage(`${userQuery}?`)); - - this.debug('Executing openai model with prompt -', userQuery); - const result = await this.model.invoke(pastMessages); - this.debug('OpenAI response -', result); - - return { - result: result.content.toString(), - tokenUse: { - inputTokens: result.response_metadata.tokenUsage.promptTokens, - outputTokens: result.response_metadata.tokenUsage.completionTokens, - }, - }; - } -} +import createDebugMessages from 'debug'; +import { ChatOpenAI, ClientOptions } from '@langchain/openai'; +import { HumanMessage, AIMessage, SystemMessage } from '@langchain/core/messages'; +import { BaseModel, Chunk, Message, ModelResponse } from '@llm-tools/embedjs-interfaces'; + +export class OpenAi extends BaseModel { + private readonly debug = createDebugMessages('embedjs:model:OpenAi'); + private readonly configuration: ClientOptions; + private readonly modelName: string; + private model: ChatOpenAI; + + constructor({ + modelName, + temperature, + configuration, + }: { + modelName: string; + temperature?: number; + configuration?: ClientOptions; + }) { + super(temperature); + this.modelName = modelName; + this.configuration = configuration; + } + + override async init(): Promise { + this.model = new ChatOpenAI({ + temperature: this.temperature, + model: this.modelName, + configuration: this.configuration, + }); + } + + override async runQuery( + system: string, + userQuery: string, + supportingContext: Chunk[], + pastConversations: Message[], + ): Promise { + const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [new SystemMessage(system)]; + pastMessages.push( + new SystemMessage(`Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`), + ); + + pastMessages.push( + ...pastConversations.map((c) => { + if (c.actor === 'AI') return new AIMessage({ content: c.content }); + else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); + else return new HumanMessage({ content: c.content }); + }), + ); + pastMessages.push(new HumanMessage(`${userQuery}?`)); + + this.debug('Executing openai model with prompt -', userQuery); + const result = await this.model.invoke(pastMessages); + this.debug('OpenAI response -', result); + + return { + result: result.content.toString(), + tokenUse: { + inputTokens: result.response_metadata.tokenUsage.promptTokens, + outputTokens: result.response_metadata.tokenUsage.completionTokens, + }, + }; + } +} diff --git a/models/embedjs-openai/tsconfig.cjs.json b/models/embedjs-openai/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/models/embedjs-openai/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/models/embedjs-openai/tsconfig.json b/models/embedjs-openai/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/models/embedjs-openai/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/models/embedjs-openai/tsconfig.lib.json b/models/embedjs-openai/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/models/embedjs-openai/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/models/embedjs-vertexai/CHANGELOG.md b/models/embedjs-vertexai/CHANGELOG.md new file mode 100644 index 00000000..6c871aa7 --- /dev/null +++ b/models/embedjs-vertexai/CHANGELOG.md @@ -0,0 +1,5 @@ +## 0.1.0 (2024-10-03) + +This component has been extracted and is now published as part of a workspace monorepo managed by [NX](https://nx.dev/). There are many reasons that prompted this move, but the most critical issue was to decouple the need to install all dependencies for a single usecase. While we add (and continue to add) more and more loaders, databases, caches and models - the number of shared depenencies grew a lot. Most projects will not use all these combinations and it made no sense to have them all installed for everyone. Further, issues with dependent packages raised vulnerabilites that affected all projects - clearly something we did not intend. + +Now what? Starting with version 0.1.0, We have switched to a monorepo based approach. All packages will have the same version number but changelogs and dependencies will be independent. You only need to install the relevant addons (loaders, models, databases, etc) specific to your usecase. Given the shortage of maintainers, we will not be able to support the non-monorepo version of the library beyond critical bugfixes for the next three months, post which the older version will not receive any security fixes. We strongly recommend upgrading to the newer version as soon as you can. diff --git a/models/embedjs-vertexai/README.md b/models/embedjs-vertexai/README.md new file mode 100644 index 00000000..fcaf9b77 --- /dev/null +++ b/models/embedjs-vertexai/README.md @@ -0,0 +1,8 @@ +# embedjs-vertexai + +

+NPM Version +License +

+ +This package extends and offers additional functionality to [embedJs](https://www.npmjs.com/package/@llm-tools/embedjs). Refer to the documentation there for more details. diff --git a/models/embedjs-vertexai/eslint.config.js b/models/embedjs-vertexai/eslint.config.js new file mode 100644 index 00000000..4c3c47f6 --- /dev/null +++ b/models/embedjs-vertexai/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '../../eslint.config.js'; +import parser from '@nx/eslint-plugin'; + +export default [ + ...baseConfig, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': [ + 'error', + { + ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'], + }, + ], + }, + languageOptions: { + parser, + }, + }, +]; diff --git a/models/embedjs-vertexai/package.json b/models/embedjs-vertexai/package.json new file mode 100644 index 00000000..03b98e22 --- /dev/null +++ b/models/embedjs-vertexai/package.json @@ -0,0 +1,40 @@ +{ + "name": "@llm-tools/embedjs-vertexai", + "version": "0.0.1", + "description": "Enable usage of VertexAI models with embedjs", + "dependencies": { + "debug": "^4.3.7", + "@langchain/core": "^0.3.6", + "@langchain/google-vertexai": "^0.1.0", + "@llm-tools/embedjs-interfaces": "0.0.1" + }, + "type": "module", + "main": "./src/index.js", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "llm", + "ai", + "gpt3", + "chain", + "prompt", + "prompt engineering", + "chatgpt", + "machine learning", + "ml", + "anthropic", + "embeddings", + "vectorstores" + ], + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/llm-tools/embedjs.git" + } +} diff --git a/models/embedjs-vertexai/project.json b/models/embedjs-vertexai/project.json new file mode 100644 index 00000000..d980fc77 --- /dev/null +++ b/models/embedjs-vertexai/project.json @@ -0,0 +1,29 @@ +{ + "name": "embedjs-vertexai", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "models/embedjs-vertexai/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/esm/embedjs-vertexai", + "main": "models/embedjs-vertexai/src/index.ts", + "tsConfig": "models/embedjs-vertexai/tsconfig.lib.json", + "assets": ["models/embedjs-vertexai/*.md"] + } + }, + "build-cjs": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "dependsOn": ["^build-cjs"], + "options": { + "outputPath": "dist/cjs/embedjs-vertexai", + "main": "models/embedjs-vertexai/src/index.ts", + "tsConfig": "models/embedjs-vertexai/tsconfig.cjs.json" + } + } + } +} diff --git a/src/embeddings/gecko-embeddings.ts b/models/embedjs-vertexai/src/gecko-embeddings.ts similarity index 87% rename from src/embeddings/gecko-embeddings.ts rename to models/embedjs-vertexai/src/gecko-embeddings.ts index ff1d9f83..a0cb5fb1 100644 --- a/src/embeddings/gecko-embeddings.ts +++ b/models/embedjs-vertexai/src/gecko-embeddings.ts @@ -1,22 +1,22 @@ -import { VertexAIEmbeddings } from '@langchain/google-vertexai'; -import { BaseEmbeddings } from '../interfaces/base-embeddings.js'; - -export class GeckoEmbeddings implements BaseEmbeddings { - private model: VertexAIEmbeddings; - - constructor() { - this.model = new VertexAIEmbeddings({ model: 'textembedding-gecko', maxConcurrency: 3, maxRetries: 5 }); - } - - async getDimensions(): Promise { - return 768; - } - - async embedDocuments(texts: string[]): Promise { - return this.model.embedDocuments(texts); - } - - async embedQuery(text: string): Promise { - return this.model.embedQuery(text); - } -} +import { VertexAIEmbeddings } from '@langchain/google-vertexai'; +import { BaseEmbeddings } from '@llm-tools/embedjs-interfaces'; + +export class GeckoEmbeddings implements BaseEmbeddings { + private model: VertexAIEmbeddings; + + constructor() { + this.model = new VertexAIEmbeddings({ model: 'textembedding-gecko', maxConcurrency: 3, maxRetries: 5 }); + } + + async getDimensions(): Promise { + return 768; + } + + async embedDocuments(texts: string[]): Promise { + return this.model.embedDocuments(texts); + } + + async embedQuery(text: string): Promise { + return this.model.embedQuery(text); + } +} diff --git a/models/embedjs-vertexai/src/index.ts b/models/embedjs-vertexai/src/index.ts new file mode 100644 index 00000000..3213406e --- /dev/null +++ b/models/embedjs-vertexai/src/index.ts @@ -0,0 +1,2 @@ +export * from './vertexai-model.js'; +export * from './gecko-embeddings.js'; diff --git a/src/models/vertexai-model.ts b/models/embedjs-vertexai/src/vertexai-model.ts similarity index 85% rename from src/models/vertexai-model.ts rename to models/embedjs-vertexai/src/vertexai-model.ts index 827889b1..9dee1674 100644 --- a/src/models/vertexai-model.ts +++ b/models/embedjs-vertexai/src/vertexai-model.ts @@ -1,45 +1,42 @@ -import createDebugMessages from 'debug'; -import { ChatVertexAI } from '@langchain/google-vertexai'; -import { AIMessage, HumanMessage, SystemMessage } from '@langchain/core/messages'; - -import { Chunk, Message, ModelResponse } from '../global/types.js'; -import { BaseModel } from '../interfaces/base-model.js'; - -export class VertexAI extends BaseModel { - private readonly debug = createDebugMessages('embedjs:model:VertexAI'); - private model: ChatVertexAI; - - constructor({ temperature, modelName }: { temperature?: number; modelName?: string }) { - super(temperature); - this.model = new ChatVertexAI({ model: modelName ?? 'gemini-1.0-pro' }); - } - - override async runQuery( - system: string, - userQuery: string, - supportingContext: Chunk[], - pastConversations: Message[], - ): Promise { - const systemString = - system + '\n' + `Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`; - const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [new SystemMessage(systemString)]; - - pastMessages.push.apply( - pastMessages, - pastConversations.map((c) => { - if (c.actor === 'AI') return new AIMessage({ content: c.content }); - else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); - else return new HumanMessage({ content: c.content }); - }), - ); - pastMessages.push(new HumanMessage(`${userQuery}?`)); - - this.debug('Executing VertexAI model with prompt -', userQuery); - const result = await this.model.invoke(pastMessages); - this.debug('VertexAI response -', result); - - return { - result: result.content.toString(), - }; - } -} +import createDebugMessages from 'debug'; +import { ChatVertexAI } from '@langchain/google-vertexai'; +import { AIMessage, HumanMessage, SystemMessage } from '@langchain/core/messages'; +import { BaseModel, Chunk, Message, ModelResponse } from '@llm-tools/embedjs-interfaces'; + +export class VertexAI extends BaseModel { + private readonly debug = createDebugMessages('embedjs:model:VertexAI'); + private model: ChatVertexAI; + + constructor({ temperature, modelName }: { temperature?: number; modelName?: string }) { + super(temperature); + this.model = new ChatVertexAI({ model: modelName ?? 'gemini-1.0-pro' }); + } + + override async runQuery( + system: string, + userQuery: string, + supportingContext: Chunk[], + pastConversations: Message[], + ): Promise { + const systemString = + system + '\n' + `Supporting context: ${supportingContext.map((s) => s.pageContent).join('; ')}`; + const pastMessages: (AIMessage | SystemMessage | HumanMessage)[] = [new SystemMessage(systemString)]; + + pastMessages.push( + ...pastConversations.map((c) => { + if (c.actor === 'AI') return new AIMessage({ content: c.content }); + else if (c.actor === 'SYSTEM') return new SystemMessage({ content: c.content }); + else return new HumanMessage({ content: c.content }); + }), + ); + pastMessages.push(new HumanMessage(`${userQuery}?`)); + + this.debug('Executing VertexAI model with prompt -', userQuery); + const result = await this.model.invoke(pastMessages); + this.debug('VertexAI response -', result); + + return { + result: result.content.toString(), + }; + } +} diff --git a/models/embedjs-vertexai/tsconfig.cjs.json b/models/embedjs-vertexai/tsconfig.cjs.json new file mode 100644 index 00000000..1094896d --- /dev/null +++ b/models/embedjs-vertexai/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "Node10" + } +} diff --git a/models/embedjs-vertexai/tsconfig.json b/models/embedjs-vertexai/tsconfig.json new file mode 100644 index 00000000..fe536db3 --- /dev/null +++ b/models/embedjs-vertexai/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "target": "ES2021", + "lib": ["ES2021", "ES2022.Object"], + "module": "NodeNext", + "moduleResolution": "nodenext", + "esModuleInterop": true, + "declaration": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "useDefineForClassFields": true, + "strictPropertyInitialization": false, + "allowJs": false, + "strict": false + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/models/embedjs-vertexai/tsconfig.lib.json b/models/embedjs-vertexai/tsconfig.lib.json new file mode 100644 index 00000000..bdeb03cf --- /dev/null +++ b/models/embedjs-vertexai/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/nx.json b/nx.json new file mode 100644 index 00000000..7d5af47c --- /dev/null +++ b/nx.json @@ -0,0 +1,60 @@ +{ + "pluginsConfig": { + "@nx/js": { + "analyzeSourceFiles": true + } + }, + "extends": "nx/presets/npm.json", + "$schema": "./node_modules/nx/schemas/nx-schema.json", + "defaultBase": "main", + "nxCloudId": "66f6d7217cbafe1e30563d6e", + "namedInputs": { + "sharedGlobals": ["{workspaceRoot}/.github/workflows/ci.yml"], + "default": ["sharedGlobals"] + }, + "plugins": [ + { + "plugin": "@nx/eslint/plugin", + "options": { + "targetName": "lint" + } + } + ], + "targetDefaults": { + "@nx/js:tsc": { + "cache": true, + "dependsOn": ["^build"], + "inputs": ["default", "^default"] + }, + "nx-release-publish": { + "options": { + "packageRoot": "dist/esm/{projectName}" + } + } + }, + "release": { + "projects": ["*"], + "changelog": { + "projectChangelogs": { + "renderOptions": { + "commitReferences": true + } + }, + "workspaceChangelog": { + "file": false, + "createRelease": "github", + "renderOptions": { + "commitReferences": true + } + } + }, + "version": { + "preVersionCommand": "npm run build:pipeline", + "generatorOptions": { + "currentVersionResolver": "registry", + "fallbackCurrentVersionResolver": "disk", + "packageRoot": "dist/esm/{projectName}" + } + } + } +} diff --git a/package-lock.json b/package-lock.json index 20a33fd1..2aa32eb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2951 +1,460 @@ { - "name": "@llm-tools/embedjs", - "version": "0.0.96", + "name": "@llm-tools/embedjs-source", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { + "name": "@llm-tools/embedjs-source", + "version": "0.1.0", + "license": "Apache-2.0", + "workspaces": [ + "core/*", + "databases/*", + "loaders/*", + "models/*" + ], + "devDependencies": { + "@commitlint/config-conventional": "^19.5.0", + "@eslint/eslintrc": "^3.1.0", + "@inquirer/prompts": "^6.0.1", + "@npmcli/package-json": "^6.0.1", + "@nx/eslint": "19.8.3", + "@nx/eslint-plugin": "19.8.3", + "@nx/js": "19.8.3", + "@swc-node/register": "~1.10.9", + "@swc/core": "~1.7.26", + "@swc/helpers": "~0.5.13", + "@types/node": "22.7.4", + "@typescript-eslint/eslint-plugin": "^8.8.0", + "@typescript-eslint/parser": "^8.8.0", + "eslint": "~9.11.1", + "eslint-config-prettier": "^9.1.0", + "husky": "^9.1.6", + "nx": "19.8.3", + "prettier": "^3.3.3", + "tslib": "^2.7.0", + "typescript": "5.6.2", + "typescript-eslint": "^8.8.0" + }, + "engines": { + "node": ">= 18.0.0" + } + }, + "core/embedjs": { "name": "@llm-tools/embedjs", - "version": "0.0.96", + "version": "0.0.1", "license": "Apache-2.0", "dependencies": { - "@huggingface/inference": "^2.8.0", - "@langchain/anthropic": "^0.3.3", - "@langchain/cohere": "^0.3.0", - "@langchain/community": "^0.3.2", - "@langchain/core": "^0.3.3", - "@langchain/google-vertexai": "^0.1.0", - "@langchain/mistralai": "^0.1.1", - "@langchain/openai": "^0.3.2", + "@llm-tools/embedjs-interfaces": "0.0.1", + "@llm-tools/embedjs-utils": "0.0.1", "axios": "^1.7.7", - "compute-cosine-similarity": "^1.1.0", - "confluence.js": "^1.7.4", - "csv-parse": "^5.5.6", - "debug": "^4.3.6", - "html-to-text": "^9.0.5", + "debug": "^4.3.7", "langchain": "^0.3.2", "md5": "^2.3.0", "mime": "^4.0.4", - "office-text-extractor": "^3.0.3", - "sitemapper": "^3.2.12", - "stream-mime-type": "^2.0.0", - "usetube": "^2.2.7", - "uuid": "^10.0.0", - "youtube-transcript": "^1.2.1" + "stream-mime-type": "^2.0.0" }, "devDependencies": { - "@azure/cosmos": "^4.1.1", - "@lancedb/lancedb": "^0.10.0", - "@pinecone-database/pinecone": "^3.0.3", - "@qdrant/js-client-rest": "^1.11.0", - "@tsconfig/recommended": "^1.0.7", - "@types/babel__generator": "^7.6.8", - "@types/babel__template": "^7.4.4", "@types/debug": "^4.1.12", - "@types/html-to-text": "^9.0.4", - "@types/http-cache-semantics": "^4.0.4", - "@types/istanbul-lib-report": "^3.0.3", - "@types/jest": "29.5.13", "@types/md5": "^2.3.5", - "@types/ms": "^0.7.34", - "@types/node": "^22.7.0", - "@types/usetube": "^2.1.2", - "@types/webidl-conversions": "^7.0.3", - "@types/yargs-parser": "^21.0.3", - "@typescript-eslint/eslint-plugin": "^8.7.0", - "@typescript-eslint/parser": "^8.7.0", - "chromadb": "^1.9.2", - "cohere-ai": "^7.13.2", - "eslint": "^9.11.1", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", - "hnswlib-node": "^3.0.0", - "ioredis": "^5.4.1", - "jest": "29.7.0", - "lmdb": "^3.1.3", - "mongodb": "^6.9.0", - "prettier": "^3.3.3", - "rimraf": "^6.0.1", - "ts-jest": "29.2.5", - "typescript": "^5.6.2", - "weaviate-ts-client": "^2.2.0" - }, - "engines": { - "node": ">= 18.0.0" - }, - "peerDependencies": { - "@azure/cosmos": "^4.1.1", - "@datastax/astra-db-ts": "^1.5.0", - "@lancedb/lancedb": "^0.10.0", - "@pinecone-database/pinecone": "^3.0.3", - "@qdrant/js-client-rest": "^1.11.0", - "chromadb": "^1.9.2", - "cohere-ai": "^7.13.2", - "hnswlib-node": "^3.0.0", - "ioredis": "^5.4.1", - "lmdb": "^3.1.3", - "mongodb": "^6.9.0", - "weaviate-ts-client": "^2.2.0" - }, - "peerDependenciesMeta": { - "@azure/cosmos": { - "optional": true - }, - "@lancedb/lancedb": { - "optional": true - }, - "@pinecone-database/pinecone": { - "optional": true - }, - "@qdrant/js-client-rest": { - "optional": true - }, - "chromadb": { - "optional": true - }, - "cohere-ai": { - "optional": true - }, - "hnswlib-node": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "lmdb": { - "optional": true - }, - "mongodb": { - "optional": true - }, - "weaviate-ts-client": { - "optional": true - } + "@types/node": "^22.7.4" } }, - "node_modules/@75lb/deep-merge": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.2.tgz", - "integrity": "sha512-08K9ou5VNbheZFxM5tDWoqjA3ImC50DiuuJ2tj1yEPRfkp8lLLg6XAaJ4On+a0yAXor/8ay5gHnAIshRM44Kpw==", - "dev": true, - "peer": true, + "core/embedjs-interfaces": { + "name": "@llm-tools/embedjs-interfaces", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "lodash": "^4.17.21", - "typical": "^7.1.1" - }, - "engines": { - "node": ">=12.17" + "debug": "^4.3.7", + "md5": "^2.3.0", + "uuid": "^10.0.0" } }, - "node_modules/@75lb/deep-merge/node_modules/typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.17" - } + "core/embedjs-types": { + "name": "@llm-tools/embedjs-types", + "version": "0.0.1", + "extraneous": true, + "license": "Apache-2.0" }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, + "core/embedjs-utils": { + "name": "@llm-tools/embedjs-utils", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" + "@llm-tools/embedjs-interfaces": "0.0.1" } }, - "node_modules/@anthropic-ai/sdk": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.27.3.tgz", - "integrity": "sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==", + "databases/embedjs-astra": { + "name": "@llm-tools/embedjs-astra", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" + "@datastax/astra-db-ts": "^1.5.0", + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7" } }, - "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { - "version": "18.19.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.51.tgz", - "integrity": "sha512-IIMkWEIVQDlBpi6pPeGqTqOx7KbzGC3EgIyH8NrxplXOwWw0uVl9vthJUMFrxD7kcEfcRp7jIkgpB28M6JnfWA==", + "databases/embedjs-cosmos": { + "name": "@llm-tools/embedjs-cosmos", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "undici-types": "~5.26.4" + "@azure/cosmos": "^4.1.1", + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7" } }, - "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "databases/embedjs-hnswlib": { + "name": "@llm-tools/embedjs-hnswlib", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7", + "hnswlib-node": "^3.0.0" } }, - "node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "databases/embedjs-lancedb": { + "name": "@llm-tools/embedjs-lancedb", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@lancedb/lancedb": "^0.10.0", + "@llm-tools/embedjs-interfaces": "0.0.1", + "compute-cosine-similarity": "^1.1.0" } }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "databases/embedjs-lmdb": { + "name": "@llm-tools/embedjs-lmdb", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" + "@llm-tools/embedjs-interfaces": "0.0.1", + "lmdb": "^3.1.3" } }, - "node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "databases/embedjs-mongodb": { + "name": "@llm-tools/embedjs-mongodb", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7", + "mongodb": "^6.9.0" } }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "databases/embedjs-pinecone": { + "name": "@llm-tools/embedjs-pinecone", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.6.2" + "@llm-tools/embedjs-interfaces": "0.0.1", + "@pinecone-database/pinecone": "^3.0.3", + "debug": "^4.3.7" } }, - "node_modules/@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "databases/embedjs-qdrant": { + "name": "@llm-tools/embedjs-qdrant", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" + "@llm-tools/embedjs-interfaces": "0.0.1", + "@qdrant/js-client-rest": "^1.11.0", + "debug": "^4.3.7", + "uuid": "^10.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.621.0.tgz", - "integrity": "sha512-FpXia5qFf6ijcNDWenVq+mP9r1LbiW/+52i9wrv2+Afi6Nn1ROf8W7St8WvE9TEZ3t78y+vis4CwqfGts+uiKA==", + "databases/embedjs-redis": { + "name": "@llm-tools/embedjs-redis", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.621.0", - "@aws-sdk/client-sts": "3.621.0", - "@aws-sdk/core": "3.621.0", - "@aws-sdk/credential-provider-node": "3.621.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.1", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.13", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.13", - "@smithy/util-defaults-mode-node": "^3.0.13", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@llm-tools/embedjs-interfaces": "0.0.1", + "ioredis": "^5.4.1" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "databases/embedjs-weaviate": { + "name": "@llm-tools/embedjs-weaviate", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@llm-tools/embedjs-interfaces": "0.0.1", + "compute-cosine-similarity": "^1.1.0", + "debug": "^4.3.7", + "weaviate-ts-client": "^2.2.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "loaders/embedjs-loader-confluence": { + "name": "@llm-tools/embedjs-loader-confluence", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@llm-tools/embedjs-interfaces": "^0.0.1", + "@llm-tools/embedjs-loader-web": "^0.0.1", + "confluence.js": "^1.7.4", + "debug": "^4.3.7", + "md5": "^2.3.0" } }, - "node_modules/@aws-sdk/client-sagemaker": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sagemaker/-/client-sagemaker-3.621.0.tgz", - "integrity": "sha512-dm/BxGt+XlCqhDvex0487umiQJpUM8B3Ls9MbEoZZaf0Q+IJnOnZmtigd72YziXH5BxdoNOJxD2sERVki+XQNQ==", + "loaders/embedjs-loader-csv": { + "name": "@llm-tools/embedjs-loader-csv", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.621.0", - "@aws-sdk/client-sts": "3.621.0", - "@aws-sdk/core": "3.621.0", - "@aws-sdk/credential-provider-node": "3.621.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.1", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.13", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.13", - "@smithy/util-defaults-mode-node": "^3.0.13", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.2", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=16.0.0" + "@llm-tools/embedjs-interfaces": "0.0.1", + "@llm-tools/embedjs-utils": "0.0.1", + "axios": "^1.7.7", + "csv-parse": "^5.5.6", + "debug": "^4.3.7", + "md5": "^2.3.0" } }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "loaders/embedjs-loader-msoffice": { + "name": "@llm-tools/embedjs-loader-msoffice", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sagemaker/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.621.0.tgz", - "integrity": "sha512-xpKfikN4u0BaUYZA9FGUMkkDmfoIP0Q03+A86WjqDWhcOoqNA1DkHsE4kZ+r064ifkPUfcNuUvlkVTEoBZoFjA==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.621.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.1", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.13", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.13", - "@smithy/util-defaults-mode-node": "^3.0.13", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.621.0.tgz", - "integrity": "sha512-mMjk3mFUwV2Y68POf1BQMTF+F6qxt5tPu6daEUCNGC9Cenk3h2YXQQoS4/eSyYzuBiYk3vx49VgleRvdvkg8rg==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.621.0", - "@aws-sdk/credential-provider-node": "3.621.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.1", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.13", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.13", - "@smithy/util-defaults-mode-node": "^3.0.13", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.621.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.621.0.tgz", - "integrity": "sha512-707uiuReSt+nAx6d0c21xLjLm2lxeKc7padxjv92CIrIocnQSlJPxSCM7r5zBhwiahJA6MNQwmTl2xznU67KgA==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.621.0", - "@aws-sdk/core": "3.621.0", - "@aws-sdk/credential-provider-node": "3.621.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.1", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.13", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.13", - "@smithy/util-defaults-mode-node": "^3.0.13", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@llm-tools/embedjs-interfaces": "0.0.1", + "@llm-tools/embedjs-utils": "0.0.1", + "langchain": "^0.3.2", + "md5": "^2.3.0", + "office-text-extractor": "^3.0.3" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "loaders/embedjs-loader-pdf": { + "name": "@llm-tools/embedjs-loader-pdf", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@llm-tools/embedjs-interfaces": "0.0.1", + "@llm-tools/embedjs-utils": "0.0.1", + "langchain": "^0.3.2", + "md5": "^2.3.0", + "office-text-extractor": "^3.0.3" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "loaders/embedjs-loader-sitemap": { + "name": "@llm-tools/embedjs-loader-sitemap", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.621.0.tgz", - "integrity": "sha512-CtOwWmDdEiINkGXD93iGfXjN0WmCp9l45cDWHHGa8lRgEDyhuL7bwd/pH5aSzj0j8SiQBG2k0S7DHbd5RaqvbQ==", - "dependencies": { - "@smithy/core": "^2.3.1", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@llm-tools/embedjs-interfaces": "^0.0.1", + "@llm-tools/embedjs-loader-web": "^0.0.1", + "debug": "^4.3.7", + "md5": "^2.3.0", + "sitemapper": "^3.2.12" } }, - "node_modules/@aws-sdk/core/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "loaders/embedjs-loader-web": { + "name": "@llm-tools/embedjs-loader-web", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@llm-tools/embedjs-interfaces": "0.0.1", + "@llm-tools/embedjs-utils": "0.0.1", + "axios": "^1.7.7", + "debug": "^4.3.7", + "html-to-text": "^9.0.5", + "langchain": "^0.3.2", + "md5": "^2.3.0" }, - "engines": { - "node": ">=16.0.0" + "devDependencies": { + "@types/html-to-text": "^9.0.4" } }, - "node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", - "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", + "loaders/embedjs-loader-youtube": { + "name": "@llm-tools/embedjs-loader-youtube", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "@llm-tools/embedjs-interfaces": "0.0.1", + "@llm-tools/embedjs-utils": "0.0.1", + "debug": "^4.3.7", + "md5": "^2.3.0", + "usetube": "^2.2.7", + "youtube-transcript": "^1.2.1" }, - "engines": { - "node": ">=16.0.0" + "devDependencies": { + "@types/usetube": "^2.1.2" } }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "models/embedjs-anthropic": { + "name": "@llm-tools/embedjs-anthropic", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.621.0.tgz", - "integrity": "sha512-Q+3awvTVJSqIGRjCUQflRwKPKlZ0TfmL3EQHgFLhZZrToeBapEA62+FY+T70aTKAZZZZprlvYeFPtBloNd5ziA==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@langchain/anthropic": "^0.3.3", + "@langchain/core": "^0.3.6", + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7" } }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", - "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", + "models/embedjs-cohere": { + "name": "@llm-tools/embedjs-cohere", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.621.0.tgz", - "integrity": "sha512-/jc2tEsdkT1QQAI5Dvoci50DbSxtJrevemwFsm0B73pwCcOQZ5ZwwSdVqGsPutzYzUVx3bcXg3LRL7jLACqRIg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@langchain/cohere": "^0.3.0", + "@llm-tools/embedjs-interfaces": "0.0.1", + "cohere-ai": "^7.14.0" } }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "models/embedjs-huggingface": { + "name": "@llm-tools/embedjs-huggingface", + "version": "0.0.1", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.621.0.tgz", - "integrity": "sha512-0EWVnSc+JQn5HLnF5Xv405M8n4zfdx9gyGdpnCmAmFqEDHA8LmBdxJdpUk1Ovp/I5oPANhjojxabIW5f1uU0RA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.621.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.621.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.621.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.621.0.tgz", - "integrity": "sha512-4JqpccUgz5Snanpt2+53hbOBbJQrSFq7E1sAAbgY6BKVQUsW5qyXqnjvSF32kDeKa5JpBl3bBWLZl04IadcPHw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.621.0", - "@aws-sdk/credential-provider-ini": "3.621.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.621.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", - "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.621.0.tgz", - "integrity": "sha512-Kza0jcFeA/GEL6xJlzR2KFf1PfZKMFnxfGzJzl5yN7EjoGdMijl34KaRyVnfRjnCWcsUpBWKNIDk9WZVMY9yiw==", - "dependencies": { - "@aws-sdk/client-sso": "3.621.0", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@huggingface/inference": "^2.8.1", + "@langchain/community": "^0.3.4", + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7" } }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", - "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", + "models/embedjs-huggingface/node_modules/@langchain/community": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@langchain/community/-/community-0.3.4.tgz", + "integrity": "sha512-CLHjqxjWQnujofE40JNGsZuEruf0JCUxplbqNJoLKxbyx9JUD6kUnOpdoIuyywZWyBKwbLWZdCymlGzjokt3XQ==", + "license": "MIT", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@langchain/openai": ">=0.2.0 <0.4.0", + "binary-extensions": "^2.2.0", + "expr-eval": "^2.0.2", + "flat": "^5.0.2", + "js-yaml": "^4.1.0", + "langchain": ">=0.2.3 <0.4.0", + "langsmith": "~0.1.56", + "uuid": "^10.0.0", + "zod": "^3.22.3", + "zod-to-json-schema": "^3.22.5" }, "engines": { - "node": ">=16.0.0" + "node": ">=18" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.621.0" - } - }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.621.0.tgz", - "integrity": "sha512-FQbC7I8ae/72ZekLBa45jWJ+Q3d+YPhc3bW/rCks6RrldM6RgLTGr8pTOPCxHl828ky10RjkBiBmVU818rliyw==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.621.0", - "@aws-sdk/client-sso": "3.621.0", - "@aws-sdk/client-sts": "3.621.0", - "@aws-sdk/credential-provider-cognito-identity": "3.621.0", - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.621.0", - "@aws-sdk/credential-provider-ini": "3.621.0", - "@aws-sdk/credential-provider-node": "3.621.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.621.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", - "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", - "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz", - "integrity": "sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.374.0.tgz", - "integrity": "sha512-9WpRUbINdGroV3HiZZIBoJvL2ndoWk39OfwxWs2otxByppJZNN14bg/lvCx5e8ggHUti7IBk5rb0nqQZ4m05pg==", - "deprecated": "This package has moved to @smithy/protocol-http", - "dependencies": { - "@smithy/protocol-http": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/protocol-http": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", - "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", - "dependencies": { - "@smithy/types": "^1.2.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.374.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz", - "integrity": "sha512-2xLJvSdzcZZAg0lsDLUAuSQuihzK0dcxIK7WmfuJeF7DGKJFmp9czQmz5f3qiDz6IDQzvgK1M9vtJSVCslJbyQ==", - "deprecated": "This package has moved to @smithy/signature-v4", - "dependencies": { - "@smithy/signature-v4": "^1.0.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/eventstream-codec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz", - "integrity": "sha512-3tEbUb8t8an226jKB6V/Q2XU/J53lCwCzULuBPEaF4JjSh+FlCMp7TmogE/Aij5J9DwlsZ4VAD/IRDuQ/0ZtMw==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^1.2.0", - "@smithy/util-hex-encoding": "^1.1.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/is-array-buffer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz", - "integrity": "sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/signature-v4": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.1.0.tgz", - "integrity": "sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==", - "dependencies": { - "@smithy/eventstream-codec": "^1.1.0", - "@smithy/is-array-buffer": "^1.1.0", - "@smithy/types": "^1.2.0", - "@smithy/util-hex-encoding": "^1.1.0", - "@smithy/util-middleware": "^1.1.0", - "@smithy/util-uri-escape": "^1.1.0", - "@smithy/util-utf8": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", - "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz", - "integrity": "sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==", - "dependencies": { - "@smithy/is-array-buffer": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-hex-encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", - "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-middleware": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz", - "integrity": "sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-uri-escape": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", - "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz", - "integrity": "sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==", - "dependencies": { - "@smithy/util-buffer-from": "^1.1.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz", - "integrity": "sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", - "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", - "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", - "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" + "@arcjet/redact": "^v1.0.0-alpha.23", + "@aws-crypto/sha256-js": "^5.0.0", + "@aws-sdk/client-bedrock-agent-runtime": "^3.583.0", + "@aws-sdk/client-bedrock-runtime": "^3.422.0", + "@aws-sdk/client-dynamodb": "^3.310.0", + "@aws-sdk/client-kendra": "^3.352.0", + "@aws-sdk/client-lambda": "^3.310.0", + "@aws-sdk/client-s3": "^3.310.0", + "@aws-sdk/client-sagemaker-runtime": "^3.310.0", + "@aws-sdk/client-sfn": "^3.310.0", + "@aws-sdk/credential-provider-node": "^3.388.0", + "@azure/search-documents": "^12.0.0", + "@azure/storage-blob": "^12.15.0", + "@browserbasehq/sdk": "*", + "@clickhouse/client": "^0.2.5", + "@cloudflare/ai": "*", + "@datastax/astra-db-ts": "^1.0.0", + "@elastic/elasticsearch": "^8.4.0", + "@getmetal/metal-sdk": "*", + "@getzep/zep-cloud": "^1.0.6", + "@getzep/zep-js": "^0.9.0", + "@gomomento/sdk": "^1.51.1", + "@gomomento/sdk-core": "^1.51.1", + "@google-ai/generativelanguage": "*", + "@google-cloud/storage": "^6.10.1 || ^7.7.0", + "@gradientai/nodejs-sdk": "^1.2.0", + "@huggingface/inference": "^2.6.4", + "@langchain/core": ">=0.2.21 <0.4.0", + "@layerup/layerup-security": "^1.5.12", + "@mendable/firecrawl-js": "^0.0.13", + "@mlc-ai/web-llm": "*", + "@mozilla/readability": "*", + "@neondatabase/serverless": "*", + "@notionhq/client": "^2.2.10", + "@opensearch-project/opensearch": "*", + "@pinecone-database/pinecone": "*", + "@planetscale/database": "^1.8.0", + "@premai/prem-sdk": "^0.3.25", + "@qdrant/js-client-rest": "^1.8.2", + "@raycast/api": "^1.55.2", + "@rockset/client": "^0.9.1", + "@smithy/eventstream-codec": "^2.0.5", + "@smithy/protocol-http": "^3.0.6", + "@smithy/signature-v4": "^2.0.10", + "@smithy/util-utf8": "^2.0.0", + "@spider-cloud/spider-client": "^0.0.21", + "@supabase/supabase-js": "^2.45.0", + "@tensorflow-models/universal-sentence-encoder": "*", + "@tensorflow/tfjs-converter": "*", + "@tensorflow/tfjs-core": "*", + "@upstash/ratelimit": "^1.1.3 || ^2.0.3", + "@upstash/redis": "^1.20.6", + "@upstash/vector": "^1.1.1", + "@vercel/kv": "^0.2.3", + "@vercel/postgres": "^0.5.0", + "@writerai/writer-sdk": "^0.40.2", + "@xata.io/client": "^0.28.0", + "@xenova/transformers": "^2.17.2", + "@zilliz/milvus2-sdk-node": ">=2.3.5", + "apify-client": "^2.7.1", + "assemblyai": "^4.6.0", + "better-sqlite3": ">=9.4.0 <12.0.0", + "cassandra-driver": "^4.7.2", + "cborg": "^4.1.1", + "cheerio": "^1.0.0-rc.12", + "chromadb": "*", + "closevector-common": "0.1.3", + "closevector-node": "0.1.6", + "closevector-web": "0.1.6", + "cohere-ai": "*", + "convex": "^1.3.1", + "crypto-js": "^4.2.0", + "d3-dsv": "^2.0.0", + "discord.js": "^14.14.1", + "dria": "^0.0.3", + "duck-duck-scrape": "^2.2.5", + "epub2": "^3.0.1", + "faiss-node": "^0.5.1", + "firebase-admin": "^11.9.0 || ^12.0.0", + "google-auth-library": "*", + "googleapis": "*", + "hnswlib-node": "^3.0.0", + "html-to-text": "^9.0.5", + "ignore": "^5.2.0", + "interface-datastore": "^8.2.11", + "ioredis": "^5.3.2", + "it-all": "^3.0.4", + "jsdom": "*", + "jsonwebtoken": "^9.0.2", + "llmonitor": "^0.5.9", + "lodash": "^4.17.21", + "lunary": "^0.7.10", + "mammoth": "^1.6.0", + "mongodb": ">=5.2.0", + "mysql2": "^3.9.8", + "neo4j-driver": "*", + "notion-to-md": "^3.1.0", + "officeparser": "^4.0.4", + "pdf-parse": "1.1.1", + "pg": "^8.11.0", + "pg-copy-streams": "^6.0.5", + "pickleparser": "^0.2.1", + "playwright": "^1.32.1", + "portkey-ai": "^0.1.11", + "puppeteer": "*", + "pyodide": ">=0.24.1 <0.27.0", + "redis": "*", + "replicate": "^0.29.4", + "sonix-speech-recognition": "^2.1.1", + "srt-parser-2": "^1.2.3", + "typeorm": "^0.3.20", + "typesense": "^1.5.3", + "usearch": "^1.1.1", + "vectordb": "^0.1.4", + "voy-search": "0.6.2", + "weaviate-ts-client": "*", + "web-auth-library": "^1.0.3", + "ws": "^8.14.2", + "youtube-transcript": "^1.0.6", + "youtubei.js": "^9.1.0" }, "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-auth": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz", - "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==", - "dev": true, - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.1.tgz", - "integrity": "sha512-ExPSbgjwCoht6kB7B4MeZoBAxcQSIl29r/bPeazZJx50ej4JJCByimLOrZoIsurISNyJQQHf30b3JfqC3Hb88A==", - "dev": true, - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.9.0", - "@azure/logger": "^1.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-tracing": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", - "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", - "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", - "dev": true, - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/cosmos": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-4.1.1.tgz", - "integrity": "sha512-EKcRHZy3enhz7hU/qlwW2urcoF7haFkQRbLhR+rUaAtzDaN6+F/rH4xJtNc94NjOEoeHUI+bkze63ZA55Gca0A==", - "dev": true, - "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.7.1", - "@azure/core-rest-pipeline": "^1.15.1", - "@azure/core-tracing": "^1.1.1", - "@azure/core-util": "^1.8.1", - "fast-json-stable-stringify": "^2.1.0", - "jsbi": "^4.3.0", - "priorityqueuejs": "^2.0.0", - "semaphore": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/logger": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.2.tgz", - "integrity": "sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@datastax/astra-db-ts": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@datastax/astra-db-ts/-/astra-db-ts-1.5.0.tgz", - "integrity": "sha512-Z9pEVyyHfglh8XAKrIASxdvORdei4pLUKDDGarqYvBkA9B9rKdqqdN+4I42Dz8paU5uscu8FwM5mc+Ly/U6jfA==", - "peer": true, - "dependencies": { - "fetch-h2": "^3.0.2", - "safe-stable-stringify": "^2.4.3", - "typed-emitter": "^2.1.0", - "uuidv7": "^0.6.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", - "dev": true, - "dependencies": { - "@eslint/object-schema": "^2.1.4", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/core": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", - "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "9.11.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", - "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", - "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", - "dev": true, - "dependencies": { - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "devOptional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "devOptional": true, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@huggingface/inference": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-2.8.0.tgz", - "integrity": "sha512-Ti681P1qckcCAqgzmL53jBnluPuZGelmMIuXNjgAwC5+RIjF4S0SDQu6oy44ZTwekwNp2ETaZ2sXsOk+45aC4w==", - "dependencies": { - "@huggingface/tasks": "^0.11.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@huggingface/tasks": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/@huggingface/tasks/-/tasks-0.11.2.tgz", - "integrity": "sha512-vlwUJsj/QJcR/oLXvV+JBKheaVk9pqfAPYiS136cjHEDTeTW5/+ePpM6uKOc56oxqwrUjh5T0JylHJU8vyqr1A==" - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", - "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", - "dev": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "devOptional": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": 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", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "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.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "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 - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": 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.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "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 - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/schemas/node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@lancedb/lancedb": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@lancedb/lancedb/-/lancedb-0.10.0.tgz", - "integrity": "sha512-/sNUZze9Ed6N2T6y3NuEOSPPE3hSvJ4UHfZ+uAOBjNprrECRoCn4LTjza6dA4Za4Csl7K19AwBhlvhLQLvi48Q==", - "cpu": [ - "x64", - "arm64" - ], - "dev": true, - "os": [ - "darwin", - "linux", - "win32" - ], - "dependencies": { - "axios": "^1.7.2", - "reflect-metadata": "^0.2.2" - }, - "engines": { - "node": ">= 18" - }, - "optionalDependencies": { - "@lancedb/lancedb-darwin-arm64": "0.10.0", - "@lancedb/lancedb-darwin-x64": "0.10.0", - "@lancedb/lancedb-linux-arm64-gnu": "0.10.0", - "@lancedb/lancedb-linux-x64-gnu": "0.10.0", - "@lancedb/lancedb-win32-x64-msvc": "0.10.0" - }, - "peerDependencies": { - "apache-arrow": ">=13.0.0 <=17.0.0" - } - }, - "node_modules/@lancedb/lancedb-linux-x64-gnu": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@lancedb/lancedb-linux-x64-gnu/-/lancedb-linux-x64-gnu-0.10.0.tgz", - "integrity": "sha512-G0xQVW4g4TOy71NVXHhGD0WwcIWE6QUgx8k5SC8bbRUiy3zCtTaHQW31xWLxOP9MMGIyXGD4PZpU68UuzQiY6Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 18" - } - }, - "node_modules/@langchain/anthropic": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@langchain/anthropic/-/anthropic-0.3.3.tgz", - "integrity": "sha512-OvnSV3Tjhb87n7CxWzIcJqcJEM4qoFDYYt6Rua7glQF/Ud5FBTurlzoMunLPTQeF5GdPiaOwP3nUw6I9gF7ppw==", - "dependencies": { - "@anthropic-ai/sdk": "^0.27.3", - "fast-xml-parser": "^4.4.1", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" - } - }, - "node_modules/@langchain/cohere": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@langchain/cohere/-/cohere-0.3.0.tgz", - "integrity": "sha512-JlevgVK4oUwHiPcP7Xw55Xlp8FdbCsjDuWbcjWgeYcdTTH1sIItG/nDREZa8Z+MfXYca2njk4sZjCIuGsY7fVA==", - "dependencies": { - "cohere-ai": "^7.10.5", - "uuid": "^10.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.23.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" - } - }, - "node_modules/@langchain/community": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@langchain/community/-/community-0.3.2.tgz", - "integrity": "sha512-NoniVM+LUJC3zTPEe1l5cSzr//iDhpKP92Q3LEsV0l168AtrwHxmOvN6MgT0xfM4BouyPlILHX28NSADUC2AXQ==", - "dependencies": { - "@langchain/openai": ">=0.2.0 <0.4.0", - "binary-extensions": "^2.2.0", - "expr-eval": "^2.0.2", - "flat": "^5.0.2", - "js-yaml": "^4.1.0", - "langchain": ">=0.2.3 <0.4.0", - "langsmith": "~0.1.56", - "uuid": "^10.0.0", - "zod": "^3.22.3", - "zod-to-json-schema": "^3.22.5" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@arcjet/redact": "^v1.0.0-alpha.23", - "@aws-crypto/sha256-js": "^5.0.0", - "@aws-sdk/client-bedrock-agent-runtime": "^3.583.0", - "@aws-sdk/client-bedrock-runtime": "^3.422.0", - "@aws-sdk/client-dynamodb": "^3.310.0", - "@aws-sdk/client-kendra": "^3.352.0", - "@aws-sdk/client-lambda": "^3.310.0", - "@aws-sdk/client-s3": "^3.310.0", - "@aws-sdk/client-sagemaker-runtime": "^3.310.0", - "@aws-sdk/client-sfn": "^3.310.0", - "@aws-sdk/credential-provider-node": "^3.388.0", - "@azure/search-documents": "^12.0.0", - "@azure/storage-blob": "^12.15.0", - "@browserbasehq/sdk": "*", - "@clickhouse/client": "^0.2.5", - "@cloudflare/ai": "*", - "@datastax/astra-db-ts": "^1.0.0", - "@elastic/elasticsearch": "^8.4.0", - "@getmetal/metal-sdk": "*", - "@getzep/zep-cloud": "^1.0.6", - "@getzep/zep-js": "^0.9.0", - "@gomomento/sdk": "^1.51.1", - "@gomomento/sdk-core": "^1.51.1", - "@google-ai/generativelanguage": "*", - "@google-cloud/storage": "^6.10.1 || ^7.7.0", - "@gradientai/nodejs-sdk": "^1.2.0", - "@huggingface/inference": "^2.6.4", - "@langchain/core": ">=0.2.21 <0.4.0", - "@layerup/layerup-security": "^1.5.12", - "@mendable/firecrawl-js": "^0.0.13", - "@mlc-ai/web-llm": "*", - "@mozilla/readability": "*", - "@neondatabase/serverless": "*", - "@notionhq/client": "^2.2.10", - "@opensearch-project/opensearch": "*", - "@pinecone-database/pinecone": "*", - "@planetscale/database": "^1.8.0", - "@premai/prem-sdk": "^0.3.25", - "@qdrant/js-client-rest": "^1.8.2", - "@raycast/api": "^1.55.2", - "@rockset/client": "^0.9.1", - "@smithy/eventstream-codec": "^2.0.5", - "@smithy/protocol-http": "^3.0.6", - "@smithy/signature-v4": "^2.0.10", - "@smithy/util-utf8": "^2.0.0", - "@spider-cloud/spider-client": "^0.0.21", - "@supabase/supabase-js": "^2.45.0", - "@tensorflow-models/universal-sentence-encoder": "*", - "@tensorflow/tfjs-converter": "*", - "@tensorflow/tfjs-core": "*", - "@upstash/ratelimit": "^1.1.3", - "@upstash/redis": "^1.20.6", - "@upstash/vector": "^1.1.1", - "@vercel/kv": "^0.2.3", - "@vercel/postgres": "^0.5.0", - "@writerai/writer-sdk": "^0.40.2", - "@xata.io/client": "^0.28.0", - "@xenova/transformers": "^2.17.2", - "@zilliz/milvus2-sdk-node": ">=2.3.5", - "apify-client": "^2.7.1", - "assemblyai": "^4.6.0", - "better-sqlite3": ">=9.4.0 <12.0.0", - "cassandra-driver": "^4.7.2", - "cborg": "^4.1.1", - "cheerio": "^1.0.0-rc.12", - "chromadb": "*", - "closevector-common": "0.1.3", - "closevector-node": "0.1.6", - "closevector-web": "0.1.6", - "cohere-ai": "*", - "convex": "^1.3.1", - "couchbase": "^4.3.0", - "crypto-js": "^4.2.0", - "d3-dsv": "^2.0.0", - "discord.js": "^14.14.1", - "dria": "^0.0.3", - "duck-duck-scrape": "^2.2.5", - "epub2": "^3.0.1", - "faiss-node": "^0.5.1", - "firebase-admin": "^11.9.0 || ^12.0.0", - "google-auth-library": "*", - "googleapis": "*", - "hnswlib-node": "^3.0.0", - "html-to-text": "^9.0.5", - "ignore": "^5.2.0", - "interface-datastore": "^8.2.11", - "ioredis": "^5.3.2", - "it-all": "^3.0.4", - "jsdom": "*", - "jsonwebtoken": "^9.0.2", - "llmonitor": "^0.5.9", - "lodash": "^4.17.21", - "lunary": "^0.7.10", - "mammoth": "^1.6.0", - "mongodb": ">=5.2.0", - "mysql2": "^3.9.8", - "neo4j-driver": "*", - "node-llama-cpp": "*", - "notion-to-md": "^3.1.0", - "officeparser": "^4.0.4", - "pdf-parse": "1.1.1", - "pg": "^8.11.0", - "pg-copy-streams": "^6.0.5", - "pickleparser": "^0.2.1", - "playwright": "^1.32.1", - "portkey-ai": "^0.1.11", - "puppeteer": "*", - "pyodide": ">=0.24.1 <0.27.0", - "redis": "*", - "replicate": "^0.29.4", - "sonix-speech-recognition": "^2.1.1", - "srt-parser-2": "^1.2.3", - "typeorm": "^0.3.20", - "typesense": "^1.5.3", - "usearch": "^1.1.1", - "vectordb": "^0.1.4", - "voy-search": "0.6.2", - "weaviate-ts-client": "*", - "web-auth-library": "^1.0.3", - "ws": "^8.14.2", - "youtube-transcript": "^1.0.6", - "youtubei.js": "^9.1.0" - }, - "peerDependenciesMeta": { - "@arcjet/redact": { + "@arcjet/redact": { "optional": true }, "@aws-crypto/sha256-js": { @@ -3155,9 +664,6 @@ "convex": { "optional": true }, - "couchbase": { - "optional": true - }, "crypto-js": { "optional": true }, @@ -3233,9 +739,6 @@ "neo4j-driver": { "optional": true }, - "node-llama-cpp": { - "optional": true - }, "notion-to-md": { "optional": true }, @@ -3305,291 +808,5539 @@ "youtube-transcript": { "optional": true }, - "youtubei.js": { + "youtubei.js": { + "optional": true + } + } + }, + "models/embedjs-huggingface/node_modules/@smithy/eventstream-codec": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz", + "integrity": "sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "models/embedjs-huggingface/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "models/embedjs-huggingface/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "models/embedjs-huggingface/node_modules/@smithy/signature-v4": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", + "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-uri-escape": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "models/embedjs-huggingface/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "models/embedjs-huggingface/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "models/embedjs-huggingface/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "models/embedjs-huggingface/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "models/embedjs-huggingface/node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "models/embedjs-huggingface/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "models/embedjs-huggingface/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "models/embedjs-mistral": { + "name": "@llm-tools/embedjs-mistral", + "version": "0.0.1", + "license": "Apache-2.0", + "dependencies": { + "@langchain/core": "^0.3.6", + "@langchain/mistralai": "^0.1.1", + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7" + } + }, + "models/embedjs-ollama": { + "name": "@llm-tools/embedjs-ollama", + "version": "0.0.1", + "license": "Apache-2.0", + "dependencies": { + "@langchain/core": "^0.3.6", + "@langchain/ollama": "^0.1.0", + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7" + } + }, + "models/embedjs-openai": { + "name": "@llm-tools/embedjs-openai", + "version": "0.0.1", + "license": "Apache-2.0", + "dependencies": { + "@langchain/core": "^0.3.6", + "@langchain/openai": "^0.3.5", + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7" + } + }, + "models/embedjs-vertexai": { + "name": "@llm-tools/embedjs-vertexai", + "version": "0.0.1", + "license": "Apache-2.0", + "dependencies": { + "@langchain/core": "^0.3.6", + "@langchain/google-vertexai": "^0.1.0", + "@llm-tools/embedjs-interfaces": "0.0.1", + "debug": "^4.3.7" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.27.3.tgz", + "integrity": "sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==", + "license": "MIT", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { + "version": "18.19.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.54.tgz", + "integrity": "sha512-+BRgt0G5gYjTvdLac9sIeE0iZcJxi4Jc4PV5EUzqi+88jmQLr+fRZdv2tCTV7IHKSGxM6SaLoOXQWWUiLUItMw==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.658.1.tgz", + "integrity": "sha512-MCYLKmNy0FlNT9TvXfOxj0jh+ZQq+G9qEy/VZqu3JsQSgiFvFRdzgzcbQ9gQx7fZrDC/TPdABOTh483zI4cu9g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.658.1", + "@aws-sdk/client-sts": "3.658.1", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker": { + "version": "3.659.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sagemaker/-/client-sagemaker-3.659.0.tgz", + "integrity": "sha512-LbghCcB1T8TsgkuGmzF6xYWep+H8fyUm5KuqChrATqL3sRaS1fBthXpNag49L1y8p/4/A/keQUuNlgNlQp/iYA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.658.1", + "@aws-sdk/client-sts": "3.658.1", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.5", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.658.1.tgz", + "integrity": "sha512-lOuaBtqPTYGn6xpXlQF4LsNDsQ8Ij2kOdnk+i69Kp6yS76TYvtUuukyLL5kx8zE1c8WbYtxj9y8VNw9/6uKl7Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.658.1.tgz", + "integrity": "sha512-RGcZAI3qEA05JszPKwa0cAyp8rnS1nUvs0Sqw4hqLNQ1kD7b7V6CPjRXe7EFQqCOMvM4kGqx0+cEEVTOmBsFLw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.658.1" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.658.1.tgz", + "integrity": "sha512-yw9hc5blTnbT1V6mR7Cx9HGc9KQpcLQ1QXj8rntiJi6tIYu3aFNVEyy81JHL7NsuBSeQulJTvHO3y6r3O0sfRg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.658.1", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.658.1.tgz", + "integrity": "sha512-vJVMoMcSKXK2gBRSu9Ywwv6wQ7tXH8VL1fqB1uVxgCqBZ3IHfqNn4zvpMPWrwgO2/3wv7XFyikGQ5ypPTCw4jA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.4.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/property-provider": "^3.1.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/signature-v4": "^4.1.4", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-middleware": "^3.0.6", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.658.1.tgz", + "integrity": "sha512-JY4rZ4e2emL7PNHCU7F/BQV8PpQGEBZLkEoPD55RO4CitaIhlVZRpUCGLih+0Hw4MOnTUqJdfQBM+qZk6G+Now==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.658.1", + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.654.0.tgz", + "integrity": "sha512-kogsx3Ql81JouHS7DkheCDU9MYAvK0AokxjcshDveGmf7BbgbWCA8Fnb9wjQyNDaOXNvkZu8Z8rgkX91z324/w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.658.1.tgz", + "integrity": "sha512-4ubkJjEVCZflxkZnV1JDQv8P2pburxk1LrEp55telfJRzXrnowzBKwuV2ED0QMNC448g2B3VCaffS+Ct7c4IWQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-stream": "^3.1.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.658.1.tgz", + "integrity": "sha512-2uwOamQg5ppwfegwen1ddPu5HM3/IBSnaGlaKLFhltkdtZ0jiqTZWUtX2V+4Q+buLnT0hQvLS/frQ+7QUam+0Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.654.0", + "@aws-sdk/credential-provider-http": "3.658.1", + "@aws-sdk/credential-provider-process": "3.654.0", + "@aws-sdk/credential-provider-sso": "3.658.1", + "@aws-sdk/credential-provider-web-identity": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/credential-provider-imds": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.658.1" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.658.1.tgz", + "integrity": "sha512-XwxW6N+uPXPYAuyq+GfOEdfL/MZGAlCSfB5gEWtLBFmFbikhmEuqfWtI6CD60OwudCUOh6argd21BsJf8o1SJA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.654.0", + "@aws-sdk/credential-provider-http": "3.658.1", + "@aws-sdk/credential-provider-ini": "3.658.1", + "@aws-sdk/credential-provider-process": "3.654.0", + "@aws-sdk/credential-provider-sso": "3.658.1", + "@aws-sdk/credential-provider-web-identity": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/credential-provider-imds": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.654.0.tgz", + "integrity": "sha512-PmQoo8sZ9Q2Ow8OMzK++Z9lI7MsRUG7sNq3E72DVA215dhtTICTDQwGlXH2AAmIp7n+G9LLRds+4wo2ehG4mkg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.658.1.tgz", + "integrity": "sha512-YOagVEsZEk9DmgJEBg+4MBXrPcw/tYas0VQ5OVBqC5XHNbi2OBGJqgmjVPesuu393E7W0VQxtJFDS00O1ewQgA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.658.1", + "@aws-sdk/token-providers": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.654.0.tgz", + "integrity": "sha512-6a2g9gMtZToqSu+CusjNK5zvbLJahQ9di7buO3iXgbizXpLXU1rnawCpWxwslMpT5fLgMSKDnKDrr6wdEk7jSw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.654.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.658.1.tgz", + "integrity": "sha512-lfXA6kZS6GHyi/67EbfrKdLoqHR6j7G35eFwaqxyNkfMhNBpAF0eZK3SYiwnzdR9+Wb/enTFawYiFbG5R+dQzA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.658.1", + "@aws-sdk/client-sso": "3.658.1", + "@aws-sdk/client-sts": "3.658.1", + "@aws-sdk/credential-provider-cognito-identity": "3.658.1", + "@aws-sdk/credential-provider-env": "3.654.0", + "@aws-sdk/credential-provider-http": "3.658.1", + "@aws-sdk/credential-provider-ini": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/credential-provider-process": "3.654.0", + "@aws-sdk/credential-provider-sso": "3.658.1", + "@aws-sdk/credential-provider-web-identity": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/credential-provider-imds": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.654.0.tgz", + "integrity": "sha512-rxGgVHWKp8U2ubMv+t+vlIk7QYUaRCHaVpmUlJv0Wv6Q0KeO9a42T9FxHphjOTlCGQOLcjCreL9CF8Qhtb4mdQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.654.0.tgz", + "integrity": "sha512-OQYb+nWlmASyXfRb989pwkJ9EVUMP1CrKn2eyTk3usl20JZmKo2Vjis6I0tLUkMSxMhnBJJlQKyWkRpD/u1FVg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.654.0.tgz", + "integrity": "sha512-gKSomgltKVmsT8sC6W7CrADZ4GHwX9epk3GcH6QhebVO3LA9LRbkL3TwOPUXakxxOLLUTYdOZLIOtFf7iH00lg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.654.0.tgz", + "integrity": "sha512-liCcqPAyRsr53cy2tYu4qeH4MMN0eh9g6k56XzI5xd4SghXH5YWh4qOYAlQ8T66ZV4nPMtD8GLtLXGzsH8moFg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.374.0.tgz", + "integrity": "sha512-9WpRUbINdGroV3HiZZIBoJvL2ndoWk39OfwxWs2otxByppJZNN14bg/lvCx5e8ggHUti7IBk5rb0nqQZ4m05pg==", + "deprecated": "This package has moved to @smithy/protocol-http", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/protocol-http": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", + "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.654.0.tgz", + "integrity": "sha512-ydGOrXJxj3x0sJhsXyTmvJVLAE0xxuTWFJihTl67RtaO7VRNtd82I3P3bwoMMaDn5WpmV5mPo8fEUDRlBm3fPg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz", + "integrity": "sha512-2xLJvSdzcZZAg0lsDLUAuSQuihzK0dcxIK7WmfuJeF7DGKJFmp9czQmz5f3qiDz6IDQzvgK1M9vtJSVCslJbyQ==", + "deprecated": "This package has moved to @smithy/signature-v4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/signature-v4": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/is-array-buffer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz", + "integrity": "sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/signature-v4": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.1.0.tgz", + "integrity": "sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^1.1.0", + "@smithy/is-array-buffer": "^1.1.0", + "@smithy/types": "^1.2.0", + "@smithy/util-hex-encoding": "^1.1.0", + "@smithy/util-middleware": "^1.1.0", + "@smithy/util-uri-escape": "^1.1.0", + "@smithy/util-utf8": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz", + "integrity": "sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-hex-encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", + "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-middleware": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz", + "integrity": "sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-uri-escape": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", + "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz", + "integrity": "sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.654.0.tgz", + "integrity": "sha512-D8GeJYmvbfWkQDtTB4owmIobSMexZel0fOoetwvgCQ/7L8VPph3Q2bn1TRRIXvH7wdt6DcDxA3tKMHPBkT3GlA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.654.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.654.0.tgz", + "integrity": "sha512-VWvbED3SV+10QJIcmU/PKjsKilsTV16d1I7/on4bvD/jo1qGeMXqLDBSen3ks/tuvXZF/mFc7ZW/W2DiLVtO7A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.654.0.tgz", + "integrity": "sha512-i902fcBknHs0Irgdpi62+QMvzxE+bczvILXigYrlHL4+PiEnlMVpni5L5W1qCkNZXf8AaMrSBuR1NZAGp6UOUw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/types": "^3.4.2", + "@smithy/util-endpoints": "^2.1.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.654.0.tgz", + "integrity": "sha512-ykYAJqvnxLt7wfrqya28wuH3/7NdrwzfiFd7NqEVQf7dXVxL5RPEpD7DxjcyQo3DsHvvdUvGZVaQhozycn1pzA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/types": "^3.4.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.654.0.tgz", + "integrity": "sha512-a0ojjdBN6pqv6gB4H/QPPSfhs7mFtlVwnmKCM/QrTaFzN0U810PJ1BST3lBx5sa23I5jWHGaoFY+5q65C3clLQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { "optional": true } } }, - "node_modules/@langchain/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.3.3.tgz", - "integrity": "sha512-WAtkmhbdl2T41qzimTzhb3pXCHQxO4onqxzPxgdf3KftQdTwLq0YYBDhozRMZLNAd/+cfH0ymZGaZSsnc9Ogsg==", + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.8.0.tgz", + "integrity": "sha512-YvFMowkXzLbXNM11yZtVLhUCmuG0ex7JKOH366ipjmHBhL3vpDcPAeWF+jf0X+jVXwFqo3UhsWUq4kH0ZPdu/g==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.17.0.tgz", + "integrity": "sha512-62Vv8nC+uPId3j86XJ0WI+sBf0jlqTqPUFCBNrGtlaUeQUIXWV/D8GE5A1d+Qx8H7OQojn2WguC8kChD6v0shA==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.8.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.9.0", + "@azure/logger": "^1.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", + "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.10.0.tgz", + "integrity": "sha512-dqLWQsh9Nro1YQU+405POVtXnwrIVqPyfUzc4zXCbThTg7+vNNaiMkwbX9AMXKyoFYFClxmB3s25ZFr3+jZkww==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/cosmos": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-4.1.1.tgz", + "integrity": "sha512-EKcRHZy3enhz7hU/qlwW2urcoF7haFkQRbLhR+rUaAtzDaN6+F/rH4xJtNc94NjOEoeHUI+bkze63ZA55Gca0A==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.7.1", + "@azure/core-rest-pipeline": "^1.15.1", + "@azure/core-tracing": "^1.1.1", + "@azure/core-util": "^1.8.1", + "fast-json-stable-stringify": "^2.1.0", + "jsbi": "^4.3.0", + "priorityqueuejs": "^2.0.0", + "semaphore": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.4.tgz", + "integrity": "sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.4", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", + "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-decorators": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", + "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", + "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", + "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.4", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", + "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", + "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", + "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.4", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.25.4", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.4", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.25.4", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", + "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.5.0.tgz", + "integrity": "sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.5.0", + "conventional-changelog-conventionalcommits": "^7.0.2" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.5.0.tgz", + "integrity": "sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@datastax/astra-db-ts": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@datastax/astra-db-ts/-/astra-db-ts-1.5.0.tgz", + "integrity": "sha512-Z9pEVyyHfglh8XAKrIASxdvORdei4pLUKDDGarqYvBkA9B9rKdqqdN+4I42Dz8paU5uscu8FwM5mc+Ly/U6jfA==", + "license": "Apache-2.0", + "dependencies": { + "fetch-h2": "^3.0.2", + "safe-stable-stringify": "^2.4.3", + "typed-emitter": "^2.1.0", + "uuidv7": "^0.6.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.2.0.tgz", + "integrity": "sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", + "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/compat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz", + "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@huggingface/inference": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-2.8.1.tgz", + "integrity": "sha512-EfsNtY9OR6JCNaUa5bZu2mrs48iqeTz0Gutwf+fU0Kypx33xFQB4DKMhp8u4Ee6qVbLbNWvTHuWwlppLQl4p4Q==", + "license": "MIT", + "dependencies": { + "@huggingface/tasks": "^0.12.9" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@huggingface/tasks": { + "version": "0.12.14", + "resolved": "https://registry.npmjs.org/@huggingface/tasks/-/tasks-0.12.14.tgz", + "integrity": "sha512-Q0osp9nEDQOj1hujCzuGmqIK6nbdi+ogyT0UNlTP5B4xWWEtSi5elkvBaSdQeCksa1XiO1bDC8qu+zAZvRDchQ==", + "license": "MIT" + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-3.0.1.tgz", + "integrity": "sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-4.0.1.tgz", + "integrity": "sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.5.5", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/editor": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-3.0.1.tgz", + "integrity": "sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/expand": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-3.0.1.tgz", + "integrity": "sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.6.tgz", + "integrity": "sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-3.0.1.tgz", + "integrity": "sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-2.0.1.tgz", + "integrity": "sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-3.0.1.tgz", + "integrity": "sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/prompts": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-6.0.1.tgz", + "integrity": "sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^3.0.1", + "@inquirer/confirm": "^4.0.1", + "@inquirer/editor": "^3.0.1", + "@inquirer/expand": "^3.0.1", + "@inquirer/input": "^3.0.1", + "@inquirer/number": "^2.0.1", + "@inquirer/password": "^3.0.1", + "@inquirer/rawlist": "^3.0.1", + "@inquirer/search": "^2.0.1", + "@inquirer/select": "^3.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-3.0.1.tgz", + "integrity": "sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/search": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-2.0.1.tgz", + "integrity": "sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-3.0.1.tgz", + "integrity": "sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lancedb/lancedb": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb/-/lancedb-0.10.0.tgz", + "integrity": "sha512-/sNUZze9Ed6N2T6y3NuEOSPPE3hSvJ4UHfZ+uAOBjNprrECRoCn4LTjza6dA4Za4Csl7K19AwBhlvhLQLvi48Q==", + "cpu": [ + "x64", + "arm64" + ], + "license": "Apache 2.0", + "os": [ + "darwin", + "linux", + "win32" + ], + "dependencies": { + "axios": "^1.7.2", + "reflect-metadata": "^0.2.2" + }, + "engines": { + "node": ">= 18" + }, + "optionalDependencies": { + "@lancedb/lancedb-darwin-arm64": "0.10.0", + "@lancedb/lancedb-darwin-x64": "0.10.0", + "@lancedb/lancedb-linux-arm64-gnu": "0.10.0", + "@lancedb/lancedb-linux-x64-gnu": "0.10.0", + "@lancedb/lancedb-win32-x64-msvc": "0.10.0" + }, + "peerDependencies": { + "apache-arrow": ">=13.0.0 <=17.0.0" + } + }, + "node_modules/@lancedb/lancedb-darwin-arm64": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-darwin-arm64/-/lancedb-darwin-arm64-0.10.0.tgz", + "integrity": "sha512-ywlSfQ/mRVTFavTophKn+kaqzY5ylDZBAzAu6u+VGATd3joUot5PurCXjNfJ/Z7LQDQ/80SRdJgia7e4ZV2MmQ==", + "cpu": [ + "arm64" + ], + "license": "Apache 2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@lancedb/lancedb-darwin-x64": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-darwin-x64/-/lancedb-darwin-x64-0.10.0.tgz", + "integrity": "sha512-6oM0RsscSGWF7rSD2Sz1izhIrwGLunXA5bMXVnYI/Jvaaczdq7avJ1pQfQeaoR9H844E5otlxdyPgb7mePMVOw==", + "cpu": [ + "x64" + ], + "license": "Apache 2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@lancedb/lancedb-linux-arm64-gnu": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-linux-arm64-gnu/-/lancedb-linux-arm64-gnu-0.10.0.tgz", + "integrity": "sha512-xFyN1vwplMNrKT1dleYyhMlE+IS+czrtLpKMIjLhn0NptkE5yv1Yy1nNWjjeqdzpmWgpUhdjqegrzLMlZB5n6A==", + "cpu": [ + "arm64" + ], + "license": "Apache 2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@lancedb/lancedb-linux-x64-gnu": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-linux-x64-gnu/-/lancedb-linux-x64-gnu-0.10.0.tgz", + "integrity": "sha512-G0xQVW4g4TOy71NVXHhGD0WwcIWE6QUgx8k5SC8bbRUiy3zCtTaHQW31xWLxOP9MMGIyXGD4PZpU68UuzQiY6Q==", + "cpu": [ + "x64" + ], + "license": "Apache 2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@lancedb/lancedb-win32-x64-msvc": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-win32-x64-msvc/-/lancedb-win32-x64-msvc-0.10.0.tgz", + "integrity": "sha512-Ny1mh4qHivD6BgH+nAlaFTAzuQ48qQn2HsFvl0qUOk/tRHisS89VzMlvdmyjEQN9hiZs1PfSjK0LScifl6dlKA==", + "cpu": [ + "x64" + ], + "license": "Apache 2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@langchain/anthropic": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@langchain/anthropic/-/anthropic-0.3.3.tgz", + "integrity": "sha512-OvnSV3Tjhb87n7CxWzIcJqcJEM4qoFDYYt6Rua7glQF/Ud5FBTurlzoMunLPTQeF5GdPiaOwP3nUw6I9gF7ppw==", + "license": "MIT", + "dependencies": { + "@anthropic-ai/sdk": "^0.27.3", + "fast-xml-parser": "^4.4.1", + "zod": "^3.22.4", + "zod-to-json-schema": "^3.22.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/cohere": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@langchain/cohere/-/cohere-0.3.0.tgz", + "integrity": "sha512-JlevgVK4oUwHiPcP7Xw55Xlp8FdbCsjDuWbcjWgeYcdTTH1sIItG/nDREZa8Z+MfXYca2njk4sZjCIuGsY7fVA==", + "license": "MIT", + "dependencies": { + "cohere-ai": "^7.10.5", + "uuid": "^10.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.23.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/core": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.3.6.tgz", + "integrity": "sha512-VFMB7m1RDDaslCRuoFoGHLesLp7qKYWufCAgUtNcVfcrSeL7cuoOHE97rlnknzAhmYNcOKonYdZ0t9HpL9d1pg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^5.0.0", + "camelcase": "6", + "decamelize": "1.2.0", + "js-tiktoken": "^1.0.12", + "langsmith": "^0.1.56", + "mustache": "^4.2.0", + "p-queue": "^6.6.2", + "p-retry": "4", + "uuid": "^10.0.0", + "zod": "^3.22.4", + "zod-to-json-schema": "^3.22.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@langchain/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@langchain/google-common": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@langchain/google-common/-/google-common-0.1.1.tgz", + "integrity": "sha512-oT/6lBev/Ufkp1dJbOTJ2S7xD9c+w9CqnqKqFOSxuZJbM4G8hzJtt7PDBOGfamIwtQP8dR7ORKXs1sCl+f5Tig==", + "license": "MIT", + "dependencies": { + "uuid": "^10.0.0", + "zod-to-json-schema": "^3.22.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/google-gauth": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@langchain/google-gauth/-/google-gauth-0.1.0.tgz", + "integrity": "sha512-0kps1NmaNiSl4n3lRw+7xsyhrEfIxNqBjih0kNYWPjLg55f9I9+QAlz7F1Sz/628HF1WQLFLQcBQA4geGzvenQ==", + "license": "MIT", + "dependencies": { + "@langchain/google-common": "~0.1.0", + "google-auth-library": "^8.9.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/google-vertexai": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@langchain/google-vertexai/-/google-vertexai-0.1.0.tgz", + "integrity": "sha512-xTi5NvNGSLQl/7OTsj4QTT0DkNbZ7cYDrEB0HqpZOwo6I5dulh/h2payGVQ6hdXj7Yyv78dRc5FdQSbyHui/WQ==", + "license": "MIT", + "dependencies": { + "@langchain/google-gauth": "~0.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/mistralai": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@langchain/mistralai/-/mistralai-0.1.1.tgz", + "integrity": "sha512-gnHdQRfn+iBReKD0u1nydGqHgVOjnKHpd0Q2qEN61ZuxiqFOOauWYkrbyml7tzcOdMv2vUAr5+pjpXip+ez59w==", + "license": "MIT", + "dependencies": { + "@mistralai/mistralai": "^0.4.0", + "uuid": "^10.0.0", + "zod": "^3.22.4", + "zod-to-json-schema": "^3.22.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/ollama": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@langchain/ollama/-/ollama-0.1.0.tgz", + "integrity": "sha512-TI4DGenLf1ApoxFf4Bx/VPyO+a+poJKIul8AGm/FEyORtw3JPq1UDR6SdkGETrkDqzzdK9R0DvFRStd1MSTE/w==", + "license": "MIT", + "dependencies": { + "ollama": "^0.5.6", + "uuid": "^10.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/openai": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.3.5.tgz", + "integrity": "sha512-1bCN+jEpN8IHvZTyr2kCDXHEIL+ZkE2s23tq+V6+b325GyVY2mm2zsuH6zoABCs8ayJbMaiilMJ+9AtFUtFwpw==", + "license": "MIT", + "dependencies": { + "js-tiktoken": "^1.0.12", + "openai": "^4.57.3", + "zod": "^3.22.4", + "zod-to-json-schema": "^3.22.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.26 <0.4.0" + } + }, + "node_modules/@langchain/textsplitters": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@langchain/textsplitters/-/textsplitters-0.1.0.tgz", + "integrity": "sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==", + "license": "MIT", + "dependencies": { + "js-tiktoken": "^1.0.12" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@llm-tools/embedjs": { + "resolved": "core/embedjs", + "link": true + }, + "node_modules/@llm-tools/embedjs-anthropic": { + "resolved": "models/embedjs-anthropic", + "link": true + }, + "node_modules/@llm-tools/embedjs-astra": { + "resolved": "databases/embedjs-astra", + "link": true + }, + "node_modules/@llm-tools/embedjs-cohere": { + "resolved": "models/embedjs-cohere", + "link": true + }, + "node_modules/@llm-tools/embedjs-cosmos": { + "resolved": "databases/embedjs-cosmos", + "link": true + }, + "node_modules/@llm-tools/embedjs-hnswlib": { + "resolved": "databases/embedjs-hnswlib", + "link": true + }, + "node_modules/@llm-tools/embedjs-huggingface": { + "resolved": "models/embedjs-huggingface", + "link": true + }, + "node_modules/@llm-tools/embedjs-interfaces": { + "resolved": "core/embedjs-interfaces", + "link": true + }, + "node_modules/@llm-tools/embedjs-lancedb": { + "resolved": "databases/embedjs-lancedb", + "link": true + }, + "node_modules/@llm-tools/embedjs-lmdb": { + "resolved": "databases/embedjs-lmdb", + "link": true + }, + "node_modules/@llm-tools/embedjs-loader-confluence": { + "resolved": "loaders/embedjs-loader-confluence", + "link": true + }, + "node_modules/@llm-tools/embedjs-loader-csv": { + "resolved": "loaders/embedjs-loader-csv", + "link": true + }, + "node_modules/@llm-tools/embedjs-loader-msoffice": { + "resolved": "loaders/embedjs-loader-msoffice", + "link": true + }, + "node_modules/@llm-tools/embedjs-loader-pdf": { + "resolved": "loaders/embedjs-loader-pdf", + "link": true + }, + "node_modules/@llm-tools/embedjs-loader-sitemap": { + "resolved": "loaders/embedjs-loader-sitemap", + "link": true + }, + "node_modules/@llm-tools/embedjs-loader-web": { + "resolved": "loaders/embedjs-loader-web", + "link": true + }, + "node_modules/@llm-tools/embedjs-loader-youtube": { + "resolved": "loaders/embedjs-loader-youtube", + "link": true + }, + "node_modules/@llm-tools/embedjs-mistral": { + "resolved": "models/embedjs-mistral", + "link": true + }, + "node_modules/@llm-tools/embedjs-mongodb": { + "resolved": "databases/embedjs-mongodb", + "link": true + }, + "node_modules/@llm-tools/embedjs-ollama": { + "resolved": "models/embedjs-ollama", + "link": true + }, + "node_modules/@llm-tools/embedjs-openai": { + "resolved": "models/embedjs-openai", + "link": true + }, + "node_modules/@llm-tools/embedjs-pinecone": { + "resolved": "databases/embedjs-pinecone", + "link": true + }, + "node_modules/@llm-tools/embedjs-qdrant": { + "resolved": "databases/embedjs-qdrant", + "link": true + }, + "node_modules/@llm-tools/embedjs-redis": { + "resolved": "databases/embedjs-redis", + "link": true + }, + "node_modules/@llm-tools/embedjs-utils": { + "resolved": "core/embedjs-utils", + "link": true + }, + "node_modules/@llm-tools/embedjs-vertexai": { + "resolved": "models/embedjs-vertexai", + "link": true + }, + "node_modules/@llm-tools/embedjs-weaviate": { + "resolved": "databases/embedjs-weaviate", + "link": true + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.1.3.tgz", + "integrity": "sha512-VV667lP23gIsQkb80rnQwAHjj6F1uZp30qTnvLSlep3pOomzXcQBMFp4ZmJLeGJnnPy54JjNsYBFyg9X95wCPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.1.3.tgz", + "integrity": "sha512-kuhKKJxGCQr9gBtUd7cVBBn6OtwQg7vIiD5gHEZb+jWLJulg6N4uPSLTab8W9tvpb3ryRTAejMt7F89/2MoRrQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.1.3.tgz", + "integrity": "sha512-R0CkYoJPHUfxPe2LaAqMGwTf5+1eXchUMNISO8OKEvKkS/zg2emIYTOb29v1k8WGSmdJkgQneBav/W3h5NorzA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.1.3.tgz", + "integrity": "sha512-XnSHGKsJ1Fr5LBjyDkG7JnVJlduhg7AhV1J6YQujStsKnehuiidsNW0InEJrAO4QMHqquwnCfLvU9PPJfpFVYw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.1.3.tgz", + "integrity": "sha512-epvFL9/Tem00evtuq05kqWbRppJ4G/D8wa6LnQmOu779VmbrY6+M3v3h4fnt2QqMQt3+J6Cg/gZACDlDcH+eUw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.1.3.tgz", + "integrity": "sha512-S6P96biJyrt/CUYSP0v4OH1U9ITzHhHCh1kn7hHOscS3S1+T/D74sCJKQ9xb/Raos2NJHqtZ8EyQVEVjOzmqbg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@mistralai/mistralai": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-0.4.0.tgz", + "integrity": "sha512-KmFzNro1RKxIFh19J3osmUQhucefBBauMXN5fa9doG6dT9OHR/moBvvn+riVlR7c0AVfuxO8Dfa03AyLYYzbyg==", + "license": "ISC", + "dependencies": { + "node-fetch": "^2.6.7" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", + "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/git": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.1.tgz", + "integrity": "sha512-BBWMMxeQzalmKadyimwb2/VVQyJB01PH0HhVSNLHNBDZN/M/h/02P6f8fxedIiFhpMj11SO9Ep5tKTBE7zL2nw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.0.1.tgz", + "integrity": "sha512-YW6PZ99sc1Q4DINEY2td5z9Z3rwbbsx7CyCnOc7UXUUdePXh5gPi1UeaoQVmKQMVbIU7aOwX2l1OG5ZfjgGi5g==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "normalize-package-data": "^7.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.0.tgz", + "integrity": "sha512-4nw3vOVR+vHUOT8+U4giwe2tcGv+R3pwwRidUe67DoMBTjhrfr6rZYJVVwdkBE+Um050SG+X9tf0Jo4fOpn01w==", + "dev": true, + "license": "ISC", "dependencies": { - "ansi-styles": "^5.0.0", - "camelcase": "6", - "decamelize": "1.2.0", - "js-tiktoken": "^1.0.12", - "langsmith": "^0.1.56", - "mustache": "^4.2.0", - "p-queue": "^6.6.2", - "p-retry": "4", - "uuid": "^10.0.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@langchain/google-common": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@langchain/google-common/-/google-common-0.1.0.tgz", - "integrity": "sha512-xNS3FdEO60hNxESb/10bfOENZ+e0zpQOTB97WwzrOddhgVS3j9GcWRfWtpIxS7xIySFshzGbwflgn3fESR4Frg==", + "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.1.tgz", + "integrity": "sha512-ZscqKtJqy7oj6MgXEJcHQ1om4utU0Q84QtC28UVuiO6ALSO9sDPanXdu6Wd1oYhItW8fx2u96zRFUE8BuPlAjA==", + "dev": true, + "license": "ISC", "dependencies": { - "uuid": "^10.0.0", - "zod-to-json-schema": "^3.22.4" + "which": "^5.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@langchain/google-gauth": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@langchain/google-gauth/-/google-gauth-0.1.0.tgz", - "integrity": "sha512-0kps1NmaNiSl4n3lRw+7xsyhrEfIxNqBjih0kNYWPjLg55f9I9+QAlz7F1Sz/628HF1WQLFLQcBQA4geGzvenQ==", + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", "dependencies": { - "@langchain/google-common": "~0.1.0", - "google-auth-library": "^8.9.0" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">=18" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@nrwl/devkit": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.8.3.tgz", + "integrity": "sha512-67vZJRMCEA543A0uz8dPTZ5lX4wsAlgsr24KJafsUxBC2WCf9z4BqcLj0jVWfmRdKJmu2UwaxtD2UB1bekt3sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/devkit": "19.8.3" + } + }, + "node_modules/@nrwl/eslint-plugin-nx": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-19.8.3.tgz", + "integrity": "sha512-FitfvjOJNUsvpkNaMY321rOwMI4VkRWc1KLJILCaogQs3I10m3oWNSPz3KfMnxPmIUcxicSQ2aQaibTe0vzWFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/eslint-plugin": "19.8.3" + } + }, + "node_modules/@nrwl/js": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.8.3.tgz", + "integrity": "sha512-PIRmAkW2lQGllxrzAfA92Gzm8O6kJQzvMcRTNzOI6GHtsgmZ8hIniu11BFr0oVtnppN4efVRnhYZbPyyP7aOoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/js": "19.8.3" + } + }, + "node_modules/@nrwl/tao": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.8.3.tgz", + "integrity": "sha512-byjBtOXx+xGjMu1wKopJSJbrR3gKqTsCEgp1+YSZ45+iFKxFdXLJrGsyhVqBovCKVBM+5/KtGuEkZoUPlP8JWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "19.8.3", + "tslib": "^2.3.0" }, - "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" + "bin": { + "tao": "index.js" } }, - "node_modules/@langchain/google-vertexai": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@langchain/google-vertexai/-/google-vertexai-0.1.0.tgz", - "integrity": "sha512-xTi5NvNGSLQl/7OTsj4QTT0DkNbZ7cYDrEB0HqpZOwo6I5dulh/h2payGVQ6hdXj7Yyv78dRc5FdQSbyHui/WQ==", + "node_modules/@nrwl/workspace": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.8.3.tgz", + "integrity": "sha512-mJURS7J1vtfwa2As1ZHzl5wtp+I9zWwmfOJeUGquqSe3ojS/UiNg0e23di265mGxwK2eknEOV7CtU8hKO/nRTA==", + "dev": true, + "license": "MIT", "dependencies": { - "@langchain/google-gauth": "~0.1.0" + "@nx/workspace": "19.8.3" + } + }, + "node_modules/@nx/devkit": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.8.3.tgz", + "integrity": "sha512-uX50CAM11tzhwswf0ftN0QfzW2FM3M4Mf/pD/nRRnmsTkcPTdMXVu4LHuLVTp4CMsaO+cOQlqgHXujHYfOIctg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nrwl/devkit": "19.8.3", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" }, - "engines": { - "node": ">=18" + "peerDependencies": { + "nx": ">= 17 <= 20" + } + }, + "node_modules/@nx/eslint": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-19.8.3.tgz", + "integrity": "sha512-ohYG6tAXFc3gYvFWzOSno8+UmUZaq3FqC6+eMm7SOnZS+Movwdiw7z2Iv5eQ8YXTR5vEBmgbzqpMCk1o+t63ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/devkit": "19.8.3", + "@nx/js": "19.8.3", + "@nx/linter": "19.8.3", + "semver": "^7.5.3", + "tslib": "^2.3.0", + "typescript": "~5.4.2" }, "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" + "@zkochan/js-yaml": "0.0.7", + "eslint": "^8.0.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "@zkochan/js-yaml": { + "optional": true + } } }, - "node_modules/@langchain/mistralai": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@langchain/mistralai/-/mistralai-0.1.1.tgz", - "integrity": "sha512-gnHdQRfn+iBReKD0u1nydGqHgVOjnKHpd0Q2qEN61ZuxiqFOOauWYkrbyml7tzcOdMv2vUAr5+pjpXip+ez59w==", + "node_modules/@nx/eslint-plugin": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-19.8.3.tgz", + "integrity": "sha512-HuYRDp5o9xmsQiFOTTAbLFxo5ofHLs+ZR66dQT1qSwPDd0iAPvIucWtXAts/AdBjZy5hNOFtYUUkQZBEzULk4Q==", + "dev": true, + "license": "MIT", "dependencies": { - "@mistralai/mistralai": "^0.4.0", - "uuid": "^10.0.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.4" + "@eslint/compat": "^1.1.1", + "@nrwl/eslint-plugin-nx": "19.8.3", + "@nx/devkit": "19.8.3", + "@nx/js": "19.8.3", + "@typescript-eslint/type-utils": "^8.0.0", + "@typescript-eslint/utils": "^8.0.0", + "chalk": "^4.1.0", + "confusing-browser-globals": "^1.0.9", + "globals": "^15.9.0", + "jsonc-eslint-parser": "^2.1.0", + "semver": "^7.5.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.13.2 || ^7.0.0 || ^8.0.0", + "eslint-config-prettier": "^9.0.0" }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/@nx/eslint-plugin/node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, - "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@langchain/openai": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.3.2.tgz", - "integrity": "sha512-p513TVHkZ+mMV4dGloprPFKaukOuOZxyPXY/IWReQK34c1dpnywmjrXg8ydcnfncNbq+kJ/kKe671NK9bic4WA==", - "dependencies": { - "js-tiktoken": "^1.0.12", - "openai": "^4.57.3", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" + "node_modules/@nx/eslint/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=18" + "node": ">=14.17" + } + }, + "node_modules/@nx/js": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.8.3.tgz", + "integrity": "sha512-hugBafx0jwMa8ebs20XINCkhjvPNz+wW4qgSo4TtmPXu9NLZ/yVSM8nwOfdnZn1D4UOHu7LaYCBwp09Hrf2F9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.2", + "@babel/plugin-proposal-decorators": "^7.22.7", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-runtime": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/preset-typescript": "^7.22.5", + "@babel/runtime": "^7.22.6", + "@nrwl/js": "19.8.3", + "@nx/devkit": "19.8.3", + "@nx/workspace": "19.8.3", + "babel-plugin-const-enum": "^1.0.1", + "babel-plugin-macros": "^2.8.0", + "babel-plugin-transform-typescript-metadata": "^0.3.1", + "chalk": "^4.1.0", + "columnify": "^1.6.0", + "detect-port": "^1.5.1", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "ignore": "^5.0.4", + "js-tokens": "^4.0.0", + "jsonc-parser": "3.2.0", + "minimatch": "9.0.3", + "npm-package-arg": "11.0.1", + "npm-run-path": "^4.0.1", + "ora": "5.3.0", + "semver": "^7.5.3", + "source-map-support": "0.5.19", + "ts-node": "10.9.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0" }, "peerDependencies": { - "@langchain/core": ">=0.2.26 <0.4.0" + "verdaccio": "^5.0.4" + }, + "peerDependenciesMeta": { + "verdaccio": { + "optional": true + } } }, - "node_modules/@langchain/textsplitters": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@langchain/textsplitters/-/textsplitters-0.0.3.tgz", - "integrity": "sha512-cXWgKE3sdWLSqAa8ykbCcUsUF1Kyr5J3HOWYGuobhPEycXW4WI++d5DhzdpL238mzoEXTi90VqfSCra37l5YqA==", + "node_modules/@nx/linter": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-19.8.3.tgz", + "integrity": "sha512-wo0mXEV1D1WnZsMUYV0kDCIgY0eR8uV9SfP6B0blVNtUL87yDahsr9oEafHHqHFiPBzjSGjSzIMbPt+lXZnoBw==", + "dev": true, + "license": "MIT", "dependencies": { - "@langchain/core": ">0.2.0 <0.3.0", - "js-tiktoken": "^1.0.12" - }, + "@nx/eslint": "19.8.3" + } + }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.3.tgz", + "integrity": "sha512-ORHFFWMZcvFi0xcpCaXccXVEhFwAevSHOIKfW359+12H9w7VW2O42B+2NcVMK1mrDTOjlXTd+0AmAu7P4NzWFA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18" + "node": ">= 10" } }, - "node_modules/@langchain/textsplitters/node_modules/@langchain/core": { - "version": "0.2.33", - "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.2.33.tgz", - "integrity": "sha512-8WMied0Y5c4YDUjvoQqr/M63jAuZ3e+YqCAaszeGeBJbsHFoCdj8Ppr/yP6moAvsLImntxUXC6BxqAIDYkpGkg==", - "dependencies": { - "ansi-styles": "^5.0.0", - "camelcase": "6", - "decamelize": "1.2.0", - "js-tiktoken": "^1.0.12", - "langsmith": "^0.1.56-rc.1", - "mustache": "^4.2.0", - "p-queue": "^6.6.2", - "p-retry": "4", - "uuid": "^10.0.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" - }, + "node_modules/@nx/nx-darwin-x64": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.3.tgz", + "integrity": "sha512-Ji9DPA0tuzygMcypD/FHRDQSPipcRqMNmSaNKxVpcCbozVTWHvqXFk0rloDIUnxnE0+zvE9LN71H2sS4ZHdTQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.8.3.tgz", + "integrity": "sha512-Ys+PqtBZCS+QBNs7he3fnxVhMWz/lSSaBVUlVHoQcV1Y4clEpP2TWNQSsbaVnnpcB7pdmKN5ymWdaCaAQuqCMw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.8.3.tgz", + "integrity": "sha512-hGOlML60ELXkgkqLHB/w/sXbTbXFhOQGSXC72CjaP5G0u1gj8eTQKJ7WEsqPAFMk5SLFFxqM7eid0LmAYYuZWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.8.3.tgz", + "integrity": "sha512-K/5iVbLbhsx28YtZHvveJgF41rbr2kMdabooZeFqy6VReN7U/zGJMjpV1FzDlf3TNr9jyjPDZgVQRS+qXau2qA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.8.3.tgz", + "integrity": "sha512-zqzWjFniZDXiI/3MYxbJ0yIenUKr56apLy70oABTBHx++dsUA3/DxLMNypMA82a8KQtsbePWUi3Pgtr+JIMNXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.3.tgz", + "integrity": "sha512-W1RRCqsQvpur4BxP5g5cQwjZB6jhxYLSSXi3QQDaU5ITkaV5Pdj/L7D/G6YgRB8lzKZrXc57aLJ5UKY/Z+di7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.8.3.tgz", + "integrity": "sha512-waTo0zBBGnmU7fS87IpOnVGx7EHa0umzSMlGG0LUoU6swOeNODezsBn1Vbvaw1o7sStWBzdEBlxLxHOQXRAidg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.8.3.tgz", + "integrity": "sha512-lio7ulblEMs1otMtVIrdfdMTBqKRZEHim57AcMHSVnwmtl2ENP6TR3YIgyigjfLlkPanNU7i0QQ4h6Nk2I/FRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.8.3.tgz", + "integrity": "sha512-RU11iXJzdrw5CmogT2AwsjxK7g8vWf6Oy23NlrvsQFODtavjqAWoD5qpUY/H16s9lVDwrpzCbGbAXph0lbgLKA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18" + "node": ">= 10" } }, - "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.1.3.tgz", - "integrity": "sha512-VV667lP23gIsQkb80rnQwAHjj6F1uZp30qTnvLSlep3pOomzXcQBMFp4ZmJLeGJnnPy54JjNsYBFyg9X95wCPw==", + "node_modules/@nx/workspace": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.8.3.tgz", + "integrity": "sha512-bIUtPwvt2PGu7k5vLUBB6BNpCviOVCDXRk4JXiE11O+RzWpiNr3rMn9w9fPh7InezAkMi1hiyA7D+SrXaLmJlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nrwl/workspace": "19.8.3", + "@nx/devkit": "19.8.3", + "chalk": "^4.1.0", + "enquirer": "~2.3.6", + "nx": "19.8.3", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + } + }, + "node_modules/@oxc-resolver/binding-darwin-arm64": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-1.12.0.tgz", + "integrity": "sha512-wYe+dlF8npM7cwopOOxbdNjtmJp17e/xF5c0K2WooQXy5VOh74icydM33+Uh/SZDgwyum09/U1FVCX5GdeQk+A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.1.3.tgz", - "integrity": "sha512-kuhKKJxGCQr9gBtUd7cVBBn6OtwQg7vIiD5gHEZb+jWLJulg6N4uPSLTab8W9tvpb3ryRTAejMt7F89/2MoRrQ==", + "node_modules/@oxc-resolver/binding-darwin-x64": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-1.12.0.tgz", + "integrity": "sha512-FZxxp99om+SlvBr1cjzF8A3TjYcS0BInCqjUlM+2f9m9bPTR2Bng9Zq5Q09ZQyrKJjfGKqlOEHs3akuVOnrx3Q==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.1.3.tgz", - "integrity": "sha512-R0CkYoJPHUfxPe2LaAqMGwTf5+1eXchUMNISO8OKEvKkS/zg2emIYTOb29v1k8WGSmdJkgQneBav/W3h5NorzA==", + "node_modules/@oxc-resolver/binding-freebsd-x64": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-1.12.0.tgz", + "integrity": "sha512-BZi0iU6IEOnXGSkqt1OjTTkN9wfyaK6kTpQwL/axl8eCcNDc7wbv1vloHgILf7ozAY1TP75nsLYlASYI4B5kGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@oxc-resolver/binding-linux-arm-gnueabihf": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.12.0.tgz", + "integrity": "sha512-L2qnMEnZAqxbG9b1J3di/w/THIm+1fMVfbbTMWIQNMMXdMeqqDN6ojnOLDtuP564rAh4TBFPdLyEfGhMz6ipNA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.1.3.tgz", - "integrity": "sha512-XnSHGKsJ1Fr5LBjyDkG7JnVJlduhg7AhV1J6YQujStsKnehuiidsNW0InEJrAO4QMHqquwnCfLvU9PPJfpFVYw==", + "node_modules/@oxc-resolver/binding-linux-arm64-gnu": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.12.0.tgz", + "integrity": "sha512-otVbS4zeo3n71zgGLBYRTriDzc0zpruC0WI3ICwjpIk454cLwGV0yzh4jlGYWQJYJk0BRAmXFd3ooKIF+bKBHw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.1.3.tgz", - "integrity": "sha512-epvFL9/Tem00evtuq05kqWbRppJ4G/D8wa6LnQmOu779VmbrY6+M3v3h4fnt2QqMQt3+J6Cg/gZACDlDcH+eUw==", + "node_modules/@oxc-resolver/binding-linux-arm64-musl": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.12.0.tgz", + "integrity": "sha512-IStQDjIT7Lzmqg1i9wXvPL/NsYsxF24WqaQFS8b8rxra+z0VG7saBOsEnOaa4jcEY8MVpLYabFhTV+fSsA2vnA==", "cpu": [ - "x64" + "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.1.3.tgz", - "integrity": "sha512-S6P96biJyrt/CUYSP0v4OH1U9ITzHhHCh1kn7hHOscS3S1+T/D74sCJKQ9xb/Raos2NJHqtZ8EyQVEVjOzmqbg==", + "node_modules/@oxc-resolver/binding-linux-x64-gnu": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.12.0.tgz", + "integrity": "sha512-SipT7EVORz8pOQSFwemOm91TpSiBAGmOjG830/o+aLEsvQ4pEy223+SAnCfITh7+AahldYsJnVoIs519jmIlKQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ] }, - "node_modules/@mistralai/mistralai": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-0.4.0.tgz", - "integrity": "sha512-KmFzNro1RKxIFh19J3osmUQhucefBBauMXN5fa9doG6dT9OHR/moBvvn+riVlR7c0AVfuxO8Dfa03AyLYYzbyg==", - "dependencies": { - "node-fetch": "^2.6.7" - } - }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", - "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", - "devOptional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "node_modules/@oxc-resolver/binding-linux-x64-musl": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-1.12.0.tgz", + "integrity": "sha512-mGh0XfUzKdn+WFaqPacziNraCWL5znkHRfQVxG9avGS9zb2KC/N1EBbPzFqutDwixGDP54r2gx4q54YCJEZ4iQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@oxc-resolver/binding-wasm32-wasi": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-1.12.0.tgz", + "integrity": "sha512-SZN6v7apKmQf/Vwiqb6e/s3Y2Oacw8uW8V2i1AlxtyaEFvnFE0UBn89zq6swEwE3OCajNWs0yPvgAXUMddYc7Q==", + "cpu": [ + "wasm32" + ], "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@napi-rs/wasm-runtime": "^0.2.4" }, "engines": { - "node": ">= 8" + "node": ">=14.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@oxc-resolver/binding-win32-arm64-msvc": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.12.0.tgz", + "integrity": "sha512-GRe4bqCfFsyghruEn5bv47s9w3EWBdO2q72xCz5kpQ0LWbw+enPHtTjw3qX5PUcFYpKykM55FaO0hFDs1yzatw==", + "cpu": [ + "arm64" + ], "dev": true, - "engines": { - "node": ">= 8" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@oxc-resolver/binding-win32-x64-msvc": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.12.0.tgz", + "integrity": "sha512-Z3llHH0jfJP4mlWq3DT7bK6qV+/vYe0+xzCgfc67+Tc/U3eYndujl880bexeGdGNPh87JeYznpZAOJ44N7QVVQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, "node_modules/@pinecone-database/pinecone": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@pinecone-database/pinecone/-/pinecone-3.0.3.tgz", "integrity": "sha512-0cAG0d/6knVZgVyXM1II4qG3dyOepLuAQsCXTOJomdA7iQxf+/Om9mq9Cw4QObr56oZ+lqtptlw5qz0BQaBX2Q==", - "devOptional": true, + "license": "Apache-2.0", "dependencies": { "encoding": "^0.1.13" }, @@ -3602,47 +6353,41 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -3651,33 +6396,38 @@ "node_modules/@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" }, "node_modules/@qdrant/js-client-rest": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@qdrant/js-client-rest/-/js-client-rest-1.11.0.tgz", "integrity": "sha512-RzF+HxL8A7bb/uaxU1jVS1a919bb3FCo1giB/D19UT3d50AYl4+4AyklbsjlXpWEHekbNocQAQ016fqT9hSRtQ==", - "devOptional": true, + "license": "Apache-2.0", "dependencies": { "@qdrant/openapi-typescript-fetch": "1.2.6", "@sevinf/maybe": "0.5.0", @@ -3695,7 +6445,7 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@qdrant/openapi-typescript-fetch/-/openapi-typescript-fetch-1.2.6.tgz", "integrity": "sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA==", - "devOptional": true, + "license": "MIT", "engines": { "node": ">=18.0.0", "pnpm": ">=8" @@ -3705,6 +6455,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", + "license": "MIT", "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" @@ -3717,12 +6468,20 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@sevinf/maybe/-/maybe-0.5.0.tgz", "integrity": "sha512-ARhyoYDnY1LES3vYI0fiG6e9esWfTNcXcO6+MPJJXcnyMV3bim4lnFt45VXouV7y82F4x3YH8nOQ6VztuvUiWg==", - "devOptional": true + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -3730,30 +6489,13 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, "node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.4.tgz", + "integrity": "sha512-VupaALAQlXViW3/enTf/f5l5JZYSAxoJL7f0nanhNNKnww6DGCg1oYIuNP78KDugnkwthBO6iEcym16HhWV8RQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -3761,14 +6503,15 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", - "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.8.tgz", + "integrity": "sha512-Tv1obAC18XOd2OnDAjSWmmthzx6Pdeh63FbLin8MlPiuJ2ATpKkq0NcNOJFr0dO+JmZXnwu8FQxKJ3TKJ3Hulw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.6", "tslib": "^2.6.2" }, "engines": { @@ -3776,29 +6519,20 @@ } }, "node_modules/@smithy/core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.1.tgz", - "integrity": "sha512-BC7VMXx/1BCmRPCVzzn4HGWAtsrb7/0758EtwOGFJQrlSwJBEjCcDLNZLFoL/68JexYa2s+KmgL/UfmXdG6v1w==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.13", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/core/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.6.tgz", + "integrity": "sha512-6lQQp99hnyuNNIzeTYSzCUXJHwvvFLY7hfdFGSJM95tjRDJGfzWYFRBXPaM9766LiiTsQ561KErtbufzUFSYUg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { @@ -3806,64 +6540,79 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", - "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.3.tgz", + "integrity": "sha512-VoxMzSzdvkkjMJNE38yQgx4CfnmT+Z+5EUXkg4x7yag93eQkVQgZvN3XBSHC/ylfBbLbAtdu7flTCChX9I+mVg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "node_modules/@smithy/eventstream-codec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz", + "integrity": "sha512-3tEbUb8t8an226jKB6V/Q2XU/J53lCwCzULuBPEaF4JjSh+FlCMp7TmogE/Aij5J9DwlsZ4VAD/IRDuQ/0ZtMw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^1.2.0", + "@smithy/util-hex-encoding": "^1.1.0", + "tslib": "^2.5.0" } }, - "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@smithy/hash-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", - "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/util-hex-encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", + "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "tslib": "^2.5.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@smithy/fetch-http-handler": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.8.tgz", + "integrity": "sha512-Lqe0B8F5RM7zkw//6avq1SJ8AfaRd3ubFUS1eVp5WszV7p6Ne5hQ4dSuMHDpNRPhgTvj4va9Kd/pcVigHEHRow==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.3", + "@smithy/querystring-builder": "^3.0.6", + "@smithy/types": "^3.4.2", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.6.tgz", + "integrity": "sha512-c/FHEdKK/7DU2z6ZE91L36ahyXWayR3B+FzELjnYq7wH5YqIseM24V+pWCS9kFn1Ln8OFGTf+pyYPiHZuX0s/Q==", + "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^3.4.2", "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { @@ -3871,11 +6620,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", - "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.6.tgz", + "integrity": "sha512-czM7Ioq3s8pIXht7oD+vmgy4Wfb4XavU/k/irO8NdXFFOx7YAlsCCcKOh/lJD1mJSYQqiR7NmpZ9JviryD/7AQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" } }, @@ -3883,6 +6633,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3891,24 +6642,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", - "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.8.tgz", + "integrity": "sha512-VuyszlSO49WKh3H9/kIO2kf07VUwGV80QRiaDxUfP8P8UKlokz381ETJvwLhwuypBYhLymCYyNhB3fLAGBX2og==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -3916,16 +6656,17 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.3.tgz", + "integrity": "sha512-KeM/OrK8MVFUsoJsmCN0MZMVPjKKLudn13xpgwIMpGTYpA8QZB2Xq5tJ+RE6iu3A6NhOI4VajDTwBsm8pwwrhg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-middleware": "^3.0.6", "tslib": "^2.6.2" }, "engines": { @@ -3933,17 +6674,18 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.13.tgz", - "integrity": "sha512-zvCLfaRYCaUmjbF2yxShGZdolSHft7NNCTA28HVN9hKcEbOH+g5irr1X9s+in8EpambclGnevZY4A3lYpvDCFw==", - "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.21.tgz", + "integrity": "sha512-/h0fElV95LekVVEJuSw+aI11S1Y3zIUwBc6h9ZbUv43Gl2weXsbQwjLoet6j/Qtb0phfrSxS6pNg6FqgJOWZkA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.3", + "@smithy/service-error-classification": "^3.0.6", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -3951,18 +6693,6 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/middleware-retry/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -3971,16 +6701,18 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.6.tgz", + "integrity": "sha512-KKTUSl1MzOM0MAjGbudeaVNtIDo+PpekTBkCNwvfZlKndodrnvRo+00USatiyLOc0ujjO9UydMRu3O9dYML7ag==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -3988,11 +6720,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.6.tgz", + "integrity": "sha512-2c0eSYhTQ8xQqHMcRxLMpadFbTXg6Zla5l0mwNftFCZMQmuhI7EbAJMx6R5eqfuV3YbJ3QGyS3d5uSmrHV8Khg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -4000,13 +6733,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.7.tgz", + "integrity": "sha512-g3mfnC3Oo8pOI0dYuPXLtdW1WGVb3bR2tkV21GNkm0ZvQjLTtamXAwCWt/FCb0HGvKt3gHHmF1XerG0ICfalOg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -4014,38 +6748,41 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.3.tgz", + "integrity": "sha512-/gcm5DJ3k1b1zEInzBGAZC8ntJ+jwrz1NcSIu+9dSXd1FfG0G6QgkDI40tt8/WYUbHtLyo8fEqtm2v29koWo/w==", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/abort-controller": "^3.1.4", + "@smithy/protocol-http": "^4.1.3", + "@smithy/querystring-builder": "^3.0.6", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@smithy/property-provider": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.6.tgz", + "integrity": "sha512-NK3y/T7Q/Bw+Z8vsVs9MYIQ5v7gOX7clyrXcwhhIBQhbPgRl6JDrZbusO9qWDhcEus75Tg+VCxtIRfo3H76fpw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@smithy/protocol-http": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.3.tgz", + "integrity": "sha512-GcbMmOYpH9iRqtC05RbRnc/0FssxSTHlmaNhYBTgSgNCYpdR3Kt88u5GAZTBmouzv+Zlj/VRv92J9ruuDeJuEw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -4053,11 +6790,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.6.tgz", + "integrity": "sha512-sQe08RunoObe+Usujn9+R2zrLuQERi3CWvRO3BvnoWSYUaIrLKuAIeY7cMeDax6xGyfIP3x/yFWbEKSXvOnvVg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, @@ -4066,11 +6804,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.6.tgz", + "integrity": "sha512-UJKw4LlEkytzz2Wq+uIdHf6qOtFfee/o7ruH0jF5I6UAuU+19r9QV7nU3P/uI0l6+oElRHmG/5cBBcGJrD7Ozg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -4078,50 +6817,60 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", - "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.6.tgz", + "integrity": "sha512-53SpchU3+DUZrN7J6sBx9tBiCVGzsib2e4sc512Q7K9fpC5zkJKs6Z9s+qbMxSYrkEkle6hnMtrts7XNkMJJMg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0" + "@smithy/types": "^3.4.2" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.7.tgz", + "integrity": "sha512-IA4K2qTJYXkF5OfVN4vsY1hfnUZjaslEE8Fsr/gGFza4TAC2A9NfnZuSY2srQIbt9bwtjHiAayrRVgKse4Q7fA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/smithy-client": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.11.tgz", - "integrity": "sha512-l0BpyYkciNyMaS+PnFFz4aO5sBcXvGLoJd7mX9xrMBIm2nIQBVvYgp2ZpPDMzwjKCavsXu06iuCm0F6ZJZc6yQ==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", + "node_modules/@smithy/signature-v4": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.4.tgz", + "integrity": "sha512-72MiK7xYukNsnLJI9NqvUHqTu0ziEsfMsYNlWpiJfuGQnCTFKpckThlEatirvcA/LmT1h7rRO+pJD06PYsPu9Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/smithy-client/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@smithy/smithy-client": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.5.tgz", + "integrity": "sha512-7IZi8J3Dr9n3tX+lcpmJ/5tCYIqoXdblFBaPuv0SEKZFRpCxE+TqIWL6I3t7jLlk9TWu3JSvEZAhtjB9yvB+zA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", + "@smithy/util-stream": "^3.1.8", "tslib": "^2.6.2" }, "engines": { @@ -4129,9 +6878,10 @@ } }, "node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.4.2.tgz", + "integrity": "sha512-tHiFcfcVedVBHpmHUEUHOCCih8iZbIAYn9NvPsNzaPm/237I3imdDdZoOC8c87H5HBAVEa06tTgb+OcSWV9g5w==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -4140,12 +6890,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.6.tgz", + "integrity": "sha512-47Op/NU8Opt49KyGpHtVdnmmJMsp2hEwBdyjuFB9M2V5QVOwA7pBhhxKN5z6ztKGrMw76gd8MlbPuzzvaAncuQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/querystring-parser": "^3.0.6", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" } }, @@ -4153,6 +6904,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", @@ -4162,22 +6914,11 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/util-body-length-browser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" } @@ -4186,6 +6927,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -4197,6 +6939,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" @@ -4209,6 +6952,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -4217,13 +6961,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.13.tgz", - "integrity": "sha512-ZIRSUsnnMRStOP6OKtW+gCSiVFkwnfQF2xtf32QKAbHR6ACjhbAybDvry+3L5qQYdh3H6+7yD/AiUE45n8mTTw==", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.21.tgz", + "integrity": "sha512-M/FhTBk4c/SsB91dD/M4gMGfJO7z/qJaM9+XQQIqBOf4qzZYMExnP7R4VdGwxxH8IKMGW+8F0I4rNtVRrcfPoA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -4232,16 +6977,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.13.tgz", - "integrity": "sha512-voUa8TFJGfD+U12tlNNLCDlXibt9vRdNzRX45Onk/WxZe7TS+hTOZouEZRa7oARGicdgeXvt1A0W45qLGYdy+g==", - "dependencies": { - "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.21.tgz", + "integrity": "sha512-NiLinPvF86U3S2Pdx/ycqd4bnY5dmFSPNL5KYRwbNjqQFS09M5Wzqk8BNk61/47xCYz1X/6KeiSk9qgYPTtuDw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^3.0.8", + "@smithy/credential-provider-imds": "^3.2.3", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/property-provider": "^3.1.6", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -4249,12 +6995,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", - "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.2.tgz", + "integrity": "sha512-FEISzffb4H8DLzGq1g4MuDpcv6CIG15fXoQzDH9SjpRJv6h7J++1STFWWinilG0tQh9H1v2UKWG19Jjr2B16zQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -4265,6 +7012,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -4273,11 +7021,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.6.tgz", + "integrity": "sha512-BxbX4aBhI1O9p87/xM+zWy0GzT3CEVcXFPBRDoHAM+pV0eSW156pR+PSYEz0DQHDMYDsYAflC2bQNz2uaDBUZQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -4285,12 +7034,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", - "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.6.tgz", + "integrity": "sha512-BRZiuF7IwDntAbevqMco67an0Sr9oLQJqqRCsSPZZHYRnehS0LHDAkJk/pSmI7Z8c/1Vet294H7fY2fWUgB+Rg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/service-error-classification": "^3.0.6", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -4298,13 +7048,14 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.8.tgz", + "integrity": "sha512-hoKOqSmb8FD3WLObuB5hwbM7bNIWgcnvkThokTvVq7J5PKjlLUK5qQQcB9zWLHIoSaIlf3VIv2OxZY2wtQjcRQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/types": "^3.4.2", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-hex-encoding": "^3.0.0", @@ -4315,81 +7066,350 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8": { + "node_modules/@smithy/util-uri-escape": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-uri-escape": { + "node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "node_modules/@smithy/util-waiter": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.5.tgz", + "integrity": "sha512-jYOSvM3H6sZe3CHjzD2VQNCjWBJs+4DbtwBMvUp9y5EnnwNa7NQxTeYeQw0CKCAdGGZ3QvVkyJmvbvs5M/B10A==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", + "@smithy/abort-controller": "^3.1.4", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-utf8/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "node_modules/@swc-node/core": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.13.3.tgz", + "integrity": "sha512-OGsvXIid2Go21kiNqeTIn79jcaX4l0G93X2rAnas4LFoDyA9wAwVK7xZdm+QsKoMn5Mus2yFLCc4OtX2dD/PWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@swc/core": ">= 1.4.13", + "@swc/types": ">= 0.1" + } + }, + "node_modules/@swc-node/register": { + "version": "1.10.9", + "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.10.9.tgz", + "integrity": "sha512-iXy2sjP0phPEpK2yivjRC3PAgoLaT4sjSk0LDWCTdcTBJmR4waEog0E6eJbvoOkLkOtWw37SB8vCkl/bbh4+8A==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@swc-node/core": "^1.13.3", + "@swc-node/sourcemap-support": "^0.5.1", + "colorette": "^2.0.20", + "debug": "^4.3.5", + "oxc-resolver": "^1.10.2", + "pirates": "^4.0.6", + "tslib": "^2.6.3" }, - "engines": { - "node": ">=14.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@swc/core": ">= 1.4.13", + "typescript": ">= 4.3" } }, - "node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "node_modules/@swc-node/sourcemap-support": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz", + "integrity": "sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" + "source-map-support": "^0.5.21", + "tslib": "^2.6.3" + } + }, + "node_modules/@swc-node/sourcemap-support/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@swc/core": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.26.tgz", + "integrity": "sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.12" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.7.26", + "@swc/core-darwin-x64": "1.7.26", + "@swc/core-linux-arm-gnueabihf": "1.7.26", + "@swc/core-linux-arm64-gnu": "1.7.26", + "@swc/core-linux-arm64-musl": "1.7.26", + "@swc/core-linux-x64-gnu": "1.7.26", + "@swc/core-linux-x64-musl": "1.7.26", + "@swc/core-win32-arm64-msvc": "1.7.26", + "@swc/core-win32-ia32-msvc": "1.7.26", + "@swc/core-win32-x64-msvc": "1.7.26" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } } }, - "node_modules/@smithy/util-waiter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", - "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", + "node_modules/@swc/core-darwin-arm64": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz", + "integrity": "sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz", + "integrity": "sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz", + "integrity": "sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz", + "integrity": "sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz", + "integrity": "sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz", + "integrity": "sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz", + "integrity": "sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz", + "integrity": "sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz", + "integrity": "sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.26.tgz", + "integrity": "sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@swc/types": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", + "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@swc/counter": "^0.1.3" } }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -4400,59 +7420,52 @@ "node_modules/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" }, - "node_modules/@tsconfig/recommended": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/recommended/-/recommended-1.0.7.tgz", - "integrity": "sha512-xiNMgCuoy4mCL4JTywk9XFs5xpRUcKxtWEcMR6FNMtsgewYTIgIR+nvlP4A4iRCAzRsHMnPhvTRrzp4AGcRTEA==", - "dev": true + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } + "license": "MIT" }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } + "license": "MIT" }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } + "license": "MIT" }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "tslib": "^2.4.0" } }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -4460,25 +7473,22 @@ "@types/responselike": "^1.0.0" } }, - "node_modules/@types/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true, - "peer": true - }, - "node_modules/@types/command-line-usage": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", - "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", "dev": true, - "peer": true + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/ms": "*" } @@ -4487,72 +7497,34 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, - "dependencies": { - "@types/node": "*" - } + "license": "MIT" }, "node_modules/@types/html-to-text": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/@types/html-to-text/-/html-to-text-9.0.4.tgz", "integrity": "sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.13.tgz", - "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4561,18 +7533,31 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.5.tgz", "integrity": "sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/node": { - "version": "22.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.0.tgz", - "integrity": "sha512-MOdOibwBs6KW1vfqz2uKMlxq5xAfAZ98SZjO8e3XnAbFnTJtAspqhWk7hrdSAs9/Y14ZWMiy7/MxMUzAOadYEw==", + "version": "22.7.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", + "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", + "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } @@ -4581,32 +7566,24 @@ "version": "2.6.11", "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "license": "MIT", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" } }, - "node_modules/@types/node/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" - }, - "node_modules/@types/pad-left": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/pad-left/-/pad-left-2.1.1.tgz", - "integrity": "sha512-Xd22WCRBydkGSApl5Bw0PhAOHKSVjNL3E3AwzKaps96IMraPqy5BvZIsBVK6JLwdybUzjHnuWVwpDd0JjTfHXA==", + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true, - "peer": true - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + "license": "MIT" }, "node_modules/@types/responselike": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4614,72 +7591,62 @@ "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" }, "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "peer": true + "license": "MIT" }, "node_modules/@types/usetube": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@types/usetube/-/usetube-2.1.2.tgz", "integrity": "sha512-UWdBd7DI6EBzxcfpkRYLeVC3Nsbw0UnQ1G/lNB7xcfXoPAId2UNtAVCnrdIQrgy1pzk5r+6d5zsMCsxyVafG3Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==" + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "license": "MIT" }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", - "devOptional": true + "license": "MIT" }, "node_modules/@types/whatwg-url": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", - "devOptional": true, + "license": "MIT", "dependencies": { "@types/webidl-conversions": "*" } }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz", - "integrity": "sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.0.tgz", + "integrity": "sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.7.0", - "@typescript-eslint/type-utils": "8.7.0", - "@typescript-eslint/utils": "8.7.0", - "@typescript-eslint/visitor-keys": "8.7.0", + "@typescript-eslint/scope-manager": "8.8.0", + "@typescript-eslint/type-utils": "8.8.0", + "@typescript-eslint/utils": "8.8.0", + "@typescript-eslint/visitor-keys": "8.8.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -4703,15 +7670,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz", - "integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.0.tgz", + "integrity": "sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.7.0", - "@typescript-eslint/types": "8.7.0", - "@typescript-eslint/typescript-estree": "8.7.0", - "@typescript-eslint/visitor-keys": "8.7.0", + "@typescript-eslint/scope-manager": "8.8.0", + "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/typescript-estree": "8.8.0", + "@typescript-eslint/visitor-keys": "8.8.0", "debug": "^4.3.4" }, "engines": { @@ -4731,13 +7699,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz", - "integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.0.tgz", + "integrity": "sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.7.0", - "@typescript-eslint/visitor-keys": "8.7.0" + "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/visitor-keys": "8.8.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4748,13 +7717,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz", - "integrity": "sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.0.tgz", + "integrity": "sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.7.0", - "@typescript-eslint/utils": "8.7.0", + "@typescript-eslint/typescript-estree": "8.8.0", + "@typescript-eslint/utils": "8.8.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -4772,10 +7742,11 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz", - "integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.0.tgz", + "integrity": "sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -4785,13 +7756,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz", - "integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.0.tgz", + "integrity": "sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.7.0", - "@typescript-eslint/visitor-keys": "8.7.0", + "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/visitor-keys": "8.8.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4812,16 +7784,50 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.7.0.tgz", - "integrity": "sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.0.tgz", + "integrity": "sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.7.0", - "@typescript-eslint/types": "8.7.0", - "@typescript-eslint/typescript-estree": "8.7.0" + "@typescript-eslint/scope-manager": "8.8.0", + "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/typescript-estree": "8.8.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4835,12 +7841,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz", - "integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.0.tgz", + "integrity": "sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/types": "8.8.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -4855,14 +7862,50 @@ "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -4875,6 +7918,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4887,15 +7931,39 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/agent-base": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -4907,6 +7975,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "license": "MIT", "dependencies": { "humanize-ms": "^1.2.1" }, @@ -4914,17 +7983,45 @@ "node": ">= 8.0.0" } }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/already": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/already/-/already-2.2.1.tgz", "integrity": "sha512-qk6RIVMS/R1yTvBzfIL1T76PsIL7DIVCINoLuFw2YXKLpLtsTobqdChMs8m3OhuPS3CEE3+Ra5ibYiqdyogbsQ==", - "peer": true + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -4935,118 +8032,79 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "devOptional": true, + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/apache-arrow": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-14.0.2.tgz", - "integrity": "sha512-EBO2xJN36/XoY81nhLcwCJgFwkboDZeyNQ+OPsG7bCoQjc2BT0aTyH/MR6SrL+LirSNz+cYqjGRlupMMlP1aEg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/command-line-args": "5.2.0", - "@types/command-line-usage": "5.0.2", - "@types/node": "20.3.0", - "@types/pad-left": "2.1.1", - "command-line-args": "5.2.1", - "command-line-usage": "7.0.1", - "flatbuffers": "23.5.26", - "json-bignum": "^0.0.3", - "pad-left": "^2.1.0", - "tslib": "^2.5.3" + "node": ">=8" }, - "bin": { - "arrow2csv": "bin/arrow2csv.js" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/apache-arrow/node_modules/@types/node": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", - "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==", + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, "node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/atlassian-jwt": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/atlassian-jwt/-/atlassian-jwt-2.0.3.tgz", "integrity": "sha512-G9oO3HHS1UKgsLRXj6nNKv2TY6g3PleBCdzHwbFeVKg+18GBFIMRz+ApxuOuWAgcL7RngNFF5rGNtw1Ss3hvTg==", + "license": "MIT", "dependencies": { "jsuri": "^1.3.1", "lodash": "^4.17.21" @@ -5059,133 +8117,108 @@ "version": "1.7.7", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "node_modules/babel-plugin-const-enum": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-const-enum/-/babel-plugin-const-enum-1.2.0.tgz", + "integrity": "sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-typescript": "^7.3.3", + "@babel/traverse": "^7.16.0" }, "peerDependencies": { - "@babel/core": "^7.8.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "node_modules/babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" } }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "node_modules/babel-plugin-transform-typescript-metadata": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz", + "integrity": "sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==", "dev": true, + "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -5204,12 +8237,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "license": "MIT", "engines": { "node": "*" } @@ -5218,6 +8253,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -5229,26 +8265,41 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "devOptional": true, + "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/bluebird": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -5258,6 +8309,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -5266,9 +8318,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -5283,54 +8335,35 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, + ], + "license": "MIT", "dependencies": { - "fast-json-stable-stringify": "2.x" + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, "node_modules/bson": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", - "devOptional": true, + "license": "Apache-2.0", "engines": { "node": ">=16.20.1" } }, "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -5345,26 +8378,30 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "ieee754": "^1.1.13" } }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", "engines": { "node": ">=14.16" } @@ -5373,6 +8410,7 @@ "version": "10.2.14", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", @@ -5390,6 +8428,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5408,13 +8447,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/callguard/-/callguard-2.0.0.tgz", "integrity": "sha512-I3nd+fuj20FK1qu00ImrbH+II+8ULS6ioYr9igqR1xyqySoqc3DiHEyUM0mkoAdKeLGg2CtGnO8R3VRQX5krpQ==", - "peer": true + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5423,6 +8463,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -5431,9 +8472,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001640", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", - "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "version": "1.0.30001666", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001666.tgz", + "integrity": "sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==", "dev": true, "funding": [ { @@ -5448,13 +8489,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5466,127 +8509,64 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", - "dev": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true, - "engines": { - "node": ">=10" - } + "license": "MIT" }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "license": "BSD-3-Clause", "engines": { "node": "*" } }, - "node_modules/chromadb": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/chromadb/-/chromadb-1.9.2.tgz", - "integrity": "sha512-JNeLKlrsPxld7oPJCNeF73yHyyYeyP950enWRkTa6WsJ6UohH2NQ1vXZu6lWO9WuA9EMypITyZFZ8KtcTV3y2Q==", - "devOptional": true, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "isomorphic-fetch": "^3.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=14.17.0" - }, - "peerDependencies": { - "@google/generative-ai": "^0.1.1", - "cohere-ai": "^5.0.0 || ^6.0.0 || ^7.0.0", - "openai": "^3.0.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "@google/generative-ai": { - "optional": true - }, - "cohere-ai": { - "optional": true - }, - "openai": { - "optional": true - } + "node": ">=8" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", - "dev": true + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "devOptional": true, + "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -5596,10 +8576,21 @@ "node": ">=12" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -5611,6 +8602,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", "engines": { "node": ">=4" } @@ -5619,25 +8611,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "devOptional": true, + "license": "Apache-2.0", "engines": { "node": ">=0.10.0" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, "node_modules/cohere-ai": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/cohere-ai/-/cohere-ai-7.13.2.tgz", - "integrity": "sha512-VCEzlwo/SYCBtDWpCTs9JsEn6jLAPxOvFcqdhT+urCl32hQhs1ENH20c5tvNPupTN/UdP8tkOPJdlrxfBRh5Yw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/cohere-ai/-/cohere-ai-7.14.0.tgz", + "integrity": "sha512-hSo2/tFV29whjFFtVtdS7kHmtUsjfMO1sgwE/d5bhOE4O7Vkj5G1R9lLIqkIprp/+rrvCq3HGvEaOgry7xRcDA==", "dependencies": { "@aws-sdk/client-sagemaker": "^3.583.0", "@aws-sdk/credential-providers": "^3.583.0", @@ -5653,10 +8635,35 @@ "url-join": "4.0.1" } }, + "node_modules/cohere-ai/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/cohere-ai/node_modules/form-data-encoder": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==", + "license": "MIT", "engines": { "node": ">= 18" } @@ -5665,102 +8672,100 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz", "integrity": "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==", + "license": "MIT", "engines": { "node": ">= 18" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/cohere-ai/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": ">= 0.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4.0.0" + "node": ">=7.0.0" } }, - "node_modules/command-line-usage": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz", - "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, - "peer": true, - "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^3.0.0", - "typical": "^7.1.1" - }, - "engines": { - "node": ">=12.20.0" - } + "license": "MIT" }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, "engines": { - "node": ">=12.17" + "node": ">=8.0.0" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", - "dev": true, - "peer": true, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, "engines": { - "node": ">=12.17" + "node": ">= 0.8" } }, "node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", "engines": { "node": ">=14" } }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, "node_modules/compute-cosine-similarity": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/compute-cosine-similarity/-/compute-cosine-similarity-1.1.0.tgz", @@ -5794,12 +8799,14 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/confluence.js": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/confluence.js/-/confluence.js-1.7.4.tgz", "integrity": "sha512-MBTpAQ5EHTnVAaMDlTiRMqJau5EMejnoZMrvE/2QsMZo7dFw+OgadLIKr43mYQcN/qZ0Clagw0iHb4A3FaC5OQ==", + "license": "MIT", "dependencies": { "atlassian-jwt": "^2.0.3", "axios": "^1.6.8", @@ -5808,43 +8815,82 @@ "tslib": "^2.6.2" } }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "license": "MIT" + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cross-fetch": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "devOptional": true, + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } @@ -5854,6 +8900,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5867,6 +8914,7 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -5874,19 +8922,22 @@ "node_modules/csv-parse": { "version": "5.5.6", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.6.tgz", - "integrity": "sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==" + "integrity": "sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==", + "license": "MIT" }, "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -5901,6 +8952,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5909,6 +8961,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -5923,6 +8976,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -5930,38 +8984,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", "engines": { "node": ">=10" } @@ -5970,6 +9026,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5982,10 +9039,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -5994,7 +9062,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "devOptional": true, + "license": "Apache-2.0", "engines": { "node": ">=0.10" } @@ -6003,18 +9071,37 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/detect-port": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.3.1" } }, "node_modules/diff-sequences": { @@ -6022,6 +9109,7 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -6029,12 +9117,14 @@ "node_modules/dingbat-to-unicode": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz", - "integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==" + "integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==", + "license": "BSD-2-Clause" }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -6053,12 +9143,14 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -6073,6 +9165,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -6082,24 +9175,76 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/duck": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz", "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==", + "license": "BSD", "dependencies": { "underscore": "^1.13.1" } }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } @@ -6109,6 +9254,7 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -6120,34 +9266,24 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", - "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "version": "1.5.31", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.31.tgz", + "integrity": "sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "devOptional": true + "dev": true, + "license": "MIT" }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "devOptional": true, + "license": "MIT", "dependencies": { "iconv-lite": "^0.6.2" } @@ -6156,14 +9292,29 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -6171,11 +9322,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -6184,6 +9343,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -6195,29 +9355,29 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, "node_modules/eslint": { @@ -6225,6 +9385,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.11.0", @@ -6287,6 +9448,7 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -6294,41 +9456,12 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, "node_modules/eslint-scope": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", - "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", + "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -6345,6 +9478,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6352,37 +9486,36 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { + "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -6390,17 +9523,43 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/eslint/node_modules/espree": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6409,29 +9568,18 @@ } }, "node_modules/espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.12.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6442,6 +9590,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -6451,10 +9600,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -6467,6 +9617,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6479,6 +9630,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -6488,6 +9640,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -6496,6 +9649,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -6503,79 +9657,76 @@ "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/expr-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expr-eval/-/expr-eval-2.0.2.tgz", + "integrity": "sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=4" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "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" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.6.0" } }, - "node_modules/expr-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expr-eval/-/expr-eval-2.0.2.tgz", - "integrity": "sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "node_modules/extract-files": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", - "devOptional": true, + "license": "MIT", "engines": { "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" }, @@ -6587,19 +9738,15 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6608,42 +9755,32 @@ "micromatch": "^4.0.4" }, "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "node": ">=8" } }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-text-encoding": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "license": "Apache-2.0" }, "node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", "funding": [ { "type": "github", @@ -6654,6 +9791,7 @@ "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -6666,24 +9804,16 @@ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, "node_modules/fetch-h2": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/fetch-h2/-/fetch-h2-3.0.2.tgz", "integrity": "sha512-Lo6UPdMKKc9Ond7yjG2vq0mnocspOLh1oV6+XZdtfdexacvMSz5xm3WoQhTAdoR2+UqPlyMNqcqfecipoD+l/A==", - "peer": true, + "license": "MIT", "dependencies": { "@types/tough-cookie": "^4.0.0", "already": "^2.2.1", @@ -6697,16 +9827,34 @@ "node": ">=12" } }, - "node_modules/fflate": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.1.tgz", - "integrity": "sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==" - }, + "node_modules/fflate": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.1.tgz", + "integrity": "sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==", + "license": "MIT" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" }, @@ -6718,6 +9866,7 @@ "version": "18.5.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.5.0.tgz", "integrity": "sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ==", + "license": "MIT", "dependencies": { "readable-web-to-node-stream": "^3.0.2", "strtok3": "^7.0.0", @@ -6734,13 +9883,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "devOptional": true + "license": "MIT" }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } @@ -6750,6 +9900,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6762,6 +9913,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6769,24 +9921,12 @@ "node": ">=8" } }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6802,6 +9942,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -6811,6 +9952,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -6819,29 +9961,24 @@ "node": ">=16" } }, - "node_modules/flatbuffers": { - "version": "23.5.26", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-23.5.26.tgz", - "integrity": "sha512-vE+SI9vrJDwi1oETtTIFldC/o9GsVKRM+s6EL0nQgxXlYV1Vc4Tk30hj4xGICftInKQKj1F3up2n8UbIVobISQ==", - "dev": true, - "peer": true - }, "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -6852,10 +9989,11 @@ } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6872,6 +10010,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -6883,6 +10022,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -6895,12 +10035,14 @@ "node_modules/form-data-encoder": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "license": "MIT" }, "node_modules/formdata-node": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" @@ -6909,24 +10051,28 @@ "node": ">= 12.20" } }, - "node_modules/formdata-node/node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "engines": { - "node": ">= 14" + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1" } }, - "node_modules/fs.realpath": { + "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6935,6 +10081,7 @@ "version": "5.1.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "license": "Apache-2.0", "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", @@ -6949,6 +10096,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", "dependencies": { "debug": "4" }, @@ -6960,6 +10108,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -6972,302 +10121,47 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "license": "Apache-2.0", "dependencies": { "gaxios": "^5.0.0", "json-bigint": "^1.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/google-auth-library": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", - "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.3.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "deprecated": "Package is no longer maintained", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", - "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/graphql": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", - "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", - "devOptional": true, - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/graphql-request": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-5.2.0.tgz", - "integrity": "sha512-pLhKIvnMyBERL0dtFI3medKqWOz/RhHdcgbZ+hMMIb32mEPa5MJSzS4AuXxfI4sRAu6JVVk5tvXuGfCWl9JYWQ==", - "devOptional": true, - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "cross-fetch": "^3.1.5", - "extract-files": "^9.0.0", - "form-data": "^3.0.0" - }, - "peerDependencies": { - "graphql": "14 - 16" - } - }, - "node_modules/graphql-request/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "devOptional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "node": ">=12" } }, - "node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=6.9.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -7275,1066 +10169,811 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", "dependencies": { - "function-bind": "^1.1.2" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hnswlib-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hnswlib-node/-/hnswlib-node-3.0.0.tgz", - "integrity": "sha512-fypn21qvVORassppC8/qNfZ5KAOspZpm/IbUkAtlqvbtDNnF5VVk5RWF7O5V6qwr7z+T3s1ePej6wQt5wRQ4Cg==", - "devOptional": true, - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^8.0.0" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/html-to-text": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", - "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", - "dependencies": { - "@selderee/plugin-htmlparser2": "^0.11.0", - "deepmerge": "^4.3.1", - "dom-serializer": "^2.0.0", - "htmlparser2": "^8.0.2", - "selderee": "^0.11.0" + "bin": { + "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=14" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=10.19.0" + "node": ">= 6" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 14" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10.17.0" + "node": ">=4" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "node_modules/google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "license": "Apache-2.0", "dependencies": { - "ms": "^2.0.0" + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "devOptional": true, + "node_modules/google-auth-library/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/google-auth-library/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "devOptional": true, + "node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "deprecated": "Package is no longer maintained", + "license": "MIT", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, "engines": { - "node": ">= 4" + "node": ">=12.0.0" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" + "get-intrinsic": "^1.1.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, + "node_modules/got": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", + "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", + "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, + "node_modules/got/node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">= 14.17" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, + "license": "MIT" + }, + "node_modules/graphql-request": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-5.2.0.tgz", + "integrity": "sha512-pLhKIvnMyBERL0dtFI3medKqWOz/RhHdcgbZ+hMMIb32mEPa5MJSzS4AuXxfI4sRAu6JVVk5tvXuGfCWl9JYWQ==", + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@graphql-typed-document-node/core": "^3.1.1", + "cross-fetch": "^3.1.5", + "extract-files": "^9.0.0", + "form-data": "^3.0.0" + }, + "peerDependencies": { + "graphql": "14 - 16" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ioredis": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz", - "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==", - "devOptional": true, + "node_modules/graphql-request/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "license": "MIT", "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" + "node": ">= 6" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", - "dev": true, + "node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "devOptional": true, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/is-gzip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-2.0.0.tgz", - "integrity": "sha512-jtO4Njg6q58zDo/Pu4027beSZ0VdsZlt8/5Moco6yAg+DIxb5BK/xUYqYG2+MD4+piKldXJNHxRkhEYI2fvrxA==", - "engines": { - "node": ">=4" + "node_modules/hnswlib-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hnswlib-node/-/hnswlib-node-3.0.0.tgz", + "integrity": "sha512-fypn21qvVORassppC8/qNfZ5KAOspZpm/IbUkAtlqvbtDNnF5VVk5RWF7O5V6qwr7z+T3s1ePej6wQt5wRQ4Cg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^8.0.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, "engines": { - "node": ">=0.12.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" + "node_modules/html-to-text": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", + "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "license": "MIT", + "dependencies": { + "@selderee/plugin-htmlparser2": "^0.11.0", + "deepmerge": "^4.3.1", + "dom-serializer": "^2.0.0", + "htmlparser2": "^8.0.2", + "selderee": "^0.11.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=14" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "devOptional": true, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause" }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" }, "engines": { - "node": ">=10" + "node": ">=10.19.0" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "agent-base": "^7.0.2", + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" + "ms": "^2.0.0" } }, - "node_modules/jackspeak": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", - "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", + "node_modules/husky": { + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", + "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" + "license": "MIT", + "bin": { + "husky": "bin.js" }, "engines": { - "node": "20 || >=22" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "devOptional": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 4" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=6" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.8.19" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.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.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, + "license": "ISC", "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 - } + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, + "node_modules/ioredis": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz", + "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==", + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "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.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" + "node": ">=12.22.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" } }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "hasown": "^2.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "license": "MIT", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=8" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, + "node_modules/is-gzip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-2.0.0.tgz", + "integrity": "sha512-jtO4Njg6q58zDo/Pu4027beSZ0VdsZlt8/5Moco6yAg+DIxb5BK/xUYqYG2+MD4+piKldXJNHxRkhEYI2fvrxA==", + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.12.0" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "node": ">=8" } }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "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": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "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" + "is-docker": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", "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": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "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" + "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "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.5.3" + "funding": { + "url": "https://github.com/sponsors/isaacs" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/jest-worker": { + "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/js-base64": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", - "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==", + "license": "BSD-3-Clause" }, "node_modules/js-tiktoken": { "version": "1.0.14", "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.14.tgz", "integrity": "sha512-Pk3l3WOgM9joguZY2k52+jH82RtABRgB5RdGFZNUGbOKGMVlNmafcPA3b0ITcCZPu1L9UclP1tne6aw7ZI4Myg==", + "license": "MIT", "dependencies": { "base64-js": "^1.5.1" } @@ -8343,30 +10982,45 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/jsbi": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==", - "dev": true + "license": "Apache-2.0" }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -8378,42 +11032,44 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", "dependencies": { "bignumber.js": "^9.0.0" } }, - "node_modules/json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -8421,10 +11077,37 @@ "node": ">=6" } }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, "node_modules/jsonpointer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8441,6 +11124,7 @@ "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -8452,6 +11136,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8465,12 +11150,14 @@ "node_modules/jszip/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, "node_modules/jszip/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -8479,6 +11166,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "license": "MIT", "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -8489,6 +11177,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "license": "MIT", "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" @@ -8498,23 +11187,16 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/langchain": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/langchain/-/langchain-0.3.2.tgz", "integrity": "sha512-kd2kz1cS/PIVrLEDFlrZsAasQfPLbY1UqCZbRKa3/QcpB33/n6xPDvXSMfBuKhvNj0bjW6MXDR9HZTduXjJBgg==", + "license": "MIT", "dependencies": { "@langchain/openai": ">=0.1.0 <0.4.0", "@langchain/textsplitters": ">=0.0.0 <0.2.0", @@ -8590,10 +11272,35 @@ } } }, + "node_modules/langchain/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/langchain/node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/langsmith": { - "version": "0.1.60", - "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.1.60.tgz", - "integrity": "sha512-xchy/7PynZTkYXhismEYc+0XuDNDTzreKIyc/V3ohq4vnG79Iu+nPjDifvtICLHPCXTU8KSVno+PJX39XwhSjg==", + "version": "0.1.61", + "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.1.61.tgz", + "integrity": "sha512-XQE4KPScwPmdaT0mWDzhNxj9gvqXUR+C7urLA0QFi27XeoQdm17eYpudenn4wxC0gIyUJutQCyuYJpfwlT5JnQ==", + "license": "MIT", "dependencies": { "@types/uuid": "^10.0.0", "commander": "^10.0.1", @@ -8615,24 +11322,17 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", + "license": "MIT", "funding": { "url": "https://ko-fi.com/killymxi" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8645,22 +11345,27 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", "dependencies": { "immediate": "~3.0.5" } }, "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, "node_modules/lmdb": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.1.3.tgz", "integrity": "sha512-WQcfSoOTw+XfBXQN4dRN1Ke5vv+NgmOWs4wH8oh4jYFmPZIaVPiQVF+0nGdjQDLGDcrMMyr2C34cG6WZPes6xQ==", - "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "msgpackr": "^1.10.2", "node-addon-api": "^6.1.0", @@ -8684,13 +11389,14 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -8704,48 +11410,63 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "devOptional": true + "license": "MIT" }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "devOptional": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/long": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "license": "Apache-2.0" }, "node_modules/lop": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.1.tgz", - "integrity": "sha512-9xyho9why2A2tzm5aIcMWKvzqKsnxrf9B5I+8O30olh6lQU8PH978LqZoI4++37RBgS1Em5i54v1TFs/3wnmXQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.2.tgz", + "integrity": "sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==", + "license": "BSD-2-Clause", "dependencies": { "duck": "^0.1.12", "option": "~0.2.1", @@ -8756,6 +11477,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -8764,50 +11486,27 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "yallist": "^3.0.2" } }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } + "license": "ISC" }, "node_modules/mammoth": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.6.0.tgz", "integrity": "sha512-jOwbj6BwJzxCf6jr2l1zmSemniIkLnchvELXnDJCANlJawhzyIKObIq48B8kWEPLgUUh57k7FtEO3DHFQMnjMg==", + "license": "BSD-2-Clause", "dependencies": { "@xmldom/xmldom": "^0.8.6", "argparse": "~1.0.3", @@ -8831,6 +11530,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -8839,6 +11539,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -8849,19 +11550,14 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "devOptional": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -8871,6 +11567,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -8886,6 +11583,7 @@ "funding": [ "https://github.com/sponsors/broofa" ], + "license": "MIT", "bin": { "mime": "bin/cli.js" }, @@ -8897,6 +11595,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8905,6 +11604,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -8917,6 +11617,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -8925,6 +11626,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -8933,10 +11635,11 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8947,11 +11650,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -8960,7 +11674,7 @@ "version": "6.9.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.9.0.tgz", "integrity": "sha512-UMopBVx1LmEUbW/QE0Hw18u583PEDVQmUmVzzBRH0o/xtE9DBRA5ZYLOjpLIa03i8FXjzvQECJcqoMvCXftTUA==", - "devOptional": true, + "license": "Apache-2.0", "dependencies": { "@mongodb-js/saslprep": "^1.1.5", "bson": "^6.7.0", @@ -9006,22 +11720,23 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", - "devOptional": true, + "license": "Apache-2.0", "dependencies": { "@types/whatwg-url": "^11.0.2", "whatwg-url": "^13.0.0" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/msgpackr": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.10.2.tgz", - "integrity": "sha512-L60rsPynBvNE+8BWipKKZ9jHcSGbtyJYIwjRq0VrIvQ08cRjntGXJYW/tmciZ2IHWIY8WEW32Qa2xbh5+SKBZA==", - "dev": true, + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz", + "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", + "license": "MIT", "optionalDependencies": { "msgpackr-extract": "^3.0.2" } @@ -9030,8 +11745,8 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", - "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "node-gyp-build-optional-packages": "5.2.2" @@ -9052,21 +11767,33 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", "bin": { "mustache": "bin/mustache" } }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-addon-api": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.0.0.tgz", - "integrity": "sha512-ipO7rsHEBqa9STO5C5T10fj732ml+5kLN1cAG8/jdHd56ldQeGj3Q7+scUS+VHK/qy1zLEwC4wMK5+yM0btPvw==", - "devOptional": true, + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.1.0.tgz", + "integrity": "sha512-yBY+qqWSv3dWKGODD6OGE6GnTX7Q2r+4+DfpqxHSHh8x0B4EKP9+wVGLS6U/AM1vxSNNmUEuIV5EGhYwPpfOwQ==", + "license": "MIT", "engines": { "node": "^18 || ^20 || >= 21" } @@ -9085,6 +11812,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -9092,12 +11820,14 @@ "node_modules/node-ensure": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz", - "integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==" + "integrity": "sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==", + "license": "MIT" }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -9116,17 +11846,20 @@ "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -9136,6 +11869,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } @@ -9144,7 +11878,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", - "dev": true, + "license": "MIT", "dependencies": { "detect-libc": "^2.0.1" }, @@ -9154,31 +11888,60 @@ "node-gyp-build-optional-packages-test": "build-test.js" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/normalize-package-data": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.0.tgz", + "integrity": "sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^8.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.0.tgz", + "integrity": "sha512-4nw3vOVR+vHUOT8+U4giwe2tcGv+R3pwwRidUe67DoMBTjhrfr6rZYJVVwdkBE+Um050SG+X9tf0Jo4fOpn01w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/normalize-url": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -9186,11 +11949,123 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm-install-checks": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.0.tgz", + "integrity": "sha512-bkTildVlofeMX7wiOaWk3PlW7YcBXAuEc7TWpOxwUgalG5ZvgT/ms+6OX9zt7iGLv4+VhKbRZhpOfgQJzk1YAw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.0.tgz", + "integrity": "sha512-4nw3vOVR+vHUOT8+U4giwe2tcGv+R3pwwRidUe67DoMBTjhrfr6rZYJVVwdkBE+Um050SG+X9tf0Jo4fOpn01w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.0.tgz", + "integrity": "sha512-ZTE0hbwSdTNL+Stx2zxSqdu2KZfNDcrtrLdIk7XGnQFYBWYDho/ORvXtn5XEePcL3tFpGjHCV3X3xrtDh7eZ+A==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz", + "integrity": "sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -9198,15 +12073,89 @@ "node": ">=8" } }, + "node_modules/nx": { + "version": "19.8.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-19.8.3.tgz", + "integrity": "sha512-/3FF4tgwPGRu4bV6O+aHqhTnOGHKF0/HNVkApUwjimSC+YzOX9VH1uBx2eReb4XC1scxDWkIzVi9gkFSXSQDjQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@napi-rs/wasm-runtime": "0.2.4", + "@nrwl/tao": "19.8.3", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.7.4", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "19.8.3", + "@nx/nx-darwin-x64": "19.8.3", + "@nx/nx-freebsd-x64": "19.8.3", + "@nx/nx-linux-arm-gnueabihf": "19.8.3", + "@nx/nx-linux-arm64-gnu": "19.8.3", + "@nx/nx-linux-arm64-musl": "19.8.3", + "@nx/nx-linux-x64-gnu": "19.8.3", + "@nx/nx-linux-x64-musl": "19.8.3", + "@nx/nx-win32-arm64-msvc": "19.8.3", + "@nx/nx-win32-x64-msvc": "19.8.3" + }, + "peerDependencies": { + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, "node_modules/oauth": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz", - "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==" + "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==", + "license": "MIT" }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9218,6 +12167,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/office-text-extractor/-/office-text-extractor-3.0.3.tgz", "integrity": "sha512-gUp7gxOsNcIeQYa9O+JFCVp0e7xF3wF6TBEcB7aY1pHgv1kVJpBXjEJMiakWLShbDRGPpXoQzKkky26hWVUy1w==", + "license": "ISC", "dependencies": { "fflate": "0.8.1", "file-type": "18.5.0", @@ -9233,10 +12183,32 @@ "node": ">= 16" } }, + "node_modules/office-text-extractor/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/ollama": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/ollama/-/ollama-0.5.9.tgz", + "integrity": "sha512-F/KZuDRC+ZsVCuMvcOYuQ6zj42/idzCkkuknGyyGVmNStMZ/sU3jQpvhnl4SyC0+zBzLiKNZJnJeuPFuieWZvQ==", + "license": "MIT", + "dependencies": { + "whatwg-fetch": "^3.6.20" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -9246,6 +12218,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -9256,20 +12229,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/openai": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.59.0.tgz", - "integrity": "sha512-3bn7FypMt2R1ZDuO0+GcXgBEnVFhIzrpUkb47pQRoYvyfdZ2fQXcuP14aOc4C8F9FvCtZ/ElzJmVzVqnP4nHNg==", + "version": "4.65.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.65.0.tgz", + "integrity": "sha512-LfA4KUBpH/8rA3vjCQ74LZtdK/8wx9W6Qxq8MHqEdImPsN1XPQ2ompIuJWkKS6kXt5Cs5i8Eb65IIo4M7U+yeQ==", + "license": "Apache-2.0", "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", - "@types/qs": "^6.9.15", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7", - "qs": "^6.10.3" + "node-fetch": "^2.6.7" }, "bin": { "openai": "bin/cli" @@ -9284,28 +12274,38 @@ } }, "node_modules/openai/node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.54.tgz", + "integrity": "sha512-+BRgt0G5gYjTvdLac9sIeE0iZcJxi4Jc4PV5EUzqi+88jmQLr+fRZdv2tCTV7IHKSGxM6SaLoOXQWWUiLUItMw==", + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/openai/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, "node_modules/openapi-types": { "version": "12.1.3", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==" + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "license": "MIT" }, "node_modules/option": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz", - "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==" + "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==", + "license": "BSD-2-Clause" }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -9318,16 +12318,73 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ordered-binary": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", - "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", - "dev": true + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.2.tgz", + "integrity": "sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==", + "license": "MIT" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oxc-resolver": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-1.12.0.tgz", + "integrity": "sha512-YlaCIArvWNKCWZFRrMjhh2l5jK80eXnpYP+bhRc1J/7cW3TiyEY0ngJo73o/5n8hA3+4yLdTmXLNTQ3Ncz50LQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-resolver/binding-darwin-arm64": "1.12.0", + "@oxc-resolver/binding-darwin-x64": "1.12.0", + "@oxc-resolver/binding-freebsd-x64": "1.12.0", + "@oxc-resolver/binding-linux-arm-gnueabihf": "1.12.0", + "@oxc-resolver/binding-linux-arm64-gnu": "1.12.0", + "@oxc-resolver/binding-linux-arm64-musl": "1.12.0", + "@oxc-resolver/binding-linux-x64-gnu": "1.12.0", + "@oxc-resolver/binding-linux-x64-musl": "1.12.0", + "@oxc-resolver/binding-wasm32-wasi": "1.12.0", + "@oxc-resolver/binding-win32-arm64-msvc": "1.12.0", + "@oxc-resolver/binding-win32-x64-msvc": "1.12.0" + } }, "node_modules/p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", "engines": { "node": ">=12.20" } @@ -9336,6 +12393,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", "engines": { "node": ">=4" } @@ -9344,6 +12402,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9359,6 +12418,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9373,6 +12433,7 @@ "version": "6.6.2", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" @@ -9388,6 +12449,7 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -9396,55 +12458,37 @@ "node": ">=8" } }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true - }, - "node_modules/pad-left": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", - "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==", - "dev": true, - "peer": true, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", "dependencies": { - "repeat-string": "^1.5.4" + "p-finally": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -9457,6 +12501,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -9470,10 +12515,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-json/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, "node_modules/parseley": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "license": "MIT", "dependencies": { "leac": "^0.6.0", "peberminta": "^0.9.0" @@ -9487,6 +12540,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9495,6 +12549,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9504,6 +12559,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9512,37 +12568,48 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", - "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=8" } }, "node_modules/pdf-parse": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-1.1.1.tgz", "integrity": "sha512-v6ZJ/efsBpGrGGknjtq9J/oC8tZWq0KWL5vQrk2GlzLEQPUDB1ex+13Rmidl1neNN358Jn9EHZw5y07FFtaC7A==", + "license": "MIT", "dependencies": { "debug": "^3.1.0", "node-ensure": "^0.0.0" @@ -9555,6 +12622,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -9563,14 +12631,16 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", + "license": "MIT", "funding": { "url": "https://ko-fi.com/killymxi" } }, "node_modules/peek-readable": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.1.0.tgz", - "integrity": "sha512-Tq2I+yoz6Xq3S09E2PyjzOy/oYuNg5v7wyjmrw7OQYSKc7QnDs63q4RXFXraMoI6LZyiEOJ/wDEYzGDPhWwNPA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.2.0.tgz", + "integrity": "sha512-U94a+eXHzct7vAd19GH3UQ2dH4Satbng0MyYTMaQatL0pvYYL5CTPR25HBhKtecl+4bfu1/i3vC6k0hydO5Vcw==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -9580,16 +12650,18 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -9602,79 +12674,17 @@ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -9684,6 +12694,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -9694,23 +12705,12 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -9720,16 +12720,40 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/priorityqueuejs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/priorityqueuejs/-/priorityqueuejs-2.0.0.tgz", "integrity": "sha512-19BMarhgpq3x4ccvVi8k2QpJZcymo/iFUcrhPd4V96kYGovOdTsWwy7fxChYi4QY+m2EnGBWSX9Buakz+tWNQQ==", - "dev": true + "license": "MIT" + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -9737,19 +12761,38 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">= 6" + "node": ">=10" + } + }, + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/protobufjs": { @@ -9757,6 +12800,7 @@ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz", "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -9778,18 +12822,20 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "peer": true + "license": "MIT" }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -9799,30 +12845,16 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, "node_modules/qs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -9837,7 +12869,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "peer": true + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -9857,12 +12889,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -9874,27 +12908,28 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 6" } }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "license": "MIT", "dependencies": { "readable-stream": "^3.6.0" }, @@ -9906,24 +12941,11 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/redis-errors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "devOptional": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -9932,7 +12954,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "devOptional": true, + "license": "MIT", "dependencies": { "redis-errors": "^1.0.0" }, @@ -9944,16 +12966,83 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true + "license": "Apache-2.0" }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true, - "peer": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, "engines": { - "node": ">=0.10" + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" } }, "node_modules/require-directory": { @@ -9961,6 +13050,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9969,13 +13059,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "peer": true + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -9991,51 +13082,24 @@ "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -10046,79 +13110,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 4" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, "node_modules/run-parallel": { @@ -10140,6 +13163,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -10148,8 +13172,8 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -10171,13 +13195,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-stable-stringify": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "peer": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -10186,17 +13211,19 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true + "license": "MIT" }, "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" }, "node_modules/selderee": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", + "license": "MIT", "dependencies": { "parseley": "^0.12.0" }, @@ -10208,7 +13235,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -10217,6 +13243,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -10228,6 +13255,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -10243,13 +13271,15 @@ "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10262,6 +13292,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10270,6 +13301,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -10287,18 +13319,14 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sitemapper": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/sitemapper/-/sitemapper-3.2.12.tgz", "integrity": "sha512-nbc6mJ4zqG3VSrat95b+9gedzkf31P7BBtGHWtkVNbs7ObV7qcvKEiTK0B5Fiqe4HKV1lljkNTlA6vYpn7cJfg==", + "license": "MIT", "dependencies": { "got": "^11.8.0", "is-gzip": "2.0.0", @@ -10313,6 +13341,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -10324,6 +13353,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -10335,6 +13365,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", "engines": { "node": ">=10.6.0" } @@ -10343,6 +13374,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -10360,6 +13392,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -10374,6 +13407,7 @@ "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -10398,6 +13432,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -10410,6 +13445,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", "engines": { "node": ">=8" } @@ -10418,6 +13454,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -10429,6 +13466,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -10437,6 +13475,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -10448,6 +13487,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -10460,33 +13500,27 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", "engines": { "node": ">=4.0" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -10496,47 +13530,64 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "devOptional": true, + "license": "MIT", "dependencies": { "memory-pager": "^1.0.2" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, - "engines": { - "node": ">=8" + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, "node_modules/standard-as-callback": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "devOptional": true + "license": "MIT" }, "node_modules/stream-head": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-head/-/stream-head-3.0.0.tgz", "integrity": "sha512-EfcHQpe+HxwAY46J+o+LeQG8gL6FfxBBfNEGzPWzXYEiL2dRS1dtFJ2F38JLcrSKz1tIFA3HkST4SkTPA7+jgw==", + "license": "MIT", "dependencies": { "through2": "4.0.2" }, @@ -10548,6 +13599,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/stream-mime-type/-/stream-mime-type-2.0.0.tgz", "integrity": "sha512-JKka2v3YRBr0P2nWeJIWTBtMhYO1CHQp/TecKuSdz6+33Tm5Z5xH2raLalkVrRYloHa3FZKAe7DCVAQeRPYUGQ==", + "license": "MIT", "dependencies": { "file-type": "^18.2.0", "mime-types": "^2.1.35", @@ -10557,42 +13609,21 @@ "node": ">=14.13.1" } }, - "node_modules/stream-read-all": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", - "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "devOptional": true, + "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10608,6 +13639,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10621,7 +13653,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10635,6 +13668,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10643,21 +13677,13 @@ } }, "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/strip-json-comments": { @@ -10665,6 +13691,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -10675,18 +13702,38 @@ "node_modules/strnum": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "license": "MIT" + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } }, "node_modules/strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.1.1.tgz", + "integrity": "sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==", + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" + "peek-readable": "^5.1.3" }, "engines": { - "node": ">=14.16" + "node": ">=16" }, "funding": { "type": "github", @@ -10698,6 +13745,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10710,6 +13758,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10717,150 +13766,75 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", - "dev": true, - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/table-layout": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz", - "integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==", - "dev": true, - "peer": true, - "dependencies": { - "@75lb/deep-merge": "^1.1.1", - "array-back": "^6.2.2", - "command-line-args": "^5.2.1", - "command-line-usage": "^7.0.0", - "stream-read-all": "^3.0.1", - "typical": "^7.1.1", - "wordwrapjs": "^5.1.0" - }, - "bin": { - "table-layout": "bin/cli.js" - }, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": "*" + "node": ">=6" } }, "node_modules/text-encoding": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "deprecated": "no longer maintained" + "deprecated": "no longer maintained", + "license": "(Unlicense OR Apache-2.0)" }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "license": "MIT", "dependencies": { "readable-stream": "3" } }, - "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=14.14" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "peer": true + "license": "MIT" }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -10870,6 +13844,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -10881,6 +13856,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" @@ -10897,7 +13873,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "peer": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -10912,7 +13888,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", - "devOptional": true, + "license": "MIT", "dependencies": { "punycode": "^2.3.0" }, @@ -10925,6 +13901,7 @@ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -10932,64 +13909,77 @@ "typescript": ">=4.2.0" } }, - "node_modules/ts-jest": { - "version": "29.2.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", - "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "^0.2.6", - "ejs": "^3.1.10", - "fast-json-stable-stringify": "^2.1.0", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.6.3", - "yargs-parser": "^21.1.1" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { + "@swc/core": { "optional": true }, - "esbuild": { + "@swc/wasm": { "optional": true } } }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -10997,20 +13987,24 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typed-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", - "peer": true, + "license": "MIT", "optionalDependencies": { "rxjs": "*" } @@ -11019,7 +14013,7 @@ "version": "5.6.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", - "devOptional": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11028,26 +14022,41 @@ "node": ">=14.17" } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "node_modules/typescript-eslint": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.8.0.tgz", + "integrity": "sha512-BjIT/VwJ8+0rVO01ZQ2ZVnjE1svFBiRczcpr1t1Yxt7sT25VSbPfrJtDsQ8uQTy2pilX5nI9gwxhUyLULNentw==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.8.0", + "@typescript-eslint/parser": "8.8.0", + "@typescript-eslint/utils": "8.8.0" + }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" }, "node_modules/undici": { "version": "5.28.4", "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "devOptional": true, + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -11056,23 +14065,68 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "peer": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -11088,9 +14142,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -11104,6 +14159,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -11111,13 +14167,14 @@ "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "peer": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -11127,6 +14184,7 @@ "version": "2.2.7", "resolved": "https://registry.npmjs.org/usetube/-/usetube-2.2.7.tgz", "integrity": "sha512-LH76s/YOcWLz3OzyHNKCCyv3XYSbcMPUJeZi6cGpTYvT1BeLFIDIzMC3mrmvFgOLG0TWFzxlnlhzQ/wKW5kNJA==", + "license": "AGPL-3.0-or-later", "dependencies": { "axios": "^0.21.1", "dayjs": "^1.11.7", @@ -11137,6 +14195,7 @@ "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.14.0" } @@ -11144,7 +14203,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/uuid": { "version": "10.0.0", @@ -11154,6 +14214,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -11162,55 +14223,71 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/uuidv7/-/uuidv7-0.6.3.tgz", "integrity": "sha512-zV3eW2NlXTsun/aJ7AixxZjH/byQcH/r3J99MI0dDEkU2cJIBJxhEWUHDTpOaLPRNhebPZoeHuykYREkI9HafA==", - "peer": true, + "license": "Apache-2.0", "bin": { "uuidv7": "cli.js" } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10.12.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/validate.io-array": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" + "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==", + "license": "MIT" }, "node_modules/validate.io-function": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { - "makeerror": "1.0.12" + "defaults": "^1.0.3" } }, "node_modules/weak-lru-cache": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", - "dev": true + "license": "MIT" }, "node_modules/weaviate-ts-client": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/weaviate-ts-client/-/weaviate-ts-client-2.2.0.tgz", "integrity": "sha512-sOvX1Gt8+u9wIVmiYii26N4KSpZ8jM5fM4DMmtRL6yPNO9u8elsvg5g7eJOwmrICsn1Zt2efxhxuSChI0M8FzQ==", - "devOptional": true, + "license": "SEE LICENSE IN LICENSE", "dependencies": { "graphql-request": "^5.2.0", "uuid": "^9.0.1" @@ -11223,20 +14300,29 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "devOptional": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "devOptional": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } @@ -11245,13 +14331,13 @@ "version": "3.6.20", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "devOptional": true + "license": "MIT" }, "node_modules/whatwg-url": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", - "devOptional": true, + "license": "MIT", "dependencies": { "tr46": "^4.1.1", "webidl-conversions": "^7.0.0" @@ -11265,6 +14351,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -11280,25 +14367,17 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/wordwrapjs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.17" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "devOptional": true, + "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -11317,6 +14396,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -11329,94 +14409,17 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/xlsx": { "version": "0.20.2", "resolved": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz", "integrity": "sha512-+nKZ39+nvK7Qq6i0PvWWRA4j/EkfWOtkP/YhMtupm+lJIiHxUrgTr1CcKv1nBk1rHtkRRQ3O2+Ih/q/sA+FXZA==", + "license": "Apache-2.0", "bin": { "xlsx": "bin/xlsx.njs" }, @@ -11428,6 +14431,7 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -11440,6 +14444,7 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", "engines": { "node": ">=4.0" } @@ -11448,6 +14453,7 @@ "version": "10.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==", + "license": "MIT", "engines": { "node": ">=4.0" } @@ -11457,24 +14463,26 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" }, "node_modules/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "bin": { - "yaml": "bin.mjs" - }, + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 14" + "node": ">= 6" } }, "node_modules/yargs": { @@ -11482,6 +14490,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -11500,14 +14509,26 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -11515,18 +14536,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/youtube-transcript": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/youtube-transcript/-/youtube-transcript-1.2.1.tgz", "integrity": "sha512-TvEGkBaajKw+B6y91ziLuBLsa5cawgowou+Bk0ciGpjELDfAzSzTGXaZmeSSkUeknCPpEr/WGApOHDwV7V+Y9Q==", + "license": "MIT", "engines": { "node": ">=18.0.0" } }, "node_modules/youtubei": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/youtubei/-/youtubei-1.5.3.tgz", - "integrity": "sha512-/ngdAUoySDq05vV6CX0BvOWrpHWX5haCNmdfTCHPGHYPr+DdZPCqlknnTdzsfu3BahawhLBJO02/yRUJCccECg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/youtubei/-/youtubei-1.5.4.tgz", + "integrity": "sha512-TT99h0W6CUwHTxj6Q5xOT1w3v6pEDPw3xXQvTQ3tZ4Ez1VtZ20CGz5WSOyHjx7iXT8hDetHMZ1OQp64etGdI8Q==", + "license": "MIT", "dependencies": { "node-fetch": "2.6.7", "protobufjs": "7.2.6" @@ -11536,6 +14572,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11554,17 +14591,20 @@ "node_modules/youtubei/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/youtubei/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/youtubei/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -11574,6 +14614,7 @@ "version": "3.23.8", "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -11582,9 +14623,225 @@ "version": "3.23.3", "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.3.tgz", "integrity": "sha512-TYWChTxKQbRJp5ST22o/Irt9KC5nj7CdBKYB/AosCRdj/wxEMvv4NNaj9XVUHDOIp53ZxArGhnw5HMZziPFjog==", + "license": "ISC", "peerDependencies": { "zod": "^3.23.3" } + }, + "packages/embedjs": { + "name": "@llm-tools/embedjs", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "@huggingface/inference": "^2.8.0", + "@langchain/anthropic": "^0.3.3", + "@langchain/cohere": "^0.3.0", + "@langchain/community": "^0.3.3", + "@langchain/core": "^0.3.3", + "@langchain/google-vertexai": "^0.1.0", + "@langchain/mistralai": "^0.1.1", + "@langchain/ollama": "^0.1.0", + "@langchain/openai": "^0.3.2", + "axios": "^1.7.7", + "chromadb": "^1.9.2", + "cohere-ai": "^7.14.0", + "debug": "^4.3.7", + "langchain": "^0.3.2", + "md5": "^2.3.0", + "mime": "^4.0.4", + "stream-mime-type": "^2.0.0", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@types/babel__generator": "^7.6.8", + "@types/babel__template": "^7.4.4", + "@types/debug": "^4.1.12", + "@types/http-cache-semantics": "^4.0.4", + "@types/istanbul-lib-report": "^3.0.3", + "@types/jest": "29.5.13", + "@types/md5": "^2.3.5", + "@types/ms": "^0.7.34", + "@types/node": "^22.7.4", + "@types/webidl-conversions": "^7.0.3", + "@types/yargs-parser": "^21.0.3", + "rimraf": "^6.0.1" + } + }, + "packages/embedjs-cosmos": { + "name": "@llm-tools/embedjs-cosmos", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "@azure/cosmos": "^4.1.1", + "debug": "^4.3.7" + } + }, + "packages/embedjs-hnswlib": { + "name": "@llm-tools/embedjs-hnswlib", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "debug": "^4.3.7", + "hnswlib-node": "^3.0.0" + } + }, + "packages/embedjs-interfaces": { + "name": "@llm-tools/embedjs-interfaces", + "version": "0.0.1", + "extraneous": true + }, + "packages/embedjs-lancedb": { + "name": "@llm-tools/embedjs-lancedb", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "@lancedb/lancedb": "^0.10.0", + "compute-cosine-similarity": "^1.1.0" + } + }, + "packages/embedjs-lmdb": { + "name": "@llm-tools/embedjs-lmdb", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "lmdb": "^3.1.3" + } + }, + "packages/embedjs-loader-confluence": { + "name": "@llm-tools/embedjs-loader-confluence", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "confluence.js": "^1.7.4", + "debug": "^4.3.7", + "md5": "^2.3.0" + } + }, + "packages/embedjs-loader-csv": { + "name": "@llm-tools/embedjs-loader-csv", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "axios": "^1.7.7", + "csv-parse": "^5.5.6", + "debug": "^4.3.7", + "md5": "^2.3.0" + } + }, + "packages/embedjs-loader-msoffice": { + "name": "@llm-tools/embedjs-loader-msoffice", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "langchain": "^0.3.2", + "md5": "^2.3.0", + "office-text-extractor": "^3.0.3" + } + }, + "packages/embedjs-loader-pdf": { + "name": "@llm-tools/embedjs-loader-pdf", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "langchain": "^0.3.2", + "md5": "^2.3.0", + "office-text-extractor": "^3.0.3" + } + }, + "packages/embedjs-loader-sitemap": { + "name": "@llm-tools/embedjs-loader-sitemap", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "debug": "^4.3.7", + "md5": "^2.3.0", + "sitemapper": "^3.2.12" + } + }, + "packages/embedjs-loader-web": { + "name": "@llm-tools/embedjs-loader-web", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "axios": "^1.7.7", + "debug": "^4.3.7", + "html-to-text": "^9.0.5", + "langchain": "^0.3.2", + "md5": "^2.3.0" + }, + "devDependencies": { + "@types/html-to-text": "^9.0.4" + } + }, + "packages/embedjs-loader-youtube": { + "name": "@llm-tools/embedjs-loader-youtube", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "debug": "^4.3.7", + "md5": "^2.3.0", + "usetube": "^2.2.7", + "youtube-transcript": "^1.2.1" + }, + "devDependencies": { + "@types/usetube": "^2.1.2" + } + }, + "packages/embedjs-mongodb": { + "name": "@llm-tools/embedjs-mongodb", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "debug": "^4.3.7", + "mongodb": "^6.9.0" + } + }, + "packages/embedjs-pinecone": { + "name": "@llm-tools/embedjs-pinecone", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "@pinecone-database/pinecone": "^3.0.3", + "debug": "^4.3.7" + } + }, + "packages/embedjs-qdrant": { + "name": "@llm-tools/embedjs-qdrant", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "@qdrant/js-client-rest": "^1.11.0", + "debug": "^4.3.7", + "uuid": "^10.0.0" + } + }, + "packages/embedjs-redis": { + "name": "@llm-tools/embedjs-redis", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "ioredis": "^5.4.1" + } + }, + "packages/embedjs-types": { + "name": "@llm-tools/embedjs-types", + "version": "0.0.1", + "extraneous": true + }, + "packages/embedjs-utils": { + "name": "@llm-tools/embedjs-utils", + "version": "0.0.1", + "extraneous": true + }, + "packages/embedjs-weaviate": { + "name": "@llm-tools/embedjs-weaviate", + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "compute-cosine-similarity": "^1.1.0", + "debug": "^4.3.7", + "weaviate-ts-client": "^2.2.0" + } } } } diff --git a/package.json b/package.json index 74e4e342..89a8214c 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,57 @@ { - "name": "@llm-tools/embedjs", - "version": "0.0.96", - "description": "A NodeJS RAG framework to easily work with LLMs and custom datasets", - "main": "dist/index.js", - "types": "dist/index.d.ts", "type": "module", + "name": "@llm-tools/embedjs-source", + "description": "A NodeJS RAG framework to easily work with LLMs and custom datasets", + "author": "K V Adhityan", + "bugs": { + "url": "https://github.com/llm-tools/embedjs/issues" + }, + "homepage": "https://github.com/llm-tools/embedjs#readme", + "version": "0.1.0", "scripts": { - "clean": "rimraf dist/", - "build:local": "npm run build:esm && npm run build:cjs", - "build": "npm run clean && npm run build:esm && npm run build:cjs", - "build:cjs": "tsc --outDir dist-cjs/ -p tsconfig.cjs.json && node scripts/move-cjs-to-dist.js && rimraf dist-cjs", - "build:esm": "tsc --outDir dist/", - "prepublishOnly": "npm run build", - "tsc": "tsc --noEmit --pretty" + "build:esm": "nx run-many --t=build", + "build:cjs": "nx run-many --t=build-cjs && node scripts/move-cjs-to-dist.js", + "build:pipeline": "npm run build:esm && npm run build:cjs", + "deploy": "node scripts/publish-via-nx.js", + "prepare": "husky" }, + "license": "Apache-2.0", + "devDependencies": { + "@commitlint/config-conventional": "^19.5.0", + "@eslint/eslintrc": "^3.1.0", + "@inquirer/prompts": "^6.0.1", + "@npmcli/package-json": "^6.0.1", + "@nx/eslint": "19.8.3", + "@nx/eslint-plugin": "19.8.3", + "@nx/js": "19.8.3", + "@swc-node/register": "~1.10.9", + "@swc/core": "~1.7.26", + "@swc/helpers": "~0.5.13", + "@types/node": "22.7.4", + "@typescript-eslint/eslint-plugin": "^8.8.0", + "@typescript-eslint/parser": "^8.8.0", + "eslint": "~9.11.1", + "eslint-config-prettier": "^9.1.0", + "husky": "^9.1.6", + "nx": "19.8.3", + "prettier": "^3.3.3", + "tslib": "^2.7.0", + "typescript": "5.6.2", + "typescript-eslint": "^8.8.0" + }, + "workspaces": [ + "core/*", + "databases/*", + "loaders/*", + "models/*" + ], "repository": { "type": "git", "url": "git+https://github.com/llm-tools/embedjs.git" }, + "engines": { + "node": ">= 18.0.0" + }, "keywords": [ "ai", "ml", @@ -42,234 +76,5 @@ "vertex-ai", "mongodb", "large-language-model" - ], - "license": "Apache-2.0", - "author": "K V Adhityan", - "bugs": { - "url": "https://github.com/llm-tools/embedjs/issues" - }, - "publishConfig": { - "access": "public" - }, - "files": [ - "dist" - ], - "homepage": "https://github.com/llm-tools/embedjs#readme", - "dependencies": { - "@huggingface/inference": "^2.8.0", - "@langchain/anthropic": "^0.3.3", - "@langchain/cohere": "^0.3.0", - "@langchain/community": "^0.3.2", - "@langchain/core": "^0.3.3", - "@langchain/google-vertexai": "^0.1.0", - "@langchain/mistralai": "^0.1.1", - "@langchain/openai": "^0.3.2", - "axios": "^1.7.7", - "compute-cosine-similarity": "^1.1.0", - "confluence.js": "^1.7.4", - "csv-parse": "^5.5.6", - "debug": "^4.3.6", - "html-to-text": "^9.0.5", - "langchain": "^0.3.2", - "md5": "^2.3.0", - "mime": "^4.0.4", - "office-text-extractor": "^3.0.3", - "sitemapper": "^3.2.12", - "stream-mime-type": "^2.0.0", - "usetube": "^2.2.7", - "uuid": "^10.0.0", - "youtube-transcript": "^1.2.1" - }, - "devDependencies": { - "@azure/cosmos": "^4.1.1", - "@lancedb/lancedb": "^0.10.0", - "@pinecone-database/pinecone": "^3.0.3", - "@qdrant/js-client-rest": "^1.11.0", - "@tsconfig/recommended": "^1.0.7", - "@types/babel__generator": "^7.6.8", - "@types/babel__template": "^7.4.4", - "@types/debug": "^4.1.12", - "@types/html-to-text": "^9.0.4", - "@types/http-cache-semantics": "^4.0.4", - "@types/istanbul-lib-report": "^3.0.3", - "@types/jest": "29.5.13", - "@types/md5": "^2.3.5", - "@types/ms": "^0.7.34", - "@types/node": "^22.7.0", - "@types/usetube": "^2.1.2", - "@types/webidl-conversions": "^7.0.3", - "@types/yargs-parser": "^21.0.3", - "@typescript-eslint/eslint-plugin": "^8.7.0", - "@typescript-eslint/parser": "^8.7.0", - "chromadb": "^1.9.2", - "cohere-ai": "^7.13.2", - "eslint": "^9.11.1", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", - "hnswlib-node": "^3.0.0", - "ioredis": "^5.4.1", - "jest": "29.7.0", - "lmdb": "^3.1.3", - "mongodb": "^6.9.0", - "prettier": "^3.3.3", - "rimraf": "^6.0.1", - "ts-jest": "29.2.5", - "typescript": "^5.6.2", - "weaviate-ts-client": "^2.2.0" - }, - "peerDependencies": { - "@azure/cosmos": "^4.1.1", - "@datastax/astra-db-ts": "^1.5.0", - "@lancedb/lancedb": "^0.10.0", - "@pinecone-database/pinecone": "^3.0.3", - "@qdrant/js-client-rest": "^1.11.0", - "chromadb": "^1.9.2", - "cohere-ai": "^7.13.2", - "hnswlib-node": "^3.0.0", - "ioredis": "^5.4.1", - "lmdb": "^3.1.3", - "mongodb": "^6.9.0", - "weaviate-ts-client": "^2.2.0" - }, - "overrides": { - "@pinecone-database/pinecone": "^3.0.3", - "weaviate-ts-client": "^2.2.0", - "hnswlib-node": "^3.0.0" - }, - "peerDependenciesMeta": { - "@pinecone-database/pinecone": { - "optional": true - }, - "@lancedb/lancedb": { - "optional": true - }, - "chromadb": { - "optional": true - }, - "lmdb": { - "optional": true - }, - "cohere-ai": { - "optional": true - }, - "hnswlib-node": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "@qdrant/js-client-rest": { - "optional": true - }, - "weaviate-ts-client": { - "optional": true - }, - "mongodb": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@datastax/astra-db-ts": { - "optional": true - } - }, - "engines": { - "node": ">= 18.0.0" - }, - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.cjs" - }, - "./vectorDb/lance": { - "types": "./dist/vectorDb/lance-db.d.ts", - "import": "./dist/vectorDb/lance-db.js", - "require": "./dist/vectorDb/lance-db.cjs" - }, - "./vectorDb/pinecone": { - "types": "./dist/vectorDb/pinecone-db.d.ts", - "import": "./dist/vectorDb/pinecone-db.js", - "require": "./dist/vectorDb/pinecone-db.cjs" - }, - "./vectorDb/chroma": { - "types": "./dist/vectorDb/chroma-db.d.ts", - "import": "./dist/vectorDb/chroma-db.js", - "require": "./dist/vectorDb/chroma-db.cjs" - }, - "./vectorDb/qdrant": { - "types": "./dist/vectorDb/qdrant-db.d.ts", - "import": "./dist/vectorDb/qdrant-db.js", - "require": "./dist/vectorDb/qdrant-db.cjs" - }, - "./vectorDb/hnswlib": { - "types": "./dist/vectorDb/hnswlib-db.d.ts", - "import": "./dist/vectorDb/hnswlib-db.js", - "require": "./dist/vectorDb/hnswlib-db.cjs" - }, - "./vectorDb/weaviate": { - "types": "./dist/vectorDb/weaviate-db.d.ts", - "import": "./dist/vectorDb/weaviate-db.js", - "require": "./dist/vectorDb/weaviate-db.cjs" - }, - "./vectorDb/mongodb": { - "types": "./dist/vectorDb/mongo-db.d.ts", - "import": "./dist/vectorDb/mongo-db.js", - "require": "./dist/vectorDb/mongo-db.cjs" - }, - "./vectorDb/cosmosdb": { - "types": "./dist/vectorDb/cosmos-db.d.ts", - "import": "./dist/vectorDb/cosmos-db.js", - "require": "./dist/vectorDb/cosmos-db.cjs" - }, - "./cache/lmdb": { - "types": "./dist/cache/lmdb-cache.d.ts", - "import": "./dist/cache/lmdb-cache.js", - "require": "./dist/cache/lmdb-cache.cjs" - }, - "./cache/memory": { - "types": "./dist/cache/memory-cache.d.ts", - "import": "./dist/cache/memory-cache.js", - "require": "./dist/cache/memory-cache.cjs" - }, - "./cache/redis": { - "types": "./dist/cache/redis-cache.d.ts", - "import": "./dist/cache/redis-cache.js", - "require": "./dist/cache/redis-cache.cjs" - }, - "./cache/mongo": { - "types": "./dist/cache/mongo-cache.d.ts", - "import": "./dist/cache/mongo-cache.js", - "require": "./dist/cache/mongo-cache.cjs" - }, - "./conversation/memory": { - "types": "./dist/conversation/memory-conversations.d.ts", - "import": "./dist/conversation/memory-conversations.js", - "require": "./dist/conversation/memory-conversations.cjs" - }, - "./conversation/mongo": { - "types": "./dist/conversation/mongo-conversations.d.ts", - "import": "./dist/conversation/mongo-conversations.js", - "require": "./dist/conversation/mongo-conversations.cjs" - }, - "./package.json": "./package.json" - }, - "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "rootDir": "src", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "collectCoverageFrom": [ - "**/*.(t|j)s" - ], - "coverageDirectory": "../coverage", - "testEnvironment": "node" - } + ] } diff --git a/scripts/move-cjs-to-dist.js b/scripts/move-cjs-to-dist.js index 9709d756..41d19929 100644 --- a/scripts/move-cjs-to-dist.js +++ b/scripts/move-cjs-to-dist.js @@ -32,7 +32,7 @@ async function moveAndRename(source, dest) { } } -moveAndRename('../dist-cjs', '../dist').catch((err) => { - console.error(err); +moveAndRename('../dist/cjs', '../dist/esm').catch((err) => { + console.error('Error', err); process.exit(1); }); diff --git a/scripts/publish-via-nx.js b/scripts/publish-via-nx.js new file mode 100644 index 00000000..4a065949 --- /dev/null +++ b/scripts/publish-via-nx.js @@ -0,0 +1,103 @@ +import { resolve, dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { existsSync } from 'node:fs'; + +import { releaseVersion, releaseChangelog } from 'nx/release/index.js'; +import { confirm, input } from '@inquirer/prompts'; +import PackageJson from '@npmcli/package-json'; + +function abs(relativePath) { + return resolve(dirname(fileURLToPath(import.meta.url)), relativePath); +} + +/** + * @param {pkgName} pkgName - The name of the package to update + * @param {string} version - The version to update the package to + * @param {Map} versionMap - A map of package names to versions + * @param {boolean} dryRun - Whether to perform a dry run or not + */ +async function updatePackageVersion(pkgName, version, versionMap, dryRun) { + const folders = ['../core', '../databases', '../loaders', '../models']; + + let found = false; + for await (const folder of folders) { + const absPath = abs(`${folder}/${pkgName}`); + + if (existsSync(absPath)) { + console.log( + `Updating '${pkgName}' at path '${absPath}' to version '${version}' ${dryRun ? '[dry run]' : ''}`, + ); + const pkgJson = await PackageJson.load(absPath); + pkgJson.update({ version }); + + const newDependencyVersions = {}; + const dependencies = pkgJson.content.dependencies; + for (const depName of Object.keys(dependencies)) { + if (versionMap.has(depName)) { + const newDependencyVersion = versionMap.get(depName); + console.log( + `-> Updating '${depName}' in package '${pkgName}' to version '${newDependencyVersion}' ${dryRun ? '[dry run]' : ''}`, + ); + newDependencyVersions[depName] = newDependencyVersion; + } + } + + pkgJson.update({ + dependencies: { + ...pkgJson.content.dependencies, + ...newDependencyVersions, + }, + }); + + if (!dryRun) await pkgJson.save(); + found = true; + } + } + + if (!found) console.error(`Could not find '${pkgName}' in any of the folders`); +} + +async function createRelease(dryRun, version) { + const { workspaceVersion, projectsVersionData } = await releaseVersion({ + specifier: version, + verbose: false, + dryRun, + }); + + const versionMap = new Map(); + for (const [pkgName, { newVersion }] of Object.entries(projectsVersionData)) { + versionMap.set(`@llm-tools/${pkgName}`, newVersion); + } + + console.log('Updating projects actual version to match NX computed values in dist'); + for await (const [pkgName, { newVersion }] of Object.entries(projectsVersionData)) { + if (newVersion !== null) await updatePackageVersion(pkgName, newVersion, versionMap, dryRun); + else console.log(`Skipping '${pkgName}' version update as it's already up to date`); + } + + await releaseChangelog({ + versionData: projectsVersionData, + version: workspaceVersion, + dryRun, + }); + + process.exit(0); +} + +async function startReleasePipeline() { + const dryRun = await confirm({ message: 'Is this a dry run?', default: true, required: true }); + const specificVersion = await confirm({ + message: 'Do you want to provide a specific version?', + default: false, + required: true, + }); + + let version = 'patch'; + if (specificVersion) { + version = await input({ message: 'What version do you want to publish?', default: version, required: true }); + } + + await createRelease(dryRun, version); +} + +await startReleasePipeline(); diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 00f8baae..00000000 --- a/src/index.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { RAGApplication } from './core/rag-application.js'; -import { RAGApplicationBuilder } from './core/rag-application-builder.js'; -import { TextLoader } from './loaders/text-loader.js'; -import { YoutubeLoader } from './loaders/youtube-loader.js'; -import { PdfLoader } from './loaders/pdf-loader.js'; -import { WebLoader } from './loaders/web-loader.js'; -import { JsonLoader } from './loaders/json-loader.js'; -import { ExcelLoader } from './loaders/excel-loader.js'; -import { DocxLoader } from './loaders/docx-loader.js'; -import { PptLoader } from './loaders/ppt-loader.js'; -import { BaseLoader } from './interfaces/base-loader.js'; -import { BaseDb } from './interfaces/base-db.js'; -import { BaseEmbeddings } from './interfaces/base-embeddings.js'; -import { BaseCache } from './interfaces/base-cache.js'; -import { YoutubeChannelLoader } from './loaders/youtube-channel-loader.js'; -import { YoutubeSearchLoader } from './loaders/youtube-search-loader.js'; -import { SitemapLoader } from './loaders/sitemap-loader.js'; -import { CsvLoader } from './loaders/csv-loader.js'; -import { LocalPathLoader } from './loaders/local-path-loader.js'; -import { UrlLoader } from './loaders/url-loader.js'; -import { BaseModel } from './interfaces/base-model.js'; -import { SIMPLE_MODELS } from './global/constants.js'; -import { OpenAi } from './models/openai-model.js'; -import { ConfluenceLoader } from './loaders/confluence-loader.js'; -import { AdaEmbeddings } from './embeddings/ada-embeddings.js'; -import { CohereEmbeddings } from './embeddings/cohere-embeddings.js'; -import { OpenAi3LargeEmbeddings } from './embeddings/openai-3large-embeddings.js'; -import { OpenAi3SmallEmbeddings } from './embeddings/openai-3small-embeddings.js'; -import { Mistral } from './models/mistral-model.js'; -import { HuggingFace } from './models/huggingface-model.js'; -import { Anthropic } from './models/anthropic-model.js'; -import { VertexAI } from './models/vertexai-model.js'; -import { Ollama } from './models/ollama-model.js'; -import { GeckoEmbeddings } from './embeddings/gecko-embeddings.js'; -import { OllamaEmbeddings } from './embeddings/ollama-embeddings.js'; - -export { - RAGApplication, - RAGApplicationBuilder, - TextLoader, - PdfLoader, - WebLoader, - JsonLoader, - DocxLoader, - ExcelLoader, - PptLoader, - UrlLoader, - LocalPathLoader, - CsvLoader, - YoutubeLoader, - YoutubeChannelLoader, - YoutubeSearchLoader, - SitemapLoader, - ConfluenceLoader, - BaseDb, - BaseCache, - BaseLoader, - BaseEmbeddings, - BaseModel, - SIMPLE_MODELS, - OpenAi, - AdaEmbeddings, - CohereEmbeddings, - OpenAi3LargeEmbeddings, - OpenAi3SmallEmbeddings, - Mistral, - HuggingFace, - Anthropic, - VertexAI, - Ollama, - GeckoEmbeddings, - OllamaEmbeddings, -}; diff --git a/src/vectorDb/chroma-db.ts b/src/vectorDb/chroma-db.ts deleted file mode 100644 index 42892180..00000000 --- a/src/vectorDb/chroma-db.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { ChromaClient, Collection } from 'chromadb'; - -import { BaseDb } from '../interfaces/base-db.js'; -import { ExtractChunkData, InsertChunkData } from '../global/types.js'; - -export class ChromaDb implements BaseDb { - private static readonly STATIC_COLLECTION_NAME = 'vectors'; - private readonly url: string; - private collection: Collection; - - constructor({ url }: { url: string }) { - this.url = url; - } - - async init() { - const client = new ChromaClient({ path: this.url }); - this.collection = await client.getOrCreateCollection({ name: ChromaDb.STATIC_COLLECTION_NAME }); - } - - async insertChunks(chunks: InsertChunkData[]): Promise { - const mapped = chunks.map((chunk) => { - return { - id: chunk.metadata.id, - pageContent: chunk.pageContent, - vector: chunk.vector, - metadata: chunk.metadata, - }; - }); - - await this.collection.add({ - ids: mapped.map((e) => e.id), - embeddings: mapped.map((e) => e.vector), - metadatas: mapped.map((e) => e.metadata), - documents: mapped.map((e) => e.pageContent), - }); - - return mapped.length; - } - - async similaritySearch(query: number[], k: number): Promise { - const results = await this.collection.query({ - nResults: k, - queryEmbeddings: [query], - }); - - return results.documents[0].map((result, index) => { - return { - score: results.distances[0][index], - pageContent: result, - metadata: { - id: results.ids[0][index], - ...(<{ source: string; uniqueLoaderId: string }>results.metadatas[0][index]), - }, - }; - }); - } - - async getVectorCount(): Promise { - return this.collection.count(); - } - - async deleteKeys(uniqueLoaderId: string): Promise { - await this.collection.delete({ - where: { - uniqueLoaderId, - }, - }); - return true; - } - - async reset(): Promise { - const client = new ChromaClient({ path: this.url }); - await client.deleteCollection({ name: ChromaDb.STATIC_COLLECTION_NAME }); - this.collection = await client.createCollection({ name: ChromaDb.STATIC_COLLECTION_NAME }); - } -} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 00000000..0075d83f --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,49 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "rootDir": ".", + "sourceMap": true, + "esModuleInterop": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "es2015", + "module": "esnext", + "lib": ["es2020", "dom"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "baseUrl": ".", + "paths": { + "@llm-tools/embedjs": ["core/embedjs/src/index.ts"], + "@llm-tools/embedjs-anthropic": ["models/embedjs-anthropic/src/index.ts"], + "@llm-tools/embedjs-astra": ["databases/embedjs-astra/src/index.ts"], + "@llm-tools/embedjs-cohere": ["models/embedjs-cohere/src/index.ts"], + "@llm-tools/embedjs-cosmos": ["databases/embedjs-cosmos/src/index.ts"], + "@llm-tools/embedjs-hnswlib": ["databases/embedjs-hnswlib/src/index.ts"], + "@llm-tools/embedjs-huggingface": ["models/embedjs-huggingface/src/index.ts"], + "@llm-tools/embedjs-interfaces": ["core/embedjs-interfaces/src/index.ts"], + "@llm-tools/embedjs-lancedb": ["databases/embedjs-lancedb/src/index.ts"], + "@llm-tools/embedjs-lmdb": ["databases/embedjs-lmdb/src/index.ts"], + "@llm-tools/embedjs-loader-confluence": ["loaders/embedjs-loader-confluence/src/index.ts"], + "@llm-tools/embedjs-loader-csv": ["loaders/embedjs-loader-csv/src/index.ts"], + "@llm-tools/embedjs-loader-msoffice": ["loaders/embedjs-loader-msoffice/src/index.ts"], + "@llm-tools/embedjs-loader-pdf": ["loaders/embedjs-loader-pdf/src/index.ts"], + "@llm-tools/embedjs-loader-sitemap": ["loaders/embedjs-loader-sitemap/src/index.ts"], + "@llm-tools/embedjs-loader-web": ["loaders/embedjs-loader-web/src/index.ts"], + "@llm-tools/embedjs-loader-youtube": ["loaders/embedjs-loader-youtube/src/index.ts"], + "@llm-tools/embedjs-mistral": ["models/embedjs-mistral/src/index.ts"], + "@llm-tools/embedjs-mongodb": ["databases/embedjs-mongodb/src/index.ts"], + "@llm-tools/embedjs-ollama": ["models/embedjs-ollama/src/index.ts"], + "@llm-tools/embedjs-openai": ["models/embedjs-openai/src/index.ts"], + "@llm-tools/embedjs-pinecone": ["databases/embedjs-pinecone/src/index.ts"], + "@llm-tools/embedjs-qdrant": ["databases/embedjs-qdrant/src/index.ts"], + "@llm-tools/embedjs-redis": ["databases/embedjs-redis/src/index.ts"], + "@llm-tools/embedjs-utils": ["core/embedjs-utils/src/index.ts"], + "@llm-tools/embedjs-vertexai": ["models/embedjs-vertexai/src/index.ts"], + "@llm-tools/embedjs-weaviate": ["databases/embedjs-weaviate/src/index.ts"] + } + }, + "exclude": ["node_modules", "tmp"] +} diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json deleted file mode 100644 index a8d9b7b8..00000000 --- a/tsconfig.cjs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "commonjs", - "moduleResolution": "Node10", - "declaration": false - }, - "exclude": ["node_modules", "dist", "docs", "**/tests"] -} From 52549e7dc70b1f9cb29e9a6629aeb46df12c4a11 Mon Sep 17 00:00:00 2001 From: Adhityan K V Date: Thu, 3 Oct 2024 23:10:47 +0200 Subject: [PATCH 2/3] chore: updated build scripts --- .github/workflows/publish.yml | 8 ++++---- package-lock.json | 14 ++++++++++--- package.json | 1 + scripts/publish-via-nx.js | 38 +++++++++++++++++++++++++++-------- 4 files changed, 46 insertions(+), 15 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c47c50af..9655977c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,9 +1,6 @@ name: Publish on: - #Run manually using the GitHub Actions UI - workflow_dispatch: - #When a new release is published release: types: [published] @@ -36,7 +33,10 @@ jobs: shell: bash - name: Publish packages - run: npx nx release publish + run: | + VERSION=${{ github.ref_name }} + npm run deploy --ci --version $VERSION + npx nx release publish shell: bash env: NODE_AUTH_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }} diff --git a/package-lock.json b/package-lock.json index 2aa32eb5..a8d76cc0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "@types/node": "22.7.4", "@typescript-eslint/eslint-plugin": "^8.8.0", "@typescript-eslint/parser": "^8.8.0", + "arg": "^5.0.2", "eslint": "~9.11.1", "eslint-config-prettier": "^9.1.0", "husky": "^9.1.6", @@ -8059,9 +8060,9 @@ } }, "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true, "license": "MIT" }, @@ -13953,6 +13954,13 @@ } } }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, "node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", diff --git a/package.json b/package.json index 89a8214c..0afd8475 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@types/node": "22.7.4", "@typescript-eslint/eslint-plugin": "^8.8.0", "@typescript-eslint/parser": "^8.8.0", + "arg": "^5.0.2", "eslint": "~9.11.1", "eslint-config-prettier": "^9.1.0", "husky": "^9.1.6", diff --git a/scripts/publish-via-nx.js b/scripts/publish-via-nx.js index 4a065949..c9ca552a 100644 --- a/scripts/publish-via-nx.js +++ b/scripts/publish-via-nx.js @@ -5,6 +5,7 @@ import { existsSync } from 'node:fs'; import { releaseVersion, releaseChangelog } from 'nx/release/index.js'; import { confirm, input } from '@inquirer/prompts'; import PackageJson from '@npmcli/package-json'; +import arg from 'arg'; function abs(relativePath) { return resolve(dirname(fileURLToPath(import.meta.url)), relativePath); @@ -76,6 +77,7 @@ async function createRelease(dryRun, version) { } await releaseChangelog({ + firstRelease: true, versionData: projectsVersionData, version: workspaceVersion, dryRun, @@ -85,17 +87,37 @@ async function createRelease(dryRun, version) { } async function startReleasePipeline() { - const dryRun = await confirm({ message: 'Is this a dry run?', default: true, required: true }); - const specificVersion = await confirm({ - message: 'Do you want to provide a specific version?', - default: false, - required: true, + const args = arg({ + // Types + '--ci': Boolean, + '--dryRun': String, + '--version': String, + + // Aliases + '-d': '--dryRun', + '-v': '--version', }); + const dryRun = + args['--dryRun'] ?? + (args['--ci'] ? false : await confirm({ message: 'Is this a dry run?', default: true, required: true })); + let version = 'patch'; - if (specificVersion) { - version = await input({ message: 'What version do you want to publish?', default: version, required: true }); - } + if (!args['--version']) { + const specificVersion = await confirm({ + message: 'Do you want to provide a specific version?', + default: false, + required: true, + }); + + if (specificVersion) { + version = await input({ + message: 'What version do you want to publish?', + default: version, + required: true, + }); + } + } else version = args['--version']; await createRelease(dryRun, version); } From 3f2fac8fed7d0fa7199977ba76f801bef9d2dea7 Mon Sep 17 00:00:00 2001 From: Adhityan K V Date: Fri, 4 Oct 2024 08:54:15 +0200 Subject: [PATCH 3/3] chore: bump project versions to 0.1.0 --- core/embedjs-interfaces/package.json | 6 +- core/embedjs-utils/package.json | 4 +- core/embedjs/package.json | 8 +- databases/embedjs-astra/package.json | 6 +- databases/embedjs-cosmos/package.json | 6 +- databases/embedjs-hnswlib/package.json | 6 +- databases/embedjs-lancedb/package.json | 6 +- databases/embedjs-lmdb/package.json | 6 +- databases/embedjs-mongodb/package.json | 6 +- databases/embedjs-pinecone/package.json | 6 +- databases/embedjs-qdrant/package.json | 8 +- databases/embedjs-redis/package.json | 6 +- databases/embedjs-weaviate/package.json | 8 +- .../embedjs-loader-confluence/package.json | 10 +- loaders/embedjs-loader-csv/package.json | 10 +- loaders/embedjs-loader-msoffice/package.json | 10 +- loaders/embedjs-loader-pdf/package.json | 10 +- loaders/embedjs-loader-sitemap/package.json | 10 +- loaders/embedjs-loader-web/package.json | 8 +- loaders/embedjs-loader-youtube/package.json | 10 +- models/embedjs-anthropic/package.json | 8 +- models/embedjs-cohere/package.json | 6 +- models/embedjs-huggingface/package.json | 8 +- models/embedjs-mistral/package.json | 6 +- models/embedjs-ollama/package.json | 6 +- models/embedjs-openai/package.json | 6 +- models/embedjs-vertexai/package.json | 6 +- package-lock.json | 153 +----------------- 28 files changed, 100 insertions(+), 249 deletions(-) diff --git a/core/embedjs-interfaces/package.json b/core/embedjs-interfaces/package.json index a966f85b..8ac3f0a9 100644 --- a/core/embedjs-interfaces/package.json +++ b/core/embedjs-interfaces/package.json @@ -1,11 +1,11 @@ { "name": "@llm-tools/embedjs-interfaces", - "version": "0.0.1", + "version": "0.1.0", "description": "Interfaces for extending the embedjs ecosystem", "dependencies": { - "uuid": "^10.0.0", "debug": "^4.3.7", - "md5": "^2.3.0" + "md5": "^2.3.0", + "uuid": "^10.0.0" }, "type": "module", "main": "./src/index.js", diff --git a/core/embedjs-utils/package.json b/core/embedjs-utils/package.json index c12d56bf..29952436 100644 --- a/core/embedjs-utils/package.json +++ b/core/embedjs-utils/package.json @@ -1,9 +1,9 @@ { "name": "@llm-tools/embedjs-utils", - "version": "0.0.1", + "version": "0.1.0", "description": "Useful util functions when extending the embedjs ecosystem", "dependencies": { - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0" }, "type": "module", "main": "./src/index.js", diff --git a/core/embedjs/package.json b/core/embedjs/package.json index 0f022edc..ab503e30 100644 --- a/core/embedjs/package.json +++ b/core/embedjs/package.json @@ -1,17 +1,17 @@ { "type": "module", "name": "@llm-tools/embedjs", - "version": "0.0.1", + "version": "0.1.0", "description": "A NodeJS RAG framework to easily work with LLMs and custom datasets", "dependencies": { + "@llm-tools/embedjs-interfaces": "0.1.0", + "@llm-tools/embedjs-utils": "0.1.0", "axios": "^1.7.7", "debug": "^4.3.7", "langchain": "^0.3.2", "md5": "^2.3.0", "mime": "^4.0.4", - "stream-mime-type": "^2.0.0", - "@llm-tools/embedjs-utils": "0.0.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "stream-mime-type": "^2.0.0" }, "devDependencies": { "@types/debug": "^4.1.12", diff --git a/databases/embedjs-astra/package.json b/databases/embedjs-astra/package.json index 4b89b0ab..5a94af71 100644 --- a/databases/embedjs-astra/package.json +++ b/databases/embedjs-astra/package.json @@ -1,11 +1,11 @@ { "name": "@llm-tools/embedjs-astra", - "version": "0.0.1", + "version": "0.1.0", "description": "Add AstraDB support to embedjs", "dependencies": { - "debug": "^4.3.7", "@datastax/astra-db-ts": "^1.5.0", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "debug": "^4.3.7" }, "type": "module", "main": "./src/index.js", diff --git a/databases/embedjs-cosmos/package.json b/databases/embedjs-cosmos/package.json index df94a02a..84f5c78a 100644 --- a/databases/embedjs-cosmos/package.json +++ b/databases/embedjs-cosmos/package.json @@ -1,11 +1,11 @@ { "name": "@llm-tools/embedjs-cosmos", - "version": "0.0.1", + "version": "0.1.0", "description": "Add CosmosDB support to embedjs", "dependencies": { - "debug": "^4.3.7", "@azure/cosmos": "^4.1.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "debug": "^4.3.7" }, "type": "module", "main": "./src/index.js", diff --git a/databases/embedjs-hnswlib/package.json b/databases/embedjs-hnswlib/package.json index 7dfe7df6..ac14dfff 100644 --- a/databases/embedjs-hnswlib/package.json +++ b/databases/embedjs-hnswlib/package.json @@ -1,11 +1,11 @@ { "name": "@llm-tools/embedjs-hnswlib", - "version": "0.0.1", + "version": "0.1.0", "description": "Add HNSWLib support to embedjs", "dependencies": { + "@llm-tools/embedjs-interfaces": "0.1.0", "debug": "^4.3.7", - "hnswlib-node": "^3.0.0", - "@llm-tools/embedjs-interfaces": "0.0.1" + "hnswlib-node": "^3.0.0" }, "type": "module", "main": "./src/index.js", diff --git a/databases/embedjs-lancedb/package.json b/databases/embedjs-lancedb/package.json index 81289c8e..e255b1ec 100644 --- a/databases/embedjs-lancedb/package.json +++ b/databases/embedjs-lancedb/package.json @@ -1,11 +1,11 @@ { "name": "@llm-tools/embedjs-lancedb", - "version": "0.0.1", + "version": "0.1.0", "description": "Add LanceDb support to embedjs", "dependencies": { "@lancedb/lancedb": "^0.10.0", - "compute-cosine-similarity": "^1.1.0", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "compute-cosine-similarity": "^1.1.0" }, "type": "module", "main": "./src/index.js", diff --git a/databases/embedjs-lmdb/package.json b/databases/embedjs-lmdb/package.json index 0eb12fdd..d4d686b8 100644 --- a/databases/embedjs-lmdb/package.json +++ b/databases/embedjs-lmdb/package.json @@ -1,10 +1,10 @@ { "name": "@llm-tools/embedjs-lmdb", - "version": "0.0.1", + "version": "0.1.0", "description": "Add LMDB support to embedjs", "dependencies": { - "lmdb": "^3.1.3", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "lmdb": "^3.1.3" }, "type": "module", "main": "./src/index.js", diff --git a/databases/embedjs-mongodb/package.json b/databases/embedjs-mongodb/package.json index 52650fc0..840cd341 100644 --- a/databases/embedjs-mongodb/package.json +++ b/databases/embedjs-mongodb/package.json @@ -1,11 +1,11 @@ { "name": "@llm-tools/embedjs-mongodb", - "version": "0.0.1", + "version": "0.1.0", "description": "Add MongoDB support to embedjs", "dependencies": { - "mongodb": "^6.9.0", + "@llm-tools/embedjs-interfaces": "0.1.0", "debug": "^4.3.7", - "@llm-tools/embedjs-interfaces": "0.0.1" + "mongodb": "^6.9.0" }, "type": "module", "main": "./src/index.js", diff --git a/databases/embedjs-pinecone/package.json b/databases/embedjs-pinecone/package.json index 76127984..70796e62 100644 --- a/databases/embedjs-pinecone/package.json +++ b/databases/embedjs-pinecone/package.json @@ -1,11 +1,11 @@ { "name": "@llm-tools/embedjs-pinecone", - "version": "0.0.1", + "version": "0.1.0", "description": "Add Pinecone support to embedjs", "dependencies": { - "debug": "^4.3.7", + "@llm-tools/embedjs-interfaces": "0.1.0", "@pinecone-database/pinecone": "^3.0.3", - "@llm-tools/embedjs-interfaces": "0.0.1" + "debug": "^4.3.7" }, "type": "module", "main": "./src/index.js", diff --git a/databases/embedjs-qdrant/package.json b/databases/embedjs-qdrant/package.json index 2e553e95..12d5a982 100644 --- a/databases/embedjs-qdrant/package.json +++ b/databases/embedjs-qdrant/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-qdrant", - "version": "0.0.1", + "version": "0.1.0", "description": "Add Qdrant support to embedjs", "dependencies": { - "uuid": "^10.0.0", - "debug": "^4.3.7", + "@llm-tools/embedjs-interfaces": "0.1.0", "@qdrant/js-client-rest": "^1.11.0", - "@llm-tools/embedjs-interfaces": "0.0.1" + "debug": "^4.3.7", + "uuid": "^10.0.0" }, "type": "module", "main": "./src/index.js", diff --git a/databases/embedjs-redis/package.json b/databases/embedjs-redis/package.json index 15495f5a..31911e21 100644 --- a/databases/embedjs-redis/package.json +++ b/databases/embedjs-redis/package.json @@ -1,10 +1,10 @@ { "name": "@llm-tools/embedjs-redis", - "version": "0.0.1", + "version": "0.1.0", "description": "Add Redis support to embedjs", "dependencies": { - "ioredis": "^5.4.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "ioredis": "^5.4.1" }, "type": "module", "main": "./src/index.js", diff --git a/databases/embedjs-weaviate/package.json b/databases/embedjs-weaviate/package.json index 7a7e4352..cb995be3 100644 --- a/databases/embedjs-weaviate/package.json +++ b/databases/embedjs-weaviate/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-weaviate", - "version": "0.0.1", + "version": "0.1.0", "description": "Add Weaviate support to embedjs", "dependencies": { - "debug": "^4.3.7", + "@llm-tools/embedjs-interfaces": "0.1.0", "compute-cosine-similarity": "^1.1.0", - "weaviate-ts-client": "^2.2.0", - "@llm-tools/embedjs-interfaces": "0.0.1" + "debug": "^4.3.7", + "weaviate-ts-client": "^2.2.0" }, "type": "module", "main": "./src/index.js", diff --git a/loaders/embedjs-loader-confluence/package.json b/loaders/embedjs-loader-confluence/package.json index aace2671..34ff99cb 100644 --- a/loaders/embedjs-loader-confluence/package.json +++ b/loaders/embedjs-loader-confluence/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-loader-confluence", - "version": "0.0.1", + "version": "0.1.0", "dependencies": { - "debug": "^4.3.7", + "@llm-tools/embedjs-interfaces": "0.1.0", + "@llm-tools/embedjs-loader-web": "0.1.0", "confluence.js": "^1.7.4", - "md5": "^2.3.0", - "@llm-tools/embedjs-interfaces": "^0.0.1", - "@llm-tools/embedjs-loader-web": "^0.0.1" + "debug": "^4.3.7", + "md5": "^2.3.0" }, "type": "module", "main": "./src/index.js", diff --git a/loaders/embedjs-loader-csv/package.json b/loaders/embedjs-loader-csv/package.json index 6cf16fe5..b5efe106 100644 --- a/loaders/embedjs-loader-csv/package.json +++ b/loaders/embedjs-loader-csv/package.json @@ -1,13 +1,13 @@ { "name": "@llm-tools/embedjs-loader-csv", - "version": "0.0.1", + "version": "0.1.0", "dependencies": { - "md5": "^2.3.0", + "@llm-tools/embedjs-interfaces": "0.1.0", + "@llm-tools/embedjs-utils": "0.1.0", "axios": "^1.7.7", - "debug": "^4.3.7", "csv-parse": "^5.5.6", - "@llm-tools/embedjs-utils": "0.0.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "debug": "^4.3.7", + "md5": "^2.3.0" }, "type": "module", "main": "./src/index.js", diff --git a/loaders/embedjs-loader-msoffice/package.json b/loaders/embedjs-loader-msoffice/package.json index 6947beb4..6c8f3fbb 100644 --- a/loaders/embedjs-loader-msoffice/package.json +++ b/loaders/embedjs-loader-msoffice/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-loader-msoffice", - "version": "0.0.1", + "version": "0.1.0", "dependencies": { - "md5": "^2.3.0", - "office-text-extractor": "^3.0.3", + "@llm-tools/embedjs-interfaces": "0.1.0", + "@llm-tools/embedjs-utils": "0.1.0", "langchain": "^0.3.2", - "@llm-tools/embedjs-utils": "0.0.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "md5": "^2.3.0", + "office-text-extractor": "^3.0.3" }, "type": "module", "main": "./src/index.js", diff --git a/loaders/embedjs-loader-pdf/package.json b/loaders/embedjs-loader-pdf/package.json index 2eb2aa7a..be1e3e18 100644 --- a/loaders/embedjs-loader-pdf/package.json +++ b/loaders/embedjs-loader-pdf/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-loader-pdf", - "version": "0.0.1", + "version": "0.1.0", "dependencies": { - "md5": "^2.3.0", - "office-text-extractor": "^3.0.3", + "@llm-tools/embedjs-interfaces": "0.1.0", + "@llm-tools/embedjs-utils": "0.1.0", "langchain": "^0.3.2", - "@llm-tools/embedjs-utils": "0.0.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "md5": "^2.3.0", + "office-text-extractor": "^3.0.3" }, "type": "module", "main": "./src/index.js", diff --git a/loaders/embedjs-loader-sitemap/package.json b/loaders/embedjs-loader-sitemap/package.json index 3b6aa557..7a54e396 100644 --- a/loaders/embedjs-loader-sitemap/package.json +++ b/loaders/embedjs-loader-sitemap/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-loader-sitemap", - "version": "0.0.1", + "version": "0.1.0", "dependencies": { - "md5": "^2.3.0", + "@llm-tools/embedjs-interfaces": "0.1.0", + "@llm-tools/embedjs-loader-web": "0.1.0", "debug": "^4.3.7", - "sitemapper": "^3.2.12", - "@llm-tools/embedjs-interfaces": "^0.0.1", - "@llm-tools/embedjs-loader-web": "^0.0.1" + "md5": "^2.3.0", + "sitemapper": "^3.2.12" }, "type": "module", "main": "./src/index.js", diff --git a/loaders/embedjs-loader-web/package.json b/loaders/embedjs-loader-web/package.json index 9ef04e05..816aa965 100644 --- a/loaders/embedjs-loader-web/package.json +++ b/loaders/embedjs-loader-web/package.json @@ -1,14 +1,14 @@ { "name": "@llm-tools/embedjs-loader-web", - "version": "0.0.1", + "version": "0.1.0", "dependencies": { - "md5": "^2.3.0", + "@llm-tools/embedjs-interfaces": "0.1.0", + "@llm-tools/embedjs-utils": "0.1.0", "axios": "^1.7.7", "debug": "^4.3.7", "html-to-text": "^9.0.5", "langchain": "^0.3.2", - "@llm-tools/embedjs-utils": "0.0.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "md5": "^2.3.0" }, "devDependencies": { "@types/html-to-text": "^9.0.4" diff --git a/loaders/embedjs-loader-youtube/package.json b/loaders/embedjs-loader-youtube/package.json index b71277b2..8915915b 100644 --- a/loaders/embedjs-loader-youtube/package.json +++ b/loaders/embedjs-loader-youtube/package.json @@ -1,13 +1,13 @@ { "name": "@llm-tools/embedjs-loader-youtube", - "version": "0.0.1", + "version": "0.1.0", "dependencies": { - "md5": "^2.3.0", + "@llm-tools/embedjs-interfaces": "0.1.0", + "@llm-tools/embedjs-utils": "0.1.0", "debug": "^4.3.7", + "md5": "^2.3.0", "usetube": "^2.2.7", - "youtube-transcript": "^1.2.1", - "@llm-tools/embedjs-utils": "0.0.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "youtube-transcript": "^1.2.1" }, "devDependencies": { "@types/usetube": "^2.1.2" diff --git a/models/embedjs-anthropic/package.json b/models/embedjs-anthropic/package.json index 8cd3351f..6d7624c7 100644 --- a/models/embedjs-anthropic/package.json +++ b/models/embedjs-anthropic/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-anthropic", - "version": "0.0.1", + "version": "0.1.0", "description": "Enable usage of Anthropic models with embedjs", "dependencies": { - "debug": "^4.3.7", - "@langchain/core": "^0.3.6", "@langchain/anthropic": "^0.3.3", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@langchain/core": "^0.3.6", + "@llm-tools/embedjs-interfaces": "0.1.0", + "debug": "^4.3.7" }, "type": "module", "main": "./src/index.js", diff --git a/models/embedjs-cohere/package.json b/models/embedjs-cohere/package.json index c0958e23..658b4e8d 100644 --- a/models/embedjs-cohere/package.json +++ b/models/embedjs-cohere/package.json @@ -1,11 +1,11 @@ { "name": "@llm-tools/embedjs-cohere", - "version": "0.0.1", + "version": "0.1.0", "description": "Enable usage of Cohere models with embedjs", "dependencies": { - "cohere-ai": "^7.14.0", "@langchain/cohere": "^0.3.0", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "cohere-ai": "^7.14.0" }, "type": "module", "main": "./src/index.js", diff --git a/models/embedjs-huggingface/package.json b/models/embedjs-huggingface/package.json index b7fbd554..f0a42b33 100644 --- a/models/embedjs-huggingface/package.json +++ b/models/embedjs-huggingface/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-huggingface", - "version": "0.0.1", + "version": "0.1.0", "description": "Enable usage of HuggingFace models with embedjs", "dependencies": { - "debug": "^4.3.7", - "@langchain/community": "^0.3.4", "@huggingface/inference": "^2.8.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@langchain/community": "^0.3.4", + "@llm-tools/embedjs-interfaces": "0.1.0", + "debug": "^4.3.7" }, "type": "module", "main": "./src/index.js", diff --git a/models/embedjs-mistral/package.json b/models/embedjs-mistral/package.json index 2813e4e1..9a7ab691 100644 --- a/models/embedjs-mistral/package.json +++ b/models/embedjs-mistral/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-mistral", - "version": "0.0.1", + "version": "0.1.0", "description": "Enable usage of Mistral models with embedjs", "dependencies": { - "debug": "^4.3.7", "@langchain/core": "^0.3.6", "@langchain/mistralai": "^0.1.1", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "debug": "^4.3.7" }, "type": "module", "main": "./src/index.js", diff --git a/models/embedjs-ollama/package.json b/models/embedjs-ollama/package.json index 2ee08589..0250461c 100644 --- a/models/embedjs-ollama/package.json +++ b/models/embedjs-ollama/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-ollama", - "version": "0.0.1", + "version": "0.1.0", "description": "Enable usage of Ollama with embedjs", "dependencies": { - "debug": "^4.3.7", "@langchain/core": "^0.3.6", "@langchain/ollama": "^0.1.0", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "debug": "^4.3.7" }, "type": "module", "main": "./src/index.js", diff --git a/models/embedjs-openai/package.json b/models/embedjs-openai/package.json index b28f5f20..52300b50 100644 --- a/models/embedjs-openai/package.json +++ b/models/embedjs-openai/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-openai", - "version": "0.0.1", + "version": "0.1.0", "description": "Enable usage of OpenAI models with embedjs", "dependencies": { - "debug": "^4.3.7", "@langchain/core": "^0.3.6", "@langchain/openai": "^0.3.5", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "debug": "^4.3.7" }, "type": "module", "main": "./src/index.js", diff --git a/models/embedjs-vertexai/package.json b/models/embedjs-vertexai/package.json index 03b98e22..fa43a846 100644 --- a/models/embedjs-vertexai/package.json +++ b/models/embedjs-vertexai/package.json @@ -1,12 +1,12 @@ { "name": "@llm-tools/embedjs-vertexai", - "version": "0.0.1", + "version": "0.1.0", "description": "Enable usage of VertexAI models with embedjs", "dependencies": { - "debug": "^4.3.7", "@langchain/core": "^0.3.6", "@langchain/google-vertexai": "^0.1.0", - "@llm-tools/embedjs-interfaces": "0.0.1" + "@llm-tools/embedjs-interfaces": "0.1.0", + "debug": "^4.3.7" }, "type": "module", "main": "./src/index.js", diff --git a/package-lock.json b/package-lock.json index a8d76cc0..c5a1fac1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -814,156 +814,6 @@ } } }, - "models/embedjs-huggingface/node_modules/@smithy/eventstream-codec": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz", - "integrity": "sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.12.0", - "@smithy/util-hex-encoding": "^2.2.0", - "tslib": "^2.6.2" - } - }, - "models/embedjs-huggingface/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "models/embedjs-huggingface/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "models/embedjs-huggingface/node_modules/@smithy/signature-v4": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", - "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-uri-escape": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "models/embedjs-huggingface/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "models/embedjs-huggingface/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "models/embedjs-huggingface/node_modules/@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "models/embedjs-huggingface/node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "models/embedjs-huggingface/node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "models/embedjs-huggingface/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, "models/embedjs-huggingface/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -10622,7 +10472,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -14021,6 +13871,7 @@ "version": "5.6.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc",