@adeficior/data-modifier 1.0.0-rc.38 → 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 (97) hide show
  1. package/dist/common/ingredient/index.d.ts +6 -0
  2. package/dist/common/ingredient/index.js +13 -0
  3. package/dist/common/ingredient/index.js.map +1 -1
  4. package/dist/common/result/index.d.ts +6 -0
  5. package/dist/common/result/index.js +13 -0
  6. package/dist/common/result/index.js.map +1 -1
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.js +2 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/loader/context.d.ts +2 -2
  11. package/dist/loader/pack.d.ts +1 -1
  12. package/dist/loader/pack.js +4 -4
  13. package/dist/loader/pack.js.map +1 -1
  14. package/dist/loader/recipe.js +9 -5
  15. package/dist/loader/recipe.js.map +1 -1
  16. package/dist/parser/recipe/adAstra/inputOutput.js +1 -0
  17. package/dist/parser/recipe/adAstra/inputOutput.js.map +1 -1
  18. package/dist/parser/recipe/botania/blocks.d.ts +14 -8
  19. package/dist/parser/recipe/botania/blocks.js +39 -62
  20. package/dist/parser/recipe/botania/blocks.js.map +1 -1
  21. package/dist/parser/recipe/botania/gogWrapper.d.ts +2 -2
  22. package/dist/parser/recipe/botania/manaInfusion.d.ts +3 -0
  23. package/dist/parser/recipe/botania/manaInfusion.js +6 -5
  24. package/dist/parser/recipe/botania/manaInfusion.js.map +1 -1
  25. package/dist/parser/recipe/botania/nbtWrapper.d.ts +2 -2
  26. package/dist/parser/recipe/botania/pureDaisy.d.ts +4 -0
  27. package/dist/parser/recipe/botania/pureDaisy.js +15 -0
  28. package/dist/parser/recipe/botania/pureDaisy.js.map +1 -1
  29. package/dist/parser/recipe/create/assembly.d.ts +1 -0
  30. package/dist/parser/recipe/create/assembly.js +5 -2
  31. package/dist/parser/recipe/create/assembly.js.map +1 -1
  32. package/dist/parser/recipe/forge/conditional.d.ts +2 -2
  33. package/dist/parser/recipe/index.d.ts +9 -3
  34. package/dist/parser/recipe/index.js +17 -2
  35. package/dist/parser/recipe/index.js.map +1 -1
  36. package/dist/parser/recipe/ingredientMap.d.ts +2 -5
  37. package/dist/parser/recipe/ingredientMap.js +0 -3
  38. package/dist/parser/recipe/ingredientMap.js.map +1 -1
  39. package/dist/parser/recipe/thermal/index.d.ts +3 -0
  40. package/dist/parser/recipe/thermal/index.js +5 -3
  41. package/dist/parser/recipe/thermal/index.js.map +1 -1
  42. package/dist/parser/recipe/thermal/module.d.ts +4 -0
  43. package/dist/parser/recipe/thermal/module.js +36 -0
  44. package/dist/parser/recipe/thermal/module.js.map +1 -0
  45. package/dist/parser/recipe/vanilla/shaped.d.ts +1 -1
  46. package/dist/parser/recipe/vanilla/shaped.js +2 -2
  47. package/dist/parser/recipe/vanilla/shaped.js.map +1 -1
  48. package/dist/serializer/checks.d.ts +2 -0
  49. package/dist/serializer/checks.js +13 -0
  50. package/dist/serializer/checks.js.map +1 -0
  51. package/dist/serializer/index.d.ts +23 -0
  52. package/dist/serializer/index.js +19 -0
  53. package/dist/serializer/index.js.map +1 -0
  54. package/dist/serializer/ingredients/15.d.ts +2 -0
  55. package/dist/{common/ingredient/serializer.js → serializer/ingredients/15.js} +9 -26
  56. package/dist/serializer/ingredients/15.js.map +1 -0
  57. package/dist/serializer/ingredients/44.d.ts +2 -0
  58. package/dist/serializer/ingredients/44.js +46 -0
  59. package/dist/serializer/ingredients/44.js.map +1 -0
  60. package/dist/serializer/ingredients/common.d.ts +3 -0
  61. package/dist/serializer/ingredients/common.js +13 -0
  62. package/dist/serializer/ingredients/common.js.map +1 -0
  63. package/dist/serializer/ingredients/index.d.ts +20 -0
  64. package/dist/serializer/ingredients/index.js +36 -0
  65. package/dist/serializer/ingredients/index.js.map +1 -0
  66. package/dist/serializer/module.d.ts +23 -0
  67. package/dist/serializer/module.js +42 -0
  68. package/dist/serializer/module.js.map +1 -0
  69. package/dist/serializer/results/15.d.ts +2 -0
  70. package/dist/{common/result/serializer.js → serializer/results/15.js} +9 -14
  71. package/dist/serializer/results/15.js.map +1 -0
  72. package/dist/serializer/results/44.d.ts +2 -0
  73. package/dist/serializer/results/44.js +21 -0
  74. package/dist/serializer/results/44.js.map +1 -0
  75. package/dist/serializer/results/common.d.ts +3 -0
  76. package/dist/serializer/results/common.js +6 -0
  77. package/dist/serializer/results/common.js.map +1 -0
  78. package/dist/serializer/results/index.d.ts +6 -0
  79. package/dist/serializer/results/index.js +21 -0
  80. package/dist/serializer/results/index.js.map +1 -0
  81. package/dist/serializer/versioned.d.ts +19 -0
  82. package/dist/serializer/versioned.js +55 -0
  83. package/dist/serializer/versioned.js.map +1 -0
  84. package/dist/serializer/wrapped.d.ts +12 -0
  85. package/dist/serializer/wrapped.js +32 -0
  86. package/dist/serializer/wrapped.js.map +1 -0
  87. package/package.json +1 -1
  88. package/dist/common/ingredient/serializer.d.ts +0 -9
  89. package/dist/common/ingredient/serializer.js.map +0 -1
  90. package/dist/common/result/serializer.d.ts +0 -7
  91. package/dist/common/result/serializer.js.map +0 -1
  92. package/dist/common/serializer.d.ts +0 -35
  93. package/dist/common/serializer.js +0 -110
  94. package/dist/common/serializer.js.map +0 -1
  95. package/dist/parser/recipe/thermal/ingredient.d.ts +0 -4
  96. package/dist/parser/recipe/thermal/ingredient.js +0 -51
  97. package/dist/parser/recipe/thermal/ingredient.js.map +0 -1
