diff --git a/.vscode/settings.json b/.vscode/settings.json index d3a0c1169495cca3846695377c90c838b83f5b65..9f6017380e7cfe41a6a08e612b92a9226bb26e7a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,6 @@ "editor.defaultFormatter": "esbenp.prettier-vscode", "[xml]": { "editor.defaultFormatter": "redhat.vscode-xml" - } -} + }, + "jest.rootPath": "./packages/core" +} \ No newline at end of file diff --git a/examples/clip.ts b/examples/clip.ts new file mode 100644 index 0000000000000000000000000000000000000000..075bd0f25d87a29c02df7f8be21697a14fdf8e80 --- /dev/null +++ b/examples/clip.ts @@ -0,0 +1,33 @@ +import { ClipEmbedding, SimilarityType, similarity } from "llamaindex"; + +async function main() { + const clip = new ClipEmbedding(); + + // Get text embeddings + const text1 = "a car"; + const textEmbedding1 = await clip.getTextEmbedding(text1); + const text2 = "a football match"; + const textEmbedding2 = await clip.getTextEmbedding(text2); + + // Get image embedding + const image = + "https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/football-match.jpg"; + const imageEmbedding = await clip.getImageEmbedding(image); + + // Calc similarity + const sim1 = similarity( + textEmbedding1, + imageEmbedding, + SimilarityType.DEFAULT, + ); + const sim2 = similarity( + textEmbedding2, + imageEmbedding, + SimilarityType.DEFAULT, + ); + + console.log(`Similarity between "${text1}" and the image is ${sim1}`); + console.log(`Similarity between "${text2}" and the image is ${sim2}`); +} + +main(); diff --git a/packages/core/package.json b/packages/core/package.json index ef0dfbf8a7b208bde0ccb2795814010c1b8c9d93..dcbec345b0590367458068e3f165e78337ea2e9b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -5,6 +5,7 @@ "dependencies": { "@anthropic-ai/sdk": "^0.9.0", "@notionhq/client": "^2.2.13", + "@xenova/transformers": "^2.8.0", "crypto-js": "^4.2.0", "js-tiktoken": "^1.0.7", "lodash": "^4.17.21", @@ -45,5 +46,12 @@ "test": "jest", "build": "tsup src/index.ts --format esm,cjs --dts", "dev": "tsup src/index.ts --format esm,cjs --dts --watch" + }, + "exports": { + ".": { + "require": "./dist/index.js", + "import": "./dist/index.mjs", + "types": "./dist/index.d.ts" + } } } \ No newline at end of file diff --git a/packages/core/src/ServiceContext.ts b/packages/core/src/ServiceContext.ts index efefd319b268af54f279b25dde3af2b1ce4980a7..da33be2094ac1102aefaa1f58c665df7eae677c8 100644 --- a/packages/core/src/ServiceContext.ts +++ b/packages/core/src/ServiceContext.ts @@ -1,7 +1,7 @@ -import { BaseEmbedding, OpenAIEmbedding } from "./Embedding"; import { NodeParser, SimpleNodeParser } from "./NodeParser"; import { PromptHelper } from "./PromptHelper"; import { CallbackManager } from "./callbacks/CallbackManager"; +import { BaseEmbedding, OpenAIEmbedding } from "./embeddings"; import { LLM, OpenAI } from "./llm/LLM"; /** diff --git a/packages/core/src/embeddings/ClipEmbedding.ts b/packages/core/src/embeddings/ClipEmbedding.ts new file mode 100644 index 0000000000000000000000000000000000000000..b75b4b879c502b9f255b719985f3c0392e49f027 --- /dev/null +++ b/packages/core/src/embeddings/ClipEmbedding.ts @@ -0,0 +1,78 @@ +import { MultiModalEmbedding } from "./MultiModalEmbedding"; +import { ImageType, readImage } from "./utils"; + +export enum ClipEmbeddingModelType { + XENOVA_CLIP_VIT_BASE_PATCH32 = "Xenova/clip-vit-base-patch32", + XENOVA_CLIP_VIT_BASE_PATCH16 = "Xenova/clip-vit-base-patch16", +} + +export class ClipEmbedding extends MultiModalEmbedding { + modelType: ClipEmbeddingModelType = + ClipEmbeddingModelType.XENOVA_CLIP_VIT_BASE_PATCH16; + + private tokenizer: any; + private processor: any; + private visionModel: any; + private textModel: any; + + async getTokenizer() { + if (!this.tokenizer) { + const { AutoTokenizer } = await import("@xenova/transformers"); + this.tokenizer = await AutoTokenizer.from_pretrained(this.modelType); + } + return this.tokenizer; + } + + async getProcessor() { + if (!this.processor) { + const { AutoProcessor } = await import("@xenova/transformers"); + this.processor = await AutoProcessor.from_pretrained(this.modelType); + } + return this.processor; + } + + async getVisionModel() { + if (!this.visionModel) { + const { CLIPVisionModelWithProjection } = await import( + "@xenova/transformers" + ); + this.visionModel = await CLIPVisionModelWithProjection.from_pretrained( + this.modelType, + ); + } + + return this.visionModel; + } + + async getTextModel() { + if (!this.textModel) { + const { CLIPTextModelWithProjection } = await import( + "@xenova/transformers" + ); + this.textModel = await CLIPTextModelWithProjection.from_pretrained( + this.modelType, + ); + } + + return this.textModel; + } + + async getImageEmbedding(image: ImageType): Promise<number[]> { + const loadedImage = await readImage(image); + const imageInputs = await (await this.getProcessor())(loadedImage); + const { image_embeds } = await (await this.getVisionModel())(imageInputs); + return image_embeds.data; + } + + async getTextEmbedding(text: string): Promise<number[]> { + const textInputs = await ( + await this.getTokenizer() + )([text], { padding: true, truncation: true }); + const { text_embeds } = await (await this.getTextModel())(textInputs); + return text_embeds.data; + } + + async getQueryEmbedding(query: string): Promise<number[]> { + return this.getTextEmbedding(query); + } +} diff --git a/packages/core/src/embeddings/MultiModalEmbedding.ts b/packages/core/src/embeddings/MultiModalEmbedding.ts new file mode 100644 index 0000000000000000000000000000000000000000..c86ba07211ba54b157b043252324270549889502 --- /dev/null +++ b/packages/core/src/embeddings/MultiModalEmbedding.ts @@ -0,0 +1,17 @@ +import { BaseEmbedding } from "./types"; +import { ImageType } from "./utils"; + +/* + * Base class for Multi Modal embeddings. + */ + +export abstract class MultiModalEmbedding extends BaseEmbedding { + abstract getImageEmbedding(images: ImageType): Promise<number[]>; + + async getImageEmbeddings(images: ImageType[]): Promise<number[][]> { + // Embed the input sequence of images asynchronously. + return Promise.all( + images.map((imgFilePath) => this.getImageEmbedding(imgFilePath)), + ); + } +} diff --git a/packages/core/src/embeddings/OpenAIEmbedding.ts b/packages/core/src/embeddings/OpenAIEmbedding.ts new file mode 100644 index 0000000000000000000000000000000000000000..106c6cbff294d49bf87d912676e3656339b1b4c8 --- /dev/null +++ b/packages/core/src/embeddings/OpenAIEmbedding.ts @@ -0,0 +1,92 @@ +import { ClientOptions as OpenAIClientOptions } from "openai"; +import { + AzureOpenAIConfig, + getAzureBaseUrl, + getAzureConfigFromEnv, + getAzureModel, + shouldUseAzure, +} from "../llm/azure"; +import { OpenAISession, getOpenAISession } from "../llm/openai"; +import { BaseEmbedding } from "./types"; + +export enum OpenAIEmbeddingModelType { + TEXT_EMBED_ADA_002 = "text-embedding-ada-002", +} + +export class OpenAIEmbedding extends BaseEmbedding { + model: OpenAIEmbeddingModelType; + + // OpenAI session params + apiKey?: string = undefined; + maxRetries: number; + timeout?: number; + additionalSessionOptions?: Omit< + Partial<OpenAIClientOptions>, + "apiKey" | "maxRetries" | "timeout" + >; + + session: OpenAISession; + + constructor(init?: Partial<OpenAIEmbedding> & { azure?: AzureOpenAIConfig }) { + super(); + + this.model = OpenAIEmbeddingModelType.TEXT_EMBED_ADA_002; + + this.maxRetries = init?.maxRetries ?? 10; + this.timeout = init?.timeout ?? 60 * 1000; // Default is 60 seconds + this.additionalSessionOptions = init?.additionalSessionOptions; + + if (init?.azure || shouldUseAzure()) { + const azureConfig = getAzureConfigFromEnv({ + ...init?.azure, + model: getAzureModel(this.model), + }); + + if (!azureConfig.apiKey) { + throw new Error( + "Azure API key is required for OpenAI Azure models. Please set the AZURE_OPENAI_KEY environment variable.", + ); + } + + this.apiKey = azureConfig.apiKey; + this.session = + init?.session ?? + getOpenAISession({ + azure: true, + apiKey: this.apiKey, + baseURL: getAzureBaseUrl(azureConfig), + maxRetries: this.maxRetries, + timeout: this.timeout, + defaultQuery: { "api-version": azureConfig.apiVersion }, + ...this.additionalSessionOptions, + }); + } else { + this.apiKey = init?.apiKey ?? undefined; + this.session = + init?.session ?? + getOpenAISession({ + apiKey: this.apiKey, + maxRetries: this.maxRetries, + timeout: this.timeout, + ...this.additionalSessionOptions, + }); + } + } + + private async getOpenAIEmbedding(input: string) { + const { data } = await this.session.openai.embeddings.create({ + model: this.model, + input, + }); + + return data[0].embedding; + } + + async getTextEmbedding(text: string): Promise<number[]> { + return this.getOpenAIEmbedding(text); + } + + async getQueryEmbedding(query: string): Promise<number[]> { + return this.getOpenAIEmbedding(query); + } +} diff --git a/packages/core/src/embeddings/index.ts b/packages/core/src/embeddings/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..1a6a4df04ef2225f44049e2819660afbc0e2b836 --- /dev/null +++ b/packages/core/src/embeddings/index.ts @@ -0,0 +1,5 @@ +export * from "./ClipEmbedding"; +export * from "./MultiModalEmbedding"; +export * from "./OpenAIEmbedding"; +export * from "./types"; +export * from "./utils"; diff --git a/packages/core/src/embeddings/types.ts b/packages/core/src/embeddings/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..e500f94522a4b729a47650f0d6c21099fc79d0e1 --- /dev/null +++ b/packages/core/src/embeddings/types.ts @@ -0,0 +1,24 @@ +import { similarity } from "./utils"; + +/** + * Similarity type + * Default is cosine similarity. Dot product and negative Euclidean distance are also supported. + */ +export enum SimilarityType { + DEFAULT = "cosine", + DOT_PRODUCT = "dot_product", + EUCLIDEAN = "euclidean", +} + +export abstract class BaseEmbedding { + similarity( + embedding1: number[], + embedding2: number[], + mode: SimilarityType = SimilarityType.DEFAULT, + ): number { + return similarity(embedding1, embedding2, mode); + } + + abstract getTextEmbedding(text: string): Promise<number[]>; + abstract getQueryEmbedding(query: string): Promise<number[]>; +} diff --git a/packages/core/src/Embedding.ts b/packages/core/src/embeddings/utils.ts similarity index 63% rename from packages/core/src/Embedding.ts rename to packages/core/src/embeddings/utils.ts index 5723f888cbeb1d746e80da3d99b6566a4c77d21b..cd192c3d4faa08a5b4f81c6a796de1e89233ca45 100644 --- a/packages/core/src/Embedding.ts +++ b/packages/core/src/embeddings/utils.ts @@ -1,33 +1,16 @@ -import { ClientOptions as OpenAIClientOptions } from "openai"; - -import { DEFAULT_SIMILARITY_TOP_K } from "./constants"; -import { - AzureOpenAIConfig, - getAzureBaseUrl, - getAzureConfigFromEnv, - getAzureModel, - shouldUseAzure, -} from "./llm/azure"; -import { OpenAISession, getOpenAISession } from "./llm/openai"; -import { VectorStoreQueryMode } from "./storage/vectorStore/types"; - -/** - * Similarity type - * Default is cosine similarity. Dot product and negative Euclidean distance are also supported. - */ -export enum SimilarityType { - DEFAULT = "cosine", - DOT_PRODUCT = "dot_product", - EUCLIDEAN = "euclidean", -} +import _ from "lodash"; +import { DEFAULT_SIMILARITY_TOP_K } from "../constants"; +import { VectorStoreQueryMode } from "../storage"; +import { SimilarityType } from "./types"; /** * The similarity between two embeddings. * @param embedding1 * @param embedding2 * @param mode - * @returns similartiy score with higher numbers meaning the two embeddings are more similar + * @returns similarity score with higher numbers meaning the two embeddings are more similar */ + export function similarity( embedding1: number[], embedding2: number[], @@ -42,7 +25,6 @@ export function similarity( // will probably cause some avoidable loss of floating point precision // ml-distance is worth watching although they currently also use the naive // formulas - function norm(x: number[]): number { let result = 0; for (let i = 0; i < x.length; i++) { @@ -201,98 +183,14 @@ export function getTopKMMREmbeddings( return [resultSimilarities, resultIds]; } - -export abstract class BaseEmbedding { - similarity( - embedding1: number[], - embedding2: number[], - mode: SimilarityType = SimilarityType.DEFAULT, - ): number { - return similarity(embedding1, embedding2, mode); - } - - abstract getTextEmbedding(text: string): Promise<number[]>; - abstract getQueryEmbedding(query: string): Promise<number[]>; -} - -enum OpenAIEmbeddingModelType { - TEXT_EMBED_ADA_002 = "text-embedding-ada-002", -} - -export class OpenAIEmbedding extends BaseEmbedding { - model: OpenAIEmbeddingModelType; - - // OpenAI session params - apiKey?: string = undefined; - maxRetries: number; - timeout?: number; - additionalSessionOptions?: Omit< - Partial<OpenAIClientOptions>, - "apiKey" | "maxRetries" | "timeout" - >; - - session: OpenAISession; - - constructor(init?: Partial<OpenAIEmbedding> & { azure?: AzureOpenAIConfig }) { - super(); - - this.model = OpenAIEmbeddingModelType.TEXT_EMBED_ADA_002; - - this.maxRetries = init?.maxRetries ?? 10; - this.timeout = init?.timeout ?? 60 * 1000; // Default is 60 seconds - this.additionalSessionOptions = init?.additionalSessionOptions; - - if (init?.azure || shouldUseAzure()) { - const azureConfig = getAzureConfigFromEnv({ - ...init?.azure, - model: getAzureModel(this.model), - }); - - if (!azureConfig.apiKey) { - throw new Error( - "Azure API key is required for OpenAI Azure models. Please set the AZURE_OPENAI_KEY environment variable.", - ); - } - - this.apiKey = azureConfig.apiKey; - this.session = - init?.session ?? - getOpenAISession({ - azure: true, - apiKey: this.apiKey, - baseURL: getAzureBaseUrl(azureConfig), - maxRetries: this.maxRetries, - timeout: this.timeout, - defaultQuery: { "api-version": azureConfig.apiVersion }, - ...this.additionalSessionOptions, - }); - } else { - this.apiKey = init?.apiKey ?? undefined; - this.session = - init?.session ?? - getOpenAISession({ - apiKey: this.apiKey, - maxRetries: this.maxRetries, - timeout: this.timeout, - ...this.additionalSessionOptions, - }); - } - } - - private async getOpenAIEmbedding(input: string) { - const { data } = await this.session.openai.embeddings.create({ - model: this.model, - input, - }); - - return data[0].embedding; - } - - async getTextEmbedding(text: string): Promise<number[]> { - return this.getOpenAIEmbedding(text); - } - - async getQueryEmbedding(query: string): Promise<number[]> { - return this.getOpenAIEmbedding(query); +export async function readImage(input: ImageType) { + const { RawImage } = await import("@xenova/transformers"); + if (input instanceof Blob) { + return await RawImage.fromBlob(input); + } else if (_.isString(input) || input instanceof URL) { + return await RawImage.fromURL(input); + } else { + throw new Error(`Unsupported input type: ${typeof input}`); } } +export type ImageType = string | Blob | URL; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 20ab462977955bdfa52df8e2fa5b45df730943fa..dde8fff26fef4de5c78d7adb567f956952259183 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,6 +1,5 @@ export * from "./ChatEngine"; export * from "./ChatHistory"; -export * from "./Embedding"; export * from "./GlobalsHelper"; export * from "./Node"; export * from "./NodeParser"; @@ -17,6 +16,7 @@ export * from "./TextSplitter"; export * from "./Tool"; export * from "./callbacks/CallbackManager"; export * from "./constants"; +export * from "./embeddings"; export * from "./indices"; export * from "./llm/LLM"; export * from "./readers/CSVReader"; diff --git a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts index 1bccf12ff0579f1985d2ecd873b6e037b4497c80..929ebe2c24b3cf9b7cc074902280d89785651b0d 100644 --- a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts +++ b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts @@ -1,11 +1,11 @@ import _ from "lodash"; import * as path from "path"; +import { BaseNode } from "../../Node"; import { getTopKEmbeddings, getTopKEmbeddingsLearner, getTopKMMREmbeddings, -} from "../../Embedding"; -import { BaseNode } from "../../Node"; +} from "../../embeddings"; import { GenericFileSystem, exists } from "../FileSystem"; import { DEFAULT_FS, DEFAULT_PERSIST_DIR } from "../constants"; import { diff --git a/packages/core/src/tests/CallbackManager.test.ts b/packages/core/src/tests/CallbackManager.test.ts index c3d9a98d4ac1f0f49ec64a638acea0941c9aae6f..9374c50b606c595b9f78093aa6cd88ff9c3842f6 100644 --- a/packages/core/src/tests/CallbackManager.test.ts +++ b/packages/core/src/tests/CallbackManager.test.ts @@ -1,4 +1,3 @@ -import { OpenAIEmbedding } from "../Embedding"; import { Document } from "../Node"; import { ResponseSynthesizer, @@ -10,6 +9,7 @@ import { RetrievalCallbackResponse, StreamCallbackResponse, } from "../callbacks/CallbackManager"; +import { OpenAIEmbedding } from "../embeddings"; import { SummaryIndex } from "../indices/summary"; import { VectorStoreIndex } from "../indices/vectorStore/VectorStoreIndex"; import { OpenAI } from "../llm/LLM"; diff --git a/packages/core/src/tests/Embedding.test.ts b/packages/core/src/tests/Embedding.test.ts index 492a48be1a39877b28af06736f41c0e8a2266128..adc70810ffa59be54c1f36de3a52399be2a7f393 100644 --- a/packages/core/src/tests/Embedding.test.ts +++ b/packages/core/src/tests/Embedding.test.ts @@ -1,4 +1,4 @@ -import { SimilarityType, similarity } from "../Embedding"; +import { SimilarityType, similarity } from "../embeddings"; describe("similarity", () => { test("throws error on mismatched lengths", () => { diff --git a/packages/core/src/tests/utility/mockOpenAI.ts b/packages/core/src/tests/utility/mockOpenAI.ts index 04d6cdd40d50d13e377e14a09c65023b602eace0..5f8a0ad4c49d5eb4bdf70ab6f0e959ad2bd8563e 100644 --- a/packages/core/src/tests/utility/mockOpenAI.ts +++ b/packages/core/src/tests/utility/mockOpenAI.ts @@ -1,6 +1,6 @@ -import { OpenAIEmbedding } from "../../Embedding"; import { globalsHelper } from "../../GlobalsHelper"; import { CallbackManager, Event } from "../../callbacks/CallbackManager"; +import { OpenAIEmbedding } from "../../embeddings"; import { ChatMessage, OpenAI } from "../../llm/LLM"; export function mockLlmGeneration({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1dc2addf63b6e5246c38ba05aff6146ef899dbca..d556d651f08a2c9274eec1c8a46c374b436f6f84 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,6 +49,22 @@ importers: specifier: ^1.10.16 version: 1.10.16 + apps/clip: + dependencies: + dotenv: + specifier: ^16.3.1 + version: 16.3.1 + llamaindex: + specifier: workspace:* + version: link:../../packages/core + devDependencies: + '@types/node': + specifier: ^18 + version: 18.18.8 + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@18.18.8)(typescript@5.2.2) + apps/docs: dependencies: '@docusaurus/core': @@ -153,6 +169,9 @@ importers: '@notionhq/client': specifier: ^2.2.13 version: 2.2.13 + '@xenova/transformers': + specifier: ^2.8.0 + version: 2.8.0 crypto-js: specifier: ^4.2.0 version: 4.2.0 @@ -3831,6 +3850,49 @@ packages: resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} dev: false + /@protobufjs/aspromise@1.1.2: + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + dev: false + + /@protobufjs/base64@1.1.2: + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + dev: false + + /@protobufjs/codegen@2.0.4: + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + dev: false + + /@protobufjs/eventemitter@1.1.0: + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + dev: false + + /@protobufjs/fetch@1.1.0: + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: false + + /@protobufjs/float@1.0.2: + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + dev: false + + /@protobufjs/inquire@1.1.0: + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + dev: false + + /@protobufjs/path@1.1.2: + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + dev: false + + /@protobufjs/pool@1.1.0: + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + dev: false + + /@protobufjs/utf8@1.1.0: + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + dev: false + /@rushstack/eslint-patch@1.2.0: resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} dev: false @@ -4360,6 +4422,10 @@ packages: /@types/lodash@4.14.200: resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==} + /@types/long@4.0.2: + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + dev: false + /@types/mdast@3.0.13: resolution: {integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==} dependencies: @@ -4764,6 +4830,15 @@ packages: '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 + /@xenova/transformers@2.8.0: + resolution: {integrity: sha512-+6/cC/iJd7A+B+C3OPuiIw3dhisdUqBRD/f8CAoo2wYfHofF9zn46pH/dTLAOPoI2px7L9+bvJoXSKO18TBj2Q==} + dependencies: + onnxruntime-web: 1.14.0 + sharp: 0.32.6 + optionalDependencies: + onnxruntime-node: 1.14.0 + dev: false + /@xmldom/xmldom@0.8.10: resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} @@ -4812,15 +4887,9 @@ packages: dependencies: acorn: 8.11.2 - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - /acorn-walk@8.3.0: resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} engines: {node: '>=0.4.0'} - dev: false /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} @@ -5210,6 +5279,10 @@ packages: deep-equal: 2.2.1 dev: false + /b4a@1.6.4: + resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} + dev: false + /babel-jest@29.7.0(@babel/core@7.23.3): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5408,7 +5481,6 @@ packages: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true /bluebird@3.4.7: resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} @@ -5630,7 +5702,6 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true /builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} @@ -5910,6 +5981,10 @@ packages: optionalDependencies: fsevents: 2.3.3 + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: false + /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -6081,6 +6156,21 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false + /colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} dev: false @@ -6718,6 +6808,13 @@ packages: mimic-response: 2.1.0 dev: true + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: false + /dedent@1.5.1: resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} peerDependencies: @@ -6917,6 +7014,11 @@ packages: engines: {node: '>=8'} dev: true + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + dev: false + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -7863,6 +7965,11 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + dev: false + /expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7940,6 +8047,10 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + /fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + dev: false + /fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -8117,6 +8228,10 @@ packages: keyv: 4.5.4 rimraf: 3.0.2 + /flatbuffers@1.12.0: + resolution: {integrity: sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==} + dev: false + /flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} @@ -8214,6 +8329,10 @@ packages: engines: {node: '>= 0.6'} dev: false + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: false + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -8403,6 +8522,10 @@ packages: - supports-color dev: true + /github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + dev: false + /github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} dev: false @@ -8615,6 +8738,10 @@ packages: strip-bom-string: 1.0.0 dev: false + /guid-typescript@1.0.9: + resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} + dev: false + /gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -9027,7 +9154,6 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} @@ -9222,6 +9348,10 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + /is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: @@ -10430,6 +10560,10 @@ packages: wrap-ansi: 8.1.0 dev: true + /long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + dev: false + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -10728,6 +10862,11 @@ packages: engines: {node: '>=8'} dev: true + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -10804,6 +10943,10 @@ packages: engines: {node: '>= 8.0.0'} dev: true + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: false + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -10896,6 +11039,10 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: false + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -10968,6 +11115,17 @@ packages: tslib: 2.6.2 dev: false + /node-abi@3.51.0: + resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: false + + /node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + dev: false + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -11219,6 +11377,36 @@ packages: dependencies: mimic-fn: 4.0.0 + /onnx-proto@4.0.4: + resolution: {integrity: sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==} + dependencies: + protobufjs: 6.11.4 + dev: false + + /onnxruntime-common@1.14.0: + resolution: {integrity: sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==} + dev: false + + /onnxruntime-node@1.14.0: + resolution: {integrity: sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==} + os: [win32, darwin, linux] + requiresBuild: true + dependencies: + onnxruntime-common: 1.14.0 + dev: false + optional: true + + /onnxruntime-web@1.14.0: + resolution: {integrity: sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==} + dependencies: + flatbuffers: 1.12.0 + guid-typescript: 1.0.9 + long: 4.0.0 + onnx-proto: 4.0.4 + onnxruntime-common: 1.14.0 + platform: 1.3.6 + dev: false + /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -11663,6 +11851,10 @@ packages: dependencies: find-up: 3.0.0 + /platform@1.3.6: + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + dev: false + /portkey-ai@0.1.16: resolution: {integrity: sha512-EY4FRp6PZSD75Q1o1qc08DfPNTG9FnkUPN3Z1/lEvaq9iFpSO5UekcagUZaKSVhao311qjBjns+kF0rS9ht7iA==} dependencies: @@ -12104,6 +12296,25 @@ packages: source-map-js: 1.0.2 dev: false + /prebuild-install@7.1.1: + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + detect-libc: 2.0.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.51.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + /preferred-pm@3.1.2: resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} engines: {node: '>=10'} @@ -12229,6 +12440,26 @@ packages: xtend: 4.0.2 dev: false + /protobufjs@6.11.4: + resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} + hasBin: true + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + '@types/node': 18.18.8 + long: 4.0.0 + dev: false + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -12322,6 +12553,10 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + /queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + dev: false + /queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} dependencies: @@ -13308,6 +13543,21 @@ packages: /shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + /sharp@0.32.6: + resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} + engines: {node: '>=14.15.0'} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.2 + node-addon-api: 6.1.0 + prebuild-install: 7.1.1 + semver: 7.5.4 + simple-get: 4.0.1 + tar-fs: 3.0.4 + tunnel-agent: 0.6.0 + dev: false + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -13368,6 +13618,24 @@ packages: engines: {node: '>=14'} dev: true + /simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: false + + /simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + + /simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: false + /sirv@2.0.3: resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} engines: {node: '>= 10'} @@ -13629,6 +13897,13 @@ packages: engines: {node: '>=10.0.0'} dev: true + /streamx@2.15.5: + resolution: {integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==} + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + dev: false + /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -13942,6 +14217,42 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + + /tar-fs@3.0.4: + resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} + dependencies: + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 3.1.6 + dev: false + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /tar-stream@3.1.6: + resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} + dependencies: + b4a: 1.6.4 + fast-fifo: 1.3.2 + streamx: 2.15.5 + dev: false + /tar@6.1.15: resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} engines: {node: '>=10'} @@ -14232,8 +14543,8 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 18.18.7 - acorn: 8.10.0 - acorn-walk: 8.2.0 + acorn: 8.11.2 + acorn-walk: 8.3.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -14263,8 +14574,8 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 18.18.8 - acorn: 8.10.0 - acorn-walk: 8.2.0 + acorn: 8.11.2 + acorn-walk: 8.3.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -14357,6 +14668,12 @@ packages: yargs: 17.7.2 dev: true + /tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: false + /turbo-darwin-64@1.10.16: resolution: {integrity: sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg==} cpu: [x64]