@adeficior/data-modifier 1.0.0-rc.9

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 (274) hide show
  1. package/dist/cli/codegen/registry.d.ts +3 -0
  2. package/dist/cli/codegen/registry.js +81 -0
  3. package/dist/cli/codegen/registry.js.map +1 -0
  4. package/dist/cli/config.d.ts +10 -0
  5. package/dist/cli/config.js +60 -0
  6. package/dist/cli/config.js.map +1 -0
  7. package/dist/cli/index.d.ts +1 -0
  8. package/dist/cli/index.js +34 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/common/id.d.ts +15 -0
  11. package/dist/common/id.js +42 -0
  12. package/dist/common/id.js.map +1 -0
  13. package/dist/common/ingredient.d.ts +49 -0
  14. package/dist/common/ingredient.js +108 -0
  15. package/dist/common/ingredient.js.map +1 -0
  16. package/dist/common/predicates.d.ts +7 -0
  17. package/dist/common/predicates.js +32 -0
  18. package/dist/common/predicates.js.map +1 -0
  19. package/dist/common/registry.d.ts +12 -0
  20. package/dist/common/registry.js +36 -0
  21. package/dist/common/registry.js.map +1 -0
  22. package/dist/common/result.d.ts +48 -0
  23. package/dist/common/result.js +37 -0
  24. package/dist/common/result.js.map +1 -0
  25. package/dist/emit/assets/blockstates.d.ts +18 -0
  26. package/dist/emit/assets/blockstates.js +46 -0
  27. package/dist/emit/assets/blockstates.js.map +1 -0
  28. package/dist/emit/assets/lang.d.ts +33 -0
  29. package/dist/emit/assets/lang.js +103 -0
  30. package/dist/emit/assets/lang.js.map +1 -0
  31. package/dist/emit/assets/models.d.ts +24 -0
  32. package/dist/emit/assets/models.js +59 -0
  33. package/dist/emit/assets/models.js.map +1 -0
  34. package/dist/emit/blacklist.d.ts +32 -0
  35. package/dist/emit/blacklist.js +99 -0
  36. package/dist/emit/blacklist.js.map +1 -0
  37. package/dist/emit/content/blockDefinition.d.ts +58 -0
  38. package/dist/emit/content/blockDefinition.js +58 -0
  39. package/dist/emit/content/blockDefinition.js.map +1 -0
  40. package/dist/emit/content/innerBlockDefinition.d.ts +12 -0
  41. package/dist/emit/content/innerBlockDefinition.js +32 -0
  42. package/dist/emit/content/innerBlockDefinition.js.map +1 -0
  43. package/dist/emit/content/itemDefinition.d.ts +58 -0
  44. package/dist/emit/content/itemDefinition.js +54 -0
  45. package/dist/emit/content/itemDefinition.js.map +1 -0
  46. package/dist/emit/custom.d.ts +15 -0
  47. package/dist/emit/custom.js +42 -0
  48. package/dist/emit/custom.js.map +1 -0
  49. package/dist/emit/data/loot.d.ts +48 -0
  50. package/dist/emit/data/loot.js +108 -0
  51. package/dist/emit/data/loot.js.map +1 -0
  52. package/dist/emit/data/recipe.d.ts +46 -0
  53. package/dist/emit/data/recipe.js +106 -0
  54. package/dist/emit/data/recipe.js.map +1 -0
  55. package/dist/emit/data/tags.d.ts +38 -0
  56. package/dist/emit/data/tags.js +115 -0
  57. package/dist/emit/data/tags.js.map +1 -0
  58. package/dist/emit/index.d.ts +11 -0
  59. package/dist/emit/index.js +1 -0
  60. package/dist/emit/index.js.map +1 -0
  61. package/dist/emit/polytoneTabs.d.ts +65 -0
  62. package/dist/emit/polytoneTabs.js +101 -0
  63. package/dist/emit/polytoneTabs.js.map +1 -0
  64. package/dist/emit/rule/index.d.ts +10 -0
  65. package/dist/emit/rule/index.js +10 -0
  66. package/dist/emit/rule/index.js.map +1 -0
  67. package/dist/emit/rule/lootTable.d.ts +14 -0
  68. package/dist/emit/rule/lootTable.js +47 -0
  69. package/dist/emit/rule/lootTable.js.map +1 -0
  70. package/dist/emit/rule/recipe.d.ts +16 -0
  71. package/dist/emit/rule/recipe.js +29 -0
  72. package/dist/emit/rule/recipe.js.map +1 -0
  73. package/dist/emit/ruled.d.ts +18 -0
  74. package/dist/emit/ruled.js +47 -0
  75. package/dist/emit/ruled.js.map +1 -0
  76. package/dist/error.d.ts +12 -0
  77. package/dist/error.js +45 -0
  78. package/dist/error.js.map +1 -0
  79. package/dist/index.d.ts +31 -0
  80. package/dist/index.js +12 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/loader/index.d.ts +16 -0
  83. package/dist/loader/index.js +40 -0
  84. package/dist/loader/index.js.map +1 -0
  85. package/dist/loader/lang.d.ts +7 -0
  86. package/dist/loader/lang.js +12 -0
  87. package/dist/loader/lang.js.map +1 -0
  88. package/dist/loader/loot.d.ts +7 -0
  89. package/dist/loader/loot.js +12 -0
  90. package/dist/loader/loot.js.map +1 -0
  91. package/dist/loader/pack.d.ts +62 -0
  92. package/dist/loader/pack.js +131 -0
  93. package/dist/loader/pack.js.map +1 -0
  94. package/dist/loader/recipe.d.ts +25 -0
  95. package/dist/loader/recipe.js +207 -0
  96. package/dist/loader/recipe.js.map +1 -0
  97. package/dist/loader/registry/dump.d.ts +19 -0
  98. package/dist/loader/registry/dump.js +74 -0
  99. package/dist/loader/registry/dump.js.map +1 -0
  100. package/dist/loader/registry/empty.d.ts +11 -0
  101. package/dist/loader/registry/empty.js +22 -0
  102. package/dist/loader/registry/empty.js.map +1 -0
  103. package/dist/loader/registry/index.d.ts +11 -0
  104. package/dist/loader/registry/index.js +1 -0
  105. package/dist/loader/registry/index.js.map +1 -0
  106. package/dist/loader/tags.d.ts +26 -0
  107. package/dist/loader/tags.js +131 -0
  108. package/dist/loader/tags.js.map +1 -0
  109. package/dist/parser/adAstra.d.ts +11 -0
  110. package/dist/parser/adAstra.js +6 -0
  111. package/dist/parser/adAstra.js.map +1 -0
  112. package/dist/parser/botania.d.ts +20 -0
  113. package/dist/parser/botania.js +11 -0
  114. package/dist/parser/botania.js.map +1 -0
  115. package/dist/parser/create.d.ts +4 -0
  116. package/dist/parser/create.js +3 -0
  117. package/dist/parser/create.js.map +1 -0
  118. package/dist/parser/farmersdelight.d.ts +4 -0
  119. package/dist/parser/farmersdelight.js +3 -0
  120. package/dist/parser/farmersdelight.js.map +1 -0
  121. package/dist/parser/index.d.ts +13 -0
  122. package/dist/parser/index.js +8 -0
  123. package/dist/parser/index.js.map +1 -0
  124. package/dist/parser/lootTable.d.ts +7 -0
  125. package/dist/parser/lootTable.js +70 -0
  126. package/dist/parser/lootTable.js.map +1 -0
  127. package/dist/parser/recipe/adAstra/conversion.d.ts +20 -0
  128. package/dist/parser/recipe/adAstra/conversion.js +33 -0
  129. package/dist/parser/recipe/adAstra/conversion.js.map +1 -0
  130. package/dist/parser/recipe/adAstra/hammering.d.ts +18 -0
  131. package/dist/parser/recipe/adAstra/hammering.js +27 -0
  132. package/dist/parser/recipe/adAstra/hammering.js.map +1 -0
  133. package/dist/parser/recipe/adAstra/index.d.ts +5 -0
  134. package/dist/parser/recipe/adAstra/index.js +1 -0
  135. package/dist/parser/recipe/adAstra/index.js.map +1 -0
  136. package/dist/parser/recipe/adAstra/inputOutput.d.ts +24 -0
  137. package/dist/parser/recipe/adAstra/inputOutput.js +42 -0
  138. package/dist/parser/recipe/adAstra/inputOutput.js.map +1 -0
  139. package/dist/parser/recipe/adAstra/nasaWorkbench.d.ts +20 -0
  140. package/dist/parser/recipe/adAstra/nasaWorkbench.js +30 -0
  141. package/dist/parser/recipe/adAstra/nasaWorkbench.js.map +1 -0
  142. package/dist/parser/recipe/adAstra/spaceStation.d.ts +19 -0
  143. package/dist/parser/recipe/adAstra/spaceStation.js +27 -0
  144. package/dist/parser/recipe/adAstra/spaceStation.js.map +1 -0
  145. package/dist/parser/recipe/botania/apothecary.d.ts +19 -0
  146. package/dist/parser/recipe/botania/apothecary.js +28 -0
  147. package/dist/parser/recipe/botania/apothecary.js.map +1 -0
  148. package/dist/parser/recipe/botania/brew.d.ts +18 -0
  149. package/dist/parser/recipe/botania/brew.js +24 -0
  150. package/dist/parser/recipe/botania/brew.js.map +1 -0
  151. package/dist/parser/recipe/botania/elvenTrade.d.ts +19 -0
  152. package/dist/parser/recipe/botania/elvenTrade.js +27 -0
  153. package/dist/parser/recipe/botania/elvenTrade.js.map +1 -0
  154. package/dist/parser/recipe/botania/gogWrapper.d.ts +22 -0
  155. package/dist/parser/recipe/botania/gogWrapper.js +34 -0
  156. package/dist/parser/recipe/botania/gogWrapper.js.map +1 -0
  157. package/dist/parser/recipe/botania/manaInfusion.d.ts +21 -0
  158. package/dist/parser/recipe/botania/manaInfusion.js +33 -0
  159. package/dist/parser/recipe/botania/manaInfusion.js.map +1 -0
  160. package/dist/parser/recipe/botania/nbtWrapper.d.ts +20 -0
  161. package/dist/parser/recipe/botania/nbtWrapper.js +30 -0
  162. package/dist/parser/recipe/botania/nbtWrapper.js.map +1 -0
  163. package/dist/parser/recipe/botania/orechid.d.ts +35 -0
  164. package/dist/parser/recipe/botania/orechid.js +74 -0
  165. package/dist/parser/recipe/botania/orechid.js.map +1 -0
  166. package/dist/parser/recipe/botania/pureDaisy.d.ts +19 -0
  167. package/dist/parser/recipe/botania/pureDaisy.js +30 -0
  168. package/dist/parser/recipe/botania/pureDaisy.js.map +1 -0
  169. package/dist/parser/recipe/botania/runicAltar.d.ts +19 -0
  170. package/dist/parser/recipe/botania/runicAltar.js +27 -0
  171. package/dist/parser/recipe/botania/runicAltar.js.map +1 -0
  172. package/dist/parser/recipe/botania/terraPlate.d.ts +19 -0
  173. package/dist/parser/recipe/botania/terraPlate.js +27 -0
  174. package/dist/parser/recipe/botania/terraPlate.js.map +1 -0
  175. package/dist/parser/recipe/create/assembly.d.ts +25 -0
  176. package/dist/parser/recipe/create/assembly.js +45 -0
  177. package/dist/parser/recipe/create/assembly.js.map +1 -0
  178. package/dist/parser/recipe/create/processing.d.ts +21 -0
  179. package/dist/parser/recipe/create/processing.js +27 -0
  180. package/dist/parser/recipe/create/processing.js.map +1 -0
  181. package/dist/parser/recipe/farmersdelight/cooking.d.ts +22 -0
  182. package/dist/parser/recipe/farmersdelight/cooking.js +29 -0
  183. package/dist/parser/recipe/farmersdelight/cooking.js.map +1 -0
  184. package/dist/parser/recipe/farmersdelight/cutting.d.ts +23 -0
  185. package/dist/parser/recipe/farmersdelight/cutting.js +38 -0
  186. package/dist/parser/recipe/farmersdelight/cutting.js.map +1 -0
  187. package/dist/parser/recipe/forge/conditional.d.ts +25 -0
  188. package/dist/parser/recipe/forge/conditional.js +45 -0
  189. package/dist/parser/recipe/forge/conditional.js.map +1 -0
  190. package/dist/parser/recipe/ignored.d.ts +10 -0
  191. package/dist/parser/recipe/ignored.js +16 -0
  192. package/dist/parser/recipe/ignored.js.map +1 -0
  193. package/dist/parser/recipe/index.d.ts +19 -0
  194. package/dist/parser/recipe/index.js +22 -0
  195. package/dist/parser/recipe/index.js.map +1 -0
  196. package/dist/parser/recipe/quark/exclusion.d.ts +20 -0
  197. package/dist/parser/recipe/quark/exclusion.js +32 -0
  198. package/dist/parser/recipe/quark/exclusion.js.map +1 -0
  199. package/dist/parser/recipe/roots/component.d.ts +18 -0
  200. package/dist/parser/recipe/roots/component.js +24 -0
  201. package/dist/parser/recipe/roots/component.js.map +1 -0
  202. package/dist/parser/recipe/roots/ritual.d.ts +22 -0
  203. package/dist/parser/recipe/roots/ritual.js +32 -0
  204. package/dist/parser/recipe/roots/ritual.js.map +1 -0
  205. package/dist/parser/recipe/sullys/polishing.d.ts +19 -0
  206. package/dist/parser/recipe/sullys/polishing.js +27 -0
  207. package/dist/parser/recipe/sullys/polishing.js.map +1 -0
  208. package/dist/parser/recipe/thermal/catalyst.d.ts +22 -0
  209. package/dist/parser/recipe/thermal/catalyst.js +24 -0
  210. package/dist/parser/recipe/thermal/catalyst.js.map +1 -0
  211. package/dist/parser/recipe/thermal/fuel.d.ts +18 -0
  212. package/dist/parser/recipe/thermal/fuel.js +24 -0
  213. package/dist/parser/recipe/thermal/fuel.js.map +1 -0
  214. package/dist/parser/recipe/thermal/index.d.ts +22 -0
  215. package/dist/parser/recipe/thermal/index.js +36 -0
  216. package/dist/parser/recipe/thermal/index.js.map +1 -0
  217. package/dist/parser/recipe/thermal/ingredient.d.ts +21 -0
  218. package/dist/parser/recipe/thermal/ingredient.js +43 -0
  219. package/dist/parser/recipe/thermal/ingredient.js.map +1 -0
  220. package/dist/parser/recipe/thermal/treeExtraction.d.ts +24 -0
  221. package/dist/parser/recipe/thermal/treeExtraction.js +47 -0
  222. package/dist/parser/recipe/thermal/treeExtraction.js.map +1 -0
  223. package/dist/parser/recipe/vanilla/shaped.d.ts +19 -0
  224. package/dist/parser/recipe/vanilla/shaped.js +28 -0
  225. package/dist/parser/recipe/vanilla/shaped.js.map +1 -0
  226. package/dist/parser/recipe/vanilla/shapeless.d.ts +18 -0
  227. package/dist/parser/recipe/vanilla/shapeless.js +27 -0
  228. package/dist/parser/recipe/vanilla/shapeless.js.map +1 -0
  229. package/dist/parser/recipe/vanilla/smelting.d.ts +19 -0
  230. package/dist/parser/recipe/vanilla/smelting.js +27 -0
  231. package/dist/parser/recipe/vanilla/smelting.js.map +1 -0
  232. package/dist/parser/recipe/vanilla/smithing.d.ts +19 -0
  233. package/dist/parser/recipe/vanilla/smithing.js +28 -0
  234. package/dist/parser/recipe/vanilla/smithing.js.map +1 -0
  235. package/dist/parser/recipe/vanilla/stonecutting.d.ts +20 -0
  236. package/dist/parser/recipe/vanilla/stonecutting.js +36 -0
  237. package/dist/parser/recipe/vanilla/stonecutting.js.map +1 -0
  238. package/dist/parser/roots.d.ts +4 -0
  239. package/dist/parser/roots.js +3 -0
  240. package/dist/parser/roots.js.map +1 -0
  241. package/dist/parser/thermal.d.ts +10 -0
  242. package/dist/parser/thermal.js +6 -0
  243. package/dist/parser/thermal.js.map +1 -0
  244. package/dist/schema/assets/blockstate.d.ts +10 -0
  245. package/dist/schema/assets/blockstate.js +1 -0
  246. package/dist/schema/assets/blockstate.js.map +1 -0
  247. package/dist/schema/assets/lang.d.ts +3 -0
  248. package/dist/schema/assets/lang.js +3 -0
  249. package/dist/schema/assets/lang.js.map +1 -0
  250. package/dist/schema/assets/model.d.ts +27 -0
  251. package/dist/schema/assets/model.js +1 -0
  252. package/dist/schema/assets/model.js.map +1 -0
  253. package/dist/schema/content/blockDefinition.d.ts +11 -0
  254. package/dist/schema/content/blockDefinition.js +1 -0
  255. package/dist/schema/content/blockDefinition.js.map +1 -0
  256. package/dist/schema/content/itemDefinition.d.ts +14 -0
  257. package/dist/schema/content/itemDefinition.js +1 -0
  258. package/dist/schema/content/itemDefinition.js.map +1 -0
  259. package/dist/schema/data/loot.d.ts +1151 -0
  260. package/dist/schema/data/loot.js +76 -0
  261. package/dist/schema/data/loot.js.map +1 -0
  262. package/dist/schema/data/recipe.d.ts +13 -0
  263. package/dist/schema/data/recipe.js +1 -0
  264. package/dist/schema/data/recipe.js.map +1 -0
  265. package/dist/schema/data/tag.d.ts +11 -0
  266. package/dist/schema/data/tag.js +6 -0
  267. package/dist/schema/data/tag.js.map +1 -0
  268. package/dist/stubTypes.d.ts +7 -0
  269. package/dist/stubTypes.js +1 -0
  270. package/dist/stubTypes.js.map +1 -0
  271. package/dist/textHelper.d.ts +3 -0
  272. package/dist/textHelper.js +20 -0
  273. package/dist/textHelper.js.map +1 -0
  274. package/package.json +96 -0
