From ce842f0cb95b6ac3906755435c74728c3f20d55f Mon Sep 17 00:00:00 2001 From: Timothy Carambat Date: Fri, 13 Mar 2026 08:36:50 -0700 Subject: [PATCH 1/7] File storage_dir fix & refactor Normalize storage path resolution across server and collector Centralizes all storage path constants into single source-of-truth exports: - server: baseStoragePath, documentsPath, directUploadsPath, vectorCachePath, hotdirPath - collector: basePrimaryStoragePath, WATCH_DIRECTORY, tmpStorage, documentsFolder This eliminates scattered NODE_ENV/STORAGE_DIR ternaries throughout the codebase and ensures consistent path resolution between server and collector. Other changes: - Fix hotdirPath to correctly point to collector/storage/hotdir in development - Add ensureRequiredDirectoriesExist() to create storage dirs on collector startup - Add path traversal protection in downloadURIToFile - Add eslint-plugin-import for unresolved import detection - Remove static placeholder files (now created dynamically) --- collector/eslint.config.mjs | 55 +- collector/hotdir/__HOTDIR__.md | 3 - collector/index.js | 10 +- collector/package.json | 1 + collector/processSingleFile/index.js | 6 +- collector/storage/.gitignore | 2 - collector/storage/tmp/.placeholder | 0 collector/utils/OCRLoader/index.js | 7 +- .../utils/WhisperProviders/localWhisper.js | 8 +- collector/utils/comKey/index.js | 10 +- collector/utils/constants.js | 3 - collector/utils/downloadURIToFile/index.js | 25 +- .../utils/extensions/Confluence/index.js | 15 +- .../extensions/DrupalWiki/DrupalWiki/index.js | 6 +- .../extensions/RepoLoader/GithubRepo/index.js | 11 +- .../extensions/RepoLoader/GitlabRepo/index.js | 15 +- collector/utils/files/index.js | 113 ++- collector/yarn.lock | 788 +++++++++++++++++- eslint.config.js | 13 +- package.json | 1 + server/endpoints/api/document/index.js | 9 +- server/endpoints/system.js | 5 +- server/endpoints/workspaces.js | 8 +- server/eslint.config.mjs | 58 +- server/jobs/helpers/index.js | 5 +- server/package.json | 1 + server/swagger/openapi.json | 4 +- server/utils/AiProviders/apipie/index.js | 8 +- server/utils/AiProviders/cometapi/index.js | 7 +- .../AiProviders/dockerModelRunner/index.js | 6 +- server/utils/AiProviders/fireworksAi/index.js | 8 +- server/utils/AiProviders/gemini/index.js | 7 +- server/utils/AiProviders/giteeai/index.js | 7 +- server/utils/AiProviders/modelMap/index.js | 7 +- server/utils/AiProviders/novita/index.js | 7 +- server/utils/AiProviders/openRouter/index.js | 7 +- server/utils/AiProviders/ppio/index.js | 7 +- server/utils/AiProviders/togetherAi/index.js | 8 +- server/utils/DocumentManager/index.js | 6 +- server/utils/EmbeddingEngines/native/index.js | 11 +- .../utils/EmbeddingRerankers/native/index.js | 7 +- server/utils/MCP/hypervisor/index.js | 16 +- server/utils/agents/imported.js | 7 +- server/utils/comKey/index.js | 9 +- server/utils/files/index.js | 52 +- server/utils/files/logo.js | 22 +- server/utils/files/multer.js | 32 +- server/utils/files/pfp.js | 10 +- server/yarn.lock | 649 ++++++++++++++- 49 files changed, 1773 insertions(+), 309 deletions(-) delete mode 100644 collector/hotdir/__HOTDIR__.md delete mode 100644 collector/storage/.gitignore delete mode 100644 collector/storage/tmp/.placeholder diff --git a/collector/eslint.config.mjs b/collector/eslint.config.mjs index 39dfec19b34..a9a798c320a 100644 --- a/collector/eslint.config.mjs +++ b/collector/eslint.config.mjs @@ -4,14 +4,23 @@ import { defineConfig } from "eslint/config"; import pluginPrettier from "eslint-plugin-prettier"; import configPrettier from "eslint-config-prettier"; import unusedImports from "eslint-plugin-unused-imports"; +import pluginImport from "eslint-plugin-import"; export default defineConfig([ { ignores: ["__tests__/**"] }, { - files: ["**/*.{js,mjs,cjs}"], - plugins: { js, prettier: pluginPrettier, "unused-imports": unusedImports }, + files: ["**/*.js"], + plugins: { + js, + prettier: pluginPrettier, + "unused-imports": unusedImports, + import: pluginImport, + }, extends: ["js/recommended"], - languageOptions: { globals: { ...globals.node, ...globals.browser } }, + languageOptions: { + sourceType: "commonjs", + globals: { ...globals.node, ...globals.browser }, + }, rules: { ...configPrettier.rules, "prettier/prettier": "error", @@ -32,7 +41,45 @@ export default defineConfig([ argsIgnorePattern: "^_", }, ], + "import/no-unresolved": [ + "error", + { commonjs: true, ignore: ["^youtubei.js$"] }, + ], + "import/named": "error", + }, + settings: { + "import/resolver": { + node: true, + }, + "import/core-modules": ["eslint/config"], + }, + }, + { + files: ["**/*.mjs"], + plugins: { + js, + prettier: pluginPrettier, + "unused-imports": unusedImports, + import: pluginImport, + }, + extends: ["js/recommended"], + languageOptions: { + sourceType: "module", + globals: { ...globals.node }, + }, + rules: { + ...configPrettier.rules, + "prettier/prettier": "error", + "no-unused-vars": "off", + "unused-imports/no-unused-imports": "error", + "import/no-unresolved": "error", + "import/named": "error", + }, + settings: { + "import/resolver": { + node: true, + }, + "import/core-modules": ["eslint/config"], }, }, - { files: ["**/*.js"], languageOptions: { sourceType: "commonjs" } }, ]); diff --git a/collector/hotdir/__HOTDIR__.md b/collector/hotdir/__HOTDIR__.md deleted file mode 100644 index 8f20efc49ee..00000000000 --- a/collector/hotdir/__HOTDIR__.md +++ /dev/null @@ -1,3 +0,0 @@ -### What is the "Hot directory" - -This is a pre-set file location that documents will be written to when uploaded by AnythingLLM. There is really no need to touch it. \ No newline at end of file diff --git a/collector/index.js b/collector/index.js index 7955ce99bca..5207578fb27 100644 --- a/collector/index.js +++ b/collector/index.js @@ -11,7 +11,10 @@ const { ACCEPTED_MIMES } = require("./utils/constants"); const { reqBody } = require("./utils/http"); const { processSingleFile } = require("./processSingleFile"); const { processLink, getLinkText } = require("./processLink"); -const { wipeCollectorStorage } = require("./utils/files"); +const { + ensureRequiredDirectoriesExist, + wipeCollectorStorage, +} = require("./utils/files"); const extensions = require("./extensions"); const { processRawText } = require("./processRawText"); const { verifyPayloadIntegrity } = require("./middleware/verifyIntegrity"); @@ -186,8 +189,9 @@ app.all("*", function (_, response) { }); app - .listen(8888, async () => { - await wipeCollectorStorage(); + .listen(8888, () => { + ensureRequiredDirectoriesExist(); + wipeCollectorStorage(); console.log(`Document processor app listening on port 8888`); }) .on("error", function (_) { diff --git a/collector/package.json b/collector/package.json index 4be06c38c14..47b82a81a05 100644 --- a/collector/package.json +++ b/collector/package.json @@ -54,6 +54,7 @@ "cross-env": "^7.0.3", "eslint": "^9.0.0", "eslint-config-prettier": "^9.0.0", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-unused-imports": "^4.0.0", "globals": "^17.4.0", diff --git a/collector/processSingleFile/index.js b/collector/processSingleFile/index.js index 146012726ee..1bd3f89b7e9 100644 --- a/collector/processSingleFile/index.js +++ b/collector/processSingleFile/index.js @@ -1,14 +1,12 @@ const path = require("path"); const fs = require("fs"); -const { - WATCH_DIRECTORY, - SUPPORTED_FILETYPE_CONVERTERS, -} = require("../utils/constants"); +const { SUPPORTED_FILETYPE_CONVERTERS } = require("../utils/constants"); const { trashFile, isTextType, normalizePath, isWithin, + WATCH_DIRECTORY, } = require("../utils/files"); const RESERVED_FILES = ["__HOTDIR__.md"]; diff --git a/collector/storage/.gitignore b/collector/storage/.gitignore deleted file mode 100644 index 845482b730c..00000000000 --- a/collector/storage/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -tmp/* -!tmp/.placeholder \ No newline at end of file diff --git a/collector/storage/tmp/.placeholder b/collector/storage/tmp/.placeholder deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/collector/utils/OCRLoader/index.js b/collector/utils/OCRLoader/index.js index 8f5ae9908f0..1f8292c4f90 100644 --- a/collector/utils/OCRLoader/index.js +++ b/collector/utils/OCRLoader/index.js @@ -2,6 +2,7 @@ const fs = require("fs"); const os = require("os"); const path = require("path"); const { VALID_LANGUAGE_CODES } = require("./validLangs"); +const { basePrimaryStoragePath } = require("../files"); class OCRLoader { /** @@ -22,11 +23,7 @@ class OCRLoader { */ constructor({ targetLanguages = "eng" } = {}) { this.language = this.parseLanguages(targetLanguages); - this.cacheDir = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, `models`, `tesseract`) - : path.resolve(__dirname, `../../../server/storage/models/tesseract`) - ); + this.cacheDir = path.resolve(basePrimaryStoragePath, "models/tesseract"); // Ensure the cache directory exists or else Tesseract will persist the cache in the default location. if (!fs.existsSync(this.cacheDir)) diff --git a/collector/utils/WhisperProviders/localWhisper.js b/collector/utils/WhisperProviders/localWhisper.js index 6ee124fecc9..7c6c4677479 100644 --- a/collector/utils/WhisperProviders/localWhisper.js +++ b/collector/utils/WhisperProviders/localWhisper.js @@ -1,6 +1,7 @@ const fs = require("fs"); const path = require("path"); const { v4 } = require("uuid"); +const { basePrimaryStoragePath } = require("../files"); const defaultWhisper = "Xenova/whisper-small"; // Model Card: https://huggingface.co/Xenova/whisper-small const fileSize = { "Xenova/whisper-small": "250mb", @@ -11,12 +12,7 @@ class LocalWhisper { constructor({ options }) { this.model = options?.WhisperModelPref ?? defaultWhisper; this.fileSize = fileSize[this.model]; - this.cacheDir = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, `models`) - : path.resolve(__dirname, `../../../server/storage/models`) - ); - + this.cacheDir = path.resolve(basePrimaryStoragePath, "models"); this.modelPath = path.resolve(this.cacheDir, ...this.model.split("/")); // Make directory when it does not exist in existing installations if (!fs.existsSync(this.cacheDir)) diff --git a/collector/utils/comKey/index.js b/collector/utils/comKey/index.js index a2e2f52a09b..b41e845cdb7 100644 --- a/collector/utils/comKey/index.js +++ b/collector/utils/comKey/index.js @@ -1,14 +1,8 @@ const crypto = require("crypto"); const fs = require("fs"); const path = require("path"); -const keyPath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../../server/storage/comkey`) - : path.resolve( - process.env.STORAGE_DIR ?? - path.resolve(__dirname, `../../../server/storage`), - `comkey` - ); +const { basePrimaryStoragePath } = require("../files"); +const keyPath = path.resolve(basePrimaryStoragePath, "comkey"); class CommunicationKey { #pubKeyName = "ipc-pub.pem"; diff --git a/collector/utils/constants.js b/collector/utils/constants.js index 08ab2f37cca..496c81df416 100644 --- a/collector/utils/constants.js +++ b/collector/utils/constants.js @@ -1,5 +1,3 @@ -const WATCH_DIRECTORY = require("path").resolve(__dirname, "../hotdir"); - const ACCEPTED_MIMES = { "text/plain": [".txt", ".md", ".org", ".adoc", ".rst"], "text/html": [".html"], @@ -77,6 +75,5 @@ const SUPPORTED_FILETYPE_CONVERTERS = { module.exports = { SUPPORTED_FILETYPE_CONVERTERS, - WATCH_DIRECTORY, ACCEPTED_MIMES, }; diff --git a/collector/utils/downloadURIToFile/index.js b/collector/utils/downloadURIToFile/index.js index f7326658e69..ba5428d6073 100644 --- a/collector/utils/downloadURIToFile/index.js +++ b/collector/utils/downloadURIToFile/index.js @@ -1,4 +1,9 @@ -const { WATCH_DIRECTORY } = require("../constants"); +const { + isWithin, + WATCH_DIRECTORY, + normalizePath, + sanitizeFileName, +} = require("../files"); const fs = require("fs"); const path = require("path"); const { pipeline } = require("stream/promises"); @@ -37,7 +42,23 @@ async function downloadURIToFile(url, maxTimeout = 10_000) { urlObj.pathname.replace(/\//g, "-"), { lower: true } )}`; - const localFilePath = path.join(WATCH_DIRECTORY, filename); + const localFilePath = normalizePath( + path.resolve(WATCH_DIRECTORY, sanitizeFileName(filename)) + ); + + if (!isWithin(path.resolve(WATCH_DIRECTORY), localFilePath)) { + console.error( + `[DownloadURIToFile]: File name ${localFilePath} is not within the storage path ${path.resolve( + WATCH_DIRECTORY + )}` + ); + return { + success: false, + reason: "File name is not within the storage path.", + fileLocation: null, + }; + } + const writeStream = fs.createWriteStream(localFilePath); await pipeline(res.body, writeStream); diff --git a/collector/utils/extensions/Confluence/index.js b/collector/utils/extensions/Confluence/index.js index 7db84d7c6a6..1bef9e939ce 100644 --- a/collector/utils/extensions/Confluence/index.js +++ b/collector/utils/extensions/Confluence/index.js @@ -2,7 +2,11 @@ const fs = require("fs"); const path = require("path"); const { default: slugify } = require("slugify"); const { v4 } = require("uuid"); -const { writeToServerDocuments, sanitizeFileName } = require("../../files"); +const { + writeToServerDocuments, + sanitizeFileName, + documentsFolder, +} = require("../../files"); const { tokenizeString } = require("../../tokenizer"); const { ConfluencePagesLoader } = require("./ConfluenceLoader"); @@ -80,14 +84,7 @@ async function loadConfluence( `confluence-${hostname}-${v4().slice(0, 4)}` ).toLowerCase(); - const outFolderPath = - process.env.NODE_ENV === "development" - ? path.resolve( - __dirname, - `../../../../server/storage/documents/${outFolder}` - ) - : path.resolve(process.env.STORAGE_DIR, `documents/${outFolder}`); - + const outFolderPath = path.resolve(documentsFolder, outFolder); if (!fs.existsSync(outFolderPath)) fs.mkdirSync(outFolderPath, { recursive: true }); diff --git a/collector/utils/extensions/DrupalWiki/DrupalWiki/index.js b/collector/utils/extensions/DrupalWiki/DrupalWiki/index.js index 24b1f02f668..e51d0cd8215 100644 --- a/collector/utils/extensions/DrupalWiki/DrupalWiki/index.js +++ b/collector/utils/extensions/DrupalWiki/DrupalWiki/index.js @@ -8,6 +8,7 @@ const { htmlToText } = require("html-to-text"); const { tokenizeString } = require("../../../tokenizer"); const { + WATCH_DIRECTORY, sanitizeFileName, writeToServerDocuments, documentsFolder, @@ -18,10 +19,7 @@ const { default: slugify } = require("slugify"); const path = require("path"); const fs = require("fs"); const { processSingleFile } = require("../../../../processSingleFile"); -const { - WATCH_DIRECTORY, - SUPPORTED_FILETYPE_CONVERTERS, -} = require("../../../constants"); +const { SUPPORTED_FILETYPE_CONVERTERS } = require("../../../constants"); class Page { /** diff --git a/collector/utils/extensions/RepoLoader/GithubRepo/index.js b/collector/utils/extensions/RepoLoader/GithubRepo/index.js index fae6ef491c4..d3992246d6b 100644 --- a/collector/utils/extensions/RepoLoader/GithubRepo/index.js +++ b/collector/utils/extensions/RepoLoader/GithubRepo/index.js @@ -3,7 +3,7 @@ const fs = require("fs"); const path = require("path"); const { default: slugify } = require("slugify"); const { v4 } = require("uuid"); -const { writeToServerDocuments } = require("../../../files"); +const { writeToServerDocuments, documentsFolder } = require("../../../files"); const { tokenizeString } = require("../../../tokenizer"); /** @@ -38,14 +38,7 @@ async function loadGithubRepo(args, response) { `${repo.author}-${repo.project}-${repo.branch}-${v4().slice(0, 4)}` ).toLowerCase(); - const outFolderPath = - process.env.NODE_ENV === "development" - ? path.resolve( - __dirname, - `../../../../../server/storage/documents/${outFolder}` - ) - : path.resolve(process.env.STORAGE_DIR, `documents/${outFolder}`); - + const outFolderPath = path.resolve(documentsFolder, outFolder); if (!fs.existsSync(outFolderPath)) fs.mkdirSync(outFolderPath, { recursive: true }); diff --git a/collector/utils/extensions/RepoLoader/GitlabRepo/index.js b/collector/utils/extensions/RepoLoader/GitlabRepo/index.js index 5c312f02259..eec56221c90 100644 --- a/collector/utils/extensions/RepoLoader/GitlabRepo/index.js +++ b/collector/utils/extensions/RepoLoader/GitlabRepo/index.js @@ -3,7 +3,11 @@ const fs = require("fs"); const path = require("path"); const { default: slugify } = require("slugify"); const { v4 } = require("uuid"); -const { sanitizeFileName, writeToServerDocuments } = require("../../../files"); +const { + sanitizeFileName, + writeToServerDocuments, + documentsFolder, +} = require("../../../files"); const { tokenizeString } = require("../../../tokenizer"); /** @@ -38,14 +42,7 @@ async function loadGitlabRepo(args, response) { `${repo.author}-${repo.project}-${repo.branch}-${v4().slice(0, 4)}` ).toLowerCase(); - const outFolderPath = - process.env.NODE_ENV === "development" - ? path.resolve( - __dirname, - `../../../../../server/storage/documents/${outFolder}` - ) - : path.resolve(process.env.STORAGE_DIR, `documents/${outFolder}`); - + const outFolderPath = path.resolve(documentsFolder, outFolder); if (!fs.existsSync(outFolderPath)) fs.mkdirSync(outFolderPath, { recursive: true }); diff --git a/collector/utils/files/index.js b/collector/utils/files/index.js index 64f17ec3512..d1f01225168 100644 --- a/collector/utils/files/index.js +++ b/collector/utils/files/index.js @@ -2,24 +2,47 @@ const fs = require("fs"); const path = require("path"); const { MimeDetector } = require("./mime"); +/** + * The base storage path for the server - where all primary storage is stored. + */ +const basePrimaryStoragePath = + process.env.NODE_ENV === "development" + ? path.resolve(__dirname, "../../../server/storage") + : path.resolve(process.env.STORAGE_DIR); + +/** + * The folder where temporary files are stored by the collector. + * In development points to a storage folder in the collector directory - not the main storage directory. + */ +const tmpStorage = + process.env.NODE_ENV === "development" + ? path.resolve(__dirname, "../../storage/tmp") + : path.resolve(process.env.STORAGE_DIR, "tmp"); + +/** + * The folder where files are watched for and processed by the collector. + * In development points to a storage folder in the collector directory - not the main storage directory. + */ +const WATCH_DIRECTORY = + process.env.NODE_ENV === "development" + ? path.resolve(__dirname, "../../storage/hotdir") + : path.resolve(process.env.STORAGE_DIR, "hotdir"); + /** * The folder where documents are stored to be stored when * processed by the collector. */ -const documentsFolder = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../../server/storage/documents`) - : path.resolve(process.env.STORAGE_DIR, `documents`); +const documentsFolder = path.resolve(basePrimaryStoragePath, "documents"); /** * The folder where direct uploads are stored to be stored when * processed by the collector. These are files that were DnD'd into UI * and are not to be embedded or selectable from the file picker. */ -const directUploadsFolder = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../../server/storage/direct-uploads`) - : path.resolve(process.env.STORAGE_DIR, `direct-uploads`); +const directUploadsFolder = path.resolve( + basePrimaryStoragePath, + "direct-uploads" +); /** * Checks if a file is text by checking the mime type and then falling back to buffer inspection. @@ -150,43 +173,42 @@ function writeToServerDocuments({ }; } -// When required we can wipe the entire collector hotdir and tmp storage in case -// there were some large file failures that we unable to be removed a reboot will -// force remove them. -async function wipeCollectorStorage() { - const cleanHotDir = new Promise((resolve) => { - const directory = path.resolve(__dirname, "../../hotdir"); - fs.readdir(directory, (err, files) => { - if (err) resolve(); - - for (const file of files) { - if (file === "__HOTDIR__.md") continue; - try { - fs.rmSync(path.join(directory, file)); - } catch {} - } - resolve(); - }); - }); - - const cleanTmpDir = new Promise((resolve) => { - const directory = path.resolve(__dirname, "../../storage/tmp"); - fs.readdir(directory, (err, files) => { - if (err) resolve(); - - for (const file of files) { - if (file === ".placeholder") continue; - try { - fs.rmSync(path.join(directory, file)); - } catch {} - } - resolve(); - }); - }); - - await Promise.all([cleanHotDir, cleanTmpDir]); +/** + * Wipes the entire collector hotdir and tmp storage in case + * there were some large file failures that we unable to be removed a reboot will + * force remove them. + */ +function wipeCollectorStorage() { + const dirs = [ + { path: WATCH_DIRECTORY, keep: ["__HOTDIR__.md"] }, + { path: tmpStorage, keep: [".placeholder"] }, + ]; + + for (const { path: directory, keep } of dirs) { + if (!fs.existsSync(directory)) continue; + for (const file of fs.readdirSync(directory)) { + if (keep.includes(file)) continue; + try { + fs.rmSync(path.join(directory, file)); + } catch {} + } + } console.log(`Collector hot directory and tmp storage wiped!`); - return; +} + +/** + * Ensures that all required directories exist and are created if they do not. + * @returns {void} - Returns void. + */ +function ensureRequiredDirectoriesExist() { + const directories = [ + WATCH_DIRECTORY, + tmpStorage, + documentsFolder, + directUploadsFolder, + ]; + for (const directory of directories) + fs.mkdirSync(directory, { recursive: true }); } /** @@ -221,10 +243,13 @@ module.exports = { isTextType, createdDate, writeToServerDocuments, + ensureRequiredDirectoriesExist, wipeCollectorStorage, normalizePath, isWithin, sanitizeFileName, documentsFolder, directUploadsFolder, + WATCH_DIRECTORY, + basePrimaryStoragePath, }; diff --git a/collector/yarn.lock b/collector/yarn.lock index ef13c3ccb5e..6f8a23c2858 100644 --- a/collector/yarn.lock +++ b/collector/yarn.lock @@ -450,6 +450,11 @@ unbzip2-stream "1.4.3" yargs "17.7.2" +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + "@selderee/plugin-htmlparser2@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz#d5b5e29a7ba6d3958a1972c7be16f4b2c188c517" @@ -486,6 +491,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "@types/long@^4.0.1": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" @@ -667,6 +677,14 @@ argparse@~1.0.3: dependencies: sprintf-js "~1.0.2" +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -680,6 +698,66 @@ array-hyper-unique@^2.1.4: deep-eql "= 4.0.0" lodash "^4.17.21" +array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + +array.prototype.flat@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + ast-types@^0.13.4: version "0.13.4" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" @@ -687,6 +765,11 @@ ast-types@^0.13.4: dependencies: tslib "^2.0.1" +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + async@^3.2.3: version "3.2.6" resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" @@ -910,7 +993,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- es-errors "^1.3.0" function-bind "^1.1.2" -call-bind@^1.0.8: +call-bind@^1.0.7, call-bind@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== @@ -1166,6 +1249,33 @@ data-uri-to-buffer@^6.0.2: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -1286,7 +1396,7 @@ default-shell@^2.0.0: resolved "https://registry.yarnpkg.com/default-shell/-/default-shell-2.2.0.tgz#31481c19747bfe59319b486591643eaf115a1864" integrity sha512-sPpMZcVhRQ0nEMDtuMJ+RtCxt7iHPAMBU+I4tAlo5dU1sjRpNax0crj6nR3qKpvVnckaQ9U38enXcwW9nZJeCw== -define-data-property@^1.1.4: +define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -1295,6 +1405,15 @@ define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + degenerator@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" @@ -1342,6 +1461,13 @@ dingbat-to-unicode@^1.0.1: resolved "https://registry.yarnpkg.com/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz#5091dd673241453e6b5865e26e5a4452cdef5c83" integrity sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w== +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + dom-serializer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" @@ -1384,7 +1510,7 @@ duck@^0.1.12: dependencies: underscore "^1.13.1" -dunder-proto@^1.0.1: +dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== @@ -1453,6 +1579,66 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.1.tgz#f0c131ed5ea1bb2411134a8dd94def09c46c7899" + integrity sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" @@ -1480,6 +1666,22 @@ es-set-tostringtag@^2.1.0: has-tostringtag "^1.0.2" hasown "^2.0.2" +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + escalade@^3.1.1: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" @@ -1511,6 +1713,47 @@ eslint-config-prettier@^9.0.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz#90deb4fa0259592df774b600dbd1d2249a78ce91" integrity sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.32.0: + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.1" + hasown "^2.0.2" + is-core-module "^2.16.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.1" + semver "^6.3.1" + string.prototype.trimend "^1.0.9" + tsconfig-paths "^3.15.0" + eslint-plugin-prettier@^5.0.0: version "5.5.5" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz#9eae11593faa108859c26f9a9c367d619a0769c0" @@ -1851,7 +2094,7 @@ fn.name@1.x.x: resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -for-each@^0.3.5: +for-each@^0.3.3, for-each@^0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== @@ -1915,12 +2158,34 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +generator-function@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" + integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -1964,6 +2229,15 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + get-uri@^6.0.1: version "6.0.5" resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.5.tgz#714892aa4a871db671abc5395e5e9447bc306a16" @@ -2014,6 +2288,14 @@ globals@^17.4.0: resolved "https://registry.yarnpkg.com/globals/-/globals-17.4.0.tgz#33d7d297ed1536b388a0e2f4bcd0ff19c8ff91b5" integrity sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw== +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" @@ -2029,6 +2311,11 @@ guid-typescript@^1.0.9: resolved "https://registry.yarnpkg.com/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc" integrity sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2039,13 +2326,20 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.2: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" @@ -2215,6 +2509,15 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + ip-address@^10.0.1: version "10.1.0" resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" @@ -2230,6 +2533,15 @@ is-any-array@^2.0.0: resolved "https://registry.yarnpkg.com/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e" integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ== +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -2240,6 +2552,24 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.4.tgz#1ee5553818511915685d33bb13d31bf854e5059d" integrity sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA== +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2247,6 +2577,14 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -2257,16 +2595,58 @@ is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== +is-core-module@^2.13.0, is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-function@^1.0.10: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" + integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== + dependencies: + call-bound "^1.0.4" + generator-function "^2.0.0" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -2274,16 +2654,56 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -2294,7 +2714,24 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-typed-array@^1.1.14: +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== @@ -2306,6 +2743,26 @@ is-url@^1.2.4: resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -2376,6 +2833,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + jsonpointer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" @@ -2704,7 +3168,7 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.3: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -2899,11 +3363,57 @@ object-assign@^4, object-assign@^4.0.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.3: +object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + officeparser@^4.0.5: version "4.2.0" resolved "https://registry.yarnpkg.com/officeparser/-/officeparser-4.2.0.tgz#6d0baf411bd21e7e31a4b1f206af7034a4506ca2" @@ -3027,6 +3537,15 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -3146,6 +3665,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-scurry@^1.11.1: version "1.11.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" @@ -3447,11 +3971,37 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + regenerator-runtime@^0.13.3: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -3462,6 +4012,15 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve@^1.22.4: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -3474,6 +4033,17 @@ rimraf@^5.0.10: dependencies: glob "^10.3.7" +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -3484,6 +4054,23 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + safe-stable-stringify@^2.3.1: version "2.5.0" resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" @@ -3518,6 +4105,11 @@ semver@^5.7.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.3.5, semver@^7.5.4, semver@^7.6.3: version "7.7.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" @@ -3588,6 +4180,25 @@ set-function-length@^1.2.2: gopd "^1.0.1" has-property-descriptors "^1.0.2" +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -3799,6 +4410,14 @@ statuses@~2.0.1, statuses@~2.0.2: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + streamx@^2.15.0, streamx@^2.21.0: version "2.23.0" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.23.0.tgz#7d0f3d00d4a6c5de5728aecd6422b4008d66fd0b" @@ -3826,6 +4445,38 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3, string-width@^5.1 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -3861,6 +4512,11 @@ strip-ansi@^7.0.1, strip-ansi@^7.1.2: dependencies: ansi-regex "^6.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + strip-dirs@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" @@ -3905,6 +4561,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + synckit@^0.11.12: version "0.11.12" resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.12.tgz#abe74124264fbc00a48011b0d98bdc1cffb64a7b" @@ -4070,6 +4731,16 @@ ts-type@>=2: tslib ">=2" typedarray-dts "^1.0.0" +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@>=2, tslib@^2.0.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" @@ -4111,6 +4782,42 @@ typed-array-buffer@^1.0.3: es-errors "^1.3.0" is-typed-array "^1.1.14" +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + typedarray-dts@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typedarray-dts/-/typedarray-dts-1.0.0.tgz#9dec9811386dbfba964c295c2606cf9a6b982d06" @@ -4121,6 +4828,16 @@ uc.micro@^2.0.0: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + unbzip2-stream@1.4.3, unbzip2-stream@^1.0.9: version "1.4.3" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" @@ -4236,6 +4953,46 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + which-typed-array@^1.1.16: version "1.1.19" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" @@ -4249,6 +5006,19 @@ which-typed-array@^1.1.16: gopd "^1.2.0" has-tostringtag "^1.0.2" +which-typed-array@^1.1.19: + version "1.1.20" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" diff --git a/eslint.config.js b/eslint.config.js index 861ff6369cb..07f68f757cc 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -7,6 +7,7 @@ import reactRefresh from "./server/node_modules/eslint-plugin-react-refresh/inde import reactHooks from "./server/node_modules/eslint-plugin-react-hooks/index.js" import ftFlow from "./server/node_modules/eslint-plugin-ft-flow/dist/index.js" import hermesParser from "./server/node_modules/hermes-eslint/dist/index.js" +import pluginImport from "./server/node_modules/eslint-plugin-import/lib/index.js" const reactRecommended = react.configs.recommended const jsxRuntime = react.configs["jsx-runtime"] @@ -36,7 +37,13 @@ export default [ react, "jsx-runtime": jsxRuntime, "react-hooks": reactHooks, - prettier + prettier, + import: pluginImport + }, + settings: { + "import/resolver": { + node: true + } }, rules: { ...reactRecommended.rules, @@ -47,7 +54,9 @@ export default [ "no-empty": "warn", "no-extra-boolean-cast": "warn", "no-prototype-builtins": "off", - "prettier/prettier": "warn" + "prettier/prettier": "warn", + "import/no-unresolved": "error", + "import/named": "error" } }, { diff --git a/package.json b/package.json index a3cc6046548..d444f9414da 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "private": false, "devDependencies": { "concurrently": "^9.1.2", + "eslint-plugin-import": "^2.32.0", "jest": "^29.7.0" } } diff --git a/server/endpoints/api/document/index.js b/server/endpoints/api/document/index.js index ca75472dc63..7dfb7a991d1 100644 --- a/server/endpoints/api/document/index.js +++ b/server/endpoints/api/document/index.js @@ -15,10 +15,7 @@ const fs = require("fs"); const path = require("path"); const { Document } = require("../../../models/documents"); const { purgeFolder } = require("../../../utils/files/purgeDocument"); -const documentsPath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, "../../../storage/documents") - : path.resolve(process.env.STORAGE_DIR, `documents`); +const { documentsPath } = require("../../../utils/files"); /** * Runs a simple validation check on the addToWorkspaces query parameter to ensure it is a string of comma-separated workspace slugs. @@ -93,7 +90,7 @@ function apiDocumentEndpoints(app) { { "location": "custom-documents/anythingllm.txt-6e8be64c-c162-4b43-9997-b068c0071e8b.json", "name": "anythingllm.txt-6e8be64c-c162-4b43-9997-b068c0071e8b.json", - "url": "file:///Users/tim/Documents/anything-llm/collector/hotdir/anythingllm.txt", + "url": "file:///absolute/path/to/anythingllm.txt", "title": "anythingllm.txt", "docAuthor": "Unknown", "description": "Unknown", @@ -223,7 +220,7 @@ function apiDocumentEndpoints(app) { documents: [{ "location": "custom-documents/anythingllm.txt-6e8be64c-c162-4b43-9997-b068c0071e8b.json", "name": "anythingllm.txt-6e8be64c-c162-4b43-9997-b068c0071e8b.json", - "url": "file:///Users/tim/Documents/anything-llm/collector/hotdir/anythingllm.txt", + "url": "file:///absolute/path/to/anythingllm.txt", "title": "anythingllm.txt", "docAuthor": "Unknown", "description": "Unknown", diff --git a/server/endpoints/system.js b/server/endpoints/system.js index 7115960c225..abb610ce778 100644 --- a/server/endpoints/system.js +++ b/server/endpoints/system.js @@ -12,6 +12,7 @@ const { multiUserMode, queryParams, } = require("../utils/http"); +const { baseStoragePath } = require("../utils/files"); const { handleAssetUpload, handlePfpUpload } = require("../utils/files/multer"); const { v4 } = require("uuid"); const { SystemSettings } = require("../models/systemSettings"); @@ -775,7 +776,7 @@ function systemEndpoints(app) { const userRecord = await User.get({ id: user.id }); const oldPfpFilename = userRecord.pfpFilename; if (oldPfpFilename) { - const storagePath = path.join(__dirname, "../storage/assets/pfp"); + const storagePath = path.join(baseStoragePath, "assets/pfp"); const oldPfpPath = path.join( storagePath, normalizePath(userRecord.pfpFilename) @@ -862,7 +863,7 @@ function systemEndpoints(app) { const oldPfpFilename = userRecord.pfpFilename; if (oldPfpFilename) { - const storagePath = path.join(__dirname, "../storage/assets/pfp"); + const storagePath = path.join(baseStoragePath, "assets/pfp"); const oldPfpPath = path.join( storagePath, normalizePath(oldPfpFilename) diff --git a/server/endpoints/workspaces.js b/server/endpoints/workspaces.js index f4ca863be5e..a558919df2e 100644 --- a/server/endpoints/workspaces.js +++ b/server/endpoints/workspaces.js @@ -32,12 +32,12 @@ const { } = require("../utils/files/pfp"); const { getTTSProvider } = require("../utils/TextToSpeech"); const { WorkspaceThread } = require("../models/workspaceThread"); - -const truncate = require("truncate"); const { purgeDocument } = require("../utils/files/purgeDocument"); const { getModelTag } = require("./utils"); const { searchWorkspaceAndThreads } = require("../utils/helpers/search"); const { workspaceParsedFilesEndpoints } = require("./workspacesParsedFiles"); +const { baseStoragePath } = require("../utils/files"); +const truncate = require("truncate"); function workspaceEndpoints(app) { if (!app) return; @@ -700,7 +700,7 @@ function workspaceEndpoints(app) { const oldPfpFilename = workspaceRecord.pfpFilename; if (oldPfpFilename) { - const storagePath = path.join(__dirname, "../storage/assets/pfp"); + const storagePath = path.join(baseStoragePath, "assets/pfp"); const oldPfpPath = path.join( storagePath, normalizePath(workspaceRecord.pfpFilename) @@ -741,7 +741,7 @@ function workspaceEndpoints(app) { const oldPfpFilename = workspaceRecord.pfpFilename; if (oldPfpFilename) { - const storagePath = path.join(__dirname, "../storage/assets/pfp"); + const storagePath = path.join(baseStoragePath, "assets/pfp"); const oldPfpPath = path.join( storagePath, normalizePath(oldPfpFilename) diff --git a/server/eslint.config.mjs b/server/eslint.config.mjs index 876f5c14dc7..9ad4dd9c1d3 100644 --- a/server/eslint.config.mjs +++ b/server/eslint.config.mjs @@ -4,14 +4,23 @@ import { defineConfig } from "eslint/config"; import pluginPrettier from "eslint-plugin-prettier"; import configPrettier from "eslint-config-prettier"; import unusedImports from "eslint-plugin-unused-imports"; +import pluginImport from "eslint-plugin-import"; export default defineConfig([ { ignores: ["__tests__/**", "**/syncStaticLists.mjs"] }, { - files: ["**/*.{js,mjs,cjs}"], - plugins: { js, prettier: pluginPrettier, "unused-imports": unusedImports }, + files: ["**/*.js"], + plugins: { + js, + prettier: pluginPrettier, + "unused-imports": unusedImports, + import: pluginImport, + }, extends: ["js/recommended"], - languageOptions: { globals: { ...globals.node, ...globals.browser } }, + languageOptions: { + sourceType: "commonjs", + globals: { ...globals.node, ...globals.browser }, + }, rules: { ...configPrettier.rules, "prettier/prettier": "error", @@ -32,7 +41,48 @@ export default defineConfig([ argsIgnorePattern: "^_", }, ], + "import/no-unresolved": [ + "error", + { commonjs: true, ignore: ["^@modelcontextprotocol/sdk"] }, + ], + "import/named": "error", + }, + settings: { + "import/resolver": { + node: true, + }, + "import/core-modules": ["eslint/config"], + }, + }, + { + files: ["**/*.mjs"], + plugins: { + js, + prettier: pluginPrettier, + "unused-imports": unusedImports, + import: pluginImport, + }, + extends: ["js/recommended"], + languageOptions: { + sourceType: "module", + globals: { ...globals.node }, + }, + rules: { + ...configPrettier.rules, + "prettier/prettier": "error", + "no-unused-vars": "off", + "unused-imports/no-unused-imports": "error", + "import/no-unresolved": [ + "error", + { ignore: ["^@modelcontextprotocol/sdk"] }, + ], + "import/named": "error", + }, + settings: { + "import/resolver": { + node: true, + }, + "import/core-modules": ["eslint/config"], }, }, - { files: ["**/*.js"], languageOptions: { sourceType: "commonjs" } }, ]); diff --git a/server/jobs/helpers/index.js b/server/jobs/helpers/index.js index e4449d06ddf..bcc2150b497 100644 --- a/server/jobs/helpers/index.js +++ b/server/jobs/helpers/index.js @@ -1,10 +1,7 @@ const path = require("node:path"); const fs = require("node:fs"); const { parentPort } = require("node:worker_threads"); -const documentsPath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../storage/documents`) - : path.resolve(process.env.STORAGE_DIR, `documents`); +const { documentsPath } = require("../../utils/files"); function log(stringContent = "") { if (parentPort) diff --git a/server/package.json b/server/package.json index 7bd533a739f..e6414acf0b7 100644 --- a/server/package.json +++ b/server/package.json @@ -99,6 +99,7 @@ "eslint": "9", "eslint-config-prettier": "^9.0.0", "eslint-plugin-ft-flow": "^3.0.0", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", diff --git a/server/swagger/openapi.json b/server/swagger/openapi.json index aa829ee59f3..69342980096 100644 --- a/server/swagger/openapi.json +++ b/server/swagger/openapi.json @@ -859,7 +859,7 @@ { "location": "custom-documents/anythingllm.txt-6e8be64c-c162-4b43-9997-b068c0071e8b.json", "name": "anythingllm.txt-6e8be64c-c162-4b43-9997-b068c0071e8b.json", - "url": "file://Users/tim/Documents/anything-llm/collector/hotdir/anythingllm.txt", + "url": "file://absolute/path/to/anythingllm.txt", "title": "anythingllm.txt", "docAuthor": "Unknown", "description": "Unknown", @@ -966,7 +966,7 @@ { "location": "custom-documents/anythingllm.txt-6e8be64c-c162-4b43-9997-b068c0071e8b.json", "name": "anythingllm.txt-6e8be64c-c162-4b43-9997-b068c0071e8b.json", - "url": "file://Users/tim/Documents/anything-llm/collector/hotdir/anythingllm.txt", + "url": "file://absolute/path/to/anythingllm.txt", "title": "anythingllm.txt", "docAuthor": "Unknown", "description": "Unknown", diff --git a/server/utils/AiProviders/apipie/index.js b/server/utils/AiProviders/apipie/index.js index 6eb0629dc5f..ae0bb6bdf76 100644 --- a/server/utils/AiProviders/apipie/index.js +++ b/server/utils/AiProviders/apipie/index.js @@ -7,16 +7,12 @@ const { } = require("../../helpers/chat/responses"); const fs = require("fs"); const path = require("path"); +const { baseStoragePath } = require("../../files"); const { safeJsonParse } = require("../../http"); const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); - -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "apipie") - : path.resolve(__dirname, `../../../storage/models/apipie`) -); +const cacheFolder = path.resolve(baseStoragePath, "models/apipie"); class ApiPieLLM { constructor(embedder = null, modelPreference = null) { diff --git a/server/utils/AiProviders/cometapi/index.js b/server/utils/AiProviders/cometapi/index.js index 85032ac462e..7d63e724e20 100644 --- a/server/utils/AiProviders/cometapi/index.js +++ b/server/utils/AiProviders/cometapi/index.js @@ -12,11 +12,8 @@ const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); const { COMETAPI_IGNORE_PATTERNS } = require("./constants"); -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "cometapi") - : path.resolve(__dirname, `../../../storage/models/cometapi`) -); +const { baseStoragePath } = require("../../files"); +const cacheFolder = path.resolve(baseStoragePath, "models/cometapi"); class CometApiLLM { defaultTimeout = 3_000; diff --git a/server/utils/AiProviders/dockerModelRunner/index.js b/server/utils/AiProviders/dockerModelRunner/index.js index 094fbf65606..1239e235295 100644 --- a/server/utils/AiProviders/dockerModelRunner/index.js +++ b/server/utils/AiProviders/dockerModelRunner/index.js @@ -11,13 +11,13 @@ const { const { OpenAI: OpenAIApi } = require("openai"); const { humanFileSize } = require("../../helpers"); const { safeJsonParse } = require("../../http"); +const { baseStoragePath } = require("../../files"); class DockerModelRunnerLLM { static cacheTime = 1000 * 60 * 60 * 24; // 24 hours static cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "docker-model-runner") - : path.resolve(__dirname, `../../../storage/models/docker-model-runner`) + baseStoragePath, + "models/docker-model-runner" ); constructor(embedder = null, modelPreference = null) { diff --git a/server/utils/AiProviders/fireworksAi/index.js b/server/utils/AiProviders/fireworksAi/index.js index 48cb08cf4a0..e0b7ef6959e 100644 --- a/server/utils/AiProviders/fireworksAi/index.js +++ b/server/utils/AiProviders/fireworksAi/index.js @@ -8,12 +8,8 @@ const { const { handleDefaultStreamResponseV2, } = require("../../helpers/chat/responses"); - -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "fireworks") - : path.resolve(__dirname, `../../../storage/models/fireworks`) -); +const { baseStoragePath } = require("../../files"); +const cacheFolder = path.resolve(baseStoragePath, "models/fireworks"); class FireworksAiLLM { constructor(embedder = null, modelPreference = null) { diff --git a/server/utils/AiProviders/gemini/index.js b/server/utils/AiProviders/gemini/index.js index 9ac2b9f5354..899db233609 100644 --- a/server/utils/AiProviders/gemini/index.js +++ b/server/utils/AiProviders/gemini/index.js @@ -11,11 +11,8 @@ const { const { MODEL_MAP } = require("../modelMap"); const { defaultGeminiModels, v1BetaModels } = require("./defaultModels"); const { safeJsonParse } = require("../../http"); -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "gemini") - : path.resolve(__dirname, `../../../storage/models/gemini`) -); +const { baseStoragePath } = require("../../files"); +const cacheFolder = path.resolve(baseStoragePath, "models/gemini"); const NO_SYSTEM_PROMPT_MODELS = [ "gemma-3-1b-it", diff --git a/server/utils/AiProviders/giteeai/index.js b/server/utils/AiProviders/giteeai/index.js index 95f24ef7b96..92abf069481 100644 --- a/server/utils/AiProviders/giteeai/index.js +++ b/server/utils/AiProviders/giteeai/index.js @@ -11,11 +11,8 @@ const { writeResponseChunk, clientAbortedHandler, } = require("../../helpers/chat/responses"); -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "giteeai") - : path.resolve(__dirname, `../../../storage/models/giteeai`) -); +const { baseStoragePath } = require("../../files"); +const cacheFolder = path.resolve(baseStoragePath, "models/giteeai"); class GiteeAILLM { constructor(embedder = null, modelPreference = null) { diff --git a/server/utils/AiProviders/modelMap/index.js b/server/utils/AiProviders/modelMap/index.js index 30ac871edd4..2bb2bca1076 100644 --- a/server/utils/AiProviders/modelMap/index.js +++ b/server/utils/AiProviders/modelMap/index.js @@ -1,6 +1,7 @@ const path = require("path"); const fs = require("fs"); const LEGACY_MODEL_MAP = require("./legacy"); +const { baseStoragePath } = require("../../files"); class ContextWindowFinder { static instance = null; @@ -26,11 +27,7 @@ class ContextWindowFinder { static remoteUrl = "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"; - cacheLocation = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "context-windows") - : path.resolve(__dirname, `../../../storage/models/context-windows`) - ); + cacheLocation = path.resolve(baseStoragePath, "models/context-windows"); cacheFilePath = path.resolve(this.cacheLocation, "context-windows.json"); cacheFileExpiryPath = path.resolve(this.cacheLocation, ".cached_at"); seenStaleCacheWarning = false; diff --git a/server/utils/AiProviders/novita/index.js b/server/utils/AiProviders/novita/index.js index d2fb62dbe6d..bf0262ae086 100644 --- a/server/utils/AiProviders/novita/index.js +++ b/server/utils/AiProviders/novita/index.js @@ -11,11 +11,8 @@ const { safeJsonParse } = require("../../http"); const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "novita") - : path.resolve(__dirname, `../../../storage/models/novita`) -); +const { baseStoragePath } = require("../../files"); +const cacheFolder = path.resolve(baseStoragePath, "models/novita"); class NovitaLLM { defaultTimeout = 3_000; diff --git a/server/utils/AiProviders/openRouter/index.js b/server/utils/AiProviders/openRouter/index.js index 28d4306bdae..88276bb3846 100644 --- a/server/utils/AiProviders/openRouter/index.js +++ b/server/utils/AiProviders/openRouter/index.js @@ -11,11 +11,8 @@ const { safeJsonParse } = require("../../http"); const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "openrouter") - : path.resolve(__dirname, `../../../storage/models/openrouter`) -); +const { baseStoragePath } = require("../../files"); +const cacheFolder = path.resolve(baseStoragePath, "models/openrouter"); class OpenRouterLLM { /** diff --git a/server/utils/AiProviders/ppio/index.js b/server/utils/AiProviders/ppio/index.js index f60052576ff..a18c0eb06a9 100644 --- a/server/utils/AiProviders/ppio/index.js +++ b/server/utils/AiProviders/ppio/index.js @@ -8,11 +8,8 @@ const { safeJsonParse } = require("../../http"); const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "ppio") - : path.resolve(__dirname, `../../../storage/models/ppio`) -); +const { baseStoragePath } = require("../../files"); +const cacheFolder = path.resolve(baseStoragePath, "models/ppio"); class PPIOLLM { constructor(embedder = null, modelPreference = null) { diff --git a/server/utils/AiProviders/togetherAi/index.js b/server/utils/AiProviders/togetherAi/index.js index f9571644ea2..826d2873c6b 100644 --- a/server/utils/AiProviders/togetherAi/index.js +++ b/server/utils/AiProviders/togetherAi/index.js @@ -8,12 +8,8 @@ const { const fs = require("fs"); const path = require("path"); const { safeJsonParse } = require("../../http"); - -const cacheFolder = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "models", "togetherAi") - : path.resolve(__dirname, `../../../storage/models/togetherAi`) -); +const { baseStoragePath } = require("../../files"); +const cacheFolder = path.resolve(baseStoragePath, "models/togetherAi"); async function togetherAiModels(apiKey = null) { const cacheModelPath = path.resolve(cacheFolder, "models.json"); diff --git a/server/utils/DocumentManager/index.js b/server/utils/DocumentManager/index.js index 17fd9860ee2..a318e0934a5 100644 --- a/server/utils/DocumentManager/index.js +++ b/server/utils/DocumentManager/index.js @@ -1,10 +1,6 @@ const fs = require("fs"); const path = require("path"); - -const documentsPath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../storage/documents`) - : path.resolve(process.env.STORAGE_DIR, `documents`); +const { documentsPath } = require("../files"); class DocumentManager { constructor({ workspace = null, maxTokens = null }) { diff --git a/server/utils/EmbeddingEngines/native/index.js b/server/utils/EmbeddingEngines/native/index.js index 21773fcb564..1a1fc009604 100644 --- a/server/utils/EmbeddingEngines/native/index.js +++ b/server/utils/EmbeddingEngines/native/index.js @@ -3,6 +3,7 @@ const fs = require("fs"); const { toChunks } = require("../../helpers"); const { v4 } = require("uuid"); const { SUPPORTED_NATIVE_EMBEDDING_MODELS } = require("./constants"); +const { baseStoragePath } = require("../../files"); class NativeEmbedder { static defaultModel = "Xenova/all-MiniLM-L6-v2"; @@ -33,11 +34,7 @@ class NativeEmbedder { this.className = "NativeEmbedder"; this.model = this.getEmbeddingModel(); this.modelInfo = this.getEmbedderInfo(); - this.cacheDir = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, `models`) - : path.resolve(__dirname, `../../../storage/models`) - ); + this.cacheDir = path.resolve(baseStoragePath, "models"); this.modelPath = path.resolve(this.cacheDir, ...this.model.split("/")); this.modelDownloaded = fs.existsSync(this.modelPath); @@ -113,9 +110,7 @@ class NativeEmbedder { #tempfilePath() { const filename = `${v4()}.tmp`; - const tmpPath = process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, "tmp") - : path.resolve(__dirname, `../../../storage/tmp`); + const tmpPath = path.resolve(baseStoragePath, "tmp"); if (!fs.existsSync(tmpPath)) fs.mkdirSync(tmpPath, { recursive: true }); return path.resolve(tmpPath, filename); } diff --git a/server/utils/EmbeddingRerankers/native/index.js b/server/utils/EmbeddingRerankers/native/index.js index 599338224d5..28688ead9ed 100644 --- a/server/utils/EmbeddingRerankers/native/index.js +++ b/server/utils/EmbeddingRerankers/native/index.js @@ -1,5 +1,6 @@ const path = require("path"); const fs = require("fs"); +const { baseStoragePath } = require("../../files"); class NativeEmbeddingReranker { static #model = null; @@ -16,11 +17,7 @@ class NativeEmbeddingReranker { // An alternative model to the mixedbread-ai/mxbai-rerank-xsmall-v1 model (speed on CPU is much slower for this model @ 18docs = 6s) // Model Card: https://huggingface.co/Xenova/ms-marco-MiniLM-L-6-v2 (speed on CPU is much faster @ 18docs = 1.6s) this.model = "Xenova/ms-marco-MiniLM-L-6-v2"; - this.cacheDir = path.resolve( - process.env.STORAGE_DIR - ? path.resolve(process.env.STORAGE_DIR, `models`) - : path.resolve(__dirname, `../../../storage/models`) - ); + this.cacheDir = path.resolve(baseStoragePath, "models"); this.modelPath = path.resolve(this.cacheDir, ...this.model.split("/")); // Make directory when it does not exist in existing installations if (!fs.existsSync(this.cacheDir)) fs.mkdirSync(this.cacheDir); diff --git a/server/utils/MCP/hypervisor/index.js b/server/utils/MCP/hypervisor/index.js index 875070446d0..9db4c5a8af6 100644 --- a/server/utils/MCP/hypervisor/index.js +++ b/server/utils/MCP/hypervisor/index.js @@ -12,6 +12,7 @@ const { StreamableHTTPClientTransport, } = require("@modelcontextprotocol/sdk/client/streamableHttp.js"); const { patchShellEnvironmentPath } = require("../../helpers/shell"); +const { baseStoragePath } = require("../../files"); /** * @typedef {'stdio' | 'http' | 'sse'} MCPServerTypes @@ -65,17 +66,10 @@ class MCPHypervisor { * Will create the file/directory if it doesn't exist already in storage/plugins with blank options */ #setupConfigFile() { - this.mcpServerJSONPath = - process.env.NODE_ENV === "development" - ? path.resolve( - __dirname, - `../../../storage/plugins/anythingllm_mcp_servers.json` - ) - : path.resolve( - process.env.STORAGE_DIR ?? - path.resolve(__dirname, `../../../storage`), - `plugins/anythingllm_mcp_servers.json` - ); + this.mcpServerJSONPath = path.resolve( + baseStoragePath, + "plugins/anythingllm_mcp_servers.json" + ); if (!fs.existsSync(this.mcpServerJSONPath)) { fs.mkdirSync(path.dirname(this.mcpServerJSONPath), { recursive: true }); diff --git a/server/utils/agents/imported.js b/server/utils/agents/imported.js index 5c584a301d2..4a24452fe88 100644 --- a/server/utils/agents/imported.js +++ b/server/utils/agents/imported.js @@ -1,12 +1,9 @@ const fs = require("fs"); const path = require("path"); const { safeJsonParse } = require("../http"); -const { isWithin, normalizePath } = require("../files"); +const { isWithin, normalizePath, baseStoragePath } = require("../files"); const { CollectorApi } = require("../collectorApi"); -const pluginsPath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, "../../storage/plugins/agent-skills") - : path.resolve(process.env.STORAGE_DIR, "plugins", "agent-skills"); +const pluginsPath = path.resolve(baseStoragePath, "plugins/agent-skills"); const sharedWebScraper = new CollectorApi(); class ImportedPlugin { diff --git a/server/utils/comKey/index.js b/server/utils/comKey/index.js index 5cc6b0c056f..b140740d6ed 100644 --- a/server/utils/comKey/index.js +++ b/server/utils/comKey/index.js @@ -1,13 +1,8 @@ const crypto = require("crypto"); const fs = require("fs"); const path = require("path"); -const keyPath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../storage/comkey`) - : path.resolve( - process.env.STORAGE_DIR ?? path.resolve(__dirname, `../../storage`), - `comkey` - ); +const { baseStoragePath } = require("../files"); +const keyPath = path.resolve(baseStoragePath, "comkey"); // What does this class do? // This class generates a hashed version of some text (typically a JSON payload) using a rolling RSA key diff --git a/server/utils/files/index.js b/server/utils/files/index.js index 37fcd4620be..153347460ae 100644 --- a/server/utils/files/index.js +++ b/server/utils/files/index.js @@ -3,22 +3,47 @@ const path = require("path"); const { v5: uuidv5 } = require("uuid"); const { Document } = require("../../models/documents"); const { DocumentSyncQueue } = require("../../models/documentSyncQueue"); -const documentsPath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../storage/documents`) - : path.resolve(process.env.STORAGE_DIR, `documents`); -const directUploadsPath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../storage/direct-uploads`) - : path.resolve(process.env.STORAGE_DIR, `direct-uploads`); -const vectorCachePath = + +/** + * The base storage path for the server. + * In development points to a storage folder in the server directory - not the main storage directory. + */ +const baseStoragePath = process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../storage/vector-cache`) - : path.resolve(process.env.STORAGE_DIR, `vector-cache`); + ? path.resolve(__dirname, `../../storage`) + : path.resolve(process.env.STORAGE_DIR); + +/** + * The folder where documents are stored to be stored when + * processed by the server. (Documents) + */ +const documentsPath = path.resolve(baseStoragePath, `documents`); + +/** + * The folder where direct uploads are stored to be stored when + * processed by the server. (WorkspaceParsedFiles) + */ +const directUploadsPath = path.resolve(baseStoragePath, `direct-uploads`); + +/** + * The folder where vector cache is stored to be stored when + * processed by the server embedder. + */ +const vectorCachePath = path.resolve(baseStoragePath, `vector-cache`); + +/** + * The folder where files are watched for and processed by the collector. + * In development points to a storage folder in the collector directory - not the main storage directory. + * + * Since collector and server do not share resources, we copy the exact same path + * here so server and collector can use the same path for the hotdir. These constant + * should always be pointing to the same folder as WATCH_DIRECTORY in the collector. + * @typedef {import("../../../collector/utils/files/index.js").WATCH_DIRECTORY} + */ const hotdirPath = process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../../collector/hotdir`) - : path.resolve(process.env.STORAGE_DIR, `../../collector/hotdir`); + ? path.resolve(__dirname, `../../../collector/storage/hotdir`) + : path.resolve(process.env.STORAGE_DIR, "hotdir"); // Should take in a folder that is a subfolder of documents // eg: youtube-subject/video-123.json @@ -494,6 +519,7 @@ module.exports = { fileData, normalizePath, isWithin, + baseStoragePath, documentsPath, directUploadsPath, hasVectorCachedFiles, diff --git a/server/utils/files/logo.js b/server/utils/files/logo.js index fa67fbfca56..458fccd664d 100644 --- a/server/utils/files/logo.js +++ b/server/utils/files/logo.js @@ -3,7 +3,7 @@ const fs = require("fs"); const { getType } = require("mime"); const { v4 } = require("uuid"); const { SystemSettings } = require("../../models/systemSettings"); -const { normalizePath, isWithin } = require("."); +const { normalizePath, isWithin, baseStoragePath } = require("."); const LOGO_FILENAME = "anything-llm.png"; const LOGO_FILENAME_DARK = "anything-llm-dark.png"; @@ -32,9 +32,7 @@ function getDefaultFilename(darkMode = true) { async function determineLogoFilepath(defaultFilename = LOGO_FILENAME) { const currentLogoFilename = await SystemSettings.currentLogoFilename(); - const basePath = process.env.STORAGE_DIR - ? path.join(process.env.STORAGE_DIR, "assets") - : path.join(__dirname, "../../storage/assets"); + const basePath = path.join(baseStoragePath, "assets"); const defaultFilepath = path.join(basePath, defaultFilename); if (currentLogoFilename && validFilename(currentLogoFilename)) { @@ -73,9 +71,7 @@ function fetchLogo(logoPath) { async function renameLogoFile(originalFilename = null) { const extname = path.extname(originalFilename) || ".png"; const newFilename = `${v4()}${extname}`; - const assetsDirectory = process.env.STORAGE_DIR - ? path.join(process.env.STORAGE_DIR, "assets") - : path.join(__dirname, `../../storage/assets`); + const assetsDirectory = path.join(baseStoragePath, "assets"); const originalFilepath = path.join( assetsDirectory, normalizePath(originalFilename) @@ -84,9 +80,11 @@ async function renameLogoFile(originalFilename = null) { throw new Error("Invalid file path."); // The output always uses a random filename. - const outputFilepath = process.env.STORAGE_DIR - ? path.join(process.env.STORAGE_DIR, "assets", normalizePath(newFilename)) - : path.join(__dirname, `../../storage/assets`, normalizePath(newFilename)); + const outputFilepath = path.join( + baseStoragePath, + "assets", + normalizePath(newFilename) + ); fs.renameSync(originalFilepath, outputFilepath); return newFilename; @@ -94,9 +92,7 @@ async function renameLogoFile(originalFilename = null) { async function removeCustomLogo(logoFilename = LOGO_FILENAME) { if (!logoFilename || !validFilename(logoFilename)) return false; - const assetsDirectory = process.env.STORAGE_DIR - ? path.join(process.env.STORAGE_DIR, "assets") - : path.join(__dirname, `../../storage/assets`); + const assetsDirectory = path.join(baseStoragePath, "assets"); const logoPath = path.join(assetsDirectory, normalizePath(logoFilename)); if (!isWithin(path.resolve(assetsDirectory), path.resolve(logoPath))) diff --git a/server/utils/files/multer.js b/server/utils/files/multer.js index ee0de4b1159..1bb16bac1f0 100644 --- a/server/utils/files/multer.js +++ b/server/utils/files/multer.js @@ -2,7 +2,7 @@ const multer = require("multer"); const path = require("path"); const fs = require("fs"); const { v4 } = require("uuid"); -const { normalizePath } = require("."); +const { hotdirPath, normalizePath, baseStoragePath } = require("."); /** * Handle File uploads for auto-uploading. @@ -10,11 +10,7 @@ const { normalizePath } = require("."); */ const fileUploadStorage = multer.diskStorage({ destination: function (_, __, cb) { - const uploadOutput = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../../collector/hotdir`) - : path.resolve(process.env.STORAGE_DIR, `../../collector/hotdir`); - cb(null, uploadOutput); + cb(null, hotdirPath); }, filename: function (_, file, cb) { file.originalname = normalizePath( @@ -30,11 +26,7 @@ const fileUploadStorage = multer.diskStorage({ */ const fileAPIUploadStorage = multer.diskStorage({ destination: function (_, __, cb) { - const uploadOutput = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../../collector/hotdir`) - : path.resolve(process.env.STORAGE_DIR, `../../collector/hotdir`); - cb(null, uploadOutput); + cb(null, hotdirPath); }, filename: function (_, file, cb) { file.originalname = normalizePath( @@ -47,12 +39,9 @@ const fileAPIUploadStorage = multer.diskStorage({ // Asset storage for logos const assetUploadStorage = multer.diskStorage({ destination: function (_, __, cb) { - const uploadOutput = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../storage/assets`) - : path.resolve(process.env.STORAGE_DIR, "assets"); - fs.mkdirSync(uploadOutput, { recursive: true }); - return cb(null, uploadOutput); + const ASSETS_PATH = path.resolve(baseStoragePath, "assets"); + fs.mkdirSync(ASSETS_PATH, { recursive: true }); + return cb(null, ASSETS_PATH); }, filename: function (_, file, cb) { file.originalname = normalizePath( @@ -67,12 +56,9 @@ const assetUploadStorage = multer.diskStorage({ */ const pfpUploadStorage = multer.diskStorage({ destination: function (_, __, cb) { - const uploadOutput = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../storage/assets/pfp`) - : path.resolve(process.env.STORAGE_DIR, "assets/pfp"); - fs.mkdirSync(uploadOutput, { recursive: true }); - return cb(null, uploadOutput); + const PFP_PATH = path.resolve(baseStoragePath, "assets/pfp"); + fs.mkdirSync(PFP_PATH, { recursive: true }); + return cb(null, PFP_PATH); }, filename: function (req, file, cb) { const randomFileName = `${v4()}${path.extname( diff --git a/server/utils/files/pfp.js b/server/utils/files/pfp.js index 2842614dcc6..0f1d5fa9b71 100644 --- a/server/utils/files/pfp.js +++ b/server/utils/files/pfp.js @@ -2,7 +2,7 @@ const path = require("path"); const fs = require("fs"); const { getType } = require("mime"); const { User } = require("../../models/user"); -const { normalizePath, isWithin } = require("."); +const { normalizePath, isWithin, baseStoragePath } = require("."); const { Workspace } = require("../../models/workspace"); function fetchPfp(pfpPath) { @@ -31,9 +31,7 @@ async function determinePfpFilepath(id) { const pfpFilename = user?.pfpFilename || null; if (!pfpFilename) return null; - const basePath = process.env.STORAGE_DIR - ? path.join(process.env.STORAGE_DIR, "assets/pfp") - : path.join(__dirname, "../../storage/assets/pfp"); + const basePath = path.join(baseStoragePath, "assets/pfp"); const pfpFilepath = path.join(basePath, normalizePath(pfpFilename)); if (!isWithin(path.resolve(basePath), path.resolve(pfpFilepath))) return null; @@ -46,9 +44,7 @@ async function determineWorkspacePfpFilepath(slug) { const pfpFilename = workspace?.pfpFilename || null; if (!pfpFilename) return null; - const basePath = process.env.STORAGE_DIR - ? path.join(process.env.STORAGE_DIR, "assets/pfp") - : path.join(__dirname, "../../storage/assets/pfp"); + const basePath = path.join(baseStoragePath, "assets/pfp"); const pfpFilepath = path.join(basePath, normalizePath(pfpFilename)); if (!isWithin(path.resolve(basePath), path.resolve(pfpFilepath))) return null; diff --git a/server/yarn.lock b/server/yarn.lock index 22d15cd951c..914098aa744 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -2233,6 +2233,11 @@ resolved "https://registry.npmjs.org/@qdrant/openapi-typescript-fetch/-/openapi-typescript-fetch-1.2.6.tgz" integrity sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA== +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + "@sevinf/maybe@0.5.0": version "0.5.0" resolved "https://registry.npmjs.org/@sevinf/maybe/-/maybe-0.5.0.tgz" @@ -3531,6 +3536,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "@types/lodash@^4.14.165": version "4.17.6" resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz" @@ -3814,6 +3824,14 @@ array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" +array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" @@ -3831,6 +3849,20 @@ array-includes@^3.1.6, array-includes@^3.1.7: get-intrinsic "^1.2.4" is-string "^1.0.7" +array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + array.prototype.findlast@^1.2.4: version "1.2.5" resolved "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz" @@ -3843,6 +3875,19 @@ array.prototype.findlast@^1.2.4: es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + array.prototype.flat@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" @@ -3853,6 +3898,16 @@ array.prototype.flat@^1.3.1: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" +array.prototype.flat@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" @@ -3863,6 +3918,16 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + array.prototype.toreversed@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz" @@ -3898,6 +3963,19 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + asn1.js@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -4156,7 +4234,7 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -call-bind@^1.0.7: +call-bind@^1.0.7, call-bind@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== @@ -4166,7 +4244,7 @@ call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.2" -call-bound@^1.0.2: +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== @@ -4623,6 +4701,15 @@ data-view-buffer@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + data-view-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz" @@ -4632,6 +4719,15 @@ data-view-byte-length@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + data-view-byte-offset@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz" @@ -4641,6 +4737,15 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + dayjs@^1.11.7: version "1.11.11" resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz" @@ -4950,6 +5055,66 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23 unbox-primitive "^1.0.2" which-typed-array "^1.1.15" +es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.1.tgz#f0c131ed5ea1bb2411134a8dd94def09c46c7899" + integrity sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + es-aggregate-error@^1.0.9: version "1.0.13" resolved "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.13.tgz" @@ -5027,6 +5192,13 @@ es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: dependencies: hasown "^2.0.0" +es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" @@ -5036,6 +5208,15 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + escalade@^3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" @@ -5056,6 +5237,22 @@ eslint-config-prettier@^9.0.0: resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== + dependencies: + debug "^3.2.7" + eslint-plugin-ft-flow@^3.0.0: version "3.0.7" resolved "https://registry.npmjs.org/eslint-plugin-ft-flow/-/eslint-plugin-ft-flow-3.0.7.tgz" @@ -5064,6 +5261,31 @@ eslint-plugin-ft-flow@^3.0.0: lodash "^4.17.21" string-natural-compare "^3.0.1" +eslint-plugin-import@^2.32.0: + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.1" + hasown "^2.0.2" + is-core-module "^2.16.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.1" + semver "^6.3.1" + string.prototype.trimend "^1.0.9" + tsconfig-paths "^3.15.0" + eslint-plugin-prettier@^5.0.0: version "5.1.3" resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz" @@ -5554,6 +5776,13 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + form-data-encoder@1.7.2: version "1.7.2" resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz" @@ -5644,6 +5873,18 @@ function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" +function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" @@ -5677,7 +5918,7 @@ get-intrinsic@^1.2.1, get-intrinsic@^1.2.3: has-symbols "^1.0.3" hasown "^2.0.0" -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -5715,6 +5956,15 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + github-from-package@0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" @@ -5756,7 +6006,7 @@ globals@^17.4.0: resolved "https://registry.yarnpkg.com/globals/-/globals-17.4.0.tgz#33d7d297ed1536b388a0e2f4bcd0ff19c8ff91b5" integrity sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw== -globalthis@^1.0.3: +globalthis@^1.0.3, globalthis@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -5811,7 +6061,7 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: +has-proto@^1.0.1, has-proto@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== @@ -6033,6 +6283,15 @@ internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + ip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" @@ -6056,6 +6315,15 @@ is-array-buffer@^3.0.4: call-bind "^1.0.2" get-intrinsic "^1.2.1" +is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + is-arrayish@^0.3.1: version "0.3.2" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" @@ -6075,6 +6343,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" @@ -6090,6 +6365,14 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" @@ -6107,6 +6390,13 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + is-data-view@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz" @@ -6114,6 +6404,15 @@ is-data-view@^1.0.1: dependencies: is-typed-array "^1.1.13" +is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" @@ -6121,6 +6420,14 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" @@ -6143,6 +6450,13 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" @@ -6193,6 +6507,14 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -6216,6 +6538,16 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + is-set@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz" @@ -6228,6 +6560,13 @@ is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: dependencies: call-bind "^1.0.7" +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" @@ -6252,6 +6591,14 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" @@ -6259,6 +6606,15 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + is-typed-array@^1.1.13: version "1.1.13" resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" @@ -6266,6 +6622,13 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" +is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + is-valid-path@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz" @@ -6285,6 +6648,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + is-weakset@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz" @@ -6433,6 +6803,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + json5@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" @@ -7137,7 +7514,7 @@ object-assign@^4, object-assign@^4.1.1: resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1, object-inspect@^1.13.3: +object-inspect@^1.13.1, object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== @@ -7157,6 +7534,18 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + object.entries@^1.1.7: version "1.1.8" resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz" @@ -7166,7 +7555,7 @@ object.entries@^1.1.7: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.7: +object.fromentries@^2.0.7, object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -7176,6 +7565,15 @@ object.fromentries@^2.0.7: es-abstract "^1.23.2" es-object-atoms "^1.0.0" +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + object.hasown@^1.1.3: version "1.1.4" resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz" @@ -7194,6 +7592,16 @@ object.values@^1.1.6, object.values@^1.1.7: define-properties "^1.2.1" es-object-atoms "^1.0.0" +object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + ollama@^0.5.0: version "0.5.12" resolved "https://registry.npmjs.org/ollama/-/ollama-0.5.12.tgz" @@ -7339,6 +7747,15 @@ os-tmpdir@~1.0.2: resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" @@ -7844,6 +8261,20 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" @@ -7859,6 +8290,18 @@ regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" +regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" @@ -7874,6 +8317,15 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve@^1.22.4: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.5: version "2.0.0-next.5" resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz" @@ -7919,6 +8371,17 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" @@ -7929,6 +8392,14 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz" @@ -7938,6 +8409,15 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + safe-stable-stringify@^2.3.1: version "2.4.3" resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" @@ -8082,6 +8562,15 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" @@ -8252,6 +8741,14 @@ statuses@^2.0.1, statuses@~2.0.1, statuses@~2.0.2: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + stoppable@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz" @@ -8309,6 +8806,19 @@ string.prototype.matchall@^4.0.10: set-function-name "^2.0.2" side-channel "^1.0.6" +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz" @@ -8328,6 +8838,16 @@ string.prototype.trimend@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string.prototype.trimstart@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" @@ -8365,6 +8885,11 @@ strip-ansi@^7.0.1, strip-ansi@^7.1.2: dependencies: ansi-regex "^6.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" @@ -8574,6 +9099,16 @@ truncate@^3.0.0: resolved "https://registry.npmjs.org/truncate/-/truncate-3.0.0.tgz" integrity sha512-C+0Xojw7wZPl6MDq5UjMTuxZvBPK04mtdFet7k+GSZPINcvLZFCXg+15kWIL4wAqDB7CksIsKiRLbQ1wa7rKdw== +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^2.2.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" @@ -8629,6 +9164,15 @@ typed-array-buffer@^1.0.2: es-errors "^1.3.0" is-typed-array "^1.1.13" +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + typed-array-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz" @@ -8640,6 +9184,17 @@ typed-array-byte-length@^1.0.1: has-proto "^1.0.3" is-typed-array "^1.1.13" +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + typed-array-byte-offset@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz" @@ -8652,6 +9207,19 @@ typed-array-byte-offset@^1.0.2: has-proto "^1.0.3" is-typed-array "^1.1.13" +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + typed-array-length@^1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz" @@ -8664,6 +9232,18 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" @@ -8694,6 +9274,16 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + undefsafe@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" @@ -8872,6 +9462,17 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + which-builtin-type@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz" @@ -8890,7 +9491,26 @@ which-builtin-type@^1.1.3: which-collection "^1.0.1" which-typed-array "^1.1.9" -which-collection@^1.0.1: +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.1, which-collection@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -8911,6 +9531,19 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.2" +which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.20" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" From bc77ebb4864750c0dc988a03888e5b61b15c9445 Mon Sep 17 00:00:00 2001 From: Timothy Carambat Date: Fri, 13 Mar 2026 08:41:12 -0700 Subject: [PATCH 2/7] remove legacy placeholder files --- collector/.gitignore | 3 +-- collector/processSingleFile/index.js | 7 ------- collector/utils/files/index.js | 4 ++-- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/collector/.gitignore b/collector/.gitignore index 86ced2aa050..df622bfb340 100644 --- a/collector/.gitignore +++ b/collector/.gitignore @@ -1,5 +1,3 @@ -hotdir/* -!hotdir/__HOTDIR__.md yarn-error.log !yarn.lock outputs @@ -7,3 +5,4 @@ scripts .env.development .env.production .env.test +storage/ diff --git a/collector/processSingleFile/index.js b/collector/processSingleFile/index.js index 1bd3f89b7e9..b05adcc1480 100644 --- a/collector/processSingleFile/index.js +++ b/collector/processSingleFile/index.js @@ -8,7 +8,6 @@ const { isWithin, WATCH_DIRECTORY, } = require("../utils/files"); -const RESERVED_FILES = ["__HOTDIR__.md"]; /** * Process a single file and return the documents @@ -30,12 +29,6 @@ async function processSingleFile(targetFilename, options = {}, metadata = {}) { documents: [], }; - if (RESERVED_FILES.includes(targetFilename)) - return { - success: false, - reason: "Filename is a reserved filename and cannot be processed.", - documents: [], - }; if (!fs.existsSync(fullFilePath)) return { success: false, diff --git a/collector/utils/files/index.js b/collector/utils/files/index.js index d1f01225168..f835bb74842 100644 --- a/collector/utils/files/index.js +++ b/collector/utils/files/index.js @@ -180,8 +180,8 @@ function writeToServerDocuments({ */ function wipeCollectorStorage() { const dirs = [ - { path: WATCH_DIRECTORY, keep: ["__HOTDIR__.md"] }, - { path: tmpStorage, keep: [".placeholder"] }, + { path: WATCH_DIRECTORY, keep: [] }, + { path: tmpStorage, keep: [] }, ]; for (const { path: directory, keep } of dirs) { From b9b9f2aec3703729bdd5c9ace39111498eac9c7f Mon Sep 17 00:00:00 2001 From: Timothy Carambat Date: Fri, 13 Mar 2026 08:54:24 -0700 Subject: [PATCH 3/7] patch env resolution for tests --- server/utils/files/index.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/server/utils/files/index.js b/server/utils/files/index.js index 153347460ae..dc82ff80333 100644 --- a/server/utils/files/index.js +++ b/server/utils/files/index.js @@ -8,10 +8,9 @@ const { DocumentSyncQueue } = require("../../models/documentSyncQueue"); * The base storage path for the server. * In development points to a storage folder in the server directory - not the main storage directory. */ -const baseStoragePath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../storage`) - : path.resolve(process.env.STORAGE_DIR); +const baseStoragePath = ["development", "test"].includes(process.env.NODE_ENV) + ? path.resolve(__dirname, `../../storage`) + : path.resolve(process.env.STORAGE_DIR); /** * The folder where documents are stored to be stored when @@ -40,10 +39,9 @@ const vectorCachePath = path.resolve(baseStoragePath, `vector-cache`); * should always be pointing to the same folder as WATCH_DIRECTORY in the collector. * @typedef {import("../../../collector/utils/files/index.js").WATCH_DIRECTORY} */ -const hotdirPath = - process.env.NODE_ENV === "development" - ? path.resolve(__dirname, `../../../collector/storage/hotdir`) - : path.resolve(process.env.STORAGE_DIR, "hotdir"); +const hotdirPath = ["development", "test"].includes(process.env.NODE_ENV) + ? path.resolve(__dirname, `../../../collector/storage/hotdir`) + : path.resolve(process.env.STORAGE_DIR, "hotdir"); // Should take in a folder that is a subfolder of documents // eg: youtube-subject/video-123.json From 25acdbb84609b90462fab577dc8268bec1b24868 Mon Sep 17 00:00:00 2001 From: Timothy Carambat Date: Fri, 13 Mar 2026 10:39:38 -0700 Subject: [PATCH 4/7] improve addDocumentToWorkspace logging --- server/utils/vectorDbProviders/astra/index.js | 2 +- server/utils/vectorDbProviders/chroma/index.js | 2 +- server/utils/vectorDbProviders/lance/index.js | 2 +- server/utils/vectorDbProviders/milvus/index.js | 2 +- server/utils/vectorDbProviders/pgvector/index.js | 2 +- server/utils/vectorDbProviders/pinecone/index.js | 2 +- server/utils/vectorDbProviders/qdrant/index.js | 2 +- server/utils/vectorDbProviders/weaviate/index.js | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/utils/vectorDbProviders/astra/index.js b/server/utils/vectorDbProviders/astra/index.js index 5ac096e3970..a36392d50d7 100644 --- a/server/utils/vectorDbProviders/astra/index.js +++ b/server/utils/vectorDbProviders/astra/index.js @@ -281,7 +281,7 @@ class AstraDB extends VectorDatabase { await DocumentVectors.bulkInsert(documentVectors); return { vectorized: true, error: null }; } catch (e) { - this.logger("addDocumentToNamespace", e.message); + this.logger("addDocumentToNamespace", e); return { vectorized: false, error: e.message }; } } diff --git a/server/utils/vectorDbProviders/chroma/index.js b/server/utils/vectorDbProviders/chroma/index.js index b8b1633f025..9c7a66dbb4f 100644 --- a/server/utils/vectorDbProviders/chroma/index.js +++ b/server/utils/vectorDbProviders/chroma/index.js @@ -336,7 +336,7 @@ class Chroma extends VectorDatabase { await DocumentVectors.bulkInsert(documentVectors); return { vectorized: true, error: null }; } catch (e) { - this.logger("addDocumentToNamespace", e.message); + this.logger("addDocumentToNamespace", e); return { vectorized: false, error: e.message }; } } diff --git a/server/utils/vectorDbProviders/lance/index.js b/server/utils/vectorDbProviders/lance/index.js index f41fae92bd8..303c5d2dd94 100644 --- a/server/utils/vectorDbProviders/lance/index.js +++ b/server/utils/vectorDbProviders/lance/index.js @@ -398,7 +398,7 @@ class LanceDb extends VectorDatabase { await DocumentVectors.bulkInsert(documentVectors); return { vectorized: true, error: null }; } catch (e) { - this.logger("addDocumentToNamespace", e.message); + this.logger("addDocumentToNamespace", e); return { vectorized: false, error: e.message }; } } diff --git a/server/utils/vectorDbProviders/milvus/index.js b/server/utils/vectorDbProviders/milvus/index.js index 2129a6835f1..9bf6f6f8851 100644 --- a/server/utils/vectorDbProviders/milvus/index.js +++ b/server/utils/vectorDbProviders/milvus/index.js @@ -283,7 +283,7 @@ class Milvus extends VectorDatabase { await DocumentVectors.bulkInsert(documentVectors); return { vectorized: true, error: null }; } catch (e) { - this.logger("addDocumentToNamespace", e.message); + this.logger("addDocumentToNamespace", e); return { vectorized: false, error: e.message }; } } diff --git a/server/utils/vectorDbProviders/pgvector/index.js b/server/utils/vectorDbProviders/pgvector/index.js index 20f67f7f936..47bc2502ffe 100644 --- a/server/utils/vectorDbProviders/pgvector/index.js +++ b/server/utils/vectorDbProviders/pgvector/index.js @@ -652,7 +652,7 @@ class PGVector extends VectorDatabase { await DocumentVectors.bulkInsert(documentVectors); return { vectorized: true, error: null }; } catch (err) { - this.logger("addDocumentToNamespace", err.message); + this.logger("addDocumentToNamespace", err); return { vectorized: false, error: err.message }; } finally { if (connection) await connection.end(); diff --git a/server/utils/vectorDbProviders/pinecone/index.js b/server/utils/vectorDbProviders/pinecone/index.js index 6e38fd4c4d3..0161c32240f 100644 --- a/server/utils/vectorDbProviders/pinecone/index.js +++ b/server/utils/vectorDbProviders/pinecone/index.js @@ -210,7 +210,7 @@ class PineconeDB extends VectorDatabase { await DocumentVectors.bulkInsert(documentVectors); return { vectorized: true, error: null }; } catch (e) { - this.logger("addDocumentToNamespace", e.message); + this.logger("addDocumentToNamespace", e); return { vectorized: false, error: e.message }; } } diff --git a/server/utils/vectorDbProviders/qdrant/index.js b/server/utils/vectorDbProviders/qdrant/index.js index 003ed60544f..8f1f063a642 100644 --- a/server/utils/vectorDbProviders/qdrant/index.js +++ b/server/utils/vectorDbProviders/qdrant/index.js @@ -324,7 +324,7 @@ class QDrant extends VectorDatabase { await DocumentVectors.bulkInsert(documentVectors); return { vectorized: true, error: null }; } catch (e) { - this.logger("addDocumentToNamespace", e.message); + this.logger("addDocumentToNamespace", e); return { vectorized: false, error: e.message }; } } diff --git a/server/utils/vectorDbProviders/weaviate/index.js b/server/utils/vectorDbProviders/weaviate/index.js index 3aa14ba7851..4b66db0acc1 100644 --- a/server/utils/vectorDbProviders/weaviate/index.js +++ b/server/utils/vectorDbProviders/weaviate/index.js @@ -357,7 +357,7 @@ class Weaviate extends VectorDatabase { await DocumentVectors.bulkInsert(documentVectors); return { vectorized: true, error: null }; } catch (e) { - this.logger("addDocumentToNamespace", e.message); + this.logger("addDocumentToNamespace", e); return { vectorized: false, error: e.message }; } } From ddca814b88be144cf0376f181d8fe5b3c2866f40 Mon Sep 17 00:00:00 2001 From: Timothy Carambat Date: Fri, 13 Mar 2026 11:08:44 -0700 Subject: [PATCH 5/7] move paths into own module to prevent circular deps --- collector/utils/files/index.js | 6 +- server/endpoints/api/document/index.js | 2 +- server/endpoints/document.js | 3 +- server/endpoints/system.js | 2 +- server/endpoints/workspaces.js | 2 +- server/jobs/cleanup-orphan-documents.js | 2 +- server/jobs/helpers/index.js | 2 +- server/models/workspaceParsedFiles.js | 2 +- server/utils/AiProviders/apipie/index.js | 2 +- server/utils/AiProviders/cometapi/index.js | 2 +- .../AiProviders/dockerModelRunner/index.js | 2 +- server/utils/AiProviders/fireworksAi/index.js | 2 +- server/utils/AiProviders/gemini/index.js | 2 +- server/utils/AiProviders/giteeai/index.js | 2 +- server/utils/AiProviders/modelMap/index.js | 2 +- server/utils/AiProviders/novita/index.js | 2 +- server/utils/AiProviders/openRouter/index.js | 2 +- server/utils/AiProviders/ppio/index.js | 2 +- server/utils/AiProviders/togetherAi/index.js | 2 +- server/utils/EmbeddingEngines/native/index.js | 2 +- .../utils/EmbeddingRerankers/native/index.js | 2 +- server/utils/MCP/hypervisor/index.js | 2 +- server/utils/agents/imported.js | 2 +- server/utils/chats/apiChatHandler.js | 4 +- server/utils/comKey/index.js | 2 +- server/utils/files/index.js | 44 +-------------- server/utils/files/logo.js | 3 +- server/utils/files/multer.js | 3 +- server/utils/files/paths.js | 55 +++++++++++++++++++ server/utils/files/pfp.js | 3 +- server/utils/files/purgeDocument.js | 2 +- 31 files changed, 93 insertions(+), 74 deletions(-) create mode 100644 server/utils/files/paths.js diff --git a/collector/utils/files/index.js b/collector/utils/files/index.js index f835bb74842..a76b490297d 100644 --- a/collector/utils/files/index.js +++ b/collector/utils/files/index.js @@ -6,7 +6,7 @@ const { MimeDetector } = require("./mime"); * The base storage path for the server - where all primary storage is stored. */ const basePrimaryStoragePath = - process.env.NODE_ENV === "development" + process.env.NODE_ENV === "development" || !process.env.STORAGE_DIR ? path.resolve(__dirname, "../../../server/storage") : path.resolve(process.env.STORAGE_DIR); @@ -15,7 +15,7 @@ const basePrimaryStoragePath = * In development points to a storage folder in the collector directory - not the main storage directory. */ const tmpStorage = - process.env.NODE_ENV === "development" + process.env.NODE_ENV === "development" || !process.env.STORAGE_DIR ? path.resolve(__dirname, "../../storage/tmp") : path.resolve(process.env.STORAGE_DIR, "tmp"); @@ -24,7 +24,7 @@ const tmpStorage = * In development points to a storage folder in the collector directory - not the main storage directory. */ const WATCH_DIRECTORY = - process.env.NODE_ENV === "development" + process.env.NODE_ENV === "development" || !process.env.STORAGE_DIR ? path.resolve(__dirname, "../../storage/hotdir") : path.resolve(process.env.STORAGE_DIR, "hotdir"); diff --git a/server/endpoints/api/document/index.js b/server/endpoints/api/document/index.js index 7dfb7a991d1..7e11e1a411b 100644 --- a/server/endpoints/api/document/index.js +++ b/server/endpoints/api/document/index.js @@ -15,7 +15,7 @@ const fs = require("fs"); const path = require("path"); const { Document } = require("../../../models/documents"); const { purgeFolder } = require("../../../utils/files/purgeDocument"); -const { documentsPath } = require("../../../utils/files"); +const { documentsPath } = require("../../../utils/files/paths"); /** * Runs a simple validation check on the addToWorkspaces query parameter to ensure it is a string of comma-separated workspace slugs. diff --git a/server/endpoints/document.js b/server/endpoints/document.js index e4c311aee51..782b59007ba 100644 --- a/server/endpoints/document.js +++ b/server/endpoints/document.js @@ -1,5 +1,6 @@ const { Document } = require("../models/documents"); -const { normalizePath, documentsPath, isWithin } = require("../utils/files"); +const { normalizePath, isWithin } = require("../utils/files"); +const { documentsPath } = require("../utils/files/paths"); const { reqBody } = require("../utils/http"); const { flexUserRoleValid, diff --git a/server/endpoints/system.js b/server/endpoints/system.js index abb610ce778..f15077ca4aa 100644 --- a/server/endpoints/system.js +++ b/server/endpoints/system.js @@ -12,7 +12,7 @@ const { multiUserMode, queryParams, } = require("../utils/http"); -const { baseStoragePath } = require("../utils/files"); +const { baseStoragePath } = require("../utils/files/paths"); const { handleAssetUpload, handlePfpUpload } = require("../utils/files/multer"); const { v4 } = require("uuid"); const { SystemSettings } = require("../models/systemSettings"); diff --git a/server/endpoints/workspaces.js b/server/endpoints/workspaces.js index a558919df2e..1a2190619d8 100644 --- a/server/endpoints/workspaces.js +++ b/server/endpoints/workspaces.js @@ -36,7 +36,7 @@ const { purgeDocument } = require("../utils/files/purgeDocument"); const { getModelTag } = require("./utils"); const { searchWorkspaceAndThreads } = require("../utils/helpers/search"); const { workspaceParsedFilesEndpoints } = require("./workspacesParsedFiles"); -const { baseStoragePath } = require("../utils/files"); +const { baseStoragePath } = require("../utils/files/paths"); const truncate = require("truncate"); function workspaceEndpoints(app) { diff --git a/server/jobs/cleanup-orphan-documents.js b/server/jobs/cleanup-orphan-documents.js index b5b3e2aaafc..817d0fe476c 100644 --- a/server/jobs/cleanup-orphan-documents.js +++ b/server/jobs/cleanup-orphan-documents.js @@ -3,7 +3,7 @@ const path = require("path"); const { default: slugify } = require("slugify"); const { log, conclude } = require("./helpers/index.js"); const { WorkspaceParsedFiles } = require("../models/workspaceParsedFiles.js"); -const { directUploadsPath } = require("../utils/files"); +const { directUploadsPath } = require("../utils/files/paths"); async function batchDeleteFiles(filesToDelete, batchSize = 500) { let deletedCount = 0; diff --git a/server/jobs/helpers/index.js b/server/jobs/helpers/index.js index bcc2150b497..fc83f25f6b0 100644 --- a/server/jobs/helpers/index.js +++ b/server/jobs/helpers/index.js @@ -1,7 +1,7 @@ const path = require("node:path"); const fs = require("node:fs"); const { parentPort } = require("node:worker_threads"); -const { documentsPath } = require("../../utils/files"); +const { documentsPath } = require("../../utils/files/paths"); function log(stringContent = "") { if (parentPort) diff --git a/server/models/workspaceParsedFiles.js b/server/models/workspaceParsedFiles.js index 37a538b9d72..7d66dd38569 100644 --- a/server/models/workspaceParsedFiles.js +++ b/server/models/workspaceParsedFiles.js @@ -1,7 +1,7 @@ const prisma = require("../utils/prisma"); const { EventLogs } = require("./eventLogs"); const { Document } = require("./documents"); -const { documentsPath, directUploadsPath } = require("../utils/files"); +const { documentsPath, directUploadsPath } = require("../utils/files/paths"); const { safeJsonParse } = require("../utils/http"); const fs = require("fs"); const path = require("path"); diff --git a/server/utils/AiProviders/apipie/index.js b/server/utils/AiProviders/apipie/index.js index ae0bb6bdf76..a135e6803e9 100644 --- a/server/utils/AiProviders/apipie/index.js +++ b/server/utils/AiProviders/apipie/index.js @@ -7,7 +7,7 @@ const { } = require("../../helpers/chat/responses"); const fs = require("fs"); const path = require("path"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); const { safeJsonParse } = require("../../http"); const { LLMPerformanceMonitor, diff --git a/server/utils/AiProviders/cometapi/index.js b/server/utils/AiProviders/cometapi/index.js index 7d63e724e20..f10cefc65a4 100644 --- a/server/utils/AiProviders/cometapi/index.js +++ b/server/utils/AiProviders/cometapi/index.js @@ -12,7 +12,7 @@ const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); const { COMETAPI_IGNORE_PATTERNS } = require("./constants"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); const cacheFolder = path.resolve(baseStoragePath, "models/cometapi"); class CometApiLLM { diff --git a/server/utils/AiProviders/dockerModelRunner/index.js b/server/utils/AiProviders/dockerModelRunner/index.js index 1239e235295..c8dcae17ece 100644 --- a/server/utils/AiProviders/dockerModelRunner/index.js +++ b/server/utils/AiProviders/dockerModelRunner/index.js @@ -11,7 +11,7 @@ const { const { OpenAI: OpenAIApi } = require("openai"); const { humanFileSize } = require("../../helpers"); const { safeJsonParse } = require("../../http"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); class DockerModelRunnerLLM { static cacheTime = 1000 * 60 * 60 * 24; // 24 hours diff --git a/server/utils/AiProviders/fireworksAi/index.js b/server/utils/AiProviders/fireworksAi/index.js index e0b7ef6959e..8a9a68dc804 100644 --- a/server/utils/AiProviders/fireworksAi/index.js +++ b/server/utils/AiProviders/fireworksAi/index.js @@ -8,7 +8,7 @@ const { const { handleDefaultStreamResponseV2, } = require("../../helpers/chat/responses"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); const cacheFolder = path.resolve(baseStoragePath, "models/fireworks"); class FireworksAiLLM { diff --git a/server/utils/AiProviders/gemini/index.js b/server/utils/AiProviders/gemini/index.js index 899db233609..c559e3dd353 100644 --- a/server/utils/AiProviders/gemini/index.js +++ b/server/utils/AiProviders/gemini/index.js @@ -11,7 +11,7 @@ const { const { MODEL_MAP } = require("../modelMap"); const { defaultGeminiModels, v1BetaModels } = require("./defaultModels"); const { safeJsonParse } = require("../../http"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); const cacheFolder = path.resolve(baseStoragePath, "models/gemini"); const NO_SYSTEM_PROMPT_MODELS = [ diff --git a/server/utils/AiProviders/giteeai/index.js b/server/utils/AiProviders/giteeai/index.js index 92abf069481..2f9946e393d 100644 --- a/server/utils/AiProviders/giteeai/index.js +++ b/server/utils/AiProviders/giteeai/index.js @@ -11,7 +11,7 @@ const { writeResponseChunk, clientAbortedHandler, } = require("../../helpers/chat/responses"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); const cacheFolder = path.resolve(baseStoragePath, "models/giteeai"); class GiteeAILLM { diff --git a/server/utils/AiProviders/modelMap/index.js b/server/utils/AiProviders/modelMap/index.js index 2bb2bca1076..a3940b50cd3 100644 --- a/server/utils/AiProviders/modelMap/index.js +++ b/server/utils/AiProviders/modelMap/index.js @@ -1,7 +1,7 @@ const path = require("path"); const fs = require("fs"); const LEGACY_MODEL_MAP = require("./legacy"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); class ContextWindowFinder { static instance = null; diff --git a/server/utils/AiProviders/novita/index.js b/server/utils/AiProviders/novita/index.js index bf0262ae086..b621be40c5a 100644 --- a/server/utils/AiProviders/novita/index.js +++ b/server/utils/AiProviders/novita/index.js @@ -11,7 +11,7 @@ const { safeJsonParse } = require("../../http"); const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); const cacheFolder = path.resolve(baseStoragePath, "models/novita"); class NovitaLLM { diff --git a/server/utils/AiProviders/openRouter/index.js b/server/utils/AiProviders/openRouter/index.js index 88276bb3846..1345de6b0da 100644 --- a/server/utils/AiProviders/openRouter/index.js +++ b/server/utils/AiProviders/openRouter/index.js @@ -11,7 +11,7 @@ const { safeJsonParse } = require("../../http"); const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); const cacheFolder = path.resolve(baseStoragePath, "models/openrouter"); class OpenRouterLLM { diff --git a/server/utils/AiProviders/ppio/index.js b/server/utils/AiProviders/ppio/index.js index a18c0eb06a9..a9f2daa88db 100644 --- a/server/utils/AiProviders/ppio/index.js +++ b/server/utils/AiProviders/ppio/index.js @@ -8,7 +8,7 @@ const { safeJsonParse } = require("../../http"); const { LLMPerformanceMonitor, } = require("../../helpers/chat/LLMPerformanceMonitor"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); const cacheFolder = path.resolve(baseStoragePath, "models/ppio"); class PPIOLLM { diff --git a/server/utils/AiProviders/togetherAi/index.js b/server/utils/AiProviders/togetherAi/index.js index 826d2873c6b..f7c41bad1f4 100644 --- a/server/utils/AiProviders/togetherAi/index.js +++ b/server/utils/AiProviders/togetherAi/index.js @@ -8,7 +8,7 @@ const { const fs = require("fs"); const path = require("path"); const { safeJsonParse } = require("../../http"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); const cacheFolder = path.resolve(baseStoragePath, "models/togetherAi"); async function togetherAiModels(apiKey = null) { diff --git a/server/utils/EmbeddingEngines/native/index.js b/server/utils/EmbeddingEngines/native/index.js index 1a1fc009604..09fc9fdb5fc 100644 --- a/server/utils/EmbeddingEngines/native/index.js +++ b/server/utils/EmbeddingEngines/native/index.js @@ -3,7 +3,7 @@ const fs = require("fs"); const { toChunks } = require("../../helpers"); const { v4 } = require("uuid"); const { SUPPORTED_NATIVE_EMBEDDING_MODELS } = require("./constants"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); class NativeEmbedder { static defaultModel = "Xenova/all-MiniLM-L6-v2"; diff --git a/server/utils/EmbeddingRerankers/native/index.js b/server/utils/EmbeddingRerankers/native/index.js index 28688ead9ed..bb6fcca6ad0 100644 --- a/server/utils/EmbeddingRerankers/native/index.js +++ b/server/utils/EmbeddingRerankers/native/index.js @@ -1,6 +1,6 @@ const path = require("path"); const fs = require("fs"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); class NativeEmbeddingReranker { static #model = null; diff --git a/server/utils/MCP/hypervisor/index.js b/server/utils/MCP/hypervisor/index.js index 9db4c5a8af6..986e25034e8 100644 --- a/server/utils/MCP/hypervisor/index.js +++ b/server/utils/MCP/hypervisor/index.js @@ -12,7 +12,7 @@ const { StreamableHTTPClientTransport, } = require("@modelcontextprotocol/sdk/client/streamableHttp.js"); const { patchShellEnvironmentPath } = require("../../helpers/shell"); -const { baseStoragePath } = require("../../files"); +const { baseStoragePath } = require("../../files/paths"); /** * @typedef {'stdio' | 'http' | 'sse'} MCPServerTypes diff --git a/server/utils/agents/imported.js b/server/utils/agents/imported.js index 7a60352c757..6f2042f0b2f 100644 --- a/server/utils/agents/imported.js +++ b/server/utils/agents/imported.js @@ -1,7 +1,7 @@ const fs = require("fs"); const path = require("path"); const { safeJsonParse } = require("../http"); -const { isWithin, normalizePath, baseStoragePath } = require("../files"); +const { isWithin, normalizePath, baseStoragePath } = require("../files/paths"); const { CollectorApi } = require("../collectorApi"); const pluginsPath = path.resolve(baseStoragePath, "plugins/agent-skills"); const sharedWebScraper = new CollectorApi(); diff --git a/server/utils/chats/apiChatHandler.js b/server/utils/chats/apiChatHandler.js index ff9ee101f70..2ab8cbec11e 100644 --- a/server/utils/chats/apiChatHandler.js +++ b/server/utils/chats/apiChatHandler.js @@ -17,7 +17,9 @@ const { Telemetry } = require("../../models/telemetry"); const { CollectorApi } = require("../collectorApi"); const fs = require("fs"); const path = require("path"); -const { hotdirPath, normalizePath, isWithin } = require("../files"); +const { normalizePath, isWithin } = require("../files"); +const { hotdirPath } = require("../files/paths"); + /** * @typedef ResponseObject * @property {string} id - uuid of response diff --git a/server/utils/comKey/index.js b/server/utils/comKey/index.js index b140740d6ed..6a3968c9cdf 100644 --- a/server/utils/comKey/index.js +++ b/server/utils/comKey/index.js @@ -1,7 +1,7 @@ const crypto = require("crypto"); const fs = require("fs"); const path = require("path"); -const { baseStoragePath } = require("../files"); +const { baseStoragePath } = require("../files/paths"); const keyPath = path.resolve(baseStoragePath, "comkey"); // What does this class do? diff --git a/server/utils/files/index.js b/server/utils/files/index.js index dc82ff80333..9cd2daee375 100644 --- a/server/utils/files/index.js +++ b/server/utils/files/index.js @@ -3,45 +3,7 @@ const path = require("path"); const { v5: uuidv5 } = require("uuid"); const { Document } = require("../../models/documents"); const { DocumentSyncQueue } = require("../../models/documentSyncQueue"); - -/** - * The base storage path for the server. - * In development points to a storage folder in the server directory - not the main storage directory. - */ -const baseStoragePath = ["development", "test"].includes(process.env.NODE_ENV) - ? path.resolve(__dirname, `../../storage`) - : path.resolve(process.env.STORAGE_DIR); - -/** - * The folder where documents are stored to be stored when - * processed by the server. (Documents) - */ -const documentsPath = path.resolve(baseStoragePath, `documents`); - -/** - * The folder where direct uploads are stored to be stored when - * processed by the server. (WorkspaceParsedFiles) - */ -const directUploadsPath = path.resolve(baseStoragePath, `direct-uploads`); - -/** - * The folder where vector cache is stored to be stored when - * processed by the server embedder. - */ -const vectorCachePath = path.resolve(baseStoragePath, `vector-cache`); - -/** - * The folder where files are watched for and processed by the collector. - * In development points to a storage folder in the collector directory - not the main storage directory. - * - * Since collector and server do not share resources, we copy the exact same path - * here so server and collector can use the same path for the hotdir. These constant - * should always be pointing to the same folder as WATCH_DIRECTORY in the collector. - * @typedef {import("../../../collector/utils/files/index.js").WATCH_DIRECTORY} - */ -const hotdirPath = ["development", "test"].includes(process.env.NODE_ENV) - ? path.resolve(__dirname, `../../../collector/storage/hotdir`) - : path.resolve(process.env.STORAGE_DIR, "hotdir"); +const { documentsPath, vectorCachePath } = require("./paths"); // Should take in a folder that is a subfolder of documents // eg: youtube-subject/video-123.json @@ -517,11 +479,7 @@ module.exports = { fileData, normalizePath, isWithin, - baseStoragePath, - documentsPath, - directUploadsPath, hasVectorCachedFiles, purgeEntireVectorCache, getDocumentsByFolder, - hotdirPath, }; diff --git a/server/utils/files/logo.js b/server/utils/files/logo.js index 458fccd664d..41b10332dce 100644 --- a/server/utils/files/logo.js +++ b/server/utils/files/logo.js @@ -3,7 +3,8 @@ const fs = require("fs"); const { getType } = require("mime"); const { v4 } = require("uuid"); const { SystemSettings } = require("../../models/systemSettings"); -const { normalizePath, isWithin, baseStoragePath } = require("."); +const { normalizePath, isWithin } = require("."); +const { baseStoragePath } = require("./paths"); const LOGO_FILENAME = "anything-llm.png"; const LOGO_FILENAME_DARK = "anything-llm-dark.png"; diff --git a/server/utils/files/multer.js b/server/utils/files/multer.js index 1bb16bac1f0..3ac66e3b6f0 100644 --- a/server/utils/files/multer.js +++ b/server/utils/files/multer.js @@ -2,7 +2,8 @@ const multer = require("multer"); const path = require("path"); const fs = require("fs"); const { v4 } = require("uuid"); -const { hotdirPath, normalizePath, baseStoragePath } = require("."); +const { normalizePath } = require("."); +const { baseStoragePath, hotdirPath } = require("./paths"); /** * Handle File uploads for auto-uploading. diff --git a/server/utils/files/paths.js b/server/utils/files/paths.js new file mode 100644 index 00000000000..f43285fdbf6 --- /dev/null +++ b/server/utils/files/paths.js @@ -0,0 +1,55 @@ +const path = require("path"); + +/** + * The base storage path for the server. + * In development points to a storage folder in the server directory - not the main storage directory. + * + * NOTE: This module is intentionally dependency-free to avoid circular dependency issues. + * Do not add imports from other application modules here. + */ +const baseStoragePath = + ["development", "test"].includes(process.env.NODE_ENV) || + !process.env.STORAGE_DIR + ? path.resolve(__dirname, `../../storage`) + : path.resolve(process.env.STORAGE_DIR); + +/** + * The folder where documents are stored to be stored when + * processed by the server. (Documents) + */ +const documentsPath = path.resolve(baseStoragePath, `documents`); + +/** + * The folder where direct uploads are stored to be stored when + * processed by the server. (WorkspaceParsedFiles) + */ +const directUploadsPath = path.resolve(baseStoragePath, `direct-uploads`); + +/** + * The folder where vector cache is stored to be stored when + * processed by the server embedder. + */ +const vectorCachePath = path.resolve(baseStoragePath, `vector-cache`); + +/** + * The folder where files are watched for and processed by the collector. + * In development points to a storage folder in the collector directory - not the main storage directory. + * + * Since collector and server do not share resources, we copy the exact same path + * here so server and collector can use the same path for the hotdir. These constant + * should always be pointing to the same folder as WATCH_DIRECTORY in the collector. + * @typedef {import("../../../collector/utils/files/index.js").WATCH_DIRECTORY} + */ +const hotdirPath = + ["development", "test"].includes(process.env.NODE_ENV) || + !process.env.STORAGE_DIR + ? path.resolve(__dirname, `../../../collector/storage/hotdir`) + : path.resolve(process.env.STORAGE_DIR, "hotdir"); + +module.exports = { + baseStoragePath, + documentsPath, + directUploadsPath, + vectorCachePath, + hotdirPath, +}; diff --git a/server/utils/files/pfp.js b/server/utils/files/pfp.js index 0f1d5fa9b71..940f5e3ea94 100644 --- a/server/utils/files/pfp.js +++ b/server/utils/files/pfp.js @@ -2,7 +2,8 @@ const path = require("path"); const fs = require("fs"); const { getType } = require("mime"); const { User } = require("../../models/user"); -const { normalizePath, isWithin, baseStoragePath } = require("."); +const { normalizePath, isWithin } = require("."); +const { baseStoragePath } = require("./paths"); const { Workspace } = require("../../models/workspace"); function fetchPfp(pfpPath) { diff --git a/server/utils/files/purgeDocument.js b/server/utils/files/purgeDocument.js index 2ef74a91456..ac9f97ac08a 100644 --- a/server/utils/files/purgeDocument.js +++ b/server/utils/files/purgeDocument.js @@ -5,8 +5,8 @@ const { purgeSourceDocument, normalizePath, isWithin, - documentsPath, } = require("."); +const { documentsPath } = require("./paths"); const { Document } = require("../../models/documents"); const { Workspace } = require("../../models/workspace"); From 801ee39fd9d68983b7746ecc1f0cf9d4b8cdb9fe Mon Sep 17 00:00:00 2001 From: Timothy Carambat Date: Fri, 13 Mar 2026 11:22:52 -0700 Subject: [PATCH 6/7] fix stupid job --- .github/workflows/check-package-versions.yaml | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/.github/workflows/check-package-versions.yaml b/.github/workflows/check-package-versions.yaml index a7435824d56..49c39fc6483 100644 --- a/.github/workflows/check-package-versions.yaml +++ b/.github/workflows/check-package-versions.yaml @@ -10,17 +10,29 @@ concurrency: on: pull_request: types: [opened, synchronize, reopened] - paths: - - "server/package.json" - - "collector/package.json" jobs: - run-script: + check-changes: runs-on: ubuntu-latest + outputs: + packages_changed: ${{ steps.filter.outputs.packages }} + steps: + - uses: actions/checkout@v4 + - uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + packages: + - 'server/package.json' + - 'collector/package.json' + verify-versions: + needs: check-changes + if: needs.check-changes.outputs.packages_changed == 'true' + runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v3 @@ -32,6 +44,15 @@ jobs: cd extras/scripts node verifyPackageVersions.mjs - - name: Fail job on error - if: failure() - run: exit 1 + check-result: + if: always() + needs: [check-changes, verify-versions] + runs-on: ubuntu-latest + steps: + - name: Determine result + run: | + if [ "${{ needs.verify-versions.result }}" == "failure" ]; then + echo "Version check failed" + exit 1 + fi + echo "Check passed (or skipped - no package changes)" From 570974dc6ad4e74721fe32e223fc55aa333a01b9 Mon Sep 17 00:00:00 2001 From: Timothy Carambat Date: Fri, 13 Mar 2026 11:26:07 -0700 Subject: [PATCH 7/7] fix stupid job --- .github/workflows/check-package-versions.yaml | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/.github/workflows/check-package-versions.yaml b/.github/workflows/check-package-versions.yaml index 49c39fc6483..4544df45986 100644 --- a/.github/workflows/check-package-versions.yaml +++ b/.github/workflows/check-package-versions.yaml @@ -12,12 +12,11 @@ on: types: [opened, synchronize, reopened] jobs: - check-changes: + run-script: runs-on: ubuntu-latest - outputs: - packages_changed: ${{ steps.filter.outputs.packages }} steps: - uses: actions/checkout@v4 + - uses: dorny/paths-filter@v3 id: filter with: @@ -26,33 +25,18 @@ jobs: - 'server/package.json' - 'collector/package.json' - verify-versions: - needs: check-changes - if: needs.check-changes.outputs.packages_changed == 'true' - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Set up Node.js + if: steps.filter.outputs.packages == 'true' uses: actions/setup-node@v3 with: node-version: '18' - name: Run verifyPackageVersions.mjs script + if: steps.filter.outputs.packages == 'true' run: | cd extras/scripts node verifyPackageVersions.mjs - check-result: - if: always() - needs: [check-changes, verify-versions] - runs-on: ubuntu-latest - steps: - - name: Determine result - run: | - if [ "${{ needs.verify-versions.result }}" == "failure" ]; then - echo "Version check failed" - exit 1 - fi - echo "Check passed (or skipped - no package changes)" + - name: Skip message + if: steps.filter.outputs.packages != 'true' + run: echo "No package.json changes detected, skipping version check"