@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,365 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools for misode/mcmeta — version-controlled Minecraft data & assets.
|
|
3
|
+
*
|
|
4
|
+
* Data URL pattern: https://raw.githubusercontent.com/misode/mcmeta/{version}-{branch}/{path}
|
|
5
|
+
* Latest summary: https://raw.githubusercontent.com/misode/mcmeta/summary/{path}
|
|
6
|
+
*
|
|
7
|
+
* Branches:
|
|
8
|
+
* summary - blocks, commands, item_components, registries, sounds, versions
|
|
9
|
+
* registries - one JSON file per registry key
|
|
10
|
+
* data - vanilla datapack (namespaced JSON files)
|
|
11
|
+
* data-json - data but JSON only
|
|
12
|
+
* assets - vanilla resource pack
|
|
13
|
+
* assets-json - assets but JSON only
|
|
14
|
+
* assets-tiny - assets from JAR only (no sounds/languages)
|
|
15
|
+
* diff - combination of assets+data+summary in diffable format
|
|
16
|
+
* atlas - texture atlases for blocks/items/entities
|
|
17
|
+
*
|
|
18
|
+
* All fetched files are cached to ~/.modlens-cache/mcmeta/{version}/{branch}/...
|
|
19
|
+
*/
|
|
20
|
+
import { readFile, writeFile, readdir } from "fs/promises";
|
|
21
|
+
import { join, extname, resolve } from "path";
|
|
22
|
+
import { CACHE_ROOT, exists, ensureDir } from "../cache.js";
|
|
23
|
+
// ── Cache ─────────────────────────────────────────────────────────────────────
|
|
24
|
+
const MCMETA_CACHE = join(CACHE_ROOT, "mcmeta");
|
|
25
|
+
const RAW_BASE = "https://raw.githubusercontent.com/misode/mcmeta";
|
|
26
|
+
/** Minecraft resource-location component pattern: [a-z0-9_.-] */
|
|
27
|
+
const SAFE_COMPONENT = /^[a-zA-Z0-9_.+-]+$/;
|
|
28
|
+
function validateMcComponent(value, label) {
|
|
29
|
+
if (!SAFE_COMPONENT.test(value)) {
|
|
30
|
+
throw new Error(`Invalid ${label}: "${value}" — only alphanumeric, dot, underscore, hyphen, and plus are allowed`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function mcmetaCachePath(version, branch, filePath) {
|
|
34
|
+
const result = resolve(join(MCMETA_CACHE, version, branch, filePath));
|
|
35
|
+
const resolvedCache = resolve(MCMETA_CACHE);
|
|
36
|
+
if (!result.startsWith(resolvedCache + require("path").sep) && result !== resolvedCache) {
|
|
37
|
+
throw new Error(`Path traversal rejected in mcmeta cache: ${filePath}`);
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
// ── Fetch + cache ─────────────────────────────────────────────────────────────
|
|
42
|
+
async function fetchMcmeta(ref, // e.g. "summary" or "26.1.2-summary"
|
|
43
|
+
filePath, binary = false) {
|
|
44
|
+
const url = `${RAW_BASE}/${ref}/${filePath}`;
|
|
45
|
+
// derive cache path from ref
|
|
46
|
+
const [version, branch] = ref.includes("-")
|
|
47
|
+
? ref.split(/-(.+)/)
|
|
48
|
+
: ["_latest", ref];
|
|
49
|
+
const cachePath = mcmetaCachePath(version, branch, filePath);
|
|
50
|
+
if (await exists(cachePath)) {
|
|
51
|
+
return readFile(cachePath);
|
|
52
|
+
}
|
|
53
|
+
const res = await fetch(url);
|
|
54
|
+
if (!res.ok)
|
|
55
|
+
throw new Error(`mcmeta fetch failed: ${res.status} — ${url}`);
|
|
56
|
+
const buf = binary
|
|
57
|
+
? Buffer.from(await res.arrayBuffer())
|
|
58
|
+
: Buffer.from(await res.text());
|
|
59
|
+
await ensureDir(cachePath);
|
|
60
|
+
await writeFile(cachePath, buf);
|
|
61
|
+
return buf;
|
|
62
|
+
}
|
|
63
|
+
async function fetchMcmetaJson(ref, filePath) {
|
|
64
|
+
const buf = await fetchMcmeta(ref, filePath, false);
|
|
65
|
+
return JSON.parse(buf.toString("utf8"));
|
|
66
|
+
}
|
|
67
|
+
/** Build the ref string for a specific MC version + branch. */
|
|
68
|
+
function versionRef(version, branch) {
|
|
69
|
+
return version ? `${version}-${branch}` : branch;
|
|
70
|
+
}
|
|
71
|
+
// ── Tools ─────────────────────────────────────────────────────────────────────
|
|
72
|
+
/** List all available Minecraft versions from the summary branch. */
|
|
73
|
+
export async function getMcmetaVersions(filter) {
|
|
74
|
+
const versions = await fetchMcmetaJson("summary", "versions/data.json");
|
|
75
|
+
const filtered = (filter === "release")
|
|
76
|
+
? versions.filter(v => v.type === "release")
|
|
77
|
+
: (filter === "snapshot")
|
|
78
|
+
? versions.filter(v => v.type === "snapshot")
|
|
79
|
+
: versions;
|
|
80
|
+
return { count: filtered.length, versions: filtered };
|
|
81
|
+
}
|
|
82
|
+
/** Get block state properties and defaults for a MC version. */
|
|
83
|
+
export async function getMcBlocks(version) {
|
|
84
|
+
const ref = versionRef(version, "summary");
|
|
85
|
+
const data = await fetchMcmetaJson(ref, "blocks/data.json");
|
|
86
|
+
return { version: version ?? "latest", data };
|
|
87
|
+
}
|
|
88
|
+
/** Get the Brigadier command tree for a MC version. */
|
|
89
|
+
export async function getMcCommands(version) {
|
|
90
|
+
const ref = versionRef(version, "summary");
|
|
91
|
+
const data = await fetchMcmetaJson(ref, "commands/data.json");
|
|
92
|
+
return { version: version ?? "latest", data };
|
|
93
|
+
}
|
|
94
|
+
/** Get registry list (summary) or a specific registry's entries. */
|
|
95
|
+
export async function getMcRegistries(version, registry) {
|
|
96
|
+
const ref = versionRef(version, "summary");
|
|
97
|
+
if (registry) {
|
|
98
|
+
// Try the dedicated registries branch for specific registry data
|
|
99
|
+
const regRef = versionRef(version, "registries");
|
|
100
|
+
try {
|
|
101
|
+
const data = await fetchMcmetaJson(regRef, `${registry}.json`);
|
|
102
|
+
return { version: version ?? "latest", registry, data };
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Fall back to summary registries
|
|
106
|
+
const summaryData = await fetchMcmetaJson(ref, "registries/data.json");
|
|
107
|
+
const entry = summaryData[registry] ?? summaryData[`minecraft:${registry}`];
|
|
108
|
+
if (!entry)
|
|
109
|
+
return { version: version ?? "latest", registry, found: false, availableKeys: Object.keys(summaryData) };
|
|
110
|
+
return { version: version ?? "latest", registry, data: entry };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const data = await fetchMcmetaJson(ref, "registries/data.json");
|
|
114
|
+
return { version: version ?? "latest", data };
|
|
115
|
+
}
|
|
116
|
+
/** Get sounds.json for a MC version. */
|
|
117
|
+
export async function getMcSounds(version) {
|
|
118
|
+
const ref = versionRef(version, "summary");
|
|
119
|
+
const data = await fetchMcmetaJson(ref, "sounds/data.json");
|
|
120
|
+
return { version: version ?? "latest", data };
|
|
121
|
+
}
|
|
122
|
+
/** Get item component definitions for a MC version. */
|
|
123
|
+
export async function getMcItemComponents(version) {
|
|
124
|
+
const ref = versionRef(version, "summary");
|
|
125
|
+
const data = await fetchMcmetaJson(ref, "item_components/data.json");
|
|
126
|
+
return { version: version ?? "latest", data };
|
|
127
|
+
}
|
|
128
|
+
/** Get or list files from the data/data-json branch (vanilla datapack). */
|
|
129
|
+
export async function getMcDataFile(filePath, version, jsonOnly = false) {
|
|
130
|
+
const branch = jsonOnly ? "data-json" : "data";
|
|
131
|
+
const ref = versionRef(version, branch);
|
|
132
|
+
try {
|
|
133
|
+
const buf = await fetchMcmeta(ref, filePath, !filePath.endsWith(".json"));
|
|
134
|
+
const isJson = filePath.endsWith(".json") || !buf.slice(0, 1).toString().match(/[^\x20-\x7e\t\n\r]/);
|
|
135
|
+
return {
|
|
136
|
+
version: version ?? "latest",
|
|
137
|
+
branch,
|
|
138
|
+
path: filePath,
|
|
139
|
+
content: isJson ? JSON.parse(buf.toString("utf8")) : buf.toString("base64"),
|
|
140
|
+
encoding: isJson ? "json" : "base64",
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
return { version: version ?? "latest", branch, path: filePath, error: String(err) };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/** Get or download a file from the assets branch. Binary files (png, ogg) return cached path. */
|
|
148
|
+
export async function getMcAssetFile(filePath, version, jsonOnly = false) {
|
|
149
|
+
const branch = jsonOnly ? "assets-json" : "assets";
|
|
150
|
+
const ref = versionRef(version, branch);
|
|
151
|
+
const ext = extname(filePath).toLowerCase();
|
|
152
|
+
const isBinary = [".png", ".ogg", ".gif", ".wav"].includes(ext);
|
|
153
|
+
try {
|
|
154
|
+
const buf = await fetchMcmeta(ref, filePath, isBinary);
|
|
155
|
+
if (isBinary) {
|
|
156
|
+
const [ver, br] = ref.includes("-") ? ref.split(/-(.+)/) : ["_latest", ref];
|
|
157
|
+
const cachePath = mcmetaCachePath(ver, br, filePath);
|
|
158
|
+
return { version: version ?? "latest", branch, path: filePath, cachedAt: cachePath, encoding: "binary" };
|
|
159
|
+
}
|
|
160
|
+
const isJson = filePath.endsWith(".json");
|
|
161
|
+
return {
|
|
162
|
+
version: version ?? "latest",
|
|
163
|
+
branch,
|
|
164
|
+
path: filePath,
|
|
165
|
+
content: isJson ? JSON.parse(buf.toString("utf8")) : buf.toString("utf8"),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
return { version: version ?? "latest", branch, path: filePath, error: String(err) };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/** List files within a directory on a specific branch/version by reading cache or using the GitHub tree API. */
|
|
173
|
+
export async function listMcDataFiles(dirPath, version, branch) {
|
|
174
|
+
// Try listing the local cache directory if it's already downloaded
|
|
175
|
+
const cacheDir = mcmetaCachePath(version, branch, dirPath);
|
|
176
|
+
if (await exists(cacheDir)) {
|
|
177
|
+
try {
|
|
178
|
+
const entries = await readdir(cacheDir, { withFileTypes: true });
|
|
179
|
+
const files = entries.map(e => ({ name: e.name, type: e.isDirectory() ? "dir" : "file" }));
|
|
180
|
+
return { version, branch, path: dirPath, source: "cache", entries: files };
|
|
181
|
+
}
|
|
182
|
+
catch { /* fall through to API */ }
|
|
183
|
+
}
|
|
184
|
+
// Use GitHub API to list tree
|
|
185
|
+
const apiUrl = `https://api.github.com/repos/misode/mcmeta/git/trees/${version}-${branch}?recursive=0`;
|
|
186
|
+
try {
|
|
187
|
+
const res = await fetch(apiUrl, { headers: { Accept: "application/vnd.github.v3+json" } });
|
|
188
|
+
if (!res.ok)
|
|
189
|
+
throw new Error(`GitHub API ${res.status}`);
|
|
190
|
+
const tree = await res.json();
|
|
191
|
+
const prefix = dirPath ? dirPath.replace(/\/?$/, "/") : "";
|
|
192
|
+
const entries = tree.tree
|
|
193
|
+
.filter(e => {
|
|
194
|
+
if (!prefix)
|
|
195
|
+
return !e.path.includes("/");
|
|
196
|
+
if (!e.path.startsWith(prefix))
|
|
197
|
+
return false;
|
|
198
|
+
const rel = e.path.slice(prefix.length);
|
|
199
|
+
return !rel.includes("/");
|
|
200
|
+
})
|
|
201
|
+
.map(e => ({ name: e.path.replace(prefix, ""), type: e.type === "tree" ? "dir" : "file", fullPath: e.path }));
|
|
202
|
+
return { version, branch, path: dirPath, source: "github-api", entries };
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
return { version, branch, path: dirPath, error: String(err) };
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/** Compare a data/asset file between two MC versions using the diff branch. */
|
|
209
|
+
export async function diffMcData(filePath, versionA, versionB, branch = "data") {
|
|
210
|
+
const [rawA, rawB] = await Promise.allSettled([
|
|
211
|
+
fetchMcmetaJson(`${versionA}-${branch}`, filePath),
|
|
212
|
+
fetchMcmetaJson(`${versionB}-${branch}`, filePath),
|
|
213
|
+
]);
|
|
214
|
+
const contentA = rawA.status === "fulfilled" ? rawA.value : { error: String(rawA.reason) };
|
|
215
|
+
const contentB = rawB.status === "fulfilled" ? rawB.value : { error: String(rawB.reason) };
|
|
216
|
+
return { filePath, branch, versionA, versionB, contentA, contentB };
|
|
217
|
+
}
|
|
218
|
+
/** Get texture atlas data from the atlas branch. */
|
|
219
|
+
export async function getMcAtlas(version, atlas) {
|
|
220
|
+
const ref = versionRef(version, "atlas");
|
|
221
|
+
if (atlas) {
|
|
222
|
+
const path = atlas.includes(".") ? atlas : `${atlas}.json`;
|
|
223
|
+
try {
|
|
224
|
+
const data = await fetchMcmetaJson(ref, path);
|
|
225
|
+
return { version: version ?? "latest", atlas, data };
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
return { version: version ?? "latest", atlas, error: String(err) };
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// List available atlases from cache or GitHub API
|
|
232
|
+
return listMcDataFiles("", version ?? "latest", "atlas");
|
|
233
|
+
}
|
|
234
|
+
/** Fetch any arbitrary file from mcmeta by specifying the full ref and path. */
|
|
235
|
+
export async function getMcmetaRaw(ref, filePath) {
|
|
236
|
+
const ext = extname(filePath).toLowerCase();
|
|
237
|
+
const isBinary = [".png", ".ogg", ".gif", ".wav", ".nbt", ".dat", ".mca", ".jar"].includes(ext);
|
|
238
|
+
try {
|
|
239
|
+
const buf = await fetchMcmeta(ref, filePath, isBinary);
|
|
240
|
+
if (isBinary) {
|
|
241
|
+
const [ver, br] = ref.includes("-") ? ref.split(/-(.+)/) : ["_latest", ref];
|
|
242
|
+
const cachePath = mcmetaCachePath(ver, br, filePath);
|
|
243
|
+
return { ref, path: filePath, cachedAt: cachePath, encoding: "binary", sizeBytes: buf.length };
|
|
244
|
+
}
|
|
245
|
+
const isJson = filePath.endsWith(".json");
|
|
246
|
+
return {
|
|
247
|
+
ref,
|
|
248
|
+
path: filePath,
|
|
249
|
+
content: isJson ? JSON.parse(buf.toString("utf8")) : buf.toString("utf8"),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
return { ref, path: filePath, error: String(err) };
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/** Get registry entries from the dedicated registries branch for a specific registry. */
|
|
257
|
+
export async function getRegistryEntries(registry, version) {
|
|
258
|
+
const ref = versionRef(version, "registries");
|
|
259
|
+
// Registry path: e.g. "minecraft/block.json" or "block.json"
|
|
260
|
+
const paths = [
|
|
261
|
+
registry.includes(".json") ? registry : `${registry}.json`,
|
|
262
|
+
registry.includes("/") ? registry : `minecraft/${registry}.json`,
|
|
263
|
+
];
|
|
264
|
+
for (const p of paths) {
|
|
265
|
+
try {
|
|
266
|
+
const data = await fetchMcmetaJson(ref, p);
|
|
267
|
+
return { version: version ?? "latest", registry, path: p, data };
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Fall back to summary registries/data.json (same as getMcRegistries)
|
|
274
|
+
try {
|
|
275
|
+
const summaryRef = versionRef(version, "summary");
|
|
276
|
+
const summaryData = await fetchMcmetaJson(summaryRef, "registries/data.json");
|
|
277
|
+
const entry = summaryData[registry] ?? summaryData[`minecraft:${registry}`];
|
|
278
|
+
if (entry)
|
|
279
|
+
return { version: version ?? "latest", registry, source: "summary", data: entry };
|
|
280
|
+
}
|
|
281
|
+
catch { /* ignore */ }
|
|
282
|
+
return { version: version ?? "latest", registry, found: false, tried: paths };
|
|
283
|
+
}
|
|
284
|
+
// ── Version comparison & changelog ───────────────────────────────────────────
|
|
285
|
+
/**
|
|
286
|
+
* Compare two Minecraft versions using the GitHub compare API on the given branch.
|
|
287
|
+
* Returns the list of files added, modified, and removed between the two versions.
|
|
288
|
+
* Results are cached to ~/.modlens-cache/mcmeta/compare/{versionA}..{versionB}/{branch}.json
|
|
289
|
+
*/
|
|
290
|
+
export async function compareVersions(versionA, versionB, branch = "diff") {
|
|
291
|
+
const cacheFile = join(MCMETA_CACHE, "compare", `${versionA}..${versionB}`, `${branch}.json`);
|
|
292
|
+
if (await exists(cacheFile)) {
|
|
293
|
+
const cached = JSON.parse((await readFile(cacheFile)).toString("utf8"));
|
|
294
|
+
return { ...cached, source: "cache" };
|
|
295
|
+
}
|
|
296
|
+
const tagA = `${versionA}-${branch}`;
|
|
297
|
+
const tagB = `${versionB}-${branch}`;
|
|
298
|
+
const url = `https://api.github.com/repos/misode/mcmeta/compare/${tagA}...${tagB}`;
|
|
299
|
+
const res = await fetch(url, { headers: { Accept: "application/vnd.github.v3+json" } });
|
|
300
|
+
if (!res.ok) {
|
|
301
|
+
return { error: `GitHub compare API returned ${res.status}`, url, versionA, versionB, branch };
|
|
302
|
+
}
|
|
303
|
+
const data = await res.json();
|
|
304
|
+
const result = {
|
|
305
|
+
versionA,
|
|
306
|
+
versionB,
|
|
307
|
+
branch,
|
|
308
|
+
status: data.status,
|
|
309
|
+
ahead_by: data.ahead_by,
|
|
310
|
+
behind_by: data.behind_by,
|
|
311
|
+
total_commits: data.total_commits,
|
|
312
|
+
files: (data.files ?? []).map((f) => ({
|
|
313
|
+
path: f.filename,
|
|
314
|
+
status: f.status,
|
|
315
|
+
additions: f.additions,
|
|
316
|
+
deletions: f.deletions,
|
|
317
|
+
changes: f.changes,
|
|
318
|
+
})),
|
|
319
|
+
file_count: (data.files ?? []).length,
|
|
320
|
+
note: (data.files ?? []).length >= 300 ? "GitHub API caps at 300 files — use listMcDataFiles for full tree" : undefined,
|
|
321
|
+
};
|
|
322
|
+
await ensureDir(cacheFile);
|
|
323
|
+
await writeFile(cacheFile, JSON.stringify(result));
|
|
324
|
+
return result;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Get the list of files changed in a specific Minecraft version
|
|
328
|
+
* by comparing it to its parent commit in the given branch.
|
|
329
|
+
*
|
|
330
|
+
* Uses the GitHub commits API to fetch the diff for the version's commit.
|
|
331
|
+
* Results are cached to ~/.modlens-cache/mcmeta/changelog/{version}/{branch}.json
|
|
332
|
+
*/
|
|
333
|
+
export async function getVersionChangelog(version, branch = "diff") {
|
|
334
|
+
const cacheFile = join(MCMETA_CACHE, "changelog", version, `${branch}.json`);
|
|
335
|
+
if (await exists(cacheFile)) {
|
|
336
|
+
const cached = JSON.parse((await readFile(cacheFile)).toString("utf8"));
|
|
337
|
+
return { ...cached, source: "cache" };
|
|
338
|
+
}
|
|
339
|
+
const tag = `${version}-${branch}`;
|
|
340
|
+
const url = `https://api.github.com/repos/misode/mcmeta/commits/${tag}`;
|
|
341
|
+
const res = await fetch(url, { headers: { Accept: "application/vnd.github.v3+json" } });
|
|
342
|
+
if (!res.ok) {
|
|
343
|
+
return { error: `GitHub commits API returned ${res.status}`, version, branch, tag };
|
|
344
|
+
}
|
|
345
|
+
const data = await res.json();
|
|
346
|
+
const result = {
|
|
347
|
+
version,
|
|
348
|
+
branch,
|
|
349
|
+
sha: data.sha,
|
|
350
|
+
message: data.commit?.message,
|
|
351
|
+
date: data.commit?.author?.date,
|
|
352
|
+
files: (data.files ?? []).map((f) => ({
|
|
353
|
+
path: f.filename,
|
|
354
|
+
status: f.status,
|
|
355
|
+
additions: f.additions,
|
|
356
|
+
deletions: f.deletions,
|
|
357
|
+
changes: f.changes,
|
|
358
|
+
})),
|
|
359
|
+
file_count: (data.files ?? []).length,
|
|
360
|
+
};
|
|
361
|
+
await ensureDir(cacheFile);
|
|
362
|
+
await writeFile(cacheFile, JSON.stringify(result));
|
|
363
|
+
return result;
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=mcmeta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcmeta.js","sourceRoot":"","sources":["../../src/tools/mcmeta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List all ingested mods that have mixins, with their target classes.
|
|
3
|
+
* Does NOT scan JARs — reads resolved mixinTargets from DB (populated by resolve_mixin_targets).
|
|
4
|
+
*/
|
|
5
|
+
export declare function listModsWithMixins(loader?: string, mcVersion?: string): Promise<object>;
|
|
6
|
+
/**
|
|
7
|
+
* Full cross-mod mixin conflict matrix.
|
|
8
|
+
*
|
|
9
|
+
* Returns every class that is targeted by 2+ mods, with all mods listed.
|
|
10
|
+
* Uses resolved mixinTargets from the DB.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getMixinConflictMatrix(loader?: string, mcVersion?: string, minConflicts?: number): Promise<object>;
|
|
13
|
+
/**
|
|
14
|
+
* For a single class, show every mod that mixes into it — same as getMixinConflicts
|
|
15
|
+
* in mixins.ts but includes richer context.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getMixinClassDetail(targetClass: string): Promise<object>;
|
|
18
|
+
/**
|
|
19
|
+
* Top-N most contested classes by number of mods targeting them.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getMixinHotspots(top?: number, loader?: string): Promise<object>;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve @Mixin targets for every hasMixins=true mod in the DB.
|
|
24
|
+
* Reads bytecode annotations and updates mixinTargets column.
|
|
25
|
+
* Returns a per-mod summary plus totals.
|
|
26
|
+
*/
|
|
27
|
+
export declare function batchResolveMixins(loader?: string, mcVersion?: string): Promise<object>;
|
|
28
|
+
export declare function resolveMixinTargets(dbId: number): Promise<{
|
|
29
|
+
resolved: number;
|
|
30
|
+
failed: number;
|
|
31
|
+
skipped: number;
|
|
32
|
+
targets: string[];
|
|
33
|
+
}>;
|
|
34
|
+
export declare function getMixinTargets(modId: string | number): Promise<{
|
|
35
|
+
modId: string;
|
|
36
|
+
displayName: string;
|
|
37
|
+
mixinConfigs: string[];
|
|
38
|
+
mixinTargets: import("@prisma/client/runtime/library").JsonValue;
|
|
39
|
+
}>;
|
|
40
|
+
export declare function getMixinConflicts(targetClass: string): Promise<{
|
|
41
|
+
targetClass: string;
|
|
42
|
+
conflictingMods: {
|
|
43
|
+
tags: string[];
|
|
44
|
+
sha512: string | null;
|
|
45
|
+
id: number;
|
|
46
|
+
version: string;
|
|
47
|
+
modId: string;
|
|
48
|
+
sha256: string | null;
|
|
49
|
+
dependencies: import("@prisma/client/runtime/library").JsonValue;
|
|
50
|
+
metadata: import("@prisma/client/runtime/library").JsonValue;
|
|
51
|
+
displayName: string;
|
|
52
|
+
murmur2: string | null;
|
|
53
|
+
decompiled: boolean;
|
|
54
|
+
mcVersion: string;
|
|
55
|
+
loader: string;
|
|
56
|
+
jarPath: string;
|
|
57
|
+
sourcePath: string | null;
|
|
58
|
+
decompPath: string | null;
|
|
59
|
+
graphPath: string | null;
|
|
60
|
+
modrinthId: string | null;
|
|
61
|
+
curseforgeId: number | null;
|
|
62
|
+
hasMixins: boolean;
|
|
63
|
+
hasAt: boolean;
|
|
64
|
+
hasAw: boolean;
|
|
65
|
+
mixinConfigs: string[];
|
|
66
|
+
mixinTargets: import("@prisma/client/runtime/library").JsonValue;
|
|
67
|
+
atEntries: import("@prisma/client/runtime/library").JsonValue;
|
|
68
|
+
awEntries: import("@prisma/client/runtime/library").JsonValue;
|
|
69
|
+
metadataSource: string | null;
|
|
70
|
+
ingestedAt: Date;
|
|
71
|
+
updatedAt: Date;
|
|
72
|
+
}[];
|
|
73
|
+
count: number;
|
|
74
|
+
}>;
|
|
75
|
+
export declare function getAtEntries(dbId: number): Promise<{
|
|
76
|
+
modId: string;
|
|
77
|
+
hasAt: boolean;
|
|
78
|
+
atEntries: import("@prisma/client/runtime/library").JsonValue;
|
|
79
|
+
}>;
|
|
80
|
+
export declare function getAwEntries(dbId: number): Promise<{
|
|
81
|
+
modId: string;
|
|
82
|
+
hasAw: boolean;
|
|
83
|
+
awEntries: import("@prisma/client/runtime/library").JsonValue;
|
|
84
|
+
}>;
|
|
85
|
+
/**
|
|
86
|
+
* Find all mods whose mixinTargets contain a class in the given package (or subpackage).
|
|
87
|
+
* packagePrefix: slash-separated, e.g. "net/minecraft/world/level" or "net/minecraft/world/entity"
|
|
88
|
+
* mcVersion: optional filter
|
|
89
|
+
*/
|
|
90
|
+
export declare function getMixinsTargetingPackage(packagePrefix: string, mcVersion?: string): Promise<{
|
|
91
|
+
packagePrefix: string;
|
|
92
|
+
mcVersion: string;
|
|
93
|
+
totalMods: number;
|
|
94
|
+
totalTargets: number;
|
|
95
|
+
mods: {
|
|
96
|
+
modId: string;
|
|
97
|
+
displayName: string;
|
|
98
|
+
version: string;
|
|
99
|
+
mcVersion: string;
|
|
100
|
+
loader: string;
|
|
101
|
+
matchingTargets: string[];
|
|
102
|
+
}[];
|
|
103
|
+
}>;
|
|
104
|
+
/**
|
|
105
|
+
* Find Access Transformer / Access Widener entries where two or more mods
|
|
106
|
+
* target the same class member. Returns entries grouped by target signature so
|
|
107
|
+
* you can see at a glance who's AT-ing what.
|
|
108
|
+
*
|
|
109
|
+
* mcVersion: optional filter
|
|
110
|
+
* loader: optional filter ("neoforge" | "forge" | "fabric" | "quilt")
|
|
111
|
+
*/
|
|
112
|
+
export declare function findAtAwConflicts(mcVersion?: string, loader?: string): Promise<object>;
|
|
113
|
+
//# sourceMappingURL=mixin-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mixin-scan.d.ts","sourceRoot":"","sources":["../../src/tools/mixin-scan.ts"],"names":[],"mappings":"AAsEA;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB7F;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CACxC,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,SAAI,GACjB,OAAO,CAAC,MAAM,CAAC,CAsCjB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB9E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,SAAK,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBjF;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACpC,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CA8BjB;AAgED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7D,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CACxE,CAAC,CA8BD;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;;;;;GAc3D;AAED,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAS1D;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM;;;;GAQ9C;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM;;;;GAQ9C;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;;;;;;eAQvD,MAAM;qBAAe,MAAM;iBAAW,MAAM;mBAAa,MAAM;gBAAU,MAAM;yBAAmB,MAAM,EAAE;;GAwB3I;AAID;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqE5F"}
|