@@ -0,0 +1,3 @@
1
+ import type RegistryLookup from "../../loader/registry/index.js";
2
+ export declare function generateRegistryTypes(lookup: RegistryLookup, outputDirectory: string): Promise<void>;
3
+ export declare function generateStubTypes(outputDirectory: string): Promise<void>;
@@ -0,0 +1,81 @@
1
+ import { existsSync, mkdirSync, writeFileSync } from "fs";
2
+ import { camelCase } from "lodash-es";
3
+ import { join, resolve } from "path";
4
+ import { format } from "prettier";
5
+ import { createId, encodeId } from "../../common/id.js";
6
+ const module = "@adeficior/data-modifier/generated";
7
+ function idType(id) {
8
+ const cased = camelCase(id.path.replaceAll("/", " "));
9
+ return cased.charAt(0).toUpperCase() + cased.substring(1);
10
+ }
11
+ function idTemplate(type, values) {
12
+ return `
13
+ export type ${type}Id = ${values.map((it) => `'${it}'`).join(" | ")}
14
+ `;
15
+ }
16
+ function inferRegistryTemplate(keys) {
17
+ if (keys.length === 0)
18
+ throw new Error("no registry found");
19
+ return `
20
+ export type InferIds<T extends RegistryId> = {
21
+ ${keys
22
+ .map((it) => `'${encodeId(it)}': ${idType(createId(it))}Id`)
23
+ .join("\n")}
24
+ }[T]
25
+ `;
26
+ }
27
+ function moduleTemplate(...content) {
28
+ const replaced = `
29
+ declare module '${module}' {
30
+ ${content.join("\n\n")}
31
+ }`;
32
+ return format(replaced, { parser: "typescript" });
33
+ }
34
+ function createTypesDirectory(base) {
35
+ const dir = resolve(base, "@types", "generated");
36
+ if (!existsSync(dir))
37
+ mkdirSync(dir, { recursive: true });
38
+ return dir;
39
+ }
40
+ export async function generateRegistryTypes(lookup, outputDirectory) {
41
+ const typesDirectory = createTypesDirectory(outputDirectory);
42
+ const registryBlock = idTemplate("Registry", lookup.registries());
43
+ const inferIdBlock = inferRegistryTemplate(lookup.registries());
44
+ const idBlocks = lookup
45
+ .registries()
46
+ .map(createId)
47
+ .filter((it) => it.namespace === "minecraft")
48
+ .map((id) => {
49
+ const keys = [...lookup.keys(id)].sort();
50
+ const type = idType(id);
51
+ return idTemplate(type, keys);
52
+ });
53
+ writeFileSync(join(typesDirectory, "index.d.ts"), await moduleTemplate(registryBlock, ...idBlocks, inferIdBlock));
54
+ }
55
+ export async function generateStubTypes(outputDirectory) {
56
+ const typesDirectory = createTypesDirectory(outputDirectory);
57
+ const registryStub = resolve(typesDirectory, "index.d.ts");
58
+ const stubIdType = "`${string}:${string}`";
59
+ writeFileSync(registryStub, await format(`
60
+ declare module '@adeficior/data-modifier/generated' {
61
+ type StubId = ${stubIdType}
62
+
63
+ export type RegistryId = StubId
64
+
65
+ export type CreativeModeTabId = StubId
66
+
67
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
68
+ export type InferIds<T extends RegistryId> = StubId
69
+
70
+ export type ItemId = StubId
71
+
72
+ export type BlockId = StubId
73
+
74
+ export type FluidId = StubId
75
+
76
+ export type RecipeSerializerId = StubId
77
+
78
+ export type EntityTypeId = StubId
79
+ }`, { parser: "typescript" }));
80
+ }
81
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/codegen/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Logger } from "@adeficior/pack-resolver";
2
+ export type CliAction = "help" | "codegen";
3
+ export default interface CliConfig {
4
+ resources: string[];
5
+ output?: string;
6
+ registryDump?: string;
7
+ action: CliAction;
8
+ }
9
+ export declare function fromArgs(logger: Logger, argv?: string[]): CliConfig;
10
+ export declare function printHelp(logger: Logger): void;
@@ -0,0 +1,60 @@
1
+ import parseArgs from "arg";
2
+ import commandLineUsage from "command-line-usage";
3
+ export function fromArgs(logger, argv = process.argv) {
4
+ const args = parseArgs({
5
+ "--help": Boolean,
6
+ "--resources": [String],
7
+ "--output": String,
8
+ "--registry-dump": String,
9
+ "-h": "--help",
10
+ }, { argv, permissive: true });
11
+ if (args["--help"]) {
12
+ return { action: "help", resources: [] };
13
+ }
14
+ const action = args["--help"] ? "help" : args._[2];
15
+ if (!action)
16
+ throw new Error("no action specified");
17
+ return {
18
+ resources: args["--resources"] ?? [],
19
+ registryDump: args["--registry-dump"],
20
+ output: args["--output"],
21
+ action,
22
+ };
23
+ }
24
+ export function printHelp(logger) {
25
+ const usage = commandLineUsage([
26
+ {
27
+ header: "Data Modifier",
28
+ content: "Generate datapacks by modifying default resources",
29
+ },
30
+ {
31
+ header: "Options",
32
+ optionList: [
33
+ {
34
+ name: "resources",
35
+ typeLabel: "directory[]",
36
+ multiple: true,
37
+ description: "folder to load resources from",
38
+ },
39
+ {
40
+ name: "output",
41
+ typeLabel: "file",
42
+ description: "output folder where generated files are placed",
43
+ },
44
+ {
45
+ name: "registry-dump",
46
+ typeLabel: "directory",
47
+ description: "folder to load registry dump files from",
48
+ },
49
+ {
50
+ name: "help",
51
+ alias: "h",
52
+ type: Boolean,
53
+ description: "Prints this usage guide",
54
+ },
55
+ ],
56
+ },
57
+ ]);
58
+ logger.info(usage);
59
+ }
60
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,KAAK,CAAC;AAC5B,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAWlD,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI;IAC1D,MAAM,IAAI,GAAG,SAAS,CACpB;QACE,QAAQ,EAAE,OAAO;QACjB,aAAa,EAAE,CAAC,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM;QAClB,iBAAiB,EAAE,MAAM;QACzB,IAAI,EAAE,QAAQ;KACf,EACD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAC3B,CAAC;IAEF,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAe,CAAC;IAElE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAEpD,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QACpC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC;QACrC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;QACxB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC7B;YACE,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,mDAAmD;SAC7D;QACD;YACE,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAE,aAAa;oBACxB,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,MAAM;oBACjB,WAAW,EAAE,gDAAgD;iBAC9D;gBACD;oBACE,IAAI,EAAE,eAAe;oBACrB,SAAS,EAAE,WAAW;oBACtB,WAAW,EAAE,yCAAyC;iBACvD;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,GAAG;oBACV,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,yBAAyB;iBACvC;aACF;SACF;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import { createLogger, createResolver } from "@adeficior/pack-resolver";
2
+ import { existsSync } from "fs";
3
+ import RegistryDumpLoader from "../loader/registry/dump.js";
4
+ import { generateRegistryTypes, generateStubTypes, } from "./codegen/registry.js";
5
+ import { fromArgs, printHelp } from "./config.js";
6
+ const logger = createLogger();
7
+ runCli().catch((e) => logger.error("an error occurred", e));
8
+ async function runCli() {
9
+ const config = fromArgs(logger);
10
+ switch (config.action) {
11
+ case "help":
12
+ return printHelp(logger);
13
+ case "codegen":
14
+ return runCodegen(config);
15
+ default:
16
+ throw new Error(`unknown action '${config.action}'`);
17
+ }
18
+ }
19
+ async function runCodegen(config) {
20
+ if (!config.output)
21
+ throw new Error("output not specified");
22
+ if (config.registryDump && existsSync(config.registryDump)) {
23
+ const resolver = createResolver({ from: config.registryDump });
24
+ const registry = new RegistryDumpLoader(logger);
25
+ await registry.extract(resolver);
26
+ await generateRegistryTypes(registry, config.output);
27
+ logger.info("successfully generated registry entry types");
28
+ }
29
+ else {
30
+ logger.warn("registry dump missing, generating stub types");
31
+ await generateStubTypes(config.output);
32
+ }
33
+ }
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;AAE9B,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC;AAE5D,KAAK,UAAU,MAAM;IACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3B,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAiB;IACzC,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAE5D,IAAI,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEjC,MAAM,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC5D,MAAM,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import zod from "zod";
2
+ export type Id = Readonly<{
3
+ namespace: string;
4
+ path: string;
5
+ isTag?: boolean;
6
+ }>;
7
+ export type IdInput<T extends string = string> = T | Id;
8
+ export type NormalizedId<T extends string = string> = T extends `${string}:${string}` ? T : T extends `#${infer R}` ? `#${string}:${R}` : `${string}:${T}`;
9
+ export type TagInput = IdInput<`#${string}`>;
10
+ export declare const IdSchema: zod.ZodString;
11
+ export declare const IdOrTagSchema: zod.ZodString;
12
+ export declare function createId(from: IdInput): Id;
13
+ export declare function encodeId<T extends string>(from: IdInput<T>): NormalizedId<T>;
14
+ export declare function prefix(id: IdInput, prefix: string): `${string}:${string}`;
15
+ export declare function suffix(id: IdInput, suffix: string): `${string}:${string}`;
@@ -0,0 +1,42 @@
1
+ import zod from "zod";
2
+ export const IdSchema = zod
3
+ .string()
4
+ .regex(/^([a-z0-9_.-]+:)?[a-z0-9/._-]+$/i)
5
+ .describe("Valid ID");
6
+ export const IdOrTagSchema = zod
7
+ .string()
8
+ .regex(/^#?([a-z0-9_.-]+:)?[a-z0-9/._-]+$/i)
9
+ .describe("Valid ID or Tag-ID");
10
+ export function createId(from) {
11
+ if (typeof from !== "string")
12
+ return from;
13
+ if (from.startsWith("#"))
14
+ return { ...createId(from.substring(1)), isTag: true };
15
+ IdSchema.parse(from);
16
+ if (!from.includes(":"))
17
+ return { namespace: "minecraft", path: from };
18
+ const [namespace, path] = from.split(":");
19
+ return { namespace, path };
20
+ }
21
+ export function encodeId(from) {
22
+ if (typeof from === "string") {
23
+ IdOrTagSchema.parse(from);
24
+ if (from.includes(":"))
25
+ return from;
26
+ if (from.startsWith("#"))
27
+ return `#minecraft:${from.substring(1)}`;
28
+ return `minecraft:${from}`;
29
+ }
30
+ if (from.isTag)
31
+ return `#${from.namespace}:${from.path}`;
32
+ return `${from.namespace}:${from.path}`;
33
+ }
34
+ export function prefix(id, prefix) {
35
+ const { path, ...rest } = createId(id);
36
+ return encodeId({ ...rest, path: prefix + path });
37
+ }
38
+ export function suffix(id, suffix) {
39
+ const { path, ...rest } = createId(id);
40
+ return encodeId({ ...rest, path: path + suffix });
41
+ }
42
+ //# sourceMappingURL=id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/common/id.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAmBtB,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG;KACxB,MAAM,EAAE;KACR,KAAK,CAAC,kCAAkC,CAAC;KACzC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACxB,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG;KAC7B,MAAM,EAAE;KACR,KAAK,CAAC,oCAAoC,CAAC;KAC3C,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AAElC,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACtB,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEzD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvE,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;IAC9D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAmB,IAAgB;IACzD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAuB,CAAC;QACvD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACtB,OAAO,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAqB,CAAC;QAC9D,OAAO,aAAa,IAAI,EAAqB,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAqB,CAAC;IAC5E,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAqB,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAW,EAAE,MAAc;IAChD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAW,EAAE,MAAc;IAChD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { ItemId } from "@adeficior/data-modifier/generated";
2
+ import type { Logger } from "@adeficior/pack-resolver";
3
+ import zod from "zod";
4
+ import type RegistryLookup from "../loader/registry/index.js";
5
+ import type { TagRegistryHolder } from "../loader/tags.js";
6
+ import type { Block, FluidStack, ItemStack } from "./result.js";
7
+ export declare const ItemTagSchema: zod.ZodObject<{
8
+ tag: zod.ZodString;
9
+ count: zod.ZodOptional<zod.ZodNumber>;
10
+ }, "strip", zod.ZodTypeAny, {
11
+ tag: string;
12
+ count?: number | undefined;
13
+ }, {
14
+ tag: string;
15
+ count?: number | undefined;
16
+ }>;
17
+ export type ItemTag = zod.infer<typeof ItemTagSchema>;
18
+ export declare const FluidTagSchema: zod.ZodObject<{
19
+ fluidTag: zod.ZodString;
20
+ amount: zod.ZodOptional<zod.ZodNumber>;
21
+ }, "strip", zod.ZodTypeAny, {
22
+ fluidTag: string;
23
+ amount?: number | undefined;
24
+ }, {
25
+ fluidTag: string;
26
+ amount?: number | undefined;
27
+ }>;
28
+ export type FluidTag = zod.infer<typeof FluidTagSchema>;
29
+ export declare const BlockTagSchema: zod.ZodObject<{
30
+ blockTag: zod.ZodString;
31
+ weight: zod.ZodOptional<zod.ZodNumber>;
32
+ }, "strip", zod.ZodTypeAny, {
33
+ blockTag: string;
34
+ weight?: number | undefined;
35
+ }, {
36
+ blockTag: string;
37
+ weight?: number | undefined;
38
+ }>;
39
+ export type BlockTag = zod.infer<typeof BlockTagSchema>;
40
+ export type ItemIngredient = ItemStack | ItemTag;
41
+ export type FluidIngredient = FluidStack | FluidTag;
42
+ export type BlockIngredient = Block | BlockTag;
43
+ export type Ingredient = ItemIngredient | FluidIngredient | BlockIngredient | Ingredient[];
44
+ export type IngredientInput = Ingredient | ItemId | `#${string}` | IngredientInput[];
45
+ export declare function createIngredient(input: unknown, lookup?: RegistryLookup): Ingredient;
46
+ export type Predicate<T> = (value: T, logger?: Logger) => boolean;
47
+ export type CommonTest<T> = RegExp | Predicate<T> | T;
48
+ export type IngredientTest = CommonTest<Ingredient> | ItemId | `#${string}`;
49
+ export declare function resolveIngredientTest(test: IngredientTest, tags: TagRegistryHolder, lookup: RegistryLookup | undefined): Predicate<IngredientInput>;
@@ -0,0 +1,108 @@
1
+ import { exists } from "@adeficior/pack-resolver";
2
+ import zod from "zod";
3
+ import { IllegalShapeError, tryCatching } from "../error.js";
4
+ import { createId, encodeId, IdSchema } from "./id.js";
5
+ import { resolveCommonTest } from "./predicates.js";
6
+ import { createResult } from "./result.js";
7
+ export const ItemTagSchema = zod.object({
8
+ tag: IdSchema,
9
+ count: zod.number().optional(),
10
+ });
11
+ export const FluidTagSchema = zod.object({
12
+ fluidTag: IdSchema,
13
+ amount: zod.number().optional(),
14
+ });
15
+ export const BlockTagSchema = zod.object({
16
+ blockTag: IdSchema,
17
+ weight: zod.number().optional(),
18
+ });
19
+ function createUnvalidatedIngredient(input, lookup) {
20
+ if (!input)
21
+ throw new IllegalShapeError("ingredient input may not be null");
22
+ if (typeof input === "string") {
23
+ if (input.startsWith("#"))
24
+ return { tag: input.substring(1) };
25
+ else
26
+ return { item: input };
27
+ }
28
+ if (Array.isArray(input)) {
29
+ return input.map((it) => createIngredient(it, lookup));
30
+ }
31
+ if (typeof input === "object") {
32
+ if ("tag" in input)
33
+ return ItemTagSchema.parse(input);
34
+ if ("fluidTag" in input)
35
+ return FluidTagSchema.parse(input);
36
+ if ("blockTag" in input)
37
+ return BlockTagSchema.parse(input);
38
+ return createResult(input, lookup);
39
+ }
40
+ throw new IllegalShapeError("unknown ingredient shape", input);
41
+ }
42
+ export function createIngredient(input, lookup) {
43
+ const unvalidated = createUnvalidatedIngredient(input, lookup);
44
+ lookup?.validate(unvalidated);
45
+ return unvalidated;
46
+ }
47
+ function resolveIdIngredientTest(test, tags, idSupplier) {
48
+ function resolveIds(it) {
49
+ if (Array.isArray(it)) {
50
+ return it.flatMap(resolveIds);
51
+ }
52
+ else {
53
+ return [idSupplier(createIngredient(it))].filter(exists);
54
+ }
55
+ }
56
+ return resolveCommonTest(test, (input, logger) => tryCatching(logger, () => {
57
+ return resolveIds(input).map(encodeId);
58
+ }) ?? [], tags);
59
+ }
60
+ function extractItemID(ingredient) {
61
+ if ("tag" in ingredient)
62
+ return { ...createId(ingredient.tag), isTag: true };
63
+ if ("item" in ingredient)
64
+ return createId(ingredient.item);
65
+ return null;
66
+ }
67
+ function extractFluidID(ingredient) {
68
+ if ("fluidTag" in ingredient)
69
+ return { ...createId(ingredient.fluidTag), isTag: true };
70
+ if ("fluid" in ingredient)
71
+ return createId(ingredient.fluid);
72
+ return null;
73
+ }
74
+ function extractBlockID(ingredient) {
75
+ if ("blockTag" in ingredient)
76
+ return { ...createId(ingredient.blockTag), isTag: true };
77
+ if ("block" in ingredient)
78
+ return createId(ingredient.block);
79
+ return null;
80
+ }
81
+ export function resolveIngredientTest(test, tags, lookup) {
82
+ if (typeof test === "string") {
83
+ if (!test.startsWith("#"))
84
+ return resolveIngredientTest({ item: test }, tags, lookup);
85
+ return resolveIngredientTest({ tag: test.substring(1) }, tags, lookup);
86
+ }
87
+ if (test instanceof RegExp) {
88
+ return resolveIdIngredientTest(test, tags.registry("item"), extractItemID);
89
+ }
90
+ if (typeof test === "function") {
91
+ return (it, logger) => test(createIngredient(it), logger);
92
+ }
93
+ lookup?.validate(test);
94
+ if ("item" in test)
95
+ return resolveIdIngredientTest(encodeId(test.item), tags.registry("item"), extractItemID);
96
+ if ("tag" in test)
97
+ return resolveIdIngredientTest(`#${encodeId(test.tag)}`, tags.registry("item"), extractItemID);
98
+ if ("fluid" in test)
99
+ return resolveIdIngredientTest(encodeId(test.fluid), tags.registry("fluid"), extractFluidID);
100
+ if ("fluidTag" in test)
101
+ return resolveIdIngredientTest(`#${encodeId(test.fluidTag)}`, tags.registry("fluid"), extractFluidID);
102
+ if ("block" in test)
103
+ return resolveIdIngredientTest(encodeId(test.block), tags.registry("block"), extractBlockID);
104
+ if ("blockTag" in test)
105
+ return resolveIdIngredientTest(`#${encodeId(test.blockTag)}`, tags.registry("block"), extractBlockID);
106
+ return () => false;
107
+ }
108
+ //# sourceMappingURL=ingredient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingredient.js","sourceRoot":"","sources":["../../src/common/ingredient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { InferIds, RegistryId } from "@adeficior/data-modifier/generated";
2
+ import type { Logger } from "@adeficior/pack-resolver";
3
+ import type { TagRegistry } from "../loader/tags.js";
4
+ import type { IdInput, NormalizedId } from "./id.js";
5
+ import type { CommonTest, Predicate } from "./ingredient.js";
6
+ export declare function resolveCommonTest<TEntry, TId extends string>(test: CommonTest<TId>, resolve: (value: TEntry, logger?: Logger) => NormalizedId<TId>[], tags?: TagRegistry<RegistryId>): Predicate<TEntry>;
7
+ export declare function resolveIDTest<T extends RegistryId>(test: CommonTest<NormalizedId<InferIds<T>>>, tags?: TagRegistry<T>): Predicate<IdInput<InferIds<T>>>;
@@ -0,0 +1,32 @@
1
+ import { encodeId } from "./id.js";
2
+ export function resolveCommonTest(test, resolve, tags) {
3
+ if (typeof test === "function") {
4
+ return (entry, logger) => resolve(entry, logger).some((id) => test(id, logger));
5
+ }
6
+ else if (test instanceof RegExp) {
7
+ return (ingredient, logger) => {
8
+ return resolve(ingredient, logger).some((it) => test.test(it));
9
+ };
10
+ }
11
+ else if (test.startsWith("#")) {
12
+ return (ingredient, logger) => {
13
+ return resolve(ingredient, logger).some((id) => {
14
+ if (id.startsWith("#") && test === id)
15
+ return true;
16
+ else if (tags)
17
+ return tags.contains(test, id) ?? false;
18
+ else
19
+ throw new Error("Cannot parse ID test without tags");
20
+ });
21
+ };
22
+ }
23
+ else {
24
+ return (ingredient, logger) => {
25
+ return resolve(ingredient, logger).includes(encodeId(test));
26
+ };
27
+ }
28
+ }
29
+ export function resolveIDTest(test, tags) {
30
+ return resolveCommonTest(test, (it) => [encodeId(it)], tags);
31
+ }
32
+ //# sourceMappingURL=predicates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../src/common/predicates.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,MAAM,UAAU,iBAAiB,CAC/B,IAAqB,EACrB,OAAgE,EAChE,IAA8B;IAE9B,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CACvB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;SAAM,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE;YAC5B,OAAO,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC;IACJ,CAAC;SAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE;YAC5B,OAAO,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,EAAE;oBAAE,OAAO,IAAI,CAAC;qBAC9C,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAgB,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC;;oBAC9D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE;YAC5B,OAAO,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAA2C,EAC3C,IAAqB;IAErB,OAAO,iBAAiB,CACtB,IAAI,EACJ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EACtB,IAAI,CACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Id, IdInput, NormalizedId } from "./id.js";
2
+ export default class Registry<TEntry, TId extends string = string> {
3
+ private readonly entries;
4
+ set(key: IdInput<TId>, value: TEntry): void;
5
+ get(key: IdInput<TId>): TEntry | undefined;
6
+ getOrPut(key: IdInput<TId>, defaultValue: () => TEntry): TEntry;
7
+ forEach(consumer: (value: TEntry, key: Id) => void): void;
8
+ forEachAsync(consumer: (value: TEntry, key: Id) => Promise<void>): Promise<void>;
9
+ clear(): void;
10
+ keys(): NormalizedId<TId>[];
11
+ has(key: IdInput<TId>): boolean;
12
+ }
@@ -0,0 +1,36 @@
1
+ import { createId, encodeId } from "./id.js";
2
+ export default class Registry {
3
+ entries = new Map();
4
+ set(key, value) {
5
+ this.entries.set(encodeId(key), value);
6
+ }
7
+ get(key) {
8
+ return this.entries.get(encodeId(key));
9
+ }
10
+ getOrPut(key, defaultValue) {
11
+ const existing = this.get(key);
12
+ if (existing)
13
+ return existing;
14
+ const created = defaultValue();
15
+ this.set(key, created);
16
+ return created;
17
+ }
18
+ forEach(consumer) {
19
+ this.entries.forEach((value, key) => consumer(value, createId(key)));
20
+ }
21
+ async forEachAsync(consumer) {
22
+ const promises = [];
23
+ this.forEach((...args) => promises.push(consumer(...args)));
24
+ await Promise.all(promises);
25
+ }
26
+ clear() {
27
+ this.entries.clear();
28
+ }
29
+ keys() {
30
+ return [...this.entries.keys()];
31
+ }
32
+ has(key) {
33
+ return this.entries.has(encodeId(key));
34
+ }
35
+ }
36
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/common/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,QAAQ;IACV,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEhE,GAAG,CAAC,GAAiB,EAAE,KAAa;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,GAAG,CAAC,GAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ,CAAC,GAAiB,EAAE,YAA0B;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,QAA0C;QAChD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,QAAmD;QAEnD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,GAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,48 @@
1
+ import type { BlockId, FluidId, ItemId } from "@adeficior/data-modifier/generated";
2
+ import zod from "zod";
3
+ import type RegistryLookup from "../loader/registry/index.js";
4
+ export declare const ItemStackSchema: zod.ZodObject<{
5
+ item: zod.ZodString;
6
+ count: zod.ZodOptional<zod.ZodNumber>;
7
+ chance: zod.ZodOptional<zod.ZodNumber>;
8
+ }, "strip", zod.ZodTypeAny, {
9
+ item: string;
10
+ count?: number | undefined;
11
+ chance?: number | undefined;
12
+ }, {
13
+ item: string;
14
+ count?: number | undefined;
15
+ chance?: number | undefined;
16
+ }>;
17
+ export type ItemStack = Omit<zod.infer<typeof ItemStackSchema>, "item"> & {
18
+ item: ItemId;
19
+ };
20
+ export declare const FluidStackSchema: zod.ZodObject<{
21
+ fluid: zod.ZodString;
22
+ amount: zod.ZodOptional<zod.ZodNumber>;
23
+ chance: zod.ZodOptional<zod.ZodNumber>;
24
+ }, "strip", zod.ZodTypeAny, {
25
+ fluid: string;
26
+ chance?: number | undefined;
27
+ amount?: number | undefined;
28
+ }, {
29
+ fluid: string;
30
+ chance?: number | undefined;
31
+ amount?: number | undefined;
32
+ }>;
33
+ export type FluidStack = Omit<zod.infer<typeof FluidStackSchema>, "fluid"> & {
34
+ fluid: FluidId;
35
+ };
36
+ export declare const BlockSchema: zod.ZodObject<{
37
+ block: zod.ZodString;
38
+ }, "strip", zod.ZodTypeAny, {
39
+ block: string;
40
+ }, {
41
+ block: string;
42
+ }>;
43
+ export type Block = Omit<zod.infer<typeof BlockSchema>, "block"> & {
44
+ block: BlockId;
45
+ };
46
+ export type Result = ItemStack | FluidStack | Block;
47
+ export type ResultInput = Result | ItemId;
48
+ export declare function createResult(input: unknown, lookup?: RegistryLookup): Result;
@@ -0,0 +1,37 @@
1
+ import zod from "zod";
2
+ import { IllegalShapeError } from "../error.js";
3
+ import { IdSchema } from "./id.js";
4
+ export const ItemStackSchema = zod.object({
5
+ item: IdSchema,
6
+ count: zod.number().int().optional(),
7
+ chance: zod.number().optional(),
8
+ });
9
+ export const FluidStackSchema = zod.object({
10
+ fluid: IdSchema,
11
+ amount: zod.number().optional(),
12
+ chance: zod.number().optional(),
13
+ });
14
+ export const BlockSchema = zod.object({
15
+ block: IdSchema,
16
+ });
17
+ function createUnvalidatedResult(input) {
18
+ if (!input)
19
+ throw new IllegalShapeError("result input may not be null");
20
+ if (typeof input === "string")
21
+ return { item: input };
22
+ if (typeof input === "object") {
23
+ if ("block" in input)
24
+ return BlockSchema.parse(input);
25
+ if ("item" in input)
26
+ return ItemStackSchema.parse(input);
27
+ if ("fluid" in input)
28
+ return FluidStackSchema.parse(input);
29
+ }
30
+ throw new IllegalShapeError(`unknown result shape`, input);
31
+ }
32
+ export function createResult(input, lookup) {
33
+ const unvalidated = createUnvalidatedResult(input);
34
+ lookup?.validate(unvalidated);
35
+ return unvalidated;
36
+ }
37
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/common/result.ts"],"names":[],"mappings":"AAKA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,QAAQ;CAChB,CAAC,CAAC;AASH,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;IAExE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAEtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,OAAO,IAAI,KAAK;YAAE,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,MAAM,IAAI,KAAK;YAAE,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,OAAO,IAAI,KAAK;YAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,MAAuB;IAClE,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9B,OAAO,WAAW,CAAC;AACrB,CAAC"}