From 02840d0e5fc292be3aa0bddbf7b8309d3063d30b Mon Sep 17 00:00:00 2001 From: Vedran Krizic Date: Fri, 10 Oct 2025 22:37:52 +0200 Subject: [PATCH 1/4] refactors extractor Added TS support --- .gitignore | 1 + core/dist/index.d.ts | 2 - core/dist/index.js | 174 ------------ core/dist/openAI.d.ts | 2 - core/dist/openAI.js | 75 ----- core/dist/providers/google.d.ts | 5 - core/dist/providers/google.js | 71 ----- core/dist/providers/index.d.ts | 5 - core/dist/providers/index.js | 22 -- core/dist/providers/ollama.d.ts | 5 - core/dist/providers/ollama.js | 67 ----- core/dist/providers/openAI.d.ts | 5 - core/dist/providers/openAI.js | 67 ----- core/dist/providers/utils/completion.d.ts | 4 - core/dist/providers/utils/completion.js | 2 - core/dist/types.d.ts | 59 ---- core/dist/types.js | 23 -- core/dist/utils.d.ts | 27 -- core/dist/utils.js | 258 ------------------ core/package.json | 1 + core/src/index.ts | 3 + core/tsconfig.json | 1 + extractor/package.json | 15 +- ...enerateSchema.js => autogenerateSchema.ts} | 22 +- ...anSchemaFields.js => cleanSchemaFields.ts} | 6 +- .../generation-schemas/{base.js => base.ts} | 4 +- .../{secondary.js => secondary.ts} | 2 +- extractor/src/{converter.js => converter.ts} | 18 +- extractor/src/extractors/google.js | 49 ---- extractor/src/extractors/google.ts | 53 ++++ .../src/extractors/{index.js => index.ts} | 14 +- .../src/extractors/{ollama.js => ollama.ts} | 10 +- .../src/extractors/{openAI.js => openAI.ts} | 10 +- extractor/src/{index.js => index.ts} | 5 +- extractor/src/{prompts.js => prompts.ts} | 6 +- .../src/services/{extract.js => extract.ts} | 40 ++- .../services/{formatter.js => formatter.ts} | 26 +- .../services/{templates.js => templates.ts} | 13 +- .../{convertToText.js => convertToText.ts} | 3 +- ...rtToZodSchema.js => convertToZodSchema.ts} | 26 +- .../{fileValidator.js => fileValidator.ts} | 8 +- ...enerateMarkdown.js => generateMarkdown.ts} | 8 +- .../{pdfValidator.js => pdfValidator.ts} | 6 +- ...{schemaValidator.js => schemaValidator.ts} | 26 +- extractor/tsconfig.json | 19 ++ package-lock.json | 179 +++++++++--- package.json | 9 +- 47 files changed, 407 insertions(+), 1049 deletions(-) delete mode 100644 core/dist/index.d.ts delete mode 100644 core/dist/index.js delete mode 100644 core/dist/openAI.d.ts delete mode 100644 core/dist/openAI.js delete mode 100644 core/dist/providers/google.d.ts delete mode 100644 core/dist/providers/google.js delete mode 100644 core/dist/providers/index.d.ts delete mode 100644 core/dist/providers/index.js delete mode 100644 core/dist/providers/ollama.d.ts delete mode 100644 core/dist/providers/ollama.js delete mode 100644 core/dist/providers/openAI.d.ts delete mode 100644 core/dist/providers/openAI.js delete mode 100644 core/dist/providers/utils/completion.d.ts delete mode 100644 core/dist/providers/utils/completion.js delete mode 100644 core/dist/types.d.ts delete mode 100644 core/dist/types.js delete mode 100644 core/dist/utils.d.ts delete mode 100644 core/dist/utils.js rename extractor/src/autoschema/{autogenerateSchema.js => autogenerateSchema.ts} (82%) rename extractor/src/autoschema/{cleanSchemaFields.js => cleanSchemaFields.ts} (61%) rename extractor/src/autoschema/generation-schemas/{base.js => base.ts} (86%) rename extractor/src/autoschema/generation-schemas/{secondary.js => secondary.ts} (98%) rename extractor/src/{converter.js => converter.ts} (59%) delete mode 100644 extractor/src/extractors/google.js create mode 100644 extractor/src/extractors/google.ts rename extractor/src/extractors/{index.js => index.ts} (67%) rename extractor/src/extractors/{ollama.js => ollama.ts} (75%) rename extractor/src/extractors/{openAI.js => openAI.ts} (75%) rename extractor/src/{index.js => index.ts} (59%) rename extractor/src/{prompts.js => prompts.ts} (89%) rename extractor/src/services/{extract.js => extract.ts} (66%) rename extractor/src/services/{formatter.js => formatter.ts} (59%) rename extractor/src/services/{templates.js => templates.ts} (71%) rename extractor/src/utils/{convertToText.js => convertToText.ts} (93%) rename extractor/src/utils/{convertToZodSchema.js => convertToZodSchema.ts} (70%) rename extractor/src/utils/{fileValidator.js => fileValidator.ts} (81%) rename extractor/src/utils/{generateMarkdown.js => generateMarkdown.ts} (66%) rename extractor/src/utils/{pdfValidator.js => pdfValidator.ts} (77%) rename extractor/src/utils/{schemaValidator.js => schemaValidator.ts} (75%) create mode 100644 extractor/tsconfig.json diff --git a/.gitignore b/.gitignore index 3c3629e..2a04543 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +**/dist/ diff --git a/core/dist/index.d.ts b/core/dist/index.d.ts deleted file mode 100644 index 4db31a0..0000000 --- a/core/dist/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { DocumindArgs, DocumindOutput } from "./types"; -export declare const documind: ({ cleanup, concurrency, filePath, llmParams, maintainFormat, model, outputDir, pagesToConvertAsImages, tempDir, }: DocumindArgs) => Promise; diff --git a/core/dist/index.js b/core/dist/index.js deleted file mode 100644 index c0523f7..0000000 --- a/core/dist/index.js +++ /dev/null @@ -1,174 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.documind = void 0; -const utils_1 = require("./utils"); -const fs_extra_1 = __importDefault(require("fs-extra")); -const os_1 = __importDefault(require("os")); -const path_1 = __importDefault(require("path")); -const p_limit_1 = __importDefault(require("p-limit")); -const types_1 = require("./types"); -const providers_1 = require("./providers"); -const documind = async ({ cleanup = true, concurrency = 10, filePath, llmParams = {}, maintainFormat = false, model, //= ModelOptions.gpt_4o_mini, -outputDir, pagesToConvertAsImages = -1, tempDir = os_1.default.tmpdir(), }) => { - let inputTokenCount = 0; - let outputTokenCount = 0; - let priorPage = ""; - const aggregatedMarkdown = []; - const startTime = new Date(); - // Basic checks - if (!filePath || !filePath.length) { - throw new Error("Missing file path"); - } - const defaultModel = model ?? types_1.OpenAIModels.GPT_4O_MINI; - const validatedParams = (0, utils_1.validateLLMParams)(llmParams); - const providerInstance = providers_1.getModel.getProviderForModel(defaultModel); - // Ensure temp directory exists + create temp folder - const rand = Math.floor(1000 + Math.random() * 9000).toString(); - const tempDirectory = path_1.default.join(tempDir || os_1.default.tmpdir(), `documind-file-${rand}`); - await fs_extra_1.default.ensureDir(tempDirectory); - // Download the PDF. Get file name. - const { extension, localPath } = await (0, utils_1.downloadFile)({ - filePath, - tempDir: tempDirectory, - }); - if (!localPath) - throw "Failed to save file to local drive"; - // Sort the `pagesToConvertAsImages` array to make sure we use the right index - // for `formattedPages` as `pdf2pic` always returns images in order - if (Array.isArray(pagesToConvertAsImages)) { - pagesToConvertAsImages.sort((a, b) => a - b); - } - // Convert file to PDF if necessary - if (extension !== ".png") { - let pdfPath; - if (extension === ".pdf") { - pdfPath = localPath; - } - else { - pdfPath = await (0, utils_1.convertFileToPdf)({ - extension, - localPath, - tempDir: tempDirectory, - }); - } - // Convert the file to a series of images - await (0, utils_1.convertPdfToImages)({ - localPath: pdfPath, - pagesToConvertAsImages, - tempDir: tempDirectory, - }); - } - const endOfPath = localPath.split("/")[localPath.split("/").length - 1]; - const rawFileName = endOfPath.split(".")[0]; - const fileName = rawFileName - .replace(/[^\w\s]/g, "") - .replace(/\s+/g, "_") - .toLowerCase() - .substring(0, 255); // Truncate file name to 255 characters to prevent ENAMETOOLONG errors - // Get list of converted images - const files = await fs_extra_1.default.readdir(tempDirectory); - const images = files.filter((file) => file.endsWith(".png")); - if (maintainFormat) { - // Use synchronous processing - for (const image of images) { - const imagePath = path_1.default.join(tempDirectory, image); - try { - const { content, inputTokens, outputTokens } = await providerInstance.getCompletion({ - imagePath, - llmParams: validatedParams, - maintainFormat, - model: defaultModel, - priorPage, - }); - const formattedMarkdown = (0, utils_1.formatMarkdown)(content); - inputTokenCount += inputTokens; - outputTokenCount += outputTokens; - // Update prior page to result from last processing step - priorPage = formattedMarkdown; - // Add all markdown results to array - aggregatedMarkdown.push(formattedMarkdown); - } - catch (error) { - console.error(`Failed to process image ${image}:`, error); - throw error; - } - } - } - else { - // Process in parallel with a limit on concurrent pages - const processPage = async (image) => { - const imagePath = path_1.default.join(tempDirectory, image); - try { - const { content, inputTokens, outputTokens } = await providerInstance.getCompletion({ - imagePath, - llmParams: validatedParams, - maintainFormat, - model: defaultModel, - priorPage, - }); - const formattedMarkdown = (0, utils_1.formatMarkdown)(content); - inputTokenCount += inputTokens; - outputTokenCount += outputTokens; - // Update prior page to result from last processing step - priorPage = formattedMarkdown; - // Add all markdown results to array - return formattedMarkdown; - } - catch (error) { - console.error(`Failed to process image ${image}:`, error); - throw error; - } - }; - // Function to process pages with concurrency limit - const processPagesInBatches = async (images, limit) => { - const results = []; - const promises = images.map((image, index) => limit(() => processPage(image).then((result) => { - results[index] = result; - }))); - await Promise.all(promises); - return results; - }; - const limit = (0, p_limit_1.default)(concurrency); - const results = await processPagesInBatches(images, limit); - const filteredResults = results.filter(utils_1.isString); - aggregatedMarkdown.push(...filteredResults); - } - // Write the aggregated markdown to a file - if (outputDir) { - const resultFilePath = path_1.default.join(outputDir, `${fileName}.md`); - await fs_extra_1.default.writeFile(resultFilePath, aggregatedMarkdown.join("\n\n")); - } - // Cleanup the downloaded PDF file - if (cleanup) - await fs_extra_1.default.remove(tempDirectory); - // Format JSON response - const endTime = new Date(); - const completionTime = endTime.getTime() - startTime.getTime(); - const formattedPages = aggregatedMarkdown.map((el, i) => { - let pageNumber; - // If we convert all pages, just use the array index - if (pagesToConvertAsImages === -1) { - pageNumber = i + 1; - } - // Else if we convert specific pages, use the page number from the parameter - else if (Array.isArray(pagesToConvertAsImages)) { - pageNumber = pagesToConvertAsImages[i]; - } - // Else, the parameter is a number and use it for the page number - else { - pageNumber = pagesToConvertAsImages; - } - return { content: el, page: pageNumber, contentLength: el.length }; - }); - return { - completionTime, - fileName, - inputTokens: inputTokenCount, - outputTokens: outputTokenCount, - pages: formattedPages, - }; -}; -exports.documind = documind; diff --git a/core/dist/openAI.d.ts b/core/dist/openAI.d.ts deleted file mode 100644 index 2e390ed..0000000 --- a/core/dist/openAI.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { CompletionArgs, CompletionResponse } from "./types"; -export declare const getCompletion: ({ apiKey, imagePath, llmParams, maintainFormat, model, priorPage, }: CompletionArgs) => Promise; diff --git a/core/dist/openAI.js b/core/dist/openAI.js deleted file mode 100644 index 7c22118..0000000 --- a/core/dist/openAI.js +++ /dev/null @@ -1,75 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getCompletion = void 0; -const utils_1 = require("./utils"); -const axios_1 = __importDefault(require("axios")); -const getCompletion = async ({ apiKey, imagePath, llmParams, maintainFormat, model, priorPage, }) => { - const validModelsForCustomBaseUrl = [ - "llava", - "llama3.2-vision", - ]; - const validModelsForOpenAi = ["gpt-4o", "gpt-4o-mini"]; - const baseUrl = process.env.BASE_URL || "https://api.openai.com/v1"; - if (baseUrl !== "https://api.openai.com/v1") { - if (!validModelsForCustomBaseUrl.includes(model)) { - throw new Error(`Invalid model "${model}" for custom base URL. Valid options are: ${validModelsForCustomBaseUrl.join(", ")}.`); - } - } - else { - if (!validModelsForOpenAi.includes(model)) { - throw new Error(`Invalid model "${model}" for OpenAI. Valid options are: ${validModelsForOpenAi.join(", ")}.`); - } - } - const systemPrompt = ` - Convert the following image/document to markdown. - Return only the markdown with no explanation text. Do not include deliminators like '''markdown. - You must include all information on the page. Do not exclude headers, footers, or subtext. - `; - // Default system message. - const messages = [{ role: "system", content: systemPrompt }]; - // If content has already been generated, add it to context. - // This helps maintain the same format across pages - if (maintainFormat && priorPage && priorPage.length) { - messages.push({ - role: "system", - content: `Markdown must maintain consistent formatting with the following page: \n\n """${priorPage}"""`, - }); - } - // Add Image to request - const base64Image = await (0, utils_1.encodeImageToBase64)(imagePath); - messages.push({ - role: "user", - content: [ - { - type: "image_url", - image_url: { url: `data:image/png;base64,${base64Image}` }, - }, - ], - }); - try { - const response = await axios_1.default.post(`${baseUrl}/chat/completions`, { - messages, - model, - ...(0, utils_1.convertKeysToSnakeCase)(llmParams ?? null), - }, { - headers: { - Authorization: `Bearer ${apiKey}`, - "Content-Type": "application/json", - }, - }); - const data = response.data; - return { - content: data.choices[0].message.content, - inputTokens: data.usage.prompt_tokens, - outputTokens: data.usage.completion_tokens, - }; - } - catch (err) { - console.error("Error in OpenAI completion", err); - throw err; - } -}; -exports.getCompletion = getCompletion; diff --git a/core/dist/providers/google.d.ts b/core/dist/providers/google.d.ts deleted file mode 100644 index da5acb0..0000000 --- a/core/dist/providers/google.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Completion } from "./utils/completion"; -import { CompletionArgs, CompletionResponse } from "../types"; -export declare class Google implements Completion { - getCompletion(args: CompletionArgs): Promise; -} diff --git a/core/dist/providers/google.js b/core/dist/providers/google.js deleted file mode 100644 index bf0e9d5..0000000 --- a/core/dist/providers/google.js +++ /dev/null @@ -1,71 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Google = void 0; -const axios_1 = __importDefault(require("axios")); -const types_1 = require("../types"); -const utils_1 = require("../utils"); -class Google { - async getCompletion(args) { - const { imagePath, llmParams, maintainFormat, model, priorPage, } = args; - if (!process.env.GEMINI_API_KEY) { - throw new Error("Missing GEMINI_API_KEY in environment variables."); - } - const apiKey = process.env.GEMINI_API_KEY; - const validModels = Object.values(types_1.GoogleModels); - if (!validModels.includes(model)) { - throw new Error(`Model "${model}" is not a google model.`); - } - const systemPrompt = ` - Convert the following image/document to markdown. - Return only the markdown with no explanation text. Do not include deliminators like '''markdown. - You must include all information on the page. Do not exclude headers, footers, or subtext. - `; - const messages = [{ role: "system", content: systemPrompt }]; - if (maintainFormat && priorPage) { - messages.push({ - role: "system", - content: `Please ensure markdown formatting remains consistent with the prior page:\n\n"""${priorPage}"""`, - }); - } - const base64Image = await (0, utils_1.encodeImageToBase64)(imagePath); - messages.push({ - role: "user", - content: [ - { - "type": "text", //Using Gemini via openai requires text parameter - "text": "" - }, - { - type: "image_url", - image_url: { url: `data:image/png;base64,${base64Image}` }, - }, - ], - }); - try { - const response = await axios_1.default.post("https://generativelanguage.googleapis.com/v1beta/openai/chat/completions", { - messages, - model, - // ...convertKeysToSnakeCase(llmParams ?? null), - }, { - headers: { - Authorization: `Bearer ${apiKey}`, - "Content-Type": "application/json", - }, - }); - const data = response.data; - return { - content: data.choices[0].message.content, - inputTokens: data.usage?.prompt_tokens ?? 0, - outputTokens: data.usage?.completion_tokens ?? 0, - }; - } - catch (err) { - console.error("Google provider error:", err); - throw err; - } - } -} -exports.Google = Google; diff --git a/core/dist/providers/index.d.ts b/core/dist/providers/index.d.ts deleted file mode 100644 index 9503a8c..0000000 --- a/core/dist/providers/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Completion } from "./utils/completion"; -import { ModelOptions } from "../types"; -export declare class getModel { - static getProviderForModel(model: ModelOptions): Completion; -} diff --git a/core/dist/providers/index.js b/core/dist/providers/index.js deleted file mode 100644 index de6439d..0000000 --- a/core/dist/providers/index.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getModel = void 0; -const openAI_1 = require("./openAI"); -const ollama_1 = require("./ollama"); -const google_1 = require("./google"); -const types_1 = require("../types"); -class getModel { - static getProviderForModel(model) { - if (Object.values(types_1.OpenAIModels).includes(model)) { - return new openAI_1.OpenAI(); - } - if (Object.values(types_1.GoogleModels).includes(model)) { - return new google_1.Google(); - } - if (Object.values(types_1.LocalModels).includes(model)) { - return new ollama_1.Ollama(); - } - throw new Error(`No provider found for model "${model}"`); - } -} -exports.getModel = getModel; diff --git a/core/dist/providers/ollama.d.ts b/core/dist/providers/ollama.d.ts deleted file mode 100644 index 3079696..0000000 --- a/core/dist/providers/ollama.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Completion } from "./utils/completion"; -import { CompletionArgs, CompletionResponse } from "../types"; -export declare class Ollama implements Completion { - getCompletion(args: CompletionArgs): Promise; -} diff --git a/core/dist/providers/ollama.js b/core/dist/providers/ollama.js deleted file mode 100644 index d80af13..0000000 --- a/core/dist/providers/ollama.js +++ /dev/null @@ -1,67 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Ollama = void 0; -const axios_1 = __importDefault(require("axios")); -const types_1 = require("../types"); -const utils_1 = require("../utils"); -class Ollama { - async getCompletion(args) { - const { imagePath, llmParams, maintainFormat, model, priorPage, } = args; - const baseUrl = process.env.BASE_URL; - if (!baseUrl) { - throw new Error("Missing BASE_URL in environment variables."); - } - const validModels = Object.values(types_1.LocalModels); - if (!validModels.includes(model)) { - throw new Error(`Model "${model}" is not a local model.`); - } - const systemPrompt = ` - Convert the following image/document to markdown. - Return only the markdown with no explanation text. Do not include deliminators like '''markdown. - You must include all information on the page. Do not exclude headers, footers, or subtext. - `; - const messages = [{ role: "system", content: systemPrompt }]; - if (maintainFormat && priorPage) { - messages.push({ - role: "system", - content: `Please ensure markdown formatting remains consistent with the prior page:\n\n"""${priorPage}"""`, - }); - } - const base64Image = await (0, utils_1.encodeImageToBase64)(imagePath); - messages.push({ - role: "user", - content: [ - { - type: "image_url", - image_url: { url: `data:image/png;base64,${base64Image}` }, - }, - ], - }); - try { - const response = await axios_1.default.post(`${baseUrl}/chat/completions`, { - messages, - model, - ...(0, utils_1.convertKeysToSnakeCase)(llmParams ?? null), - }, { - headers: { - // Authorization: "ollama", - "Content-Type": "application/json", - }, - }); - const data = response.data; - return { - content: data.choices[0].message.content, - inputTokens: data.usage?.prompt_tokens ?? 0, - outputTokens: data.usage?.completion_tokens ?? 0, - }; - } - catch (err) { - console.error("Local provider error:", err); - throw err; - } - } -} -exports.Ollama = Ollama; diff --git a/core/dist/providers/openAI.d.ts b/core/dist/providers/openAI.d.ts deleted file mode 100644 index 45e2f52..0000000 --- a/core/dist/providers/openAI.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Completion } from "./utils/completion"; -import { CompletionArgs, CompletionResponse } from "../types"; -export declare class OpenAI implements Completion { - getCompletion(args: CompletionArgs): Promise; -} diff --git a/core/dist/providers/openAI.js b/core/dist/providers/openAI.js deleted file mode 100644 index 8e1e649..0000000 --- a/core/dist/providers/openAI.js +++ /dev/null @@ -1,67 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OpenAI = void 0; -const axios_1 = __importDefault(require("axios")); -const types_1 = require("../types"); -const utils_1 = require("../utils"); -class OpenAI { - async getCompletion(args) { - const { imagePath, llmParams, maintainFormat, model, priorPage, } = args; - if (!process.env.OPENAI_API_KEY) { - throw new Error("Missing OPENAI_API_KEY in environment variables."); - } - const apiKey = process.env.OPENAI_API_KEY; - const validModels = Object.values(types_1.OpenAIModels); - if (!validModels.includes(model)) { - throw new Error(`Model "${model}" is not an OpenAI model.`); - } - const systemPrompt = ` - Convert the following image/document to markdown. - Return only the markdown with no explanation text. Do not include deliminators like '''markdown. - You must include all information on the page. Do not exclude headers, footers, or subtext. - `; - const messages = [{ role: "system", content: systemPrompt }]; - if (maintainFormat && priorPage) { - messages.push({ - role: "system", - content: `Please ensure markdown formatting remains consistent with the prior page:\n\n"""${priorPage}"""`, - }); - } - const base64Image = await (0, utils_1.encodeImageToBase64)(imagePath); - messages.push({ - role: "user", - content: [ - { - type: "image_url", - image_url: { url: `data:image/png;base64,${base64Image}` }, - }, - ], - }); - try { - const response = await axios_1.default.post("https://api.openai.com/v1/chat/completions", { - messages, - model, - ...(0, utils_1.convertKeysToSnakeCase)(llmParams ?? null), - }, { - headers: { - Authorization: `Bearer ${apiKey}`, - "Content-Type": "application/json", - }, - }); - const data = response.data; - return { - content: data.choices[0].message.content, - inputTokens: data.usage?.prompt_tokens ?? 0, - outputTokens: data.usage?.completion_tokens ?? 0, - }; - } - catch (err) { - console.error("OpenAI error:", err); - throw err; - } - } -} -exports.OpenAI = OpenAI; diff --git a/core/dist/providers/utils/completion.d.ts b/core/dist/providers/utils/completion.d.ts deleted file mode 100644 index 7753fb5..0000000 --- a/core/dist/providers/utils/completion.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { CompletionArgs, CompletionResponse } from "../../types"; -export interface Completion { - getCompletion(args: CompletionArgs): Promise; -} diff --git a/core/dist/providers/utils/completion.js b/core/dist/providers/utils/completion.js deleted file mode 100644 index c8ad2e5..0000000 --- a/core/dist/providers/utils/completion.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/core/dist/types.d.ts b/core/dist/types.d.ts deleted file mode 100644 index 3f16a1c..0000000 --- a/core/dist/types.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -export declare enum OpenAIModels { - GPT_4O = "gpt-4o", - GPT_4O_MINI = "gpt-4o-mini", - GPT_4_1 = "gpt-4.1", - GPT_4_1_MINI = "gpt-4.1-mini" -} -export declare enum LocalModels { - LLAMA3_2_VISION = "llama3.2-vision" -} -export declare enum GoogleModels { - GEMINI_2_FLASH = "gemini-2.0-flash-001", - GEMINI_2_FLASH_LITE = "gemini-2.0-flash-lite-preview-02-05", - GEMINI_1_5_FLASH = "gemini-1.5-flash", - GEMINI_1_5_FLASH_8B = "gemini-1.5-flash-8b", - GEMINI_1_5_PRO = "gemini-1.5-pro" -} -export type ModelOptions = OpenAIModels | GoogleModels | LocalModels; -export interface DocumindArgs { - cleanup?: boolean; - concurrency?: number; - filePath: string; - llmParams?: LLMParams; - maintainFormat?: boolean; - model?: ModelOptions; - outputDir?: string; - pagesToConvertAsImages?: number | number[]; - tempDir?: string; -} -export interface Page { - content: string; - contentLength: number; - page: number; -} -export interface DocumindOutput { - completionTime: number; - fileName: string; - inputTokens: number; - outputTokens: number; - pages: Page[]; -} -export interface CompletionResponse { - content: string; - inputTokens: number; - outputTokens: number; -} -export interface CompletionArgs { - imagePath: string; - llmParams?: LLMParams; - maintainFormat: boolean; - model: ModelOptions; - priorPage: string; -} -export interface LLMParams { - frequencyPenalty?: number; - maxTokens?: number; - presencePenalty?: number; - temperature?: number; - topP?: number; -} diff --git a/core/dist/types.js b/core/dist/types.js deleted file mode 100644 index 2828a4b..0000000 --- a/core/dist/types.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GoogleModels = exports.LocalModels = exports.OpenAIModels = void 0; -var OpenAIModels; -(function (OpenAIModels) { - OpenAIModels["GPT_4O"] = "gpt-4o"; - OpenAIModels["GPT_4O_MINI"] = "gpt-4o-mini"; - OpenAIModels["GPT_4_1"] = "gpt-4.1"; - OpenAIModels["GPT_4_1_MINI"] = "gpt-4.1-mini"; -})(OpenAIModels || (exports.OpenAIModels = OpenAIModels = {})); -var LocalModels; -(function (LocalModels) { - //LLAVA = "llava", - LocalModels["LLAMA3_2_VISION"] = "llama3.2-vision"; -})(LocalModels || (exports.LocalModels = LocalModels = {})); -var GoogleModels; -(function (GoogleModels) { - GoogleModels["GEMINI_2_FLASH"] = "gemini-2.0-flash-001"; - GoogleModels["GEMINI_2_FLASH_LITE"] = "gemini-2.0-flash-lite-preview-02-05"; - GoogleModels["GEMINI_1_5_FLASH"] = "gemini-1.5-flash"; - GoogleModels["GEMINI_1_5_FLASH_8B"] = "gemini-1.5-flash-8b"; - GoogleModels["GEMINI_1_5_PRO"] = "gemini-1.5-pro"; -})(GoogleModels || (exports.GoogleModels = GoogleModels = {})); diff --git a/core/dist/utils.d.ts b/core/dist/utils.d.ts deleted file mode 100644 index aeab40c..0000000 --- a/core/dist/utils.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { LLMParams } from "./types"; -export declare const validateLLMParams: (params: Partial) => LLMParams; -export declare const encodeImageToBase64: (imagePath: string) => Promise; -export declare const formatMarkdown: (text: string) => string; -export declare const isString: (value: string | null) => value is string; -export declare const isValidUrl: (string: string) => boolean; -export declare const downloadFile: ({ filePath, tempDir, }: { - filePath: string; - tempDir: string; -}) => Promise<{ - extension: string; - localPath: string; -}>; -export declare const getTextFromImage: (buffer: Buffer) => Promise<{ - confidence: number; -}>; -export declare const convertPdfToImages: ({ localPath, pagesToConvertAsImages, tempDir, }: { - localPath: string; - pagesToConvertAsImages: number | number[]; - tempDir: string; -}) => Promise; -export declare const convertFileToPdf: ({ extension, localPath, tempDir, }: { - extension: string; - localPath: string; - tempDir: string; -}) => Promise; -export declare const convertKeysToSnakeCase: (obj: Record | null) => Record; diff --git a/core/dist/utils.js b/core/dist/utils.js deleted file mode 100644 index 0885a39..0000000 --- a/core/dist/utils.js +++ /dev/null @@ -1,258 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.convertKeysToSnakeCase = exports.convertFileToPdf = exports.convertPdfToImages = exports.getTextFromImage = exports.downloadFile = exports.isValidUrl = exports.isString = exports.formatMarkdown = exports.encodeImageToBase64 = exports.validateLLMParams = void 0; -const libreoffice_convert_1 = require("libreoffice-convert"); -const pdf2pic_1 = require("pdf2pic"); -const promises_1 = require("stream/promises"); -const util_1 = require("util"); -const Tesseract = __importStar(require("tesseract.js")); -const axios_1 = __importDefault(require("axios")); -const fs_extra_1 = __importDefault(require("fs-extra")); -const mime_types_1 = __importDefault(require("mime-types")); -const path_1 = __importDefault(require("path")); -const sharp_1 = __importDefault(require("sharp")); -const convertAsync = (0, util_1.promisify)(libreoffice_convert_1.convert); -const defaultLLMParams = { - frequencyPenalty: 0, // OpenAI defaults to 0 - maxTokens: 4000, - presencePenalty: 0, // OpenAI defaults to 0 - temperature: 0, - topP: 1, // OpenAI defaults to 1 -}; -const validateLLMParams = (params) => { - const validKeys = Object.keys(defaultLLMParams); - for (const [key, value] of Object.entries(params)) { - if (!validKeys.includes(key)) { - throw new Error(`Invalid LLM parameter: ${key}`); - } - if (typeof value !== "number") { - throw new Error(`Value for '${key}' must be a number`); - } - } - return { ...defaultLLMParams, ...params }; -}; -exports.validateLLMParams = validateLLMParams; -const encodeImageToBase64 = async (imagePath) => { - const imageBuffer = await fs_extra_1.default.readFile(imagePath); - return imageBuffer.toString("base64"); -}; -exports.encodeImageToBase64 = encodeImageToBase64; -// Strip out the ```markdown wrapper -const formatMarkdown = (text) => { - let formattedMarkdown = text?.trim(); - let loopCount = 0; - const maxLoops = 3; - const startsWithMarkdown = formattedMarkdown.startsWith("```markdown"); - while (startsWithMarkdown && loopCount < maxLoops) { - const endsWithClosing = formattedMarkdown.endsWith("```"); - if (startsWithMarkdown && endsWithClosing) { - const outermostBlockRegex = /^```markdown\n([\s\S]*?)\n```$/; - const match = outermostBlockRegex.exec(formattedMarkdown); - if (match) { - formattedMarkdown = match[1].trim(); - loopCount++; - } - else { - break; - } - } - else { - break; - } - } - return formattedMarkdown; -}; -exports.formatMarkdown = formatMarkdown; -const isString = (value) => { - return value !== null; -}; -exports.isString = isString; -const isValidUrl = (string) => { - let url; - try { - url = new URL(string); - } - catch (_) { - return false; - } - return url.protocol === "http:" || url.protocol === "https:"; -}; -exports.isValidUrl = isValidUrl; -// Save file to local tmp directory -const downloadFile = async ({ filePath, tempDir, }) => { - // Shorten the file name by removing URL parameters - const baseFileName = path_1.default.basename(filePath.split("?")[0]); - const localPath = path_1.default.join(tempDir, baseFileName); - let mimetype; - // Check if filePath is a URL - if ((0, exports.isValidUrl)(filePath)) { - const writer = fs_extra_1.default.createWriteStream(localPath); - const response = await (0, axios_1.default)({ - url: filePath, - method: "GET", - responseType: "stream", - }); - if (response.status !== 200) { - throw new Error(`HTTP error! Status: ${response.status}`); - } - mimetype = response.headers?.["content-type"]; - await (0, promises_1.pipeline)(response.data, writer); - } - else { - // If filePath is a local file, copy it to the temp directory - await fs_extra_1.default.copyFile(filePath, localPath); - } - if (!mimetype) { - mimetype = mime_types_1.default.lookup(localPath); - } - let extension = mime_types_1.default.extension(mimetype) || ""; - if (!extension) { - if (mimetype === "binary/octet-stream") { - extension = ".bin"; - } - else { - throw new Error("File extension missing"); - } - } - if (!extension.startsWith(".")) { - extension = `.${extension}`; - } - return { extension, localPath }; -}; -exports.downloadFile = downloadFile; -// Extract text confidence from image buffer using Tesseract -const getTextFromImage = async (buffer) => { - try { - // Get image and metadata - const image = (0, sharp_1.default)(buffer); - const metadata = await image.metadata(); - // Crop to a 150px wide column in the center of the document. - // This section produced the highest confidence/speed tradeoffs. - const cropWidth = 150; - const cropHeight = metadata.height || 0; - const left = Math.max(0, Math.floor((metadata.width - cropWidth) / 2)); - const top = 0; - // Extract the cropped image - const croppedBuffer = await image - .extract({ left, top, width: cropWidth, height: cropHeight }) - .toBuffer(); - // Pass the croppedBuffer to Tesseract.recognize - // @TODO: How can we generalize this to non eng languages? - const { data: { confidence }, } = await Tesseract.recognize(croppedBuffer, "eng"); - return { confidence }; - } - catch (error) { - console.error("Error during OCR:", error); - return { confidence: 0 }; - } -}; -exports.getTextFromImage = getTextFromImage; -// Correct image orientation based on OCR confidence -// Run Tesseract on 4 different orientations of the image and compare the output -const correctImageOrientation = async (buffer) => { - const image = (0, sharp_1.default)(buffer); - const rotations = [0, 90, 180, 270]; - const results = await Promise.all(rotations.map(async (rotation) => { - const rotatedImageBuffer = await image - .clone() - .rotate(rotation) - .toBuffer(); - const { confidence } = await (0, exports.getTextFromImage)(rotatedImageBuffer); - return { rotation, confidence }; - })); - // Find the rotation with the best confidence score - const bestResult = results.reduce((best, current) => current.confidence > best.confidence ? current : best); - if (bestResult.rotation !== 0) { - console.log(`Reorienting image ${bestResult.rotation} degrees (Confidence: ${bestResult.confidence}%).`); - } - // Rotate the image to the best orientation - const correctedImageBuffer = await image - .rotate(bestResult.rotation) - .toBuffer(); - return correctedImageBuffer; -}; -// Convert each page to a png, correct orientation, and save that image to tmp -const convertPdfToImages = async ({ localPath, pagesToConvertAsImages, tempDir, }) => { - const options = { - density: 300, - format: "png", - height: 2048, - preserveAspectRatio: true, - saveFilename: path_1.default.basename(localPath, path_1.default.extname(localPath)), - savePath: tempDir, - }; - const storeAsImage = (0, pdf2pic_1.fromPath)(localPath, options); - try { - const convertResults = await storeAsImage.bulk(pagesToConvertAsImages, { - responseType: "buffer", - }); - await Promise.all(convertResults.map(async (result) => { - if (!result || !result.buffer) { - throw new Error("Could not convert page to image buffer"); - } - if (!result.page) - throw new Error("Could not identify page data"); - const paddedPageNumber = result.page.toString().padStart(5, "0"); - // Correct the image orientation - const correctedBuffer = await correctImageOrientation(result.buffer); - const imagePath = path_1.default.join(tempDir, `${options.saveFilename}_page_${paddedPageNumber}.png`); - await fs_extra_1.default.writeFile(imagePath, correctedBuffer); - })); - return convertResults; - } - catch (err) { - console.error("Error during PDF conversion:", err); - throw err; - } -}; -exports.convertPdfToImages = convertPdfToImages; -// Convert each page (from other formats like docx) to a png and save that image to tmp -const convertFileToPdf = async ({ extension, localPath, tempDir, }) => { - const inputBuffer = await fs_extra_1.default.readFile(localPath); - const outputFilename = path_1.default.basename(localPath, extension) + ".pdf"; - const outputPath = path_1.default.join(tempDir, outputFilename); - try { - const pdfBuffer = await convertAsync(inputBuffer, ".pdf", undefined); - await fs_extra_1.default.writeFile(outputPath, pdfBuffer); - return outputPath; - } - catch (err) { - console.error(`Error converting ${extension} to .pdf:`, err); - throw err; - } -}; -exports.convertFileToPdf = convertFileToPdf; -const camelToSnakeCase = (str) => str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`); -const convertKeysToSnakeCase = (obj) => { - if (typeof obj !== "object" || obj === null) { - return obj ?? {}; - } - return Object.fromEntries(Object.entries(obj).map(([key, value]) => [camelToSnakeCase(key), value])); -}; -exports.convertKeysToSnakeCase = convertKeysToSnakeCase; diff --git a/core/package.json b/core/package.json index 5efc90a..2ab887e 100644 --- a/core/package.json +++ b/core/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "description": "Core package for document conversion", "main": "dist/index.js", + "types": "dist/index.d.ts", "type": "commonjs", "files": [ "dist" diff --git a/core/src/index.ts b/core/src/index.ts index fd87076..ccc2c0f 100644 --- a/core/src/index.ts +++ b/core/src/index.ts @@ -211,3 +211,6 @@ export const documind = async ({ pages: formattedPages, }; }; + +export type { ModelOptions, DocumindArgs, DocumindOutput } from "./types"; +export { OpenAIModels, GoogleModels, LocalModels } from "./types"; diff --git a/core/tsconfig.json b/core/tsconfig.json index b962015..7138f70 100644 --- a/core/tsconfig.json +++ b/core/tsconfig.json @@ -3,6 +3,7 @@ "target": "ES2020", "module": "CommonJS", "declaration": true, + "declarationMap": true, "outDir": "./dist", "strict": true, "esModuleInterop": true, diff --git a/extractor/package.json b/extractor/package.json index 7953dd3..828462e 100644 --- a/extractor/package.json +++ b/extractor/package.json @@ -3,9 +3,15 @@ "version": "1.0.0", "description": "Document extraction and processing package.", "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], "scripts": { - "start": "node src/index.js", - "dev": "nodemon src/index.js" + "build": "tsc", + "start": "node dist/index.js", + "dev": "tsc --watch" }, "dependencies": { "@ai-sdk/google": "^1.1.14", @@ -21,6 +27,9 @@ "zod-to-json-schema": "^3.24.2" }, "devDependencies": { - "nodemon": "^3.1.7" + "@types/node": "^20.14.11", + "@types/uuid": "^11.0.0", + "nodemon": "^3.1.7", + "typescript": "^5.6.3" } } diff --git a/extractor/src/autoschema/autogenerateSchema.js b/extractor/src/autoschema/autogenerateSchema.ts similarity index 82% rename from extractor/src/autoschema/autogenerateSchema.js rename to extractor/src/autoschema/autogenerateSchema.ts index 46cfd0f..8d2844e 100644 --- a/extractor/src/autoschema/autogenerateSchema.js +++ b/extractor/src/autoschema/autogenerateSchema.ts @@ -4,9 +4,16 @@ import { AUTO_SCHEMA_PROMPT, INSTRUCTIONS_SCHEMA_PROMPT } from "../prompts.js"; import { baseSchema } from './generation-schemas/base.js'; import { secondarySchema } from './generation-schemas/secondary.js'; import { cleanSchemaFields } from "./cleanSchemaFields.js"; +import { SchemaField } from '../utils/convertToZodSchema.js'; import { z } from 'zod'; -export async function autogenerateSchema(markdown, model, autoSchema) { +type AutoSchemaOption = boolean | { instructions: string }; + +export async function autogenerateSchema( + markdown: string, + model: string, + autoSchema: AutoSchemaOption +): Promise { if (autoSchema === true) { return await blanketSchema(markdown, model); } @@ -23,7 +30,6 @@ export async function autogenerateSchema(markdown, model, autoSchema) { if (typeof autoSchema.instructions !== "string" || !autoSchema.instructions.trim()) { throw new Error("Instructions can't be empty"); } - return await instructionBasedSchema( markdown, @@ -35,7 +41,7 @@ export async function autogenerateSchema(markdown, model, autoSchema) { return await blanketSchema(markdown, model); } -async function blanketSchema(markdown, model) { +async function blanketSchema(markdown: string, model: string): Promise { const extraction = getExtractor(model); const schemaToUse = extraction === googleExtractor ? secondarySchema : baseSchema; @@ -53,7 +59,11 @@ async function blanketSchema(markdown, model) { return cleanSchemaFields(result.fields); } -async function instructionBasedSchema(markdown, model, instructions) { +async function instructionBasedSchema( + markdown: string, + model: string, + instructions: string +): Promise { const instructionsZod = z.object({ fields: z.array(z.string()), @@ -61,7 +71,7 @@ async function instructionBasedSchema(markdown, model, instructions) { const instructionPrompt = ` Extract the name of the fields the user wants to extract. - ` + `; const extraction = getExtractor(model); @@ -94,4 +104,4 @@ async function instructionBasedSchema(markdown, model, instructions) { return cleanSchemaFields(result.fields); } -export const autoschema = autogenerateSchema; \ No newline at end of file +export const autoschema = autogenerateSchema; diff --git a/extractor/src/autoschema/cleanSchemaFields.js b/extractor/src/autoschema/cleanSchemaFields.ts similarity index 61% rename from extractor/src/autoschema/cleanSchemaFields.js rename to extractor/src/autoschema/cleanSchemaFields.ts index 84e754c..a936a0d 100644 --- a/extractor/src/autoschema/cleanSchemaFields.js +++ b/extractor/src/autoschema/cleanSchemaFields.ts @@ -1,4 +1,6 @@ -export function cleanSchemaFields(fields) { +import { SchemaField } from '../utils/convertToZodSchema.js'; + +export function cleanSchemaFields(fields: SchemaField[]): SchemaField[] { return fields.map((f) => { if (f.children && f.children.length === 0) { delete f.children; @@ -7,4 +9,4 @@ export function cleanSchemaFields(fields) { } return f; }); - } \ No newline at end of file + } diff --git a/extractor/src/autoschema/generation-schemas/base.js b/extractor/src/autoschema/generation-schemas/base.ts similarity index 86% rename from extractor/src/autoschema/generation-schemas/base.js rename to extractor/src/autoschema/generation-schemas/base.ts index 80e144b..c367c60 100644 --- a/extractor/src/autoschema/generation-schemas/base.js +++ b/extractor/src/autoschema/generation-schemas/base.ts @@ -1,7 +1,7 @@ // Used for non-google models that don't have schema limitations import { z } from "zod"; -const SchemaField = z.lazy(() => +const SchemaField: z.ZodType = z.lazy(() => z.object({ name: z.string(), type: z.enum(["string", "number", "array", "object"]), @@ -12,4 +12,4 @@ const SchemaField = z.lazy(() => export const baseSchema = z.object({ fields: z.array(SchemaField), -}); \ No newline at end of file +}); diff --git a/extractor/src/autoschema/generation-schemas/secondary.js b/extractor/src/autoschema/generation-schemas/secondary.ts similarity index 98% rename from extractor/src/autoschema/generation-schemas/secondary.js rename to extractor/src/autoschema/generation-schemas/secondary.ts index 4a99c86..5d1baab 100644 --- a/extractor/src/autoschema/generation-schemas/secondary.js +++ b/extractor/src/autoschema/generation-schemas/secondary.ts @@ -13,4 +13,4 @@ const SchemaField = BaseSchemaField.extend({ export const secondarySchema = z.object({ fields: z.array(SchemaField), -}); \ No newline at end of file +}); diff --git a/extractor/src/converter.js b/extractor/src/converter.ts similarity index 59% rename from extractor/src/converter.js rename to extractor/src/converter.ts index 62df582..c3afb7d 100644 --- a/extractor/src/converter.js +++ b/extractor/src/converter.ts @@ -1,11 +1,20 @@ -import { documind } from 'core'; -import { generateMarkdownDocument } from './utils/generateMarkdown.js'; +import { documind, ModelOptions } from 'core'; +import { generateMarkdownDocument } from './utils/generateMarkdown.js'; -export const convertFile = async (filePath, model) => { +interface ConvertFileResult { + markdown: string; + totalPages: number; + fileName: string; +} + +export const convertFile = async ( + filePath: string, + model: string +): Promise => { try { const result = await documind({ filePath, - model, + model: model as ModelOptions, }); const { pages, fileName } = result; @@ -17,5 +26,6 @@ export const convertFile = async (filePath, model) => { return { markdown, totalPages, fileName }; } catch (error) { console.error('Error running documind core:', error); + throw error; } }; diff --git a/extractor/src/extractors/google.js b/extractor/src/extractors/google.js deleted file mode 100644 index 777fae1..0000000 --- a/extractor/src/extractors/google.js +++ /dev/null @@ -1,49 +0,0 @@ -import { GoogleGenerativeAI } from "@google/generative-ai"; -import { zodToJsonSchema } from "zod-to-json-schema"; - -const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); - -export const googleExtractor = async ({ markdown, zodSchema, prompt, model }) => { - if (!process.env.GEMINI_API_KEY) { - throw new Error("Missing GEMINI_API_KEY"); - } - -const googleModel = model - -// Convert Zod schema to JSON schema -let jsonSchema = zodToJsonSchema(zodSchema); - -// Remove additionalProperties and $schema keys -const removeKeys = (obj) => { - if (Array.isArray(obj)) { - return obj.map(removeKeys); - } else if (typeof obj === "object" && obj !== null) { - return Object.fromEntries( - Object.entries(obj) - .filter(([key]) => key !== "additionalProperties" && key !== "$schema") - .map(([key, value]) => [key, removeKeys(value)]) - ); - } - return obj; -}; - -jsonSchema = removeKeys(jsonSchema); - -const modelToUse = genAI.getGenerativeModel({ - model: googleModel, - systemInstruction: prompt, - generationConfig: { - responseMimeType: "application/json", - responseSchema: jsonSchema, - }, - }); - -const result = await modelToUse.generateContent( - markdown, - ); - -//console.log(result.response.text()); -const event = JSON.parse(result.response.text()) -return event; -} - diff --git a/extractor/src/extractors/google.ts b/extractor/src/extractors/google.ts new file mode 100644 index 0000000..c6648c1 --- /dev/null +++ b/extractor/src/extractors/google.ts @@ -0,0 +1,53 @@ +import { GoogleGenerativeAI } from "@google/generative-ai"; +import { zodToJsonSchema } from "zod-to-json-schema"; +import { ZodObject, ZodRawShape } from "zod"; + +interface ExtractorParams { + markdown: string; + zodSchema: ZodObject; + prompt: string; + model: string; +} + +export const googleExtractor = async ({ markdown, zodSchema, prompt, model }: ExtractorParams): Promise => { + if (!process.env.GEMINI_API_KEY) { + throw new Error("Missing GEMINI_API_KEY"); + } + + const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); + const googleModel = model; + + // Convert Zod schema to JSON schema + let jsonSchema = zodToJsonSchema(zodSchema); + + // Remove additionalProperties and $schema keys + const removeKeys = (obj: any): any => { + if (Array.isArray(obj)) { + return obj.map(removeKeys); + } else if (typeof obj === "object" && obj !== null) { + return Object.fromEntries( + Object.entries(obj) + .filter(([key]) => key !== "additionalProperties" && key !== "$schema") + .map(([key, value]) => [key, removeKeys(value)]) + ); + } + return obj; + }; + + jsonSchema = removeKeys(jsonSchema); + + const modelToUse = genAI.getGenerativeModel({ + model: googleModel, + systemInstruction: prompt, + generationConfig: { + responseMimeType: "application/json", + responseSchema: jsonSchema as any, + }, + }); + + const result = await modelToUse.generateContent(markdown); + + //console.log(result.response.text()); + const event = JSON.parse(result.response.text()); + return event; +} diff --git a/extractor/src/extractors/index.js b/extractor/src/extractors/index.ts similarity index 67% rename from extractor/src/extractors/index.js rename to extractor/src/extractors/index.ts index 485ad2a..9eef97d 100644 --- a/extractor/src/extractors/index.js +++ b/extractor/src/extractors/index.ts @@ -1,6 +1,7 @@ import { ollamaExtractor } from "./ollama.js"; import { openAIExtractor } from "./openAI.js"; import { googleExtractor } from "./google.js"; +import { ZodObject, ZodRawShape } from "zod"; export const OpenAIModels = ["gpt-4o", "gpt-4o-mini", "gpt-4.1", "gpt-4.1-mini"]; export const LocalModels = ["llama3.2-vision"]; @@ -9,10 +10,19 @@ export const GoogleModels = [ "gemini-2.0-flash-lite-preview-02-05", "gemini-1.5-flash", "gemini-1.5-flash-8b", - "gemini-1.5-pro" + "gemini-1.5-pro" ]; -export function getExtractor(model) { +export interface ExtractorParams { + markdown: string; + zodSchema: ZodObject; + prompt: string; + model: string; +} + +export type ExtractorFunction = (params: ExtractorParams) => Promise; + +export function getExtractor(model: string): ExtractorFunction { if (OpenAIModels.includes(model)) { return openAIExtractor; } diff --git a/extractor/src/extractors/ollama.js b/extractor/src/extractors/ollama.ts similarity index 75% rename from extractor/src/extractors/ollama.js rename to extractor/src/extractors/ollama.ts index a4fedc7..320bc20 100644 --- a/extractor/src/extractors/ollama.js +++ b/extractor/src/extractors/ollama.ts @@ -1,7 +1,15 @@ import OpenAI from "openai"; import { zodResponseFormat } from "openai/helpers/zod"; +import { ZodObject, ZodRawShape } from "zod"; -export const ollamaExtractor = async ({ markdown, zodSchema, prompt, model }) => { +interface ExtractorParams { + markdown: string; + zodSchema: ZodObject; + prompt: string; + model: string; +} + +export const ollamaExtractor = async ({ markdown, zodSchema, prompt, model }: ExtractorParams): Promise => { if (!process.env.BASE_URL) { throw new Error("Missing BASE_URL"); } diff --git a/extractor/src/extractors/openAI.js b/extractor/src/extractors/openAI.ts similarity index 75% rename from extractor/src/extractors/openAI.js rename to extractor/src/extractors/openAI.ts index 62577db..bac7ffb 100644 --- a/extractor/src/extractors/openAI.js +++ b/extractor/src/extractors/openAI.ts @@ -1,7 +1,15 @@ import OpenAI from "openai"; import { zodResponseFormat } from "openai/helpers/zod"; +import { z, ZodObject, ZodRawShape } from "zod"; -export const openAIExtractor = async ({ markdown, zodSchema, prompt, model }) => { +interface ExtractorParams { + markdown: string; + zodSchema: ZodObject; + prompt: string; + model: string; +} + +export const openAIExtractor = async ({ markdown, zodSchema, prompt, model }: ExtractorParams): Promise => { if (!process.env.OPENAI_API_KEY) { throw new Error("Missing OPENAI_API_KEY"); } diff --git a/extractor/src/index.js b/extractor/src/index.ts similarity index 59% rename from extractor/src/index.js rename to extractor/src/index.ts index 8c19a2d..8bbbdcd 100644 --- a/extractor/src/index.js +++ b/extractor/src/index.ts @@ -4,4 +4,7 @@ export { templates } from './services/templates.js'; export { formatter } from './services/formatter.js'; export { convertToZodSchema } from './utils/convertToZodSchema.js'; -export { getExtractor } from './extractors/index.js'; \ No newline at end of file +export { getExtractor } from './extractors/index.js'; + +export type { SchemaField } from './utils/convertToZodSchema.js'; +export type { ExtractOptions, ExtractResult } from './services/extract.js'; diff --git a/extractor/src/prompts.js b/extractor/src/prompts.ts similarity index 89% rename from extractor/src/prompts.js rename to extractor/src/prompts.ts index 7537a3f..2fd00f2 100644 --- a/extractor/src/prompts.js +++ b/extractor/src/prompts.ts @@ -6,16 +6,16 @@ You are an expert in structured data extraction. Your task is to extract informa - **Do not use substitutes such as "unknown," "missing," or any other placeholder for missing or unknown data. The value **must** always be explicitly null. `; -export const AUTO_SCHEMA_PROMPT = (markdown) => ` +export const AUTO_SCHEMA_PROMPT = (markdown: string): string => ` Read the following markdown content and generate a schema of useful structured data that can be extracted from it. Follow these rules strictly: - The \`children\` field **must only be present if the \`type\` is \`object\` or \`array\`. It should never exist for other types. - \`description\` fields should be concise, no longer than one sentence. """${markdown}""" `; -export const INSTRUCTIONS_SCHEMA_PROMPT = (markdown, data) => ` +export const INSTRUCTIONS_SCHEMA_PROMPT = (markdown: string, data: string[]): string => ` Read the following markdown content and generate a schema for the structured data I require: """${data}""". Use only the fields listed, and follow these rules strictly: - The \`children\` field **must only be present if the \`type\` is \`object\` or \`array\`. It should never exist for other types. - \`description\` fields should be concise, no longer than one sentence. """${markdown}""" -`; \ No newline at end of file +`; diff --git a/extractor/src/services/extract.js b/extractor/src/services/extract.ts similarity index 66% rename from extractor/src/services/extract.js rename to extractor/src/services/extract.ts index add8284..b73b1d7 100644 --- a/extractor/src/services/extract.js +++ b/extractor/src/services/extract.ts @@ -1,23 +1,34 @@ import { isValidFile } from '../utils/fileValidator.js'; import { validateSchema } from '../utils/schemaValidator.js'; import { getTemplate } from './templates.js'; -import { convertToZodSchema } from '../utils/convertToZodSchema.js'; +import { convertToZodSchema, SchemaField } from '../utils/convertToZodSchema.js'; import { autogenerateSchema } from "../autoschema/autogenerateSchema.js"; import { convertFile } from '../converter.js'; import { BASE_EXTRACTION_PROMPT } from "../prompts.js"; import { getExtractor } from '../extractors/index.js'; +export interface ExtractOptions { + file: string; + schema?: SchemaField[]; + template?: string; + model?: string; + autoSchema?: boolean | { instructions?: string }; +} + +export interface ExtractResult { + success: boolean; + pages: number; + data: any; + fileName: string; + markdown: string; +} + /** * Extracts data from a document based on a provided schema. - * @param {object} options - Options for the extraction process. - * @param {string} options.file - The file path to the document. - * @param {object} options.schema - The schema definition for data extraction. - * @param {string} [options.template] - Name of a pre-defined template. - * @param {string} [options.model] - The llm model to use if a base url is set. - * @param {boolean | object} [options.autoSchema] - Option to auto-generate the schema. - * @returns {Promise} - The result of the extraction, including pages, extracted data, and file name. + * @param options - Options for the extraction process. + * @returns - The result of the extraction, including pages, extracted data, and file name. */ -export async function extract({ file, schema, template, model, autoSchema }) { +export async function extract({ file, schema, template, model, autoSchema }: ExtractOptions): Promise { try { const defaultModel = model || "gpt-4o-mini"; @@ -30,7 +41,7 @@ export async function extract({ file, schema, template, model, autoSchema }) { throw new Error("Invalid file type."); } - let finalSchema = null; + let finalSchema: SchemaField[] | null = null; if (template) { finalSchema = getTemplate(template); } else if (schema) { @@ -46,12 +57,17 @@ export async function extract({ file, schema, template, model, autoSchema }) { const { markdown, totalPages, fileName } = await convertFile(file, defaultModel); if (autoSchema) { - finalSchema = await autogenerateSchema(markdown, defaultModel, autoSchema); + const autoSchemaOption = autoSchema === true ? true : { instructions: autoSchema.instructions || "" }; + finalSchema = await autogenerateSchema(markdown, defaultModel, autoSchemaOption); if (!finalSchema) { throw new Error("Failed to auto-generate schema."); } } + if (!finalSchema) { + throw new Error("No schema available for extraction."); + } + const dynamicZodSchema = convertToZodSchema(finalSchema); const extraction = getExtractor(defaultModel); @@ -71,6 +87,6 @@ export async function extract({ file, schema, template, model, autoSchema }) { }; } catch (error) { console.error("Error processing document:", error); - throw new Error(`Failed to process document: ${error.message}`); + throw new Error(`Failed to process document: ${(error as Error).message}`); } } diff --git a/extractor/src/services/formatter.js b/extractor/src/services/formatter.ts similarity index 59% rename from extractor/src/services/formatter.js rename to extractor/src/services/formatter.ts index 07c395b..d0fbca6 100644 --- a/extractor/src/services/formatter.js +++ b/extractor/src/services/formatter.ts @@ -2,24 +2,28 @@ import { convertFile } from '../converter.js'; import { isPdfFile } from '../utils/pdfValidator.js'; import { convertToText } from '../utils/convertToText.js'; +interface FormatterOptions { + file: string; + model?: string; +} + /** * Extracts markdown content from a PDF. - * @param {object} options - Options for extracting the markdown. - * @param {string} options.file - The PDF file. - * @param {string} [options.model] - The LLM model to use. - * @returns {Promise} - The markdown content. + * @param options - Options for extracting the markdown. + * @returns - The markdown content. */ -const getMarkdown = async ({ file, model }) => { +const getMarkdown = async ({ file, model }: FormatterOptions): Promise => { try { if (!file) { throw new Error('File is required.'); } - if (!isPdfFile(file)) { + const isPdf = await isPdfFile(file); + if (!isPdf) { throw new Error('File must be a PDF.'); } - const { markdown } = await convertFile(file, model); + const { markdown } = await convertFile(file, model || "gpt-4o-mini"); if (!markdown) { throw new Error("Failed to extract markdown."); @@ -34,12 +38,10 @@ const getMarkdown = async ({ file, model }) => { /** * Extracts plain text from a PDF by converting markdown to text. - * @param {object} options - Options for extracting the plain text. - * @param {string} options.file - The path to the PDF file. - * @param {string} [options.model] - The LLM model to use. - * @returns {Promise} - The plain text content. + * @param options - Options for extracting the plain text. + * @returns - The plain text content. */ -const getPlainText = async ({ file, model }) => { +const getPlainText = async ({ file, model }: FormatterOptions): Promise => { try { const markdown = await getMarkdown({ file, model }); return convertToText(markdown); diff --git a/extractor/src/services/templates.js b/extractor/src/services/templates.ts similarity index 71% rename from extractor/src/services/templates.js rename to extractor/src/services/templates.ts index dea34b5..49c5f40 100644 --- a/extractor/src/services/templates.js +++ b/extractor/src/services/templates.ts @@ -1,6 +1,7 @@ import fs from 'fs'; import * as path from 'path'; import { fileURLToPath } from 'url'; +import { SchemaField } from '../utils/convertToZodSchema.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -9,9 +10,9 @@ const templatesDirectory = path.resolve(__dirname, '../templates'); /** * Lists all available templates. - * @returns {string[]} - Array of template names. + * @returns - Array of template names. */ -export function listTemplates() { +export function listTemplates(): string[] { return fs .readdirSync(templatesDirectory) .filter((file) => file.endsWith('.json')) @@ -20,11 +21,11 @@ export function listTemplates() { /** * Retrieves a specific template. - * @param {string} name - The name of the template. - * @returns {object} - The template content. - * @throws {Error} - If the template is not found. + * @param name - The name of the template. + * @returns - The template content. + * @throws - If the template is not found. */ -export function getTemplate(name) { +export function getTemplate(name: string): SchemaField[] { const templatePath = path.join(templatesDirectory, `${name}.json`); if (!fs.existsSync(templatePath)) { throw new Error(`Template "${name}" not found`); diff --git a/extractor/src/utils/convertToText.js b/extractor/src/utils/convertToText.ts similarity index 93% rename from extractor/src/utils/convertToText.js rename to extractor/src/utils/convertToText.ts index 8366f31..7b960e0 100644 --- a/extractor/src/utils/convertToText.js +++ b/extractor/src/utils/convertToText.ts @@ -1,4 +1,4 @@ -export const convertToText = (markdown) => { +export const convertToText = (markdown: string): string => { if (!markdown || typeof markdown !== "string") { throw new Error("Valid markdown content is required."); } @@ -19,4 +19,3 @@ export const convertToText = (markdown) => { return plainText; }; - \ No newline at end of file diff --git a/extractor/src/utils/convertToZodSchema.js b/extractor/src/utils/convertToZodSchema.ts similarity index 70% rename from extractor/src/utils/convertToZodSchema.js rename to extractor/src/utils/convertToZodSchema.ts index 8f8f4f0..b77e9be 100644 --- a/extractor/src/utils/convertToZodSchema.js +++ b/extractor/src/utils/convertToZodSchema.ts @@ -1,16 +1,24 @@ -import { z } from 'zod'; +import { z, ZodTypeAny } from 'zod'; + +export interface SchemaField { + name: string; + type: 'string' | 'number' | 'boolean' | 'enum' | 'object' | 'array'; + description?: string; + values?: string[]; + children?: SchemaField[]; +} /** * Converts an array of field definitions into a Zod schema. - * @param {Array} object - Array of field definitions. - * @returns {ZodObject} - A Zod object schema. + * @param object - Array of field definitions. + * @returns - A Zod object schema. */ -export const convertToZodSchema = (object) => { - const createZodSchema = (fields) => { - const schema = {}; +export const convertToZodSchema = (object: SchemaField[]): z.ZodObject> => { + const createZodSchema = (fields: SchemaField[]): Record => { + const schema: Record = {}; fields.forEach((item) => { - let zodType; + let zodType: ZodTypeAny; switch (item.type) { case 'string': @@ -26,8 +34,8 @@ export const convertToZodSchema = (object) => { break; case 'enum': - if (item.values && Array.isArray(item.values)) { - zodType = z.enum(item.values); + if (item.values && Array.isArray(item.values) && item.values.length > 0) { + zodType = z.enum(item.values as [string, ...string[]]); } else { throw new Error(`Invalid "enum" type definition for ${item.name}`); } diff --git a/extractor/src/utils/fileValidator.js b/extractor/src/utils/fileValidator.ts similarity index 81% rename from extractor/src/utils/fileValidator.js rename to extractor/src/utils/fileValidator.ts index 65fd347..125f7ad 100644 --- a/extractor/src/utils/fileValidator.js +++ b/extractor/src/utils/fileValidator.ts @@ -2,12 +2,12 @@ import axios from 'axios'; /** * Function to check if a file is valid based on its URL or MIME type - * @param {string} file - The URL to the file - * @returns {Promise} - Resolves to true if the file is valid, false otherwise + * @param file - The URL to the file + * @returns - Resolves to true if the file is valid, false otherwise */ -export async function isValidFile(file) { +export async function isValidFile(file: string): Promise { const allowedExtensions = ['pdf', 'png', 'jpg', 'jpeg', 'txt', 'docx', 'html']; - const allowedMimeTypes = { + const allowedMimeTypes: Record = { pdf: 'application/pdf', png: 'image/png', jpg: 'image/jpeg', diff --git a/extractor/src/utils/generateMarkdown.js b/extractor/src/utils/generateMarkdown.ts similarity index 66% rename from extractor/src/utils/generateMarkdown.js rename to extractor/src/utils/generateMarkdown.ts index 91a9a84..ba5eb78 100644 --- a/extractor/src/utils/generateMarkdown.js +++ b/extractor/src/utils/generateMarkdown.ts @@ -1,4 +1,10 @@ -export const generateMarkdownDocument = async (pages) => { +interface Page { + content: string; + page: number; + contentLength: number; +} + +export const generateMarkdownDocument = async (pages: Page[]): Promise => { try { // Combine all markdown pages into a single string const markdownContent = pages.map((page) => page.content).join("\n\n---\n\n"); diff --git a/extractor/src/utils/pdfValidator.js b/extractor/src/utils/pdfValidator.ts similarity index 77% rename from extractor/src/utils/pdfValidator.js rename to extractor/src/utils/pdfValidator.ts index f1dc67e..9d65cf4 100644 --- a/extractor/src/utils/pdfValidator.js +++ b/extractor/src/utils/pdfValidator.ts @@ -2,10 +2,10 @@ import axios from 'axios'; /** * Function to check if a file is a PDF based on its URL or MIME type - * @param {string} file - The URL to the file - * @returns {Promise} - Resolves to true if the file is a PDF, false otherwise + * @param file - The URL to the file + * @returns - Resolves to true if the file is a PDF, false otherwise */ -export async function isPdfFile(file) { +export async function isPdfFile(file: string): Promise { const urlPath = new URL(file).pathname; const pdfExtensionRegex = /\.pdf$/i; if (pdfExtensionRegex.test(urlPath)) { diff --git a/extractor/src/utils/schemaValidator.js b/extractor/src/utils/schemaValidator.ts similarity index 75% rename from extractor/src/utils/schemaValidator.js rename to extractor/src/utils/schemaValidator.ts index 5b7cd00..3dd462a 100644 --- a/extractor/src/utils/schemaValidator.js +++ b/extractor/src/utils/schemaValidator.ts @@ -1,19 +1,25 @@ +import { SchemaField } from './convertToZodSchema.js'; + +interface ValidationResult { + isValid: boolean; + errors: string[]; +} + /** * Validates the schema format to ensure it meets the required structure. - * @param {Array} schema - The schema to validate. - * @returns {Object} - { isValid: boolean, errors: Array } + * @param schema - The schema to validate. + * @returns - { isValid: boolean, errors: Array } */ - -export function validateSchema(schema) { +export function validateSchema(schema: SchemaField[]): ValidationResult { const validTypes = ["string", "number", "array", "object", "boolean", "enum"]; - let errors = []; + let errors: string[] = []; if (!Array.isArray(schema)) { errors.push("Schema must be an array."); return { isValid: false, errors }; } - function validateField(field, path) { + function validateField(field: any, path: string): void { if (!field.hasOwnProperty("name") || typeof field.name !== "string" || field.name.trim() === "") { errors.push(`"name" is required and should be a non-empty string at ${path}`); } @@ -29,7 +35,7 @@ export function validateSchema(schema) { if (field.type === "enum") { if (!field.hasOwnProperty("values") || !Array.isArray(field.values) || field.values.length === 0) { errors.push(`"values" is required and must be a non-empty array for enum "${field.name}" at ${path}`); - } else if (!field.values.every((value) => typeof value === "string")) { + } else if (!field.values.every((value: any) => typeof value === "string")) { errors.push(`"values" for enum "${field.name}" at ${path} must be an array of strings`); } } @@ -40,7 +46,7 @@ export function validateSchema(schema) { } else if (!Array.isArray(field.children) || field.children.length === 0) { errors.push(`"children" must be a non-empty array for "${field.name}" at ${path}`); } else { - field.children.forEach((child, index) => validateField(child, `${path}.children[${index}]`)); + field.children.forEach((child: any, index: number) => validateField(child, `${path}.children[${index}]`)); } } @@ -50,7 +56,7 @@ export function validateSchema(schema) { } else if (!Array.isArray(field.children) || field.children.length === 0) { errors.push(`"children" must be a non-empty array for "${field.name}" at ${path}`); } else { - field.children.forEach((child, index) => validateField(child, `${path}.children[${index}]`)); + field.children.forEach((child: any, index: number) => validateField(child, `${path}.children[${index}]`)); } } } @@ -61,4 +67,4 @@ export function validateSchema(schema) { isValid: errors.length === 0, errors, }; -} \ No newline at end of file +} diff --git a/extractor/tsconfig.json b/extractor/tsconfig.json new file mode 100644 index 0000000..2a1117a --- /dev/null +++ b/extractor/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ES2020", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/package-lock.json b/package-lock.json index c5db782..3636340 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "extractor" ], "dependencies": { - "axios": "^1.7.7", + "axios": "^1.12.2", "child_process": "^1.0.2", "core": "file:./core", "dotenv": "^16.4.5", @@ -85,9 +85,29 @@ "zod-to-json-schema": "^3.24.2" }, "devDependencies": { - "nodemon": "^3.1.7" + "@types/node": "^20.14.11", + "@types/uuid": "^11.0.0", + "nodemon": "^3.1.7", + "typescript": "^5.6.3" } }, + "extractor/node_modules/@types/node": { + "version": "20.19.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.20.tgz", + "integrity": "sha512-2Q7WS25j4pS1cS8yw3d6buNCVJukOTeQ39bAnwR6sOJbaxvyCGebzTMypDFN82CxBLnl+lSWVdCCWbRY6y9yZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "extractor/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@ai-sdk/google": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/@ai-sdk/google/-/google-1.1.14.tgz", @@ -655,6 +675,17 @@ "form-data": "^4.0.0" } }, + "node_modules/@types/uuid": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-11.0.0.tgz", + "integrity": "sha512-HVyk8nj2m+jcFRNazzqyVKiZezyhDKrGUA3jlEcg/nZ6Ms+qHwocba1Y/AaVaznJTAM9xpdFSh+ptbNrhOGvZA==", + "deprecated": "This is a stub types definition. uuid provides its own type definitions, so you do not need this installed.", + "dev": true, + "license": "MIT", + "dependencies": { + "uuid": "*" + } + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -762,13 +793,13 @@ } }, "node_modules/axios": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", - "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -830,6 +861,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/chalk": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", @@ -1018,18 +1062,29 @@ "url": "https://dotenvx.com" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { "node": ">= 0.4" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", @@ -1039,6 +1094,33 @@ "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -1104,13 +1186,15 @@ } }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -1175,16 +1259,21 @@ } }, "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==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -1193,6 +1282,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1222,12 +1324,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1261,22 +1363,10 @@ "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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -1526,6 +1616,15 @@ "yallist": "^2.1.2" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", diff --git a/package.json b/package.json index 336c9cd..1889645 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,10 @@ "version": "1.1.5", "description": "Intelligent document processing and extraction.", "scripts": { + "build": "npm run build:core && npm run build:extractor", + "build:core": "npm run build --workspace=core", + "build:extractor": "npm run build --workspace=extractor", + "prepublishOnly": "npm run build", "start": "npm run start --workspace=extractor", "dev": "npm run dev --workspace=extractor" }, @@ -10,7 +14,8 @@ "core", "extractor" ], - "main": "./extractor/src/index.js", + "main": "./extractor/dist/index.js", + "types": "./extractor/dist/index.d.ts", "keywords": [ "document", "extraction", @@ -25,7 +30,7 @@ }, "homepage": "https://documind.xyz", "dependencies": { - "axios": "^1.7.7", + "axios": "^1.12.2", "child_process": "^1.0.2", "core": "file:./core", "dotenv": "^16.4.5", From bd65927f90a3774362e611597274360d44ef25e1 Mon Sep 17 00:00:00 2001 From: Vedran Krizic Date: Fri, 10 Oct 2025 23:26:00 +0200 Subject: [PATCH 2/4] Introduces CLI tool for Documind extractor Adds a command-line interface for document processing and structured data extraction. Includes commands for extracting data, converting documents to markdown or plaintext, and listing available templates. Also sets up new CLI options for using local LLMs and adds associated documentation. These changes streamline the extraction and conversion processes and makes Documind functionality accessible from the command line. --- .gitignore | 1 + cli/README.md | 254 ++++++++ cli/package.json | 37 ++ cli/src/commands/convert.ts | 73 +++ cli/src/commands/extract.ts | 136 ++++ cli/src/commands/templates.ts | 39 ++ cli/src/index.ts | 66 ++ cli/src/utils/file-helper.ts | 38 ++ cli/src/utils/logger.ts | 23 + cli/tsconfig.json | 26 + cli/tsconfig.tsbuildinfo | 1 + core/package.json | 4 +- core/src/index.ts | 12 +- core/src/providers/google.ts | 6 +- core/src/providers/index.ts | 10 +- core/src/providers/ollama.ts | 6 +- core/src/providers/openAI.ts | 6 +- core/src/providers/utils/completion.ts | 2 +- core/src/utils.ts | 2 +- core/tsconfig.json | 7 +- core/tsconfig.tsbuildinfo | 1 + extractor/package.json | 3 +- .../src/autoschema/autogenerateSchema.d.ts | 8 + .../autoschema/autogenerateSchema.d.ts.map | 1 + .../src/autoschema/autogenerateSchema.js | 69 ++ .../src/autoschema/cleanSchemaFields.d.ts | 3 + .../src/autoschema/cleanSchemaFields.d.ts.map | 1 + extractor/src/autoschema/cleanSchemaFields.js | 11 + .../autoschema/generation-schemas/base.d.ts | 9 + .../generation-schemas/base.d.ts.map | 1 + .../src/autoschema/generation-schemas/base.js | 11 + .../generation-schemas/secondary.d.ts | 63 ++ .../generation-schemas/secondary.d.ts.map | 1 + .../generation-schemas/secondary.js | 13 + extractor/src/converter.ts | 2 +- extractor/src/extractors/google.d.ts | 10 + extractor/src/extractors/google.d.ts.map | 1 + extractor/src/extractors/google.js | 36 ++ extractor/src/extractors/index.d.ts | 13 + extractor/src/extractors/index.d.ts.map | 1 + extractor/src/extractors/index.js | 24 + extractor/src/extractors/ollama.d.ts | 10 + extractor/src/extractors/ollama.d.ts.map | 1 + extractor/src/extractors/ollama.js | 22 + extractor/src/extractors/openAI.d.ts | 10 + extractor/src/extractors/openAI.d.ts.map | 1 + extractor/src/extractors/openAI.js | 19 + extractor/src/services/extract.d.ts | 24 + extractor/src/services/extract.d.ts.map | 1 + extractor/src/services/extract.js | 68 ++ extractor/src/services/formatter.d.ts | 13 + extractor/src/services/formatter.d.ts.map | 1 + extractor/src/services/formatter.js | 50 ++ extractor/src/services/templates.d.ts | 21 + extractor/src/services/templates.d.ts.map | 1 + extractor/src/services/templates.js | 36 ++ extractor/src/utils/convertToText.d.ts | 2 + extractor/src/utils/convertToText.d.ts.map | 1 + extractor/src/utils/convertToText.js | 19 + extractor/src/utils/convertToZodSchema.d.ts | 15 + .../src/utils/convertToZodSchema.d.ts.map | 1 + extractor/src/utils/convertToZodSchema.js | 66 ++ extractor/src/utils/fileValidator.d.ts | 7 + extractor/src/utils/fileValidator.d.ts.map | 1 + extractor/src/utils/fileValidator.js | 33 + extractor/src/utils/generateMarkdown.d.ts | 8 + extractor/src/utils/generateMarkdown.d.ts.map | 1 + extractor/src/utils/generateMarkdown.js | 12 + extractor/src/utils/pdfValidator.d.ts | 7 + extractor/src/utils/pdfValidator.d.ts.map | 1 + extractor/src/utils/pdfValidator.js | 23 + extractor/src/utils/schemaValidator.d.ts | 13 + extractor/src/utils/schemaValidator.d.ts.map | 1 + extractor/src/utils/schemaValidator.js | 59 ++ extractor/tsconfig.json | 12 +- extractor/tsconfig.tsbuildinfo | 1 + package-lock.json | 594 +++++++++++++++++- package.json | 11 +- 78 files changed, 2162 insertions(+), 35 deletions(-) create mode 100644 cli/README.md create mode 100644 cli/package.json create mode 100644 cli/src/commands/convert.ts create mode 100644 cli/src/commands/extract.ts create mode 100644 cli/src/commands/templates.ts create mode 100644 cli/src/index.ts create mode 100644 cli/src/utils/file-helper.ts create mode 100644 cli/src/utils/logger.ts create mode 100644 cli/tsconfig.json create mode 100644 cli/tsconfig.tsbuildinfo create mode 100644 core/tsconfig.tsbuildinfo create mode 100644 extractor/src/autoschema/autogenerateSchema.d.ts create mode 100644 extractor/src/autoschema/autogenerateSchema.d.ts.map create mode 100644 extractor/src/autoschema/autogenerateSchema.js create mode 100644 extractor/src/autoschema/cleanSchemaFields.d.ts create mode 100644 extractor/src/autoschema/cleanSchemaFields.d.ts.map create mode 100644 extractor/src/autoschema/cleanSchemaFields.js create mode 100644 extractor/src/autoschema/generation-schemas/base.d.ts create mode 100644 extractor/src/autoschema/generation-schemas/base.d.ts.map create mode 100644 extractor/src/autoschema/generation-schemas/base.js create mode 100644 extractor/src/autoschema/generation-schemas/secondary.d.ts create mode 100644 extractor/src/autoschema/generation-schemas/secondary.d.ts.map create mode 100644 extractor/src/autoschema/generation-schemas/secondary.js create mode 100644 extractor/src/extractors/google.d.ts create mode 100644 extractor/src/extractors/google.d.ts.map create mode 100644 extractor/src/extractors/google.js create mode 100644 extractor/src/extractors/index.d.ts create mode 100644 extractor/src/extractors/index.d.ts.map create mode 100644 extractor/src/extractors/index.js create mode 100644 extractor/src/extractors/ollama.d.ts create mode 100644 extractor/src/extractors/ollama.d.ts.map create mode 100644 extractor/src/extractors/ollama.js create mode 100644 extractor/src/extractors/openAI.d.ts create mode 100644 extractor/src/extractors/openAI.d.ts.map create mode 100644 extractor/src/extractors/openAI.js create mode 100644 extractor/src/services/extract.d.ts create mode 100644 extractor/src/services/extract.d.ts.map create mode 100644 extractor/src/services/extract.js create mode 100644 extractor/src/services/formatter.d.ts create mode 100644 extractor/src/services/formatter.d.ts.map create mode 100644 extractor/src/services/formatter.js create mode 100644 extractor/src/services/templates.d.ts create mode 100644 extractor/src/services/templates.d.ts.map create mode 100644 extractor/src/services/templates.js create mode 100644 extractor/src/utils/convertToText.d.ts create mode 100644 extractor/src/utils/convertToText.d.ts.map create mode 100644 extractor/src/utils/convertToText.js create mode 100644 extractor/src/utils/convertToZodSchema.d.ts create mode 100644 extractor/src/utils/convertToZodSchema.d.ts.map create mode 100644 extractor/src/utils/convertToZodSchema.js create mode 100644 extractor/src/utils/fileValidator.d.ts create mode 100644 extractor/src/utils/fileValidator.d.ts.map create mode 100644 extractor/src/utils/fileValidator.js create mode 100644 extractor/src/utils/generateMarkdown.d.ts create mode 100644 extractor/src/utils/generateMarkdown.d.ts.map create mode 100644 extractor/src/utils/generateMarkdown.js create mode 100644 extractor/src/utils/pdfValidator.d.ts create mode 100644 extractor/src/utils/pdfValidator.d.ts.map create mode 100644 extractor/src/utils/pdfValidator.js create mode 100644 extractor/src/utils/schemaValidator.d.ts create mode 100644 extractor/src/utils/schemaValidator.d.ts.map create mode 100644 extractor/src/utils/schemaValidator.js create mode 100644 extractor/tsconfig.tsbuildinfo diff --git a/.gitignore b/.gitignore index 2a04543..19af7d9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules **/dist/ +**/examples/ \ No newline at end of file diff --git a/cli/README.md b/cli/README.md new file mode 100644 index 0000000..cb67c7c --- /dev/null +++ b/cli/README.md @@ -0,0 +1,254 @@ +# Documind CLI + +Command-line interface for intelligent document processing and structured data extraction using Documind. + +## Installation + +```bash +# Install dependencies +npm install + +# Build the CLI +npm run build +``` + +## Usage + +The CLI provides several commands to work with documents: + +### Extract Command + +Extract structured data from documents using schemas, templates, or auto-generation. + +```bash +documind extract [options] +``` + +#### Options + +- `-f, --file ` - Path to the document file (required) +- `-m, --model ` - LLM model to use (default: gpt-4o-mini) +- `-s, --schema ` - Path to JSON schema file +- `-t, --template ` - Name of a predefined template +- `-a, --auto-schema` - Auto-generate schema from document +- `-i, --instructions ` - Instructions for auto-schema generation +- `-o, --output ` - Output file path for results (JSON) +- `--base-url ` - Base URL for local LLM (for Ollama) + +#### Examples + +**Extract with auto-generated schema:** +```bash +documind extract -f invoice.pdf --auto-schema +``` + +**Extract with custom schema:** +```bash +documind extract -f document.pdf -s schema.json -o output.json +``` + +**Extract using a predefined template:** +```bash +documind extract -f invoice.pdf -t invoice -o result.json +``` + +**Extract with local LLM (Ollama):** +```bash +documind extract -f doc.pdf -m llama3.2-vision --base-url http://localhost:11434/v1 --auto-schema +``` + +**Extract with specific instructions:** +```bash +documind extract -f contract.pdf --auto-schema -i "Extract party names, dates, and monetary amounts" +``` + +### Convert Command + +Convert documents to markdown or plain text. + +```bash +documind convert [options] +``` + +#### Options + +- `-f, --file ` - Path to the document file (required) +- `-m, --model ` - LLM model to use (default: gpt-4o-mini) +- `-t, --format ` - Output format: markdown or plaintext (default: markdown) +- `-o, --output ` - Output file path +- `--base-url ` - Base URL for local LLM (for Ollama) + +#### Examples + +**Convert to markdown:** +```bash +documind convert -f document.pdf -t markdown -o output.md +``` + +**Convert to plain text:** +```bash +documind convert -f document.pdf -t plaintext -o output.txt +``` + +### Templates Command + +List all available predefined templates. + +```bash +documind templates +``` + +## Supported Models + +### OpenAI Models +- `gpt-4o` +- `gpt-4o-mini` (default) +- `gpt-4.1` +- `gpt-4.1-mini` + +### Google Models +- `gemini-2.0-flash-001` +- `gemini-2.0-flash-lite-preview-02-05` +- `gemini-1.5-flash` +- `gemini-1.5-flash-8b` +- `gemini-1.5-pro` + +### Local Models (Ollama) +- `llama3.2-vision` + +## Environment Variables + +Set these environment variables for API access: + +```bash +# OpenAI API key for GPT models +export OPENAI_API_KEY="your-openai-api-key" + +# Google Gemini API key +export GEMINI_API_KEY="your-gemini-api-key" + +# Base URL for local LLM (Ollama) +export BASE_URL="http://localhost:11434/v1" +``` + +Or create a `.env` file: + +```env +OPENAI_API_KEY=your-openai-api-key +GEMINI_API_KEY=your-gemini-api-key +BASE_URL=http://localhost:11434/v1 +``` + +## Schema Format + +Schemas should be in JSON format with the following structure: + +```json +[ + { + "name": "field_name", + "type": "string", + "description": "Field description" + }, + { + "name": "nested_object", + "type": "object", + "description": "An object field", + "children": [ + { + "name": "child_field", + "type": "number", + "description": "Child field description" + } + ] + }, + { + "name": "items_list", + "type": "array", + "description": "A list of items", + "children": [ + { + "name": "item_name", + "type": "string", + "description": "Item name" + } + ] + } +] +``` + +### Supported Field Types + +- `string` - Text values +- `number` - Numeric values +- `boolean` - True/false values +- `enum` - Predefined set of values (requires `values` array) +- `object` - Nested objects (requires `children` array) +- `array` - Lists (requires `children` array) + +## Using with Local LLMs + +To use Ollama or other local LLMs: + +1. Install and start Ollama: +```bash +# Install Ollama +curl https://ollama.ai/install.sh | sh + +# Pull the vision model +ollama pull llama3.2-vision + +# Start Ollama (if not already running) +ollama serve +``` + +2. Use with the CLI: +```bash +documind extract \ + -f document.pdf \ + -m llama3.2-vision \ + --base-url http://localhost:11434/v1 \ + --auto-schema \ + -o result.json +``` + +## Development + +```bash +# Watch mode +npm run dev + +# Build +npm run build + +# Run +npm start -- extract -f example.pdf --auto-schema +``` + +## Troubleshooting + +### "Cannot find module" errors + +Make sure you've built the project: +```bash +npm run build +``` + +### API Key errors + +Ensure your API keys are set: +```bash +echo $OPENAI_API_KEY +echo $GEMINI_API_KEY +``` + +### Local LLM connection issues + +Check if Ollama is running: +```bash +curl http://localhost:11434/v1/models +``` + +## License + +AGPL-3.0 diff --git a/cli/package.json b/cli/package.json new file mode 100644 index 0000000..3a0397d --- /dev/null +++ b/cli/package.json @@ -0,0 +1,37 @@ +{ + "name": "cli", + "version": "1.0.0", + "description": "Command-line interface for Documind extractor", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "bin": { + "documind": "./dist/index.js" + }, + "files": [ + "dist" + ], + "scripts": { + "build": "tsc --build && tsc-alias -p tsconfig.json", + "start": "node dist/index.js", + "dev": "tsx src/index.ts" + }, + "keywords": [ + "cli", + "document", + "extraction", + "llm" + ], + "dependencies": { + "commander": "^12.0.0", + "chalk": "^5.3.0", + "ora": "^8.0.1", + "extractor": "*", + "dotenv": "^16.4.5" + }, + "devDependencies": { + "@types/node": "^20.14.11", + "tsc-alias": "^1.8.8", + "typescript": "^5.6.3" + } +} diff --git a/cli/src/commands/convert.ts b/cli/src/commands/convert.ts new file mode 100644 index 0000000..b277819 --- /dev/null +++ b/cli/src/commands/convert.ts @@ -0,0 +1,73 @@ +import { Command } from 'commander'; +import { formatter } from 'extractor'; +import ora from 'ora'; +import { logger } from '../utils/logger.js'; +import { fileExists, writeJsonFile, resolveFilePath } from '../utils/file-helper.js'; +import fs from 'fs'; + +export function createConvertCommand(): Command { + const cmd = new Command('convert'); + + cmd + .description('Convert a document to markdown or plain text') + .requiredOption('-f, --file ', 'Path to the document file') + .option('-m, --model ', 'LLM model to use', 'gpt-4o-mini') + .option('-t, --format ', 'Output format (markdown or plaintext)', 'markdown') + .option('-o, --output ', 'Output file path') + .option('--base-url ', 'Base URL for local LLM (for Ollama)') + .action(async (options: ConvertOptions) => { + await handleConvert(options); + }); + + return cmd; +} + +interface ConvertOptions { + file: string; + model: string; + format: 'markdown' | 'plaintext'; + output?: string; + baseUrl?: string; +} + +async function handleConvert(options: ConvertOptions): Promise { + const spinner = ora('Starting conversion...').start(); + + try { + const filePath = resolveFilePath(options.file); + + if (!fileExists(filePath)) { + spinner.fail(`File not found: ${filePath}`); + process.exit(1); + } + + if (options.baseUrl) { + process.env.BASE_URL = options.baseUrl; + } + + spinner.text = `Converting document to ${options.format}...`; + + let result: string; + + if (options.format === 'markdown') { + result = await formatter.markdown({ file: filePath, model: options.model }); + } else { + result = await formatter.plaintext({ file: filePath, model: options.model }); + } + + spinner.succeed('Conversion completed!'); + + if (options.output) { + const outputPath = resolveFilePath(options.output); + fs.writeFileSync(outputPath, result, 'utf-8'); + logger.success(`Output saved to: ${outputPath}`); + } else { + console.log('\n' + result); + } + + } catch (error) { + spinner.fail('Conversion failed'); + logger.error((error as Error).message); + process.exit(1); + } +} diff --git a/cli/src/commands/extract.ts b/cli/src/commands/extract.ts new file mode 100644 index 0000000..cb63850 --- /dev/null +++ b/cli/src/commands/extract.ts @@ -0,0 +1,136 @@ +import { Command } from 'commander'; +import { extract, type SchemaField, type ExtractResult } from 'extractor'; +import ora from 'ora'; +import { logger } from '../utils/logger.js'; +import { fileExists, readJsonFile, writeJsonFile, resolveFilePath } from '../utils/file-helper.js'; +import path from 'path'; + +export function createExtractCommand(): Command { + const cmd = new Command('extract'); + + cmd + .description('Extract structured data from a document') + .requiredOption('-f, --file ', 'Path to the document file') + .option('-m, --model ', 'LLM model to use (e.g., gpt-4o-mini, llama3.2-vision, gemini-1.5-flash)', 'gpt-4o-mini') + .option('-s, --schema ', 'Path to JSON schema file') + .option('-t, --template ', 'Name of a predefined template') + .option('-a, --auto-schema', 'Auto-generate schema from document') + .option('-i, --instructions ', 'Instructions for auto-schema generation') + .option('-o, --output ', 'Output file path for results (JSON)') + .option('--base-url ', 'Base URL for local LLM (for Ollama)') + .action(async (options) => { + await handleExtract(options); + }); + + return cmd; +} + +interface ExtractOptions { + file: string; + model: string; + schema?: string; + template?: string; + autoSchema?: boolean; + instructions?: string; + output?: string; + baseUrl?: string; +} + +async function handleExtract(options: ExtractOptions): Promise { + const spinner = ora('Starting extraction...').start(); + + try { + // Resolve file path + const filePath = resolveFilePath(options.file); + + if (!fileExists(filePath)) { + spinner.fail(`File not found: ${filePath}`); + process.exit(1); + } + + spinner.text = 'File found. Preparing extraction...'; + + // Set base URL for local LLM if provided + if (options.baseUrl) { + process.env.BASE_URL = options.baseUrl; + logger.info(`Using local LLM at: ${options.baseUrl}`); + } + + // Prepare extraction parameters + let schema: SchemaField[] | undefined; + let autoSchemaOption: boolean | { instructions: string } | undefined; + + if (options.schema) { + const schemaPath = resolveFilePath(options.schema); + if (!fileExists(schemaPath)) { + spinner.fail(`Schema file not found: ${schemaPath}`); + process.exit(1); + } + schema = readJsonFile(schemaPath); + spinner.text = 'Schema loaded from file'; + } + + if (options.autoSchema) { + if (options.instructions) { + autoSchemaOption = { instructions: options.instructions }; + spinner.text = 'Auto-generating schema with instructions...'; + } else { + autoSchemaOption = true; + spinner.text = 'Auto-generating schema...'; + } + } + + // Validate options + if (!schema && !options.template && !autoSchemaOption) { + spinner.fail('You must provide either --schema, --template, or --auto-schema'); + process.exit(1); + } + + spinner.text = `Extracting data using ${options.model}...`; + + // Perform extraction + const result: ExtractResult = await extract({ + file: filePath, + model: options.model, + schema, + template: options.template, + autoSchema: autoSchemaOption, + }); + + spinner.succeed('Extraction completed successfully!'); + + // Display results + logger.header('Extraction Results'); + logger.info(`Document: ${result.fileName}`); + logger.info(`Pages processed: ${result.pages}`); + + console.log('\n' + chalk.bold('Extracted Data:')); + console.log(JSON.stringify(result.data, null, 2)); + + // Save to file if output path provided + if (options.output) { + const outputPath = resolveFilePath(options.output); + writeJsonFile(outputPath, { + fileName: result.fileName, + pages: result.pages, + data: result.data, + extractedAt: new Date().toISOString(), + model: options.model, + }); + logger.success(`Results saved to: ${outputPath}`); + } + + } catch (error) { + spinner.fail('Extraction failed'); + logger.error((error as Error).message); + + if (process.env.DEBUG) { + console.error(error); + } + + process.exit(1); + } +} + +// Import chalk dynamically since it's ESM-only +import chalk from 'chalk'; diff --git a/cli/src/commands/templates.ts b/cli/src/commands/templates.ts new file mode 100644 index 0000000..9970bcd --- /dev/null +++ b/cli/src/commands/templates.ts @@ -0,0 +1,39 @@ +import { Command } from 'commander'; +import { templates } from 'extractor'; +import { logger } from '../utils/logger.js'; +import chalk from 'chalk'; + +export function createTemplatesCommand(): Command { + const cmd = new Command('templates'); + + cmd + .description('List available templates') + .action(() => { + handleTemplates(); + }); + + return cmd; +} + +function handleTemplates(): void { + try { + logger.header('Available Templates'); + + const availableTemplates = templates.list(); + + if (availableTemplates.length === 0) { + logger.warn('No templates found'); + return; + } + + availableTemplates.forEach((template: string) => { + console.log(chalk.cyan(' •'), chalk.bold(template)); + }); + + console.log('\n' + chalk.dim('Use with: documind extract -f -t ')); + + } catch (error) { + logger.error(`Failed to list templates: ${(error as Error).message}`); + process.exit(1); + } +} diff --git a/cli/src/index.ts b/cli/src/index.ts new file mode 100644 index 0000000..dae5642 --- /dev/null +++ b/cli/src/index.ts @@ -0,0 +1,66 @@ +#!/usr/bin/env node + +import { Command } from 'commander'; +import { config } from 'dotenv'; +import { createExtractCommand } from './commands/extract.js'; +import { createConvertCommand } from './commands/convert.js'; +import { createTemplatesCommand } from './commands/templates.js'; +import chalk from 'chalk'; + +// Load environment variables +config(); + +const program = new Command(); + +program + .name('documind') + .description('CLI tool for intelligent document processing and extraction') + .version('1.0.0'); + +// Add commands +program.addCommand(createExtractCommand()); +program.addCommand(createConvertCommand()); +program.addCommand(createTemplatesCommand()); + +// Add help examples +program.addHelpText('after', ` +${chalk.bold('Examples:')} + + ${chalk.dim('# Extract data with auto-generated schema')} + ${chalk.cyan('$ documind extract -f invoice.pdf --auto-schema')} + + ${chalk.dim('# Extract data with custom schema')} + ${chalk.cyan('$ documind extract -f document.pdf -s schema.json -o output.json')} + + ${chalk.dim('# Extract data using a template')} + ${chalk.cyan('$ documind extract -f invoice.pdf -t invoice -o result.json')} + + ${chalk.dim('# Extract data with local LLM (Ollama)')} + ${chalk.cyan('$ documind extract -f doc.pdf -m llama3.2-vision --base-url http://localhost:11434/v1 --auto-schema')} + + ${chalk.dim('# Convert document to markdown')} + ${chalk.cyan('$ documind convert -f document.pdf -t markdown -o output.md')} + + ${chalk.dim('# List available templates')} + ${chalk.cyan('$ documind templates')} + +${chalk.bold('Environment Variables:')} + + ${chalk.yellow('OPENAI_API_KEY')} - OpenAI API key for GPT models + ${chalk.yellow('GEMINI_API_KEY')} - Google Gemini API key + ${chalk.yellow('BASE_URL')} - Base URL for local LLM (Ollama) + +${chalk.bold('Supported Models:')} + + ${chalk.green('OpenAI:')} gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini + ${chalk.green('Google:')} gemini-2.0-flash-001, gemini-1.5-flash, gemini-1.5-pro + ${chalk.green('Local:')} llama3.2-vision (requires Ollama) +`); + +// Parse arguments +program.parse(process.argv); + +// Show help if no command provided +if (!process.argv.slice(2).length) { + program.outputHelp(); +} diff --git a/cli/src/utils/file-helper.ts b/cli/src/utils/file-helper.ts new file mode 100644 index 0000000..e48473f --- /dev/null +++ b/cli/src/utils/file-helper.ts @@ -0,0 +1,38 @@ +import fs from 'fs'; +import path from 'path'; + +export function fileExists(filePath: string): boolean { + try { + return fs.existsSync(filePath); + } catch { + return false; + } +} + +export function readJsonFile(filePath: string): any { + try { + const content = fs.readFileSync(filePath, 'utf-8'); + return JSON.parse(content); + } catch (error) { + throw new Error(`Failed to read JSON file: ${(error as Error).message}`); + } +} + +export function writeJsonFile(filePath: string, data: any): void { + try { + const dirPath = path.dirname(filePath); + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }); + } + fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8'); + } catch (error) { + throw new Error(`Failed to write JSON file: ${(error as Error).message}`); + } +} + +export function resolveFilePath(filePath: string): string { + if (path.isAbsolute(filePath)) { + return filePath; + } + return path.resolve(process.cwd(), filePath); +} diff --git a/cli/src/utils/logger.ts b/cli/src/utils/logger.ts new file mode 100644 index 0000000..718c1b0 --- /dev/null +++ b/cli/src/utils/logger.ts @@ -0,0 +1,23 @@ +import chalk from 'chalk'; + +export const logger = { + info: (message: string) => { + console.log(chalk.blue('ℹ'), message); + }, + + success: (message: string) => { + console.log(chalk.green('✔'), message); + }, + + error: (message: string) => { + console.error(chalk.red('✖'), message); + }, + + warn: (message: string) => { + console.warn(chalk.yellow('⚠'), message); + }, + + header: (message: string) => { + console.log(chalk.bold.cyan(`\n${message}\n${'='.repeat(message.length)}`)); + } +}; diff --git a/cli/tsconfig.json b/cli/tsconfig.json new file mode 100644 index 0000000..3f3ca2f --- /dev/null +++ b/cli/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ES2020", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "baseUrl": ".", + "paths": { + "extractor": ["../extractor/src/index.ts"] + } + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"], + "references": [ + { "path": "../extractor" } + ] +} diff --git a/cli/tsconfig.tsbuildinfo b/cli/tsconfig.tsbuildinfo new file mode 100644 index 0000000..6859650 --- /dev/null +++ b/cli/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/index.ts","./src/commands/convert.ts","./src/commands/extract.ts","./src/commands/templates.ts","./src/utils/file-helper.ts","./src/utils/logger.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/core/package.json b/core/package.json index 2ab887e..696b4e8 100644 --- a/core/package.json +++ b/core/package.json @@ -4,12 +4,12 @@ "description": "Core package for document conversion", "main": "dist/index.js", "types": "dist/index.d.ts", - "type": "commonjs", + "type": "module", "files": [ "dist" ], "scripts": { - "build": "tsc" + "build": "tsc --build && tsc-alias -p tsconfig.json" }, "dependencies": { "axios": "^1.7.2", diff --git a/core/src/index.ts b/core/src/index.ts index ccc2c0f..70a37f3 100644 --- a/core/src/index.ts +++ b/core/src/index.ts @@ -5,7 +5,7 @@ import { formatMarkdown, isString, validateLLMParams -} from "./utils"; +} from "./utils.js"; import fs from "fs-extra"; import os from "os"; import path from "path"; @@ -15,9 +15,9 @@ import { DocumindOutput, ModelOptions, OpenAIModels, -} from "./types"; -import { getModel } from "./providers"; -import { Completion } from "./providers/utils/completion"; +} from "./types.js"; +import { getModel } from "./providers/index.js"; +import { Completion } from "./providers/utils/completion.js"; export const documind = async ({ cleanup = true, @@ -212,5 +212,5 @@ export const documind = async ({ }; }; -export type { ModelOptions, DocumindArgs, DocumindOutput } from "./types"; -export { OpenAIModels, GoogleModels, LocalModels } from "./types"; +export type { ModelOptions, DocumindArgs, DocumindOutput } from "./types.js"; +export { OpenAIModels, GoogleModels, LocalModels } from "./types.js"; diff --git a/core/src/providers/google.ts b/core/src/providers/google.ts index 8052be8..febb15b 100644 --- a/core/src/providers/google.ts +++ b/core/src/providers/google.ts @@ -1,7 +1,7 @@ import axios from "axios"; -import { Completion } from "./utils/completion"; -import { CompletionArgs, CompletionResponse, GoogleModels } from "../types"; -import { convertKeysToSnakeCase, encodeImageToBase64 } from "../utils"; +import { Completion } from "./utils/completion.js"; +import { CompletionArgs, CompletionResponse, GoogleModels } from "../types.js"; +import { convertKeysToSnakeCase, encodeImageToBase64 } from "../utils.js"; export class Google implements Completion { public async getCompletion(args: CompletionArgs): Promise { diff --git a/core/src/providers/index.ts b/core/src/providers/index.ts index 337d5fb..f3db33f 100644 --- a/core/src/providers/index.ts +++ b/core/src/providers/index.ts @@ -1,8 +1,8 @@ -import { Completion } from "./utils/completion"; -import { OpenAI } from "./openAI"; -import { Ollama } from "./ollama"; -import { Google } from "./google"; -import { ModelOptions, OpenAIModels, LocalModels, GoogleModels } from "../types"; +import { Completion } from "./utils/completion.js"; +import { OpenAI } from "./openAI.js"; +import { Ollama } from "./ollama.js"; +import { Google } from "./google.js"; +import { ModelOptions, OpenAIModels, LocalModels, GoogleModels } from "../types.js"; export class getModel { public static getProviderForModel(model: ModelOptions): Completion { diff --git a/core/src/providers/ollama.ts b/core/src/providers/ollama.ts index ece3559..22ed612 100644 --- a/core/src/providers/ollama.ts +++ b/core/src/providers/ollama.ts @@ -1,7 +1,7 @@ import axios from "axios"; -import { Completion } from "./utils/completion"; -import { CompletionArgs, CompletionResponse, LocalModels } from "../types"; -import { convertKeysToSnakeCase, encodeImageToBase64 } from "../utils"; +import { Completion } from "./utils/completion.js"; +import { CompletionArgs, CompletionResponse, LocalModels } from "../types.js"; +import { convertKeysToSnakeCase, encodeImageToBase64 } from "../utils.js"; export class Ollama implements Completion { public async getCompletion(args: CompletionArgs): Promise { diff --git a/core/src/providers/openAI.ts b/core/src/providers/openAI.ts index 90431fa..594a924 100644 --- a/core/src/providers/openAI.ts +++ b/core/src/providers/openAI.ts @@ -1,7 +1,7 @@ import axios from "axios"; -import { Completion } from "./utils/completion"; -import { CompletionArgs, CompletionResponse, OpenAIModels } from "../types"; -import { convertKeysToSnakeCase, encodeImageToBase64 } from "../utils"; +import { Completion } from "./utils/completion.js"; +import { CompletionArgs, CompletionResponse, OpenAIModels } from "../types.js"; +import { convertKeysToSnakeCase, encodeImageToBase64 } from "../utils.js"; export class OpenAI implements Completion { public async getCompletion(args: CompletionArgs): Promise { diff --git a/core/src/providers/utils/completion.ts b/core/src/providers/utils/completion.ts index bbce5ba..3d2ac52 100644 --- a/core/src/providers/utils/completion.ts +++ b/core/src/providers/utils/completion.ts @@ -1,4 +1,4 @@ -import { CompletionArgs, CompletionResponse } from "../../types"; +import { CompletionArgs, CompletionResponse } from "../../types.js"; export interface Completion { getCompletion(args: CompletionArgs): Promise; diff --git a/core/src/utils.ts b/core/src/utils.ts index 9377fe4..9bc4bd1 100644 --- a/core/src/utils.ts +++ b/core/src/utils.ts @@ -1,6 +1,6 @@ import { convert } from "libreoffice-convert"; import { fromPath } from "pdf2pic"; -import { LLMParams } from "./types"; +import { LLMParams } from "./types.js"; import { pipeline } from "stream/promises"; import { promisify } from "util"; import * as Tesseract from "tesseract.js"; diff --git a/core/tsconfig.json b/core/tsconfig.json index 7138f70..a96cc4b 100644 --- a/core/tsconfig.json +++ b/core/tsconfig.json @@ -1,13 +1,16 @@ { "compilerOptions": { "target": "ES2020", - "module": "CommonJS", + "module": "ES2020", + "moduleResolution": "node", "declaration": true, "declarationMap": true, "outDir": "./dist", + "rootDir": "./src", "strict": true, "esModuleInterop": true, - "skipLibCheck": true + "skipLibCheck": true, + "composite": true }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] diff --git a/core/tsconfig.tsbuildinfo b/core/tsconfig.tsbuildinfo new file mode 100644 index 0000000..286af6a --- /dev/null +++ b/core/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2020.full.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/ts5.6/globals.typedarray.d.ts","./node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/ts5.6/index.d.ts","../node_modules/libreoffice-convert/index.d.ts","../node_modules/pdf2pic/dist/types/convertresponse.d.ts","../node_modules/pdf2pic/dist/types/convert.d.ts","../node_modules/pdf2pic/dist/types/options.d.ts","../node_modules/pdf2pic/dist/index.d.ts","./src/types.ts","../node_modules/tesseract.js/src/index.d.ts","../node_modules/axios/index.d.ts","../node_modules/@types/jsonfile/index.d.ts","../node_modules/@types/jsonfile/utils.d.ts","../node_modules/@types/fs-extra/index.d.ts","../node_modules/@types/mime-types/index.d.ts","../node_modules/sharp/lib/index.d.ts","./src/utils.ts","../node_modules/p-limit/index.d.ts","./src/providers/utils/completion.ts","./src/providers/openai.ts","./src/providers/ollama.ts","./src/providers/google.ts","./src/providers/index.ts","./src/index.ts","../node_modules/@types/diff-match-patch/index.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/node-fetch/externals.d.ts","../node_modules/@types/node-fetch/index.d.ts","../node_modules/uuid/dist/cjs/types.d.ts","../node_modules/uuid/dist/cjs/max.d.ts","../node_modules/uuid/dist/cjs/nil.d.ts","../node_modules/uuid/dist/cjs/parse.d.ts","../node_modules/uuid/dist/cjs/stringify.d.ts","../node_modules/uuid/dist/cjs/v1.d.ts","../node_modules/uuid/dist/cjs/v1tov6.d.ts","../node_modules/uuid/dist/cjs/v35.d.ts","../node_modules/uuid/dist/cjs/v3.d.ts","../node_modules/uuid/dist/cjs/v4.d.ts","../node_modules/uuid/dist/cjs/v5.d.ts","../node_modules/uuid/dist/cjs/v6.d.ts","../node_modules/uuid/dist/cjs/v6tov1.d.ts","../node_modules/uuid/dist/cjs/v7.d.ts","../node_modules/uuid/dist/cjs/validate.d.ts","../node_modules/uuid/dist/cjs/version.d.ts","../node_modules/uuid/dist/cjs/index.d.ts"],"fileIdsList":[[56,95,98],[56,97,98],[56,98,103,132],[56,98,99,104,110,111,118,129,140],[56,98,99,100,110,118],[56,98],[51,52,53,56,98],[56,98,101,141],[56,98,102,103,111,119],[56,98,103,129,137],[56,98,104,106,110,118],[56,97,98,105],[56,98,106,107],[56,98,110],[56,98,108,110],[56,97,98,110],[56,98,110,111,112,129,140],[56,98,110,111,112,125,129,132],[56,93,98,145],[56,98,106,110,113,118,129,140],[56,98,110,111,113,114,118,129,137,140],[56,98,113,115,129,137,140],[56,98,110,116],[56,98,117,140,145],[56,98,106,110,118,129],[56,98,119],[56,98,120],[56,97,98,121],[56,95,96,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146],[56,98,123],[56,98,124],[56,98,110,125,126],[56,98,125,127,141,143],[56,98,110,129,130,131,132],[56,98,129,131],[56,98,129,130],[56,98,132],[56,98,133],[56,95,98,129],[56,98,110,135,136],[56,98,135,136],[56,98,103,118,129,137],[56,98,138],[98],[54,55,56,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146],[56,98,118,139],[56,98,113,124,140],[56,98,103,141],[56,98,129,142],[56,98,117,143],[56,98,144],[56,98,103,110,112,121,129,140,143,145],[56,98,129,146],[56,98,119,120,153,158,161,162,163,167],[56,98,153,155,161,163],[56,98,153,163,164,165,166],[56,98,153],[56,98,120,130,141,148,152,153,154,155,158,159,160],[56,98,111,147,156,157],[56,98,111,140,147],[56,98,113,140,147,170,171],[56,98,113,129,147],[56,98,147],[56,98,150,151],[56,98,149],[56,98,129,147],[56,65,69,98,140],[56,65,98,129,140],[56,60,98],[56,62,65,98,137,140],[56,98,118,137],[56,60,98,147],[56,62,65,98,118,140],[56,57,58,61,64,98,110,129,140],[56,65,72,98],[56,57,63,98],[56,65,86,87,98],[56,61,65,98,132,140,147],[56,86,98,147],[56,59,60,98,147],[56,65,98],[56,59,60,61,62,63,64,65,66,67,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,98],[56,65,80,98],[56,65,72,73,98],[56,63,65,73,74,98],[56,64,98],[56,57,60,65,98],[56,65,69,73,74,98],[56,69,98],[56,63,65,68,98,140],[56,57,62,65,72,98],[56,98,129],[56,60,65,86,98,145,147],[56,98,173,174,175,176,177,178,179,181,182,183,184,185,186,187,188],[56,98,173],[56,98,173,180]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"2d1319e6b5d0efd8c5eae07eb864a00102151e8b9afddd2d45db52e9aae002c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"ca6d304b929748ea15c33f28c1f159df18a94470b424ab78c52d68d40a41e1e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"a72ffc815104fb5c075106ebca459b2d55d07862a773768fce89efc621b3964b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"d674383111e06b6741c4ad2db962131b5b0fa4d0294b998566c635e86195a453","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f77d9188e41291acf14f476e931972460a303e1952538f9546e7b370cb8d0d20","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"4d7da7075068195f8f127f41c61e304cdca5aafb1be2d0f4fb67c6b4c3e98d50","affectsGlobalScope":true,"impliedFormat":1},{"version":"a4bdde4e601e9554a844e1e0d0ccfa05e183ef9d82ab3ac25f17c1709033d360","impliedFormat":1},{"version":"ad23fd126ff06e72728dd7bfc84326a8ca8cec2b9d2dac0193d42a777df0e7d8","impliedFormat":1},{"version":"9dd9f50652a176469e85fb65aa081d2e7eb807e2c476f378233de4f1f6604962","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"7edec695cdb707c7146ac34c44ca364469c7ea504344b3206c686e79f61b61a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"a20f1e119615bf7632729fd89b6c0b5ffdc2df3b512d6304146294528e3ebe19","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"235bfb54b4869c26f7e98e3d1f68dbfc85acf4cf5c38a4444a006fbf74a8a43d","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"bb715efb4857eb94539eafb420352105a0cff40746837c5140bf6b035dd220ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"fdedf82878e4c744bc2a1c1e802ae407d63474da51f14a54babe039018e53d8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"08353b04a3501d84fc8d7b49de99f6c1cc26026e6d9d697a18315f3bfe92ed03","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"efeedd8bbc5c0d53e760d8b120a010470722982e6ae14de8d1bcff66ebc2ae71","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"9091e564b81e7b4c382a33c62de704a699e10508190547d4f7c1c3e039d2db2b","impliedFormat":1},{"version":"8bc5119510ceac11aafc0b41d96cf67e684fbe003ce6be4c79bf7ba2ea9bf03d","impliedFormat":1},{"version":"32304e5602c24dac53b875caf8ac14897df52a675893dcc4c798e9e1dd3c5307","impliedFormat":1},{"version":"f50448f0a8ad63a6c3a036a09340acc41658ff2e55d84266a0f58ab5ef2ae527","impliedFormat":1},{"version":"f9ef98f7d1c2ec0f46dc858fc4274d633af45f29f8c25d4097ed987ee933c7c4","impliedFormat":1},{"version":"442904a00f3ab3f7b014054ce356011cdafa893cb3d2c62a98ee033a9e673cc4","impliedFormat":1},{"version":"697663a5a842dc8b85bb477515994d7aeace25a80b40a50b01f68b7e5dc62746","signature":"37aa88cb88770b5d9775e1463c29ac987f49f8085b6829d5eee109d8da481d0d"},{"version":"a8a99199eb0a778f62f9cd8029afda48560e8bbdfac0227a2a1972697f88f68c","impliedFormat":1},{"version":"7584239b853f690c6629ae8bb683ded6ff33104e7835778bbca5ee1b1d9a0a91","impliedFormat":99},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"169cc96316cacf8b489aaab4ac6bcef7b33e8779a8902bce57c737b4aa372d16","impliedFormat":1},{"version":"e749bbd37dadf82c9833278780527c717226e1e2c9bc7b2576c8ec1c40ec5647","impliedFormat":1},{"version":"caf2e5f8dad2530fe16a60f73190a3bd3ea225373e51f2d45b755d33f5ceeeb4","signature":"5ccf07d573206118260fa7dc807e42b724038bece56ba6fbbcf8ec2555ede420"},{"version":"9f91eee81fda27d38d60963fe1de2f050a5cfb241af56b7e7ee6d9aa8522a058","impliedFormat":1},{"version":"2abcd96629d7ab34220ff3f3d70a55789ea63ab75d11484883958ce2ccee0276","signature":"b053c1d5fed15b399eec92c083e23706735bdc09ba80d72e3ce2663aeee947cf"},{"version":"6e0b26306ac5357ae0911656897735e075b72104c05559b7b27619ab9b6e72b1","signature":"e44f36192b30e1b71b85fc255c00caa8625a45d2a6859b53e6374bf81d22ac55"},{"version":"e3474eb1e43eba3e2eaa295e31f8f82a136c67a8a8ef49c016b3595d1551d1a8","signature":"b1cbf4e2b63c0bb5b9d9cc6d8031f30ef514d5bf6e6c2de24289d098569a4a08"},{"version":"4fd7e9e188fac3073d060197b92e1112074bd0e8620a59cf4b83902768eb4c55","signature":"090a08ef01aad8c096b2ff5484946c23cb51402e61ee643af145156abeaba06b"},{"version":"72c0fd3b36cae1395b145f1afc3042c8ccae02b20b1d9e5308451906ec5e4a8c","signature":"b84aa2616515e0f321f50bd0ccc5893181076ed08aab01e619903df0c40402bf"},{"version":"7118bd2c6cff4cc3ca9e6cc636a20023d0ea1de2f28837387d923edff40916da","signature":"7705d4fb9619f8eb448947ef0cdf7d9d0a602c7c4181403f5cce76338537ad3b"},{"version":"460627dd2a599c2664d6f9e81ed4765ef520dc2786551d9dcab276df57b98c02","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"4340936f4e937c452ae783514e7c7bbb7fc06d0c97993ff4865370d0962bb9cf","impliedFormat":1},{"version":"b70c7ea83a7d0de17a791d9b5283f664033a96362c42cc4d2b2e0bdaa65ef7d1","impliedFormat":1},{"version":"a65cf458c879172bef4012d3397612e7357bf72971b09db5bb5bf8fca0957612","impliedFormat":1},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":1},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":1},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":1},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":1},{"version":"d128037db3a40d1d8ae8ec36431e6a4678df56d236729f620e58f4a37f9f33d0","impliedFormat":1},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":1},{"version":"9985141f349552055b7b6b5082384fdbc1758ba14ff51fada049347628b4e018","impliedFormat":1},{"version":"c3b65655e9b7b290340f3a1c73c7e02907dd290a288de5e62726350da39b96b1","impliedFormat":1},{"version":"c0398181fff2b85eef72a8abfad6a8b31bc5989a3a763fd3d0fd61154e55bcfc","impliedFormat":1},{"version":"89daadaa769a9bf8c1fa26a464e06459197a5914ed42702e1ce439bb5915b767","impliedFormat":1},{"version":"83af685afea5d13d6cd6a8db34aba9aec7962c289bb6c92e770e838e7d5faec9","impliedFormat":1},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":1},{"version":"b99abb32e0aa47c71bf14b6bd2ebc526a4afcee1553c157e49864e41868bdfa4","impliedFormat":1},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":1},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":1},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":1}],"root":[153,161,[163,168]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":6,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[95,1],[96,1],[97,2],[98,3],[99,4],[100,5],[51,6],[54,7],[52,6],[53,6],[101,8],[102,9],[103,10],[104,11],[105,12],[106,13],[107,13],[109,14],[108,15],[110,16],[111,17],[112,18],[94,19],[113,20],[114,21],[115,22],[116,23],[117,24],[118,25],[119,26],[120,27],[121,28],[122,29],[123,30],[124,31],[125,32],[126,32],[127,33],[128,6],[129,34],[131,35],[130,36],[132,37],[133,38],[134,39],[135,40],[136,41],[137,42],[138,43],[56,44],[55,6],[147,45],[139,46],[140,47],[141,48],[142,49],[143,50],[144,51],[145,52],[146,53],[168,54],[166,55],[167,56],[165,55],[164,55],[163,57],[153,6],[161,58],[169,6],[158,59],[156,60],[157,6],[159,6],[171,6],[172,61],[155,6],[170,62],[148,63],[162,6],[152,64],[150,65],[149,6],[151,6],[160,66],[154,6],[48,6],[49,6],[10,6],[8,6],[9,6],[14,6],[13,6],[2,6],[15,6],[16,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[3,6],[23,6],[4,6],[24,6],[28,6],[25,6],[26,6],[27,6],[29,6],[30,6],[31,6],[5,6],[32,6],[33,6],[34,6],[35,6],[6,6],[39,6],[36,6],[37,6],[38,6],[40,6],[7,6],[41,6],[50,6],[46,6],[47,6],[42,6],[43,6],[44,6],[45,6],[1,6],[12,6],[11,6],[72,67],[82,68],[71,67],[92,69],[63,70],[62,71],[91,63],[85,72],[90,73],[65,74],[79,75],[64,76],[88,77],[60,78],[59,63],[89,79],[61,80],[66,81],[67,6],[70,81],[57,6],[93,82],[83,83],[74,84],[75,85],[77,86],[73,87],[76,88],[86,63],[68,89],[69,90],[78,91],[58,92],[81,83],[80,81],[84,6],[87,93],[189,94],[174,6],[175,6],[176,6],[177,6],[173,6],[178,95],[179,6],[181,96],[180,95],[182,95],[183,96],[184,95],[185,6],[186,95],[187,6],[188,6]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.6.3"} \ No newline at end of file diff --git a/extractor/package.json b/extractor/package.json index 828462e..440346e 100644 --- a/extractor/package.json +++ b/extractor/package.json @@ -9,7 +9,7 @@ "dist" ], "scripts": { - "build": "tsc", + "build": "tsc --build && tsc-alias -p tsconfig.json", "start": "node dist/index.js", "dev": "tsc --watch" }, @@ -30,6 +30,7 @@ "@types/node": "^20.14.11", "@types/uuid": "^11.0.0", "nodemon": "^3.1.7", + "tsc-alias": "^1.8.8", "typescript": "^5.6.3" } } diff --git a/extractor/src/autoschema/autogenerateSchema.d.ts b/extractor/src/autoschema/autogenerateSchema.d.ts new file mode 100644 index 0000000..b6d677c --- /dev/null +++ b/extractor/src/autoschema/autogenerateSchema.d.ts @@ -0,0 +1,8 @@ +import { SchemaField } from '../utils/convertToZodSchema.js'; +type AutoSchemaOption = boolean | { + instructions: string; +}; +export declare function autogenerateSchema(markdown: string, model: string, autoSchema: AutoSchemaOption): Promise; +export declare const autoschema: typeof autogenerateSchema; +export {}; +//# sourceMappingURL=autogenerateSchema.d.ts.map \ No newline at end of file diff --git a/extractor/src/autoschema/autogenerateSchema.d.ts.map b/extractor/src/autoschema/autogenerateSchema.d.ts.map new file mode 100644 index 0000000..c6156d2 --- /dev/null +++ b/extractor/src/autoschema/autogenerateSchema.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"autogenerateSchema.d.ts","sourceRoot":"","sources":["autogenerateSchema.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAG7D,KAAK,gBAAgB,GAAG,OAAO,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,WAAW,EAAE,CAAC,CA0BxB;AAiED,eAAO,MAAM,UAAU,2BAAqB,CAAC"} \ No newline at end of file diff --git a/extractor/src/autoschema/autogenerateSchema.js b/extractor/src/autoschema/autogenerateSchema.js new file mode 100644 index 0000000..26bc9fc --- /dev/null +++ b/extractor/src/autoschema/autogenerateSchema.js @@ -0,0 +1,69 @@ +import { getExtractor } from '../extractors/index.js'; +import { googleExtractor } from '../extractors/google.js'; +import { AUTO_SCHEMA_PROMPT, INSTRUCTIONS_SCHEMA_PROMPT } from "../prompts.js"; +import { baseSchema } from './generation-schemas/base.js'; +import { secondarySchema } from './generation-schemas/secondary.js'; +import { cleanSchemaFields } from "./cleanSchemaFields.js"; +import { z } from 'zod'; +export async function autogenerateSchema(markdown, model, autoSchema) { + if (autoSchema === true) { + return await blanketSchema(markdown, model); + } + if (typeof autoSchema === "object" && + autoSchema !== null) { + const keys = Object.keys(autoSchema); + if (keys.length !== 1 || keys[0] !== "instructions") { + throw new Error("autoSchema object must only have a single 'instructions' property"); + } + if (typeof autoSchema.instructions !== "string" || !autoSchema.instructions.trim()) { + throw new Error("Instructions can't be empty"); + } + return await instructionBasedSchema(markdown, model, autoSchema.instructions); + } + return await blanketSchema(markdown, model); +} +async function blanketSchema(markdown, model) { + const extraction = getExtractor(model); + const schemaToUse = extraction === googleExtractor ? secondarySchema : baseSchema; + const result = await extraction({ + markdown, + zodSchema: schemaToUse, + prompt: AUTO_SCHEMA_PROMPT(markdown), + model: model, + }); + if (!result || !result.fields) { + throw new Error("Error auto generating default schema."); + } + return cleanSchemaFields(result.fields); +} +async function instructionBasedSchema(markdown, model, instructions) { + const instructionsZod = z.object({ + fields: z.array(z.string()), + }); + const instructionPrompt = ` + Extract the name of the fields the user wants to extract. + `; + const extraction = getExtractor(model); + const instructionFields = await extraction({ + markdown: instructions, + zodSchema: instructionsZod, + prompt: instructionPrompt, + model: model, + }); + if (!instructionFields || !instructionFields.fields) { + throw new Error("Error identifying the fields to be extracted."); + } + const data = instructionFields.fields; + const schemaToUse = extraction === googleExtractor ? secondarySchema : baseSchema; + const result = await extraction({ + markdown, + zodSchema: schemaToUse, + prompt: INSTRUCTIONS_SCHEMA_PROMPT(markdown, data), + model: model, + }); + if (!result || !result.fields) { + throw new Error("Error auto generating specified schema."); + } + return cleanSchemaFields(result.fields); +} +export const autoschema = autogenerateSchema; diff --git a/extractor/src/autoschema/cleanSchemaFields.d.ts b/extractor/src/autoschema/cleanSchemaFields.d.ts new file mode 100644 index 0000000..2e23e52 --- /dev/null +++ b/extractor/src/autoschema/cleanSchemaFields.d.ts @@ -0,0 +1,3 @@ +import { SchemaField } from '../utils/convertToZodSchema.js'; +export declare function cleanSchemaFields(fields: SchemaField[]): SchemaField[]; +//# sourceMappingURL=cleanSchemaFields.d.ts.map \ No newline at end of file diff --git a/extractor/src/autoschema/cleanSchemaFields.d.ts.map b/extractor/src/autoschema/cleanSchemaFields.d.ts.map new file mode 100644 index 0000000..097aaca --- /dev/null +++ b/extractor/src/autoschema/cleanSchemaFields.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"cleanSchemaFields.d.ts","sourceRoot":"","sources":["cleanSchemaFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CASpE"} \ No newline at end of file diff --git a/extractor/src/autoschema/cleanSchemaFields.js b/extractor/src/autoschema/cleanSchemaFields.js new file mode 100644 index 0000000..3d0a7bc --- /dev/null +++ b/extractor/src/autoschema/cleanSchemaFields.js @@ -0,0 +1,11 @@ +export function cleanSchemaFields(fields) { + return fields.map((f) => { + if (f.children && f.children.length === 0) { + delete f.children; + } + else if (f.children) { + f.children = cleanSchemaFields(f.children); + } + return f; + }); +} diff --git a/extractor/src/autoschema/generation-schemas/base.d.ts b/extractor/src/autoschema/generation-schemas/base.d.ts new file mode 100644 index 0000000..0e1755b --- /dev/null +++ b/extractor/src/autoschema/generation-schemas/base.d.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; +export declare const baseSchema: z.ZodObject<{ + fields: z.ZodArray, "many">; +}, "strip", z.ZodTypeAny, { + fields: any[]; +}, { + fields: any[]; +}>; +//# sourceMappingURL=base.d.ts.map \ No newline at end of file diff --git a/extractor/src/autoschema/generation-schemas/base.d.ts.map b/extractor/src/autoschema/generation-schemas/base.d.ts.map new file mode 100644 index 0000000..8ce60da --- /dev/null +++ b/extractor/src/autoschema/generation-schemas/base.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,UAAU;;;;;;EAErB,CAAC"} \ No newline at end of file diff --git a/extractor/src/autoschema/generation-schemas/base.js b/extractor/src/autoschema/generation-schemas/base.js new file mode 100644 index 0000000..d8294f3 --- /dev/null +++ b/extractor/src/autoschema/generation-schemas/base.js @@ -0,0 +1,11 @@ +// Used for non-google models that don't have schema limitations +import { z } from "zod"; +const SchemaField = z.lazy(() => z.object({ + name: z.string(), + type: z.enum(["string", "number", "array", "object"]), + description: z.string().optional(), + children: z.array(SchemaField).optional(), +})); +export const baseSchema = z.object({ + fields: z.array(SchemaField), +}); diff --git a/extractor/src/autoschema/generation-schemas/secondary.d.ts b/extractor/src/autoschema/generation-schemas/secondary.d.ts new file mode 100644 index 0000000..c735a31 --- /dev/null +++ b/extractor/src/autoschema/generation-schemas/secondary.d.ts @@ -0,0 +1,63 @@ +import { z } from "zod"; +export declare const secondarySchema: z.ZodObject<{ + fields: z.ZodArray; + description: z.ZodOptional; + }, { + children: z.ZodOptional; + description: z.ZodOptional; + }, "strip", z.ZodTypeAny, { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + }, { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + }>, "many">>; + }>, "strip", z.ZodTypeAny, { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + children?: { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + }[] | undefined; + }, { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + children?: { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + }[] | undefined; + }>, "many">; +}, "strip", z.ZodTypeAny, { + fields: { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + children?: { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + }[] | undefined; + }[]; +}, { + fields: { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + children?: { + type: "string" | "number" | "object" | "array"; + name: string; + description?: string | undefined; + }[] | undefined; + }[]; +}>; +//# sourceMappingURL=secondary.d.ts.map \ No newline at end of file diff --git a/extractor/src/autoschema/generation-schemas/secondary.d.ts.map b/extractor/src/autoschema/generation-schemas/secondary.d.ts.map new file mode 100644 index 0000000..a49cfdf --- /dev/null +++ b/extractor/src/autoschema/generation-schemas/secondary.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"secondary.d.ts","sourceRoot":"","sources":["secondary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE1B,CAAC"} \ No newline at end of file diff --git a/extractor/src/autoschema/generation-schemas/secondary.js b/extractor/src/autoschema/generation-schemas/secondary.js new file mode 100644 index 0000000..a8ea0eb --- /dev/null +++ b/extractor/src/autoschema/generation-schemas/secondary.js @@ -0,0 +1,13 @@ +// Used for google models +import { z } from "zod"; +const BaseSchemaField = z.object({ + name: z.string(), + type: z.enum(["string", "number", "array", "object"]), + description: z.string().optional(), +}); +const SchemaField = BaseSchemaField.extend({ + children: z.array(BaseSchemaField).optional(), +}); +export const secondarySchema = z.object({ + fields: z.array(SchemaField), +}); diff --git a/extractor/src/converter.ts b/extractor/src/converter.ts index c3afb7d..7d50fb4 100644 --- a/extractor/src/converter.ts +++ b/extractor/src/converter.ts @@ -1,4 +1,4 @@ -import { documind, ModelOptions } from 'core'; +import { documind, type ModelOptions } from 'core'; import { generateMarkdownDocument } from './utils/generateMarkdown.js'; interface ConvertFileResult { diff --git a/extractor/src/extractors/google.d.ts b/extractor/src/extractors/google.d.ts new file mode 100644 index 0000000..0103748 --- /dev/null +++ b/extractor/src/extractors/google.d.ts @@ -0,0 +1,10 @@ +import { ZodObject, ZodRawShape } from "zod"; +interface ExtractorParams { + markdown: string; + zodSchema: ZodObject; + prompt: string; + model: string; +} +export declare const googleExtractor: ({ markdown, zodSchema, prompt, model }: ExtractorParams) => Promise; +export {}; +//# sourceMappingURL=google.d.ts.map \ No newline at end of file diff --git a/extractor/src/extractors/google.d.ts.map b/extractor/src/extractors/google.d.ts.map new file mode 100644 index 0000000..7959d61 --- /dev/null +++ b/extractor/src/extractors/google.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["google.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAE7C,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,2CAAkD,eAAe,KAAG,OAAO,CAAC,GAAG,CAyC1G,CAAA"} \ No newline at end of file diff --git a/extractor/src/extractors/google.js b/extractor/src/extractors/google.js new file mode 100644 index 0000000..7cb7e42 --- /dev/null +++ b/extractor/src/extractors/google.js @@ -0,0 +1,36 @@ +import { GoogleGenerativeAI } from "@google/generative-ai"; +import { zodToJsonSchema } from "zod-to-json-schema"; +export const googleExtractor = async ({ markdown, zodSchema, prompt, model }) => { + if (!process.env.GEMINI_API_KEY) { + throw new Error("Missing GEMINI_API_KEY"); + } + const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); + const googleModel = model; + // Convert Zod schema to JSON schema + let jsonSchema = zodToJsonSchema(zodSchema); + // Remove additionalProperties and $schema keys + const removeKeys = (obj) => { + if (Array.isArray(obj)) { + return obj.map(removeKeys); + } + else if (typeof obj === "object" && obj !== null) { + return Object.fromEntries(Object.entries(obj) + .filter(([key]) => key !== "additionalProperties" && key !== "$schema") + .map(([key, value]) => [key, removeKeys(value)])); + } + return obj; + }; + jsonSchema = removeKeys(jsonSchema); + const modelToUse = genAI.getGenerativeModel({ + model: googleModel, + systemInstruction: prompt, + generationConfig: { + responseMimeType: "application/json", + responseSchema: jsonSchema, + }, + }); + const result = await modelToUse.generateContent(markdown); + //console.log(result.response.text()); + const event = JSON.parse(result.response.text()); + return event; +}; diff --git a/extractor/src/extractors/index.d.ts b/extractor/src/extractors/index.d.ts new file mode 100644 index 0000000..c34a6a7 --- /dev/null +++ b/extractor/src/extractors/index.d.ts @@ -0,0 +1,13 @@ +import { ZodObject, ZodRawShape } from "zod"; +export declare const OpenAIModels: string[]; +export declare const LocalModels: string[]; +export declare const GoogleModels: string[]; +export interface ExtractorParams { + markdown: string; + zodSchema: ZodObject; + prompt: string; + model: string; +} +export type ExtractorFunction = (params: ExtractorParams) => Promise; +export declare function getExtractor(model: string): ExtractorFunction; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/extractor/src/extractors/index.d.ts.map b/extractor/src/extractors/index.d.ts.map new file mode 100644 index 0000000..d03881d --- /dev/null +++ b/extractor/src/extractors/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAE7C,eAAO,MAAM,YAAY,UAAuD,CAAC;AACjF,eAAO,MAAM,WAAW,UAAsB,CAAC;AAC/C,eAAO,MAAM,YAAY,UAMxB,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE1E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAc7D"} \ No newline at end of file diff --git a/extractor/src/extractors/index.js b/extractor/src/extractors/index.js new file mode 100644 index 0000000..b4bb0c2 --- /dev/null +++ b/extractor/src/extractors/index.js @@ -0,0 +1,24 @@ +import { ollamaExtractor } from "./ollama.js"; +import { openAIExtractor } from "./openAI.js"; +import { googleExtractor } from "./google.js"; +export const OpenAIModels = ["gpt-4o", "gpt-4o-mini", "gpt-4.1", "gpt-4.1-mini"]; +export const LocalModels = ["llama3.2-vision"]; +export const GoogleModels = [ + "gemini-2.0-flash-001", + "gemini-2.0-flash-lite-preview-02-05", + "gemini-1.5-flash", + "gemini-1.5-flash-8b", + "gemini-1.5-pro" +]; +export function getExtractor(model) { + if (OpenAIModels.includes(model)) { + return openAIExtractor; + } + if (GoogleModels.includes(model)) { + return googleExtractor; + } + if (LocalModels.includes(model)) { + return ollamaExtractor; + } + throw new Error(`Unrecognised model '${model}'.`); +} diff --git a/extractor/src/extractors/ollama.d.ts b/extractor/src/extractors/ollama.d.ts new file mode 100644 index 0000000..e1019a9 --- /dev/null +++ b/extractor/src/extractors/ollama.d.ts @@ -0,0 +1,10 @@ +import { ZodObject, ZodRawShape } from "zod"; +interface ExtractorParams { + markdown: string; + zodSchema: ZodObject; + prompt: string; + model: string; +} +export declare const ollamaExtractor: ({ markdown, zodSchema, prompt, model }: ExtractorParams) => Promise; +export {}; +//# sourceMappingURL=ollama.d.ts.map \ No newline at end of file diff --git a/extractor/src/extractors/ollama.d.ts.map b/extractor/src/extractors/ollama.d.ts.map new file mode 100644 index 0000000..1a12e7b --- /dev/null +++ b/extractor/src/extractors/ollama.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["ollama.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAE7C,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,2CAAkD,eAAe,KAAG,OAAO,CAAC,GAAG,CAuB1G,CAAA"} \ No newline at end of file diff --git a/extractor/src/extractors/ollama.js b/extractor/src/extractors/ollama.js new file mode 100644 index 0000000..9868034 --- /dev/null +++ b/extractor/src/extractors/ollama.js @@ -0,0 +1,22 @@ +import OpenAI from "openai"; +import { zodResponseFormat } from "openai/helpers/zod"; +export const ollamaExtractor = async ({ markdown, zodSchema, prompt, model }) => { + if (!process.env.BASE_URL) { + throw new Error("Missing BASE_URL"); + } + const openai = new OpenAI({ + baseURL: process.env.BASE_URL, + apiKey: 'ollama' + }); + const ollamaModel = model; + const completion = await openai.beta.chat.completions.parse({ + model: ollamaModel, + messages: [ + { role: "system", content: prompt }, + { role: "user", content: markdown }, + ], + response_format: zodResponseFormat(zodSchema, "event"), + }); + const event = completion.choices[0].message.parsed; + return event; +}; diff --git a/extractor/src/extractors/openAI.d.ts b/extractor/src/extractors/openAI.d.ts new file mode 100644 index 0000000..7ec05d0 --- /dev/null +++ b/extractor/src/extractors/openAI.d.ts @@ -0,0 +1,10 @@ +import { ZodObject, ZodRawShape } from "zod"; +interface ExtractorParams { + markdown: string; + zodSchema: ZodObject; + prompt: string; + model: string; +} +export declare const openAIExtractor: ({ markdown, zodSchema, prompt, model }: ExtractorParams) => Promise; +export {}; +//# sourceMappingURL=openAI.d.ts.map \ No newline at end of file diff --git a/extractor/src/extractors/openAI.d.ts.map b/extractor/src/extractors/openAI.d.ts.map new file mode 100644 index 0000000..ea66b3f --- /dev/null +++ b/extractor/src/extractors/openAI.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"openAI.d.ts","sourceRoot":"","sources":["openAI.ts"],"names":[],"mappings":"AAEA,OAAO,EAAK,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAEhD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,2CAAkD,eAAe,KAAG,OAAO,CAAC,GAAG,CAmB1G,CAAA"} \ No newline at end of file diff --git a/extractor/src/extractors/openAI.js b/extractor/src/extractors/openAI.js new file mode 100644 index 0000000..ad33755 --- /dev/null +++ b/extractor/src/extractors/openAI.js @@ -0,0 +1,19 @@ +import OpenAI from "openai"; +import { zodResponseFormat } from "openai/helpers/zod"; +export const openAIExtractor = async ({ markdown, zodSchema, prompt, model }) => { + if (!process.env.OPENAI_API_KEY) { + throw new Error("Missing OPENAI_API_KEY"); + } + const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); + const openAiModel = model; + const completion = await openai.beta.chat.completions.parse({ + model: openAiModel, + messages: [ + { role: "system", content: prompt }, + { role: "user", content: markdown }, + ], + response_format: zodResponseFormat(zodSchema, "event"), + }); + const event = completion.choices[0].message.parsed; + return event; +}; diff --git a/extractor/src/services/extract.d.ts b/extractor/src/services/extract.d.ts new file mode 100644 index 0000000..f8d2095 --- /dev/null +++ b/extractor/src/services/extract.d.ts @@ -0,0 +1,24 @@ +import { SchemaField } from '../utils/convertToZodSchema.js'; +export interface ExtractOptions { + file: string; + schema?: SchemaField[]; + template?: string; + model?: string; + autoSchema?: boolean | { + instructions?: string; + }; +} +export interface ExtractResult { + success: boolean; + pages: number; + data: any; + fileName: string; + markdown: string; +} +/** + * Extracts data from a document based on a provided schema. + * @param options - Options for the extraction process. + * @returns - The result of the extraction, including pages, extracted data, and file name. + */ +export declare function extract({ file, schema, template, model, autoSchema }: ExtractOptions): Promise; +//# sourceMappingURL=extract.d.ts.map \ No newline at end of file diff --git a/extractor/src/services/extract.d.ts.map b/extractor/src/services/extract.d.ts.map new file mode 100644 index 0000000..c33ae6f --- /dev/null +++ b/extractor/src/services/extract.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["extract.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAMjF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA6DnH"} \ No newline at end of file diff --git a/extractor/src/services/extract.js b/extractor/src/services/extract.js new file mode 100644 index 0000000..1c3fee6 --- /dev/null +++ b/extractor/src/services/extract.js @@ -0,0 +1,68 @@ +import { isValidFile } from '../utils/fileValidator.js'; +import { validateSchema } from '../utils/schemaValidator.js'; +import { getTemplate } from './templates.js'; +import { convertToZodSchema } from '../utils/convertToZodSchema.js'; +import { autogenerateSchema } from "../autoschema/autogenerateSchema.js"; +import { convertFile } from '../converter.js'; +import { BASE_EXTRACTION_PROMPT } from "../prompts.js"; +import { getExtractor } from '../extractors/index.js'; +/** + * Extracts data from a document based on a provided schema. + * @param options - Options for the extraction process. + * @returns - The result of the extraction, including pages, extracted data, and file name. + */ +export async function extract({ file, schema, template, model, autoSchema }) { + try { + const defaultModel = model || "gpt-4o-mini"; + if (!file) { + throw new Error("File is required."); + } + if (!isValidFile(file)) { + throw new Error("Invalid file type."); + } + let finalSchema = null; + if (template) { + finalSchema = getTemplate(template); + } + else if (schema) { + const { isValid, errors } = validateSchema(schema); + if (!isValid) { + throw new Error(`Invalid schema: ${errors.join(", ")}`); + } + finalSchema = schema; + } + else if (!autoSchema) { + throw new Error("You must provide a schema, template, or enable autoSchema."); + } + const { markdown, totalPages, fileName } = await convertFile(file, defaultModel); + if (autoSchema) { + const autoSchemaOption = autoSchema === true ? true : { instructions: autoSchema.instructions || "" }; + finalSchema = await autogenerateSchema(markdown, defaultModel, autoSchemaOption); + if (!finalSchema) { + throw new Error("Failed to auto-generate schema."); + } + } + if (!finalSchema) { + throw new Error("No schema available for extraction."); + } + const dynamicZodSchema = convertToZodSchema(finalSchema); + const extraction = getExtractor(defaultModel); + const event = await extraction({ + markdown, + zodSchema: dynamicZodSchema, + prompt: BASE_EXTRACTION_PROMPT, + model: defaultModel, + }); + return { + success: true, + pages: totalPages, + data: event, + fileName, + markdown, + }; + } + catch (error) { + console.error("Error processing document:", error); + throw new Error(`Failed to process document: ${error.message}`); + } +} diff --git a/extractor/src/services/formatter.d.ts b/extractor/src/services/formatter.d.ts new file mode 100644 index 0000000..e1071ad --- /dev/null +++ b/extractor/src/services/formatter.d.ts @@ -0,0 +1,13 @@ +interface FormatterOptions { + file: string; + model?: string; +} +/** + * Formatter object for various formats. + */ +export declare const formatter: { + markdown: ({ file, model }: FormatterOptions) => Promise; + plaintext: ({ file, model }: FormatterOptions) => Promise; +}; +export {}; +//# sourceMappingURL=formatter.d.ts.map \ No newline at end of file diff --git a/extractor/src/services/formatter.d.ts.map b/extractor/src/services/formatter.d.ts.map new file mode 100644 index 0000000..6cd09b4 --- /dev/null +++ b/extractor/src/services/formatter.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["formatter.ts"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8CD;;GAEG;AACH,eAAO,MAAM,SAAS;gCA1CsB,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAAC;iCA6BjC,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAAC;CAgB9E,CAAC"} \ No newline at end of file diff --git a/extractor/src/services/formatter.js b/extractor/src/services/formatter.js new file mode 100644 index 0000000..3c69578 --- /dev/null +++ b/extractor/src/services/formatter.js @@ -0,0 +1,50 @@ +import { convertFile } from '../converter.js'; +import { isPdfFile } from '../utils/pdfValidator.js'; +import { convertToText } from '../utils/convertToText.js'; +/** + * Extracts markdown content from a PDF. + * @param options - Options for extracting the markdown. + * @returns - The markdown content. + */ +const getMarkdown = async ({ file, model }) => { + try { + if (!file) { + throw new Error('File is required.'); + } + const isPdf = await isPdfFile(file); + if (!isPdf) { + throw new Error('File must be a PDF.'); + } + const { markdown } = await convertFile(file, model || "gpt-4o-mini"); + if (!markdown) { + throw new Error("Failed to extract markdown."); + } + return markdown; + } + catch (error) { + console.error("Error extracting markdown:", error); + throw error; + } +}; +/** + * Extracts plain text from a PDF by converting markdown to text. + * @param options - Options for extracting the plain text. + * @returns - The plain text content. + */ +const getPlainText = async ({ file, model }) => { + try { + const markdown = await getMarkdown({ file, model }); + return convertToText(markdown); + } + catch (error) { + console.error("Error extracting plain text:", error); + throw error; + } +}; +/** + * Formatter object for various formats. + */ +export const formatter = { + markdown: getMarkdown, + plaintext: getPlainText, +}; diff --git a/extractor/src/services/templates.d.ts b/extractor/src/services/templates.d.ts new file mode 100644 index 0000000..8bb35b7 --- /dev/null +++ b/extractor/src/services/templates.d.ts @@ -0,0 +1,21 @@ +import { SchemaField } from '../utils/convertToZodSchema.js'; +/** + * Lists all available templates. + * @returns - Array of template names. + */ +export declare function listTemplates(): string[]; +/** + * Retrieves a specific template. + * @param name - The name of the template. + * @returns - The template content. + * @throws - If the template is not found. + */ +export declare function getTemplate(name: string): SchemaField[]; +/** + * Exports available templates. + */ +export declare const templates: { + list: typeof listTemplates; + get: typeof getTemplate; +}; +//# sourceMappingURL=templates.d.ts.map \ No newline at end of file diff --git a/extractor/src/services/templates.d.ts.map b/extractor/src/services/templates.d.ts.map new file mode 100644 index 0000000..de1ddea --- /dev/null +++ b/extractor/src/services/templates.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["templates.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAO7D;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAKxC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAMvD;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;;;CAGrB,CAAC"} \ No newline at end of file diff --git a/extractor/src/services/templates.js b/extractor/src/services/templates.js new file mode 100644 index 0000000..1b6f29c --- /dev/null +++ b/extractor/src/services/templates.js @@ -0,0 +1,36 @@ +import fs from 'fs'; +import * as path from 'path'; +import { fileURLToPath } from 'url'; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const templatesDirectory = path.resolve(__dirname, '../templates'); +/** + * Lists all available templates. + * @returns - Array of template names. + */ +export function listTemplates() { + return fs + .readdirSync(templatesDirectory) + .filter((file) => file.endsWith('.json')) + .map((file) => file.replace('.json', '')); +} +/** + * Retrieves a specific template. + * @param name - The name of the template. + * @returns - The template content. + * @throws - If the template is not found. + */ +export function getTemplate(name) { + const templatePath = path.join(templatesDirectory, `${name}.json`); + if (!fs.existsSync(templatePath)) { + throw new Error(`Template "${name}" not found`); + } + return JSON.parse(fs.readFileSync(templatePath, 'utf8')); +} +/** + * Exports available templates. + */ +export const templates = { + list: listTemplates, + get: getTemplate, +}; diff --git a/extractor/src/utils/convertToText.d.ts b/extractor/src/utils/convertToText.d.ts new file mode 100644 index 0000000..9623778 --- /dev/null +++ b/extractor/src/utils/convertToText.d.ts @@ -0,0 +1,2 @@ +export declare const convertToText: (markdown: string) => string; +//# sourceMappingURL=convertToText.d.ts.map \ No newline at end of file diff --git a/extractor/src/utils/convertToText.d.ts.map b/extractor/src/utils/convertToText.d.ts.map new file mode 100644 index 0000000..f216108 --- /dev/null +++ b/extractor/src/utils/convertToText.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"convertToText.d.ts","sourceRoot":"","sources":["convertToText.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,aAAc,MAAM,KAAG,MAoB9C,CAAC"} \ No newline at end of file diff --git a/extractor/src/utils/convertToText.js b/extractor/src/utils/convertToText.js new file mode 100644 index 0000000..65c1219 --- /dev/null +++ b/extractor/src/utils/convertToText.js @@ -0,0 +1,19 @@ +export const convertToText = (markdown) => { + if (!markdown || typeof markdown !== "string") { + throw new Error("Valid markdown content is required."); + } + // Strip markdown syntax and handle tables + const plainText = markdown + .replace(/(\*\*|__)(.*?)\1/g, "$2") // Bold + .replace(/(\*|_)(.*?)\1/g, "$2") // Italic + .replace(/(#+\s)/g, "") // Headings + .replace(/\[(.*?)\]\(.*?\)/g, "$1") // Links + .replace(/!\[(.*?)\]\(.*?\)/g, "$1") // Images + .replace(/(```.*?\n[\s\S]*?\n```|`.*?`)/g, "") // Code blocks/inline + .replace(/>+/g, "") // Blockquotes + .replace(/\n{2,}/g, "\n") // Excess newlines + .replace(/\|([^|]*)\|/g, (_, row) => row.trim()) // Table rows + .replace(/-+/g, "") // Table dividers (---|---) + .trim(); + return plainText; +}; diff --git a/extractor/src/utils/convertToZodSchema.d.ts b/extractor/src/utils/convertToZodSchema.d.ts new file mode 100644 index 0000000..175b13d --- /dev/null +++ b/extractor/src/utils/convertToZodSchema.d.ts @@ -0,0 +1,15 @@ +import { z, ZodTypeAny } from 'zod'; +export interface SchemaField { + name: string; + type: 'string' | 'number' | 'boolean' | 'enum' | 'object' | 'array'; + description?: string; + values?: string[]; + children?: SchemaField[]; +} +/** + * Converts an array of field definitions into a Zod schema. + * @param object - Array of field definitions. + * @returns - A Zod object schema. + */ +export declare const convertToZodSchema: (object: SchemaField[]) => z.ZodObject>; +//# sourceMappingURL=convertToZodSchema.d.ts.map \ No newline at end of file diff --git a/extractor/src/utils/convertToZodSchema.d.ts.map b/extractor/src/utils/convertToZodSchema.d.ts.map new file mode 100644 index 0000000..cfa4634 --- /dev/null +++ b/extractor/src/utils/convertToZodSchema.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"convertToZodSchema.d.ts","sourceRoot":"","sources":["convertToZodSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,WAAY,WAAW,EAAE,KAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAsEhG,CAAC"} \ No newline at end of file diff --git a/extractor/src/utils/convertToZodSchema.js b/extractor/src/utils/convertToZodSchema.js new file mode 100644 index 0000000..70a6e8d --- /dev/null +++ b/extractor/src/utils/convertToZodSchema.js @@ -0,0 +1,66 @@ +import { z } from 'zod'; +/** + * Converts an array of field definitions into a Zod schema. + * @param object - Array of field definitions. + * @returns - A Zod object schema. + */ +export const convertToZodSchema = (object) => { + const createZodSchema = (fields) => { + const schema = {}; + fields.forEach((item) => { + let zodType; + switch (item.type) { + case 'string': + zodType = z.string(); + break; + case 'number': + zodType = z.number(); + break; + case 'boolean': + zodType = z.boolean(); + break; + case 'enum': + if (item.values && Array.isArray(item.values) && item.values.length > 0) { + zodType = z.enum(item.values); + } + else { + throw new Error(`Invalid "enum" type definition for ${item.name}`); + } + break; + case 'object': + if (item.children) { + zodType = z.object(createZodSchema(item.children)); + } + else { + throw new Error(`Invalid "object" type definition for ${item.name}`); + } + break; + case 'array': + if (item.children && item.children.length > 0) { + if (item.children.length === 1) { + const singleChild = item.children[0]; + const childSchema = createZodSchema([singleChild]); + const childType = childSchema[singleChild.name]; + zodType = z.array(childType); + } + else { + const arraySchema = createZodSchema(item.children); + zodType = z.array(z.object(arraySchema)); + } + } + else { + throw new Error(`Invalid or unsupported "array" type definition for ${item.name}`); + } + break; + default: + throw new Error(`Unsupported type "${item.type}" for field ${item.name}`); + } + if (item.description) { + zodType = zodType.describe(item.description); + } + schema[item.name] = zodType; + }); + return schema; + }; + return z.object(createZodSchema(object)); +}; diff --git a/extractor/src/utils/fileValidator.d.ts b/extractor/src/utils/fileValidator.d.ts new file mode 100644 index 0000000..efeb781 --- /dev/null +++ b/extractor/src/utils/fileValidator.d.ts @@ -0,0 +1,7 @@ +/** + * Function to check if a file is valid based on its URL or MIME type + * @param file - The URL to the file + * @returns - Resolves to true if the file is valid, false otherwise + */ +export declare function isValidFile(file: string): Promise; +//# sourceMappingURL=fileValidator.d.ts.map \ No newline at end of file diff --git a/extractor/src/utils/fileValidator.d.ts.map b/extractor/src/utils/fileValidator.d.ts.map new file mode 100644 index 0000000..886cd87 --- /dev/null +++ b/extractor/src/utils/fileValidator.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"fileValidator.d.ts","sourceRoot":"","sources":["fileValidator.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BhE"} \ No newline at end of file diff --git a/extractor/src/utils/fileValidator.js b/extractor/src/utils/fileValidator.js new file mode 100644 index 0000000..d311027 --- /dev/null +++ b/extractor/src/utils/fileValidator.js @@ -0,0 +1,33 @@ +import axios from 'axios'; +/** + * Function to check if a file is valid based on its URL or MIME type + * @param file - The URL to the file + * @returns - Resolves to true if the file is valid, false otherwise + */ +export async function isValidFile(file) { + const allowedExtensions = ['pdf', 'png', 'jpg', 'jpeg', 'txt', 'docx', 'html']; + const allowedMimeTypes = { + pdf: 'application/pdf', + png: 'image/png', + jpg: 'image/jpeg', + jpeg: 'image/jpeg', + txt: 'text/plain', + docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + html: 'text/html', + }; + const urlPath = new URL(file).pathname; + const extensionRegex = new RegExp(`\\.(${allowedExtensions.join('|')})$`, 'i'); + if (!extensionRegex.test(urlPath)) { + return false; + } + // Optional: Check the MIME type if query parameters are used + try { + const response = await axios.head(file); + const contentType = response.headers['content-type']; + return Object.values(allowedMimeTypes).some(mime => contentType.startsWith(mime)); + } + catch (error) { + console.error('Error checking MIME type:', error); + return false; + } +} diff --git a/extractor/src/utils/generateMarkdown.d.ts b/extractor/src/utils/generateMarkdown.d.ts new file mode 100644 index 0000000..c70d6cd --- /dev/null +++ b/extractor/src/utils/generateMarkdown.d.ts @@ -0,0 +1,8 @@ +interface Page { + content: string; + page: number; + contentLength: number; +} +export declare const generateMarkdownDocument: (pages: Page[]) => Promise; +export {}; +//# sourceMappingURL=generateMarkdown.d.ts.map \ No newline at end of file diff --git a/extractor/src/utils/generateMarkdown.d.ts.map b/extractor/src/utils/generateMarkdown.d.ts.map new file mode 100644 index 0000000..cd07449 --- /dev/null +++ b/extractor/src/utils/generateMarkdown.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"generateMarkdown.d.ts","sourceRoot":"","sources":["generateMarkdown.ts"],"names":[],"mappings":"AAAA,UAAU,IAAI;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,wBAAwB,UAAiB,IAAI,EAAE,KAAG,OAAO,CAAC,MAAM,CAW5E,CAAC"} \ No newline at end of file diff --git a/extractor/src/utils/generateMarkdown.js b/extractor/src/utils/generateMarkdown.js new file mode 100644 index 0000000..a32a148 --- /dev/null +++ b/extractor/src/utils/generateMarkdown.js @@ -0,0 +1,12 @@ +export const generateMarkdownDocument = async (pages) => { + try { + // Combine all markdown pages into a single string + const markdownContent = pages.map((page) => page.content).join("\n\n---\n\n"); + // Return the combined markdown string directly + return markdownContent; + } + catch (error) { + console.error('Error generating markdown:', error); + throw error; + } +}; diff --git a/extractor/src/utils/pdfValidator.d.ts b/extractor/src/utils/pdfValidator.d.ts new file mode 100644 index 0000000..92c6319 --- /dev/null +++ b/extractor/src/utils/pdfValidator.d.ts @@ -0,0 +1,7 @@ +/** + * Function to check if a file is a PDF based on its URL or MIME type + * @param file - The URL to the file + * @returns - Resolves to true if the file is a PDF, false otherwise + */ +export declare function isPdfFile(file: string): Promise; +//# sourceMappingURL=pdfValidator.d.ts.map \ No newline at end of file diff --git a/extractor/src/utils/pdfValidator.d.ts.map b/extractor/src/utils/pdfValidator.d.ts.map new file mode 100644 index 0000000..ef2e75d --- /dev/null +++ b/extractor/src/utils/pdfValidator.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pdfValidator.d.ts","sourceRoot":"","sources":["pdfValidator.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB9D"} \ No newline at end of file diff --git a/extractor/src/utils/pdfValidator.js b/extractor/src/utils/pdfValidator.js new file mode 100644 index 0000000..4d13190 --- /dev/null +++ b/extractor/src/utils/pdfValidator.js @@ -0,0 +1,23 @@ +import axios from 'axios'; +/** + * Function to check if a file is a PDF based on its URL or MIME type + * @param file - The URL to the file + * @returns - Resolves to true if the file is a PDF, false otherwise + */ +export async function isPdfFile(file) { + const urlPath = new URL(file).pathname; + const pdfExtensionRegex = /\.pdf$/i; + if (pdfExtensionRegex.test(urlPath)) { + return true; + } + // Optional: Check the MIME type if query parameters are used + try { + const response = await axios.head(file); + const contentType = response.headers['content-type']; + return contentType === 'application/pdf'; + } + catch (error) { + console.error('Error checking MIME type:', error); + return false; + } +} diff --git a/extractor/src/utils/schemaValidator.d.ts b/extractor/src/utils/schemaValidator.d.ts new file mode 100644 index 0000000..7a507fe --- /dev/null +++ b/extractor/src/utils/schemaValidator.d.ts @@ -0,0 +1,13 @@ +import { SchemaField } from './convertToZodSchema.js'; +interface ValidationResult { + isValid: boolean; + errors: string[]; +} +/** + * Validates the schema format to ensure it meets the required structure. + * @param schema - The schema to validate. + * @returns - { isValid: boolean, errors: Array } + */ +export declare function validateSchema(schema: SchemaField[]): ValidationResult; +export {}; +//# sourceMappingURL=schemaValidator.d.ts.map \ No newline at end of file diff --git a/extractor/src/utils/schemaValidator.d.ts.map b/extractor/src/utils/schemaValidator.d.ts.map new file mode 100644 index 0000000..62e2fe7 --- /dev/null +++ b/extractor/src/utils/schemaValidator.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"schemaValidator.d.ts","sourceRoot":"","sources":["schemaValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAyDtE"} \ No newline at end of file diff --git a/extractor/src/utils/schemaValidator.js b/extractor/src/utils/schemaValidator.js new file mode 100644 index 0000000..330fedb --- /dev/null +++ b/extractor/src/utils/schemaValidator.js @@ -0,0 +1,59 @@ +/** + * Validates the schema format to ensure it meets the required structure. + * @param schema - The schema to validate. + * @returns - { isValid: boolean, errors: Array } + */ +export function validateSchema(schema) { + const validTypes = ["string", "number", "array", "object", "boolean", "enum"]; + let errors = []; + if (!Array.isArray(schema)) { + errors.push("Schema must be an array."); + return { isValid: false, errors }; + } + function validateField(field, path) { + if (!field.hasOwnProperty("name") || typeof field.name !== "string" || field.name.trim() === "") { + errors.push(`"name" is required and should be a non-empty string at ${path}`); + } + if (!field.hasOwnProperty("type") || !validTypes.includes(field.type)) { + errors.push(`"type" is required and must be one of ${validTypes.join(", ")} at ${path}`); + } + if (!field.hasOwnProperty("description") || typeof field.description !== "string" || field.description.trim() === "") { + errors.push(`"description" is required and should be a non-empty string at ${path}`); + } + if (field.type === "enum") { + if (!field.hasOwnProperty("values") || !Array.isArray(field.values) || field.values.length === 0) { + errors.push(`"values" is required and must be a non-empty array for enum "${field.name}" at ${path}`); + } + else if (!field.values.every((value) => typeof value === "string")) { + errors.push(`"values" for enum "${field.name}" at ${path} must be an array of strings`); + } + } + if (field.type === "array") { + if (!field.hasOwnProperty("children")) { + errors.push(`"children" property is required for array "${field.name}" at ${path}`); + } + else if (!Array.isArray(field.children) || field.children.length === 0) { + errors.push(`"children" must be a non-empty array for "${field.name}" at ${path}`); + } + else { + field.children.forEach((child, index) => validateField(child, `${path}.children[${index}]`)); + } + } + if (field.type === "object") { + if (!field.hasOwnProperty("children")) { + errors.push(`"children" property is required for object "${field.name}" at ${path}`); + } + else if (!Array.isArray(field.children) || field.children.length === 0) { + errors.push(`"children" must be a non-empty array for "${field.name}" at ${path}`); + } + else { + field.children.forEach((child, index) => validateField(child, `${path}.children[${index}]`)); + } + } + } + schema.forEach((field, index) => validateField(field, `schema[${index}]`)); + return { + isValid: errors.length === 0, + errors, + }; +} diff --git a/extractor/tsconfig.json b/extractor/tsconfig.json index 2a1117a..42e9d4b 100644 --- a/extractor/tsconfig.json +++ b/extractor/tsconfig.json @@ -12,8 +12,16 @@ "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, + "composite": true, + "baseUrl": ".", + "paths": { + "core": ["../core/src/index.ts"] + } }, "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] + "exclude": ["node_modules", "dist"], + "references": [ + { "path": "../core" } + ] } diff --git a/extractor/tsconfig.tsbuildinfo b/extractor/tsconfig.tsbuildinfo new file mode 100644 index 0000000..01bed28 --- /dev/null +++ b/extractor/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2020.full.d.ts","../core/dist/types.d.ts","../core/dist/index.d.ts","./src/utils/generatemarkdown.ts","./src/converter.ts","../node_modules/openai/_shims/manual-types.d.ts","../node_modules/openai/_shims/auto/types.d.ts","../node_modules/openai/streaming.d.ts","../node_modules/openai/error.d.ts","../node_modules/openai/_shims/multipartbody.d.ts","../node_modules/openai/uploads.d.ts","../node_modules/openai/core.d.ts","../node_modules/openai/_shims/index.d.ts","../node_modules/openai/pagination.d.ts","../node_modules/openai/resource.d.ts","../node_modules/openai/resources/completions.d.ts","../node_modules/openai/resources/shared.d.ts","../node_modules/openai/resources/chat/completions.d.ts","../node_modules/openai/resources/chat/chat.d.ts","../node_modules/openai/resources/chat/index.d.ts","../node_modules/openai/resources/audio/speech.d.ts","../node_modules/openai/resources/audio/transcriptions.d.ts","../node_modules/openai/resources/audio/translations.d.ts","../node_modules/openai/resources/audio/audio.d.ts","../node_modules/openai/resources/batches.d.ts","../node_modules/openai/resources/beta/threads/messages.d.ts","../node_modules/openai/resources/beta/threads/runs/steps.d.ts","../node_modules/openai/resources/beta/threads/runs/runs.d.ts","../node_modules/openai/lib/eventstream.d.ts","../node_modules/openai/lib/assistantstream.d.ts","../node_modules/openai/resources/beta/vector-stores/files.d.ts","../node_modules/openai/resources/beta/vector-stores/file-batches.d.ts","../node_modules/openai/resources/beta/vector-stores/vector-stores.d.ts","../node_modules/openai/resources/beta/threads/threads.d.ts","../node_modules/openai/resources/beta/assistants.d.ts","../node_modules/openai/lib/abstractchatcompletionrunner.d.ts","../node_modules/openai/lib/chatcompletionstream.d.ts","../node_modules/openai/lib/parser.d.ts","../node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","../node_modules/openai/lib/jsonschema.d.ts","../node_modules/openai/lib/runnablefunction.d.ts","../node_modules/openai/lib/chatcompletionrunner.d.ts","../node_modules/openai/resources/beta/chat/completions.d.ts","../node_modules/openai/resources/beta/chat/chat.d.ts","../node_modules/openai/resources/beta/beta.d.ts","../node_modules/openai/resources/embeddings.d.ts","../node_modules/openai/resources/files.d.ts","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","../node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","../node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","../node_modules/openai/resources/images.d.ts","../node_modules/openai/resources/models.d.ts","../node_modules/openai/resources/moderations.d.ts","../node_modules/openai/resources/uploads/parts.d.ts","../node_modules/openai/resources/uploads/uploads.d.ts","../node_modules/openai/resources/index.d.ts","../node_modules/openai/index.d.ts","../node_modules/zod/lib/helpers/typealiases.d.ts","../node_modules/zod/lib/helpers/util.d.ts","../node_modules/zod/lib/zoderror.d.ts","../node_modules/zod/lib/locales/en.d.ts","../node_modules/zod/lib/errors.d.ts","../node_modules/zod/lib/helpers/parseutil.d.ts","../node_modules/zod/lib/helpers/enumutil.d.ts","../node_modules/zod/lib/helpers/errorutil.d.ts","../node_modules/zod/lib/helpers/partialutil.d.ts","../node_modules/zod/lib/standard-schema.d.ts","../node_modules/zod/lib/types.d.ts","../node_modules/zod/lib/external.d.ts","../node_modules/zod/lib/index.d.ts","../node_modules/zod/index.d.ts","../node_modules/openai/helpers/zod.d.ts","./src/extractors/ollama.ts","./src/extractors/openai.ts","../node_modules/@google/generative-ai/dist/generative-ai.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/any.d.ts","../node_modules/zod-to-json-schema/dist/types/errormessages.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/array.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/bigint.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/boolean.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/number.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/date.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/enum.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/intersection.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/literal.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/string.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/record.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/map.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/nativeenum.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/never.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/null.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/nullable.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/object.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/set.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/tuple.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/undefined.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/union.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/unknown.d.ts","../node_modules/zod-to-json-schema/dist/types/parsetypes.d.ts","../node_modules/zod-to-json-schema/dist/types/refs.d.ts","../node_modules/zod-to-json-schema/dist/types/options.d.ts","../node_modules/zod-to-json-schema/dist/types/parsedef.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/branded.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/catch.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/default.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/effects.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/optional.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/pipeline.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/promise.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/readonly.d.ts","../node_modules/zod-to-json-schema/dist/types/selectparser.d.ts","../node_modules/zod-to-json-schema/dist/types/zodtojsonschema.d.ts","../node_modules/zod-to-json-schema/dist/types/index.d.ts","./src/extractors/google.ts","./src/extractors/index.ts","./src/prompts.ts","./src/autoschema/generation-schemas/base.ts","./src/autoschema/generation-schemas/secondary.ts","./src/utils/converttozodschema.ts","./src/autoschema/cleanschemafields.ts","./src/autoschema/autogenerateschema.ts","../node_modules/axios/index.d.ts","./src/utils/filevalidator.ts","./src/utils/schemavalidator.ts","./src/services/templates.ts","./src/services/extract.ts","./src/utils/pdfvalidator.ts","./src/utils/converttotext.ts","./src/services/formatter.ts","./src/index.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/ts5.6/globals.typedarray.d.ts","./node_modules/@types/node/ts5.6/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/ts5.6/index.d.ts","../node_modules/@types/diff-match-patch/index.d.ts","../node_modules/@types/jsonfile/index.d.ts","../node_modules/@types/jsonfile/utils.d.ts","../node_modules/@types/fs-extra/index.d.ts","../node_modules/@types/mime-types/index.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/node-fetch/externals.d.ts","../node_modules/@types/node-fetch/index.d.ts","../node_modules/uuid/dist/cjs/types.d.ts","../node_modules/uuid/dist/cjs/max.d.ts","../node_modules/uuid/dist/cjs/nil.d.ts","../node_modules/uuid/dist/cjs/parse.d.ts","../node_modules/uuid/dist/cjs/stringify.d.ts","../node_modules/uuid/dist/cjs/v1.d.ts","../node_modules/uuid/dist/cjs/v1tov6.d.ts","../node_modules/uuid/dist/cjs/v35.d.ts","../node_modules/uuid/dist/cjs/v3.d.ts","../node_modules/uuid/dist/cjs/v4.d.ts","../node_modules/uuid/dist/cjs/v5.d.ts","../node_modules/uuid/dist/cjs/v6.d.ts","../node_modules/uuid/dist/cjs/v6tov1.d.ts","../node_modules/uuid/dist/cjs/v7.d.ts","../node_modules/uuid/dist/cjs/validate.d.ts","../node_modules/uuid/dist/cjs/version.d.ts","../node_modules/uuid/dist/cjs/index.d.ts"],"fileIdsList":[[51,185,231],[185,231],[185,228,231],[185,230,231],[185,231,236,264],[185,231,232,237,242,250,261,272],[185,231,232,233,242,250],[180,181,182,185,231],[185,231,234,273],[185,231,235,236,243,251],[185,231,236,261,269],[185,231,237,239,242,250],[185,230,231,238],[185,231,239,240],[185,231,241,242],[185,230,231,242],[185,231,242,243,244,261,272],[185,231,242,243,244,257,261,264],[185,231,239,242,245,250,261,272],[185,231,242,243,245,246,250,261,269,272],[185,231,245,247,261,269,272],[185,231,242,248],[185,231,249,272,277],[185,231,239,242,250,261],[185,231,251],[185,231,252],[185,230,231,253],[185,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[185,231,255],[185,231,256],[185,231,242,257,258],[185,231,257,259,273,275],[185,231,242,261,262,264],[185,231,263,264],[185,231,261,262],[185,231,264],[185,231,265],[185,228,231,261,266],[185,231,242,267,268],[185,231,267,268],[185,231,236,250,261,269],[185,231,270],[231],[183,184,185,186,187,188,189,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[185,231,250,271],[185,231,245,256,272],[185,231,236,273],[185,231,261,274],[185,231,249,275],[185,231,276],[185,226,231],[185,226,231,242,244,253,261,264,272,275,277],[185,231,261,278],[185,198,202,231,272],[185,198,231,261,272],[185,193,231],[185,195,198,231,269,272],[185,231,250,269],[185,231,279],[185,193,231,279],[185,195,198,231,250,272],[185,190,191,194,197,231,242,261,272],[185,198,205,231],[185,190,196,231],[185,198,219,220,231],[185,194,198,231,264,272,279],[185,219,231,279],[185,192,193,231,279],[185,198,231],[185,192,193,194,195,196,197,198,199,200,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,220,221,222,223,224,225,231],[185,198,213,231],[185,198,205,206,231],[185,196,198,206,207,231],[185,197,231],[185,190,193,198,231],[185,198,202,206,207,231],[185,202,231],[185,196,198,201,231,272],[185,190,195,198,205,231],[185,231,261],[185,193,198,219,231,277,279],[120,163,164,165,166,167,168,169,185,231],[168,185,231],[120,185,231],[52,53,185,231],[120,124,162,185,231],[120,122,123,163,185,231],[106,120,121,185,231],[164,168,170,174,175,178,185,231],[54,164,165,168,170,172,173,174,185,231],[54,176,177,185,231],[168,185,231,243,252,272],[171,185,231],[185,231,243,279,281,282],[185,231,243,272,279],[185,231,245,272,279,285,286],[185,231,245,261,279],[55,56,61,185,231],[57,58,60,62,185,231],[61,185,231],[87,105,120,185,231],[58,60,61,62,63,65,67,68,73,74,94,95,96,99,100,101,102,104,105,185,231],[61,65,67,78,88,90,91,92,106,185,231],[61,62,75,76,77,78,83,84,185,231],[67,85,87,90,106,185,231],[61,62,67,85,92,106,185,231],[62,67,85,86,87,90,106,185,231],[58,185,231],[66,67,92,185,231],[88,89,91,185,231],[106,185,231],[64,70,71,72,185,231],[61,62,64,185,231],[61,64,73,185,231],[61,64,71,73,185,231],[61,63,64,74,185,231],[61,63,64,66,68,75,76,77,82,83,185,231],[64,82,83,84,93,185,231],[64,92,185,231],[61,64,67,85,86,87,88,90,91,185,231],[61,63,64,84,185,231],[57,61,63,64,68,75,76,77,79,83,84,185,231],[61,63,64,76,185,231],[57,61,64,66,68,75,77,79,82,83,84,185,231],[61,63,64,80,82,185,231],[61,63,64,82,185,231],[61,63,64,80,81,185,231],[64,67,185,231],[57,61,64,65,66,67,68,185,231],[67,68,185,231],[57,61,64,65,67,185,231],[61,64,185,231],[61,62,63,64,185,231],[64,98,185,231],[61,63,64,185,231],[61,63,64,97,185,231],[65,66,69,73,74,94,95,96,99,100,101,102,104,185,231],[61,64,96,103,185,231],[62,185,231],[59,61,62,185,231],[185,231,288,289,290,291,292,293,294,296,297,298,299,300,301,302,303],[185,231,288],[185,231,288,295],[148,149,185,231],[125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,185,231],[120,148,149,185,231],[120,126,148,149,185,231],[120,126,149,185,231],[120,126,130,149,150,185,231],[120,149,185,231],[120,136,148,149,185,231],[149,185,231],[120,140,148,149,185,231],[120,133,148,149,185,231],[120,132,135,148,149,185,231],[125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,185,231],[120,148,150,185,231],[119,185,231],[109,110,185,231],[107,108,109,111,112,117,185,231],[108,109,185,231],[118,185,231],[109,185,231],[107,108,109,112,113,114,115,116,185,231],[107,108,119,185,231]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},"37aa88cb88770b5d9775e1463c29ac987f49f8085b6829d5eee109d8da481d0d","cbb776326e71034216189e4c584177f106c5475ab5fe6a3652790130df5391b1",{"version":"922d08af0d1e0c32a03b51d41ece2251b3e0215918e0b981271e992e36ccb6e7","signature":"9bfc8f322fbdc76e99c42da9f1c1ec7522a9f6407bc806cccc68c596565a02df"},{"version":"9d7b8394fc7e878acf32434fce1dde8356105f904cbbc29f18bc592c781837dd","signature":"44bf9925ca1d3e57951a74c61722baabbc6d138d665ea54d84e9ebd3a85ae8a2"},{"version":"b1535397a73ca6046ca08957788a4c9a745730c7b2b887e9b9bc784214f3abac","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"9cce77f4aa9229e1a8da375823124d225b46185586d7c7bc61a3f95c392cf828","impliedFormat":1},{"version":"5c146fcc8545242d9e6a390ddc7702827c169a9d570c820906498bb5260bec14","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"6d4f60a967a88efd2a8c902d9498c74ce746e785665da31244ad029b1ee8fa18","impliedFormat":1},{"version":"408bb46ac61bf543760ad777b3b00193b01b7efe61c2a4be68babe7b5c265a64","impliedFormat":1},{"version":"a41b0df2464cc5044a5ec6aa6ac1eaf33a2feecfb09a8b1ccce2adea426aaccf","impliedFormat":1},{"version":"137272a656222e83280287c3b6b6d949d38e6c125b48aff9e987cf584ff8eb42","impliedFormat":1},{"version":"fd5819941fc3065d5c38be01c851cc3fb3f6166054ae670241d674029c752356","impliedFormat":1},{"version":"ba6adba337b25e665440a9ae1e4fa3eaa0b4862b5f56111195bc022a7a5ea865","impliedFormat":1},{"version":"110c91dffcd07ed84891b937eb8dad0f993c8908183cb8786941de5e76faba05","impliedFormat":1},{"version":"331dfe3a5bb4a416e7fe990172d59569820b3d1d6b4b176d942c1238429b9c3e","impliedFormat":1},{"version":"ebabbecb77f5637f4e22a0a290dfa34cf44f97c41a4497a54c9d74f1d899bf11","impliedFormat":1},{"version":"b044755bc931a564509edff939534c9d6753d151f2cc58bb08cb9cd539bf78a8","impliedFormat":1},{"version":"94ad825309fa0eea0f4a6b14e7b2808897997368196d583d74d7c05f55e98645","impliedFormat":1},{"version":"9854283bb96e17e0d00a7286f96ceca60bb2bcc90ef67c2266752c9434ac9dfc","impliedFormat":1},{"version":"e33b51541cfc41a1414923cdc315aa25a534873b587d263905b8900a3de73dab","impliedFormat":1},{"version":"ba7915b80c71c7474c861cb62372ad8ee3a30f2e30e769acec8346dd7b0e8f32","impliedFormat":1},{"version":"23f2b38efd3e6372eb728e59603dd8dd364713810fb8a8ebf255a0fb4a33a4be","impliedFormat":1},{"version":"29f6dcb986ed66d50346c385a556d6fcf41184a737e211618b8ec75965a1b0bd","impliedFormat":1},{"version":"def6e7d052efb197bd1bdac9290f9d2a01d1348c6b5323584fc52e82cc148631","impliedFormat":1},{"version":"ba64b14db9d08613474dc7c06d8ffbcb22a00a4f9d2641b2dcf97bc91da14275","impliedFormat":1},{"version":"530197974beb0a02c5a9eb7223f03e27651422345c8c35e1a13ddc67e6365af5","impliedFormat":1},{"version":"d38807fdc876ccd09b434e91594c981c7246b0f9a370ce2dc505c3b7b5c3683d","impliedFormat":1},{"version":"d08718f98dd6d6979980a71c3aaa04e8bd0f9de60bb0200f228eb2bcb63f52f8","impliedFormat":1},{"version":"993201a93cd982573b088e0ca0807bf8ea66c399d32a7b8705b4901fcb828142","impliedFormat":1},{"version":"70e0f561e00a260464d1af3018e097a5f9332df38dd20be2acfe9d92e3f3233d","impliedFormat":1},{"version":"99990e52b18cd22ab194938cf7d53047c6820a0b7155eccef95b6a1138a6b6f3","impliedFormat":1},{"version":"f02ac71075b54b5c0a384dddbd773c9852dba14b4bf61ca9f1c8ba6b09101d3e","impliedFormat":1},{"version":"a7ebada2ffde87eaf4e70ab4a1c86a1fd788f78d322c4a6b45df0b90f66095d0","impliedFormat":1},{"version":"72ec9114995aa70aca1e3dc5e086d1ae82f00a24ff23a6640d2d9caef5fcc729","impliedFormat":1},{"version":"cdf62cebf884c6fde74f733d7993b7e255e513d6bc1d0e76c5c745ac8df98453","impliedFormat":1},{"version":"e6dd8526d318cce4cb3e83bef3cb4bf3aa08186ddc984c4663cf7dee221d430e","impliedFormat":1},{"version":"bc79e5e54981d32d02e32014b0279f1577055b2ebee12f4d2dc6451efd823a19","impliedFormat":1},{"version":"ce9f76eceb4f35c5ecd9bf7a1a22774c8b4962c2c52e5d56a8d3581a07b392f9","impliedFormat":1},{"version":"b806ae37b0cfbefa74010d40aac13654fecd4668bc17b6767dc34751ca657f06","impliedFormat":1},{"version":"18084f07f6e85e59ce11b7118163dff2e452694fffb167d9973617699405fbd1","impliedFormat":1},{"version":"28bc2bf49f198cfa6cb16aac93be58ae8606e14cfc7aaee4fcc948199fa55696","impliedFormat":1},{"version":"397be451722bdf121b8e2d15b456efabb104d6d361d33371062abba33ed248d9","impliedFormat":1},{"version":"8ec89ffd21238311fa61acb145b408eab08eee8153bb000ca4bcdbcc2e5889f1","impliedFormat":1},{"version":"faf43114b6264ee1b0ec2031a90784858bcc50052e243ca2b6e53ae2ffaf851a","impliedFormat":1},{"version":"b8c4e5edb96bfb51d1afb83d0093a06ea73d73935aa1ea2896b555c6ea1c1347","impliedFormat":1},{"version":"d476980536d24997a9a793f4b1deede2b29c88d71e58769a289548259acf9efe","impliedFormat":1},{"version":"e6a875ee8848072986d5e824e8e2667e8d8cb8db4241924f77cf3574ae09dd5d","impliedFormat":1},{"version":"7ffb4e58ca1b9ed5f26bed3dc0287c4abd7a2ba301ca55e2546d01a7f7f73de7","impliedFormat":1},{"version":"e1f530f4c01864435c4c52d95b7e0d69816bea04531826584b81c5d9d1a14236","impliedFormat":1},{"version":"0fbe1a754e3da007cc2726f61bc8f89b34b466fe205b20c1e316eb240bebe9e8","impliedFormat":1},{"version":"37a5bd2708bece0c0f78f202d95cf9b73a4dc2ea9f397930a77146a56aea94c8","impliedFormat":1},{"version":"8c7e33062fdb5cf97fc112c72f3a4aa0927a6fde59c3c92a36829774976ad0c4","impliedFormat":1},{"version":"9a2488d3a8b40e8e353652546b3473df856b1930411afba822a81758204a4ed8","impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"b542939a35357458e62f8229c2d7578ae888d63d3ab837395d7bb8a3064c205e","impliedFormat":1},{"version":"3a5af4fba7b27b815bb40f52715aedebaa4b371da3e5a664e7e0798c9b638825","impliedFormat":1},{"version":"8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","impliedFormat":1},{"version":"ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","impliedFormat":1},{"version":"49c632082dc8a916353288d3d8b2dc82b3471794249a381d090d960c8ceac908","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"71addb585c2db7b8e53dc1b0bcfa58c6c67c6e4fa2b968942046749d66f82e7e","impliedFormat":1},{"version":"c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"e703cfacb9965c4d4155346c65a0091ecded90ea98874ed6b3f36286577c4dde","impliedFormat":1},{"version":"f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","impliedFormat":1},{"version":"b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","impliedFormat":1},{"version":"5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802","impliedFormat":1},{"version":"87a3ee8c76625d7d2e359fdbcf7171847780604fbbb280118eff22674985dad1","impliedFormat":1},{"version":"21672038afe5dbedc15008bd4f12f9e6f277c683332f74375e8e1c23d426ae0f","signature":"a23ee6811573ae5ecb13d617ce2152625d9455846d6997f9ec38ae4b3e8bf37f"},{"version":"8ceb92013f59492609205a7d2235bda5c52ea91af5c3cbfa5756b4d919a3b439","signature":"1dfaefa84b5d3a895b48e8cedf07a1f08108a4950dbce252c163acd89ea8512b"},{"version":"20b63afab5227c57193e9ac294761e402a6e59d6d0a4b4fe7a62859e93026ed9","impliedFormat":1},{"version":"ba739758560a9b3e696095df9b04ac5d9d76acb11e98e06e73b7a86cbffe4207","impliedFormat":1},{"version":"7c7401c91fab197c9364f4625daff28ede54f1acbae4a791dfc4ade2db71c59d","impliedFormat":1},{"version":"48ce8d49a17cdd6dbb687c406af1caf4bed54fbe40ff14c6c505ccca6176cd21","impliedFormat":1},{"version":"3cd6ca36b5729325dd2eb0359eb1e2aed4f8cc73c3b8341e1733dfeee99fbeeb","impliedFormat":1},{"version":"0e8edbe744dfc3ce65e9fa2283f1f0eb2c0aaaec4df19765f51c346e45452cda","impliedFormat":1},{"version":"e8f32bdfbcbddd21331a469193a5c63c7b5e0d80025e649d91f833869bf5b7aa","impliedFormat":1},{"version":"1bea3584ffe75ae8fa970d651b8bbd7c67a75d21df6bd1762dc2abea73012b66","impliedFormat":1},{"version":"bf0e009524b9b436156b4a326cc3e92f1fdcd16ce51d119c94e4addc910e645e","impliedFormat":1},{"version":"52e0c1007dea40e9a588f22425a80250020ef0cd9b4a9deb36f315e075d1ab40","impliedFormat":1},{"version":"2c6ecd1f21dc339d42cecf914e1b844cef3cb68e3ec6f0ed5a9c4f6a588beb92","impliedFormat":1},{"version":"653672db5220ac24c728958a680b0db84c8d0d0f7ade5d78dbac72035d9ea70b","impliedFormat":1},{"version":"78089588b13f7207de8acdd775ca71f7415a1dfdd522f11b647ea08e154c4f14","impliedFormat":1},{"version":"d7a7229e7c12bf013834713f569d122a43056a5f34391b8388a582895b02c9e8","impliedFormat":1},{"version":"b811d082368e5b7f337d08f3e80be3d7e4c0c7f0249b00f8224acba9f77087e9","impliedFormat":1},{"version":"adb05565c81b408a97cee9201c8539dda075c30dffce0d4ec226e5050f36bfa4","impliedFormat":1},{"version":"75473b178a514d8768d6ead4a4da267aa6bedeeb792cd9437e45b46fa2dcf608","impliedFormat":1},{"version":"a75457a1e79e2bc885376b11f0a6c058e843dcac1f9d84c2293c75b13fa8803b","impliedFormat":1},{"version":"3f818a2b9c0d137cff0155a229598df6a30161d19ed315cd59006cc3f81b9847","impliedFormat":1},{"version":"97fe820ad369ce125b96c8fadd590addae19e293d5f6dc3833b7fd3808fea329","impliedFormat":1},{"version":"4e8a7cea443cbce825d1de249990bd71988cf491f689f5f4ada378c1cb965067","impliedFormat":1},{"version":"3a56da695cfddd03aee7835adf8934e4f357cc9bac59ea534cd282aba668b566","impliedFormat":1},{"version":"47244c79b80aee467a62c420ef5c2a58837236d9bf0087e9d6b43e278a71a46f","impliedFormat":1},{"version":"ba3886b9e5b3bd32588d57421988aeeea94afe40227334edc5d45fb0c5367c9d","impliedFormat":1},{"version":"226b58896f4f01f4c669d908f32c657bcab1a83f3aebb2f3d711a4fe7ba2a2d6","impliedFormat":1},{"version":"c79b22aab6a36366a6cf274ba9a719bebcc6f40f0be4ff721e91473ec19a7da1","impliedFormat":1},{"version":"05a4874f666eb37e94cd2e51b93d4accd6a4471e89e42ec98f435d57fd61d154","impliedFormat":1},{"version":"95b74ccaa6228d938036d13a96a47645f9c3d3b707c0b6989a18d77fd62447cb","impliedFormat":1},{"version":"856b83248d7e9a1343e28e8f113b142bd49b0adece47c157ab7adf3393f82967","impliedFormat":1},{"version":"bd987883be09d8ebe7aafed2e79a591d12b5845ac4a8a0b5601bdb0367c124c0","impliedFormat":1},{"version":"75ceb3dc5530c9b0797d8d6f6cbb883bb2b1add64f630c3c6d6f847aae87482e","impliedFormat":1},{"version":"efb2b9333117561dd5fc803927c1a212a8bf1dd1a5bd4549cc3c049d4a78ec63","impliedFormat":1},{"version":"ef17d2b0d94e266d4ec8caa84010b8a7b71e476c9cfa17e3db366f873d28445e","impliedFormat":1},{"version":"604a4451df97c7bfc75846cd1ed702129db0bee0f753658e0964d67619eea825","impliedFormat":1},{"version":"b9dfc4e6c69b1d60c7c060fb7d18951ca50f01fcdb46cf4eed23ca7f16471350","impliedFormat":1},{"version":"6911b52e74e60b6f3b79fc36d22a5d9537a807e16ec2e03fd594008c83981ab5","impliedFormat":1},{"version":"2551daa9cd45fb05ee16cee6282892c14a92e49a2d592b29fc9ff6d4ceef7dc2","impliedFormat":1},{"version":"5ba862c2b8f6fc41d95b417b19ed28111a685554ba2bac5bcf30680a92a46f26","impliedFormat":1},{"version":"2e47f885c94dd1180bd90160a7ebbd950256ea1a5e1f6c5a89b84de92c705ec0","impliedFormat":1},{"version":"4c8a41440f6b3066995d7d88dac8f09ed7e64f25e2b97a20be4f41e41795b0b4","signature":"c9a2ad9c87f4c0be0d32f78169fdc7faf52a190f6ed5aa2f20bea0ff6273fb9c"},{"version":"ecd7c714a23003e4990bcad34fb3e80afe9a09a24323e6a06b0599adfe4f43c5","signature":"a9775d51d46f50887975b20292c6c57dcac9ba77c357379c20a3c02ac14a2a22"},{"version":"e10dea626a225f88df2127d59b70bd0ad4d09e3f87d810be35aaf347c2a5f95e","signature":"f64a8b86c54f8b8db62aada03b88cb44f1d3ae17321d0730348e39f7b4591ccd"},{"version":"93161c1945c1f906d4da6da12384b2cc96b2c9206353d9fc38e9aeb83160e868","signature":"579fd4fd7001b05165b9e8fe060b6eee34440983b62e759e9739abddd17c9721"},{"version":"ea1e149ce1ec9508ff53ecffb62421ac2f000f416dc1a52fc231ec04fc176149","signature":"04fbbbcad47e9c78acd555c851990830949caa90ec44c4977e60f294157b26c4"},{"version":"f7f43e2d3856a8617d70e914fb6128966116a70349783afcc83f82b4ea8a9e58","signature":"00e56cba3147c5020f1649052f885afed0e7bff0cbd5b822b464adac3c921c7e"},{"version":"1375f71e05c0a101db87a9acc51b4ae92f120991ab5d67c7d78ac2607ab3fcef","signature":"68b0bce2f6feee95a8773df21325666267cf196569756f15798180882fb4fd9d"},{"version":"c7976110d237dbc6eef10968c78042cb03a67b70807869ea1fcb886cfda097b8","signature":"c77f84a7777d950a6553bf295a1297b06451d034d7dc33e6b47c9b68d37e5c7d"},{"version":"7584239b853f690c6629ae8bb683ded6ff33104e7835778bbca5ee1b1d9a0a91","impliedFormat":99},{"version":"454fea59d94deb8865a16de749720c946a40d93360b3e91092b901ba530fffce","signature":"05fbca2deadd7a1fcaf411c0b6fb9439387d69e749f25809ee235d46f52c7643"},{"version":"79a8df0bc611d9779a16512d99d12cc437adc1079cbf9c67f4d027bed14c1343","signature":"47c1f371e9626cf90b1b68384f5caa7a6b0470a15a5678c3d897e78c26cddf0f"},{"version":"56d5dca49ac81c04991f65191ec5b8ae1fbedeff3e246ca185e951e342f47129","signature":"c595de43ea9cf677add38f6a2f2ad7a58468330c2c949c9300c5dbfe1c8ca03d"},{"version":"2ace5564475697671c7e8dd95b1d9e4d93265873fbfbc6eb18f26cfee8232c5b","signature":"5137d0f624a136771f4d4c06995df1899730a8078021d1d26cec1625a1d32e18"},{"version":"d471ee2327092cc0c10fa217a97d9c79833b1761da99be76d2d9a202861b3a8e","signature":"1238d9e302dee2ca5d56760e0086d5da4e37160b27b7aa5be43e82e2a7f29d42"},{"version":"e9eb1ca4e6e55ce2d6a3085d7d136d2f6b83e09b78ee64282d270918a9e74e61","signature":"2592ed72625da16080355565b7d8d6a8214ce4e87d33f6218d00179b01373a7b"},{"version":"ebcde598c941ae8e7ea72a5308aadf1d45bb9993515f0f4cd9e2c76e3d33d0b8","signature":"66cadab6874916b661948745e7fcbeafec6ee099b37debc5e3a7138fe631b693"},{"version":"9af1a554c5eb80a89f87f8cde339ce883f7766bdfde5eb175a091b916a5b916e","signature":"9d0cb98c222a40b5516f08197bad00013a92a8eeb464430c56cb3f6dc79276fb"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"109b9c280e8848c08bf4a78fff1fed0750a6ca1735671b5cf08b71bae5448c03","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"823f9c08700a30e2920a063891df4e357c64333fdba6889522acc5b7ae13fc08","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"1d140fe7e071ea06038b6c5e01fea83f72d9d6d68e0d606a3d824323f5133388","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"685657a3ec619ef12aa7f754eee3b28598d3bf9749da89839a72a343fffef5ff","impliedFormat":1},{"version":"0b3edeae6a959093315434dd4e870e12182077bc76a178540281a3a12cfd9524","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"fed70ffbe859d54d8c7e1ef8cc2bc38af99b00a273ebb69ac293d2cb656210bd","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"0ea329e5eab6719ff83bcb97e8bd03f1faab4feb74704010783b881fc9d80f92","impliedFormat":1},{"version":"460627dd2a599c2664d6f9e81ed4765ef520dc2786551d9dcab276df57b98c02","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"169cc96316cacf8b489aaab4ac6bcef7b33e8779a8902bce57c737b4aa372d16","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"4340936f4e937c452ae783514e7c7bbb7fc06d0c97993ff4865370d0962bb9cf","impliedFormat":1},{"version":"b70c7ea83a7d0de17a791d9b5283f664033a96362c42cc4d2b2e0bdaa65ef7d1","impliedFormat":1},{"version":"a65cf458c879172bef4012d3397612e7357bf72971b09db5bb5bf8fca0957612","impliedFormat":1},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":1},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":1},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":1},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":1},{"version":"d128037db3a40d1d8ae8ec36431e6a4678df56d236729f620e58f4a37f9f33d0","impliedFormat":1},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":1},{"version":"9985141f349552055b7b6b5082384fdbc1758ba14ff51fada049347628b4e018","impliedFormat":1},{"version":"c3b65655e9b7b290340f3a1c73c7e02907dd290a288de5e62726350da39b96b1","impliedFormat":1},{"version":"c0398181fff2b85eef72a8abfad6a8b31bc5989a3a763fd3d0fd61154e55bcfc","impliedFormat":1},{"version":"89daadaa769a9bf8c1fa26a464e06459197a5914ed42702e1ce439bb5915b767","impliedFormat":1},{"version":"83af685afea5d13d6cd6a8db34aba9aec7962c289bb6c92e770e838e7d5faec9","impliedFormat":1},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":1},{"version":"b99abb32e0aa47c71bf14b6bd2ebc526a4afcee1553c157e49864e41868bdfa4","impliedFormat":1},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":1},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":1},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":1}],"root":[53,54,122,123,[163,170],[172,179]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":6,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[52,1],[51,2],[228,3],[229,3],[230,4],[231,5],[232,6],[233,7],[180,2],[183,8],[181,2],[182,2],[234,9],[235,10],[236,11],[237,12],[238,13],[239,14],[240,14],[241,15],[242,16],[243,17],[244,18],[186,2],[245,19],[246,20],[247,21],[248,22],[249,23],[250,24],[251,25],[252,26],[253,27],[254,28],[255,29],[256,30],[257,31],[258,31],[259,32],[260,2],[261,33],[263,34],[262,35],[264,36],[265,37],[266,38],[267,39],[268,40],[269,41],[270,42],[185,43],[184,2],[279,44],[271,45],[272,46],[273,47],[274,48],[275,49],[276,50],[187,2],[188,2],[189,2],[227,51],[277,52],[278,53],[205,54],[215,55],[204,54],[225,56],[196,57],[195,58],[224,59],[218,60],[223,61],[198,62],[212,63],[197,64],[221,65],[193,66],[192,59],[222,67],[194,68],[199,69],[200,2],[203,69],[190,2],[226,70],[216,71],[207,72],[208,73],[210,74],[206,75],[209,76],[219,59],[201,77],[202,78],[211,79],[191,80],[214,71],[213,69],[217,2],[220,81],[170,82],[169,83],[166,84],[167,84],[54,85],[163,86],[164,87],[122,88],[123,88],[179,89],[165,2],[175,90],[178,91],[174,92],[177,2],[168,84],[172,93],[53,2],[176,93],[173,83],[124,2],[280,2],[283,94],[281,95],[282,2],[284,2],[286,2],[287,96],[171,2],[285,97],[56,2],[62,98],[55,2],[59,2],[61,99],[58,100],[121,101],[106,102],[85,103],[79,104],[91,105],[86,106],[88,107],[78,108],[89,2],[87,109],[90,110],[63,100],[64,111],[73,112],[70,113],[71,114],[72,115],[74,116],[84,117],[94,118],[93,119],[92,120],[75,121],[77,122],[76,123],[83,124],[81,125],[80,126],[82,127],[68,128],[67,129],[69,130],[65,131],[95,132],[96,133],[99,134],[97,135],[98,136],[100,132],[105,137],[101,135],[102,132],[66,2],[103,132],[104,138],[57,139],[60,140],[48,2],[49,2],[10,2],[8,2],[9,2],[14,2],[13,2],[2,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[3,2],[23,2],[4,2],[24,2],[28,2],[25,2],[26,2],[27,2],[29,2],[30,2],[31,2],[5,2],[32,2],[33,2],[34,2],[35,2],[6,2],[39,2],[36,2],[37,2],[38,2],[40,2],[7,2],[41,2],[50,2],[46,2],[47,2],[42,2],[43,2],[44,2],[45,2],[1,2],[12,2],[11,2],[304,141],[289,2],[290,2],[291,2],[292,2],[288,2],[293,142],[294,2],[296,143],[295,142],[297,142],[298,143],[299,142],[300,2],[301,142],[302,2],[303,2],[126,144],[162,145],[150,146],[151,146],[125,2],[127,147],[128,148],[129,2],[152,146],[153,146],[131,149],[154,146],[155,146],[132,84],[133,146],[134,150],[137,151],[138,84],[139,2],[140,152],[141,153],[130,148],[142,146],[156,146],[157,154],[158,146],[159,146],[136,155],[143,147],[135,148],[144,146],[145,2],[146,146],[147,2],[148,156],[149,157],[160,146],[161,157],[120,158],[111,159],[118,160],[113,2],[114,2],[112,161],[115,158],[107,2],[108,2],[119,162],[110,163],[116,2],[117,164],[109,165]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.6.3"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3636340..4565ea4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "license": "AGPL-3.0", "workspaces": [ "core", - "extractor" + "extractor", + "cli" ], "dependencies": { "axios": "^1.12.2", @@ -33,6 +34,41 @@ "zod": "^3.23.8" } }, + "cli": { + "version": "1.0.0", + "dependencies": { + "chalk": "^5.3.0", + "commander": "^12.0.0", + "dotenv": "^16.4.5", + "extractor": "*", + "ora": "^8.0.1" + }, + "bin": { + "documind": "dist/index.js" + }, + "devDependencies": { + "@types/node": "^20.14.11", + "tsc-alias": "^1.8.8", + "typescript": "^5.6.3" + } + }, + "cli/node_modules/@types/node": { + "version": "20.19.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.20.tgz", + "integrity": "sha512-2Q7WS25j4pS1cS8yw3d6buNCVJukOTeQ39bAnwR6sOJbaxvyCGebzTMypDFN82CxBLnl+lSWVdCCWbRY6y9yZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "cli/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "core": { "version": "1.0.0", "dependencies": { @@ -88,6 +124,7 @@ "@types/node": "^20.14.11", "@types/uuid": "^11.0.0", "nodemon": "^3.1.7", + "tsc-alias": "^1.8.8", "typescript": "^5.6.3" } }, @@ -595,6 +632,44 @@ "url": "https://opencollective.com/libvips" } }, + "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/@opentelemetry/api": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", @@ -739,6 +814,18 @@ } } }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -765,6 +852,16 @@ "integrity": "sha512-L0XlBwfx9QetHOsbLDrE/vh2t018w9462HM3iaFfxRiK83aJjAt/Ja3NMkOW7FICwWTlQBa3ZbL5FKhuQWkDrg==", "license": "MIT" }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -917,6 +1014,37 @@ "fsevents": "~2.3.2" } }, + "node_modules/cli": { + "resolved": "cli", + "link": true + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -970,6 +1098,15 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1050,6 +1187,19 @@ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", "license": "Apache-2.0" }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -1076,6 +1226,12 @@ "node": ">= 0.4" } }, + "node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", + "license": "MIT" + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -1143,6 +1299,33 @@ "resolved": "extractor", "link": true }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "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.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -1258,6 +1441,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -1295,6 +1490,19 @@ "node": ">= 0.4" } }, + "node_modules/get-tsconfig": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.12.0.tgz", + "integrity": "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1308,6 +1516,27 @@ "node": ">= 6" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/gm": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/gm/-/gm-1.25.0.tgz", @@ -1417,6 +1646,16 @@ "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==", "license": "Apache-2.0" }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -1521,6 +1760,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -1546,6 +1797,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", @@ -1606,6 +1869,34 @@ "node": ">=6" } }, + "node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -1625,6 +1916,30 @@ "node": ">= 0.4" } }, + "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" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "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" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -1646,12 +1961,38 @@ "node": ">= 0.6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/mylas": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz", + "integrity": "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/raouldeheer" + } + }, "node_modules/nanoid": { "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", @@ -1790,6 +2131,21 @@ "node": ">=0.10.0" } }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/openai": { "version": "4.72.0", "resolved": "https://registry.npmjs.org/openai/-/openai-4.72.0.tgz", @@ -1840,6 +2196,29 @@ "opencollective-postinstall": "index.js" } }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/os": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", @@ -1877,6 +2256,16 @@ "util": "^0.10.3" } }, + "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": ">=8" + } + }, "node_modules/path/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -1933,6 +2322,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/plimit-lit": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz", + "integrity": "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "queue-lit": "^1.5.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -1970,6 +2372,37 @@ "dev": true, "license": "MIT" }, + "node_modules/queue-lit": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", + "integrity": "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "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" + }, "node_modules/react": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", @@ -1999,6 +2432,67 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "license": "MIT" }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "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": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/secure-json-parse": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", @@ -2073,6 +2567,18 @@ "@img/sharp-win32-x64": "0.33.5" } }, + "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==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -2095,6 +2601,60 @@ "node": ">=10" } }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -2196,6 +2756,38 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, + "node_modules/tsc-alias": { + "version": "1.8.16", + "resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.16.tgz", + "integrity": "sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.3", + "commander": "^9.0.0", + "get-tsconfig": "^4.10.0", + "globby": "^11.0.4", + "mylas": "^2.1.9", + "normalize-path": "^3.0.0", + "plimit-lit": "^1.2.6" + }, + "bin": { + "tsc-alias": "dist/bin/index.js" + }, + "engines": { + "node": ">=16.20.2" + } + }, + "node_modules/tsc-alias/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", diff --git a/package.json b/package.json index 1889645..155a499 100644 --- a/package.json +++ b/package.json @@ -3,16 +3,19 @@ "version": "1.1.5", "description": "Intelligent document processing and extraction.", "scripts": { - "build": "npm run build:core && npm run build:extractor", + "build": "npm run build:core && npm run build:extractor && npm run build:cli", "build:core": "npm run build --workspace=core", "build:extractor": "npm run build --workspace=extractor", + "build:cli": "npm run build --workspace=cli", "prepublishOnly": "npm run build", - "start": "npm run start --workspace=extractor", - "dev": "npm run dev --workspace=extractor" + "start": "npm run start --workspace=cli", + "dev": "npm run dev --workspace=cli", + "cli": "npm run start --workspace=cli" }, "workspaces": [ "core", - "extractor" + "extractor", + "cli" ], "main": "./extractor/dist/index.js", "types": "./extractor/dist/index.d.ts", From db18b2004e17ddeeff9173d5b773f210299a34cf Mon Sep 17 00:00:00 2001 From: Vedran Krizic Date: Fri, 10 Oct 2025 23:29:44 +0200 Subject: [PATCH 3/4] Validates file path locally Extends file validation to check local file paths, verifying both extension and existence. This change allows the application to process files directly from the file system, in addition to URLs. --- extractor/src/services/extract.ts | 2 +- extractor/src/utils/fileValidator.ts | 25 +++++++++++++++++++++++-- extractor/tsconfig.tsbuildinfo | 2 +- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/extractor/src/services/extract.ts b/extractor/src/services/extract.ts index b73b1d7..2a228c1 100644 --- a/extractor/src/services/extract.ts +++ b/extractor/src/services/extract.ts @@ -37,7 +37,7 @@ export async function extract({ file, schema, template, model, autoSchema }: Ext throw new Error("File is required."); } - if (!isValidFile(file)) { + if (!(await isValidFile(file))) { throw new Error("Invalid file type."); } diff --git a/extractor/src/utils/fileValidator.ts b/extractor/src/utils/fileValidator.ts index 125f7ad..83b6945 100644 --- a/extractor/src/utils/fileValidator.ts +++ b/extractor/src/utils/fileValidator.ts @@ -1,8 +1,10 @@ import axios from 'axios'; +import path from 'path'; +import fs from 'fs-extra'; /** - * Function to check if a file is valid based on its URL or MIME type - * @param file - The URL to the file + * Function to check if a file is valid based on its URL or file path + * @param file - The URL or file path to the file * @returns - Resolves to true if the file is valid, false otherwise */ export async function isValidFile(file: string): Promise { @@ -17,6 +19,25 @@ export async function isValidFile(file: string): Promise { html: 'text/html', }; + // Check if it's a local file path + if (!file.startsWith('http://') && !file.startsWith('https://')) { + // Handle local file path + const extension = path.extname(file).substring(1).toLowerCase(); + + if (!allowedExtensions.includes(extension)) { + return false; + } + + // Check if file exists + try { + await fs.access(file); + return true; + } catch { + return false; + } + } + + // Handle URL const urlPath = new URL(file).pathname; const extensionRegex = new RegExp(`\\.(${allowedExtensions.join('|')})$`, 'i'); diff --git a/extractor/tsconfig.tsbuildinfo b/extractor/tsconfig.tsbuildinfo index 01bed28..e2db4c7 100644 --- a/extractor/tsconfig.tsbuildinfo +++ b/extractor/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2020.full.d.ts","../core/dist/types.d.ts","../core/dist/index.d.ts","./src/utils/generatemarkdown.ts","./src/converter.ts","../node_modules/openai/_shims/manual-types.d.ts","../node_modules/openai/_shims/auto/types.d.ts","../node_modules/openai/streaming.d.ts","../node_modules/openai/error.d.ts","../node_modules/openai/_shims/multipartbody.d.ts","../node_modules/openai/uploads.d.ts","../node_modules/openai/core.d.ts","../node_modules/openai/_shims/index.d.ts","../node_modules/openai/pagination.d.ts","../node_modules/openai/resource.d.ts","../node_modules/openai/resources/completions.d.ts","../node_modules/openai/resources/shared.d.ts","../node_modules/openai/resources/chat/completions.d.ts","../node_modules/openai/resources/chat/chat.d.ts","../node_modules/openai/resources/chat/index.d.ts","../node_modules/openai/resources/audio/speech.d.ts","../node_modules/openai/resources/audio/transcriptions.d.ts","../node_modules/openai/resources/audio/translations.d.ts","../node_modules/openai/resources/audio/audio.d.ts","../node_modules/openai/resources/batches.d.ts","../node_modules/openai/resources/beta/threads/messages.d.ts","../node_modules/openai/resources/beta/threads/runs/steps.d.ts","../node_modules/openai/resources/beta/threads/runs/runs.d.ts","../node_modules/openai/lib/eventstream.d.ts","../node_modules/openai/lib/assistantstream.d.ts","../node_modules/openai/resources/beta/vector-stores/files.d.ts","../node_modules/openai/resources/beta/vector-stores/file-batches.d.ts","../node_modules/openai/resources/beta/vector-stores/vector-stores.d.ts","../node_modules/openai/resources/beta/threads/threads.d.ts","../node_modules/openai/resources/beta/assistants.d.ts","../node_modules/openai/lib/abstractchatcompletionrunner.d.ts","../node_modules/openai/lib/chatcompletionstream.d.ts","../node_modules/openai/lib/parser.d.ts","../node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","../node_modules/openai/lib/jsonschema.d.ts","../node_modules/openai/lib/runnablefunction.d.ts","../node_modules/openai/lib/chatcompletionrunner.d.ts","../node_modules/openai/resources/beta/chat/completions.d.ts","../node_modules/openai/resources/beta/chat/chat.d.ts","../node_modules/openai/resources/beta/beta.d.ts","../node_modules/openai/resources/embeddings.d.ts","../node_modules/openai/resources/files.d.ts","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","../node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","../node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","../node_modules/openai/resources/images.d.ts","../node_modules/openai/resources/models.d.ts","../node_modules/openai/resources/moderations.d.ts","../node_modules/openai/resources/uploads/parts.d.ts","../node_modules/openai/resources/uploads/uploads.d.ts","../node_modules/openai/resources/index.d.ts","../node_modules/openai/index.d.ts","../node_modules/zod/lib/helpers/typealiases.d.ts","../node_modules/zod/lib/helpers/util.d.ts","../node_modules/zod/lib/zoderror.d.ts","../node_modules/zod/lib/locales/en.d.ts","../node_modules/zod/lib/errors.d.ts","../node_modules/zod/lib/helpers/parseutil.d.ts","../node_modules/zod/lib/helpers/enumutil.d.ts","../node_modules/zod/lib/helpers/errorutil.d.ts","../node_modules/zod/lib/helpers/partialutil.d.ts","../node_modules/zod/lib/standard-schema.d.ts","../node_modules/zod/lib/types.d.ts","../node_modules/zod/lib/external.d.ts","../node_modules/zod/lib/index.d.ts","../node_modules/zod/index.d.ts","../node_modules/openai/helpers/zod.d.ts","./src/extractors/ollama.ts","./src/extractors/openai.ts","../node_modules/@google/generative-ai/dist/generative-ai.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/any.d.ts","../node_modules/zod-to-json-schema/dist/types/errormessages.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/array.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/bigint.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/boolean.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/number.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/date.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/enum.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/intersection.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/literal.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/string.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/record.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/map.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/nativeenum.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/never.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/null.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/nullable.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/object.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/set.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/tuple.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/undefined.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/union.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/unknown.d.ts","../node_modules/zod-to-json-schema/dist/types/parsetypes.d.ts","../node_modules/zod-to-json-schema/dist/types/refs.d.ts","../node_modules/zod-to-json-schema/dist/types/options.d.ts","../node_modules/zod-to-json-schema/dist/types/parsedef.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/branded.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/catch.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/default.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/effects.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/optional.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/pipeline.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/promise.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/readonly.d.ts","../node_modules/zod-to-json-schema/dist/types/selectparser.d.ts","../node_modules/zod-to-json-schema/dist/types/zodtojsonschema.d.ts","../node_modules/zod-to-json-schema/dist/types/index.d.ts","./src/extractors/google.ts","./src/extractors/index.ts","./src/prompts.ts","./src/autoschema/generation-schemas/base.ts","./src/autoschema/generation-schemas/secondary.ts","./src/utils/converttozodschema.ts","./src/autoschema/cleanschemafields.ts","./src/autoschema/autogenerateschema.ts","../node_modules/axios/index.d.ts","./src/utils/filevalidator.ts","./src/utils/schemavalidator.ts","./src/services/templates.ts","./src/services/extract.ts","./src/utils/pdfvalidator.ts","./src/utils/converttotext.ts","./src/services/formatter.ts","./src/index.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/ts5.6/globals.typedarray.d.ts","./node_modules/@types/node/ts5.6/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/ts5.6/index.d.ts","../node_modules/@types/diff-match-patch/index.d.ts","../node_modules/@types/jsonfile/index.d.ts","../node_modules/@types/jsonfile/utils.d.ts","../node_modules/@types/fs-extra/index.d.ts","../node_modules/@types/mime-types/index.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/node-fetch/externals.d.ts","../node_modules/@types/node-fetch/index.d.ts","../node_modules/uuid/dist/cjs/types.d.ts","../node_modules/uuid/dist/cjs/max.d.ts","../node_modules/uuid/dist/cjs/nil.d.ts","../node_modules/uuid/dist/cjs/parse.d.ts","../node_modules/uuid/dist/cjs/stringify.d.ts","../node_modules/uuid/dist/cjs/v1.d.ts","../node_modules/uuid/dist/cjs/v1tov6.d.ts","../node_modules/uuid/dist/cjs/v35.d.ts","../node_modules/uuid/dist/cjs/v3.d.ts","../node_modules/uuid/dist/cjs/v4.d.ts","../node_modules/uuid/dist/cjs/v5.d.ts","../node_modules/uuid/dist/cjs/v6.d.ts","../node_modules/uuid/dist/cjs/v6tov1.d.ts","../node_modules/uuid/dist/cjs/v7.d.ts","../node_modules/uuid/dist/cjs/validate.d.ts","../node_modules/uuid/dist/cjs/version.d.ts","../node_modules/uuid/dist/cjs/index.d.ts"],"fileIdsList":[[51,185,231],[185,231],[185,228,231],[185,230,231],[185,231,236,264],[185,231,232,237,242,250,261,272],[185,231,232,233,242,250],[180,181,182,185,231],[185,231,234,273],[185,231,235,236,243,251],[185,231,236,261,269],[185,231,237,239,242,250],[185,230,231,238],[185,231,239,240],[185,231,241,242],[185,230,231,242],[185,231,242,243,244,261,272],[185,231,242,243,244,257,261,264],[185,231,239,242,245,250,261,272],[185,231,242,243,245,246,250,261,269,272],[185,231,245,247,261,269,272],[185,231,242,248],[185,231,249,272,277],[185,231,239,242,250,261],[185,231,251],[185,231,252],[185,230,231,253],[185,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[185,231,255],[185,231,256],[185,231,242,257,258],[185,231,257,259,273,275],[185,231,242,261,262,264],[185,231,263,264],[185,231,261,262],[185,231,264],[185,231,265],[185,228,231,261,266],[185,231,242,267,268],[185,231,267,268],[185,231,236,250,261,269],[185,231,270],[231],[183,184,185,186,187,188,189,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278],[185,231,250,271],[185,231,245,256,272],[185,231,236,273],[185,231,261,274],[185,231,249,275],[185,231,276],[185,226,231],[185,226,231,242,244,253,261,264,272,275,277],[185,231,261,278],[185,198,202,231,272],[185,198,231,261,272],[185,193,231],[185,195,198,231,269,272],[185,231,250,269],[185,231,279],[185,193,231,279],[185,195,198,231,250,272],[185,190,191,194,197,231,242,261,272],[185,198,205,231],[185,190,196,231],[185,198,219,220,231],[185,194,198,231,264,272,279],[185,219,231,279],[185,192,193,231,279],[185,198,231],[185,192,193,194,195,196,197,198,199,200,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,220,221,222,223,224,225,231],[185,198,213,231],[185,198,205,206,231],[185,196,198,206,207,231],[185,197,231],[185,190,193,198,231],[185,198,202,206,207,231],[185,202,231],[185,196,198,201,231,272],[185,190,195,198,205,231],[185,231,261],[185,193,198,219,231,277,279],[120,163,164,165,166,167,168,169,185,231],[168,185,231],[120,185,231],[52,53,185,231],[120,124,162,185,231],[120,122,123,163,185,231],[106,120,121,185,231],[164,168,170,174,175,178,185,231],[54,164,165,168,170,172,173,174,185,231],[54,176,177,185,231],[168,185,231,243,252,272],[171,185,231],[185,231,243,279,281,282],[185,231,243,272,279],[185,231,245,272,279,285,286],[185,231,245,261,279],[55,56,61,185,231],[57,58,60,62,185,231],[61,185,231],[87,105,120,185,231],[58,60,61,62,63,65,67,68,73,74,94,95,96,99,100,101,102,104,105,185,231],[61,65,67,78,88,90,91,92,106,185,231],[61,62,75,76,77,78,83,84,185,231],[67,85,87,90,106,185,231],[61,62,67,85,92,106,185,231],[62,67,85,86,87,90,106,185,231],[58,185,231],[66,67,92,185,231],[88,89,91,185,231],[106,185,231],[64,70,71,72,185,231],[61,62,64,185,231],[61,64,73,185,231],[61,64,71,73,185,231],[61,63,64,74,185,231],[61,63,64,66,68,75,76,77,82,83,185,231],[64,82,83,84,93,185,231],[64,92,185,231],[61,64,67,85,86,87,88,90,91,185,231],[61,63,64,84,185,231],[57,61,63,64,68,75,76,77,79,83,84,185,231],[61,63,64,76,185,231],[57,61,64,66,68,75,77,79,82,83,84,185,231],[61,63,64,80,82,185,231],[61,63,64,82,185,231],[61,63,64,80,81,185,231],[64,67,185,231],[57,61,64,65,66,67,68,185,231],[67,68,185,231],[57,61,64,65,67,185,231],[61,64,185,231],[61,62,63,64,185,231],[64,98,185,231],[61,63,64,185,231],[61,63,64,97,185,231],[65,66,69,73,74,94,95,96,99,100,101,102,104,185,231],[61,64,96,103,185,231],[62,185,231],[59,61,62,185,231],[185,231,288,289,290,291,292,293,294,296,297,298,299,300,301,302,303],[185,231,288],[185,231,288,295],[148,149,185,231],[125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,185,231],[120,148,149,185,231],[120,126,148,149,185,231],[120,126,149,185,231],[120,126,130,149,150,185,231],[120,149,185,231],[120,136,148,149,185,231],[149,185,231],[120,140,148,149,185,231],[120,133,148,149,185,231],[120,132,135,148,149,185,231],[125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,185,231],[120,148,150,185,231],[119,185,231],[109,110,185,231],[107,108,109,111,112,117,185,231],[108,109,185,231],[118,185,231],[109,185,231],[107,108,109,112,113,114,115,116,185,231],[107,108,119,185,231]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},"37aa88cb88770b5d9775e1463c29ac987f49f8085b6829d5eee109d8da481d0d","cbb776326e71034216189e4c584177f106c5475ab5fe6a3652790130df5391b1",{"version":"922d08af0d1e0c32a03b51d41ece2251b3e0215918e0b981271e992e36ccb6e7","signature":"9bfc8f322fbdc76e99c42da9f1c1ec7522a9f6407bc806cccc68c596565a02df"},{"version":"9d7b8394fc7e878acf32434fce1dde8356105f904cbbc29f18bc592c781837dd","signature":"44bf9925ca1d3e57951a74c61722baabbc6d138d665ea54d84e9ebd3a85ae8a2"},{"version":"b1535397a73ca6046ca08957788a4c9a745730c7b2b887e9b9bc784214f3abac","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"9cce77f4aa9229e1a8da375823124d225b46185586d7c7bc61a3f95c392cf828","impliedFormat":1},{"version":"5c146fcc8545242d9e6a390ddc7702827c169a9d570c820906498bb5260bec14","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"6d4f60a967a88efd2a8c902d9498c74ce746e785665da31244ad029b1ee8fa18","impliedFormat":1},{"version":"408bb46ac61bf543760ad777b3b00193b01b7efe61c2a4be68babe7b5c265a64","impliedFormat":1},{"version":"a41b0df2464cc5044a5ec6aa6ac1eaf33a2feecfb09a8b1ccce2adea426aaccf","impliedFormat":1},{"version":"137272a656222e83280287c3b6b6d949d38e6c125b48aff9e987cf584ff8eb42","impliedFormat":1},{"version":"fd5819941fc3065d5c38be01c851cc3fb3f6166054ae670241d674029c752356","impliedFormat":1},{"version":"ba6adba337b25e665440a9ae1e4fa3eaa0b4862b5f56111195bc022a7a5ea865","impliedFormat":1},{"version":"110c91dffcd07ed84891b937eb8dad0f993c8908183cb8786941de5e76faba05","impliedFormat":1},{"version":"331dfe3a5bb4a416e7fe990172d59569820b3d1d6b4b176d942c1238429b9c3e","impliedFormat":1},{"version":"ebabbecb77f5637f4e22a0a290dfa34cf44f97c41a4497a54c9d74f1d899bf11","impliedFormat":1},{"version":"b044755bc931a564509edff939534c9d6753d151f2cc58bb08cb9cd539bf78a8","impliedFormat":1},{"version":"94ad825309fa0eea0f4a6b14e7b2808897997368196d583d74d7c05f55e98645","impliedFormat":1},{"version":"9854283bb96e17e0d00a7286f96ceca60bb2bcc90ef67c2266752c9434ac9dfc","impliedFormat":1},{"version":"e33b51541cfc41a1414923cdc315aa25a534873b587d263905b8900a3de73dab","impliedFormat":1},{"version":"ba7915b80c71c7474c861cb62372ad8ee3a30f2e30e769acec8346dd7b0e8f32","impliedFormat":1},{"version":"23f2b38efd3e6372eb728e59603dd8dd364713810fb8a8ebf255a0fb4a33a4be","impliedFormat":1},{"version":"29f6dcb986ed66d50346c385a556d6fcf41184a737e211618b8ec75965a1b0bd","impliedFormat":1},{"version":"def6e7d052efb197bd1bdac9290f9d2a01d1348c6b5323584fc52e82cc148631","impliedFormat":1},{"version":"ba64b14db9d08613474dc7c06d8ffbcb22a00a4f9d2641b2dcf97bc91da14275","impliedFormat":1},{"version":"530197974beb0a02c5a9eb7223f03e27651422345c8c35e1a13ddc67e6365af5","impliedFormat":1},{"version":"d38807fdc876ccd09b434e91594c981c7246b0f9a370ce2dc505c3b7b5c3683d","impliedFormat":1},{"version":"d08718f98dd6d6979980a71c3aaa04e8bd0f9de60bb0200f228eb2bcb63f52f8","impliedFormat":1},{"version":"993201a93cd982573b088e0ca0807bf8ea66c399d32a7b8705b4901fcb828142","impliedFormat":1},{"version":"70e0f561e00a260464d1af3018e097a5f9332df38dd20be2acfe9d92e3f3233d","impliedFormat":1},{"version":"99990e52b18cd22ab194938cf7d53047c6820a0b7155eccef95b6a1138a6b6f3","impliedFormat":1},{"version":"f02ac71075b54b5c0a384dddbd773c9852dba14b4bf61ca9f1c8ba6b09101d3e","impliedFormat":1},{"version":"a7ebada2ffde87eaf4e70ab4a1c86a1fd788f78d322c4a6b45df0b90f66095d0","impliedFormat":1},{"version":"72ec9114995aa70aca1e3dc5e086d1ae82f00a24ff23a6640d2d9caef5fcc729","impliedFormat":1},{"version":"cdf62cebf884c6fde74f733d7993b7e255e513d6bc1d0e76c5c745ac8df98453","impliedFormat":1},{"version":"e6dd8526d318cce4cb3e83bef3cb4bf3aa08186ddc984c4663cf7dee221d430e","impliedFormat":1},{"version":"bc79e5e54981d32d02e32014b0279f1577055b2ebee12f4d2dc6451efd823a19","impliedFormat":1},{"version":"ce9f76eceb4f35c5ecd9bf7a1a22774c8b4962c2c52e5d56a8d3581a07b392f9","impliedFormat":1},{"version":"b806ae37b0cfbefa74010d40aac13654fecd4668bc17b6767dc34751ca657f06","impliedFormat":1},{"version":"18084f07f6e85e59ce11b7118163dff2e452694fffb167d9973617699405fbd1","impliedFormat":1},{"version":"28bc2bf49f198cfa6cb16aac93be58ae8606e14cfc7aaee4fcc948199fa55696","impliedFormat":1},{"version":"397be451722bdf121b8e2d15b456efabb104d6d361d33371062abba33ed248d9","impliedFormat":1},{"version":"8ec89ffd21238311fa61acb145b408eab08eee8153bb000ca4bcdbcc2e5889f1","impliedFormat":1},{"version":"faf43114b6264ee1b0ec2031a90784858bcc50052e243ca2b6e53ae2ffaf851a","impliedFormat":1},{"version":"b8c4e5edb96bfb51d1afb83d0093a06ea73d73935aa1ea2896b555c6ea1c1347","impliedFormat":1},{"version":"d476980536d24997a9a793f4b1deede2b29c88d71e58769a289548259acf9efe","impliedFormat":1},{"version":"e6a875ee8848072986d5e824e8e2667e8d8cb8db4241924f77cf3574ae09dd5d","impliedFormat":1},{"version":"7ffb4e58ca1b9ed5f26bed3dc0287c4abd7a2ba301ca55e2546d01a7f7f73de7","impliedFormat":1},{"version":"e1f530f4c01864435c4c52d95b7e0d69816bea04531826584b81c5d9d1a14236","impliedFormat":1},{"version":"0fbe1a754e3da007cc2726f61bc8f89b34b466fe205b20c1e316eb240bebe9e8","impliedFormat":1},{"version":"37a5bd2708bece0c0f78f202d95cf9b73a4dc2ea9f397930a77146a56aea94c8","impliedFormat":1},{"version":"8c7e33062fdb5cf97fc112c72f3a4aa0927a6fde59c3c92a36829774976ad0c4","impliedFormat":1},{"version":"9a2488d3a8b40e8e353652546b3473df856b1930411afba822a81758204a4ed8","impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"b542939a35357458e62f8229c2d7578ae888d63d3ab837395d7bb8a3064c205e","impliedFormat":1},{"version":"3a5af4fba7b27b815bb40f52715aedebaa4b371da3e5a664e7e0798c9b638825","impliedFormat":1},{"version":"8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","impliedFormat":1},{"version":"ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","impliedFormat":1},{"version":"49c632082dc8a916353288d3d8b2dc82b3471794249a381d090d960c8ceac908","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"71addb585c2db7b8e53dc1b0bcfa58c6c67c6e4fa2b968942046749d66f82e7e","impliedFormat":1},{"version":"c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"e703cfacb9965c4d4155346c65a0091ecded90ea98874ed6b3f36286577c4dde","impliedFormat":1},{"version":"f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","impliedFormat":1},{"version":"b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","impliedFormat":1},{"version":"5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802","impliedFormat":1},{"version":"87a3ee8c76625d7d2e359fdbcf7171847780604fbbb280118eff22674985dad1","impliedFormat":1},{"version":"21672038afe5dbedc15008bd4f12f9e6f277c683332f74375e8e1c23d426ae0f","signature":"a23ee6811573ae5ecb13d617ce2152625d9455846d6997f9ec38ae4b3e8bf37f"},{"version":"8ceb92013f59492609205a7d2235bda5c52ea91af5c3cbfa5756b4d919a3b439","signature":"1dfaefa84b5d3a895b48e8cedf07a1f08108a4950dbce252c163acd89ea8512b"},{"version":"20b63afab5227c57193e9ac294761e402a6e59d6d0a4b4fe7a62859e93026ed9","impliedFormat":1},{"version":"ba739758560a9b3e696095df9b04ac5d9d76acb11e98e06e73b7a86cbffe4207","impliedFormat":1},{"version":"7c7401c91fab197c9364f4625daff28ede54f1acbae4a791dfc4ade2db71c59d","impliedFormat":1},{"version":"48ce8d49a17cdd6dbb687c406af1caf4bed54fbe40ff14c6c505ccca6176cd21","impliedFormat":1},{"version":"3cd6ca36b5729325dd2eb0359eb1e2aed4f8cc73c3b8341e1733dfeee99fbeeb","impliedFormat":1},{"version":"0e8edbe744dfc3ce65e9fa2283f1f0eb2c0aaaec4df19765f51c346e45452cda","impliedFormat":1},{"version":"e8f32bdfbcbddd21331a469193a5c63c7b5e0d80025e649d91f833869bf5b7aa","impliedFormat":1},{"version":"1bea3584ffe75ae8fa970d651b8bbd7c67a75d21df6bd1762dc2abea73012b66","impliedFormat":1},{"version":"bf0e009524b9b436156b4a326cc3e92f1fdcd16ce51d119c94e4addc910e645e","impliedFormat":1},{"version":"52e0c1007dea40e9a588f22425a80250020ef0cd9b4a9deb36f315e075d1ab40","impliedFormat":1},{"version":"2c6ecd1f21dc339d42cecf914e1b844cef3cb68e3ec6f0ed5a9c4f6a588beb92","impliedFormat":1},{"version":"653672db5220ac24c728958a680b0db84c8d0d0f7ade5d78dbac72035d9ea70b","impliedFormat":1},{"version":"78089588b13f7207de8acdd775ca71f7415a1dfdd522f11b647ea08e154c4f14","impliedFormat":1},{"version":"d7a7229e7c12bf013834713f569d122a43056a5f34391b8388a582895b02c9e8","impliedFormat":1},{"version":"b811d082368e5b7f337d08f3e80be3d7e4c0c7f0249b00f8224acba9f77087e9","impliedFormat":1},{"version":"adb05565c81b408a97cee9201c8539dda075c30dffce0d4ec226e5050f36bfa4","impliedFormat":1},{"version":"75473b178a514d8768d6ead4a4da267aa6bedeeb792cd9437e45b46fa2dcf608","impliedFormat":1},{"version":"a75457a1e79e2bc885376b11f0a6c058e843dcac1f9d84c2293c75b13fa8803b","impliedFormat":1},{"version":"3f818a2b9c0d137cff0155a229598df6a30161d19ed315cd59006cc3f81b9847","impliedFormat":1},{"version":"97fe820ad369ce125b96c8fadd590addae19e293d5f6dc3833b7fd3808fea329","impliedFormat":1},{"version":"4e8a7cea443cbce825d1de249990bd71988cf491f689f5f4ada378c1cb965067","impliedFormat":1},{"version":"3a56da695cfddd03aee7835adf8934e4f357cc9bac59ea534cd282aba668b566","impliedFormat":1},{"version":"47244c79b80aee467a62c420ef5c2a58837236d9bf0087e9d6b43e278a71a46f","impliedFormat":1},{"version":"ba3886b9e5b3bd32588d57421988aeeea94afe40227334edc5d45fb0c5367c9d","impliedFormat":1},{"version":"226b58896f4f01f4c669d908f32c657bcab1a83f3aebb2f3d711a4fe7ba2a2d6","impliedFormat":1},{"version":"c79b22aab6a36366a6cf274ba9a719bebcc6f40f0be4ff721e91473ec19a7da1","impliedFormat":1},{"version":"05a4874f666eb37e94cd2e51b93d4accd6a4471e89e42ec98f435d57fd61d154","impliedFormat":1},{"version":"95b74ccaa6228d938036d13a96a47645f9c3d3b707c0b6989a18d77fd62447cb","impliedFormat":1},{"version":"856b83248d7e9a1343e28e8f113b142bd49b0adece47c157ab7adf3393f82967","impliedFormat":1},{"version":"bd987883be09d8ebe7aafed2e79a591d12b5845ac4a8a0b5601bdb0367c124c0","impliedFormat":1},{"version":"75ceb3dc5530c9b0797d8d6f6cbb883bb2b1add64f630c3c6d6f847aae87482e","impliedFormat":1},{"version":"efb2b9333117561dd5fc803927c1a212a8bf1dd1a5bd4549cc3c049d4a78ec63","impliedFormat":1},{"version":"ef17d2b0d94e266d4ec8caa84010b8a7b71e476c9cfa17e3db366f873d28445e","impliedFormat":1},{"version":"604a4451df97c7bfc75846cd1ed702129db0bee0f753658e0964d67619eea825","impliedFormat":1},{"version":"b9dfc4e6c69b1d60c7c060fb7d18951ca50f01fcdb46cf4eed23ca7f16471350","impliedFormat":1},{"version":"6911b52e74e60b6f3b79fc36d22a5d9537a807e16ec2e03fd594008c83981ab5","impliedFormat":1},{"version":"2551daa9cd45fb05ee16cee6282892c14a92e49a2d592b29fc9ff6d4ceef7dc2","impliedFormat":1},{"version":"5ba862c2b8f6fc41d95b417b19ed28111a685554ba2bac5bcf30680a92a46f26","impliedFormat":1},{"version":"2e47f885c94dd1180bd90160a7ebbd950256ea1a5e1f6c5a89b84de92c705ec0","impliedFormat":1},{"version":"4c8a41440f6b3066995d7d88dac8f09ed7e64f25e2b97a20be4f41e41795b0b4","signature":"c9a2ad9c87f4c0be0d32f78169fdc7faf52a190f6ed5aa2f20bea0ff6273fb9c"},{"version":"ecd7c714a23003e4990bcad34fb3e80afe9a09a24323e6a06b0599adfe4f43c5","signature":"a9775d51d46f50887975b20292c6c57dcac9ba77c357379c20a3c02ac14a2a22"},{"version":"e10dea626a225f88df2127d59b70bd0ad4d09e3f87d810be35aaf347c2a5f95e","signature":"f64a8b86c54f8b8db62aada03b88cb44f1d3ae17321d0730348e39f7b4591ccd"},{"version":"93161c1945c1f906d4da6da12384b2cc96b2c9206353d9fc38e9aeb83160e868","signature":"579fd4fd7001b05165b9e8fe060b6eee34440983b62e759e9739abddd17c9721"},{"version":"ea1e149ce1ec9508ff53ecffb62421ac2f000f416dc1a52fc231ec04fc176149","signature":"04fbbbcad47e9c78acd555c851990830949caa90ec44c4977e60f294157b26c4"},{"version":"f7f43e2d3856a8617d70e914fb6128966116a70349783afcc83f82b4ea8a9e58","signature":"00e56cba3147c5020f1649052f885afed0e7bff0cbd5b822b464adac3c921c7e"},{"version":"1375f71e05c0a101db87a9acc51b4ae92f120991ab5d67c7d78ac2607ab3fcef","signature":"68b0bce2f6feee95a8773df21325666267cf196569756f15798180882fb4fd9d"},{"version":"c7976110d237dbc6eef10968c78042cb03a67b70807869ea1fcb886cfda097b8","signature":"c77f84a7777d950a6553bf295a1297b06451d034d7dc33e6b47c9b68d37e5c7d"},{"version":"7584239b853f690c6629ae8bb683ded6ff33104e7835778bbca5ee1b1d9a0a91","impliedFormat":99},{"version":"454fea59d94deb8865a16de749720c946a40d93360b3e91092b901ba530fffce","signature":"05fbca2deadd7a1fcaf411c0b6fb9439387d69e749f25809ee235d46f52c7643"},{"version":"79a8df0bc611d9779a16512d99d12cc437adc1079cbf9c67f4d027bed14c1343","signature":"47c1f371e9626cf90b1b68384f5caa7a6b0470a15a5678c3d897e78c26cddf0f"},{"version":"56d5dca49ac81c04991f65191ec5b8ae1fbedeff3e246ca185e951e342f47129","signature":"c595de43ea9cf677add38f6a2f2ad7a58468330c2c949c9300c5dbfe1c8ca03d"},{"version":"2ace5564475697671c7e8dd95b1d9e4d93265873fbfbc6eb18f26cfee8232c5b","signature":"5137d0f624a136771f4d4c06995df1899730a8078021d1d26cec1625a1d32e18"},{"version":"d471ee2327092cc0c10fa217a97d9c79833b1761da99be76d2d9a202861b3a8e","signature":"1238d9e302dee2ca5d56760e0086d5da4e37160b27b7aa5be43e82e2a7f29d42"},{"version":"e9eb1ca4e6e55ce2d6a3085d7d136d2f6b83e09b78ee64282d270918a9e74e61","signature":"2592ed72625da16080355565b7d8d6a8214ce4e87d33f6218d00179b01373a7b"},{"version":"ebcde598c941ae8e7ea72a5308aadf1d45bb9993515f0f4cd9e2c76e3d33d0b8","signature":"66cadab6874916b661948745e7fcbeafec6ee099b37debc5e3a7138fe631b693"},{"version":"9af1a554c5eb80a89f87f8cde339ce883f7766bdfde5eb175a091b916a5b916e","signature":"9d0cb98c222a40b5516f08197bad00013a92a8eeb464430c56cb3f6dc79276fb"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"109b9c280e8848c08bf4a78fff1fed0750a6ca1735671b5cf08b71bae5448c03","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"823f9c08700a30e2920a063891df4e357c64333fdba6889522acc5b7ae13fc08","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"1d140fe7e071ea06038b6c5e01fea83f72d9d6d68e0d606a3d824323f5133388","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"685657a3ec619ef12aa7f754eee3b28598d3bf9749da89839a72a343fffef5ff","impliedFormat":1},{"version":"0b3edeae6a959093315434dd4e870e12182077bc76a178540281a3a12cfd9524","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"fed70ffbe859d54d8c7e1ef8cc2bc38af99b00a273ebb69ac293d2cb656210bd","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"0ea329e5eab6719ff83bcb97e8bd03f1faab4feb74704010783b881fc9d80f92","impliedFormat":1},{"version":"460627dd2a599c2664d6f9e81ed4765ef520dc2786551d9dcab276df57b98c02","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"169cc96316cacf8b489aaab4ac6bcef7b33e8779a8902bce57c737b4aa372d16","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"4340936f4e937c452ae783514e7c7bbb7fc06d0c97993ff4865370d0962bb9cf","impliedFormat":1},{"version":"b70c7ea83a7d0de17a791d9b5283f664033a96362c42cc4d2b2e0bdaa65ef7d1","impliedFormat":1},{"version":"a65cf458c879172bef4012d3397612e7357bf72971b09db5bb5bf8fca0957612","impliedFormat":1},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":1},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":1},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":1},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":1},{"version":"d128037db3a40d1d8ae8ec36431e6a4678df56d236729f620e58f4a37f9f33d0","impliedFormat":1},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":1},{"version":"9985141f349552055b7b6b5082384fdbc1758ba14ff51fada049347628b4e018","impliedFormat":1},{"version":"c3b65655e9b7b290340f3a1c73c7e02907dd290a288de5e62726350da39b96b1","impliedFormat":1},{"version":"c0398181fff2b85eef72a8abfad6a8b31bc5989a3a763fd3d0fd61154e55bcfc","impliedFormat":1},{"version":"89daadaa769a9bf8c1fa26a464e06459197a5914ed42702e1ce439bb5915b767","impliedFormat":1},{"version":"83af685afea5d13d6cd6a8db34aba9aec7962c289bb6c92e770e838e7d5faec9","impliedFormat":1},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":1},{"version":"b99abb32e0aa47c71bf14b6bd2ebc526a4afcee1553c157e49864e41868bdfa4","impliedFormat":1},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":1},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":1},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":1}],"root":[53,54,122,123,[163,170],[172,179]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":6,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[52,1],[51,2],[228,3],[229,3],[230,4],[231,5],[232,6],[233,7],[180,2],[183,8],[181,2],[182,2],[234,9],[235,10],[236,11],[237,12],[238,13],[239,14],[240,14],[241,15],[242,16],[243,17],[244,18],[186,2],[245,19],[246,20],[247,21],[248,22],[249,23],[250,24],[251,25],[252,26],[253,27],[254,28],[255,29],[256,30],[257,31],[258,31],[259,32],[260,2],[261,33],[263,34],[262,35],[264,36],[265,37],[266,38],[267,39],[268,40],[269,41],[270,42],[185,43],[184,2],[279,44],[271,45],[272,46],[273,47],[274,48],[275,49],[276,50],[187,2],[188,2],[189,2],[227,51],[277,52],[278,53],[205,54],[215,55],[204,54],[225,56],[196,57],[195,58],[224,59],[218,60],[223,61],[198,62],[212,63],[197,64],[221,65],[193,66],[192,59],[222,67],[194,68],[199,69],[200,2],[203,69],[190,2],[226,70],[216,71],[207,72],[208,73],[210,74],[206,75],[209,76],[219,59],[201,77],[202,78],[211,79],[191,80],[214,71],[213,69],[217,2],[220,81],[170,82],[169,83],[166,84],[167,84],[54,85],[163,86],[164,87],[122,88],[123,88],[179,89],[165,2],[175,90],[178,91],[174,92],[177,2],[168,84],[172,93],[53,2],[176,93],[173,83],[124,2],[280,2],[283,94],[281,95],[282,2],[284,2],[286,2],[287,96],[171,2],[285,97],[56,2],[62,98],[55,2],[59,2],[61,99],[58,100],[121,101],[106,102],[85,103],[79,104],[91,105],[86,106],[88,107],[78,108],[89,2],[87,109],[90,110],[63,100],[64,111],[73,112],[70,113],[71,114],[72,115],[74,116],[84,117],[94,118],[93,119],[92,120],[75,121],[77,122],[76,123],[83,124],[81,125],[80,126],[82,127],[68,128],[67,129],[69,130],[65,131],[95,132],[96,133],[99,134],[97,135],[98,136],[100,132],[105,137],[101,135],[102,132],[66,2],[103,132],[104,138],[57,139],[60,140],[48,2],[49,2],[10,2],[8,2],[9,2],[14,2],[13,2],[2,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[3,2],[23,2],[4,2],[24,2],[28,2],[25,2],[26,2],[27,2],[29,2],[30,2],[31,2],[5,2],[32,2],[33,2],[34,2],[35,2],[6,2],[39,2],[36,2],[37,2],[38,2],[40,2],[7,2],[41,2],[50,2],[46,2],[47,2],[42,2],[43,2],[44,2],[45,2],[1,2],[12,2],[11,2],[304,141],[289,2],[290,2],[291,2],[292,2],[288,2],[293,142],[294,2],[296,143],[295,142],[297,142],[298,143],[299,142],[300,2],[301,142],[302,2],[303,2],[126,144],[162,145],[150,146],[151,146],[125,2],[127,147],[128,148],[129,2],[152,146],[153,146],[131,149],[154,146],[155,146],[132,84],[133,146],[134,150],[137,151],[138,84],[139,2],[140,152],[141,153],[130,148],[142,146],[156,146],[157,154],[158,146],[159,146],[136,155],[143,147],[135,148],[144,146],[145,2],[146,146],[147,2],[148,156],[149,157],[160,146],[161,157],[120,158],[111,159],[118,160],[113,2],[114,2],[112,161],[115,158],[107,2],[108,2],[119,162],[110,163],[116,2],[117,164],[109,165]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.6.3"} \ No newline at end of file +{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2020.full.d.ts","../core/dist/types.d.ts","../core/dist/index.d.ts","./src/utils/generatemarkdown.ts","./src/converter.ts","../node_modules/openai/_shims/manual-types.d.ts","../node_modules/openai/_shims/auto/types.d.ts","../node_modules/openai/streaming.d.ts","../node_modules/openai/error.d.ts","../node_modules/openai/_shims/multipartbody.d.ts","../node_modules/openai/uploads.d.ts","../node_modules/openai/core.d.ts","../node_modules/openai/_shims/index.d.ts","../node_modules/openai/pagination.d.ts","../node_modules/openai/resource.d.ts","../node_modules/openai/resources/completions.d.ts","../node_modules/openai/resources/shared.d.ts","../node_modules/openai/resources/chat/completions.d.ts","../node_modules/openai/resources/chat/chat.d.ts","../node_modules/openai/resources/chat/index.d.ts","../node_modules/openai/resources/audio/speech.d.ts","../node_modules/openai/resources/audio/transcriptions.d.ts","../node_modules/openai/resources/audio/translations.d.ts","../node_modules/openai/resources/audio/audio.d.ts","../node_modules/openai/resources/batches.d.ts","../node_modules/openai/resources/beta/threads/messages.d.ts","../node_modules/openai/resources/beta/threads/runs/steps.d.ts","../node_modules/openai/resources/beta/threads/runs/runs.d.ts","../node_modules/openai/lib/eventstream.d.ts","../node_modules/openai/lib/assistantstream.d.ts","../node_modules/openai/resources/beta/vector-stores/files.d.ts","../node_modules/openai/resources/beta/vector-stores/file-batches.d.ts","../node_modules/openai/resources/beta/vector-stores/vector-stores.d.ts","../node_modules/openai/resources/beta/threads/threads.d.ts","../node_modules/openai/resources/beta/assistants.d.ts","../node_modules/openai/lib/abstractchatcompletionrunner.d.ts","../node_modules/openai/lib/chatcompletionstream.d.ts","../node_modules/openai/lib/parser.d.ts","../node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","../node_modules/openai/lib/jsonschema.d.ts","../node_modules/openai/lib/runnablefunction.d.ts","../node_modules/openai/lib/chatcompletionrunner.d.ts","../node_modules/openai/resources/beta/chat/completions.d.ts","../node_modules/openai/resources/beta/chat/chat.d.ts","../node_modules/openai/resources/beta/beta.d.ts","../node_modules/openai/resources/embeddings.d.ts","../node_modules/openai/resources/files.d.ts","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","../node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","../node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","../node_modules/openai/resources/images.d.ts","../node_modules/openai/resources/models.d.ts","../node_modules/openai/resources/moderations.d.ts","../node_modules/openai/resources/uploads/parts.d.ts","../node_modules/openai/resources/uploads/uploads.d.ts","../node_modules/openai/resources/index.d.ts","../node_modules/openai/index.d.ts","../node_modules/zod/lib/helpers/typealiases.d.ts","../node_modules/zod/lib/helpers/util.d.ts","../node_modules/zod/lib/zoderror.d.ts","../node_modules/zod/lib/locales/en.d.ts","../node_modules/zod/lib/errors.d.ts","../node_modules/zod/lib/helpers/parseutil.d.ts","../node_modules/zod/lib/helpers/enumutil.d.ts","../node_modules/zod/lib/helpers/errorutil.d.ts","../node_modules/zod/lib/helpers/partialutil.d.ts","../node_modules/zod/lib/standard-schema.d.ts","../node_modules/zod/lib/types.d.ts","../node_modules/zod/lib/external.d.ts","../node_modules/zod/lib/index.d.ts","../node_modules/zod/index.d.ts","../node_modules/openai/helpers/zod.d.ts","./src/extractors/ollama.ts","./src/extractors/openai.ts","../node_modules/@google/generative-ai/dist/generative-ai.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/any.d.ts","../node_modules/zod-to-json-schema/dist/types/errormessages.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/array.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/bigint.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/boolean.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/number.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/date.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/enum.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/intersection.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/literal.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/string.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/record.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/map.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/nativeenum.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/never.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/null.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/nullable.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/object.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/set.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/tuple.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/undefined.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/union.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/unknown.d.ts","../node_modules/zod-to-json-schema/dist/types/parsetypes.d.ts","../node_modules/zod-to-json-schema/dist/types/refs.d.ts","../node_modules/zod-to-json-schema/dist/types/options.d.ts","../node_modules/zod-to-json-schema/dist/types/parsedef.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/branded.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/catch.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/default.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/effects.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/optional.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/pipeline.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/promise.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/readonly.d.ts","../node_modules/zod-to-json-schema/dist/types/selectparser.d.ts","../node_modules/zod-to-json-schema/dist/types/zodtojsonschema.d.ts","../node_modules/zod-to-json-schema/dist/types/index.d.ts","./src/extractors/google.ts","./src/extractors/index.ts","./src/prompts.ts","./src/autoschema/generation-schemas/base.ts","./src/autoschema/generation-schemas/secondary.ts","./src/utils/converttozodschema.ts","./src/autoschema/cleanschemafields.ts","./src/autoschema/autogenerateschema.ts","../node_modules/axios/index.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/ts5.6/globals.typedarray.d.ts","./node_modules/@types/node/ts5.6/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/ts5.6/index.d.ts","../node_modules/@types/jsonfile/index.d.ts","../node_modules/@types/jsonfile/utils.d.ts","../node_modules/@types/fs-extra/index.d.ts","./src/utils/filevalidator.ts","./src/utils/schemavalidator.ts","./src/services/templates.ts","./src/services/extract.ts","./src/utils/pdfvalidator.ts","./src/utils/converttotext.ts","./src/services/formatter.ts","./src/index.ts","../node_modules/@types/diff-match-patch/index.d.ts","../node_modules/@types/mime-types/index.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/node-fetch/externals.d.ts","../node_modules/@types/node-fetch/index.d.ts","../node_modules/uuid/dist/cjs/types.d.ts","../node_modules/uuid/dist/cjs/max.d.ts","../node_modules/uuid/dist/cjs/nil.d.ts","../node_modules/uuid/dist/cjs/parse.d.ts","../node_modules/uuid/dist/cjs/stringify.d.ts","../node_modules/uuid/dist/cjs/v1.d.ts","../node_modules/uuid/dist/cjs/v1tov6.d.ts","../node_modules/uuid/dist/cjs/v35.d.ts","../node_modules/uuid/dist/cjs/v3.d.ts","../node_modules/uuid/dist/cjs/v4.d.ts","../node_modules/uuid/dist/cjs/v5.d.ts","../node_modules/uuid/dist/cjs/v6.d.ts","../node_modules/uuid/dist/cjs/v6tov1.d.ts","../node_modules/uuid/dist/cjs/v7.d.ts","../node_modules/uuid/dist/cjs/validate.d.ts","../node_modules/uuid/dist/cjs/version.d.ts","../node_modules/uuid/dist/cjs/index.d.ts"],"fileIdsList":[[51,177,223],[177,223],[177,220,223],[177,222,223],[177,223,228,256],[177,223,224,229,234,242,253,264],[177,223,224,225,234,242],[172,173,174,177,223],[177,223,226,265],[177,223,227,228,235,243],[177,223,228,253,261],[177,223,229,231,234,242],[177,222,223,230],[177,223,231,232],[177,223,233,234],[177,222,223,234],[177,223,234,235,236,253,264],[177,223,234,235,236,249,253,256],[177,223,231,234,237,242,253,264],[177,223,234,235,237,238,242,253,261,264],[177,223,237,239,253,261,264],[177,223,234,240],[177,223,241,264,269],[177,223,231,234,242,253],[177,223,243],[177,223,244],[177,222,223,245],[177,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270],[177,223,247],[177,223,248],[177,223,234,249,250],[177,223,249,251,265,267],[177,223,234,253,254,256],[177,223,255,256],[177,223,253,254],[177,223,256],[177,223,257],[177,220,223,253,258],[177,223,234,259,260],[177,223,259,260],[177,223,228,242,253,261],[177,223,262],[223],[175,176,177,178,179,180,181,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270],[177,223,242,263],[177,223,237,248,264],[177,223,228,265],[177,223,253,266],[177,223,241,267],[177,223,268],[177,218,223],[177,218,223,234,236,245,253,256,264,267,269],[177,223,253,270],[177,190,194,223,264],[177,190,223,253,264],[177,185,223],[177,187,190,223,261,264],[177,223,242,261],[177,223,271],[177,185,223,271],[177,187,190,223,242,264],[177,182,183,186,189,223,234,253,264],[177,190,197,223],[177,182,188,223],[177,190,211,212,223],[177,186,190,223,256,264,271],[177,211,223,271],[177,184,185,223,271],[177,190,223],[177,184,185,186,187,188,189,190,191,192,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,212,213,214,215,216,217,223],[177,190,205,223],[177,190,197,198,223],[177,188,190,198,199,223],[177,189,223],[177,182,185,190,223],[177,190,194,198,199,223],[177,194,223],[177,188,190,193,223,264],[177,182,187,190,197,223],[177,223,253],[177,185,190,211,223,269,271],[120,163,164,165,166,167,168,169,177,223],[168,177,223],[120,177,223],[52,53,177,223],[120,124,162,177,223],[120,122,123,163,177,223],[106,120,121,177,223],[164,168,170,177,223,277,278,281],[54,164,165,168,170,177,223,275,276,277],[54,177,223,279,280],[168,177,223,235,244,264],[171,177,223,244,274],[171,177,223],[177,223,235,271,272,273],[177,223,235,264,271],[177,223,237,264,271,285,286],[177,223,237,253,271],[55,56,61,177,223],[57,58,60,62,177,223],[61,177,223],[87,105,120,177,223],[58,60,61,62,63,65,67,68,73,74,94,95,96,99,100,101,102,104,105,177,223],[61,65,67,78,88,90,91,92,106,177,223],[61,62,75,76,77,78,83,84,177,223],[67,85,87,90,106,177,223],[61,62,67,85,92,106,177,223],[62,67,85,86,87,90,106,177,223],[58,177,223],[66,67,92,177,223],[88,89,91,177,223],[106,177,223],[64,70,71,72,177,223],[61,62,64,177,223],[61,64,73,177,223],[61,64,71,73,177,223],[61,63,64,74,177,223],[61,63,64,66,68,75,76,77,82,83,177,223],[64,82,83,84,93,177,223],[64,92,177,223],[61,64,67,85,86,87,88,90,91,177,223],[61,63,64,84,177,223],[57,61,63,64,68,75,76,77,79,83,84,177,223],[61,63,64,76,177,223],[57,61,64,66,68,75,77,79,82,83,84,177,223],[61,63,64,80,82,177,223],[61,63,64,82,177,223],[61,63,64,80,81,177,223],[64,67,177,223],[57,61,64,65,66,67,68,177,223],[67,68,177,223],[57,61,64,65,67,177,223],[61,64,177,223],[61,62,63,64,177,223],[64,98,177,223],[61,63,64,177,223],[61,63,64,97,177,223],[65,66,69,73,74,94,95,96,99,100,101,102,104,177,223],[61,64,96,103,177,223],[62,177,223],[59,61,62,177,223],[177,223,288,289,290,291,292,293,294,296,297,298,299,300,301,302,303],[177,223,288],[177,223,288,295],[148,149,177,223],[125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,177,223],[120,148,149,177,223],[120,126,148,149,177,223],[120,126,149,177,223],[120,126,130,149,150,177,223],[120,149,177,223],[120,136,148,149,177,223],[149,177,223],[120,140,148,149,177,223],[120,133,148,149,177,223],[120,132,135,148,149,177,223],[125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,177,223],[120,148,150,177,223],[119,177,223],[109,110,177,223],[107,108,109,111,112,117,177,223],[108,109,177,223],[118,177,223],[109,177,223],[107,108,109,112,113,114,115,116,177,223],[107,108,119,177,223]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},"37aa88cb88770b5d9775e1463c29ac987f49f8085b6829d5eee109d8da481d0d","7705d4fb9619f8eb448947ef0cdf7d9d0a602c7c4181403f5cce76338537ad3b",{"version":"922d08af0d1e0c32a03b51d41ece2251b3e0215918e0b981271e992e36ccb6e7","signature":"9bfc8f322fbdc76e99c42da9f1c1ec7522a9f6407bc806cccc68c596565a02df"},{"version":"9d7b8394fc7e878acf32434fce1dde8356105f904cbbc29f18bc592c781837dd","signature":"44bf9925ca1d3e57951a74c61722baabbc6d138d665ea54d84e9ebd3a85ae8a2"},{"version":"b1535397a73ca6046ca08957788a4c9a745730c7b2b887e9b9bc784214f3abac","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"9cce77f4aa9229e1a8da375823124d225b46185586d7c7bc61a3f95c392cf828","impliedFormat":1},{"version":"5c146fcc8545242d9e6a390ddc7702827c169a9d570c820906498bb5260bec14","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"6d4f60a967a88efd2a8c902d9498c74ce746e785665da31244ad029b1ee8fa18","impliedFormat":1},{"version":"408bb46ac61bf543760ad777b3b00193b01b7efe61c2a4be68babe7b5c265a64","impliedFormat":1},{"version":"a41b0df2464cc5044a5ec6aa6ac1eaf33a2feecfb09a8b1ccce2adea426aaccf","impliedFormat":1},{"version":"137272a656222e83280287c3b6b6d949d38e6c125b48aff9e987cf584ff8eb42","impliedFormat":1},{"version":"fd5819941fc3065d5c38be01c851cc3fb3f6166054ae670241d674029c752356","impliedFormat":1},{"version":"ba6adba337b25e665440a9ae1e4fa3eaa0b4862b5f56111195bc022a7a5ea865","impliedFormat":1},{"version":"110c91dffcd07ed84891b937eb8dad0f993c8908183cb8786941de5e76faba05","impliedFormat":1},{"version":"331dfe3a5bb4a416e7fe990172d59569820b3d1d6b4b176d942c1238429b9c3e","impliedFormat":1},{"version":"ebabbecb77f5637f4e22a0a290dfa34cf44f97c41a4497a54c9d74f1d899bf11","impliedFormat":1},{"version":"b044755bc931a564509edff939534c9d6753d151f2cc58bb08cb9cd539bf78a8","impliedFormat":1},{"version":"94ad825309fa0eea0f4a6b14e7b2808897997368196d583d74d7c05f55e98645","impliedFormat":1},{"version":"9854283bb96e17e0d00a7286f96ceca60bb2bcc90ef67c2266752c9434ac9dfc","impliedFormat":1},{"version":"e33b51541cfc41a1414923cdc315aa25a534873b587d263905b8900a3de73dab","impliedFormat":1},{"version":"ba7915b80c71c7474c861cb62372ad8ee3a30f2e30e769acec8346dd7b0e8f32","impliedFormat":1},{"version":"23f2b38efd3e6372eb728e59603dd8dd364713810fb8a8ebf255a0fb4a33a4be","impliedFormat":1},{"version":"29f6dcb986ed66d50346c385a556d6fcf41184a737e211618b8ec75965a1b0bd","impliedFormat":1},{"version":"def6e7d052efb197bd1bdac9290f9d2a01d1348c6b5323584fc52e82cc148631","impliedFormat":1},{"version":"ba64b14db9d08613474dc7c06d8ffbcb22a00a4f9d2641b2dcf97bc91da14275","impliedFormat":1},{"version":"530197974beb0a02c5a9eb7223f03e27651422345c8c35e1a13ddc67e6365af5","impliedFormat":1},{"version":"d38807fdc876ccd09b434e91594c981c7246b0f9a370ce2dc505c3b7b5c3683d","impliedFormat":1},{"version":"d08718f98dd6d6979980a71c3aaa04e8bd0f9de60bb0200f228eb2bcb63f52f8","impliedFormat":1},{"version":"993201a93cd982573b088e0ca0807bf8ea66c399d32a7b8705b4901fcb828142","impliedFormat":1},{"version":"70e0f561e00a260464d1af3018e097a5f9332df38dd20be2acfe9d92e3f3233d","impliedFormat":1},{"version":"99990e52b18cd22ab194938cf7d53047c6820a0b7155eccef95b6a1138a6b6f3","impliedFormat":1},{"version":"f02ac71075b54b5c0a384dddbd773c9852dba14b4bf61ca9f1c8ba6b09101d3e","impliedFormat":1},{"version":"a7ebada2ffde87eaf4e70ab4a1c86a1fd788f78d322c4a6b45df0b90f66095d0","impliedFormat":1},{"version":"72ec9114995aa70aca1e3dc5e086d1ae82f00a24ff23a6640d2d9caef5fcc729","impliedFormat":1},{"version":"cdf62cebf884c6fde74f733d7993b7e255e513d6bc1d0e76c5c745ac8df98453","impliedFormat":1},{"version":"e6dd8526d318cce4cb3e83bef3cb4bf3aa08186ddc984c4663cf7dee221d430e","impliedFormat":1},{"version":"bc79e5e54981d32d02e32014b0279f1577055b2ebee12f4d2dc6451efd823a19","impliedFormat":1},{"version":"ce9f76eceb4f35c5ecd9bf7a1a22774c8b4962c2c52e5d56a8d3581a07b392f9","impliedFormat":1},{"version":"b806ae37b0cfbefa74010d40aac13654fecd4668bc17b6767dc34751ca657f06","impliedFormat":1},{"version":"18084f07f6e85e59ce11b7118163dff2e452694fffb167d9973617699405fbd1","impliedFormat":1},{"version":"28bc2bf49f198cfa6cb16aac93be58ae8606e14cfc7aaee4fcc948199fa55696","impliedFormat":1},{"version":"397be451722bdf121b8e2d15b456efabb104d6d361d33371062abba33ed248d9","impliedFormat":1},{"version":"8ec89ffd21238311fa61acb145b408eab08eee8153bb000ca4bcdbcc2e5889f1","impliedFormat":1},{"version":"faf43114b6264ee1b0ec2031a90784858bcc50052e243ca2b6e53ae2ffaf851a","impliedFormat":1},{"version":"b8c4e5edb96bfb51d1afb83d0093a06ea73d73935aa1ea2896b555c6ea1c1347","impliedFormat":1},{"version":"d476980536d24997a9a793f4b1deede2b29c88d71e58769a289548259acf9efe","impliedFormat":1},{"version":"e6a875ee8848072986d5e824e8e2667e8d8cb8db4241924f77cf3574ae09dd5d","impliedFormat":1},{"version":"7ffb4e58ca1b9ed5f26bed3dc0287c4abd7a2ba301ca55e2546d01a7f7f73de7","impliedFormat":1},{"version":"e1f530f4c01864435c4c52d95b7e0d69816bea04531826584b81c5d9d1a14236","impliedFormat":1},{"version":"0fbe1a754e3da007cc2726f61bc8f89b34b466fe205b20c1e316eb240bebe9e8","impliedFormat":1},{"version":"37a5bd2708bece0c0f78f202d95cf9b73a4dc2ea9f397930a77146a56aea94c8","impliedFormat":1},{"version":"8c7e33062fdb5cf97fc112c72f3a4aa0927a6fde59c3c92a36829774976ad0c4","impliedFormat":1},{"version":"9a2488d3a8b40e8e353652546b3473df856b1930411afba822a81758204a4ed8","impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"b542939a35357458e62f8229c2d7578ae888d63d3ab837395d7bb8a3064c205e","impliedFormat":1},{"version":"3a5af4fba7b27b815bb40f52715aedebaa4b371da3e5a664e7e0798c9b638825","impliedFormat":1},{"version":"8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","impliedFormat":1},{"version":"ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","impliedFormat":1},{"version":"49c632082dc8a916353288d3d8b2dc82b3471794249a381d090d960c8ceac908","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"71addb585c2db7b8e53dc1b0bcfa58c6c67c6e4fa2b968942046749d66f82e7e","impliedFormat":1},{"version":"c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"e703cfacb9965c4d4155346c65a0091ecded90ea98874ed6b3f36286577c4dde","impliedFormat":1},{"version":"f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","impliedFormat":1},{"version":"b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","impliedFormat":1},{"version":"5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802","impliedFormat":1},{"version":"87a3ee8c76625d7d2e359fdbcf7171847780604fbbb280118eff22674985dad1","impliedFormat":1},{"version":"21672038afe5dbedc15008bd4f12f9e6f277c683332f74375e8e1c23d426ae0f","signature":"a23ee6811573ae5ecb13d617ce2152625d9455846d6997f9ec38ae4b3e8bf37f"},{"version":"8ceb92013f59492609205a7d2235bda5c52ea91af5c3cbfa5756b4d919a3b439","signature":"1dfaefa84b5d3a895b48e8cedf07a1f08108a4950dbce252c163acd89ea8512b"},{"version":"20b63afab5227c57193e9ac294761e402a6e59d6d0a4b4fe7a62859e93026ed9","impliedFormat":1},{"version":"ba739758560a9b3e696095df9b04ac5d9d76acb11e98e06e73b7a86cbffe4207","impliedFormat":1},{"version":"7c7401c91fab197c9364f4625daff28ede54f1acbae4a791dfc4ade2db71c59d","impliedFormat":1},{"version":"48ce8d49a17cdd6dbb687c406af1caf4bed54fbe40ff14c6c505ccca6176cd21","impliedFormat":1},{"version":"3cd6ca36b5729325dd2eb0359eb1e2aed4f8cc73c3b8341e1733dfeee99fbeeb","impliedFormat":1},{"version":"0e8edbe744dfc3ce65e9fa2283f1f0eb2c0aaaec4df19765f51c346e45452cda","impliedFormat":1},{"version":"e8f32bdfbcbddd21331a469193a5c63c7b5e0d80025e649d91f833869bf5b7aa","impliedFormat":1},{"version":"1bea3584ffe75ae8fa970d651b8bbd7c67a75d21df6bd1762dc2abea73012b66","impliedFormat":1},{"version":"bf0e009524b9b436156b4a326cc3e92f1fdcd16ce51d119c94e4addc910e645e","impliedFormat":1},{"version":"52e0c1007dea40e9a588f22425a80250020ef0cd9b4a9deb36f315e075d1ab40","impliedFormat":1},{"version":"2c6ecd1f21dc339d42cecf914e1b844cef3cb68e3ec6f0ed5a9c4f6a588beb92","impliedFormat":1},{"version":"653672db5220ac24c728958a680b0db84c8d0d0f7ade5d78dbac72035d9ea70b","impliedFormat":1},{"version":"78089588b13f7207de8acdd775ca71f7415a1dfdd522f11b647ea08e154c4f14","impliedFormat":1},{"version":"d7a7229e7c12bf013834713f569d122a43056a5f34391b8388a582895b02c9e8","impliedFormat":1},{"version":"b811d082368e5b7f337d08f3e80be3d7e4c0c7f0249b00f8224acba9f77087e9","impliedFormat":1},{"version":"adb05565c81b408a97cee9201c8539dda075c30dffce0d4ec226e5050f36bfa4","impliedFormat":1},{"version":"75473b178a514d8768d6ead4a4da267aa6bedeeb792cd9437e45b46fa2dcf608","impliedFormat":1},{"version":"a75457a1e79e2bc885376b11f0a6c058e843dcac1f9d84c2293c75b13fa8803b","impliedFormat":1},{"version":"3f818a2b9c0d137cff0155a229598df6a30161d19ed315cd59006cc3f81b9847","impliedFormat":1},{"version":"97fe820ad369ce125b96c8fadd590addae19e293d5f6dc3833b7fd3808fea329","impliedFormat":1},{"version":"4e8a7cea443cbce825d1de249990bd71988cf491f689f5f4ada378c1cb965067","impliedFormat":1},{"version":"3a56da695cfddd03aee7835adf8934e4f357cc9bac59ea534cd282aba668b566","impliedFormat":1},{"version":"47244c79b80aee467a62c420ef5c2a58837236d9bf0087e9d6b43e278a71a46f","impliedFormat":1},{"version":"ba3886b9e5b3bd32588d57421988aeeea94afe40227334edc5d45fb0c5367c9d","impliedFormat":1},{"version":"226b58896f4f01f4c669d908f32c657bcab1a83f3aebb2f3d711a4fe7ba2a2d6","impliedFormat":1},{"version":"c79b22aab6a36366a6cf274ba9a719bebcc6f40f0be4ff721e91473ec19a7da1","impliedFormat":1},{"version":"05a4874f666eb37e94cd2e51b93d4accd6a4471e89e42ec98f435d57fd61d154","impliedFormat":1},{"version":"95b74ccaa6228d938036d13a96a47645f9c3d3b707c0b6989a18d77fd62447cb","impliedFormat":1},{"version":"856b83248d7e9a1343e28e8f113b142bd49b0adece47c157ab7adf3393f82967","impliedFormat":1},{"version":"bd987883be09d8ebe7aafed2e79a591d12b5845ac4a8a0b5601bdb0367c124c0","impliedFormat":1},{"version":"75ceb3dc5530c9b0797d8d6f6cbb883bb2b1add64f630c3c6d6f847aae87482e","impliedFormat":1},{"version":"efb2b9333117561dd5fc803927c1a212a8bf1dd1a5bd4549cc3c049d4a78ec63","impliedFormat":1},{"version":"ef17d2b0d94e266d4ec8caa84010b8a7b71e476c9cfa17e3db366f873d28445e","impliedFormat":1},{"version":"604a4451df97c7bfc75846cd1ed702129db0bee0f753658e0964d67619eea825","impliedFormat":1},{"version":"b9dfc4e6c69b1d60c7c060fb7d18951ca50f01fcdb46cf4eed23ca7f16471350","impliedFormat":1},{"version":"6911b52e74e60b6f3b79fc36d22a5d9537a807e16ec2e03fd594008c83981ab5","impliedFormat":1},{"version":"2551daa9cd45fb05ee16cee6282892c14a92e49a2d592b29fc9ff6d4ceef7dc2","impliedFormat":1},{"version":"5ba862c2b8f6fc41d95b417b19ed28111a685554ba2bac5bcf30680a92a46f26","impliedFormat":1},{"version":"2e47f885c94dd1180bd90160a7ebbd950256ea1a5e1f6c5a89b84de92c705ec0","impliedFormat":1},{"version":"4c8a41440f6b3066995d7d88dac8f09ed7e64f25e2b97a20be4f41e41795b0b4","signature":"c9a2ad9c87f4c0be0d32f78169fdc7faf52a190f6ed5aa2f20bea0ff6273fb9c"},{"version":"ecd7c714a23003e4990bcad34fb3e80afe9a09a24323e6a06b0599adfe4f43c5","signature":"a9775d51d46f50887975b20292c6c57dcac9ba77c357379c20a3c02ac14a2a22"},{"version":"e10dea626a225f88df2127d59b70bd0ad4d09e3f87d810be35aaf347c2a5f95e","signature":"f64a8b86c54f8b8db62aada03b88cb44f1d3ae17321d0730348e39f7b4591ccd"},{"version":"93161c1945c1f906d4da6da12384b2cc96b2c9206353d9fc38e9aeb83160e868","signature":"579fd4fd7001b05165b9e8fe060b6eee34440983b62e759e9739abddd17c9721"},{"version":"ea1e149ce1ec9508ff53ecffb62421ac2f000f416dc1a52fc231ec04fc176149","signature":"04fbbbcad47e9c78acd555c851990830949caa90ec44c4977e60f294157b26c4"},{"version":"f7f43e2d3856a8617d70e914fb6128966116a70349783afcc83f82b4ea8a9e58","signature":"00e56cba3147c5020f1649052f885afed0e7bff0cbd5b822b464adac3c921c7e"},{"version":"1375f71e05c0a101db87a9acc51b4ae92f120991ab5d67c7d78ac2607ab3fcef","signature":"68b0bce2f6feee95a8773df21325666267cf196569756f15798180882fb4fd9d"},{"version":"c7976110d237dbc6eef10968c78042cb03a67b70807869ea1fcb886cfda097b8","signature":"c77f84a7777d950a6553bf295a1297b06451d034d7dc33e6b47c9b68d37e5c7d"},{"version":"7584239b853f690c6629ae8bb683ded6ff33104e7835778bbca5ee1b1d9a0a91","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"109b9c280e8848c08bf4a78fff1fed0750a6ca1735671b5cf08b71bae5448c03","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"823f9c08700a30e2920a063891df4e357c64333fdba6889522acc5b7ae13fc08","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"1d140fe7e071ea06038b6c5e01fea83f72d9d6d68e0d606a3d824323f5133388","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"685657a3ec619ef12aa7f754eee3b28598d3bf9749da89839a72a343fffef5ff","impliedFormat":1},{"version":"0b3edeae6a959093315434dd4e870e12182077bc76a178540281a3a12cfd9524","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"fed70ffbe859d54d8c7e1ef8cc2bc38af99b00a273ebb69ac293d2cb656210bd","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"0ea329e5eab6719ff83bcb97e8bd03f1faab4feb74704010783b881fc9d80f92","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"634932724f040fe5eeaf8b81373deb91e98b1f26903ea4a0d2b7f03c95c35937","signature":"e5388bea6de85ff2933f8ea994d649616c3c549ccf863efda253a3cceb5f3670"},{"version":"79a8df0bc611d9779a16512d99d12cc437adc1079cbf9c67f4d027bed14c1343","signature":"47c1f371e9626cf90b1b68384f5caa7a6b0470a15a5678c3d897e78c26cddf0f"},{"version":"56d5dca49ac81c04991f65191ec5b8ae1fbedeff3e246ca185e951e342f47129","signature":"c595de43ea9cf677add38f6a2f2ad7a58468330c2c949c9300c5dbfe1c8ca03d"},{"version":"f0c3f314b44635340b8d7b24b60e41f56424e4155b25549d7964e35b55fb3e8d","signature":"5137d0f624a136771f4d4c06995df1899730a8078021d1d26cec1625a1d32e18"},{"version":"d471ee2327092cc0c10fa217a97d9c79833b1761da99be76d2d9a202861b3a8e","signature":"1238d9e302dee2ca5d56760e0086d5da4e37160b27b7aa5be43e82e2a7f29d42"},{"version":"e9eb1ca4e6e55ce2d6a3085d7d136d2f6b83e09b78ee64282d270918a9e74e61","signature":"2592ed72625da16080355565b7d8d6a8214ce4e87d33f6218d00179b01373a7b"},{"version":"ebcde598c941ae8e7ea72a5308aadf1d45bb9993515f0f4cd9e2c76e3d33d0b8","signature":"66cadab6874916b661948745e7fcbeafec6ee099b37debc5e3a7138fe631b693"},{"version":"9af1a554c5eb80a89f87f8cde339ce883f7766bdfde5eb175a091b916a5b916e","signature":"9d0cb98c222a40b5516f08197bad00013a92a8eeb464430c56cb3f6dc79276fb"},{"version":"460627dd2a599c2664d6f9e81ed4765ef520dc2786551d9dcab276df57b98c02","impliedFormat":1},{"version":"169cc96316cacf8b489aaab4ac6bcef7b33e8779a8902bce57c737b4aa372d16","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"4340936f4e937c452ae783514e7c7bbb7fc06d0c97993ff4865370d0962bb9cf","impliedFormat":1},{"version":"b70c7ea83a7d0de17a791d9b5283f664033a96362c42cc4d2b2e0bdaa65ef7d1","impliedFormat":1},{"version":"a65cf458c879172bef4012d3397612e7357bf72971b09db5bb5bf8fca0957612","impliedFormat":1},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":1},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":1},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":1},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":1},{"version":"d128037db3a40d1d8ae8ec36431e6a4678df56d236729f620e58f4a37f9f33d0","impliedFormat":1},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":1},{"version":"9985141f349552055b7b6b5082384fdbc1758ba14ff51fada049347628b4e018","impliedFormat":1},{"version":"c3b65655e9b7b290340f3a1c73c7e02907dd290a288de5e62726350da39b96b1","impliedFormat":1},{"version":"c0398181fff2b85eef72a8abfad6a8b31bc5989a3a763fd3d0fd61154e55bcfc","impliedFormat":1},{"version":"89daadaa769a9bf8c1fa26a464e06459197a5914ed42702e1ce439bb5915b767","impliedFormat":1},{"version":"83af685afea5d13d6cd6a8db34aba9aec7962c289bb6c92e770e838e7d5faec9","impliedFormat":1},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":1},{"version":"b99abb32e0aa47c71bf14b6bd2ebc526a4afcee1553c157e49864e41868bdfa4","impliedFormat":1},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":1},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":1},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":1}],"root":[53,54,122,123,[163,170],[275,282]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":6,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[52,1],[51,2],[220,3],[221,3],[222,4],[223,5],[224,6],[225,7],[172,2],[175,8],[173,2],[174,2],[226,9],[227,10],[228,11],[229,12],[230,13],[231,14],[232,14],[233,15],[234,16],[235,17],[236,18],[178,2],[237,19],[238,20],[239,21],[240,22],[241,23],[242,24],[243,25],[244,26],[245,27],[246,28],[247,29],[248,30],[249,31],[250,31],[251,32],[252,2],[253,33],[255,34],[254,35],[256,36],[257,37],[258,38],[259,39],[260,40],[261,41],[262,42],[177,43],[176,2],[271,44],[263,45],[264,46],[265,47],[266,48],[267,49],[268,50],[179,2],[180,2],[181,2],[219,51],[269,52],[270,53],[197,54],[207,55],[196,54],[217,56],[188,57],[187,58],[216,59],[210,60],[215,61],[190,62],[204,63],[189,64],[213,65],[185,66],[184,59],[214,67],[186,68],[191,69],[192,2],[195,69],[182,2],[218,70],[208,71],[199,72],[200,73],[202,74],[198,75],[201,76],[211,59],[193,77],[194,78],[203,79],[183,80],[206,71],[205,69],[209,2],[212,81],[170,82],[169,83],[166,84],[167,84],[54,85],[163,86],[164,87],[122,88],[123,88],[282,89],[165,2],[278,90],[281,91],[277,92],[280,2],[168,84],[275,93],[53,2],[279,94],[276,83],[124,2],[283,2],[274,95],[272,96],[273,2],[284,2],[286,2],[287,97],[171,2],[285,98],[56,2],[62,99],[55,2],[59,2],[61,100],[58,101],[121,102],[106,103],[85,104],[79,105],[91,106],[86,107],[88,108],[78,109],[89,2],[87,110],[90,111],[63,101],[64,112],[73,113],[70,114],[71,115],[72,116],[74,117],[84,118],[94,119],[93,120],[92,121],[75,122],[77,123],[76,124],[83,125],[81,126],[80,127],[82,128],[68,129],[67,130],[69,131],[65,132],[95,133],[96,134],[99,135],[97,136],[98,137],[100,133],[105,138],[101,136],[102,133],[66,2],[103,133],[104,139],[57,140],[60,141],[48,2],[49,2],[10,2],[8,2],[9,2],[14,2],[13,2],[2,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[3,2],[23,2],[4,2],[24,2],[28,2],[25,2],[26,2],[27,2],[29,2],[30,2],[31,2],[5,2],[32,2],[33,2],[34,2],[35,2],[6,2],[39,2],[36,2],[37,2],[38,2],[40,2],[7,2],[41,2],[50,2],[46,2],[47,2],[42,2],[43,2],[44,2],[45,2],[1,2],[12,2],[11,2],[304,142],[289,2],[290,2],[291,2],[292,2],[288,2],[293,143],[294,2],[296,144],[295,143],[297,143],[298,144],[299,143],[300,2],[301,143],[302,2],[303,2],[126,145],[162,146],[150,147],[151,147],[125,2],[127,148],[128,149],[129,2],[152,147],[153,147],[131,150],[154,147],[155,147],[132,84],[133,147],[134,151],[137,152],[138,84],[139,2],[140,153],[141,154],[130,149],[142,147],[156,147],[157,155],[158,147],[159,147],[136,156],[143,148],[135,149],[144,147],[145,2],[146,147],[147,2],[148,157],[149,158],[160,147],[161,158],[120,159],[111,160],[118,161],[113,2],[114,2],[112,162],[115,159],[107,2],[108,2],[119,163],[110,164],[116,2],[117,165],[109,166]],"latestChangedDtsFile":"./dist/utils/fileValidator.d.ts","version":"5.6.3"} \ No newline at end of file From 141fe5048969638026c7dfd56820a79eb3a7e3a6 Mon Sep 17 00:00:00 2001 From: Vedran Krizic Date: Sat, 11 Oct 2025 01:36:09 +0200 Subject: [PATCH 4/4] Adds image optimization and OCR language options Introduces options to control image quality, max width, and OCR language for document processing, enhancing performance and accuracy, allowing to reduce image size for LLM vision. Updates core library to optimize image conversion with lower DPI and JPG format for better compression. Extends CLI with options for image quality, max width, and OCR language. Adds new local models for extraction --- .gitignore | 8 ++++- cli/src/commands/extract.ts | 17 ++++++++-- cli/tsconfig.tsbuildinfo | 1 - core/src/index.ts | 10 ++++-- core/src/types.ts | 7 +++- core/src/utils.ts | 55 ++++++++++++++++++++++--------- core/tsconfig.tsbuildinfo | 1 - extractor/src/converter.ts | 8 ++++- extractor/src/extractors/index.ts | 2 +- extractor/src/services/extract.ts | 22 +++++++++++-- extractor/tsconfig.tsbuildinfo | 1 - 11 files changed, 103 insertions(+), 29 deletions(-) delete mode 100644 cli/tsconfig.tsbuildinfo delete mode 100644 core/tsconfig.tsbuildinfo delete mode 100644 extractor/tsconfig.tsbuildinfo diff --git a/.gitignore b/.gitignore index 19af7d9..4f228ac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,9 @@ node_modules **/dist/ -**/examples/ \ No newline at end of file +**/examples/ +**/*.traineddata +.env +.env.local +tmp/ +!tmp/.gitkeep +*.tsbuildinfo \ No newline at end of file diff --git a/cli/src/commands/extract.ts b/cli/src/commands/extract.ts index cb63850..20fb44b 100644 --- a/cli/src/commands/extract.ts +++ b/cli/src/commands/extract.ts @@ -4,6 +4,7 @@ import ora from 'ora'; import { logger } from '../utils/logger.js'; import { fileExists, readJsonFile, writeJsonFile, resolveFilePath } from '../utils/file-helper.js'; import path from 'path'; +import chalk from 'chalk'; export function createExtractCommand(): Command { const cmd = new Command('extract'); @@ -18,6 +19,9 @@ export function createExtractCommand(): Command { .option('-i, --instructions ', 'Instructions for auto-schema generation') .option('-o, --output ', 'Output file path for results (JSON)') .option('--base-url ', 'Base URL for local LLM (for Ollama)') + .option('-l, --language ', 'Language code for OCR (e.g., eng, deu, fra)', 'eng') + .option('--image-quality ', 'Image quality for compression (1-100, lower=smaller file)', '85') + .option('--max-image-width ', 'Max width for image resizing in pixels', '2048') .action(async (options) => { await handleExtract(options); }); @@ -34,6 +38,9 @@ interface ExtractOptions { instructions?: string; output?: string; baseUrl?: string; + language?: string; + imageQuality?: string; + maxImageWidth?: string; } async function handleExtract(options: ExtractOptions): Promise { @@ -88,6 +95,10 @@ async function handleExtract(options: ExtractOptions): Promise { spinner.text = `Extracting data using ${options.model}...`; + // Parse numeric options + const imageQuality = parseInt(options.imageQuality || '85', 10); + const maxImageWidth = parseInt(options.maxImageWidth || '2048', 10); + // Perform extraction const result: ExtractResult = await extract({ file: filePath, @@ -95,6 +106,9 @@ async function handleExtract(options: ExtractOptions): Promise { schema, template: options.template, autoSchema: autoSchemaOption, + language: options.language || 'eng', + imageQuality, + maxImageWidth, }); spinner.succeed('Extraction completed successfully!'); @@ -131,6 +145,3 @@ async function handleExtract(options: ExtractOptions): Promise { process.exit(1); } } - -// Import chalk dynamically since it's ESM-only -import chalk from 'chalk'; diff --git a/cli/tsconfig.tsbuildinfo b/cli/tsconfig.tsbuildinfo deleted file mode 100644 index 6859650..0000000 --- a/cli/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["./src/index.ts","./src/commands/convert.ts","./src/commands/extract.ts","./src/commands/templates.ts","./src/utils/file-helper.ts","./src/utils/logger.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/core/src/index.ts b/core/src/index.ts index 70a37f3..001c399 100644 --- a/core/src/index.ts +++ b/core/src/index.ts @@ -29,6 +29,9 @@ export const documind = async ({ outputDir, pagesToConvertAsImages = -1, tempDir = os.tmpdir(), + language = "eng", + imageQuality = 85, + maxImageWidth = 2048, }: DocumindArgs): Promise => { let inputTokenCount = 0; @@ -83,6 +86,9 @@ export const documind = async ({ localPath: pdfPath, pagesToConvertAsImages, tempDir: tempDirectory, + language, + imageQuality, + maxImageWidth, }); } @@ -94,9 +100,9 @@ export const documind = async ({ .toLowerCase() .substring(0, 255); // Truncate file name to 255 characters to prevent ENAMETOOLONG errors - // Get list of converted images + // Get list of converted images (now in JPG format for better compression) const files = await fs.readdir(tempDirectory); - const images = files.filter((file) => file.endsWith(".png")); + const images = files.filter((file) => file.endsWith(".jpg") || file.endsWith(".png")); if (maintainFormat) { // Use synchronous processing diff --git a/core/src/types.ts b/core/src/types.ts index 67abc8b..25dbf59 100644 --- a/core/src/types.ts +++ b/core/src/types.ts @@ -6,8 +6,10 @@ export enum OpenAIModels { } export enum LocalModels { - //LLAVA = "llava", + LLAVA13 = "llava:13b", + LLAVA = "llava", LLAMA3_2_VISION = "llama3.2-vision", + QWEN2_5VL_7B = "qwen2.5vl:7b", } export enum GoogleModels { @@ -30,6 +32,9 @@ export interface DocumindArgs { outputDir?: string; pagesToConvertAsImages?: number | number[]; tempDir?: string; + language?: string; // Language code for OCR (e.g., 'eng', 'deu', 'fra') + imageQuality?: number; // Image quality for compression (1-100, default 85) + maxImageWidth?: number; // Max width for image resizing (default 2048) } export interface Page { diff --git a/core/src/utils.ts b/core/src/utils.ts index 9bc4bd1..e06e075 100644 --- a/core/src/utils.ts +++ b/core/src/utils.ts @@ -3,7 +3,7 @@ import { fromPath } from "pdf2pic"; import { LLMParams } from "./types.js"; import { pipeline } from "stream/promises"; import { promisify } from "util"; -import * as Tesseract from "tesseract.js"; +import Tesseract from "tesseract.js"; import axios from "axios"; import fs from "fs-extra"; import mime from "mime-types"; @@ -137,7 +137,8 @@ export const downloadFile = async ({ // Extract text confidence from image buffer using Tesseract export const getTextFromImage = async ( - buffer: Buffer + buffer: Buffer, + language: string = "eng" ): Promise<{ confidence: number }> => { try { // Get image and metadata @@ -156,11 +157,10 @@ export const getTextFromImage = async ( .extract({ left, top, width: cropWidth, height: cropHeight }) .toBuffer(); - // Pass the croppedBuffer to Tesseract.recognize - // @TODO: How can we generalize this to non eng languages? + // Pass the croppedBuffer to Tesseract.recognize with language parameter const { data: { confidence }, - } = await Tesseract.recognize(croppedBuffer, "eng"); + } = await Tesseract.recognize(croppedBuffer, language); return { confidence }; } catch (error) { @@ -171,7 +171,10 @@ export const getTextFromImage = async ( // Correct image orientation based on OCR confidence // Run Tesseract on 4 different orientations of the image and compare the output -const correctImageOrientation = async (buffer: Buffer): Promise => { +const correctImageOrientation = async ( + buffer: Buffer, + language: string = "eng" +): Promise => { const image = sharp(buffer); const rotations = [0, 90, 180, 270]; @@ -181,7 +184,7 @@ const correctImageOrientation = async (buffer: Buffer): Promise => { .clone() .rotate(rotation) .toBuffer(); - const { confidence } = await getTextFromImage(rotatedImageBuffer); + const { confidence } = await getTextFromImage(rotatedImageBuffer, language); return { rotation, confidence }; }) ); @@ -205,20 +208,27 @@ const correctImageOrientation = async (buffer: Buffer): Promise => { return correctedImageBuffer; }; -// Convert each page to a png, correct orientation, and save that image to tmp +// Convert each page to a png, correct orientation, optimize, and save that image to tmp export const convertPdfToImages = async ({ localPath, pagesToConvertAsImages, tempDir, + language = "eng", + imageQuality = 85, + maxImageWidth = 2048, }: { localPath: string; pagesToConvertAsImages: number | number[]; tempDir: string; + language?: string; + imageQuality?: number; + maxImageWidth?: number; }) => { + // Use lower density (72 DPI is standard screen resolution, sufficient for LLM vision) const options = { - density: 300, + density: 72, // Reduced to 72 DPI to avoid high DPI warnings and reduce file size format: "png", - height: 2048, + width: maxImageWidth, // Use width instead of height for better control preserveAspectRatio: true, saveFilename: path.basename(localPath, path.extname(localPath)), savePath: tempDir, @@ -237,14 +247,29 @@ export const convertPdfToImages = async ({ if (!result.page) throw new Error("Could not identify page data"); const paddedPageNumber = result.page.toString().padStart(5, "0"); - // Correct the image orientation - const correctedBuffer = await correctImageOrientation(result.buffer); - + // Correct the image orientation with language parameter + const correctedBuffer = await correctImageOrientation(result.buffer, language); + + // Optimize image for LLM: resize and compress aggressively + // Convert to JPEG for better compression (much smaller than PNG) + const optimizedBuffer = await sharp(correctedBuffer) + .resize(maxImageWidth, null, { + fit: 'inside', + withoutEnlargement: true, + }) + .jpeg({ + quality: imageQuality, + progressive: true, + mozjpeg: true // Use mozjpeg for better compression + }) + .toBuffer(); + + // Save as JPG instead of PNG for better compression const imagePath = path.join( tempDir, - `${options.saveFilename}_page_${paddedPageNumber}.png` + `${options.saveFilename}_page_${paddedPageNumber}.jpg` ); - await fs.writeFile(imagePath, correctedBuffer); + await fs.writeFile(imagePath, optimizedBuffer); }) ); return convertResults; diff --git a/core/tsconfig.tsbuildinfo b/core/tsconfig.tsbuildinfo deleted file mode 100644 index 286af6a..0000000 --- a/core/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2020.full.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/ts5.6/globals.typedarray.d.ts","./node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/ts5.6/index.d.ts","../node_modules/libreoffice-convert/index.d.ts","../node_modules/pdf2pic/dist/types/convertresponse.d.ts","../node_modules/pdf2pic/dist/types/convert.d.ts","../node_modules/pdf2pic/dist/types/options.d.ts","../node_modules/pdf2pic/dist/index.d.ts","./src/types.ts","../node_modules/tesseract.js/src/index.d.ts","../node_modules/axios/index.d.ts","../node_modules/@types/jsonfile/index.d.ts","../node_modules/@types/jsonfile/utils.d.ts","../node_modules/@types/fs-extra/index.d.ts","../node_modules/@types/mime-types/index.d.ts","../node_modules/sharp/lib/index.d.ts","./src/utils.ts","../node_modules/p-limit/index.d.ts","./src/providers/utils/completion.ts","./src/providers/openai.ts","./src/providers/ollama.ts","./src/providers/google.ts","./src/providers/index.ts","./src/index.ts","../node_modules/@types/diff-match-patch/index.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/node-fetch/externals.d.ts","../node_modules/@types/node-fetch/index.d.ts","../node_modules/uuid/dist/cjs/types.d.ts","../node_modules/uuid/dist/cjs/max.d.ts","../node_modules/uuid/dist/cjs/nil.d.ts","../node_modules/uuid/dist/cjs/parse.d.ts","../node_modules/uuid/dist/cjs/stringify.d.ts","../node_modules/uuid/dist/cjs/v1.d.ts","../node_modules/uuid/dist/cjs/v1tov6.d.ts","../node_modules/uuid/dist/cjs/v35.d.ts","../node_modules/uuid/dist/cjs/v3.d.ts","../node_modules/uuid/dist/cjs/v4.d.ts","../node_modules/uuid/dist/cjs/v5.d.ts","../node_modules/uuid/dist/cjs/v6.d.ts","../node_modules/uuid/dist/cjs/v6tov1.d.ts","../node_modules/uuid/dist/cjs/v7.d.ts","../node_modules/uuid/dist/cjs/validate.d.ts","../node_modules/uuid/dist/cjs/version.d.ts","../node_modules/uuid/dist/cjs/index.d.ts"],"fileIdsList":[[56,95,98],[56,97,98],[56,98,103,132],[56,98,99,104,110,111,118,129,140],[56,98,99,100,110,118],[56,98],[51,52,53,56,98],[56,98,101,141],[56,98,102,103,111,119],[56,98,103,129,137],[56,98,104,106,110,118],[56,97,98,105],[56,98,106,107],[56,98,110],[56,98,108,110],[56,97,98,110],[56,98,110,111,112,129,140],[56,98,110,111,112,125,129,132],[56,93,98,145],[56,98,106,110,113,118,129,140],[56,98,110,111,113,114,118,129,137,140],[56,98,113,115,129,137,140],[56,98,110,116],[56,98,117,140,145],[56,98,106,110,118,129],[56,98,119],[56,98,120],[56,97,98,121],[56,95,96,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146],[56,98,123],[56,98,124],[56,98,110,125,126],[56,98,125,127,141,143],[56,98,110,129,130,131,132],[56,98,129,131],[56,98,129,130],[56,98,132],[56,98,133],[56,95,98,129],[56,98,110,135,136],[56,98,135,136],[56,98,103,118,129,137],[56,98,138],[98],[54,55,56,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146],[56,98,118,139],[56,98,113,124,140],[56,98,103,141],[56,98,129,142],[56,98,117,143],[56,98,144],[56,98,103,110,112,121,129,140,143,145],[56,98,129,146],[56,98,119,120,153,158,161,162,163,167],[56,98,153,155,161,163],[56,98,153,163,164,165,166],[56,98,153],[56,98,120,130,141,148,152,153,154,155,158,159,160],[56,98,111,147,156,157],[56,98,111,140,147],[56,98,113,140,147,170,171],[56,98,113,129,147],[56,98,147],[56,98,150,151],[56,98,149],[56,98,129,147],[56,65,69,98,140],[56,65,98,129,140],[56,60,98],[56,62,65,98,137,140],[56,98,118,137],[56,60,98,147],[56,62,65,98,118,140],[56,57,58,61,64,98,110,129,140],[56,65,72,98],[56,57,63,98],[56,65,86,87,98],[56,61,65,98,132,140,147],[56,86,98,147],[56,59,60,98,147],[56,65,98],[56,59,60,61,62,63,64,65,66,67,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,98],[56,65,80,98],[56,65,72,73,98],[56,63,65,73,74,98],[56,64,98],[56,57,60,65,98],[56,65,69,73,74,98],[56,69,98],[56,63,65,68,98,140],[56,57,62,65,72,98],[56,98,129],[56,60,65,86,98,145,147],[56,98,173,174,175,176,177,178,179,181,182,183,184,185,186,187,188],[56,98,173],[56,98,173,180]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"2d1319e6b5d0efd8c5eae07eb864a00102151e8b9afddd2d45db52e9aae002c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"ca6d304b929748ea15c33f28c1f159df18a94470b424ab78c52d68d40a41e1e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"a72ffc815104fb5c075106ebca459b2d55d07862a773768fce89efc621b3964b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"d674383111e06b6741c4ad2db962131b5b0fa4d0294b998566c635e86195a453","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f77d9188e41291acf14f476e931972460a303e1952538f9546e7b370cb8d0d20","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"4d7da7075068195f8f127f41c61e304cdca5aafb1be2d0f4fb67c6b4c3e98d50","affectsGlobalScope":true,"impliedFormat":1},{"version":"a4bdde4e601e9554a844e1e0d0ccfa05e183ef9d82ab3ac25f17c1709033d360","impliedFormat":1},{"version":"ad23fd126ff06e72728dd7bfc84326a8ca8cec2b9d2dac0193d42a777df0e7d8","impliedFormat":1},{"version":"9dd9f50652a176469e85fb65aa081d2e7eb807e2c476f378233de4f1f6604962","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"7edec695cdb707c7146ac34c44ca364469c7ea504344b3206c686e79f61b61a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"a20f1e119615bf7632729fd89b6c0b5ffdc2df3b512d6304146294528e3ebe19","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"235bfb54b4869c26f7e98e3d1f68dbfc85acf4cf5c38a4444a006fbf74a8a43d","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"bb715efb4857eb94539eafb420352105a0cff40746837c5140bf6b035dd220ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"fdedf82878e4c744bc2a1c1e802ae407d63474da51f14a54babe039018e53d8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"08353b04a3501d84fc8d7b49de99f6c1cc26026e6d9d697a18315f3bfe92ed03","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"efeedd8bbc5c0d53e760d8b120a010470722982e6ae14de8d1bcff66ebc2ae71","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"9091e564b81e7b4c382a33c62de704a699e10508190547d4f7c1c3e039d2db2b","impliedFormat":1},{"version":"8bc5119510ceac11aafc0b41d96cf67e684fbe003ce6be4c79bf7ba2ea9bf03d","impliedFormat":1},{"version":"32304e5602c24dac53b875caf8ac14897df52a675893dcc4c798e9e1dd3c5307","impliedFormat":1},{"version":"f50448f0a8ad63a6c3a036a09340acc41658ff2e55d84266a0f58ab5ef2ae527","impliedFormat":1},{"version":"f9ef98f7d1c2ec0f46dc858fc4274d633af45f29f8c25d4097ed987ee933c7c4","impliedFormat":1},{"version":"442904a00f3ab3f7b014054ce356011cdafa893cb3d2c62a98ee033a9e673cc4","impliedFormat":1},{"version":"697663a5a842dc8b85bb477515994d7aeace25a80b40a50b01f68b7e5dc62746","signature":"37aa88cb88770b5d9775e1463c29ac987f49f8085b6829d5eee109d8da481d0d"},{"version":"a8a99199eb0a778f62f9cd8029afda48560e8bbdfac0227a2a1972697f88f68c","impliedFormat":1},{"version":"7584239b853f690c6629ae8bb683ded6ff33104e7835778bbca5ee1b1d9a0a91","impliedFormat":99},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"169cc96316cacf8b489aaab4ac6bcef7b33e8779a8902bce57c737b4aa372d16","impliedFormat":1},{"version":"e749bbd37dadf82c9833278780527c717226e1e2c9bc7b2576c8ec1c40ec5647","impliedFormat":1},{"version":"caf2e5f8dad2530fe16a60f73190a3bd3ea225373e51f2d45b755d33f5ceeeb4","signature":"5ccf07d573206118260fa7dc807e42b724038bece56ba6fbbcf8ec2555ede420"},{"version":"9f91eee81fda27d38d60963fe1de2f050a5cfb241af56b7e7ee6d9aa8522a058","impliedFormat":1},{"version":"2abcd96629d7ab34220ff3f3d70a55789ea63ab75d11484883958ce2ccee0276","signature":"b053c1d5fed15b399eec92c083e23706735bdc09ba80d72e3ce2663aeee947cf"},{"version":"6e0b26306ac5357ae0911656897735e075b72104c05559b7b27619ab9b6e72b1","signature":"e44f36192b30e1b71b85fc255c00caa8625a45d2a6859b53e6374bf81d22ac55"},{"version":"e3474eb1e43eba3e2eaa295e31f8f82a136c67a8a8ef49c016b3595d1551d1a8","signature":"b1cbf4e2b63c0bb5b9d9cc6d8031f30ef514d5bf6e6c2de24289d098569a4a08"},{"version":"4fd7e9e188fac3073d060197b92e1112074bd0e8620a59cf4b83902768eb4c55","signature":"090a08ef01aad8c096b2ff5484946c23cb51402e61ee643af145156abeaba06b"},{"version":"72c0fd3b36cae1395b145f1afc3042c8ccae02b20b1d9e5308451906ec5e4a8c","signature":"b84aa2616515e0f321f50bd0ccc5893181076ed08aab01e619903df0c40402bf"},{"version":"7118bd2c6cff4cc3ca9e6cc636a20023d0ea1de2f28837387d923edff40916da","signature":"7705d4fb9619f8eb448947ef0cdf7d9d0a602c7c4181403f5cce76338537ad3b"},{"version":"460627dd2a599c2664d6f9e81ed4765ef520dc2786551d9dcab276df57b98c02","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"4340936f4e937c452ae783514e7c7bbb7fc06d0c97993ff4865370d0962bb9cf","impliedFormat":1},{"version":"b70c7ea83a7d0de17a791d9b5283f664033a96362c42cc4d2b2e0bdaa65ef7d1","impliedFormat":1},{"version":"a65cf458c879172bef4012d3397612e7357bf72971b09db5bb5bf8fca0957612","impliedFormat":1},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":1},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":1},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":1},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":1},{"version":"d128037db3a40d1d8ae8ec36431e6a4678df56d236729f620e58f4a37f9f33d0","impliedFormat":1},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":1},{"version":"9985141f349552055b7b6b5082384fdbc1758ba14ff51fada049347628b4e018","impliedFormat":1},{"version":"c3b65655e9b7b290340f3a1c73c7e02907dd290a288de5e62726350da39b96b1","impliedFormat":1},{"version":"c0398181fff2b85eef72a8abfad6a8b31bc5989a3a763fd3d0fd61154e55bcfc","impliedFormat":1},{"version":"89daadaa769a9bf8c1fa26a464e06459197a5914ed42702e1ce439bb5915b767","impliedFormat":1},{"version":"83af685afea5d13d6cd6a8db34aba9aec7962c289bb6c92e770e838e7d5faec9","impliedFormat":1},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":1},{"version":"b99abb32e0aa47c71bf14b6bd2ebc526a4afcee1553c157e49864e41868bdfa4","impliedFormat":1},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":1},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":1},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":1}],"root":[153,161,[163,168]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":6,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[95,1],[96,1],[97,2],[98,3],[99,4],[100,5],[51,6],[54,7],[52,6],[53,6],[101,8],[102,9],[103,10],[104,11],[105,12],[106,13],[107,13],[109,14],[108,15],[110,16],[111,17],[112,18],[94,19],[113,20],[114,21],[115,22],[116,23],[117,24],[118,25],[119,26],[120,27],[121,28],[122,29],[123,30],[124,31],[125,32],[126,32],[127,33],[128,6],[129,34],[131,35],[130,36],[132,37],[133,38],[134,39],[135,40],[136,41],[137,42],[138,43],[56,44],[55,6],[147,45],[139,46],[140,47],[141,48],[142,49],[143,50],[144,51],[145,52],[146,53],[168,54],[166,55],[167,56],[165,55],[164,55],[163,57],[153,6],[161,58],[169,6],[158,59],[156,60],[157,6],[159,6],[171,6],[172,61],[155,6],[170,62],[148,63],[162,6],[152,64],[150,65],[149,6],[151,6],[160,66],[154,6],[48,6],[49,6],[10,6],[8,6],[9,6],[14,6],[13,6],[2,6],[15,6],[16,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[3,6],[23,6],[4,6],[24,6],[28,6],[25,6],[26,6],[27,6],[29,6],[30,6],[31,6],[5,6],[32,6],[33,6],[34,6],[35,6],[6,6],[39,6],[36,6],[37,6],[38,6],[40,6],[7,6],[41,6],[50,6],[46,6],[47,6],[42,6],[43,6],[44,6],[45,6],[1,6],[12,6],[11,6],[72,67],[82,68],[71,67],[92,69],[63,70],[62,71],[91,63],[85,72],[90,73],[65,74],[79,75],[64,76],[88,77],[60,78],[59,63],[89,79],[61,80],[66,81],[67,6],[70,81],[57,6],[93,82],[83,83],[74,84],[75,85],[77,86],[73,87],[76,88],[86,63],[68,89],[69,90],[78,91],[58,92],[81,83],[80,81],[84,6],[87,93],[189,94],[174,6],[175,6],[176,6],[177,6],[173,6],[178,95],[179,6],[181,96],[180,95],[182,95],[183,96],[184,95],[185,6],[186,95],[187,6],[188,6]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.6.3"} \ No newline at end of file diff --git a/extractor/src/converter.ts b/extractor/src/converter.ts index 7d50fb4..31929eb 100644 --- a/extractor/src/converter.ts +++ b/extractor/src/converter.ts @@ -9,12 +9,18 @@ interface ConvertFileResult { export const convertFile = async ( filePath: string, - model: string + model: string, + language: string = "eng", + imageQuality: number = 85, + maxImageWidth: number = 2048 ): Promise => { try { const result = await documind({ filePath, model: model as ModelOptions, + language, + imageQuality, + maxImageWidth, }); const { pages, fileName } = result; diff --git a/extractor/src/extractors/index.ts b/extractor/src/extractors/index.ts index 9eef97d..95411ba 100644 --- a/extractor/src/extractors/index.ts +++ b/extractor/src/extractors/index.ts @@ -4,7 +4,7 @@ import { googleExtractor } from "./google.js"; import { ZodObject, ZodRawShape } from "zod"; export const OpenAIModels = ["gpt-4o", "gpt-4o-mini", "gpt-4.1", "gpt-4.1-mini"]; -export const LocalModels = ["llama3.2-vision"]; +export const LocalModels = ["llama3.2-vision", "llava", "llava:13b", "qwen2.5vl:7b"]; export const GoogleModels = [ "gemini-2.0-flash-001", "gemini-2.0-flash-lite-preview-02-05", diff --git a/extractor/src/services/extract.ts b/extractor/src/services/extract.ts index 2a228c1..492c0a8 100644 --- a/extractor/src/services/extract.ts +++ b/extractor/src/services/extract.ts @@ -13,6 +13,9 @@ export interface ExtractOptions { template?: string; model?: string; autoSchema?: boolean | { instructions?: string }; + language?: string; // Language code for OCR (e.g., 'eng', 'deu', 'fra') + imageQuality?: number; // Image quality for compression (1-100, default 85) + maxImageWidth?: number; // Max width for image resizing (default 2048) } export interface ExtractResult { @@ -28,7 +31,16 @@ export interface ExtractResult { * @param options - Options for the extraction process. * @returns - The result of the extraction, including pages, extracted data, and file name. */ -export async function extract({ file, schema, template, model, autoSchema }: ExtractOptions): Promise { +export async function extract({ + file, + schema, + template, + model, + autoSchema, + language = "eng", + imageQuality = 85, + maxImageWidth = 2048, +}: ExtractOptions): Promise { try { const defaultModel = model || "gpt-4o-mini"; @@ -54,7 +66,13 @@ export async function extract({ file, schema, template, model, autoSchema }: Ext throw new Error("You must provide a schema, template, or enable autoSchema."); } - const { markdown, totalPages, fileName } = await convertFile(file, defaultModel); + const { markdown, totalPages, fileName } = await convertFile( + file, + defaultModel, + language, + imageQuality, + maxImageWidth + ); if (autoSchema) { const autoSchemaOption = autoSchema === true ? true : { instructions: autoSchema.instructions || "" }; diff --git a/extractor/tsconfig.tsbuildinfo b/extractor/tsconfig.tsbuildinfo deleted file mode 100644 index e2db4c7..0000000 --- a/extractor/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2020.full.d.ts","../core/dist/types.d.ts","../core/dist/index.d.ts","./src/utils/generatemarkdown.ts","./src/converter.ts","../node_modules/openai/_shims/manual-types.d.ts","../node_modules/openai/_shims/auto/types.d.ts","../node_modules/openai/streaming.d.ts","../node_modules/openai/error.d.ts","../node_modules/openai/_shims/multipartbody.d.ts","../node_modules/openai/uploads.d.ts","../node_modules/openai/core.d.ts","../node_modules/openai/_shims/index.d.ts","../node_modules/openai/pagination.d.ts","../node_modules/openai/resource.d.ts","../node_modules/openai/resources/completions.d.ts","../node_modules/openai/resources/shared.d.ts","../node_modules/openai/resources/chat/completions.d.ts","../node_modules/openai/resources/chat/chat.d.ts","../node_modules/openai/resources/chat/index.d.ts","../node_modules/openai/resources/audio/speech.d.ts","../node_modules/openai/resources/audio/transcriptions.d.ts","../node_modules/openai/resources/audio/translations.d.ts","../node_modules/openai/resources/audio/audio.d.ts","../node_modules/openai/resources/batches.d.ts","../node_modules/openai/resources/beta/threads/messages.d.ts","../node_modules/openai/resources/beta/threads/runs/steps.d.ts","../node_modules/openai/resources/beta/threads/runs/runs.d.ts","../node_modules/openai/lib/eventstream.d.ts","../node_modules/openai/lib/assistantstream.d.ts","../node_modules/openai/resources/beta/vector-stores/files.d.ts","../node_modules/openai/resources/beta/vector-stores/file-batches.d.ts","../node_modules/openai/resources/beta/vector-stores/vector-stores.d.ts","../node_modules/openai/resources/beta/threads/threads.d.ts","../node_modules/openai/resources/beta/assistants.d.ts","../node_modules/openai/lib/abstractchatcompletionrunner.d.ts","../node_modules/openai/lib/chatcompletionstream.d.ts","../node_modules/openai/lib/parser.d.ts","../node_modules/openai/lib/chatcompletionstreamingrunner.d.ts","../node_modules/openai/lib/jsonschema.d.ts","../node_modules/openai/lib/runnablefunction.d.ts","../node_modules/openai/lib/chatcompletionrunner.d.ts","../node_modules/openai/resources/beta/chat/completions.d.ts","../node_modules/openai/resources/beta/chat/chat.d.ts","../node_modules/openai/resources/beta/beta.d.ts","../node_modules/openai/resources/embeddings.d.ts","../node_modules/openai/resources/files.d.ts","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts","../node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts","../node_modules/openai/resources/fine-tuning/fine-tuning.d.ts","../node_modules/openai/resources/images.d.ts","../node_modules/openai/resources/models.d.ts","../node_modules/openai/resources/moderations.d.ts","../node_modules/openai/resources/uploads/parts.d.ts","../node_modules/openai/resources/uploads/uploads.d.ts","../node_modules/openai/resources/index.d.ts","../node_modules/openai/index.d.ts","../node_modules/zod/lib/helpers/typealiases.d.ts","../node_modules/zod/lib/helpers/util.d.ts","../node_modules/zod/lib/zoderror.d.ts","../node_modules/zod/lib/locales/en.d.ts","../node_modules/zod/lib/errors.d.ts","../node_modules/zod/lib/helpers/parseutil.d.ts","../node_modules/zod/lib/helpers/enumutil.d.ts","../node_modules/zod/lib/helpers/errorutil.d.ts","../node_modules/zod/lib/helpers/partialutil.d.ts","../node_modules/zod/lib/standard-schema.d.ts","../node_modules/zod/lib/types.d.ts","../node_modules/zod/lib/external.d.ts","../node_modules/zod/lib/index.d.ts","../node_modules/zod/index.d.ts","../node_modules/openai/helpers/zod.d.ts","./src/extractors/ollama.ts","./src/extractors/openai.ts","../node_modules/@google/generative-ai/dist/generative-ai.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/any.d.ts","../node_modules/zod-to-json-schema/dist/types/errormessages.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/array.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/bigint.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/boolean.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/number.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/date.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/enum.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/intersection.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/literal.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/string.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/record.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/map.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/nativeenum.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/never.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/null.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/nullable.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/object.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/set.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/tuple.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/undefined.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/union.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/unknown.d.ts","../node_modules/zod-to-json-schema/dist/types/parsetypes.d.ts","../node_modules/zod-to-json-schema/dist/types/refs.d.ts","../node_modules/zod-to-json-schema/dist/types/options.d.ts","../node_modules/zod-to-json-schema/dist/types/parsedef.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/branded.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/catch.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/default.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/effects.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/optional.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/pipeline.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/promise.d.ts","../node_modules/zod-to-json-schema/dist/types/parsers/readonly.d.ts","../node_modules/zod-to-json-schema/dist/types/selectparser.d.ts","../node_modules/zod-to-json-schema/dist/types/zodtojsonschema.d.ts","../node_modules/zod-to-json-schema/dist/types/index.d.ts","./src/extractors/google.ts","./src/extractors/index.ts","./src/prompts.ts","./src/autoschema/generation-schemas/base.ts","./src/autoschema/generation-schemas/secondary.ts","./src/utils/converttozodschema.ts","./src/autoschema/cleanschemafields.ts","./src/autoschema/autogenerateschema.ts","../node_modules/axios/index.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/ts5.6/globals.typedarray.d.ts","./node_modules/@types/node/ts5.6/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/ts5.6/index.d.ts","../node_modules/@types/jsonfile/index.d.ts","../node_modules/@types/jsonfile/utils.d.ts","../node_modules/@types/fs-extra/index.d.ts","./src/utils/filevalidator.ts","./src/utils/schemavalidator.ts","./src/services/templates.ts","./src/services/extract.ts","./src/utils/pdfvalidator.ts","./src/utils/converttotext.ts","./src/services/formatter.ts","./src/index.ts","../node_modules/@types/diff-match-patch/index.d.ts","../node_modules/@types/mime-types/index.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/node-fetch/externals.d.ts","../node_modules/@types/node-fetch/index.d.ts","../node_modules/uuid/dist/cjs/types.d.ts","../node_modules/uuid/dist/cjs/max.d.ts","../node_modules/uuid/dist/cjs/nil.d.ts","../node_modules/uuid/dist/cjs/parse.d.ts","../node_modules/uuid/dist/cjs/stringify.d.ts","../node_modules/uuid/dist/cjs/v1.d.ts","../node_modules/uuid/dist/cjs/v1tov6.d.ts","../node_modules/uuid/dist/cjs/v35.d.ts","../node_modules/uuid/dist/cjs/v3.d.ts","../node_modules/uuid/dist/cjs/v4.d.ts","../node_modules/uuid/dist/cjs/v5.d.ts","../node_modules/uuid/dist/cjs/v6.d.ts","../node_modules/uuid/dist/cjs/v6tov1.d.ts","../node_modules/uuid/dist/cjs/v7.d.ts","../node_modules/uuid/dist/cjs/validate.d.ts","../node_modules/uuid/dist/cjs/version.d.ts","../node_modules/uuid/dist/cjs/index.d.ts"],"fileIdsList":[[51,177,223],[177,223],[177,220,223],[177,222,223],[177,223,228,256],[177,223,224,229,234,242,253,264],[177,223,224,225,234,242],[172,173,174,177,223],[177,223,226,265],[177,223,227,228,235,243],[177,223,228,253,261],[177,223,229,231,234,242],[177,222,223,230],[177,223,231,232],[177,223,233,234],[177,222,223,234],[177,223,234,235,236,253,264],[177,223,234,235,236,249,253,256],[177,223,231,234,237,242,253,264],[177,223,234,235,237,238,242,253,261,264],[177,223,237,239,253,261,264],[177,223,234,240],[177,223,241,264,269],[177,223,231,234,242,253],[177,223,243],[177,223,244],[177,222,223,245],[177,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270],[177,223,247],[177,223,248],[177,223,234,249,250],[177,223,249,251,265,267],[177,223,234,253,254,256],[177,223,255,256],[177,223,253,254],[177,223,256],[177,223,257],[177,220,223,253,258],[177,223,234,259,260],[177,223,259,260],[177,223,228,242,253,261],[177,223,262],[223],[175,176,177,178,179,180,181,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270],[177,223,242,263],[177,223,237,248,264],[177,223,228,265],[177,223,253,266],[177,223,241,267],[177,223,268],[177,218,223],[177,218,223,234,236,245,253,256,264,267,269],[177,223,253,270],[177,190,194,223,264],[177,190,223,253,264],[177,185,223],[177,187,190,223,261,264],[177,223,242,261],[177,223,271],[177,185,223,271],[177,187,190,223,242,264],[177,182,183,186,189,223,234,253,264],[177,190,197,223],[177,182,188,223],[177,190,211,212,223],[177,186,190,223,256,264,271],[177,211,223,271],[177,184,185,223,271],[177,190,223],[177,184,185,186,187,188,189,190,191,192,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,212,213,214,215,216,217,223],[177,190,205,223],[177,190,197,198,223],[177,188,190,198,199,223],[177,189,223],[177,182,185,190,223],[177,190,194,198,199,223],[177,194,223],[177,188,190,193,223,264],[177,182,187,190,197,223],[177,223,253],[177,185,190,211,223,269,271],[120,163,164,165,166,167,168,169,177,223],[168,177,223],[120,177,223],[52,53,177,223],[120,124,162,177,223],[120,122,123,163,177,223],[106,120,121,177,223],[164,168,170,177,223,277,278,281],[54,164,165,168,170,177,223,275,276,277],[54,177,223,279,280],[168,177,223,235,244,264],[171,177,223,244,274],[171,177,223],[177,223,235,271,272,273],[177,223,235,264,271],[177,223,237,264,271,285,286],[177,223,237,253,271],[55,56,61,177,223],[57,58,60,62,177,223],[61,177,223],[87,105,120,177,223],[58,60,61,62,63,65,67,68,73,74,94,95,96,99,100,101,102,104,105,177,223],[61,65,67,78,88,90,91,92,106,177,223],[61,62,75,76,77,78,83,84,177,223],[67,85,87,90,106,177,223],[61,62,67,85,92,106,177,223],[62,67,85,86,87,90,106,177,223],[58,177,223],[66,67,92,177,223],[88,89,91,177,223],[106,177,223],[64,70,71,72,177,223],[61,62,64,177,223],[61,64,73,177,223],[61,64,71,73,177,223],[61,63,64,74,177,223],[61,63,64,66,68,75,76,77,82,83,177,223],[64,82,83,84,93,177,223],[64,92,177,223],[61,64,67,85,86,87,88,90,91,177,223],[61,63,64,84,177,223],[57,61,63,64,68,75,76,77,79,83,84,177,223],[61,63,64,76,177,223],[57,61,64,66,68,75,77,79,82,83,84,177,223],[61,63,64,80,82,177,223],[61,63,64,82,177,223],[61,63,64,80,81,177,223],[64,67,177,223],[57,61,64,65,66,67,68,177,223],[67,68,177,223],[57,61,64,65,67,177,223],[61,64,177,223],[61,62,63,64,177,223],[64,98,177,223],[61,63,64,177,223],[61,63,64,97,177,223],[65,66,69,73,74,94,95,96,99,100,101,102,104,177,223],[61,64,96,103,177,223],[62,177,223],[59,61,62,177,223],[177,223,288,289,290,291,292,293,294,296,297,298,299,300,301,302,303],[177,223,288],[177,223,288,295],[148,149,177,223],[125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,177,223],[120,148,149,177,223],[120,126,148,149,177,223],[120,126,149,177,223],[120,126,130,149,150,177,223],[120,149,177,223],[120,136,148,149,177,223],[149,177,223],[120,140,148,149,177,223],[120,133,148,149,177,223],[120,132,135,148,149,177,223],[125,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,177,223],[120,148,150,177,223],[119,177,223],[109,110,177,223],[107,108,109,111,112,117,177,223],[108,109,177,223],[118,177,223],[109,177,223],[107,108,109,112,113,114,115,116,177,223],[107,108,119,177,223]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},"37aa88cb88770b5d9775e1463c29ac987f49f8085b6829d5eee109d8da481d0d","7705d4fb9619f8eb448947ef0cdf7d9d0a602c7c4181403f5cce76338537ad3b",{"version":"922d08af0d1e0c32a03b51d41ece2251b3e0215918e0b981271e992e36ccb6e7","signature":"9bfc8f322fbdc76e99c42da9f1c1ec7522a9f6407bc806cccc68c596565a02df"},{"version":"9d7b8394fc7e878acf32434fce1dde8356105f904cbbc29f18bc592c781837dd","signature":"44bf9925ca1d3e57951a74c61722baabbc6d138d665ea54d84e9ebd3a85ae8a2"},{"version":"b1535397a73ca6046ca08957788a4c9a745730c7b2b887e9b9bc784214f3abac","impliedFormat":1},{"version":"1dab12d45a7ab2b167b489150cc7d10043d97eadc4255bfee8d9e07697073c61","impliedFormat":1},{"version":"9cce77f4aa9229e1a8da375823124d225b46185586d7c7bc61a3f95c392cf828","impliedFormat":1},{"version":"5c146fcc8545242d9e6a390ddc7702827c169a9d570c820906498bb5260bec14","impliedFormat":1},{"version":"d47961927fe421b16a444286485165f10f18c2ef7b2b32a599c6f22106cd223b","impliedFormat":1},{"version":"341672ca9475e1625c105a6a99f46e8b4f14dff977e53a828deef7b5e932638f","impliedFormat":1},{"version":"6d4f60a967a88efd2a8c902d9498c74ce746e785665da31244ad029b1ee8fa18","impliedFormat":1},{"version":"408bb46ac61bf543760ad777b3b00193b01b7efe61c2a4be68babe7b5c265a64","impliedFormat":1},{"version":"a41b0df2464cc5044a5ec6aa6ac1eaf33a2feecfb09a8b1ccce2adea426aaccf","impliedFormat":1},{"version":"137272a656222e83280287c3b6b6d949d38e6c125b48aff9e987cf584ff8eb42","impliedFormat":1},{"version":"fd5819941fc3065d5c38be01c851cc3fb3f6166054ae670241d674029c752356","impliedFormat":1},{"version":"ba6adba337b25e665440a9ae1e4fa3eaa0b4862b5f56111195bc022a7a5ea865","impliedFormat":1},{"version":"110c91dffcd07ed84891b937eb8dad0f993c8908183cb8786941de5e76faba05","impliedFormat":1},{"version":"331dfe3a5bb4a416e7fe990172d59569820b3d1d6b4b176d942c1238429b9c3e","impliedFormat":1},{"version":"ebabbecb77f5637f4e22a0a290dfa34cf44f97c41a4497a54c9d74f1d899bf11","impliedFormat":1},{"version":"b044755bc931a564509edff939534c9d6753d151f2cc58bb08cb9cd539bf78a8","impliedFormat":1},{"version":"94ad825309fa0eea0f4a6b14e7b2808897997368196d583d74d7c05f55e98645","impliedFormat":1},{"version":"9854283bb96e17e0d00a7286f96ceca60bb2bcc90ef67c2266752c9434ac9dfc","impliedFormat":1},{"version":"e33b51541cfc41a1414923cdc315aa25a534873b587d263905b8900a3de73dab","impliedFormat":1},{"version":"ba7915b80c71c7474c861cb62372ad8ee3a30f2e30e769acec8346dd7b0e8f32","impliedFormat":1},{"version":"23f2b38efd3e6372eb728e59603dd8dd364713810fb8a8ebf255a0fb4a33a4be","impliedFormat":1},{"version":"29f6dcb986ed66d50346c385a556d6fcf41184a737e211618b8ec75965a1b0bd","impliedFormat":1},{"version":"def6e7d052efb197bd1bdac9290f9d2a01d1348c6b5323584fc52e82cc148631","impliedFormat":1},{"version":"ba64b14db9d08613474dc7c06d8ffbcb22a00a4f9d2641b2dcf97bc91da14275","impliedFormat":1},{"version":"530197974beb0a02c5a9eb7223f03e27651422345c8c35e1a13ddc67e6365af5","impliedFormat":1},{"version":"d38807fdc876ccd09b434e91594c981c7246b0f9a370ce2dc505c3b7b5c3683d","impliedFormat":1},{"version":"d08718f98dd6d6979980a71c3aaa04e8bd0f9de60bb0200f228eb2bcb63f52f8","impliedFormat":1},{"version":"993201a93cd982573b088e0ca0807bf8ea66c399d32a7b8705b4901fcb828142","impliedFormat":1},{"version":"70e0f561e00a260464d1af3018e097a5f9332df38dd20be2acfe9d92e3f3233d","impliedFormat":1},{"version":"99990e52b18cd22ab194938cf7d53047c6820a0b7155eccef95b6a1138a6b6f3","impliedFormat":1},{"version":"f02ac71075b54b5c0a384dddbd773c9852dba14b4bf61ca9f1c8ba6b09101d3e","impliedFormat":1},{"version":"a7ebada2ffde87eaf4e70ab4a1c86a1fd788f78d322c4a6b45df0b90f66095d0","impliedFormat":1},{"version":"72ec9114995aa70aca1e3dc5e086d1ae82f00a24ff23a6640d2d9caef5fcc729","impliedFormat":1},{"version":"cdf62cebf884c6fde74f733d7993b7e255e513d6bc1d0e76c5c745ac8df98453","impliedFormat":1},{"version":"e6dd8526d318cce4cb3e83bef3cb4bf3aa08186ddc984c4663cf7dee221d430e","impliedFormat":1},{"version":"bc79e5e54981d32d02e32014b0279f1577055b2ebee12f4d2dc6451efd823a19","impliedFormat":1},{"version":"ce9f76eceb4f35c5ecd9bf7a1a22774c8b4962c2c52e5d56a8d3581a07b392f9","impliedFormat":1},{"version":"b806ae37b0cfbefa74010d40aac13654fecd4668bc17b6767dc34751ca657f06","impliedFormat":1},{"version":"18084f07f6e85e59ce11b7118163dff2e452694fffb167d9973617699405fbd1","impliedFormat":1},{"version":"28bc2bf49f198cfa6cb16aac93be58ae8606e14cfc7aaee4fcc948199fa55696","impliedFormat":1},{"version":"397be451722bdf121b8e2d15b456efabb104d6d361d33371062abba33ed248d9","impliedFormat":1},{"version":"8ec89ffd21238311fa61acb145b408eab08eee8153bb000ca4bcdbcc2e5889f1","impliedFormat":1},{"version":"faf43114b6264ee1b0ec2031a90784858bcc50052e243ca2b6e53ae2ffaf851a","impliedFormat":1},{"version":"b8c4e5edb96bfb51d1afb83d0093a06ea73d73935aa1ea2896b555c6ea1c1347","impliedFormat":1},{"version":"d476980536d24997a9a793f4b1deede2b29c88d71e58769a289548259acf9efe","impliedFormat":1},{"version":"e6a875ee8848072986d5e824e8e2667e8d8cb8db4241924f77cf3574ae09dd5d","impliedFormat":1},{"version":"7ffb4e58ca1b9ed5f26bed3dc0287c4abd7a2ba301ca55e2546d01a7f7f73de7","impliedFormat":1},{"version":"e1f530f4c01864435c4c52d95b7e0d69816bea04531826584b81c5d9d1a14236","impliedFormat":1},{"version":"0fbe1a754e3da007cc2726f61bc8f89b34b466fe205b20c1e316eb240bebe9e8","impliedFormat":1},{"version":"37a5bd2708bece0c0f78f202d95cf9b73a4dc2ea9f397930a77146a56aea94c8","impliedFormat":1},{"version":"8c7e33062fdb5cf97fc112c72f3a4aa0927a6fde59c3c92a36829774976ad0c4","impliedFormat":1},{"version":"9a2488d3a8b40e8e353652546b3473df856b1930411afba822a81758204a4ed8","impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"b542939a35357458e62f8229c2d7578ae888d63d3ab837395d7bb8a3064c205e","impliedFormat":1},{"version":"3a5af4fba7b27b815bb40f52715aedebaa4b371da3e5a664e7e0798c9b638825","impliedFormat":1},{"version":"8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","impliedFormat":1},{"version":"ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","impliedFormat":1},{"version":"49c632082dc8a916353288d3d8b2dc82b3471794249a381d090d960c8ceac908","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"71addb585c2db7b8e53dc1b0bcfa58c6c67c6e4fa2b968942046749d66f82e7e","impliedFormat":1},{"version":"c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"e703cfacb9965c4d4155346c65a0091ecded90ea98874ed6b3f36286577c4dde","impliedFormat":1},{"version":"f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","impliedFormat":1},{"version":"b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","impliedFormat":1},{"version":"5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802","impliedFormat":1},{"version":"87a3ee8c76625d7d2e359fdbcf7171847780604fbbb280118eff22674985dad1","impliedFormat":1},{"version":"21672038afe5dbedc15008bd4f12f9e6f277c683332f74375e8e1c23d426ae0f","signature":"a23ee6811573ae5ecb13d617ce2152625d9455846d6997f9ec38ae4b3e8bf37f"},{"version":"8ceb92013f59492609205a7d2235bda5c52ea91af5c3cbfa5756b4d919a3b439","signature":"1dfaefa84b5d3a895b48e8cedf07a1f08108a4950dbce252c163acd89ea8512b"},{"version":"20b63afab5227c57193e9ac294761e402a6e59d6d0a4b4fe7a62859e93026ed9","impliedFormat":1},{"version":"ba739758560a9b3e696095df9b04ac5d9d76acb11e98e06e73b7a86cbffe4207","impliedFormat":1},{"version":"7c7401c91fab197c9364f4625daff28ede54f1acbae4a791dfc4ade2db71c59d","impliedFormat":1},{"version":"48ce8d49a17cdd6dbb687c406af1caf4bed54fbe40ff14c6c505ccca6176cd21","impliedFormat":1},{"version":"3cd6ca36b5729325dd2eb0359eb1e2aed4f8cc73c3b8341e1733dfeee99fbeeb","impliedFormat":1},{"version":"0e8edbe744dfc3ce65e9fa2283f1f0eb2c0aaaec4df19765f51c346e45452cda","impliedFormat":1},{"version":"e8f32bdfbcbddd21331a469193a5c63c7b5e0d80025e649d91f833869bf5b7aa","impliedFormat":1},{"version":"1bea3584ffe75ae8fa970d651b8bbd7c67a75d21df6bd1762dc2abea73012b66","impliedFormat":1},{"version":"bf0e009524b9b436156b4a326cc3e92f1fdcd16ce51d119c94e4addc910e645e","impliedFormat":1},{"version":"52e0c1007dea40e9a588f22425a80250020ef0cd9b4a9deb36f315e075d1ab40","impliedFormat":1},{"version":"2c6ecd1f21dc339d42cecf914e1b844cef3cb68e3ec6f0ed5a9c4f6a588beb92","impliedFormat":1},{"version":"653672db5220ac24c728958a680b0db84c8d0d0f7ade5d78dbac72035d9ea70b","impliedFormat":1},{"version":"78089588b13f7207de8acdd775ca71f7415a1dfdd522f11b647ea08e154c4f14","impliedFormat":1},{"version":"d7a7229e7c12bf013834713f569d122a43056a5f34391b8388a582895b02c9e8","impliedFormat":1},{"version":"b811d082368e5b7f337d08f3e80be3d7e4c0c7f0249b00f8224acba9f77087e9","impliedFormat":1},{"version":"adb05565c81b408a97cee9201c8539dda075c30dffce0d4ec226e5050f36bfa4","impliedFormat":1},{"version":"75473b178a514d8768d6ead4a4da267aa6bedeeb792cd9437e45b46fa2dcf608","impliedFormat":1},{"version":"a75457a1e79e2bc885376b11f0a6c058e843dcac1f9d84c2293c75b13fa8803b","impliedFormat":1},{"version":"3f818a2b9c0d137cff0155a229598df6a30161d19ed315cd59006cc3f81b9847","impliedFormat":1},{"version":"97fe820ad369ce125b96c8fadd590addae19e293d5f6dc3833b7fd3808fea329","impliedFormat":1},{"version":"4e8a7cea443cbce825d1de249990bd71988cf491f689f5f4ada378c1cb965067","impliedFormat":1},{"version":"3a56da695cfddd03aee7835adf8934e4f357cc9bac59ea534cd282aba668b566","impliedFormat":1},{"version":"47244c79b80aee467a62c420ef5c2a58837236d9bf0087e9d6b43e278a71a46f","impliedFormat":1},{"version":"ba3886b9e5b3bd32588d57421988aeeea94afe40227334edc5d45fb0c5367c9d","impliedFormat":1},{"version":"226b58896f4f01f4c669d908f32c657bcab1a83f3aebb2f3d711a4fe7ba2a2d6","impliedFormat":1},{"version":"c79b22aab6a36366a6cf274ba9a719bebcc6f40f0be4ff721e91473ec19a7da1","impliedFormat":1},{"version":"05a4874f666eb37e94cd2e51b93d4accd6a4471e89e42ec98f435d57fd61d154","impliedFormat":1},{"version":"95b74ccaa6228d938036d13a96a47645f9c3d3b707c0b6989a18d77fd62447cb","impliedFormat":1},{"version":"856b83248d7e9a1343e28e8f113b142bd49b0adece47c157ab7adf3393f82967","impliedFormat":1},{"version":"bd987883be09d8ebe7aafed2e79a591d12b5845ac4a8a0b5601bdb0367c124c0","impliedFormat":1},{"version":"75ceb3dc5530c9b0797d8d6f6cbb883bb2b1add64f630c3c6d6f847aae87482e","impliedFormat":1},{"version":"efb2b9333117561dd5fc803927c1a212a8bf1dd1a5bd4549cc3c049d4a78ec63","impliedFormat":1},{"version":"ef17d2b0d94e266d4ec8caa84010b8a7b71e476c9cfa17e3db366f873d28445e","impliedFormat":1},{"version":"604a4451df97c7bfc75846cd1ed702129db0bee0f753658e0964d67619eea825","impliedFormat":1},{"version":"b9dfc4e6c69b1d60c7c060fb7d18951ca50f01fcdb46cf4eed23ca7f16471350","impliedFormat":1},{"version":"6911b52e74e60b6f3b79fc36d22a5d9537a807e16ec2e03fd594008c83981ab5","impliedFormat":1},{"version":"2551daa9cd45fb05ee16cee6282892c14a92e49a2d592b29fc9ff6d4ceef7dc2","impliedFormat":1},{"version":"5ba862c2b8f6fc41d95b417b19ed28111a685554ba2bac5bcf30680a92a46f26","impliedFormat":1},{"version":"2e47f885c94dd1180bd90160a7ebbd950256ea1a5e1f6c5a89b84de92c705ec0","impliedFormat":1},{"version":"4c8a41440f6b3066995d7d88dac8f09ed7e64f25e2b97a20be4f41e41795b0b4","signature":"c9a2ad9c87f4c0be0d32f78169fdc7faf52a190f6ed5aa2f20bea0ff6273fb9c"},{"version":"ecd7c714a23003e4990bcad34fb3e80afe9a09a24323e6a06b0599adfe4f43c5","signature":"a9775d51d46f50887975b20292c6c57dcac9ba77c357379c20a3c02ac14a2a22"},{"version":"e10dea626a225f88df2127d59b70bd0ad4d09e3f87d810be35aaf347c2a5f95e","signature":"f64a8b86c54f8b8db62aada03b88cb44f1d3ae17321d0730348e39f7b4591ccd"},{"version":"93161c1945c1f906d4da6da12384b2cc96b2c9206353d9fc38e9aeb83160e868","signature":"579fd4fd7001b05165b9e8fe060b6eee34440983b62e759e9739abddd17c9721"},{"version":"ea1e149ce1ec9508ff53ecffb62421ac2f000f416dc1a52fc231ec04fc176149","signature":"04fbbbcad47e9c78acd555c851990830949caa90ec44c4977e60f294157b26c4"},{"version":"f7f43e2d3856a8617d70e914fb6128966116a70349783afcc83f82b4ea8a9e58","signature":"00e56cba3147c5020f1649052f885afed0e7bff0cbd5b822b464adac3c921c7e"},{"version":"1375f71e05c0a101db87a9acc51b4ae92f120991ab5d67c7d78ac2607ab3fcef","signature":"68b0bce2f6feee95a8773df21325666267cf196569756f15798180882fb4fd9d"},{"version":"c7976110d237dbc6eef10968c78042cb03a67b70807869ea1fcb886cfda097b8","signature":"c77f84a7777d950a6553bf295a1297b06451d034d7dc33e6b47c9b68d37e5c7d"},{"version":"7584239b853f690c6629ae8bb683ded6ff33104e7835778bbca5ee1b1d9a0a91","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"109b9c280e8848c08bf4a78fff1fed0750a6ca1735671b5cf08b71bae5448c03","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"823f9c08700a30e2920a063891df4e357c64333fdba6889522acc5b7ae13fc08","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"1d140fe7e071ea06038b6c5e01fea83f72d9d6d68e0d606a3d824323f5133388","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"685657a3ec619ef12aa7f754eee3b28598d3bf9749da89839a72a343fffef5ff","impliedFormat":1},{"version":"0b3edeae6a959093315434dd4e870e12182077bc76a178540281a3a12cfd9524","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"fed70ffbe859d54d8c7e1ef8cc2bc38af99b00a273ebb69ac293d2cb656210bd","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"0ea329e5eab6719ff83bcb97e8bd03f1faab4feb74704010783b881fc9d80f92","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"634932724f040fe5eeaf8b81373deb91e98b1f26903ea4a0d2b7f03c95c35937","signature":"e5388bea6de85ff2933f8ea994d649616c3c549ccf863efda253a3cceb5f3670"},{"version":"79a8df0bc611d9779a16512d99d12cc437adc1079cbf9c67f4d027bed14c1343","signature":"47c1f371e9626cf90b1b68384f5caa7a6b0470a15a5678c3d897e78c26cddf0f"},{"version":"56d5dca49ac81c04991f65191ec5b8ae1fbedeff3e246ca185e951e342f47129","signature":"c595de43ea9cf677add38f6a2f2ad7a58468330c2c949c9300c5dbfe1c8ca03d"},{"version":"f0c3f314b44635340b8d7b24b60e41f56424e4155b25549d7964e35b55fb3e8d","signature":"5137d0f624a136771f4d4c06995df1899730a8078021d1d26cec1625a1d32e18"},{"version":"d471ee2327092cc0c10fa217a97d9c79833b1761da99be76d2d9a202861b3a8e","signature":"1238d9e302dee2ca5d56760e0086d5da4e37160b27b7aa5be43e82e2a7f29d42"},{"version":"e9eb1ca4e6e55ce2d6a3085d7d136d2f6b83e09b78ee64282d270918a9e74e61","signature":"2592ed72625da16080355565b7d8d6a8214ce4e87d33f6218d00179b01373a7b"},{"version":"ebcde598c941ae8e7ea72a5308aadf1d45bb9993515f0f4cd9e2c76e3d33d0b8","signature":"66cadab6874916b661948745e7fcbeafec6ee099b37debc5e3a7138fe631b693"},{"version":"9af1a554c5eb80a89f87f8cde339ce883f7766bdfde5eb175a091b916a5b916e","signature":"9d0cb98c222a40b5516f08197bad00013a92a8eeb464430c56cb3f6dc79276fb"},{"version":"460627dd2a599c2664d6f9e81ed4765ef520dc2786551d9dcab276df57b98c02","impliedFormat":1},{"version":"169cc96316cacf8b489aaab4ac6bcef7b33e8779a8902bce57c737b4aa372d16","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"4340936f4e937c452ae783514e7c7bbb7fc06d0c97993ff4865370d0962bb9cf","impliedFormat":1},{"version":"b70c7ea83a7d0de17a791d9b5283f664033a96362c42cc4d2b2e0bdaa65ef7d1","impliedFormat":1},{"version":"a65cf458c879172bef4012d3397612e7357bf72971b09db5bb5bf8fca0957612","impliedFormat":1},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":1},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":1},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":1},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":1},{"version":"d128037db3a40d1d8ae8ec36431e6a4678df56d236729f620e58f4a37f9f33d0","impliedFormat":1},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":1},{"version":"9985141f349552055b7b6b5082384fdbc1758ba14ff51fada049347628b4e018","impliedFormat":1},{"version":"c3b65655e9b7b290340f3a1c73c7e02907dd290a288de5e62726350da39b96b1","impliedFormat":1},{"version":"c0398181fff2b85eef72a8abfad6a8b31bc5989a3a763fd3d0fd61154e55bcfc","impliedFormat":1},{"version":"89daadaa769a9bf8c1fa26a464e06459197a5914ed42702e1ce439bb5915b767","impliedFormat":1},{"version":"83af685afea5d13d6cd6a8db34aba9aec7962c289bb6c92e770e838e7d5faec9","impliedFormat":1},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":1},{"version":"b99abb32e0aa47c71bf14b6bd2ebc526a4afcee1553c157e49864e41868bdfa4","impliedFormat":1},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":1},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":1},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":1}],"root":[53,54,122,123,[163,170],[275,282]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":6,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[52,1],[51,2],[220,3],[221,3],[222,4],[223,5],[224,6],[225,7],[172,2],[175,8],[173,2],[174,2],[226,9],[227,10],[228,11],[229,12],[230,13],[231,14],[232,14],[233,15],[234,16],[235,17],[236,18],[178,2],[237,19],[238,20],[239,21],[240,22],[241,23],[242,24],[243,25],[244,26],[245,27],[246,28],[247,29],[248,30],[249,31],[250,31],[251,32],[252,2],[253,33],[255,34],[254,35],[256,36],[257,37],[258,38],[259,39],[260,40],[261,41],[262,42],[177,43],[176,2],[271,44],[263,45],[264,46],[265,47],[266,48],[267,49],[268,50],[179,2],[180,2],[181,2],[219,51],[269,52],[270,53],[197,54],[207,55],[196,54],[217,56],[188,57],[187,58],[216,59],[210,60],[215,61],[190,62],[204,63],[189,64],[213,65],[185,66],[184,59],[214,67],[186,68],[191,69],[192,2],[195,69],[182,2],[218,70],[208,71],[199,72],[200,73],[202,74],[198,75],[201,76],[211,59],[193,77],[194,78],[203,79],[183,80],[206,71],[205,69],[209,2],[212,81],[170,82],[169,83],[166,84],[167,84],[54,85],[163,86],[164,87],[122,88],[123,88],[282,89],[165,2],[278,90],[281,91],[277,92],[280,2],[168,84],[275,93],[53,2],[279,94],[276,83],[124,2],[283,2],[274,95],[272,96],[273,2],[284,2],[286,2],[287,97],[171,2],[285,98],[56,2],[62,99],[55,2],[59,2],[61,100],[58,101],[121,102],[106,103],[85,104],[79,105],[91,106],[86,107],[88,108],[78,109],[89,2],[87,110],[90,111],[63,101],[64,112],[73,113],[70,114],[71,115],[72,116],[74,117],[84,118],[94,119],[93,120],[92,121],[75,122],[77,123],[76,124],[83,125],[81,126],[80,127],[82,128],[68,129],[67,130],[69,131],[65,132],[95,133],[96,134],[99,135],[97,136],[98,137],[100,133],[105,138],[101,136],[102,133],[66,2],[103,133],[104,139],[57,140],[60,141],[48,2],[49,2],[10,2],[8,2],[9,2],[14,2],[13,2],[2,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[3,2],[23,2],[4,2],[24,2],[28,2],[25,2],[26,2],[27,2],[29,2],[30,2],[31,2],[5,2],[32,2],[33,2],[34,2],[35,2],[6,2],[39,2],[36,2],[37,2],[38,2],[40,2],[7,2],[41,2],[50,2],[46,2],[47,2],[42,2],[43,2],[44,2],[45,2],[1,2],[12,2],[11,2],[304,142],[289,2],[290,2],[291,2],[292,2],[288,2],[293,143],[294,2],[296,144],[295,143],[297,143],[298,144],[299,143],[300,2],[301,143],[302,2],[303,2],[126,145],[162,146],[150,147],[151,147],[125,2],[127,148],[128,149],[129,2],[152,147],[153,147],[131,150],[154,147],[155,147],[132,84],[133,147],[134,151],[137,152],[138,84],[139,2],[140,153],[141,154],[130,149],[142,147],[156,147],[157,155],[158,147],[159,147],[136,156],[143,148],[135,149],[144,147],[145,2],[146,147],[147,2],[148,157],[149,158],[160,147],[161,158],[120,159],[111,160],[118,161],[113,2],[114,2],[112,162],[115,159],[107,2],[108,2],[119,163],[110,164],[116,2],[117,165],[109,166]],"latestChangedDtsFile":"./dist/utils/fileValidator.d.ts","version":"5.6.3"} \ No newline at end of file