@creeperhost/modlens-mcp 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +938 -0
- package/dist/access-flags.d.ts +58 -0
- package/dist/access-flags.d.ts.map +1 -0
- package/dist/access-flags.js +79 -0
- package/dist/access-flags.js.map +1 -0
- package/dist/access-flags.test.d.ts +2 -0
- package/dist/access-flags.test.d.ts.map +1 -0
- package/dist/access-flags.test.js +189 -0
- package/dist/access-flags.test.js.map +1 -0
- package/dist/batch-ingest.d.ts +2 -0
- package/dist/batch-ingest.d.ts.map +1 -0
- package/dist/batch-ingest.js +54 -0
- package/dist/batch-ingest.js.map +1 -0
- package/dist/batch-resolve-mixins.d.ts +2 -0
- package/dist/batch-resolve-mixins.d.ts.map +1 -0
- package/dist/batch-resolve-mixins.js +36 -0
- package/dist/batch-resolve-mixins.js.map +1 -0
- package/dist/cache.d.ts +16 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +36 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1318 -0
- package/dist/cli.js.map +1 -0
- package/dist/curseforge.d.ts +53 -0
- package/dist/curseforge.d.ts.map +1 -0
- package/dist/curseforge.js +104 -0
- package/dist/curseforge.js.map +1 -0
- package/dist/db-backend.d.ts +17 -0
- package/dist/db-backend.d.ts.map +1 -0
- package/dist/db-backend.js +40 -0
- package/dist/db-backend.js.map +1 -0
- package/dist/db.d.ts +11 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +55 -0
- package/dist/db.js.map +1 -0
- package/dist/embed-queue.d.ts +12 -0
- package/dist/embed-queue.d.ts.map +1 -0
- package/dist/embed-queue.js +103 -0
- package/dist/embed-queue.js.map +1 -0
- package/dist/embeddings.d.ts +21 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +55 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/env-path.d.ts +19 -0
- package/dist/env-path.d.ts.map +1 -0
- package/dist/env-path.js +40 -0
- package/dist/env-path.js.map +1 -0
- package/dist/fetch-utils.d.ts +24 -0
- package/dist/fetch-utils.d.ts.map +1 -0
- package/dist/fetch-utils.js +73 -0
- package/dist/fetch-utils.js.map +1 -0
- package/dist/fetch-utils.test.d.ts +2 -0
- package/dist/fetch-utils.test.d.ts.map +1 -0
- package/dist/fetch-utils.test.js +133 -0
- package/dist/fetch-utils.test.js.map +1 -0
- package/dist/generated/sqlite/browser.d.ts +55 -0
- package/dist/generated/sqlite/browser.d.ts.map +1 -0
- package/dist/generated/sqlite/browser.js +18 -0
- package/dist/generated/sqlite/browser.js.map +1 -0
- package/dist/generated/sqlite/client.d.ts +72 -0
- package/dist/generated/sqlite/client.d.ts.map +1 -0
- package/dist/generated/sqlite/client.js +33 -0
- package/dist/generated/sqlite/client.js.map +1 -0
- package/dist/generated/sqlite/commonInputTypes.d.ts +387 -0
- package/dist/generated/sqlite/commonInputTypes.d.ts.map +1 -0
- package/dist/generated/sqlite/commonInputTypes.js +11 -0
- package/dist/generated/sqlite/commonInputTypes.js.map +1 -0
- package/dist/generated/sqlite/enums.d.ts +2 -0
- package/dist/generated/sqlite/enums.d.ts.map +1 -0
- package/dist/generated/sqlite/enums.js +11 -0
- package/dist/generated/sqlite/enums.js.map +1 -0
- package/dist/generated/sqlite/internal/class.d.ts +226 -0
- package/dist/generated/sqlite/internal/class.d.ts.map +1 -0
- package/dist/generated/sqlite/internal/class.js +84 -0
- package/dist/generated/sqlite/internal/class.js.map +1 -0
- package/dist/generated/sqlite/internal/prismaNamespace.d.ts +1344 -0
- package/dist/generated/sqlite/internal/prismaNamespace.d.ts.map +1 -0
- package/dist/generated/sqlite/internal/prismaNamespace.js +220 -0
- package/dist/generated/sqlite/internal/prismaNamespace.js.map +1 -0
- package/dist/generated/sqlite/internal/prismaNamespaceBrowser.d.ts +204 -0
- package/dist/generated/sqlite/internal/prismaNamespaceBrowser.d.ts.map +1 -0
- package/dist/generated/sqlite/internal/prismaNamespaceBrowser.js +191 -0
- package/dist/generated/sqlite/internal/prismaNamespaceBrowser.js.map +1 -0
- package/dist/generated/sqlite/models/DocEntry.d.ts +1223 -0
- package/dist/generated/sqlite/models/DocEntry.d.ts.map +1 -0
- package/dist/generated/sqlite/models/DocEntry.js +2 -0
- package/dist/generated/sqlite/models/DocEntry.js.map +1 -0
- package/dist/generated/sqlite/models/McSourceFile.d.ts +1289 -0
- package/dist/generated/sqlite/models/McSourceFile.d.ts.map +1 -0
- package/dist/generated/sqlite/models/McSourceFile.js +2 -0
- package/dist/generated/sqlite/models/McSourceFile.js.map +1 -0
- package/dist/generated/sqlite/models/McVersion.d.ts +1315 -0
- package/dist/generated/sqlite/models/McVersion.d.ts.map +1 -0
- package/dist/generated/sqlite/models/McVersion.js +2 -0
- package/dist/generated/sqlite/models/McVersion.js.map +1 -0
- package/dist/generated/sqlite/models/McVersionDiff.d.ts +1061 -0
- package/dist/generated/sqlite/models/McVersionDiff.d.ts.map +1 -0
- package/dist/generated/sqlite/models/McVersionDiff.js +2 -0
- package/dist/generated/sqlite/models/McVersionDiff.js.map +1 -0
- package/dist/generated/sqlite/models/Mod.d.ts +2396 -0
- package/dist/generated/sqlite/models/Mod.d.ts.map +1 -0
- package/dist/generated/sqlite/models/Mod.js +2 -0
- package/dist/generated/sqlite/models/Mod.js.map +1 -0
- package/dist/generated/sqlite/models/ModClass.d.ts +1254 -0
- package/dist/generated/sqlite/models/ModClass.d.ts.map +1 -0
- package/dist/generated/sqlite/models/ModClass.js +2 -0
- package/dist/generated/sqlite/models/ModClass.js.map +1 -0
- package/dist/generated/sqlite/models/ModSourceFile.d.ts +1283 -0
- package/dist/generated/sqlite/models/ModSourceFile.d.ts.map +1 -0
- package/dist/generated/sqlite/models/ModSourceFile.js +2 -0
- package/dist/generated/sqlite/models/ModSourceFile.js.map +1 -0
- package/dist/generated/sqlite/models/ModTag.d.ts +1278 -0
- package/dist/generated/sqlite/models/ModTag.d.ts.map +1 -0
- package/dist/generated/sqlite/models/ModTag.js +2 -0
- package/dist/generated/sqlite/models/ModTag.js.map +1 -0
- package/dist/generated/sqlite/models/ModVersionDiff.d.ts +1073 -0
- package/dist/generated/sqlite/models/ModVersionDiff.d.ts.map +1 -0
- package/dist/generated/sqlite/models/ModVersionDiff.js +2 -0
- package/dist/generated/sqlite/models/ModVersionDiff.js.map +1 -0
- package/dist/generated/sqlite/models/Primer.d.ts +1319 -0
- package/dist/generated/sqlite/models/Primer.d.ts.map +1 -0
- package/dist/generated/sqlite/models/Primer.js +2 -0
- package/dist/generated/sqlite/models/Primer.js.map +1 -0
- package/dist/generated/sqlite/models.d.ts +12 -0
- package/dist/generated/sqlite/models.d.ts.map +1 -0
- package/dist/generated/sqlite/models.js +2 -0
- package/dist/generated/sqlite/models.js.map +1 -0
- package/dist/jar.d.ts +7 -0
- package/dist/jar.d.ts.map +1 -0
- package/dist/jar.js +52 -0
- package/dist/jar.js.map +1 -0
- package/dist/java-tools.d.ts +46 -0
- package/dist/java-tools.d.ts.map +1 -0
- package/dist/java-tools.js +263 -0
- package/dist/java-tools.js.map +1 -0
- package/dist/launcher.d.ts +3 -0
- package/dist/launcher.d.ts.map +1 -0
- package/dist/launcher.js +105 -0
- package/dist/launcher.js.map +1 -0
- package/dist/mappings.d.ts +95 -0
- package/dist/mappings.d.ts.map +1 -0
- package/dist/mappings.js +1094 -0
- package/dist/mappings.js.map +1 -0
- package/dist/mappings.test.d.ts +2 -0
- package/dist/mappings.test.d.ts.map +1 -0
- package/dist/mappings.test.js +161 -0
- package/dist/mappings.test.js.map +1 -0
- package/dist/minecraft.d.ts +21 -0
- package/dist/minecraft.d.ts.map +1 -0
- package/dist/minecraft.js +70 -0
- package/dist/minecraft.js.map +1 -0
- package/dist/modpacks-ch.d.ts +224 -0
- package/dist/modpacks-ch.d.ts.map +1 -0
- package/dist/modpacks-ch.js +146 -0
- package/dist/modpacks-ch.js.map +1 -0
- package/dist/modrinth.d.ts +67 -0
- package/dist/modrinth.d.ts.map +1 -0
- package/dist/modrinth.js +88 -0
- package/dist/modrinth.js.map +1 -0
- package/dist/platform-adapter.d.ts +23 -0
- package/dist/platform-adapter.d.ts.map +1 -0
- package/dist/platform-adapter.js +2 -0
- package/dist/platform-adapter.js.map +1 -0
- package/dist/platform.d.ts +47 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +175 -0
- package/dist/platform.js.map +1 -0
- package/dist/processor.d.ts +51 -0
- package/dist/processor.d.ts.map +1 -0
- package/dist/processor.js +655 -0
- package/dist/processor.js.map +1 -0
- package/dist/processor.test.d.ts +2 -0
- package/dist/processor.test.d.ts.map +1 -0
- package/dist/processor.test.js +629 -0
- package/dist/processor.test.js.map +1 -0
- package/dist/repositories/embeddings-sqlite.d.ts +38 -0
- package/dist/repositories/embeddings-sqlite.d.ts.map +1 -0
- package/dist/repositories/embeddings-sqlite.js +208 -0
- package/dist/repositories/embeddings-sqlite.js.map +1 -0
- package/dist/repositories/embeddings.d.ts +40 -0
- package/dist/repositories/embeddings.d.ts.map +1 -0
- package/dist/repositories/embeddings.js +136 -0
- package/dist/repositories/embeddings.js.map +1 -0
- package/dist/repositories/index.d.ts +2 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +15 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/mcVersion.d.ts +16 -0
- package/dist/repositories/mcVersion.d.ts.map +1 -0
- package/dist/repositories/mcVersion.js +52 -0
- package/dist/repositories/mcVersion.js.map +1 -0
- package/dist/repositories/mod.d.ts +241 -0
- package/dist/repositories/mod.d.ts.map +1 -0
- package/dist/repositories/mod.js +342 -0
- package/dist/repositories/mod.js.map +1 -0
- package/dist/repositories/packs.d.ts +44 -0
- package/dist/repositories/packs.d.ts.map +1 -0
- package/dist/repositories/packs.js +138 -0
- package/dist/repositories/packs.js.map +1 -0
- package/dist/search-adapter.d.ts +34 -0
- package/dist/search-adapter.d.ts.map +1 -0
- package/dist/search-adapter.js +195 -0
- package/dist/search-adapter.js.map +1 -0
- package/dist/search.d.ts +6 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +54 -0
- package/dist/search.js.map +1 -0
- package/dist/search.test.d.ts +2 -0
- package/dist/search.test.d.ts.map +1 -0
- package/dist/search.test.js +71 -0
- package/dist/search.test.js.map +1 -0
- package/dist/security.d.ts +98 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +446 -0
- package/dist/security.js.map +1 -0
- package/dist/security.test.d.ts +2 -0
- package/dist/security.test.d.ts.map +1 -0
- package/dist/security.test.js +687 -0
- package/dist/security.test.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1465 -0
- package/dist/server.js.map +1 -0
- package/dist/setup.d.ts +2 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +1113 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/bytecode.d.ts +129 -0
- package/dist/tools/bytecode.d.ts.map +1 -0
- package/dist/tools/bytecode.js +679 -0
- package/dist/tools/bytecode.js.map +1 -0
- package/dist/tools/catalog.d.ts +54 -0
- package/dist/tools/catalog.d.ts.map +1 -0
- package/dist/tools/catalog.js +249 -0
- package/dist/tools/catalog.js.map +1 -0
- package/dist/tools/compat-check.d.ts +23 -0
- package/dist/tools/compat-check.d.ts.map +1 -0
- package/dist/tools/compat-check.js +250 -0
- package/dist/tools/compat-check.js.map +1 -0
- package/dist/tools/compat-check.test.d.ts +2 -0
- package/dist/tools/compat-check.test.d.ts.map +1 -0
- package/dist/tools/compat-check.test.js +179 -0
- package/dist/tools/compat-check.test.js.map +1 -0
- package/dist/tools/diagnostics.d.ts +10 -0
- package/dist/tools/diagnostics.d.ts.map +1 -0
- package/dist/tools/diagnostics.js +133 -0
- package/dist/tools/diagnostics.js.map +1 -0
- package/dist/tools/diagnostics.test.d.ts +2 -0
- package/dist/tools/diagnostics.test.d.ts.map +1 -0
- package/dist/tools/diagnostics.test.js +168 -0
- package/dist/tools/diagnostics.test.js.map +1 -0
- package/dist/tools/docs.d.ts +19 -0
- package/dist/tools/docs.d.ts.map +1 -0
- package/dist/tools/docs.js +230 -0
- package/dist/tools/docs.js.map +1 -0
- package/dist/tools/embed-registry.d.ts +125 -0
- package/dist/tools/embed-registry.d.ts.map +1 -0
- package/dist/tools/embed-registry.js +560 -0
- package/dist/tools/embed-registry.js.map +1 -0
- package/dist/tools/gradle.d.ts +16 -0
- package/dist/tools/gradle.d.ts.map +1 -0
- package/dist/tools/gradle.js +182 -0
- package/dist/tools/gradle.js.map +1 -0
- package/dist/tools/graphify.d.ts +144 -0
- package/dist/tools/graphify.d.ts.map +1 -0
- package/dist/tools/graphify.js +798 -0
- package/dist/tools/graphify.js.map +1 -0
- package/dist/tools/graphify.test.d.ts +2 -0
- package/dist/tools/graphify.test.d.ts.map +1 -0
- package/dist/tools/graphify.test.js +39 -0
- package/dist/tools/graphify.test.js.map +1 -0
- package/dist/tools/ingest.d.ts +85 -0
- package/dist/tools/ingest.d.ts.map +1 -0
- package/dist/tools/ingest.js +477 -0
- package/dist/tools/ingest.js.map +1 -0
- package/dist/tools/ingest.test.d.ts +2 -0
- package/dist/tools/ingest.test.d.ts.map +1 -0
- package/dist/tools/ingest.test.js +340 -0
- package/dist/tools/ingest.test.js.map +1 -0
- package/dist/tools/kubejs.d.ts +37 -0
- package/dist/tools/kubejs.d.ts.map +1 -0
- package/dist/tools/kubejs.js +245 -0
- package/dist/tools/kubejs.js.map +1 -0
- package/dist/tools/mappings.d.ts +17 -0
- package/dist/tools/mappings.d.ts.map +1 -0
- package/dist/tools/mappings.js +85 -0
- package/dist/tools/mappings.js.map +1 -0
- package/dist/tools/mc-fts.d.ts +101 -0
- package/dist/tools/mc-fts.d.ts.map +1 -0
- package/dist/tools/mc-fts.js +279 -0
- package/dist/tools/mc-fts.js.map +1 -0
- package/dist/tools/mcmeta.d.ts +41 -0
- package/dist/tools/mcmeta.d.ts.map +1 -0
- package/dist/tools/mcmeta.js +365 -0
- package/dist/tools/mcmeta.js.map +1 -0
- package/dist/tools/mixin-scan.d.ts +113 -0
- package/dist/tools/mixin-scan.d.ts.map +1 -0
- package/dist/tools/mixin-scan.js +433 -0
- package/dist/tools/mixin-scan.js.map +1 -0
- package/dist/tools/mod-data.d.ts +83 -0
- package/dist/tools/mod-data.d.ts.map +1 -0
- package/dist/tools/mod-data.js +630 -0
- package/dist/tools/mod-data.js.map +1 -0
- package/dist/tools/mod-tags.d.ts +59 -0
- package/dist/tools/mod-tags.d.ts.map +1 -0
- package/dist/tools/mod-tags.js +279 -0
- package/dist/tools/mod-tags.js.map +1 -0
- package/dist/tools/mod-tags.test.d.ts +2 -0
- package/dist/tools/mod-tags.test.d.ts.map +1 -0
- package/dist/tools/mod-tags.test.js +75 -0
- package/dist/tools/mod-tags.test.js.map +1 -0
- package/dist/tools/modpacks-ch.d.ts +257 -0
- package/dist/tools/modpacks-ch.d.ts.map +1 -0
- package/dist/tools/modpacks-ch.js +516 -0
- package/dist/tools/modpacks-ch.js.map +1 -0
- package/dist/tools/packtools.d.ts +113 -0
- package/dist/tools/packtools.d.ts.map +1 -0
- package/dist/tools/packtools.js +809 -0
- package/dist/tools/packtools.js.map +1 -0
- package/dist/tools/packtools.test.d.ts +2 -0
- package/dist/tools/packtools.test.d.ts.map +1 -0
- package/dist/tools/packtools.test.js +99 -0
- package/dist/tools/packtools.test.js.map +1 -0
- package/dist/tools/platform.d.ts +68 -0
- package/dist/tools/platform.d.ts.map +1 -0
- package/dist/tools/platform.js +452 -0
- package/dist/tools/platform.js.map +1 -0
- package/dist/tools/primers.d.ts +36 -0
- package/dist/tools/primers.d.ts.map +1 -0
- package/dist/tools/primers.js +451 -0
- package/dist/tools/primers.js.map +1 -0
- package/dist/tools/reports.d.ts +19 -0
- package/dist/tools/reports.d.ts.map +1 -0
- package/dist/tools/reports.js +573 -0
- package/dist/tools/reports.js.map +1 -0
- package/dist/tools/source.d.ts +10 -0
- package/dist/tools/source.d.ts.map +1 -0
- package/dist/tools/source.js +101 -0
- package/dist/tools/source.js.map +1 -0
- package/dist/tools/vanilla-data.d.ts +127 -0
- package/dist/tools/vanilla-data.d.ts.map +1 -0
- package/dist/tools/vanilla-data.js +824 -0
- package/dist/tools/vanilla-data.js.map +1 -0
- package/dist/tools/vanilla.d.ts +171 -0
- package/dist/tools/vanilla.d.ts.map +1 -0
- package/dist/tools/vanilla.js +612 -0
- package/dist/tools/vanilla.js.map +1 -0
- package/dist/tools/version-diff.d.ts +113 -0
- package/dist/tools/version-diff.d.ts.map +1 -0
- package/dist/tools/version-diff.js +519 -0
- package/dist/tools/version-diff.js.map +1 -0
- package/dist/tools/version-diff.test.d.ts +2 -0
- package/dist/tools/version-diff.test.d.ts.map +1 -0
- package/dist/tools/version-diff.test.js +102 -0
- package/dist/tools/version-diff.test.js.map +1 -0
- package/dist/validate.d.ts +19 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +54 -0
- package/dist/validate.js.map +1 -0
- package/dist/validate.test.d.ts +2 -0
- package/dist/validate.test.d.ts.map +1 -0
- package/dist/validate.test.js +73 -0
- package/dist/validate.test.js.map +1 -0
- package/package.json +62 -0
- package/prisma/backends/schema.sqlite.prisma +215 -0
- package/prisma/backends/template.db +0 -0
- package/prisma/schema.prisma +303 -0
- package/scripts/backup.mjs +151 -0
- package/scripts/build-template-db.mjs +38 -0
- package/scripts/check-atm10.mjs +27 -0
- package/scripts/check-sync.mjs +13 -0
- package/scripts/create-fts-index.mjs +50 -0
- package/scripts/enable-pgvector.mjs +90 -0
- package/scripts/enable-sqlite-vec.mjs +158 -0
- package/scripts/migrate-backend.mjs +188 -0
- package/scripts/migrate-embed-provenance.mjs +80 -0
- package/scripts/migrate-metadata-source.mjs +62 -0
- package/scripts/migrate-mod-source-files.mjs +67 -0
- package/scripts/post-update.mjs +77 -0
- package/scripts/verify-atm10.mjs +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,UAAU,GAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAW,wBAAwB,CAAC;AACpF,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,kBAAkB,CAAC;AAE/E,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY;IACpC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,EAAE,iBAAiB,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAC/D,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IACzD,OAAO,IAAI,CAAC,SAAS,CAAC;AAC1B,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACnC,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,EAAE,WAAW,EAAE;YAChD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SACpC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,QAAQ,GAAG,IAAI,EAAE,OAAO,GAAG,GAAG;IAClE,IAAI,QAAQ,IAAI,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,mCAAmC,OAAO,GAAG,CAAC,CAAC;IACxH,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;QACjD,KAAK,IAAI,QAAQ,GAAG,OAAO,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Absolute path to the package root (where package.json lives). */
|
|
2
|
+
export declare const PKG_ROOT: string;
|
|
3
|
+
/**
|
|
4
|
+
* True when running as an npx / globally-installed package (no `.git` at root).
|
|
5
|
+
* False for git-clone / development installs.
|
|
6
|
+
*/
|
|
7
|
+
export declare const IS_INSTALLED: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Directory that owns persistent user data (`.env`, DB, version sentinel).
|
|
10
|
+
*
|
|
11
|
+
* - Installed: `~/.modlens/`
|
|
12
|
+
* - Git clone: the project root (unchanged behaviour)
|
|
13
|
+
*/
|
|
14
|
+
export declare const MODLENS_HOME: string;
|
|
15
|
+
/** Absolute path to the `.env` file that setup reads/writes and server loads. */
|
|
16
|
+
export declare const ENV_PATH: string;
|
|
17
|
+
/** Ensure MODLENS_HOME exists (safe to call multiple times). */
|
|
18
|
+
export declare function ensureModlensHome(): void;
|
|
19
|
+
//# sourceMappingURL=env-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-path.d.ts","sourceRoot":"","sources":["../src/env-path.ts"],"names":[],"mappings":"AAkBA,oEAAoE;AACpE,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,YAAY,SAAsC,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,MAEgC,CAAC;AAE5D,iFAAiF;AACjF,eAAO,MAAM,QAAQ,QAEO,CAAC;AAE7B,gEAAgE;AAChE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
package/dist/env-path.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves MODLENS_HOME and ENV_PATH depending on how the tool was installed.
|
|
3
|
+
*
|
|
4
|
+
* - **npx / global install**: no `.git` at the package root → user data lives
|
|
5
|
+
* in `~/.modlens/` so it survives package cache evictions between updates.
|
|
6
|
+
* - **git clone**: `.git` exists → keep existing behaviour (`.env` at project
|
|
7
|
+
* root, no MODLENS_HOME needed).
|
|
8
|
+
*
|
|
9
|
+
* Import this module wherever you need ENV_PATH or MODLENS_HOME instead of
|
|
10
|
+
* hard-coding paths relative to `__dirname`.
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, mkdirSync } from "fs";
|
|
13
|
+
import { homedir } from "os";
|
|
14
|
+
import { join, dirname } from "path";
|
|
15
|
+
import { fileURLToPath } from "url";
|
|
16
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
|
+
/** Absolute path to the package root (where package.json lives). */
|
|
18
|
+
export const PKG_ROOT = join(__dirname, "..");
|
|
19
|
+
/**
|
|
20
|
+
* True when running as an npx / globally-installed package (no `.git` at root).
|
|
21
|
+
* False for git-clone / development installs.
|
|
22
|
+
*/
|
|
23
|
+
export const IS_INSTALLED = !existsSync(join(PKG_ROOT, ".git"));
|
|
24
|
+
/**
|
|
25
|
+
* Directory that owns persistent user data (`.env`, DB, version sentinel).
|
|
26
|
+
*
|
|
27
|
+
* - Installed: `~/.modlens/`
|
|
28
|
+
* - Git clone: the project root (unchanged behaviour)
|
|
29
|
+
*/
|
|
30
|
+
export const MODLENS_HOME = process.env.MODLENS_HOME ??
|
|
31
|
+
(IS_INSTALLED ? join(homedir(), ".modlens") : PKG_ROOT);
|
|
32
|
+
/** Absolute path to the `.env` file that setup reads/writes and server loads. */
|
|
33
|
+
export const ENV_PATH = IS_INSTALLED
|
|
34
|
+
? join(MODLENS_HOME, ".env")
|
|
35
|
+
: join(PKG_ROOT, ".env");
|
|
36
|
+
/** Ensure MODLENS_HOME exists (safe to call multiple times). */
|
|
37
|
+
export function ensureModlensHome() {
|
|
38
|
+
mkdirSync(MODLENS_HOME, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=env-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-path.js","sourceRoot":"","sources":["../src/env-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,oEAAoE;AACpE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GACrB,OAAO,CAAC,GAAG,CAAC,YAAY;IACxB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE5D,iFAAiF;AACjF,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY;IAChC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;IAC5B,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE7B,gEAAgE;AAChE,MAAM,UAAU,iBAAiB;IAC7B,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilient fetch with automatic retry, exponential backoff, and timeout.
|
|
3
|
+
* - Retries transient failures (5xx, network errors) up to `retries` times.
|
|
4
|
+
* - Retries 429 (rate-limited) with exponential backoff, honouring Retry-After.
|
|
5
|
+
* - Never retries other 4xx responses (caller decides how to handle them).
|
|
6
|
+
* - Aborts the request if `timeoutMs` elapses without a response.
|
|
7
|
+
*/
|
|
8
|
+
export interface FetchRetryOptions {
|
|
9
|
+
/** Max retry attempts after the first try (default: 3). */
|
|
10
|
+
retries?: number;
|
|
11
|
+
/** Abort timeout per attempt in ms (default: 10 000). */
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
/** Base backoff in ms; doubles each retry (default: 500). */
|
|
14
|
+
backoffMs?: number;
|
|
15
|
+
}
|
|
16
|
+
/** Suitable for large JAR downloads where the transfer itself takes time. */
|
|
17
|
+
export declare const DOWNLOAD_OPTS: FetchRetryOptions;
|
|
18
|
+
export declare function fetchWithRetry(url: string, init?: RequestInit, opts?: FetchRetryOptions): Promise<Response>;
|
|
19
|
+
/**
|
|
20
|
+
* Safely parse a Response body as JSON, with a clear error message
|
|
21
|
+
* when the body is not valid JSON (e.g. HTML error pages).
|
|
22
|
+
*/
|
|
23
|
+
export declare function safeJson<T>(res: Response, label: string): Promise<T>;
|
|
24
|
+
//# sourceMappingURL=fetch-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-utils.d.ts","sourceRoot":"","sources":["../src/fetch-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,iBAAiB;IAC9B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,6EAA6E;AAC7E,eAAO,MAAM,aAAa,EAAE,iBAAsD,CAAC;AAEnF,wBAAsB,cAAc,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE,iBAAiB,GACzB,OAAO,CAAC,QAAQ,CAAC,CAsDnB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAO1E"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilient fetch with automatic retry, exponential backoff, and timeout.
|
|
3
|
+
* - Retries transient failures (5xx, network errors) up to `retries` times.
|
|
4
|
+
* - Retries 429 (rate-limited) with exponential backoff, honouring Retry-After.
|
|
5
|
+
* - Never retries other 4xx responses (caller decides how to handle them).
|
|
6
|
+
* - Aborts the request if `timeoutMs` elapses without a response.
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
9
|
+
const MAX_RETRIES = 3;
|
|
10
|
+
const BASE_BACKOFF_MS = 500;
|
|
11
|
+
/** Suitable for large JAR downloads where the transfer itself takes time. */
|
|
12
|
+
export const DOWNLOAD_OPTS = { timeoutMs: 120_000, retries: 2 };
|
|
13
|
+
export async function fetchWithRetry(url, init, opts) {
|
|
14
|
+
const retries = opts?.retries ?? MAX_RETRIES;
|
|
15
|
+
const timeoutMs = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
16
|
+
const backoffMs = opts?.backoffMs ?? BASE_BACKOFF_MS;
|
|
17
|
+
let lastError;
|
|
18
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
19
|
+
if (attempt > 0) {
|
|
20
|
+
await new Promise((resolve) => setTimeout(resolve, backoffMs * 2 ** (attempt - 1)));
|
|
21
|
+
}
|
|
22
|
+
const controller = new AbortController();
|
|
23
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
24
|
+
try {
|
|
25
|
+
const res = await fetch(url, { ...init, signal: controller.signal });
|
|
26
|
+
clearTimeout(timer);
|
|
27
|
+
// 429 = rate-limited — honour Retry-After then retry with backoff
|
|
28
|
+
if (res.status === 429 && attempt < retries) {
|
|
29
|
+
const retryAfter = res.headers.get("Retry-After");
|
|
30
|
+
const waitMs = retryAfter
|
|
31
|
+
? (isNaN(Number(retryAfter))
|
|
32
|
+
? Math.max(0, new Date(retryAfter).getTime() - Date.now())
|
|
33
|
+
: Number(retryAfter) * 1000)
|
|
34
|
+
: backoffMs * 2 ** attempt;
|
|
35
|
+
lastError = new Error(`HTTP 429 from ${url}`);
|
|
36
|
+
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
// Other 4xx = client error — caller handles, no retry
|
|
40
|
+
if (res.status >= 400 && res.status < 500)
|
|
41
|
+
return res;
|
|
42
|
+
// 5xx = transient server error — retry if we have attempts left
|
|
43
|
+
if (!res.ok && attempt < retries) {
|
|
44
|
+
lastError = new Error(`HTTP ${res.status} from ${url}`);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
return res;
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
clearTimeout(timer);
|
|
51
|
+
lastError = err;
|
|
52
|
+
if (attempt >= retries)
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
throw lastError instanceof Error
|
|
57
|
+
? lastError
|
|
58
|
+
: new Error(`fetch failed: ${String(lastError)}`);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Safely parse a Response body as JSON, with a clear error message
|
|
62
|
+
* when the body is not valid JSON (e.g. HTML error pages).
|
|
63
|
+
*/
|
|
64
|
+
export async function safeJson(res, label) {
|
|
65
|
+
const text = await res.text();
|
|
66
|
+
try {
|
|
67
|
+
return JSON.parse(text);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
throw new Error(`${label}: expected JSON but got: ${text.slice(0, 200)}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=fetch-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-utils.js","sourceRoot":"","sources":["../src/fetch-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-utils.test.d.ts","sourceRoot":"","sources":["../src/fetch-utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { fetchWithRetry, DOWNLOAD_OPTS, safeJson } from "./fetch-utils.js";
|
|
3
|
+
function mockFetch(...responses) {
|
|
4
|
+
let call = 0;
|
|
5
|
+
return vi.fn().mockImplementation(() => {
|
|
6
|
+
const r = responses[Math.min(call++, responses.length - 1)];
|
|
7
|
+
return Promise.resolve({
|
|
8
|
+
ok: r.ok,
|
|
9
|
+
status: r.status,
|
|
10
|
+
text: async () => r.body ?? "",
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
vi.useFakeTimers();
|
|
16
|
+
});
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
vi.useRealTimers();
|
|
19
|
+
vi.unstubAllGlobals();
|
|
20
|
+
});
|
|
21
|
+
// ── Happy path ────────────────────────────────────────────────────────────────
|
|
22
|
+
describe("fetchWithRetry — happy path", () => {
|
|
23
|
+
it("returns a 200 response immediately", async () => {
|
|
24
|
+
vi.stubGlobal("fetch", mockFetch({ status: 200, ok: true }));
|
|
25
|
+
const res = await fetchWithRetry("https://example.com/api");
|
|
26
|
+
expect(res.status).toBe(200);
|
|
27
|
+
expect(fetch.mock.calls).toHaveLength(1);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
// ── 4xx pass-through (no retry) ───────────────────────────────────────────────
|
|
31
|
+
describe("fetchWithRetry — 4xx pass-through (no retry)", () => {
|
|
32
|
+
it("returns 404 without retrying", async () => {
|
|
33
|
+
const fakeFetch = mockFetch({ status: 404, ok: false });
|
|
34
|
+
vi.stubGlobal("fetch", fakeFetch);
|
|
35
|
+
const res = await fetchWithRetry("https://example.com/api");
|
|
36
|
+
expect(res.status).toBe(404);
|
|
37
|
+
expect(fakeFetch.mock.calls).toHaveLength(1);
|
|
38
|
+
});
|
|
39
|
+
it("returns 401 without retrying", async () => {
|
|
40
|
+
const fakeFetch = mockFetch({ status: 401, ok: false });
|
|
41
|
+
vi.stubGlobal("fetch", fakeFetch);
|
|
42
|
+
const res = await fetchWithRetry("https://example.com/api");
|
|
43
|
+
expect(res.status).toBe(401);
|
|
44
|
+
expect(fakeFetch.mock.calls).toHaveLength(1);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
// ── 5xx retry ────────────────────────────────────────────────────────────────
|
|
48
|
+
describe("fetchWithRetry — 5xx retry", () => {
|
|
49
|
+
it("retries up to MAX_RETRIES times on 5xx then returns last response", async () => {
|
|
50
|
+
const fakeFetch = mockFetch({ status: 503, ok: false }, { status: 503, ok: false }, { status: 503, ok: false }, { status: 200, ok: true });
|
|
51
|
+
vi.stubGlobal("fetch", fakeFetch);
|
|
52
|
+
const promise = fetchWithRetry("https://example.com/api", undefined, { retries: 3, backoffMs: 100 });
|
|
53
|
+
await vi.runAllTimersAsync();
|
|
54
|
+
const res = await promise;
|
|
55
|
+
expect(res.status).toBe(200);
|
|
56
|
+
expect(fakeFetch.mock.calls).toHaveLength(4);
|
|
57
|
+
});
|
|
58
|
+
it("returns last 5xx response after all retries exhausted", async () => {
|
|
59
|
+
const fakeFetch = mockFetch({ status: 503, ok: false }, { status: 503, ok: false }, { status: 503, ok: false }, { status: 503, ok: false });
|
|
60
|
+
vi.stubGlobal("fetch", fakeFetch);
|
|
61
|
+
const promise = fetchWithRetry("https://example.com/api", undefined, { retries: 3, backoffMs: 100 });
|
|
62
|
+
await vi.runAllTimersAsync();
|
|
63
|
+
const res = await promise;
|
|
64
|
+
expect(res.status).toBe(503);
|
|
65
|
+
expect(fakeFetch.mock.calls).toHaveLength(4);
|
|
66
|
+
});
|
|
67
|
+
it("succeeds on second attempt after one 5xx", async () => {
|
|
68
|
+
const fakeFetch = mockFetch({ status: 500, ok: false }, { status: 200, ok: true });
|
|
69
|
+
vi.stubGlobal("fetch", fakeFetch);
|
|
70
|
+
const promise = fetchWithRetry("https://example.com/api", undefined, { retries: 2, backoffMs: 10 });
|
|
71
|
+
await vi.runAllTimersAsync();
|
|
72
|
+
const res = await promise;
|
|
73
|
+
expect(res.status).toBe(200);
|
|
74
|
+
expect(fakeFetch.mock.calls).toHaveLength(2);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
// ── Network error retry ───────────────────────────────────────────────────────
|
|
78
|
+
describe("fetchWithRetry — network errors", () => {
|
|
79
|
+
it("retries on network error (fetch rejects)", async () => {
|
|
80
|
+
let call = 0;
|
|
81
|
+
const fakeFetch = vi.fn().mockImplementation(() => {
|
|
82
|
+
if (++call < 3)
|
|
83
|
+
return Promise.reject(new Error("ECONNREFUSED"));
|
|
84
|
+
return Promise.resolve({ ok: true, status: 200, text: async () => "" });
|
|
85
|
+
});
|
|
86
|
+
vi.stubGlobal("fetch", fakeFetch);
|
|
87
|
+
const promise = fetchWithRetry("https://example.com/api", undefined, { retries: 3, backoffMs: 10 });
|
|
88
|
+
await vi.runAllTimersAsync();
|
|
89
|
+
const res = await promise;
|
|
90
|
+
expect(res.status).toBe(200);
|
|
91
|
+
expect(fakeFetch.mock.calls.length).toBeGreaterThanOrEqual(3);
|
|
92
|
+
});
|
|
93
|
+
it("throws the last network error after all retries exhausted", async () => {
|
|
94
|
+
// retries: 0 avoids backoff timers — single fetch, immediate rejection
|
|
95
|
+
const fakeFetch = vi.fn().mockImplementation(() => Promise.reject(new Error("ECONNREFUSED")));
|
|
96
|
+
vi.stubGlobal("fetch", fakeFetch);
|
|
97
|
+
await expect(fetchWithRetry("https://example.com/api", undefined, { retries: 0 })).rejects.toThrow("ECONNREFUSED");
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
// ── Options ───────────────────────────────────────────────────────────────────
|
|
101
|
+
describe("fetchWithRetry — options", () => {
|
|
102
|
+
it("respects custom retries=0 — returns 5xx without retrying", async () => {
|
|
103
|
+
const fakeFetch = mockFetch({ status: 500, ok: false }, { status: 200, ok: true });
|
|
104
|
+
vi.stubGlobal("fetch", fakeFetch);
|
|
105
|
+
const promise = fetchWithRetry("https://example.com/api", undefined, { retries: 0 });
|
|
106
|
+
await vi.runAllTimersAsync();
|
|
107
|
+
const res = await promise;
|
|
108
|
+
// With retries=0, the 5xx is returned immediately (no second attempt)
|
|
109
|
+
expect(res.status).toBe(500);
|
|
110
|
+
expect(fakeFetch.mock.calls).toHaveLength(1);
|
|
111
|
+
});
|
|
112
|
+
it("DOWNLOAD_OPTS has increased timeout and fewer retries", () => {
|
|
113
|
+
expect(DOWNLOAD_OPTS.timeoutMs).toBeGreaterThan(10_000);
|
|
114
|
+
expect(DOWNLOAD_OPTS.retries).toBeLessThan(4);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
// ── safeJson ──────────────────────────────────────────────────────────────────
|
|
118
|
+
describe("safeJson", () => {
|
|
119
|
+
it("parses valid JSON from a Response", async () => {
|
|
120
|
+
const res = new Response(JSON.stringify({ foo: 42 }));
|
|
121
|
+
const data = await safeJson(res, "test");
|
|
122
|
+
expect(data).toEqual({ foo: 42 });
|
|
123
|
+
});
|
|
124
|
+
it("throws with a clear message on HTML response", async () => {
|
|
125
|
+
const res = new Response("<html><body>Error</body></html>");
|
|
126
|
+
await expect(safeJson(res, "test API")).rejects.toThrow(/test API: expected JSON but got: <html>/);
|
|
127
|
+
});
|
|
128
|
+
it("throws with a clear message on empty response", async () => {
|
|
129
|
+
const res = new Response("");
|
|
130
|
+
await expect(safeJson(res, "test")).rejects.toThrow(/expected JSON but got:/);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=fetch-utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-utils.test.js","sourceRoot":"","sources":["../src/fetch-utils.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as Prisma from './internal/prismaNamespaceBrowser.js';
|
|
2
|
+
export { Prisma };
|
|
3
|
+
export * as $Enums from './enums.js';
|
|
4
|
+
export * from './enums.js';
|
|
5
|
+
/**
|
|
6
|
+
* Model Mod
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export type Mod = Prisma.ModModel;
|
|
10
|
+
/**
|
|
11
|
+
* Model ModClass
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
export type ModClass = Prisma.ModClassModel;
|
|
15
|
+
/**
|
|
16
|
+
* Model McVersion
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
export type McVersion = Prisma.McVersionModel;
|
|
20
|
+
/**
|
|
21
|
+
* Model McVersionDiff
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
export type McVersionDiff = Prisma.McVersionDiffModel;
|
|
25
|
+
/**
|
|
26
|
+
* Model ModVersionDiff
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
export type ModVersionDiff = Prisma.ModVersionDiffModel;
|
|
30
|
+
/**
|
|
31
|
+
* Model ModTag
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
export type ModTag = Prisma.ModTagModel;
|
|
35
|
+
/**
|
|
36
|
+
* Model McSourceFile
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
export type McSourceFile = Prisma.McSourceFileModel;
|
|
40
|
+
/**
|
|
41
|
+
* Model ModSourceFile
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
export type ModSourceFile = Prisma.ModSourceFileModel;
|
|
45
|
+
/**
|
|
46
|
+
* Model DocEntry
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
export type DocEntry = Prisma.DocEntryModel;
|
|
50
|
+
/**
|
|
51
|
+
* Model Primer
|
|
52
|
+
*
|
|
53
|
+
*/
|
|
54
|
+
export type Primer = Prisma.PrimerModel;
|
|
55
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/generated/sqlite/browser.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,MAAM,sCAAsC,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,OAAO,KAAK,MAAM,MAAM,YAAY,CAAA;AACpC,cAAc,YAAY,CAAC;AAC3B;;;GAGG;AACH,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAA;AACjC;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAA;AAC3C;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAA;AAC7C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAA;AACrD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAA;AACvD;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAA;AACvC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAA;AACnD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAA;AACrD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAA;AAC3C;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
// biome-ignore-all lint: generated file
|
|
4
|
+
// @ts-nocheck
|
|
5
|
+
/*
|
|
6
|
+
* This file should be your main import to use Prisma-related types and utilities in a browser.
|
|
7
|
+
* Use it to get access to models, enums, and input types.
|
|
8
|
+
*
|
|
9
|
+
* This file does not contain a `PrismaClient` class, nor several other helpers that are intended as server-side only.
|
|
10
|
+
* See `client.ts` for the standard, server-side entry point.
|
|
11
|
+
*
|
|
12
|
+
* 🟢 You can import this file directly.
|
|
13
|
+
*/
|
|
14
|
+
import * as Prisma from './internal/prismaNamespaceBrowser.js';
|
|
15
|
+
export { Prisma };
|
|
16
|
+
export * as $Enums from './enums.js';
|
|
17
|
+
export * from './enums.js';
|
|
18
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/generated/sqlite/browser.ts"],"names":[],"mappings":"AACA,qEAAqE;AACrE,oBAAoB;AACpB,wCAAwC;AACxC,eAAe;AACf;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,MAAM,sCAAsC,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,OAAO,KAAK,MAAM,MAAM,YAAY,CAAA;AACpC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as runtime from "@prisma/client/runtime/client";
|
|
2
|
+
import * as $Class from "./internal/class.js";
|
|
3
|
+
import * as Prisma from "./internal/prismaNamespace.js";
|
|
4
|
+
export * as $Enums from './enums.js';
|
|
5
|
+
export * from "./enums.js";
|
|
6
|
+
/**
|
|
7
|
+
* ## Prisma Client
|
|
8
|
+
*
|
|
9
|
+
* Type-safe database client for TypeScript
|
|
10
|
+
* @example
|
|
11
|
+
* ```
|
|
12
|
+
* const prisma = new PrismaClient()
|
|
13
|
+
* // Fetch zero or more Mods
|
|
14
|
+
* const mods = await prisma.mod.findMany()
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
|
|
18
|
+
*/
|
|
19
|
+
export declare const PrismaClient: $Class.PrismaClientConstructor;
|
|
20
|
+
export type PrismaClient<LogOpts extends Prisma.LogLevel = never, OmitOpts extends Prisma.PrismaClientOptions["omit"] = Prisma.PrismaClientOptions["omit"], ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = $Class.PrismaClient<LogOpts, OmitOpts, ExtArgs>;
|
|
21
|
+
export { Prisma };
|
|
22
|
+
/**
|
|
23
|
+
* Model Mod
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
export type Mod = Prisma.ModModel;
|
|
27
|
+
/**
|
|
28
|
+
* Model ModClass
|
|
29
|
+
*
|
|
30
|
+
*/
|
|
31
|
+
export type ModClass = Prisma.ModClassModel;
|
|
32
|
+
/**
|
|
33
|
+
* Model McVersion
|
|
34
|
+
*
|
|
35
|
+
*/
|
|
36
|
+
export type McVersion = Prisma.McVersionModel;
|
|
37
|
+
/**
|
|
38
|
+
* Model McVersionDiff
|
|
39
|
+
*
|
|
40
|
+
*/
|
|
41
|
+
export type McVersionDiff = Prisma.McVersionDiffModel;
|
|
42
|
+
/**
|
|
43
|
+
* Model ModVersionDiff
|
|
44
|
+
*
|
|
45
|
+
*/
|
|
46
|
+
export type ModVersionDiff = Prisma.ModVersionDiffModel;
|
|
47
|
+
/**
|
|
48
|
+
* Model ModTag
|
|
49
|
+
*
|
|
50
|
+
*/
|
|
51
|
+
export type ModTag = Prisma.ModTagModel;
|
|
52
|
+
/**
|
|
53
|
+
* Model McSourceFile
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
56
|
+
export type McSourceFile = Prisma.McSourceFileModel;
|
|
57
|
+
/**
|
|
58
|
+
* Model ModSourceFile
|
|
59
|
+
*
|
|
60
|
+
*/
|
|
61
|
+
export type ModSourceFile = Prisma.ModSourceFileModel;
|
|
62
|
+
/**
|
|
63
|
+
* Model DocEntry
|
|
64
|
+
*
|
|
65
|
+
*/
|
|
66
|
+
export type DocEntry = Prisma.DocEntryModel;
|
|
67
|
+
/**
|
|
68
|
+
* Model Primer
|
|
69
|
+
*
|
|
70
|
+
*/
|
|
71
|
+
export type Primer = Prisma.PrimerModel;
|
|
72
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/generated/sqlite/client.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,OAAO,MAAM,+BAA+B,CAAA;AAExD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAEvD,OAAO,KAAK,MAAM,MAAM,YAAY,CAAA;AACpC,cAAc,YAAY,CAAA;AAC1B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,gCAAyC,CAAA;AAClE,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,MAAM,CAAC,QAAQ,GAAG,KAAK,EAAE,QAAQ,SAAS,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,SAAS,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;AAC3S,OAAO,EAAE,MAAM,EAAE,CAAA;AAIjB;;;GAGG;AACH,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAA;AACjC;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAA;AAC3C;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAA;AAC7C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAA;AACrD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAA;AACvD;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAA;AACvC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAA;AACnD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAA;AACrD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAA;AAC3C;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
// biome-ignore-all lint: generated file
|
|
4
|
+
// @ts-nocheck
|
|
5
|
+
/*
|
|
6
|
+
* This file should be your main import to use Prisma. Through it you get access to all the models, enums, and input types.
|
|
7
|
+
* If you're looking for something you can import in the client-side of your application, please refer to the `browser.ts` file instead.
|
|
8
|
+
*
|
|
9
|
+
* 🟢 You can import this file directly.
|
|
10
|
+
*/
|
|
11
|
+
import * as path from 'node:path';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
13
|
+
globalThis['__dirname'] = path.dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
import * as $Class from "./internal/class.js";
|
|
15
|
+
import * as Prisma from "./internal/prismaNamespace.js";
|
|
16
|
+
export * as $Enums from './enums.js';
|
|
17
|
+
export * from "./enums.js";
|
|
18
|
+
/**
|
|
19
|
+
* ## Prisma Client
|
|
20
|
+
*
|
|
21
|
+
* Type-safe database client for TypeScript
|
|
22
|
+
* @example
|
|
23
|
+
* ```
|
|
24
|
+
* const prisma = new PrismaClient()
|
|
25
|
+
* // Fetch zero or more Mods
|
|
26
|
+
* const mods = await prisma.mod.findMany()
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
|
|
30
|
+
*/
|
|
31
|
+
export const PrismaClient = $Class.getPrismaClientClass(__dirname);
|
|
32
|
+
export { Prisma };
|
|
33
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/generated/sqlite/client.ts"],"names":[],"mappings":"AACA,qEAAqE;AACrE,oBAAoB;AACpB,wCAAwC;AACxC,eAAe;AACf;;;;;GAKG;AAGH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAItE,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAEvD,OAAO,KAAK,MAAM,MAAM,YAAY,CAAA;AACpC,cAAc,YAAY,CAAA;AAC1B;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,CAAA"}
|