@adeficior/data-modifier 1.0.0-rc.37 → 1.0.0-rc.39

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 (127) hide show
  1. package/dist/common/fields.js +1 -1
  2. package/dist/common/fields.js.map +1 -1
  3. package/dist/common/ingredient/index.d.ts +12 -0
  4. package/dist/common/ingredient/index.js +26 -0
  5. package/dist/common/ingredient/index.js.map +1 -1
  6. package/dist/common/result/index.d.ts +6 -0
  7. package/dist/common/result/index.js +13 -0
  8. package/dist/common/result/index.js.map +1 -1
  9. package/dist/error.js +2 -2
  10. package/dist/error.js.map +1 -1
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.js +2 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/loader/context.d.ts +2 -2
  15. package/dist/loader/pack.d.ts +1 -1
  16. package/dist/loader/pack.js +4 -4
  17. package/dist/loader/pack.js.map +1 -1
  18. package/dist/loader/recipe.d.ts +2 -2
  19. package/dist/loader/recipe.js +22 -45
  20. package/dist/loader/recipe.js.map +1 -1
  21. package/dist/parser/recipe/adAstra/inputOutput.js +1 -0
  22. package/dist/parser/recipe/adAstra/inputOutput.js.map +1 -1
  23. package/dist/parser/recipe/adAstra/spaceStation.js +1 -1
  24. package/dist/parser/recipe/adAstra/spaceStation.js.map +1 -1
  25. package/dist/parser/recipe/botania/apothecary.js +1 -1
  26. package/dist/parser/recipe/botania/apothecary.js.map +1 -1
  27. package/dist/parser/recipe/botania/blocks.d.ts +14 -8
  28. package/dist/parser/recipe/botania/blocks.js +39 -61
  29. package/dist/parser/recipe/botania/blocks.js.map +1 -1
  30. package/dist/parser/recipe/botania/brew.js +1 -1
  31. package/dist/parser/recipe/botania/brew.js.map +1 -1
  32. package/dist/parser/recipe/botania/elvenTrade.js +2 -2
  33. package/dist/parser/recipe/botania/elvenTrade.js.map +1 -1
  34. package/dist/parser/recipe/botania/gogWrapper.d.ts +2 -2
  35. package/dist/parser/recipe/botania/manaInfusion.d.ts +3 -0
  36. package/dist/parser/recipe/botania/manaInfusion.js +6 -5
  37. package/dist/parser/recipe/botania/manaInfusion.js.map +1 -1
  38. package/dist/parser/recipe/botania/nbtWrapper.d.ts +2 -2
  39. package/dist/parser/recipe/botania/pureDaisy.d.ts +4 -0
  40. package/dist/parser/recipe/botania/pureDaisy.js +15 -0
  41. package/dist/parser/recipe/botania/pureDaisy.js.map +1 -1
  42. package/dist/parser/recipe/botania/runicAltar.js +1 -1
  43. package/dist/parser/recipe/botania/runicAltar.js.map +1 -1
  44. package/dist/parser/recipe/create/assembly.d.ts +1 -0
  45. package/dist/parser/recipe/create/assembly.js +6 -3
  46. package/dist/parser/recipe/create/assembly.js.map +1 -1
  47. package/dist/parser/recipe/farmersdelight/cooking.js +3 -6
  48. package/dist/parser/recipe/farmersdelight/cooking.js.map +1 -1
  49. package/dist/parser/recipe/farmersdelight/cutting.js +2 -2
  50. package/dist/parser/recipe/farmersdelight/cutting.js.map +1 -1
  51. package/dist/parser/recipe/forge/conditional.d.ts +2 -2
  52. package/dist/parser/recipe/index.d.ts +9 -3
  53. package/dist/parser/recipe/index.js +17 -2
  54. package/dist/parser/recipe/index.js.map +1 -1
  55. package/dist/parser/recipe/ingredientMap.d.ts +2 -5
  56. package/dist/parser/recipe/ingredientMap.js +0 -3
  57. package/dist/parser/recipe/ingredientMap.js.map +1 -1
  58. package/dist/parser/recipe/manyToMany.js +2 -2
  59. package/dist/parser/recipe/manyToMany.js.map +1 -1
  60. package/dist/parser/recipe/manyToOne.js +1 -1
  61. package/dist/parser/recipe/manyToOne.js.map +1 -1
  62. package/dist/parser/recipe/roots/component.js +1 -1
  63. package/dist/parser/recipe/roots/component.js.map +1 -1
  64. package/dist/parser/recipe/roots/ritual.js +2 -2
  65. package/dist/parser/recipe/roots/ritual.js.map +1 -1
  66. package/dist/parser/recipe/thermal/index.d.ts +3 -0
  67. package/dist/parser/recipe/thermal/index.js +10 -6
  68. package/dist/parser/recipe/thermal/index.js.map +1 -1
  69. package/dist/parser/recipe/thermal/module.d.ts +4 -0
  70. package/dist/parser/recipe/thermal/module.js +36 -0
  71. package/dist/parser/recipe/thermal/module.js.map +1 -0
  72. package/dist/parser/recipe/vanilla/shaped.d.ts +1 -1
  73. package/dist/parser/recipe/vanilla/shaped.js +2 -2
  74. package/dist/parser/recipe/vanilla/shaped.js.map +1 -1
  75. package/dist/parser/recipe/vanilla/smithing.d.ts +4 -2
  76. package/dist/parser/recipe/vanilla/smithing.js +12 -7
  77. package/dist/parser/recipe/vanilla/smithing.js.map +1 -1
  78. package/dist/serializer/checks.d.ts +2 -0
  79. package/dist/serializer/checks.js +13 -0
  80. package/dist/serializer/checks.js.map +1 -0
  81. package/dist/serializer/index.d.ts +23 -0
  82. package/dist/serializer/index.js +19 -0
  83. package/dist/serializer/index.js.map +1 -0
  84. package/dist/serializer/ingredients/15.d.ts +2 -0
  85. package/dist/{common/ingredient/serializer.js → serializer/ingredients/15.js} +14 -26
  86. package/dist/serializer/ingredients/15.js.map +1 -0
  87. package/dist/serializer/ingredients/44.d.ts +2 -0
  88. package/dist/serializer/ingredients/44.js +46 -0
  89. package/dist/serializer/ingredients/44.js.map +1 -0
  90. package/dist/serializer/ingredients/common.d.ts +3 -0
  91. package/dist/serializer/ingredients/common.js +13 -0
  92. package/dist/serializer/ingredients/common.js.map +1 -0
  93. package/dist/serializer/ingredients/index.d.ts +20 -0
  94. package/dist/serializer/ingredients/index.js +36 -0
  95. package/dist/serializer/ingredients/index.js.map +1 -0
  96. package/dist/serializer/module.d.ts +23 -0
  97. package/dist/serializer/module.js +42 -0
  98. package/dist/serializer/module.js.map +1 -0
  99. package/dist/serializer/results/15.d.ts +2 -0
  100. package/dist/{common/result/serializer.js → serializer/results/15.js} +9 -14
  101. package/dist/serializer/results/15.js.map +1 -0
  102. package/dist/serializer/results/44.d.ts +2 -0
  103. package/dist/serializer/results/44.js +21 -0
  104. package/dist/serializer/results/44.js.map +1 -0
  105. package/dist/serializer/results/common.d.ts +3 -0
  106. package/dist/serializer/results/common.js +6 -0
  107. package/dist/serializer/results/common.js.map +1 -0
  108. package/dist/serializer/results/index.d.ts +6 -0
  109. package/dist/serializer/results/index.js +21 -0
  110. package/dist/serializer/results/index.js.map +1 -0
  111. package/dist/serializer/versioned.d.ts +19 -0
  112. package/dist/serializer/versioned.js +55 -0
  113. package/dist/serializer/versioned.js.map +1 -0
  114. package/dist/serializer/wrapped.d.ts +12 -0
  115. package/dist/serializer/wrapped.js +32 -0
  116. package/dist/serializer/wrapped.js.map +1 -0
  117. package/package.json +1 -1
  118. package/dist/common/ingredient/serializer.d.ts +0 -9
  119. package/dist/common/ingredient/serializer.js.map +0 -1
  120. package/dist/common/result/serializer.d.ts +0 -7
  121. package/dist/common/result/serializer.js.map +0 -1
  122. package/dist/common/serializer.d.ts +0 -32
  123. package/dist/common/serializer.js +0 -95
  124. package/dist/common/serializer.js.map +0 -1
  125. package/dist/parser/recipe/thermal/ingredient.d.ts +0 -4
  126. package/dist/parser/recipe/thermal/ingredient.js +0 -50
  127. package/dist/parser/recipe/thermal/ingredient.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../src/parser/recipe/roots/component.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQnD,MAAM,OAAO,mBAAoB,SAAQ,MAAM;IAChB;IAA7B,YAA6B,WAAyB;QACpD,KAAK,EAAE,CAAC;QADmB,gBAAW,GAAX,WAAW,CAAc;IAEtD,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,OAAO,EAAE,CAAC;IACZ,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5E,CAAC;IAEQ,SAAS,CAChB,OAA2B;QAE3B,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;SACjE,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,YAG9C;IACC,WAAW,CACT,UAAyC,EACzC,OAA2B;QAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3E,OAAO,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;CACF"}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../src/parser/recipe/roots/component.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQnD,MAAM,OAAO,mBAAoB,SAAQ,MAAM;IAChB;IAA7B,YAA6B,WAAyB;QACpD,KAAK,EAAE,CAAC;QADmB,gBAAW,GAAX,WAAW,CAAc;IAEtD,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,OAAO,EAAE,CAAC;IACZ,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5E,CAAC;IAEQ,SAAS,CAChB,OAA2B;QAE3B,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;SACjE,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,YAG9C;IACC,WAAW,CACT,UAAyC,EACzC,OAA2B;QAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CACrD,UAAU,CAAC,WAAW,CACvB,CAAC;QACF,OAAO,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;CACF"}
