@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.
Files changed (382) hide show
  1. package/README.md +938 -0
  2. package/dist/access-flags.d.ts +58 -0
  3. package/dist/access-flags.d.ts.map +1 -0
  4. package/dist/access-flags.js +79 -0
  5. package/dist/access-flags.js.map +1 -0
  6. package/dist/access-flags.test.d.ts +2 -0
  7. package/dist/access-flags.test.d.ts.map +1 -0
  8. package/dist/access-flags.test.js +189 -0
  9. package/dist/access-flags.test.js.map +1 -0
  10. package/dist/batch-ingest.d.ts +2 -0
  11. package/dist/batch-ingest.d.ts.map +1 -0
  12. package/dist/batch-ingest.js +54 -0
  13. package/dist/batch-ingest.js.map +1 -0
  14. package/dist/batch-resolve-mixins.d.ts +2 -0
  15. package/dist/batch-resolve-mixins.d.ts.map +1 -0
  16. package/dist/batch-resolve-mixins.js +36 -0
  17. package/dist/batch-resolve-mixins.js.map +1 -0
  18. package/dist/cache.d.ts +16 -0
  19. package/dist/cache.d.ts.map +1 -0
  20. package/dist/cache.js +36 -0
  21. package/dist/cache.js.map +1 -0
  22. package/dist/cli.d.ts +2 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +1318 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/curseforge.d.ts +53 -0
  27. package/dist/curseforge.d.ts.map +1 -0
  28. package/dist/curseforge.js +104 -0
  29. package/dist/curseforge.js.map +1 -0
  30. package/dist/db-backend.d.ts +17 -0
  31. package/dist/db-backend.d.ts.map +1 -0
  32. package/dist/db-backend.js +40 -0
  33. package/dist/db-backend.js.map +1 -0
  34. package/dist/db.d.ts +11 -0
  35. package/dist/db.d.ts.map +1 -0
  36. package/dist/db.js +55 -0
  37. package/dist/db.js.map +1 -0
  38. package/dist/embed-queue.d.ts +12 -0
  39. package/dist/embed-queue.d.ts.map +1 -0
  40. package/dist/embed-queue.js +103 -0
  41. package/dist/embed-queue.js.map +1 -0
  42. package/dist/embeddings.d.ts +21 -0
  43. package/dist/embeddings.d.ts.map +1 -0
  44. package/dist/embeddings.js +55 -0
  45. package/dist/embeddings.js.map +1 -0
  46. package/dist/env-path.d.ts +19 -0
  47. package/dist/env-path.d.ts.map +1 -0
  48. package/dist/env-path.js +40 -0
  49. package/dist/env-path.js.map +1 -0
  50. package/dist/fetch-utils.d.ts +24 -0
  51. package/dist/fetch-utils.d.ts.map +1 -0
  52. package/dist/fetch-utils.js +73 -0
  53. package/dist/fetch-utils.js.map +1 -0
  54. package/dist/fetch-utils.test.d.ts +2 -0
  55. package/dist/fetch-utils.test.d.ts.map +1 -0
  56. package/dist/fetch-utils.test.js +133 -0
  57. package/dist/fetch-utils.test.js.map +1 -0
  58. package/dist/generated/sqlite/browser.d.ts +55 -0
  59. package/dist/generated/sqlite/browser.d.ts.map +1 -0
  60. package/dist/generated/sqlite/browser.js +18 -0
  61. package/dist/generated/sqlite/browser.js.map +1 -0
  62. package/dist/generated/sqlite/client.d.ts +72 -0
  63. package/dist/generated/sqlite/client.d.ts.map +1 -0
  64. package/dist/generated/sqlite/client.js +33 -0
  65. package/dist/generated/sqlite/client.js.map +1 -0
  66. package/dist/generated/sqlite/commonInputTypes.d.ts +387 -0
  67. package/dist/generated/sqlite/commonInputTypes.d.ts.map +1 -0
  68. package/dist/generated/sqlite/commonInputTypes.js +11 -0
  69. package/dist/generated/sqlite/commonInputTypes.js.map +1 -0
  70. package/dist/generated/sqlite/enums.d.ts +2 -0
  71. package/dist/generated/sqlite/enums.d.ts.map +1 -0
  72. package/dist/generated/sqlite/enums.js +11 -0
  73. package/dist/generated/sqlite/enums.js.map +1 -0
  74. package/dist/generated/sqlite/internal/class.d.ts +226 -0
  75. package/dist/generated/sqlite/internal/class.d.ts.map +1 -0
  76. package/dist/generated/sqlite/internal/class.js +84 -0
  77. package/dist/generated/sqlite/internal/class.js.map +1 -0
  78. package/dist/generated/sqlite/internal/prismaNamespace.d.ts +1344 -0
  79. package/dist/generated/sqlite/internal/prismaNamespace.d.ts.map +1 -0
  80. package/dist/generated/sqlite/internal/prismaNamespace.js +220 -0
  81. package/dist/generated/sqlite/internal/prismaNamespace.js.map +1 -0
  82. package/dist/generated/sqlite/internal/prismaNamespaceBrowser.d.ts +204 -0
  83. package/dist/generated/sqlite/internal/prismaNamespaceBrowser.d.ts.map +1 -0
  84. package/dist/generated/sqlite/internal/prismaNamespaceBrowser.js +191 -0
  85. package/dist/generated/sqlite/internal/prismaNamespaceBrowser.js.map +1 -0
  86. package/dist/generated/sqlite/models/DocEntry.d.ts +1223 -0
  87. package/dist/generated/sqlite/models/DocEntry.d.ts.map +1 -0
  88. package/dist/generated/sqlite/models/DocEntry.js +2 -0
  89. package/dist/generated/sqlite/models/DocEntry.js.map +1 -0
  90. package/dist/generated/sqlite/models/McSourceFile.d.ts +1289 -0
  91. package/dist/generated/sqlite/models/McSourceFile.d.ts.map +1 -0
  92. package/dist/generated/sqlite/models/McSourceFile.js +2 -0
  93. package/dist/generated/sqlite/models/McSourceFile.js.map +1 -0
  94. package/dist/generated/sqlite/models/McVersion.d.ts +1315 -0
  95. package/dist/generated/sqlite/models/McVersion.d.ts.map +1 -0
  96. package/dist/generated/sqlite/models/McVersion.js +2 -0
  97. package/dist/generated/sqlite/models/McVersion.js.map +1 -0
  98. package/dist/generated/sqlite/models/McVersionDiff.d.ts +1061 -0
  99. package/dist/generated/sqlite/models/McVersionDiff.d.ts.map +1 -0
  100. package/dist/generated/sqlite/models/McVersionDiff.js +2 -0
  101. package/dist/generated/sqlite/models/McVersionDiff.js.map +1 -0
  102. package/dist/generated/sqlite/models/Mod.d.ts +2396 -0
  103. package/dist/generated/sqlite/models/Mod.d.ts.map +1 -0
  104. package/dist/generated/sqlite/models/Mod.js +2 -0
  105. package/dist/generated/sqlite/models/Mod.js.map +1 -0
  106. package/dist/generated/sqlite/models/ModClass.d.ts +1254 -0
  107. package/dist/generated/sqlite/models/ModClass.d.ts.map +1 -0
  108. package/dist/generated/sqlite/models/ModClass.js +2 -0
  109. package/dist/generated/sqlite/models/ModClass.js.map +1 -0
  110. package/dist/generated/sqlite/models/ModSourceFile.d.ts +1283 -0
  111. package/dist/generated/sqlite/models/ModSourceFile.d.ts.map +1 -0
  112. package/dist/generated/sqlite/models/ModSourceFile.js +2 -0
  113. package/dist/generated/sqlite/models/ModSourceFile.js.map +1 -0
  114. package/dist/generated/sqlite/models/ModTag.d.ts +1278 -0
  115. package/dist/generated/sqlite/models/ModTag.d.ts.map +1 -0
  116. package/dist/generated/sqlite/models/ModTag.js +2 -0
  117. package/dist/generated/sqlite/models/ModTag.js.map +1 -0
  118. package/dist/generated/sqlite/models/ModVersionDiff.d.ts +1073 -0
  119. package/dist/generated/sqlite/models/ModVersionDiff.d.ts.map +1 -0
  120. package/dist/generated/sqlite/models/ModVersionDiff.js +2 -0
  121. package/dist/generated/sqlite/models/ModVersionDiff.js.map +1 -0
  122. package/dist/generated/sqlite/models/Primer.d.ts +1319 -0
  123. package/dist/generated/sqlite/models/Primer.d.ts.map +1 -0
  124. package/dist/generated/sqlite/models/Primer.js +2 -0
  125. package/dist/generated/sqlite/models/Primer.js.map +1 -0
  126. package/dist/generated/sqlite/models.d.ts +12 -0
  127. package/dist/generated/sqlite/models.d.ts.map +1 -0
  128. package/dist/generated/sqlite/models.js +2 -0
  129. package/dist/generated/sqlite/models.js.map +1 -0
  130. package/dist/jar.d.ts +7 -0
  131. package/dist/jar.d.ts.map +1 -0
  132. package/dist/jar.js +52 -0
  133. package/dist/jar.js.map +1 -0
  134. package/dist/java-tools.d.ts +46 -0
  135. package/dist/java-tools.d.ts.map +1 -0
  136. package/dist/java-tools.js +263 -0
  137. package/dist/java-tools.js.map +1 -0
  138. package/dist/launcher.d.ts +3 -0
  139. package/dist/launcher.d.ts.map +1 -0
  140. package/dist/launcher.js +105 -0
  141. package/dist/launcher.js.map +1 -0
  142. package/dist/mappings.d.ts +95 -0
  143. package/dist/mappings.d.ts.map +1 -0
  144. package/dist/mappings.js +1094 -0
  145. package/dist/mappings.js.map +1 -0
  146. package/dist/mappings.test.d.ts +2 -0
  147. package/dist/mappings.test.d.ts.map +1 -0
  148. package/dist/mappings.test.js +161 -0
  149. package/dist/mappings.test.js.map +1 -0
  150. package/dist/minecraft.d.ts +21 -0
  151. package/dist/minecraft.d.ts.map +1 -0
  152. package/dist/minecraft.js +70 -0
  153. package/dist/minecraft.js.map +1 -0
  154. package/dist/modpacks-ch.d.ts +224 -0
  155. package/dist/modpacks-ch.d.ts.map +1 -0
  156. package/dist/modpacks-ch.js +146 -0
  157. package/dist/modpacks-ch.js.map +1 -0
  158. package/dist/modrinth.d.ts +67 -0
  159. package/dist/modrinth.d.ts.map +1 -0
  160. package/dist/modrinth.js +88 -0
  161. package/dist/modrinth.js.map +1 -0
  162. package/dist/platform-adapter.d.ts +23 -0
  163. package/dist/platform-adapter.d.ts.map +1 -0
  164. package/dist/platform-adapter.js +2 -0
  165. package/dist/platform-adapter.js.map +1 -0
  166. package/dist/platform.d.ts +47 -0
  167. package/dist/platform.d.ts.map +1 -0
  168. package/dist/platform.js +175 -0
  169. package/dist/platform.js.map +1 -0
  170. package/dist/processor.d.ts +51 -0
  171. package/dist/processor.d.ts.map +1 -0
  172. package/dist/processor.js +655 -0
  173. package/dist/processor.js.map +1 -0
  174. package/dist/processor.test.d.ts +2 -0
  175. package/dist/processor.test.d.ts.map +1 -0
  176. package/dist/processor.test.js +629 -0
  177. package/dist/processor.test.js.map +1 -0
  178. package/dist/repositories/embeddings-sqlite.d.ts +38 -0
  179. package/dist/repositories/embeddings-sqlite.d.ts.map +1 -0
  180. package/dist/repositories/embeddings-sqlite.js +208 -0
  181. package/dist/repositories/embeddings-sqlite.js.map +1 -0
  182. package/dist/repositories/embeddings.d.ts +40 -0
  183. package/dist/repositories/embeddings.d.ts.map +1 -0
  184. package/dist/repositories/embeddings.js +136 -0
  185. package/dist/repositories/embeddings.js.map +1 -0
  186. package/dist/repositories/index.d.ts +2 -0
  187. package/dist/repositories/index.d.ts.map +1 -0
  188. package/dist/repositories/index.js +15 -0
  189. package/dist/repositories/index.js.map +1 -0
  190. package/dist/repositories/mcVersion.d.ts +16 -0
  191. package/dist/repositories/mcVersion.d.ts.map +1 -0
  192. package/dist/repositories/mcVersion.js +52 -0
  193. package/dist/repositories/mcVersion.js.map +1 -0
  194. package/dist/repositories/mod.d.ts +241 -0
  195. package/dist/repositories/mod.d.ts.map +1 -0
  196. package/dist/repositories/mod.js +342 -0
  197. package/dist/repositories/mod.js.map +1 -0
  198. package/dist/repositories/packs.d.ts +44 -0
  199. package/dist/repositories/packs.d.ts.map +1 -0
  200. package/dist/repositories/packs.js +138 -0
  201. package/dist/repositories/packs.js.map +1 -0
  202. package/dist/search-adapter.d.ts +34 -0
  203. package/dist/search-adapter.d.ts.map +1 -0
  204. package/dist/search-adapter.js +195 -0
  205. package/dist/search-adapter.js.map +1 -0
  206. package/dist/search.d.ts +6 -0
  207. package/dist/search.d.ts.map +1 -0
  208. package/dist/search.js +54 -0
  209. package/dist/search.js.map +1 -0
  210. package/dist/search.test.d.ts +2 -0
  211. package/dist/search.test.d.ts.map +1 -0
  212. package/dist/search.test.js +71 -0
  213. package/dist/search.test.js.map +1 -0
  214. package/dist/security.d.ts +98 -0
  215. package/dist/security.d.ts.map +1 -0
  216. package/dist/security.js +446 -0
  217. package/dist/security.js.map +1 -0
  218. package/dist/security.test.d.ts +2 -0
  219. package/dist/security.test.d.ts.map +1 -0
  220. package/dist/security.test.js +687 -0
  221. package/dist/security.test.js.map +1 -0
  222. package/dist/server.d.ts +2 -0
  223. package/dist/server.d.ts.map +1 -0
  224. package/dist/server.js +1465 -0
  225. package/dist/server.js.map +1 -0
  226. package/dist/setup.d.ts +2 -0
  227. package/dist/setup.d.ts.map +1 -0
  228. package/dist/setup.js +1113 -0
  229. package/dist/setup.js.map +1 -0
  230. package/dist/tools/bytecode.d.ts +129 -0
  231. package/dist/tools/bytecode.d.ts.map +1 -0
  232. package/dist/tools/bytecode.js +679 -0
  233. package/dist/tools/bytecode.js.map +1 -0
  234. package/dist/tools/catalog.d.ts +54 -0
  235. package/dist/tools/catalog.d.ts.map +1 -0
  236. package/dist/tools/catalog.js +249 -0
  237. package/dist/tools/catalog.js.map +1 -0
  238. package/dist/tools/compat-check.d.ts +23 -0
  239. package/dist/tools/compat-check.d.ts.map +1 -0
  240. package/dist/tools/compat-check.js +250 -0
  241. package/dist/tools/compat-check.js.map +1 -0
  242. package/dist/tools/compat-check.test.d.ts +2 -0
  243. package/dist/tools/compat-check.test.d.ts.map +1 -0
  244. package/dist/tools/compat-check.test.js +179 -0
  245. package/dist/tools/compat-check.test.js.map +1 -0
  246. package/dist/tools/diagnostics.d.ts +10 -0
  247. package/dist/tools/diagnostics.d.ts.map +1 -0
  248. package/dist/tools/diagnostics.js +133 -0
  249. package/dist/tools/diagnostics.js.map +1 -0
  250. package/dist/tools/diagnostics.test.d.ts +2 -0
  251. package/dist/tools/diagnostics.test.d.ts.map +1 -0
  252. package/dist/tools/diagnostics.test.js +168 -0
  253. package/dist/tools/diagnostics.test.js.map +1 -0
  254. package/dist/tools/docs.d.ts +19 -0
  255. package/dist/tools/docs.d.ts.map +1 -0
  256. package/dist/tools/docs.js +230 -0
  257. package/dist/tools/docs.js.map +1 -0
  258. package/dist/tools/embed-registry.d.ts +125 -0
  259. package/dist/tools/embed-registry.d.ts.map +1 -0
  260. package/dist/tools/embed-registry.js +560 -0
  261. package/dist/tools/embed-registry.js.map +1 -0
  262. package/dist/tools/gradle.d.ts +16 -0
  263. package/dist/tools/gradle.d.ts.map +1 -0
  264. package/dist/tools/gradle.js +182 -0
  265. package/dist/tools/gradle.js.map +1 -0
  266. package/dist/tools/graphify.d.ts +144 -0
  267. package/dist/tools/graphify.d.ts.map +1 -0
  268. package/dist/tools/graphify.js +798 -0
  269. package/dist/tools/graphify.js.map +1 -0
  270. package/dist/tools/graphify.test.d.ts +2 -0
  271. package/dist/tools/graphify.test.d.ts.map +1 -0
  272. package/dist/tools/graphify.test.js +39 -0
  273. package/dist/tools/graphify.test.js.map +1 -0
  274. package/dist/tools/ingest.d.ts +85 -0
  275. package/dist/tools/ingest.d.ts.map +1 -0
  276. package/dist/tools/ingest.js +477 -0
  277. package/dist/tools/ingest.js.map +1 -0
  278. package/dist/tools/ingest.test.d.ts +2 -0
  279. package/dist/tools/ingest.test.d.ts.map +1 -0
  280. package/dist/tools/ingest.test.js +340 -0
  281. package/dist/tools/ingest.test.js.map +1 -0
  282. package/dist/tools/kubejs.d.ts +37 -0
  283. package/dist/tools/kubejs.d.ts.map +1 -0
  284. package/dist/tools/kubejs.js +245 -0
  285. package/dist/tools/kubejs.js.map +1 -0
  286. package/dist/tools/mappings.d.ts +17 -0
  287. package/dist/tools/mappings.d.ts.map +1 -0
  288. package/dist/tools/mappings.js +85 -0
  289. package/dist/tools/mappings.js.map +1 -0
  290. package/dist/tools/mc-fts.d.ts +101 -0
  291. package/dist/tools/mc-fts.d.ts.map +1 -0
  292. package/dist/tools/mc-fts.js +279 -0
  293. package/dist/tools/mc-fts.js.map +1 -0
  294. package/dist/tools/mcmeta.d.ts +41 -0
  295. package/dist/tools/mcmeta.d.ts.map +1 -0
  296. package/dist/tools/mcmeta.js +365 -0
  297. package/dist/tools/mcmeta.js.map +1 -0
  298. package/dist/tools/mixin-scan.d.ts +113 -0
  299. package/dist/tools/mixin-scan.d.ts.map +1 -0
  300. package/dist/tools/mixin-scan.js +433 -0
  301. package/dist/tools/mixin-scan.js.map +1 -0
  302. package/dist/tools/mod-data.d.ts +83 -0
  303. package/dist/tools/mod-data.d.ts.map +1 -0
  304. package/dist/tools/mod-data.js +630 -0
  305. package/dist/tools/mod-data.js.map +1 -0
  306. package/dist/tools/mod-tags.d.ts +59 -0
  307. package/dist/tools/mod-tags.d.ts.map +1 -0
  308. package/dist/tools/mod-tags.js +279 -0
  309. package/dist/tools/mod-tags.js.map +1 -0
  310. package/dist/tools/mod-tags.test.d.ts +2 -0
  311. package/dist/tools/mod-tags.test.d.ts.map +1 -0
  312. package/dist/tools/mod-tags.test.js +75 -0
  313. package/dist/tools/mod-tags.test.js.map +1 -0
  314. package/dist/tools/modpacks-ch.d.ts +257 -0
  315. package/dist/tools/modpacks-ch.d.ts.map +1 -0
  316. package/dist/tools/modpacks-ch.js +516 -0
  317. package/dist/tools/modpacks-ch.js.map +1 -0
  318. package/dist/tools/packtools.d.ts +113 -0
  319. package/dist/tools/packtools.d.ts.map +1 -0
  320. package/dist/tools/packtools.js +809 -0
  321. package/dist/tools/packtools.js.map +1 -0
  322. package/dist/tools/packtools.test.d.ts +2 -0
  323. package/dist/tools/packtools.test.d.ts.map +1 -0
  324. package/dist/tools/packtools.test.js +99 -0
  325. package/dist/tools/packtools.test.js.map +1 -0
  326. package/dist/tools/platform.d.ts +68 -0
  327. package/dist/tools/platform.d.ts.map +1 -0
  328. package/dist/tools/platform.js +452 -0
  329. package/dist/tools/platform.js.map +1 -0
  330. package/dist/tools/primers.d.ts +36 -0
  331. package/dist/tools/primers.d.ts.map +1 -0
  332. package/dist/tools/primers.js +451 -0
  333. package/dist/tools/primers.js.map +1 -0
  334. package/dist/tools/reports.d.ts +19 -0
  335. package/dist/tools/reports.d.ts.map +1 -0
  336. package/dist/tools/reports.js +573 -0
  337. package/dist/tools/reports.js.map +1 -0
  338. package/dist/tools/source.d.ts +10 -0
  339. package/dist/tools/source.d.ts.map +1 -0
  340. package/dist/tools/source.js +101 -0
  341. package/dist/tools/source.js.map +1 -0
  342. package/dist/tools/vanilla-data.d.ts +127 -0
  343. package/dist/tools/vanilla-data.d.ts.map +1 -0
  344. package/dist/tools/vanilla-data.js +824 -0
  345. package/dist/tools/vanilla-data.js.map +1 -0
  346. package/dist/tools/vanilla.d.ts +171 -0
  347. package/dist/tools/vanilla.d.ts.map +1 -0
  348. package/dist/tools/vanilla.js +612 -0
  349. package/dist/tools/vanilla.js.map +1 -0
  350. package/dist/tools/version-diff.d.ts +113 -0
  351. package/dist/tools/version-diff.d.ts.map +1 -0
  352. package/dist/tools/version-diff.js +519 -0
  353. package/dist/tools/version-diff.js.map +1 -0
  354. package/dist/tools/version-diff.test.d.ts +2 -0
  355. package/dist/tools/version-diff.test.d.ts.map +1 -0
  356. package/dist/tools/version-diff.test.js +102 -0
  357. package/dist/tools/version-diff.test.js.map +1 -0
  358. package/dist/validate.d.ts +19 -0
  359. package/dist/validate.d.ts.map +1 -0
  360. package/dist/validate.js +54 -0
  361. package/dist/validate.js.map +1 -0
  362. package/dist/validate.test.d.ts +2 -0
  363. package/dist/validate.test.d.ts.map +1 -0
  364. package/dist/validate.test.js +73 -0
  365. package/dist/validate.test.js.map +1 -0
  366. package/package.json +62 -0
  367. package/prisma/backends/schema.sqlite.prisma +215 -0
  368. package/prisma/backends/template.db +0 -0
  369. package/prisma/schema.prisma +303 -0
  370. package/scripts/backup.mjs +151 -0
  371. package/scripts/build-template-db.mjs +38 -0
  372. package/scripts/check-atm10.mjs +27 -0
  373. package/scripts/check-sync.mjs +13 -0
  374. package/scripts/create-fts-index.mjs +50 -0
  375. package/scripts/enable-pgvector.mjs +90 -0
  376. package/scripts/enable-sqlite-vec.mjs +158 -0
  377. package/scripts/migrate-backend.mjs +188 -0
  378. package/scripts/migrate-embed-provenance.mjs +80 -0
  379. package/scripts/migrate-metadata-source.mjs +62 -0
  380. package/scripts/migrate-mod-source-files.mjs +67 -0
  381. package/scripts/post-update.mjs +77 -0
  382. 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"}