@@ -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>;
@@ -1,10 +1,12 @@
1
1
  import z from "zod";
2
- import { BlockResult, FluidResult, ItemResult, Result } from ".";
3
- import { AmountSchema, ChanceSchema, CountSchema } from "../fields";
4
- import { IdSchema } from "../id";
5
- import { createSerializer, isObjectWith, VersionedSerializer, } from "../serializer";
6
- const serializer15 = createSerializer((builder) => {
7
- builder.deserializer((it) => typeof it === "string", (input) => new ItemResult(input));
2
+ import { BlockResult, FluidResult, ItemResult } from "../..";
3
+ import { AmountSchema, ChanceSchema, CountSchema } from "../../common/fields";
4
+ import { IdSchema } from "../../common/id";
5
+ import { isObjectWith } from "../checks";
6
+ import { createSerializerModule } from "../module";
7
+ import commonSerialization from "./common";
8
+ export const serializer15 = createSerializerModule((builder) => {
9
+ commonSerialization(builder);
8
10
  builder.register(ItemResult, isObjectWith("item"), z.object({
9
11
  item: IdSchema,
10
12
  count: CountSchema,
@@ -19,11 +21,4 @@ const serializer15 = createSerializer((builder) => {
19
21
  block: IdSchema,
20
22
  }), (it) => new BlockResult(it.block), ({ id }) => ({ block: id }));
21
23
  });
22
- export default class ResultSerializer extends VersionedSerializer {
23
- constructor(packFormat, lookup) {
24
- super(packFormat, lookup, Result, {
25
- 15: serializer15,
26
- });
27
- }
28
- }
29
- //# sourceMappingURL=serializer.js.map
24
+ //# sourceMappingURL=15.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"15.js","sourceRoot":"","sources":["../../../src/serializer/results/15.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAe,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,mBAAmB,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAS,CAAC,OAAO,EAAE,EAAE;IACrE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7B,OAAO,CAAC,QAAQ,CACd,UAAU,EACV,YAAY,CAAC,MAAM,CAAC,EACpB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;KACrB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EACpD,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,WAAW,EACX,YAAY,CAAC,OAAO,CAAC,EACrB,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,YAAY;KACrB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EACvD,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,WAAW,EACX,YAAY,CAAC,OAAO,CAAC,EACrB,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,QAAQ;KAChB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EACjC,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 Result } from "../..";
2
+ export declare const serializer44: import("../module").SerializerModule<Result, unknown>;
@@ -0,0 +1,21 @@
1
+ import z from "zod";
2
+ import { FluidResult, ItemResult } from "../..";
3
+ import { AmountSchema, ChanceSchema, CountSchema } from "../../common/fields";
4
+ import { IdSchema } from "../../common/id";
5
+ import { isObjectWith } from "../checks";
6
+ import { createSerializerModule } from "../module";
7
+ import commonSerialization from "./common";
8
+ export const serializer44 = createSerializerModule((builder) => {
9
+ commonSerialization(builder);
10
+ builder.register(FluidResult, isObjectWith("amount"), z.object({
11
+ id: IdSchema,
12
+ amount: AmountSchema,
13
+ chance: ChanceSchema,
14
+ }), (it) => new FluidResult(it.id, it.amount, it.chance), ({ ...rest }) => ({ ...rest }));
15
+ builder.register(ItemResult, isObjectWith("id"), z.object({
16
+ id: IdSchema,
17
+ count: CountSchema,
18
+ chance: ChanceSchema,
19
+ }), (it) => new ItemResult(it.id, it.count, it.chance), ({ ...rest }) => ({ ...rest }));
20
+ });
21
+ //# sourceMappingURL=44.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"44.js","sourceRoot":"","sources":["../../../src/serializer/results/44.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAe,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,mBAAmB,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAS,CAAC,OAAO,EAAE,EAAE;IACrE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7B,OAAO,CAAC,QAAQ,CACd,WAAW,EACX,YAAY,CAAC,QAAQ,CAAC,EACtB,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,QAAQ;QACZ,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,YAAY;KACrB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EACpD,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAC/B,CAAC;IAEF,OAAO,CAAC,QAAQ,CACd,UAAU,EACV,YAAY,CAAC,IAAI,CAAC,EAClB,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;KACrB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAClD,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAC/B,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Result } from "../../";
2
+ import type { SerializerBuilder } from "../module";
3
+ export default function commonSerialization(builder: SerializerBuilder<Result>): void;
@@ -0,0 +1,6 @@
1
+ import { IgnoredResult, ItemResult } from "../../";
2
+ export default function commonSerialization(builder) {
3
+ builder.deserializer((it) => typeof it === "string", (input) => new ItemResult(input));
4
+ builder.serializer(IgnoredResult, (it) => it.raw);
5
+ }
6
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/serializer/results/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAe,MAAM,QAAQ,CAAC;AAGhE,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,OAAkC;IAElC,OAAO,CAAC,YAAY,CAClB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,EAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CACjC,CAAC;IAEF,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Serializer } from "..";
2
+ import { Result } from "../..";
3
+ import type RegistryLookup from "../../loader/registry";
4
+ import type { SemVerInput } from "../../packFormat";
5
+ export type ResultSerializer = Serializer<Result, ResultSerializer>;
6
+ export declare function createResultSerializer(packFormat: SemVerInput, lookup: RegistryLookup): ResultSerializer;
@@ -0,0 +1,21 @@
1
+ import { Result } from "../..";
2
+ import {} from "../module";
3
+ import { VersionedSerializer } from "../versioned";
4
+ import { WrapperSerializer } from "../wrapped";
5
+ import { serializer15 } from "./15";
6
+ import { serializer44 } from "./44";
7
+ export function createResultSerializer(packFormat, lookup) {
8
+ return new ResultSerializerImpl(packFormat, lookup);
9
+ }
10
+ class ResultSerializerImpl extends VersionedSerializer {
11
+ constructor(packFormat, lookup) {
12
+ super(packFormat, lookup, Result, {
13
+ 15: serializer15,
14
+ 44: serializer44,
15
+ });
16
+ }
17
+ withModule(module) {
18
+ return new WrapperSerializer(this, module);
19
+ }
20
+ }
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/serializer/results/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAyB,MAAM,WAAW,CAAC;AAClD,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;AAIpC,MAAM,UAAU,sBAAsB,CACpC,UAAuB,EACvB,MAAsB;IAEtB,OAAO,IAAI,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,oBACJ,SAAQ,mBAA6C;IAGrD,YAAY,UAAuB,EAAE,MAAsB;QACzD,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;YAChC,EAAE,EAAE,YAAY;YAChB,EAAE,EAAE,YAAY;SACjB,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,MAAgC;QACzC,OAAO,IAAI,iBAAiB,CAA2B,IAAI,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { AbstractSerializer, type Serializer } from ".";
2
+ import type { Class } from "../common/class";
3
+ import type { InputOutput } from "../common/inputOutput";
4
+ import type RegistryLookup from "../loader/registry";
5
+ import { type SemVerInput } from "../packFormat";
6
+ import { type SerializerModule } from "./module";
7
+ export declare abstract class VersionedSerializer<Out extends InputOutput, S extends Serializer<Out, S>> extends AbstractSerializer<Out, S> {
8
+ private readonly packFormat;
9
+ private readonly lookup;
10
+ private readonly type;
11
+ private readonly serializer;
12
+ private readonly typeName;
13
+ constructor(packFormat: SemVerInput, lookup: RegistryLookup, type: Class<Out>, serializers: Record<string, SerializerModule<Out>>);
14
+ serialize(output: Out): unknown;
15
+ private deserializeUnvalidated;
16
+ deserialize(input: unknown): Out;
17
+ validated<T extends Out>(output: T): T;
18
+ selectModule(modules: Record<string, SerializerModule<Out, unknown>>): S;
19
+ }
@@ -0,0 +1,55 @@
1
+ import { AbstractSerializer } from ".";
2
+ import { IllegalShapeError, transformErrors } from "../error";
3
+ import {} from "../packFormat";
4
+ import { selectSerializerModule } from "./module";
5
+ export class VersionedSerializer extends AbstractSerializer {
6
+ packFormat;
7
+ lookup;
8
+ type;
9
+ serializer;
10
+ typeName;
11
+ constructor(packFormat, lookup, type, serializers) {
12
+ super();
13
+ this.packFormat = packFormat;
14
+ this.lookup = lookup;
15
+ this.type = type;
16
+ this.typeName = type.name.toLowerCase();
17
+ const match = selectSerializerModule(packFormat, serializers);
18
+ if (!match)
19
+ throw new Error(`could not find ${this.typeName} serializer working for ${packFormat}`);
20
+ this.serializer = match;
21
+ }
22
+ serialize(output) {
23
+ const serialized = this.serializer.serialize(output, (it) => this.serialize(it));
24
+ if (serialized !== false)
25
+ return serialized;
26
+ throw new IllegalShapeError(`unable to serialize ${this.typeName}`, output);
27
+ }
28
+ deserializeUnvalidated(input) {
29
+ if (input instanceof this.type)
30
+ return input;
31
+ if (!input)
32
+ throw new IllegalShapeError(`${this.typeName} input may not be null`);
33
+ const deserialized = this.serializer.deserialize(input, (it) => this.deserialize(it));
34
+ if (deserialized)
35
+ return deserialized;
36
+ throw new IllegalShapeError(`unknown ${this.typeName} shape`, input);
37
+ }
38
+ deserialize(input) {
39
+ return transformErrors(() => {
40
+ const deserialized = this.deserializeUnvalidated(input);
41
+ return this.validated(deserialized);
42
+ });
43
+ }
44
+ validated(output) {
45
+ output.validate(this.lookup);
46
+ return output;
47
+ }
48
+ selectModule(modules) {
49
+ const selected = selectSerializerModule(this.packFormat, modules);
50
+ if (selected)
51
+ return this.withModule(selected);
52
+ return this;
53
+ }
54
+ }
55
+ //# sourceMappingURL=versioned.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioned.js","sourceRoot":"","sources":["../../src/serializer/versioned.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAmB,MAAM,GAAG,CAAC;AAGxD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE9D,OAAO,EAAoB,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAyB,MAAM,UAAU,CAAC;AAEzE,MAAM,OAAgB,mBAGpB,SAAQ,kBAA0B;IAKf;IACA;IACA;IANF,UAAU,CAAwB;IAClC,QAAQ,CAAS;IAElC,YACmB,UAAuB,EACvB,MAAsB,EACtB,IAAgB,EACjC,WAAkD;QAElD,KAAK,EAAE,CAAC;QALS,eAAU,GAAV,UAAU,CAAa;QACvB,WAAM,GAAN,MAAM,CAAgB;QACtB,SAAI,GAAJ,IAAI,CAAY;QAKjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAExC,MAAM,KAAK,GAAG,sBAAsB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAE9D,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,CAAC,QAAQ,2BAA2B,UAAU,EAAE,CACvE,CAAC;QAEJ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAEQ,SAAS,CAAC,MAAW;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAC1D,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CACnB,CAAC;QACF,IAAI,UAAU,KAAK,KAAK;YAAE,OAAO,UAAU,CAAC;QAC5C,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAEO,sBAAsB,CAAC,KAAc;QAC3C,IAAI,KAAK,YAAY,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAE7C,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,iBAAiB,CAAC,GAAG,IAAI,CAAC,QAAQ,wBAAwB,CAAC,CAAC;QAExE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAC9C,KAAgC,EAChC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAC7B,CAAC;QACF,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC;QAEtC,MAAM,IAAI,iBAAiB,CAAC,WAAW,IAAI,CAAC,QAAQ,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAEQ,WAAW,CAAC,KAAc;QACjC,OAAO,eAAe,CAAC,GAAG,EAAE;YAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAEQ,SAAS,CAAgB,MAAS;QACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAEQ,YAAY,CACnB,OAAuD;QAEvD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAoB,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import { AbstractSerializer, type Serializer } from ".";
2
+ import type { SerializerModule } from "./module";
3
+ export declare class WrapperSerializer<Out, S extends Serializer<Out, S>> extends AbstractSerializer<Out, S> {
4
+ protected readonly serializer: S;
5
+ protected readonly module: SerializerModule<Out>;
6
+ constructor(serializer: S, module: SerializerModule<Out>);
7
+ serialize(output: Out): unknown;
8
+ deserialize(input: unknown): Out;
9
+ withModule(): never;
10
+ selectModule(): never;
11
+ validated<T extends Out>(output: T): T;
12
+ }
@@ -0,0 +1,32 @@
1
+ import { AbstractSerializer } from ".";
2
+ export class WrapperSerializer extends AbstractSerializer {
3
+ serializer;
4
+ module;
5
+ constructor(serializer, module) {
6
+ super();
7
+ this.serializer = serializer;
8
+ this.module = module;
9
+ }
10
+ serialize(output) {
11
+ const fromModule = this.module.serialize(output, (it) => this.serialize(it));
12
+ if (fromModule)
13
+ return fromModule;
14
+ return this.serializer.serialize(output);
15
+ }
16
+ deserialize(input) {
17
+ const fromModule = this.module.deserialize(input, (it) => this.deserialize(it));
18
+ if (fromModule)
19
+ return this.serializer.deserialize(fromModule);
20
+ return this.serializer.deserialize(input);
21
+ }
22
+ withModule() {
23
+ throw new Error("serializer is already wrapped with module");
24
+ }
25
+ selectModule() {
26
+ throw new Error("serializer is already wrapped with module");
27
+ }
28
+ validated(output) {
29
+ return this.serializer.validated(output);
30
+ }
31
+ }
32
+ //# sourceMappingURL=wrapped.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapped.js","sourceRoot":"","sources":["../../src/serializer/wrapped.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAmB,MAAM,GAAG,CAAC;AAGxD,MAAM,OAAO,iBAGX,SAAQ,kBAA0B;IAEb;IACA;IAFrB,YACqB,UAAa,EACb,MAA6B;QAEhD,KAAK,EAAE,CAAC;QAHW,eAAU,GAAV,UAAU,CAAG;QACb,WAAM,GAAN,MAAM,CAAuB;IAGlD,CAAC;IAEQ,SAAS,CAAC,MAAW;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CACtD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CACnB,CAAC;QACF,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAEQ,WAAW,CAAC,KAAc;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CACvD,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CACrB,CAAC;QACF,IAAI,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAEQ,UAAU;QACjB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAEQ,YAAY;QACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAEQ,SAAS,CAAgB,MAAS;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adeficior/data-modifier",
3
- "version": "1.0.0-rc.38",
3
+ "version": "1.0.0-rc.39",
4
4
  "description": "Data Modifier",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -1,9 +0,0 @@
1
- import { Ingredient } from ".";
2
- import type RegistryLookup from "../../loader/registry";
3
- import type { SemVerInput } from "../../packFormat";
4
- import { IngredientMap, type IngredientMapInput } from "../../parser/recipe/ingredientMap";
5
- import { VersionedSerializer } from "../serializer";
6
- export default class IngredientSerializer extends VersionedSerializer<Ingredient> {
7
- constructor(packFormat: SemVerInput, lookup: RegistryLookup);
8
- ingredientMap(input: IngredientMapInput): IngredientMap;
9
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/common/ingredient/serializer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { Result } from ".";
2
- import type RegistryLookup from "../../loader/registry";
3
- import type { SemVerInput } from "../../packFormat";
4
- import { VersionedSerializer } from "../serializer";
5
- export default class ResultSerializer extends VersionedSerializer<Result> {
6
- constructor(packFormat: SemVerInput, lookup: RegistryLookup);
7
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/common/result/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAGjE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,MAAM,YAAY,GAAG,gBAAgB,CAAS,CAAC,OAAO,EAAE,EAAE;IACxD,OAAO,CAAC,YAAY,CAClB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,EAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CACjC,CAAC;IAEF,OAAO,CAAC,QAAQ,CACd,UAAU,EACV,YAAY,CAAC,MAAM,CAAC,EACpB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;KACrB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EACpD,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,WAAW,EACX,YAAY,CAAC,OAAO,CAAC,EACrB,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,YAAY;KACrB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EACvD,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,WAAW,EACX,YAAY,CAAC,OAAO,CAAC,EACrB,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,QAAQ;KAChB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EACjC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAC5B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,mBAA2B;IACvE,YAAY,UAAuB,EAAE,MAAsB;QACzD,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;YAChC,EAAE,EAAE,YAAY;SACjB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,35 +0,0 @@
1
- import { type ZodType } from "zod";
2
- import type RegistryLookup from "../loader/registry";
3
- import { type SemVerInput } from "../packFormat";
4
- import type { Class } from "./class";
5
- import type { Predicate } from "./filters";
6
- import type { InputOutput } from "./inputOutput";
7
- type Mapper<From extends Out, To extends In, Out, In> = (it: From, nested: (it: Out) => In) => To;
8
- export interface IOSerializer<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> {
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 createSerializer<Out>(factory: (builder: SerializerBuilder<Out, unknown>) => void): IOSerializer<Out, unknown>;
18
- export declare abstract class VersionedSerializer<Out extends InputOutput> {
19
- private readonly lookup;
20
- private readonly type;
21
- private readonly serializer;
22
- private readonly typeName;
23
- constructor(packFormat: SemVerInput, lookup: RegistryLookup, type: Class<Out>, serializers: Record<string, IOSerializer<Out>>);
24
- serialize(output: Out): unknown;
25
- serializeList(outputs: Out[]): unknown[];
26
- serializeOptional(output: Out | undefined): unknown;
27
- private deserializeUnvalidated;
28
- deserialize(input: unknown): Out;
29
- deserializeOptional(input: unknown): Out | undefined;
30
- validated<T extends Out>(output: T): T;
31
- deserializeList(input: unknown[]): Out[];
32
- }
33
- export declare function isObjectWith(property: string): (input: unknown) => input is Record<string, unknown>;
34
- export declare function hasType(type: string): (input: unknown) => input is Record<string, unknown>;
35
- export {};
@@ -1,110 +0,0 @@
1
- import {} from "zod";
2
- import { IllegalShapeError, transformErrors } from "../error";
3
- import { isAtLeastVersion } from "../packFormat";
4
- export function createSerializer(factory) {
5
- const deserializers = [];
6
- const serializers = [];
7
- factory({
8
- deserializer: (test, mapper) => {
9
- deserializers.push({
10
- test,
11
- mapper: mapper,
12
- });
13
- },
14
- serializer: (clazz, mapper) => {
15
- serializers.push({
16
- clazz,
17
- mapper: mapper,
18
- });
19
- },
20
- register(clazz, test, schema, deserialize, serialize) {
21
- this.serializer(clazz, (it, nested) => schema.encode(serialize(it, nested)));
22
- this.deserializer(test, (it, nested) => deserialize(schema.parse(it), nested));
23
- },
24
- });
25
- return {
26
- deserialize: (input, nested) => {
27
- const match = deserializers.find((it) => it.test(input));
28
- if (!match)
29
- return false;
30
- return match.mapper(input, nested);
31
- },
32
- serialize(output, nested) {
33
- const match = serializers.find((it) => output instanceof it.clazz);
34
- if (!match)
35
- return false;
36
- return match.mapper(output, nested);
37
- },
38
- };
39
- }
40
- export class VersionedSerializer {
41
- lookup;
42
- type;
43
- serializer;
44
- typeName;
45
- constructor(packFormat, lookup, type, serializers) {
46
- this.lookup = lookup;
47
- this.type = type;
48
- const match = Object.entries(serializers).findLast(([it]) => isAtLeastVersion(packFormat, it))?.[1];
49
- this.typeName = type.name.toLowerCase();
50
- if (!match)
51
- throw new Error(`could not find ${this.typeName} serializer working for ${packFormat}`);
52
- this.serializer = match;
53
- }
54
- serialize(output) {
55
- const serialized = this.serializer.serialize(output, (it) => this.serialize(it));
56
- if (serialized !== false)
57
- return serialized;
58
- throw new IllegalShapeError(`unable to serialize ${this.typeName}`, output);
59
- }
60
- serializeList(outputs) {
61
- return outputs.map((it) => this.serialize(it));
62
- }
63
- serializeOptional(output) {
64
- if (output === undefined)
65
- return undefined;
66
- return this.serialize(output);
67
- }
68
- deserializeUnvalidated(input) {
69
- if (input instanceof this.type)
70
- return input;
71
- if (!input)
72
- throw new IllegalShapeError(`${this.typeName} input may not be null`);
73
- const deserialized = this.serializer.deserialize(input, (it) => this.deserialize(it));
74
- if (deserialized)
75
- return deserialized;
76
- throw new IllegalShapeError(`unknown ${this.typeName} shape`, input);
77
- }
78
- deserialize(input) {
79
- return transformErrors(() => {
80
- const deserialized = this.deserializeUnvalidated(input);
81
- deserialized.validate(this.lookup);
82
- return deserialized;
83
- });
84
- }
85
- deserializeOptional(input) {
86
- if (input === undefined)
87
- return undefined;
88
- return this.deserialize(input);
89
- }
90
- validated(output) {
91
- output.validate(this.lookup);
92
- return output;
93
- }
94
- deserializeList(input) {
95
- return input.map((it) => this.deserialize(it));
96
- }
97
- }
98
- export function isObjectWith(property) {
99
- return (input) => input !== undefined &&
100
- input !== null &&
101
- typeof input === "object" &&
102
- property in input;
103
- }
104
- export function hasType(type) {
105
- const hasType = isObjectWith("type");
106
- return (input) => {
107
- return hasType(input) && input.type === type;
108
- };
109
- }
110
- //# sourceMappingURL=serializer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/common/serializer.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { type Ingredient } from "../../../common/ingredient/index.js";
2
- import type IngredientSerializer from "../../../common/ingredient/serializer.js";
3
- export declare function createThermalIngredients(ingredients: IngredientSerializer, input: unknown): Ingredient[];
4
- export declare function serializeThermalIngredient(ingredients: IngredientSerializer, ingredient: Ingredient): unknown;
@@ -1,51 +0,0 @@
1
- import z from "zod";
2
- import { AmountSchema, CountSchema } from "../../../common/fields.js";
3
- import { encodeId, IdSchema } from "../../../common/id.js";
4
- import { FluidTagIngredient, ItemIngredient, ItemTagIngredient, } from "../../../common/ingredient/index.js";
5
- import { IllegalShapeError } from "../../../error.js";
6
- const ThermalFluidTagSchema = z.object({
7
- fluid_tag: IdSchema,
8
- amount: AmountSchema,
9
- });
10
- const ThermalItemEntry = z.object({
11
- item: IdSchema,
12
- });
13
- const ThermalTagEntry = z.object({
14
- tag: IdSchema,
15
- });
16
- const ThermalIngredientEntry = ThermalItemEntry.or(ThermalTagEntry);
17
- const ThermalIngredientList = z.object({
18
- value: z.array(ThermalIngredientEntry),
19
- count: CountSchema,
20
- });
21
- // TODO serialize this?
22
- // type ThermalItemList = z.infer<typeof ThermalIngredientList>;
23
- export function createThermalIngredients(ingredients, input) {
24
- if (input && typeof input === "object") {
25
- if ("value" in input) {
26
- const parsed = ThermalIngredientList.parse(input);
27
- return parsed.value.map((it) => {
28
- if ("item" in it)
29
- return new ItemIngredient(it.item, parsed.count);
30
- if ("tag" in it)
31
- return new ItemTagIngredient(it.tag, parsed.count);
32
- throw new IllegalShapeError("unknown ingredient list entry shape", it);
33
- });
34
- }
35
- if ("fluid_tag" in input) {
36
- const parsed = ThermalFluidTagSchema.parse(input);
37
- return [new FluidTagIngredient(parsed.fluid_tag, parsed.amount)];
38
- }
39
- }
40
- return [ingredients.deserialize(input)];
41
- }
42
- export function serializeThermalIngredient(ingredients, ingredient) {
43
- if (ingredient instanceof FluidTagIngredient) {
44
- return {
45
- fluid_tag: encodeId(ingredient.tag),
46
- amount: ingredient.amount,
47
- };
48
- }
49
- return ingredients.serialize(ingredient);
50
- }
51
- //# sourceMappingURL=ingredient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ingredient.js","sourceRoot":"","sources":["../../../../src/parser/recipe/thermal/ingredient.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,GAElB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,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;AAIH,uBAAuB;AACvB,gEAAgE;AAEhE,MAAM,UAAU,wBAAwB,CACtC,WAAiC,EACjC,KAAc;IAEd,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC7B,IAAI,MAAM,IAAI,EAAE;oBAAE,OAAO,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnE,IAAI,KAAK,IAAI,EAAE;oBAAE,OAAO,IAAI,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpE,MAAM,IAAI,iBAAiB,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,WAAiC,EACjC,UAAsB;IAEtB,IAAI,UAAU,YAAY,kBAAkB,EAAE,CAAC;QAC7C,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YACnC,MAAM,EAAE,UAAU,CAAC,MAAM;SACA,CAAC;IAC9B,CAAC;IAED,OAAO,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC"}