@@ -15,10 +15,10 @@ export class RootRitualRecipe extends ManyToOneRecipe {
15
15
  }
16
16
  export class RootRitualRecipeParser extends RecipeParser {
17
17
  deserialize(definition, context) {
18
- const ingredients = context.ingredients.createList(definition.ingredients);
18
+ const ingredients = context.ingredients.deserializeList(definition.ingredients);
19
19
  const result = context.results.deserialize(definition.result);
20
20
  const incenses = definition.incenses &&
21
- context.ingredients.createList(definition.incenses);
21
+ context.ingredients.deserializeList(definition.incenses);
22
22
  return new RootRitualRecipe(ingredients, result, incenses);
23
23
  }
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ritual.js","sourceRoot":"","sources":["../../../../src/parser/recipe/roots/ritual.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,eAAe,GAEhB,MAAM,iBAAiB,CAAC;AAUzB,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IAIhC;IAHnB,YACE,WAAyB,EACzB,MAAc,EACG,WAAyB,EAAE;QAE5C,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAFV,aAAQ,GAAR,QAAQ,CAAmB;IAG9C,CAAC;IAEQ,cAAc;QACrB,OAAO,CAAC,GAAG,KAAK,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EACtC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CACvC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,YAG3C;IACC,WAAW,CACT,UAAsC,EACtC,OAA2B;QAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,QAAQ,GACZ,UAAU,CAAC,QAAQ;YACnB,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO,IAAI,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;CACF"}
1
+ {"version":3,"file":"ritual.js","sourceRoot":"","sources":["../../../../src/parser/recipe/roots/ritual.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,eAAe,GAEhB,MAAM,iBAAiB,CAAC;AAUzB,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IAIhC;IAHnB,YACE,WAAyB,EACzB,MAAc,EACG,WAAyB,EAAE;QAE5C,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAFV,aAAQ,GAAR,QAAQ,CAAmB;IAG9C,CAAC;IAEQ,cAAc;QACrB,OAAO,CAAC,GAAG,KAAK,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EACtC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CACvC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,YAG3C;IACC,WAAW,CACT,UAAsC,EACtC,OAA2B;QAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CACrD,UAAU,CAAC,WAAW,CACvB,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,QAAQ,GACZ,UAAU,CAAC,QAAQ;YACnB,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3D,OAAO,IAAI,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC;CACF"}
@@ -20,5 +20,8 @@ export declare class ThermalRecipe extends Recipe {
20
20
  serialize(context: RecipeParseContext): Partial<ThermalRecipeDefinition>;
21
21
  }
22
22
  export declare class ThermalRecipeParser extends RecipeParser<ThermalRecipeDefinition, ThermalRecipe> {
23
+ ingredientModules(): {
24
+ 15: import("../../../serializer/module.js").SerializerModule<Ingredient, unknown>;
25
+ };
23
26
  deserialize(definition: ThermalRecipeDefinition, context: RecipeParseContext): ThermalRecipe;
24
27
  }
@@ -1,5 +1,6 @@
1
1
  import { IllegalShapeError } from "../../../error.js";
2
2
  import RecipeParser, { Recipe } from "../index.js";
3
+ import { ingredientSerializerModules } from "./module.js";
3
4
  export class ThermalRecipe extends Recipe {
4
5
  ingredients;
5
6
  results;
@@ -31,15 +32,18 @@ export class ThermalRecipe extends Recipe {
31
32
  }
32
33
  }
33
34
  export class ThermalRecipeParser extends RecipeParser {
35
+ ingredientModules() {
36
+ return ingredientSerializerModules;
37
+ }
34
38
  deserialize(definition, context) {
35
- // TODO map from and to thermals shape
36
- const ingredients = definition.ingredient
37
- ? [context.ingredients.deserialize(definition.ingredient)]
38
- : context.ingredients.createList(definition.ingredients ?? []);
39
- if (ingredients.length === 0)
39
+ const rawIngredients = definition.ingredient
40
+ ? [definition.ingredient]
41
+ : (definition.ingredients ?? []);
42
+ if (rawIngredients.length === 0)
40
43
  throw new IllegalShapeError("ingredients missing or empty", definition);
44
+ const ingredients = context.ingredients.deserializeList(rawIngredients);
41
45
  const results = Array.isArray(definition.result)
42
- ? context.results.createList(definition.result)
46
+ ? context.results.deserializeList(definition.result)
43
47
  : [context.results.deserialize(definition.result)];
44
48
  return new ThermalRecipe(ingredients, results);
45
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/parser/recipe/thermal/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAenD,MAAM,OAAO,aAAc,SAAQ,MAAM;IAEpB;IACA;IAFnB,YACmB,WAAyB,EACzB,OAAiB;QAElC,KAAK,EAAE,CAAC;QAHS,gBAAW,GAAX,WAAW,CAAc;QACzB,YAAO,GAAP,OAAO,CAAU;IAGpC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,aAAa,CACtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAClC,CAAC;IACJ,CAAC;IAEQ,SAAS,CAChB,OAA2B;QAE3B,MAAM,UAAU,GAAgD;YAC9D,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;SACpD,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,UAAU,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CACnD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CACrB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CACxD,IAAI,CAAC,WAAW,CACjB,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,YAGxC;IACC,WAAW,CACT,UAAmC,EACnC,OAA2B;QAE3B,sCAAsC;QAEtC,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU;YACvC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC1D,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAEjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM,IAAI,iBAAiB,CAAC,8BAA8B,EAAE,UAAU,CAAC,CAAC;QAE1E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YAC9C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAErD,OAAO,IAAI,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/parser/recipe/thermal/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAe1D,MAAM,OAAO,aAAc,SAAQ,MAAM;IAEpB;IACA;IAFnB,YACmB,WAAyB,EACzB,OAAiB;QAElC,KAAK,EAAE,CAAC;QAHS,gBAAW,GAAX,WAAW,CAAc;QACzB,YAAO,GAAP,OAAO,CAAU;IAGpC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,aAAa,CACtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAClC,CAAC;IACJ,CAAC;IAEQ,SAAS,CAChB,OAA2B;QAE3B,MAAM,UAAU,GAAgD;YAC9D,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;SACpD,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,UAAU,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CACnD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CACrB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CACxD,IAAI,CAAC,WAAW,CACjB,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,YAGxC;IACU,iBAAiB;QACxB,OAAO,2BAA2B,CAAC;IACrC,CAAC;IAED,WAAW,CACT,UAAmC,EACnC,OAA2B;QAE3B,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU;YAC1C,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;YACzB,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAEnC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAC7B,MAAM,IAAI,iBAAiB,CAAC,8BAA8B,EAAE,UAAU,CAAC,CAAC;QAE1E,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAExE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YAC9C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC;YACpD,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAErD,OAAO,IAAI,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import { type Ingredient } from "../../../common/ingredient";
2
+ export declare const ingredientSerializerModules: {
3
+ 15: import("../../../serializer/module.js").SerializerModule<Ingredient, unknown>;
4
+ };
@@ -0,0 +1,36 @@
1
+ import z from "zod";
2
+ import { AmountSchema, CountSchema } from "../../../common/fields.js";
3
+ import { IdSchema } from "../../../common/id.js";
4
+ import { FluidTagIngredient, ItemIngredient, ItemTagIngredient, ListIngredient, } from "../../../common/ingredient";
5
+ import { isObjectWith } from "../../../serializer/checks.js";
6
+ import { createSerializerModule } from "../../../serializer/module.js";
7
+ const ThermalFluidTagSchema = z.object({
8
+ fluid_tag: IdSchema,
9
+ amount: AmountSchema,
10
+ });
11
+ const ThermalItemEntry = z.object({
12
+ item: IdSchema,
13
+ });
14
+ const ThermalTagEntry = z.object({
15
+ tag: IdSchema,
16
+ });
17
+ const ThermalIngredientEntry = ThermalItemEntry.or(ThermalTagEntry);
18
+ const ThermalIngredientList = z.object({
19
+ value: z.array(ThermalIngredientEntry),
20
+ count: CountSchema,
21
+ });
22
+ const ingredientSerializer15 = createSerializerModule((builder) => {
23
+ builder.deserializer(isObjectWith("value"), (input) => {
24
+ const { value, count } = ThermalIngredientList.parse(input);
25
+ return new ListIngredient(value.map((it) => {
26
+ if ("item" in it)
27
+ return new ItemIngredient(it.item, count);
28
+ return new ItemTagIngredient(it.tag, count);
29
+ }));
30
+ });
31
+ builder.register(FluidTagIngredient, isObjectWith("fluid_tag"), ThermalFluidTagSchema, ({ fluid_tag, amount }) => new FluidTagIngredient(fluid_tag, amount), ({ tag, amount }) => ({ fluid_tag: tag, amount }));
32
+ });
33
+ export const ingredientSerializerModules = {
34
+ 15: ingredientSerializer15,
35
+ };
36
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../src/parser/recipe/thermal/module.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,cAAc,GAEf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,YAAY;CACrB,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,QAAQ;CACf,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE,QAAQ;CACd,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;AACpE,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;IACtC,KAAK,EAAE,WAAW;CACnB,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,sBAAsB,CAAa,CAAC,OAAO,EAAE,EAAE;IAC5E,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;QACpD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5D,OAAO,IAAI,cAAc,CACvB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACf,IAAI,MAAM,IAAI,EAAE;gBAAE,OAAO,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5D,OAAO,IAAI,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,QAAQ,CACd,kBAAkB,EAClB,YAAY,CAAC,WAAW,CAAC,EACzB,qBAAqB,EACrB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,EACpE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAClD,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,EAAE,EAAE,sBAAsB;CAC3B,CAAC"}
@@ -12,7 +12,7 @@ export declare class ShapedRecipe extends Recipe {
12
12
  private readonly ingredients;
13
13
  private readonly result;
14
14
  constructor(ingredients: IngredientMap, result: Result);
15
- getIngredients(): import("../../../common/ingredient/index.js").Ingredient[];
15
+ getIngredients(): import("../../../index.js").Ingredient[];
16
16
  getResults(): Result[];
17
17
  modify(modifier: RecipeModifier): ShapedRecipe;
18
18
  serialize(context: RecipeParseContext): Partial<ShapedRecipeDefinition>;
@@ -18,14 +18,14 @@ export class ShapedRecipe extends Recipe {
18
18
  }
19
19
  serialize(context) {
20
20
  return {
21
- key: this.ingredients.serialize(context),
21
+ key: context.ingredients.serializeIngredientMap(this.ingredients),
22
22
  result: context.results.serialize(this.result),
23
23
  };
24
24
  }
25
25
  }
26
26
  export class ShapedParser extends RecipeParser {
27
27
  deserialize(definition, context) {
28
- const ingredients = context.ingredients.ingredientMap(definition.key);
28
+ const ingredients = context.ingredients.deserializeIngredientMap(definition.key);
29
29
  const result = context.results.deserialize(definition.result);
30
30
  return new ShapedRecipe(ingredients, result);
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shaped.js","sourceRoot":"","sources":["../../../../src/parser/recipe/vanilla/shaped.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAUnD,MAAM,OAAO,YAAa,SAAQ,MAAM;IAEnB;IACA;IAFnB,YACmB,WAA0B,EAC1B,MAAc;QAE/B,KAAK,EAAE,CAAC;QAHS,gBAAW,GAAX,WAAW,CAAe;QAC1B,WAAM,GAAN,MAAM,CAAQ;IAGjC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,UAAU;QACR,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,YAAY,CACrB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC7C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAC7B,CAAC;IACJ,CAAC;IAEQ,SAAS,CAChB,OAA2B;QAE3B,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC;YACxC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;SAC/C,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,YAGjC;IACC,WAAW,CACT,UAAkC,EAClC,OAA2B;QAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;CACF"}
1
+ {"version":3,"file":"shaped.js","sourceRoot":"","sources":["../../../../src/parser/recipe/vanilla/shaped.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAUnD,MAAM,OAAO,YAAa,SAAQ,MAAM;IAEnB;IACA;IAFnB,YACmB,WAA0B,EAC1B,MAAc;QAE/B,KAAK,EAAE,CAAC;QAHS,gBAAW,GAAX,WAAW,CAAe;QAC1B,WAAM,GAAN,MAAM,CAAQ;IAGjC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,UAAU;QACR,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,YAAY,CACrB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC7C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAC7B,CAAC;IACJ,CAAC;IAEQ,SAAS,CAChB,OAA2B;QAE3B,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC;YACjE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;SAC/C,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,YAGjC;IACC,WAAW,CACT,UAAkC,EAClC,OAA2B;QAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAC9D,UAAU,CAAC,GAAG,CACf,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -6,13 +6,15 @@ import RecipeParser, { Recipe } from "../index.js";
6
6
  export type SmithingRecipeDefinition = RecipeDefinition & Readonly<{
7
7
  base: unknown;
8
8
  addition: unknown;
9
- result: unknown;
9
+ result?: unknown;
10
+ template?: unknown;
10
11
  }>;
11
12
  export declare class SmithingRecipe extends Recipe {
12
13
  private readonly base;
13
14
  private readonly addition;
14
15
  private readonly result;
15
- constructor(base: Ingredient, addition: Ingredient, result: Result);
16
+ private readonly template;
17
+ constructor(base: Ingredient, addition: Ingredient, result: Result | undefined, template: Ingredient | undefined);
16
18
  getIngredients(): Ingredient[];
17
19
  getResults(): Result[];
18
20
  modify(modifier: RecipeModifier): SmithingRecipe;
@@ -1,28 +1,32 @@
1
+ import { exists } from "@adeficior/pack-resolver";
1
2
  import RecipeParser, { Recipe } from "../index.js";
2
3
  export class SmithingRecipe extends Recipe {
3
4
  base;
4
5
  addition;
5
6
  result;
6
- constructor(base, addition, result) {
7
+ template;
8
+ constructor(base, addition, result, template) {
7
9
  super();
8
10
  this.base = base;
9
11
  this.addition = addition;
10
12
  this.result = result;
13
+ this.template = template;
11
14
  }
12
15
  getIngredients() {
13
- return [this.base, this.addition];
16
+ return [this.base, this.addition, this.template].filter(exists);
14
17
  }
15
18
  getResults() {
16
- return [this.result];
19
+ return [this.result].filter(exists);
17
20
  }
18
21
  modify(modifier) {
19
- return new SmithingRecipe(modifier.ingredient(this.base), modifier.ingredient(this.addition), modifier.result(this.result));
22
+ return new SmithingRecipe(modifier.ingredient(this.base), modifier.ingredient(this.addition), this.result && modifier.result(this.result), this.template && modifier.ingredient(this.template));
20
23
  }
21
24
  serialize(context) {
22
25
  return {
23
26
  base: context.ingredients.serialize(this.base),
24
27
  addition: context.ingredients.serialize(this.addition),
25
- result: context.results.serialize(this.result),
28
+ result: context.results.serializeOptional(this.result),
29
+ template: context.ingredients.serializeOptional(this.template),
26
30
  };
27
31
  }
28
32
  }
@@ -30,8 +34,9 @@ export class SmithingParser extends RecipeParser {
30
34
  deserialize(definition, context) {
31
35
  const base = context.ingredients.deserialize(definition.base);
32
36
  const addition = context.ingredients.deserialize(definition.addition);
33
- const result = context.results.deserialize(definition.result);
34
- return new SmithingRecipe(base, addition, result);
37
+ const result = context.results.deserializeOptional(definition.result);
38
+ const template = context.ingredients.deserializeOptional(definition.addition);
39
+ return new SmithingRecipe(base, addition, result, template);
35
40
  }
36
41
  }
37
42
  //# sourceMappingURL=smithing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"smithing.js","sourceRoot":"","sources":["../../../../src/parser/recipe/vanilla/smithing.ts"],"names":[],"mappings":"AAIA,OAAO,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AASnD,MAAM,OAAO,cAAe,SAAQ,MAAM;IAErB;IACA;IACA;IAHnB,YACmB,IAAgB,EAChB,QAAoB,EACpB,MAAc;QAE/B,KAAK,EAAE,CAAC;QAJS,SAAI,GAAJ,IAAI,CAAY;QAChB,aAAQ,GAAR,QAAQ,CAAY;QACpB,WAAM,GAAN,MAAM,CAAQ;IAGjC,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,UAAU;QACR,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,cAAc,CACvB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAC9B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAClC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAC7B,CAAC;IACJ,CAAC;IAEQ,SAAS,CAChB,OAA2B;QAE3B,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;SAC/C,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,YAGnC;IACC,WAAW,CACT,UAAoC,EACpC,OAA2B;QAE3B,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;CACF"}
1
+ {"version":3,"file":"smithing.js","sourceRoot":"","sources":["../../../../src/parser/recipe/vanilla/smithing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAKlD,OAAO,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAUnD,MAAM,OAAO,cAAe,SAAQ,MAAM;IAErB;IACA;IACA;IACA;IAJnB,YACmB,IAAgB,EAChB,QAAoB,EACpB,MAA0B,EAC1B,QAAgC;QAEjD,KAAK,EAAE,CAAC;QALS,SAAI,GAAJ,IAAI,CAAY;QAChB,aAAQ,GAAR,QAAQ,CAAY;QACpB,WAAM,GAAN,MAAM,CAAoB;QAC1B,aAAQ,GAAR,QAAQ,CAAwB;IAGnD,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,UAAU;QACR,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAEQ,MAAM,CAAC,QAAwB;QACtC,OAAO,IAAI,cAAc,CACvB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAC9B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAClC,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAC3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CACpD,CAAC;IACJ,CAAC;IAEQ,SAAS,CAChB,OAA2B;QAE3B,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;YACtD,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC/D,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,YAGnC;IACC,WAAW,CACT,UAAoC,EACpC,OAA2B;QAE3B,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,mBAAmB,CACtD,UAAU,CAAC,QAAQ,CACpB,CAAC;QACF,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare function isObjectWith(property: string): (input: unknown) => input is Record<string, unknown>;
2
+ export declare function hasType(type: string): (input: unknown) => input is Record<string, unknown>;
@@ -0,0 +1,13 @@
1
+ export function isObjectWith(property) {
2
+ return (input) => input !== undefined &&
3
+ input !== null &&
4
+ typeof input === "object" &&
5
+ property in input;
6
+ }
7
+ export function hasType(type) {
8
+ const hasType = isObjectWith("type");
9
+ return (input) => {
10
+ return hasType(input) && input.type === type;
11
+ };
12
+ }
13
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/serializer/checks.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,CAAC,KAAc,EAAoC,EAAE,CAC1D,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,QAAQ,IAAI,KAAK,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,KAAc,EAAoC,EAAE;QAC1D,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { SerializerModule } from "./module";
2
+ export interface Serializer<Out, S extends Serializer<Out, S>> {
3
+ serialize(output: Out): unknown;
4
+ serializeList(outputs: Out[]): unknown[];
5
+ serializeOptional(output: Out | undefined): unknown;
6
+ deserialize(input: unknown): Out;
7
+ deserializeOptional(input: unknown): Out | undefined;
8
+ deserializeList(input: unknown[]): Out[];
9
+ validated<T extends Out>(output: T): T;
10
+ withModule(module: SerializerModule<Out>): S;
11
+ selectModule(module: Record<string, SerializerModule<Out, unknown>>): S;
12
+ }
13
+ export declare abstract class AbstractSerializer<Out, S extends Serializer<Out, S>> implements Serializer<Out, S> {
14
+ abstract serialize(output: Out): unknown;
15
+ abstract deserialize(input: unknown): Out;
16
+ abstract withModule(module: SerializerModule<Out, unknown>): S;
17
+ abstract selectModule(modules: Record<string, SerializerModule<Out, unknown>>): S;
18
+ abstract validated<T extends Out>(output: T): T;
19
+ serializeList(outputs: Out[]): unknown[];
20
+ serializeOptional(output: Out | undefined): unknown;
21
+ deserializeOptional(input: unknown): Out | undefined;
22
+ deserializeList(input: unknown[]): Out[];
23
+ }
@@ -0,0 +1,19 @@
1
+ export class AbstractSerializer {
2
+ serializeList(outputs) {
3
+ return outputs.map((it) => this.serialize(it));
4
+ }
5
+ serializeOptional(output) {
6
+ if (output === undefined)
7
+ return undefined;
8
+ return this.serialize(output);
9
+ }
10
+ deserializeOptional(input) {
11
+ if (input === undefined)
12
+ return undefined;
13
+ return this.deserialize(input);
14
+ }
15
+ deserializeList(input) {
16
+ return input.map((it) => this.deserialize(it));
17
+ }
18
+ }
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serializer/index.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAgB,kBAAkB;IAetC,aAAa,CAAC,OAAc;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,iBAAiB,CAAC,MAAuB;QACvC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,mBAAmB,CAAC,KAAc;QAChC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,eAAe,CAAC,KAAgB;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ import { type Ingredient } from "../../";
2
+ export declare const serializer15: import("../module").SerializerModule<Ingredient, unknown>;
@@ -1,19 +1,17 @@
1
- import { mapValues } from "lodash-es";
2
1
  import z from "zod";
3
- import { BlockIngredient, BlockTagIngredient, FluidIngredient, FluidTagIngredient, Ingredient, ItemIngredient, ItemTagIngredient, ListIngredient, } from ".";
4
- import { IngredientMap, } from "../../parser/recipe/ingredientMap";
5
- import { AmountSchema, CountSchema } from "../fields";
6
- import { IdSchema, stripTag } from "../id";
7
- import { createSerializer, isObjectWith, VersionedSerializer, } from "../serializer";
8
- const serializer15 = createSerializer((builder) => {
9
- builder.deserializer((it) => typeof it === "string", (input) => {
10
- if (input.startsWith("#")) {
11
- return new ItemTagIngredient(input);
12
- }
13
- return new ItemIngredient(input);
14
- });
15
- builder.serializer(ListIngredient, (it, serialize) => it.entries.flatMap(serialize));
16
- builder.deserializer(Array.isArray, (it, deserialize) => new ListIngredient(it.map(deserialize)));
2
+ import { BlockIngredient, BlockTagIngredient, FluidIngredient, FluidTagIngredient, ItemIngredient, ItemTagIngredient, ToolActionIngredient, } from "../../";
3
+ import { AmountSchema, CountSchema } from "../../common/fields";
4
+ import { IdSchema, stripTag } from "../../common/id";
5
+ import { hasType, isObjectWith } from "../checks";
6
+ import { createSerializerModule } from "../module";
7
+ import commonSerialization from "./common";
8
+ export const serializer15 = createSerializerModule((builder) => {
9
+ commonSerialization(builder);
10
+ const toolActionType = "farmersdelight:tool_action";
11
+ builder.register(ToolActionIngredient, hasType(toolActionType), z.object({
12
+ type: z.literal(toolActionType),
13
+ action: z.string().nonempty(),
14
+ }), (it) => new ToolActionIngredient(it.action), ({ action }) => ({ action, type: toolActionType }));
17
15
  builder.register(ItemTagIngredient, isObjectWith("tag"), z.object({
18
16
  tag: IdSchema,
19
17
  count: CountSchema,
@@ -38,14 +36,4 @@ const serializer15 = createSerializer((builder) => {
38
36
  block: IdSchema,
39
37
  }), (it) => new BlockIngredient(it.block), ({ id }) => ({ block: id }));
40
38
  });
41
- export default class IngredientSerializer extends VersionedSerializer {
42
- constructor(packFormat, lookup) {
43
- super(packFormat, lookup, Ingredient, {
44
- 15: serializer15,
45
- });
46
- }
47
- ingredientMap(input) {
48
- return new IngredientMap(mapValues(input, (it) => this.deserialize(it)));
49
- }
50
- }
51
- //# sourceMappingURL=serializer.js.map
39
+ //# sourceMappingURL=15.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"15.js","sourceRoot":"","sources":["../../../src/serializer/ingredients/15.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAElB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,mBAAmB,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAa,CAAC,OAAO,EAAE,EAAE;IACzE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7B,MAAM,cAAc,GAAG,4BAAqC,CAAC;IAC7D,OAAO,CAAC,QAAQ,CACd,oBAAoB,EACpB,OAAO,CAAC,cAAc,CAAC,EACvB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,EAC3C,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CACnD,CAAC;IAEF,OAAO,CAAC,QAAQ,CACd,iBAAiB,EACjB,YAAY,CAAC,KAAK,CAAC,EACnB,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,QAAQ;QACb,KAAK,EAAE,WAAW;KACnB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,EAC/C,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CACpD,CAAC;IAEF,OAAO,CAAC,QAAQ,CACd,kBAAkB,EAClB,YAAY,CAAC,UAAU,CAAC,EACxB,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,YAAY;KACrB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,EACtD,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAC3D,CAAC;IAEF,OAAO,CAAC,QAAQ,CACd,kBAAkB,EAClB,YAAY,CAAC,UAAU,CAAC,EACxB,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAC3C,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAC3C,CAAC;IAEF,OAAO,CAAC,QAAQ,CACd,cAAc,EACd,YAAY,CAAC,MAAM,CAAC,EACpB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,WAAW;KACnB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAC7C,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAC7C,CAAC;IAEF,OAAO,CAAC,QAAQ,CACd,eAAe,EACf,YAAY,CAAC,OAAO,CAAC,EACrB,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,YAAY;KACrB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAChD,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAC9C,CAAC;IAEF,OAAO,CAAC,QAAQ,CACd,eAAe,EACf,YAAY,CAAC,OAAO,CAAC,EACrB,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,QAAQ;KAChB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,EACrC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAC5B,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type Ingredient } from "../../";
2
+ export declare const serializer44: import("../module").SerializerModule<Ingredient, unknown>;
@@ -0,0 +1,46 @@
1
+ import z from "zod";
2
+ import { FluidIngredient, FluidTagIngredient, IgnoredIngredient, ItemIngredient, ItemTagIngredient, ListIngredient, ToolActionIngredient, } from "../../";
3
+ import { AmountSchema, CountSchema } from "../../common/fields";
4
+ import { IdSchema, stripTag } from "../../common/id";
5
+ import { hasType, isObjectWith } from "../checks";
6
+ import { createSerializerModule } from "../module";
7
+ import commonSerialization from "./common";
8
+ export const serializer44 = createSerializerModule((builder) => {
9
+ commonSerialization(builder);
10
+ // Do I also need to serialize as this?
11
+ builder.deserializer(hasType("neoforge:compound"), (it, deserialize) => {
12
+ const { ingredients } = z
13
+ .object({
14
+ ingredients: z.array(z.any()),
15
+ })
16
+ .parse(it);
17
+ return new ListIngredient(ingredients.map(deserialize));
18
+ });
19
+ const toolActionType = "farmersdelight:tool_action";
20
+ builder.register(ToolActionIngredient, hasType(toolActionType), z.object({
21
+ type: z.literal(toolActionType),
22
+ action: z.string().nonempty(),
23
+ }), (it) => new ToolActionIngredient(it.action), ({ action }) => ({ action, type: toolActionType }));
24
+ builder.register(ItemTagIngredient, isObjectWith("tag"), z.object({
25
+ tag: IdSchema,
26
+ count: CountSchema,
27
+ }), (it) => new ItemTagIngredient(it.tag, it.count), ({ count, tag }) => ({ tag: stripTag(tag), count }));
28
+ builder.register(FluidTagIngredient, isObjectWith("fluidTag"), z.object({
29
+ fluidTag: IdSchema,
30
+ amount: AmountSchema,
31
+ }), (it) => new FluidTagIngredient(it.fluidTag, it.amount), ({ amount, tag }) => ({ fluidTag: stripTag(tag), amount }));
32
+ builder.register(ItemIngredient, isObjectWith("item"), z.object({
33
+ item: IdSchema,
34
+ count: CountSchema,
35
+ }), (it) => new ItemIngredient(it.item, it.count), ({ id, ...rest }) => ({ item: id, ...rest }));
36
+ // TODO "type": "neoforge:single",
37
+ builder.register(FluidIngredient, isObjectWith("fluid"), z.object({
38
+ fluid: IdSchema,
39
+ amount: AmountSchema,
40
+ }), (it) => new FluidIngredient(it.fluid, it.amount), ({ id, ...rest }) => ({ fluid: id, ...rest }));
41
+ // TODO add support for these?
42
+ builder.deserializer(hasType("neoforge:components"), (it) => new IgnoredIngredient(it));
43
+ builder.deserializer(hasType("neoforge:intersection"), (it) => new IgnoredIngredient(it));
44
+ builder.deserializer(hasType("neoforge:difference"), (it) => new IgnoredIngredient(it));
45
+ });
46
+ //# sourceMappingURL=44.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"44.js","sourceRoot":"","sources":["../../../src/serializer/ingredients/44.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Ingredient } from "../../";
2
+ import type { SerializerBuilder } from "../module";
3
+ export default function commonSerialization(builder: SerializerBuilder<Ingredient>): void;
@@ -0,0 +1,13 @@
1
+ import { IgnoredIngredient, ItemIngredient, ItemTagIngredient, ListIngredient, } from "../../";
2
+ export default function commonSerialization(builder) {
3
+ builder.deserializer((it) => typeof it === "string", (input) => {
4
+ if (input.startsWith("#")) {
5
+ return new ItemTagIngredient(input);
6
+ }
7
+ return new ItemIngredient(input);
8
+ });
9
+ builder.serializer(ListIngredient, (it, serialize) => it.entries.flatMap(serialize));
10
+ builder.deserializer(Array.isArray, (it, deserialize) => new ListIngredient(it.map(deserialize)));
11
+ builder.serializer(IgnoredIngredient, (it) => it.raw);
12
+ }
13
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/serializer/ingredients/common.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,cAAc,EACd,iBAAiB,EACjB,cAAc,GACf,MAAM,QAAQ,CAAC;AAGhB,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,OAAsC;IAEtC,OAAO,CAAC,YAAY,CAClB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,EAC9B,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CACF,CAAC;IAEF,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CACnD,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAC9B,CAAC;IAEF,OAAO,CAAC,YAAY,CAClB,KAAK,CAAC,OAAO,EACb,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAC7D,CAAC;IAEF,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Serializer } from "..";
2
+ import { Ingredient } from "../../common/ingredient";
3
+ import type RegistryLookup from "../../loader/registry";
4
+ import type { SemVerInput } from "../../packFormat";
5
+ import { IngredientMap, type IngredientMapInput } from "../../parser/recipe/ingredientMap";
6
+ import type { SerializerModule } from "../module";
7
+ import { VersionedSerializer } from "../versioned";
8
+ export interface IngredientSerializer extends Serializer<Ingredient, IngredientSerializer> {
9
+ deserializeIngredientMap(input: IngredientMapInput): IngredientMap;
10
+ serializeIngredientMap(map: IngredientMap): IngredientMapInput;
11
+ }
12
+ export declare class IngredientSerializerImpl extends VersionedSerializer<Ingredient, IngredientSerializer> implements IngredientSerializer {
13
+ constructor(packFormat: SemVerInput, lookup: RegistryLookup);
14
+ deserializeIngredientMap(input: IngredientMapInput): IngredientMap;
15
+ serializeIngredientMap(map: IngredientMap): {
16
+ [x: string]: unknown;
17
+ };
18
+ withModule(module: SerializerModule<Ingredient>): IngredientSerializer;
19
+ }
20
+ export declare function createIngredientSerializer(packFormat: SemVerInput, lookup: RegistryLookup): IngredientSerializer;
@@ -0,0 +1,36 @@
1
+ import { mapValues } from "lodash-es";
2
+ import { Ingredient } from "../../common/ingredient";
3
+ import { IngredientMap, } from "../../parser/recipe/ingredientMap";
4
+ import { VersionedSerializer } from "../versioned";
5
+ import { WrapperSerializer } from "../wrapped";
6
+ import { serializer15 } from "./15";
7
+ import { serializer44 } from "./44";
8
+ export class IngredientSerializerImpl extends VersionedSerializer {
9
+ constructor(packFormat, lookup) {
10
+ super(packFormat, lookup, Ingredient, {
11
+ 15: serializer15,
12
+ 44: serializer44,
13
+ });
14
+ }
15
+ deserializeIngredientMap(input) {
16
+ return new IngredientMap(mapValues(input, (it) => this.deserialize(it)));
17
+ }
18
+ serializeIngredientMap(map) {
19
+ return mapValues(map.ingredients, (it) => this.serialize(it));
20
+ }
21
+ withModule(module) {
22
+ return new WrappedIngredientSerializer(this, module);
23
+ }
24
+ }
25
+ class WrappedIngredientSerializer extends WrapperSerializer {
26
+ deserializeIngredientMap(input) {
27
+ return this.serializer.deserializeIngredientMap(input);
28
+ }
29
+ serializeIngredientMap(map) {
30
+ return this.serializer.serializeIngredientMap(map);
31
+ }
32
+ }
33
+ export function createIngredientSerializer(packFormat, lookup) {
34
+ return new IngredientSerializerImpl(packFormat, lookup);
35
+ }
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/serializer/ingredients/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EACL,aAAa,GAEd,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAUpC,MAAM,OAAO,wBACX,SAAQ,mBAAqD;IAG7D,YAAY,UAAuB,EAAE,MAAsB;QACzD,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE;YACpC,EAAE,EAAE,YAAY;YAChB,EAAE,EAAE,YAAY;SACjB,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB,CAAC,KAAyB;QAChD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,sBAAsB,CAAC,GAAkB;QACvC,OAAO,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IAEQ,UAAU,CACjB,MAAoC;QAEpC,OAAO,IAAI,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;CACF;AAED,MAAM,2BAA4B,SAAQ,iBAGzC;IACC,wBAAwB,CAAC,KAAyB;QAChD,OAAO,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,sBAAsB,CAAC,GAAkB;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CACxC,UAAuB,EACvB,MAAsB;IAEtB,OAAO,IAAI,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type ZodType } from "zod";
2
+ import type { Class } from "../common/class";
3
+ import type { Predicate } from "../common/filters";
4
+ import type { Ingredient } from "../common/ingredient";
5
+ import type { Result } from "../common/result";
6
+ import { type SemVerInput } from "../packFormat";
7
+ type Mapper<From extends Out, To extends In, Out, In> = (it: From, nested: (it: Out) => In) => To;
8
+ export interface SerializerModule<Out, In = unknown> {
9
+ deserialize(input: In, nested: (it: In) => Out): Out | false;
10
+ serialize(input: Out, nested: (it: Out) => In): In | false;
11
+ }
12
+ export interface SerializerBuilder<Out, In = unknown> {
13
+ deserializer<TIn extends In>(test: Predicate<In>, mapper: Mapper<TIn, Out, In, Out>): void;
14
+ serializer<TOut extends Out, TIn extends In>(clazz: Class<TOut>, mapper: Mapper<TOut, TIn, Out, In>): void;
15
+ register<TOut extends Out, TIn extends In>(clazz: Class<TOut>, test: Predicate<In>, schema: ZodType<TIn>, deserialize: Mapper<TIn, TOut, In, Out>, serialize: Mapper<TOut, TIn, Out, In>): void;
16
+ }
17
+ export declare function createSerializerModule<Out>(factory: (builder: SerializerBuilder<Out, unknown>) => void): SerializerModule<Out, unknown>;
18
+ export declare function selectSerializerModule<Out>(packFormat: SemVerInput, serializers: Record<string, SerializerModule<Out>>): SerializerModule<Out, unknown> | undefined;
19
+ export interface WithSerializerModules {
20
+ ingredientModules(): Record<string, SerializerModule<Ingredient>>;
21
+ resultModules(): Record<string, SerializerModule<Result>>;
22
+ }
23
+ export {};
@@ -0,0 +1,42 @@
1
+ import {} from "zod";
2
+ import { isAtLeastVersion } from "../packFormat";
3
+ export function createSerializerModule(factory) {
4
+ const deserializers = [];
5
+ const serializers = [];
6
+ factory({
7
+ deserializer: (test, mapper) => {
8
+ deserializers.push({
9
+ test,
10
+ mapper: mapper,
11
+ });
12
+ },
13
+ serializer: (clazz, mapper) => {
14
+ serializers.push({
15
+ clazz,
16
+ mapper: mapper,
17
+ });
18
+ },
19
+ register(clazz, test, schema, deserialize, serialize) {
20
+ this.serializer(clazz, (it, nested) => schema.encode(serialize(it, nested)));
21
+ this.deserializer(test, (it, nested) => deserialize(schema.parse(it), nested));
22
+ },
23
+ });
24
+ return {
25
+ deserialize: (input, nested) => {
26
+ const match = deserializers.find((it) => it.test(input));
27
+ if (!match)
28
+ return false;
29
+ return match.mapper(input, nested);
30
+ },
31
+ serialize(output, nested) {
32
+ const match = serializers.find((it) => output instanceof it.clazz);
33
+ if (!match)
34
+ return false;
35
+ return match.mapper(output, nested);
36
+ },
37
+ };
38
+ }
39
+ export function selectSerializerModule(packFormat, serializers) {
40
+ return Object.entries(serializers).findLast(([it]) => isAtLeastVersion(packFormat, it))?.[1];
41
+ }
42
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/serializer/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,KAAK,CAAC;AAKnC,OAAO,EAAE,gBAAgB,EAAoB,MAAM,eAAe,CAAC;AAgCnE,MAAM,UAAU,sBAAsB,CACpC,OAA2D;IAE3D,MAAM,aAAa,GAGd,EAAE,CAAC;IAER,MAAM,WAAW,GAGZ,EAAE,CAAC;IAER,OAAO,CAAC;QACN,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC7B,aAAa,CAAC,IAAI,CAAC;gBACjB,IAAI;gBACJ,MAAM,EAAE,MAAuD;aAChE,CAAC,CAAC;QACL,CAAC;QACD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC5B,WAAW,CAAC,IAAI,CAAC;gBACf,KAAK;gBACL,MAAM,EAAE,MAAuD;aAChE,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS;YAClD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CACrC,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CACrC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CACtC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YACzB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,SAAS,CAAC,MAAM,EAAE,MAAM;YACtB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YACzB,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,UAAuB,EACvB,WAAkD;IAElD,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnD,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC,CACjC,EAAE,CAAC,CAAC,CAAC,CAAC;AACT,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type Result } from "../..";
2
+ export declare const serializer15: import("../module").SerializerModule<Result, unknown>;