@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,115 @@
1
+ import { createId, encodeId } from "../../common/id.js";
2
+ import { resolveIDTest } from "../../common/predicates.js";
3
+ import Registry from "../../common/registry.js";
4
+ import { entryId, orderTagEntries } from "../../loader/tags.js";
5
+ import { tagFolderOf } from "../../schema/data/tag.js";
6
+ import { toJson } from "../../textHelper.js";
7
+ class ScopedEmitter {
8
+ registry;
9
+ folder;
10
+ options;
11
+ constructor(registry, folder, options) {
12
+ this.registry = registry;
13
+ this.folder = folder;
14
+ this.options = options;
15
+ }
16
+ modifiers = new Registry();
17
+ getModified(consumer) {
18
+ const results = [];
19
+ this.modifiers.forEach((modifiers, id) => {
20
+ const modified = modifiers.reduce((previous, modifier) => modifier(previous), {
21
+ values: [],
22
+ replace: false,
23
+ });
24
+ results.push(consumer(createId(id), modified));
25
+ });
26
+ return results;
27
+ }
28
+ modify(id, modifier) {
29
+ this.modifiers.getOrPut(id, () => []).push(modifier);
30
+ }
31
+ add(id, value) {
32
+ this.modify(id, (previous) => {
33
+ return {
34
+ ...previous,
35
+ values: [...(previous.values ?? []), value],
36
+ };
37
+ });
38
+ }
39
+ remove(id, test) {
40
+ if (this.options.advancedTags) {
41
+ if (test instanceof RegExp || typeof test === "function") {
42
+ throw new Error("advanced tag loader only accepts tag entries in removal");
43
+ }
44
+ this.modify(id, (previous) => {
45
+ return {
46
+ ...previous,
47
+ remove: [...(previous.remove ?? []), test],
48
+ };
49
+ });
50
+ }
51
+ else {
52
+ const predicate = resolveIDTest(test, this.registry);
53
+ this.modify(id, (previous) => {
54
+ const defaultValues = (previous.replace ? undefined : this.registry.resolve(id)) ?? [];
55
+ return {
56
+ replace: true,
57
+ values: [...defaultValues, ...(previous.values ?? [])].filter((it) => {
58
+ return !predicate(encodeId(entryId(it)));
59
+ }),
60
+ };
61
+ });
62
+ }
63
+ }
64
+ clear() {
65
+ this.modifiers.clear();
66
+ }
67
+ }
68
+ export default class TagEmitter {
69
+ logger;
70
+ registry;
71
+ options;
72
+ emitters = new Map();
73
+ blocks;
74
+ items;
75
+ fluids;
76
+ constructor(logger, registry, options) {
77
+ this.logger = logger;
78
+ this.registry = registry;
79
+ this.options = options;
80
+ this.blocks = this.scoped("minecraft:block", "blocks");
81
+ this.items = this.scoped("minecraft:item", "items");
82
+ this.fluids = this.scoped("minecraft:fluid", "fluids");
83
+ }
84
+ clear() {
85
+ this.emitters.forEach((it) => it.clear());
86
+ }
87
+ async emit(acceptor) {
88
+ const emitters = Array.from(this.emitters.values());
89
+ await Promise.all(emitters.flatMap((scoped) => scoped.getModified(async (id, definition) => {
90
+ const path = `data/${id.namespace}/tags/${scoped.folder}/${id.path}.json`;
91
+ acceptor(path, await toJson({
92
+ ...definition,
93
+ values: definition.values && orderTagEntries(definition.values),
94
+ remove: definition.remove && orderTagEntries(definition.remove),
95
+ }));
96
+ })));
97
+ }
98
+ add(registry, id, value) {
99
+ this.scoped(registry).add(id, value);
100
+ }
101
+ remove(registry, id, test) {
102
+ this.scoped(registry).remove(id, test);
103
+ }
104
+ scoped(registry, folder = tagFolderOf(registry)) {
105
+ const existing = this.emitters.get(registry);
106
+ if (existing)
107
+ return existing;
108
+ else {
109
+ const emitter = new ScopedEmitter(this.registry.registry(registry), folder, this.options);
110
+ this.emitters.set(registry, emitter);
111
+ return emitter;
112
+ }
113
+ }
114
+ }
115
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/emit/data/tags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Acceptor } from "@adeficior/pack-resolver";
2
+ import type { Id } from "../common/id.js";
3
+ export interface RegistryProvider<T> {
4
+ forEach(consumer: (recipe: T, id: Id) => void): void;
5
+ forEachAsync(consumer: (recipe: T, id: Id) => Promise<void>): Promise<void>;
6
+ }
7
+ export type PathProvider = (id: Id) => string;
8
+ export interface ClearableEmitter {
9
+ clear(): void;
10
+ emit(acceptor: Acceptor): Promise<void>;
11
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emit/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import type { CreativeModeTabId, ItemId } from "@adeficior/data-modifier/generated";
2
+ import type { Acceptor } from "@adeficior/pack-resolver";
3
+ import type { IdInput, NormalizedId } from "../common/id.js";
4
+ import type RegistryLookup from "../loader/registry/index.js";
5
+ import type { ClearableEmitter } from "./index.js";
6
+ interface TabModifications {
7
+ icon?: IdInput<ItemId>;
8
+ can_scroll?: boolean;
9
+ show_title?: boolean;
10
+ search_bar?: boolean;
11
+ before_tabs?: IdInput<CreativeModeTabId>[];
12
+ after_tabs?: IdInput<CreativeModeTabId>[];
13
+ name?: string;
14
+ }
15
+ interface TabOptions {
16
+ file?: IdInput;
17
+ mods?: string[];
18
+ }
19
+ interface TabOptionsWithAfter extends TabOptions {
20
+ after: IdInput<ItemId>;
21
+ }
22
+ interface TabOptionsWithBefore extends TabOptions {
23
+ before: IdInput<ItemId>;
24
+ }
25
+ type AddOptions = TabOptionsWithAfter | TabOptionsWithBefore | TabOptions;
26
+ export interface PolytoneTabs {
27
+ remove(tab: IdInput<CreativeModeTabId> | IdInput<CreativeModeTabId>[], items: IdInput<ItemId>[], options?: TabOptions): void;
28
+ add(tab: IdInput<CreativeModeTabId> | IdInput<CreativeModeTabId>[], items: IdInput<ItemId>[], options?: AddOptions): void;
29
+ create(id: IdInput, options?: TabModifications): CreativeModeTabId;
30
+ modify(id: IdInput, options: TabModifications): void;
31
+ }
32
+ interface ItemsMatchPredicate {
33
+ type: "items_match";
34
+ items: NormalizedId<ItemId>[];
35
+ }
36
+ type PolytonePredicate = ItemsMatchPredicate;
37
+ interface AdditionEntry {
38
+ items: ItemId[];
39
+ before?: boolean;
40
+ inverse?: boolean;
41
+ predicate?: PolytonePredicate;
42
+ }
43
+ export interface PolytoneTabModifier extends TabModifications {
44
+ icon?: NormalizedId<ItemId>;
45
+ before_tabs?: NormalizedId<CreativeModeTabId>[];
46
+ after_tabs?: NormalizedId<CreativeModeTabId>[];
47
+ targets: NormalizedId<CreativeModeTabId>[];
48
+ removals?: PolytonePredicate[];
49
+ additions?: AdditionEntry[];
50
+ require_mods?: string[];
51
+ }
52
+ export default class PolytoneTabsEmitter implements PolytoneTabs, ClearableEmitter {
53
+ private readonly lookup;
54
+ private readonly entries;
55
+ private readonly tabs;
56
+ constructor(lookup: () => RegistryLookup);
57
+ clear(): void;
58
+ emit(acceptor: Acceptor): Promise<void>;
59
+ remove(tab: IdInput<CreativeModeTabId> | IdInput<CreativeModeTabId>[], items: IdInput<ItemId>[], options?: TabOptions): void;
60
+ add(tab: IdInput<CreativeModeTabId> | IdInput<CreativeModeTabId>[], items: IdInput<ItemId>[], options?: AddOptions): void;
61
+ create(id: IdInput, modifications?: TabModifications): string;
62
+ modify(id: IdInput, modifications: TabModifications): void;
63
+ private forEach;
64
+ }
65
+ export {};
@@ -0,0 +1,101 @@
1
+ import { arrayOrSelf } from "@adeficior/pack-resolver";
2
+ import { difference, uniq } from "lodash-es";
3
+ import { createId, encodeId } from "../common/id.js";
4
+ import CustomEmitter from "./custom.js";
5
+ function translateModifications({ icon, after_tabs, before_tabs, ...modifications }) {
6
+ return {
7
+ ...modifications,
8
+ before_tabs: arrayOrSelf(before_tabs).map(encodeId),
9
+ after_tabs: arrayOrSelf(after_tabs).map(encodeId),
10
+ icon: icon !== undefined ? encodeId(icon) : undefined,
11
+ };
12
+ }
13
+ function mergeModifiers(a, b) {
14
+ const diff = difference(a.targets, b.targets);
15
+ if (diff.length)
16
+ throw new Error("trying to merge modifiers with different targets");
17
+ return {
18
+ ...a,
19
+ ...b,
20
+ targets: uniq([...a.targets, ...b.targets]),
21
+ additions: [...(a.additions ?? []), ...(b.additions ?? [])],
22
+ removals: [...(a.removals ?? []), ...(b.removals ?? [])],
23
+ };
24
+ }
25
+ function translateOptions(options = {}) {
26
+ if ("before" in options && options.before) {
27
+ return {
28
+ before: true,
29
+ predicate: {
30
+ items: [encodeId(options.before)],
31
+ type: "items_match",
32
+ },
33
+ };
34
+ }
35
+ else if ("after" in options && options.after) {
36
+ return {
37
+ before: false,
38
+ predicate: {
39
+ items: [encodeId(options.after)],
40
+ type: "items_match",
41
+ },
42
+ };
43
+ }
44
+ else {
45
+ return {};
46
+ }
47
+ }
48
+ export default class PolytoneTabsEmitter {
49
+ lookup;
50
+ entries = new CustomEmitter((id) => `assets/${id.namespace}/polytone/creative_tab_modifiers/${id.path}.json`);
51
+ tabs = new CustomEmitter((id) => `assets/${id.namespace}/polytone/creative_tabs.csv`, (it) => it.join(","));
52
+ constructor(lookup) {
53
+ this.lookup = lookup;
54
+ }
55
+ clear() {
56
+ this.entries.clear();
57
+ this.tabs.clear();
58
+ }
59
+ async emit(acceptor) {
60
+ await Promise.all([this.entries.emit(acceptor), this.tabs.emit(acceptor)]);
61
+ }
62
+ remove(tab, items, options = {}) {
63
+ this.forEach(tab, {
64
+ removals: [{ type: "items_match", items: items.map(encodeId) }],
65
+ }, options);
66
+ }
67
+ add(tab, items, options = {}) {
68
+ this.forEach(tab, {
69
+ additions: [
70
+ { items: items.map(encodeId), ...translateOptions(options) },
71
+ ],
72
+ }, options);
73
+ }
74
+ create(id, modifications = {}) {
75
+ const lookup = this.lookup();
76
+ const { namespace, path } = createId(id);
77
+ this.tabs.merge({ namespace, path: "tab" }, [path], (a, b) => uniq([...a, ...b]));
78
+ if (Object.keys(modifications).length) {
79
+ this.modify(id, modifications);
80
+ }
81
+ return lookup.addCustom("minecraft:creative_mode_tab", id);
82
+ }
83
+ modify(id, modifications) {
84
+ this.entries.merge(id, {
85
+ ...translateModifications(modifications),
86
+ targets: [encodeId(id)],
87
+ }, mergeModifiers);
88
+ }
89
+ forEach(tab, modifier, options) {
90
+ arrayOrSelf(tab).forEach((target) => {
91
+ const file = options.file ?? target;
92
+ const entry = {
93
+ targets: [encodeId(target)],
94
+ require_mods: options.mods,
95
+ ...modifier,
96
+ };
97
+ this.entries.merge(file, entry, mergeModifiers);
98
+ });
99
+ }
100
+ }
101
+ //# sourceMappingURL=polytoneTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polytoneTabs.js","sourceRoot":"","sources":["../../src/emit/polytoneTabs.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,aAAa,MAAM,aAAa,CAAC;AAmExC,SAAS,sBAAsB,CAAC,EAC9B,IAAI,EACJ,UAAU,EACV,WAAW,EACX,GAAG,aAAa,EACC;IACjB,OAAO;QACL,GAAG,aAAa;QAChB,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnD,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QACjD,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,CAAsB,EACtB,CAAsB;IAEtB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,MAAM;QACb,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,OAAO;QACL,GAAG,CAAC;QACJ,GAAG,CAAC;QACJ,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3C,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC3D,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAsB,EAAE;IAChD,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,EAAE,aAAa;aACpB;SACF,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/C,OAAO;YACL,MAAM,EAAE,KAAK;YACb,SAAS,EAAE;gBACT,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,EAAE,aAAa;aACpB;SACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAaT;IAVZ,OAAO,GAAG,IAAI,aAAa,CAC1C,CAAC,EAAE,EAAE,EAAE,CACL,UAAU,EAAE,CAAC,SAAS,oCAAoC,EAAE,CAAC,IAAI,OAAO,CAC3E,CAAC;IAEe,IAAI,GAAG,IAAI,aAAa,CACvC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,SAAS,6BAA6B,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CACrB,CAAC;IAEF,YAA6B,MAA4B;QAA5B,WAAM,GAAN,MAAM,CAAsB;IAAG,CAAC;IAE7D,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAkB;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,CACJ,GAA8D,EAC9D,KAAwB,EACxB,UAAsB,EAAE;QAExB,IAAI,CAAC,OAAO,CACV,GAAG,EACH;YACE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;SAChE,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,GAAG,CACD,GAA8D,EAC9D,KAAwB,EACxB,UAAsB,EAAE;QAExB,IAAI,CAAC,OAAO,CACV,GAAG,EACH;YACE,SAAS,EAAE;gBACT,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE;aAC7D;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,EAAW,EAAE,gBAAkC,EAAE;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3D,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CACnB,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,EAAW,EAAE,aAA+B;QACjD,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,EAAE,EACF;YACE,GAAG,sBAAsB,CAAC,aAAa,CAAC;YACxC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SACxB,EACD,cAAc,CACf,CAAC;IACJ,CAAC;IAEO,OAAO,CACb,GAA8D,EAC9D,QAA8C,EAC9C,OAAmB;QAEnB,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;YACpC,MAAM,KAAK,GAAwB;gBACjC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC3B,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,GAAG,QAAQ;aACZ,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { Logger } from "@adeficior/pack-resolver";
2
+ import type { Id } from "../../common/id.js";
3
+ export type Modifier<T> = (recipe: T) => T | null;
4
+ export default abstract class Rule<T> {
5
+ private readonly modifier;
6
+ protected constructor(modifier: Modifier<T>);
7
+ abstract matches(id: Id, recipe: T, logger: Logger): boolean;
8
+ abstract printWarning(logger: Logger): void;
9
+ modify(value: T): T | null;
10
+ }
@@ -0,0 +1,10 @@
1
+ export default class Rule {
2
+ modifier;
3
+ constructor(modifier) {
4
+ this.modifier = modifier;
5
+ }
6
+ modify(value) {
7
+ return this.modifier(value);
8
+ }
9
+ }
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/emit/rule/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,OAAgB,IAAI;IACO;IAAvC,YAAuC,QAAqB;QAArB,aAAQ,GAAR,QAAQ,CAAa;IAAG,CAAC;IAMhE,MAAM,CAAC,KAAQ;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { Logger } from "@adeficior/pack-resolver";
2
+ import type { Id } from "../../common/id.js";
3
+ import type { IngredientInput, Predicate } from "../../common/ingredient.js";
4
+ import type { LootTable } from "../../schema/data/loot.js";
5
+ import type { Modifier } from "./index.js";
6
+ import Rule from "./index.js";
7
+ export default class LootTableRule extends Rule<LootTable> {
8
+ private readonly shape;
9
+ private readonly idTests;
10
+ private readonly outputTests;
11
+ constructor(shape: unknown[], idTests: Predicate<Id>[], outputTests: Predicate<IngredientInput>[], modifier: Modifier<LootTable>);
12
+ matches(id: Id, table: LootTable, logger: Logger): boolean;
13
+ printWarning(logger: Logger): void;
14
+ }
@@ -0,0 +1,47 @@
1
+ import { exists } from "@adeficior/pack-resolver";
2
+ import { extendLootEntry } from "../../schema/data/loot.js";
3
+ import Rule from "./index.js";
4
+ function entryMatches(logger, test, base) {
5
+ try {
6
+ const entry = extendLootEntry(base);
7
+ switch (entry.type) {
8
+ case "minecraft:alternatives":
9
+ return entry.children.some((it) => entryMatches(logger, test, it));
10
+ case "minecraft:item":
11
+ return test({ item: entry.name }, logger);
12
+ case "minecraft:tag":
13
+ return test({ tag: entry.name }, logger);
14
+ default:
15
+ return false;
16
+ }
17
+ }
18
+ catch {
19
+ logger.warn(`unknown loot entry type:`, base);
20
+ return false;
21
+ }
22
+ }
23
+ function hasOutput(logger, test, table) {
24
+ return table.pools.some((pool) => pool.entries.some((entry) => {
25
+ return entryMatches(logger, test, entry);
26
+ }));
27
+ }
28
+ export default class LootTableRule extends Rule {
29
+ shape;
30
+ idTests;
31
+ outputTests;
32
+ constructor(shape, idTests, outputTests, modifier) {
33
+ super(modifier);
34
+ this.shape = shape;
35
+ this.idTests = idTests;
36
+ this.outputTests = outputTests;
37
+ }
38
+ matches(id, table, logger) {
39
+ const prefixed = logger;
40
+ return (this.idTests.every((test) => test(id, prefixed)) &&
41
+ this.outputTests.every((test) => hasOutput(prefixed, test, table)));
42
+ }
43
+ printWarning(logger) {
44
+ logger.error("Could not find any loot table matching", ...this.shape.filter(exists));
45
+ }
46
+ }
47
+ //# sourceMappingURL=lootTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lootTable.js","sourceRoot":"","sources":["../../../src/emit/rule/lootTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIlD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,SAAS,YAAY,CACnB,MAAc,EACd,IAAgC,EAChC,IAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACpC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,wBAAwB;gBAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YACrE,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YAC5C,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YAC3C;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAChB,MAAc,EACd,IAAgC,EAChC,KAAgB;IAEhB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,IAAe;IAErC;IACA;IACA;IAHnB,YACmB,KAAgB,EAChB,OAAwB,EACxB,WAAyC,EAC1D,QAA6B;QAE7B,KAAK,CAAC,QAAQ,CAAC,CAAC;QALC,UAAK,GAAL,KAAK,CAAW;QAChB,YAAO,GAAP,OAAO,CAAiB;QACxB,gBAAW,GAAX,WAAW,CAA8B;IAI5D,CAAC;IAED,OAAO,CAAC,EAAM,EAAE,KAAgB,EAAE,MAAc;QAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC;QACxB,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,MAAM,CAAC,KAAK,CACV,wCAAwC,EACxC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAC7B,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { Logger } from "@adeficior/pack-resolver";
2
+ import type { Id } from "../../common/id.js";
3
+ import type { IngredientInput, Predicate } from "../../common/ingredient.js";
4
+ import type { Recipe } from "../../parser/recipe/index.js";
5
+ import type { Modifier } from "./index.js";
6
+ import Rule from "./index.js";
7
+ export default class RecipeRule extends Rule<Recipe> {
8
+ private readonly shape;
9
+ private readonly idsTests;
10
+ private readonly typeTests;
11
+ private readonly ingredientTests;
12
+ private readonly resultTests;
13
+ constructor(shape: unknown[], idsTests: Predicate<Id>[], typeTests: Predicate<Id>[], ingredientTests: Predicate<IngredientInput>[], resultTests: Predicate<IngredientInput>[], modifier: Modifier<Recipe>);
14
+ matches(id: Id, recipe: Recipe, logger: Logger): boolean;
15
+ printWarning(logger: Logger): void;
16
+ }
@@ -0,0 +1,29 @@
1
+ import { exists } from "@adeficior/pack-resolver";
2
+ import { createId } from "../../common/id.js";
3
+ import Rule from "./index.js";
4
+ export default class RecipeRule extends Rule {
5
+ shape;
6
+ idsTests;
7
+ typeTests;
8
+ ingredientTests;
9
+ resultTests;
10
+ constructor(shape, idsTests, typeTests, ingredientTests, resultTests, modifier) {
11
+ super(modifier);
12
+ this.shape = shape;
13
+ this.idsTests = idsTests;
14
+ this.typeTests = typeTests;
15
+ this.ingredientTests = ingredientTests;
16
+ this.resultTests = resultTests;
17
+ }
18
+ matches(id, recipe, logger) {
19
+ const types = recipe.getTypes().map(createId);
20
+ return (this.idsTests.every((test) => test(id, logger)) &&
21
+ this.typeTests.every((test) => types.some((it) => test(it))) &&
22
+ this.ingredientTests.every((test) => recipe.getIngredients().some((it) => test(it, logger))) &&
23
+ this.resultTests.every((test) => recipe.getResults().some((it) => test(it, logger))));
24
+ }
25
+ printWarning(logger) {
26
+ logger.error("Could not find any recipes matching", ...this.shape.filter(exists));
27
+ }
28
+ }
29
+ //# sourceMappingURL=recipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe.js","sourceRoot":"","sources":["../../../src/emit/rule/recipe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9C,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,IAAY;IAE/B;IACA;IACA;IACA;IACA;IALnB,YACmB,KAAgB,EAChB,QAAyB,EACzB,SAA0B,EAC1B,eAA6C,EAC7C,WAAyC,EAC1D,QAA0B;QAE1B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAPC,UAAK,GAAL,KAAK,CAAW;QAChB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAAiB;QAC1B,oBAAe,GAAf,eAAe,CAA8B;QAC7C,gBAAW,GAAX,WAAW,CAA8B;IAI5D,CAAC;IAED,OAAO,CAAC,EAAM,EAAE,MAAc,EAAE,MAAc;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAClC,MAAM,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CACvD;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CACnD,CACF,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,MAAM,CAAC,KAAK,CACV,qCAAqC,EACrC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAC7B,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { Acceptor, Logger } from "@adeficior/pack-resolver";
2
+ import type { Id } from "../common/id.js";
3
+ import type { PathProvider, RegistryProvider } from "./index.js";
4
+ import type Rule from "./rule/index.js";
5
+ export default class RuledEmitter<TEntry, TRule extends Rule<TEntry>> {
6
+ private readonly logger;
7
+ private readonly provider;
8
+ private readonly pathProvider;
9
+ private readonly emptyValue;
10
+ private readonly shouldSkip;
11
+ constructor(logger: Logger, provider: RegistryProvider<TEntry>, pathProvider: PathProvider, emptyValue: unknown, shouldSkip?: (id: Id) => boolean);
12
+ private rulesArray;
13
+ private requiredRules;
14
+ protected get rules(): ReadonlyArray<TRule>;
15
+ clear(): void;
16
+ addRule(rule: TRule, required?: boolean): void;
17
+ emit(acceptor: Acceptor): Promise<void>;
18
+ }
@@ -0,0 +1,47 @@
1
+ import { toJson } from "../textHelper.js";
2
+ export default class RuledEmitter {
3
+ logger;
4
+ provider;
5
+ pathProvider;
6
+ emptyValue;
7
+ shouldSkip;
8
+ constructor(logger, provider, pathProvider, emptyValue, shouldSkip = () => true) {
9
+ this.logger = logger;
10
+ this.provider = provider;
11
+ this.pathProvider = pathProvider;
12
+ this.emptyValue = emptyValue;
13
+ this.shouldSkip = shouldSkip;
14
+ }
15
+ rulesArray = [];
16
+ requiredRules = new Set();
17
+ get rules() {
18
+ return this.rulesArray;
19
+ }
20
+ clear() {
21
+ this.rulesArray = [];
22
+ this.requiredRules.clear();
23
+ }
24
+ addRule(rule, required = true) {
25
+ this.rulesArray.push(rule);
26
+ if (required)
27
+ this.requiredRules.add(rule);
28
+ }
29
+ async emit(acceptor) {
30
+ const missingRules = new Set(this.requiredRules);
31
+ await this.provider.forEachAsync(async (recipe, id) => {
32
+ if (this.shouldSkip(id))
33
+ return;
34
+ const path = this.pathProvider(id);
35
+ const rules = this.rules.filter((it) => it.matches(id, recipe, this.logger.group(path)));
36
+ if (rules.length === 0)
37
+ return;
38
+ rules.forEach((it) => missingRules.delete(it));
39
+ const modified = rules.reduce((previous, rule) => previous && rule.modify(previous), recipe);
40
+ acceptor(path, await toJson(modified ?? this.emptyValue));
41
+ });
42
+ missingRules.forEach((rule) => {
43
+ rule.printWarning(this.logger);
44
+ });
45
+ }
46
+ }
47
+ //# sourceMappingURL=ruled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruled.js","sourceRoot":"","sources":["../../src/emit/ruled.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,MAAM,CAAC,OAAO,OAAO,YAAY;IAEZ;IACA;IACA;IACA;IACA;IALnB,YACmB,MAAc,EACd,QAAkC,EAClC,YAA0B,EAC1B,UAAmB,EACnB,aAAkC,GAAG,EAAE,CAAC,IAAI;QAJ5C,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAA0B;QAClC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,eAAU,GAAV,UAAU,CAAS;QACnB,eAAU,GAAV,UAAU,CAAkC;IAC5D,CAAC;IAEI,UAAU,GAAY,EAAE,CAAC;IACzB,aAAa,GAAG,IAAI,GAAG,EAAS,CAAC;IAEzC,IAAc,KAAK;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,IAAW,EAAE,WAAoB,IAAI;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,QAAQ;YAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAkB;QAC3B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAQ,IAAI,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;YACpD,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAAE,OAAO;YAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CACrC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAChD,CAAC;YACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE/B,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAC3B,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EACrD,MAAM,CACP,CAAC;YAEF,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { InferIds, RegistryId } from "@adeficior/data-modifier/generated";
2
+ import type { Logger } from "@adeficior/pack-resolver";
3
+ export declare class IllegalShapeError extends Error {
4
+ readonly input?: unknown | undefined;
5
+ constructor(message: string, input?: unknown | undefined);
6
+ }
7
+ export declare class UnknownRegistryEntry<T extends RegistryId> extends Error {
8
+ readonly registry: T;
9
+ readonly id: InferIds<T>;
10
+ constructor(message: string, registry: T, id: InferIds<T>);
11
+ }
12
+ export declare function tryCatching<T>(logger: Logger | undefined, run: () => T): T | null;
package/dist/error.js ADDED
@@ -0,0 +1,45 @@
1
+ import { ZodError } from "zod";
2
+ export class IllegalShapeError extends Error {
3
+ input;
4
+ constructor(message, input) {
5
+ super(message);
6
+ this.input = input;
7
+ }
8
+ }
9
+ export class UnknownRegistryEntry extends Error {
10
+ registry;
11
+ id;
12
+ constructor(message, registry, id) {
13
+ super(message);
14
+ this.registry = registry;
15
+ this.id = id;
16
+ }
17
+ }
18
+ export function tryCatching(logger, run) {
19
+ try {
20
+ return run();
21
+ }
22
+ catch (error) {
23
+ if (error instanceof IllegalShapeError) {
24
+ if (error.input)
25
+ logger?.warn(error.message, error.input);
26
+ else
27
+ logger?.warn(error.message);
28
+ return null;
29
+ }
30
+ if (error instanceof ZodError) {
31
+ const message = error.errors
32
+ .map((it) => {
33
+ if (it.path)
34
+ return `${it.path.join(".")}: ${it.message}`;
35
+ else
36
+ return it.message;
37
+ })
38
+ .join(", ");
39
+ logger?.warn(`unknown shape: ${message}`);
40
+ return null;
41
+ }
42
+ throw error;
43
+ }
44
+ }
45
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE/B,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAG/B;IAFX,YACE,OAAe,EACN,KAAe;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,UAAK,GAAL,KAAK,CAAU;IAG1B,CAAC;CACF;AAED,MAAM,OAAO,oBAA2C,SAAQ,KAAK;IAGxD;IACA;IAHX,YACE,OAAe,EACN,QAAW,EACX,EAAe;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,aAAQ,GAAR,QAAQ,CAAG;QACX,OAAE,GAAF,EAAE,CAAa;IAG1B,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CACzB,MAA0B,EAC1B,GAAY;IAEZ,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,KAAK;gBAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;;gBACrD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM;iBACzB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACV,IAAI,EAAE,CAAC,IAAI;oBAAE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;;oBACrD,OAAO,EAAE,CAAC,OAAO,CAAC;YACzB,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,EAAE,IAAI,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ export type { Logger } from "@adeficior/pack-resolver";
2
+ export { createId, encodeId, prefix, suffix, type Id, type IdInput, type NormalizedId, type TagInput, } from "./common/id.js";
3
+ export { createIngredient } from "./common/ingredient.js";
4
+ export type { BlockIngredient, BlockTag, CommonTest, FluidIngredient, FluidTag, Ingredient, IngredientInput, IngredientTest, ItemIngredient, ItemTag, Predicate, } from "./common/ingredient.js";
5
+ export { default as Registry } from "./common/registry.js";
6
+ export { createResult } from "./common/result.js";
7
+ export type { Block, FluidStack, ItemStack, Result, ResultInput, } from "./common/result.js";
8
+ export type { BlockstateRules } from "./emit/assets/blockstates.js";
9
+ export type { ModelRules, ModelRulesGroup } from "./emit/assets/models.js";
10
+ export type { BlockDefinitionOptions, BlockDefinitionRules, } from "./emit/content/blockDefinition.js";
11
+ export type { BlockDefinitionRulesWithoutId } from "./emit/content/innerBlockDefinition.js";
12
+ export type { ItemDefinitionOptions, ItemDefinitionRules, } from "./emit/content/itemDefinition.js";
13
+ export { default as CustomEmitter } from "./emit/custom.js";
14
+ export { EMPTY_LOOT_MODIFIER, EMPTY_LOOT_TABLE, type LootRules, } from "./emit/data/loot.js";
15
+ export { EMPTY_RECIPE } from "./emit/data/recipe.js";
16
+ export type { RecipeRules } from "./emit/data/recipe.js";
17
+ export type { TagRules } from "./emit/data/tags.js";
18
+ export type { ClearableEmitter, RegistryProvider } from "./emit/index.js";
19
+ export { default as RuledEmitter } from "./emit/ruled.js";
20
+ export { IllegalShapeError, UnknownRegistryEntry } from "./error.js";
21
+ export { default as PackLoader } from "./loader/pack.js";
22
+ export type { TagRegistry, TagRegistryHolder } from "./loader/tags.js";
23
+ export type { LootItemInput } from "./parser/lootTable.js";
24
+ export type { Blockstate } from "./schema/assets/blockstate.js";
25
+ export type { Model } from "./schema/assets/model.js";
26
+ export type { BlockDefinition, BlockProperties, CogBlockDefinition, } from "./schema/content/blockDefinition.js";
27
+ export type { BlockItemDefinition, ItemDefinition, ItemProperties, Rarity, } from "./schema/content/itemDefinition.js";
28
+ export { EmptyLootEntry } from "./schema/data/loot.js";
29
+ export type { LootEntry, LootModifier, LootPool, LootTable, } from "./schema/data/loot.js";
30
+ export type { FabricCondition, ForgeCondition, RecipeDefinition, } from "./schema/data/recipe.js";
31
+ export type { TagDefinition, TagEntry } from "./schema/data/tag.js";