@adeficior/data-modifier-recipes 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/emitter.d.ts CHANGED
@@ -1,46 +1,33 @@
1
- import type { ClearableEmitter, Conditions, IdInput, LoaderContext, NormalizedId, RegistryProvider, SemVerInput } from "@adeficior/data-modifier-core";
2
- import type { CommonFilter } from "@adeficior/data-modifier-core/serializer";
1
+ import type { Conditions, IdInput, NormalizedId, RegistryProvider, SemVerInput } from "@adeficior/data-modifier-core";
2
+ import { SimpleEmitter } from "@adeficior/data-modifier-core";
3
3
  import type { IngredientFilter, IngredientInput, IngredientSerializer, Predicates, ResultInput, ResultSerializer } from "@adeficior/data-modifier-ingredients";
4
4
  import type { RecipeSerializerId } from "@adeficior/data-modifier/generated";
5
5
  import type { Logger } from "@adeficior/pack-resolver";
6
6
  import type { Recipe } from "./model";
7
+ import type { RecipeFilter, RecipeRules } from "./rule";
7
8
  import type { RecipeDefinition } from "./schema";
8
9
  import type { RecipesSerializer } from "./serializer/abstract";
9
10
  import { RecipeHolder } from "./serializer/holder";
10
- export type RecipeTest = Readonly<{
11
- id?: CommonFilter<NormalizedId>;
12
- type?: CommonFilter<NormalizedId<RecipeSerializerId>>;
13
- namespace?: string;
14
- output?: IngredientFilter;
15
- input?: IngredientFilter;
16
- }>;
17
11
  export type RecipeEmitter = {
18
- replaceResult(test: IngredientFilter, value: ResultInput, additionalTests?: RecipeTest): void;
19
- replaceIngredient(test: IngredientFilter, value: IngredientInput, additionalTests?: RecipeTest): void;
12
+ replaceResult(filter: IngredientFilter, value: ResultInput, additionalFilters?: RecipeFilter): void;
13
+ replaceIngredient(filter: IngredientFilter, value: IngredientInput, additionalFilters?: RecipeFilter): void;
20
14
  add(id: IdInput, value: RecipeDefinition): NormalizedId;
21
15
  add(id: IdInput, type: IdInput<RecipeSerializerId>, value: Recipe, conditions?: Conditions): NormalizedId;
22
- remove(test: RecipeTest): void;
16
+ remove(filter: RecipeFilter): void;
23
17
  };
24
18
  export declare const EMPTY_RECIPE: RecipeDefinition;
25
- export declare class RecipeEmitterImpl implements RecipeEmitter, ClearableEmitter {
19
+ export declare class RecipeEmitterImpl extends SimpleEmitter<RecipeHolder, RecipeDefinition> implements RecipeEmitter {
26
20
  private readonly logger;
27
21
  private readonly packFormat;
28
- private readonly registry;
29
22
  private readonly resultSerializer;
30
23
  private readonly ingredientSerializer;
31
24
  private readonly predicates;
25
+ private readonly rules;
32
26
  private readonly serializer;
33
- private readonly custom;
34
- private readonly ruled;
35
- constructor(logger: Logger, packFormat: SemVerInput, registry: RegistryProvider<RecipeHolder>, resultSerializer: ResultSerializer, ingredientSerializer: IngredientSerializer, predicates: Predicates, serializer: RecipesSerializer);
36
- resolver(context: LoaderContext): import("@adeficior/pack-resolver").Resolver<import("@adeficior/pack-resolver").Acceptable, import("@adeficior/pack-resolver").BaseContext>;
37
- private createIngredientPredicate;
38
- private createResultPredicate;
39
- private resolveRecipeTest;
27
+ constructor(logger: Logger, packFormat: SemVerInput, registry: RegistryProvider<RecipeHolder>, resultSerializer: ResultSerializer, ingredientSerializer: IngredientSerializer, predicates: Predicates, rules: RecipeRules, serializer: RecipesSerializer);
28
+ private addHolder;
40
29
  add(id: IdInput, arg: RecipeDefinition | IdInput<RecipeSerializerId>, arg2?: Recipe, conditions?: Conditions): NormalizedId;
41
- private addRule;
42
- remove(test: RecipeTest): void;
43
- replaceResult(test: IngredientFilter, input: ResultInput, additionalTest?: RecipeTest): void;
44
- replaceIngredient(test: IngredientFilter, input: IngredientInput, additionalTest?: RecipeTest): void;
45
- clear(): void;
30
+ remove(filter: RecipeFilter): void;
31
+ replaceResult(filter: IngredientFilter, input: ResultInput, additionalFilters?: RecipeFilter): void;
32
+ replaceIngredient(filter: IngredientFilter, input: IngredientInput, additionalFilters?: RecipeFilter): void;
46
33
  }
package/dist/emitter.js CHANGED
@@ -1,111 +1,68 @@
1
- import { CustomEmitter, encodeId, RuledEmitter, withDisabledConditions, } from "@adeficior/data-modifier-core";
2
- import { createReplacer, resolveIdTest, } from "@adeficior/data-modifier-core/serializer";
3
- import { combineResolvers, notNull } from "@adeficior/pack-resolver";
4
- import { RecipeRule } from "./rule";
1
+ import { encodeId, SimpleEmitter, withDisabledConditions, } from "@adeficior/data-modifier-core";
2
+ import { createReplacer } from "@adeficior/data-modifier-core/serializer";
5
3
  import { recipePath } from "./schema";
6
- import { RecipeHolder } from "./serializer/holder";
4
+ import { createFakeHolder, RecipeHolder } from "./serializer/holder";
7
5
  export const EMPTY_RECIPE = withDisabledConditions({
8
6
  type: "minecraft:disabled",
9
7
  });
10
- export class RecipeEmitterImpl {
8
+ export class RecipeEmitterImpl extends SimpleEmitter {
11
9
  logger;
12
10
  packFormat;
13
- registry;
14
11
  resultSerializer;
15
12
  ingredientSerializer;
16
13
  predicates;
14
+ rules;
17
15
  serializer;
18
- custom = new CustomEmitter((it) => recipePath(this.packFormat, it));
19
- ruled;
20
- constructor(
21
- // TODO inject
22
- logger, packFormat, registry, resultSerializer, ingredientSerializer, predicates, serializer) {
16
+ constructor(logger, packFormat, registry, resultSerializer, ingredientSerializer, predicates, rules, serializer) {
17
+ super("recipes", registry, (it) => recipePath(this.packFormat, it), EMPTY_RECIPE, (it) => this.serializer.serialize(it));
23
18
  this.logger = logger;
24
19
  this.packFormat = packFormat;
25
- this.registry = registry;
26
20
  this.resultSerializer = resultSerializer;
27
21
  this.ingredientSerializer = ingredientSerializer;
28
22
  this.predicates = predicates;
23
+ this.rules = rules;
29
24
  this.serializer = serializer;
30
- this.ruled = new RuledEmitter(this.registry, (id) => recipePath(packFormat, id), EMPTY_RECIPE, (it) => this.serializer.serialize(it), (id) => this.custom.has(id));
31
25
  }
32
- resolver(context) {
33
- return combineResolvers([this.ruled.resolver(context), this.custom.resolver(context)], { async: true });
34
- }
35
- createIngredientPredicate(filter) {
36
- if (!filter)
37
- return () => true;
38
- return this.predicates.ingredient(filter);
39
- }
40
- createResultPredicate(filter) {
41
- if (!filter)
42
- return () => true;
43
- return this.predicates.result(filter);
44
- }
45
- resolveRecipeTest(test) {
46
- const id = [];
47
- const type = [];
48
- const ingredient = [];
49
- const result = [];
50
- if (test.id)
51
- id.push(resolveIdTest(test.id));
52
- if (test.type)
53
- type.push(resolveIdTest(test.type));
54
- if (test.namespace)
55
- id.push((id) => id.namespace === test.namespace);
56
- if (test.output)
57
- result.push(this.createResultPredicate(test.output));
58
- if (test.input)
59
- ingredient.push(this.createIngredientPredicate(test.input));
60
- return { id, type, ingredient, result };
26
+ addHolder(id, holder) {
27
+ if (this.custom.has(id))
28
+ this.logger.error(`Overwriting custom recipe with ID ${encodeId(id)}`);
29
+ // TODO add to custom registry so recipe graph can use it
30
+ this.custom.add(id, holder);
31
+ return encodeId(id);
61
32
  }
62
33
  add(id, arg, arg2, conditions) {
63
34
  if (typeof arg === "string" || "namespace" in arg) {
64
35
  const holder = RecipeHolder.of(arg, arg2, conditions);
65
- const serialized = this.serializer.serialize(holder);
66
- return this.add(id, serialized);
36
+ return this.addHolder(id, holder);
67
37
  }
68
38
  else {
69
- const value = arg;
70
- if (this.custom.has(id))
71
- this.logger.error(`Overwriting custom recipe with ID ${encodeId(id)}`);
72
- // TODO add to custom registry so recipe graph can use it
73
- this.custom.add(id, value);
74
- return encodeId(id);
39
+ const definition = arg;
40
+ const holder = createFakeHolder(definition);
41
+ return this.addHolder(id, holder);
75
42
  }
76
43
  }
77
- addRule(context, modifier, recipeTest = {}, ingredientTests = {}) {
78
- const recipePredicates = this.resolveRecipeTest(recipeTest ?? {});
79
- this.ruled.addRule(new RecipeRule(context, recipePredicates.id, recipePredicates.type, [ingredientTests.ingredient, ...recipePredicates.ingredient].filter(notNull), [ingredientTests.result, ...recipePredicates.result].filter(notNull), modifier));
44
+ remove(filter) {
45
+ this.ruled.addRemoval(this.rules.resolve(filter), { filter });
80
46
  }
81
- remove(test) {
82
- this.addRule({ operation: "remove", test }, () => null, test);
83
- }
84
- replaceResult(test, input, additionalTest) {
85
- const predicate = this.createResultPredicate(test);
47
+ replaceResult(filter, input, additionalFilters) {
86
48
  const value = this.resultSerializer.deserialize(input);
87
- const replace = createReplacer(predicate, value);
88
- this.addRule({
49
+ const replace = createReplacer(this.predicates.result(filter), value);
50
+ this.ruled.addRule(this.rules.resolve(additionalFilters, { result: filter }), (recipe) => recipe.replaceResult(replace), {
89
51
  operation: "replace result",
90
- from: test,
52
+ from: filter,
91
53
  to: value,
92
- test: additionalTest,
93
- }, (recipe) => recipe.replaceResult(replace), additionalTest, { result: predicate });
54
+ filter: additionalFilters,
55
+ });
94
56
  }
95
- replaceIngredient(test, input, additionalTest) {
96
- const predicate = this.createIngredientPredicate(test);
57
+ replaceIngredient(filter, input, additionalFilters) {
97
58
  const value = this.ingredientSerializer.deserialize(input);
98
- const replace = createReplacer(predicate, value);
99
- this.addRule({
59
+ const replace = createReplacer(this.predicates.ingredient(filter), value);
60
+ this.ruled.addRule(this.rules.resolve(additionalFilters, { ingredient: filter }), (recipe) => recipe.replaceIngredient(replace), {
100
61
  operation: "replace ingredient",
101
- from: test,
62
+ from: filter,
102
63
  to: value,
103
- test: additionalTest,
104
- }, (recipe) => recipe.replaceIngredient(replace), additionalTest, { ingredient: predicate });
105
- }
106
- clear() {
107
- this.custom.clear();
108
- this.ruled.clear();
64
+ filter: additionalFilters,
65
+ });
109
66
  }
110
67
  }
111
68
  //# sourceMappingURL=emitter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- export { EMPTY_RECIPE, type RecipeEmitter, type RecipeTest } from "./emitter";
1
+ export { EMPTY_RECIPE, type RecipeEmitter } from "./emitter";
2
2
  export type { VanillaRecipeHelper } from "./helper/vanilla";
3
3
  export type * from "./hooks";
4
4
  export type { RecipeLoader } from "./loader";
5
5
  export type * from "./model";
6
6
  export { default } from "./module";
7
+ export type { RecipeFilter, RecipeRules } from "./rule";
7
8
  export * from "./schema";
8
9
  export type { RecipesSerializer } from "./serializer/abstract";
9
10
  export * from "./serializer/forge/conditional";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuC,MAAM,WAAW,CAAC;AAK9E,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,cAAc,UAAU,CAAC;AAEzB,cAAc,gCAAgC,CAAC;AAE/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,WAAW,CAAC;AAK7D,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,cAAc,UAAU,CAAC;AAEzB,cAAc,gCAAgC,CAAC;AAE/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC"}
package/dist/loader.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ConditionContext, RegistryProvider } from "@adeficior/data-modifier-core";
1
+ import type { ConditionContext, RegistryProvider, ResourceFolder } from "@adeficior/data-modifier-core";
2
2
  import { JsonLoader } from "@adeficior/data-modifier-core";
3
3
  import type { RecipeDefinition } from "./schema";
4
4
  import type { RecipesSerializer } from "./serializer/abstract";
@@ -9,7 +9,7 @@ export type RecipeLoader = {
9
9
  export declare class RecipeLoaderImpl extends JsonLoader<RecipeHolder> implements RecipeLoader {
10
10
  private readonly serializer;
11
11
  private readonly ignoredRecipeTypePatterns;
12
- constructor(serializer: RecipesSerializer, context?: ConditionContext);
12
+ constructor(serializer: RecipesSerializer, folder: ResourceFolder, context?: ConditionContext);
13
13
  ignoreType(pattern: string): void;
14
14
  parse(definition: RecipeDefinition): RecipeHolder | null;
15
15
  }
package/dist/loader.js CHANGED
@@ -4,8 +4,8 @@ import { minimatch } from "minimatch";
4
4
  export class RecipeLoaderImpl extends JsonLoader {
5
5
  serializer;
6
6
  ignoredRecipeTypePatterns = [];
7
- constructor(serializer, context) {
8
- super(context);
7
+ constructor(serializer, folder, context) {
8
+ super(folder, context);
9
9
  this.serializer = serializer;
10
10
  this.ignoreType("jeed:*");
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAStC,MAAM,OAAO,gBACX,SAAQ,UAAwB;IAMb;IAHF,yBAAyB,GAAa,EAAE,CAAC;IAE1D,YACmB,UAA6B,EAC9C,OAA0B;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHE,eAAU,GAAV,UAAU,CAAmB;QAK9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAEQ,KAAK,CAAC,UAA4B;QACzC,IACE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CACzC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAC/B,EACD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CACxB,UAAU,EACV,MAAM,EACN,UAAU,EACV,YAAY,EACZ,wBAAwB,EACxB,qBAAqB,CACtB,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEzD,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;CACF"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAStC,MAAM,OAAO,gBACX,SAAQ,UAAwB;IAMb;IAHF,yBAAyB,GAAa,EAAE,CAAC;IAE1D,YACmB,UAA6B,EAC9C,MAAsB,EACtB,OAA0B;QAE1B,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAJN,eAAU,GAAV,UAAU,CAAmB;QAM9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAEQ,KAAK,CAAC,UAA4B;QACzC,IACE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CACzC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAC/B,EACD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CACxB,UAAU,EACV,MAAM,EACN,UAAU,EACV,YAAY,EACZ,wBAAwB,EACxB,qBAAqB,CACtB,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEzD,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;CACF"}
package/dist/module.d.ts CHANGED
@@ -2,6 +2,7 @@ import type { RecipeEmitter } from "./emitter";
2
2
  import type { VanillaRecipeHelper } from "./helper/vanilla";
3
3
  import type { RegisterRecipeSerializer } from "./hooks";
4
4
  import type { RecipeLoader } from "./loader";
5
+ import type { RecipeRules } from "./rule";
5
6
  import type { RecipesSerializer } from "./serializer/abstract";
6
7
  declare const _default: import("@adeficior/data-modifier-core").ModuleConfig<{
7
8
  hooks: {
@@ -15,6 +16,7 @@ declare const _default: import("@adeficior/data-modifier-core").ModuleConfig<{
15
16
  };
16
17
  services: {
17
18
  "serializer:recipes": RecipesSerializer;
19
+ "rules:recipes": RecipeRules;
18
20
  "helper:recipes:vanilla": VanillaRecipeHelper;
19
21
  };
20
22
  }>;
package/dist/module.js CHANGED
@@ -3,7 +3,8 @@ import { name } from "../package.json";
3
3
  import { RecipeEmitterImpl } from "./emitter";
4
4
  import { VanillaRecipeHelperImpl } from "./helper/vanilla";
5
5
  import { RecipeLoaderImpl } from "./loader";
6
- import { recipePattern } from "./schema";
6
+ import { RecipeRulesImpl } from "./rule";
7
+ import { recipeFolder, recipePattern } from "./schema";
7
8
  import { registerDefaultSerializers } from "./serializer/default";
8
9
  import { RecipeSerializerImpl } from "./serializer/impl";
9
10
  export default defineModule({
@@ -23,6 +24,7 @@ export default defineModule({
23
24
  },
24
25
  services: {
25
26
  "serializer:recipes": "RecipesSerializer",
27
+ "rules:recipes": "RecipeRules",
26
28
  "helper:recipes:vanilla": "VanillaRecipeHelper",
27
29
  },
28
30
  },
@@ -30,13 +32,14 @@ export default defineModule({
30
32
  { service: "emitter:recipes", key: "recipes" },
31
33
  { service: "helper:recipes:vanilla", key: "recipes.vanilla" },
32
34
  ],
33
- setup: (pack) => {
34
- const serializer = pack.service("serializer:recipes", (container) => new RecipeSerializerImpl(container.get("serializer:results"), container.get("serializer:ingredients")));
35
- const loader = pack.loader("recipes", () => new RecipeLoaderImpl(serializer()), recipePattern(pack.options.packFormat));
36
- const emitter = pack.emitter("recipes", (container) => new RecipeEmitterImpl(container.get("logger"), pack.options.packFormat, loader(), container.get("serializer:results"), container.get("serializer:ingredients"), container.get("predicates"), serializer()));
37
- pack.service("helper:recipes:vanilla", (container) => new VanillaRecipeHelperImpl(emitter(), container.get("serializer:ingredients"), container.get("serializer:results")));
38
- pack.hook("recipes:register-serializer", registerDefaultSerializers);
39
- pack.hook("setup:after", ({ callHook }) => {
35
+ setup: (instance) => {
36
+ const serializer = instance.service("serializer:recipes", (container) => new RecipeSerializerImpl(container.get("serializer:results"), container.get("serializer:ingredients")));
37
+ const loader = instance.loader("recipes", () => new RecipeLoaderImpl(serializer(), recipeFolder(instance.options.packFormat)), recipePattern(instance.options.packFormat));
38
+ const rules = instance.service("rules:recipes", (container) => new RecipeRulesImpl(container.get("predicates")));
39
+ const emitter = instance.emitter("recipes", (container) => new RecipeEmitterImpl(container.get("logger"), instance.options.packFormat, loader(), container.get("serializer:results"), container.get("serializer:ingredients"), container.get("predicates"), rules(), serializer()));
40
+ instance.service("helper:recipes:vanilla", (container) => new VanillaRecipeHelperImpl(emitter(), container.get("serializer:ingredients"), container.get("serializer:results")));
41
+ instance.hook("recipes:register-serializer", registerDefaultSerializers);
42
+ instance.hook("setup:after", ({ callHook }) => {
40
43
  callHook("recipes:register-serializer", serializer().createEvent());
41
44
  });
42
45
  },
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAI3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,eAAe,YAAY,CAcxB;IACD,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE;QACZ,sCAAsC,EAAE,UAAU;KACnD;IACD,KAAK,EAAE;QACL,KAAK,EAAE;YACL,6BAA6B,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE;SACpE;QACD,OAAO,EAAE;YACP,OAAO,EAAE,cAAc;SACxB;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,eAAe;SACzB;QACD,QAAQ,EAAE;YACR,oBAAoB,EAAE,mBAAmB;YACzC,wBAAwB,EAAE,qBAAqB;SAChD;KACF;IACD,OAAO,EAAE;QACP,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,EAAE;QAC9C,EAAE,OAAO,EAAE,wBAAwB,EAAE,GAAG,EAAE,iBAAiB,EAAE;KAC9D;IACD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAC7B,oBAAoB,EACpB,CAAC,SAAS,EAAE,EAAE,CACZ,IAAI,oBAAoB,CACtB,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,EACnC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CACxC,CACJ,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CACxB,SAAS,EACT,GAAG,EAAE,CAAC,IAAI,gBAAgB,CAAC,UAAU,EAAE,CAAC,EACxC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CACvC,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAC1B,SAAS,EACT,CAAC,SAAS,EAAE,EAAE,CACZ,IAAI,iBAAiB,CACnB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EACvB,IAAI,CAAC,OAAO,CAAC,UAAU,EACvB,MAAM,EAAE,EACR,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,EACnC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,EACvC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAC3B,UAAU,EAAE,CACb,CACJ,CAAC;QAEF,IAAI,CAAC,OAAO,CACV,wBAAwB,EACxB,CAAC,SAAS,EAAE,EAAE,CACZ,IAAI,uBAAuB,CACzB,OAAO,EAAE,EACT,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,EACvC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CACpC,CACJ,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE,0BAA0B,CAAC,CAAC;QAErE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxC,QAAQ,CAAC,6BAA6B,EAAE,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
package/dist/rule.d.ts CHANGED
@@ -1,16 +1,35 @@
1
- import type { Id, Modifier } from "@adeficior/data-modifier-core";
2
- import { Rule } from "@adeficior/data-modifier-core";
3
- import type { Predicate } from "@adeficior/data-modifier-core/serializer";
4
- import type { Ingredient, Result } from "@adeficior/data-modifier-ingredients";
5
- import type { ContextLike, Logger } from "@adeficior/pack-resolver";
1
+ import type { Id, NormalizedId, Rule } from "@adeficior/data-modifier-core";
2
+ import type { CommonFilter, Predicate } from "@adeficior/data-modifier-core/serializer";
3
+ import type { Ingredient, IngredientFilter, Predicates, Result } from "@adeficior/data-modifier-ingredients";
4
+ import type { RecipeSerializerId } from "@adeficior/data-modifier/generated";
6
5
  import type { RecipeHolder } from "./serializer/holder";
7
- export declare class RecipeRule extends Rule<RecipeHolder> {
8
- private readonly context;
9
- private readonly idsTests;
10
- private readonly typeTests;
11
- private readonly ingredientTests;
12
- private readonly resultTests;
13
- constructor(context: ContextLike, idsTests: Predicate<Id>[], typeTests: Predicate<Id>[], ingredientTests: Predicate<Ingredient>[], resultTests: Predicate<Result>[], modifier: Modifier<RecipeHolder>);
14
- matches(id: Id, recipe: RecipeHolder): boolean;
15
- printWarning(logger: Logger): void;
6
+ declare class RecipeRule implements Rule<RecipeHolder> {
7
+ private readonly idPredicate;
8
+ private readonly typePredicate;
9
+ private readonly ingredientsPredicate;
10
+ private readonly resultsPredicate;
11
+ constructor(idPredicate: Predicate<Id>, typePredicate: Predicate<Id>, ingredientsPredicate: Predicate<Ingredient[]>, resultsPredicate: Predicate<Result[]>);
12
+ matches(id: Id, value: RecipeHolder): boolean;
16
13
  }
14
+ export type RecipeFilter = Readonly<{
15
+ id?: CommonFilter<NormalizedId>;
16
+ type?: CommonFilter<NormalizedId<RecipeSerializerId>>;
17
+ namespace?: string;
18
+ output?: IngredientFilter;
19
+ input?: IngredientFilter;
20
+ }>;
21
+ type SubjectFilters = {
22
+ ingredient?: IngredientFilter;
23
+ result?: IngredientFilter;
24
+ };
25
+ export type RecipeRules = {
26
+ resolve(filter?: RecipeFilter, subjectFilters?: SubjectFilters): Rule<RecipeHolder>;
27
+ };
28
+ export declare class RecipeRulesImpl implements RecipeRules {
29
+ private readonly predicates;
30
+ constructor(predicates: Predicates);
31
+ private resolveRecipeFilter;
32
+ private resolveSubjectFilters;
33
+ resolve(filter?: RecipeFilter, subjectFilters?: SubjectFilters): RecipeRule;
34
+ }
35
+ export {};
package/dist/rule.js CHANGED
@@ -1,27 +1,59 @@
1
- import { createId, Rule } from "@adeficior/data-modifier-core";
2
- export class RecipeRule extends Rule {
3
- context;
4
- idsTests;
5
- typeTests;
6
- ingredientTests;
7
- resultTests;
8
- constructor(context, idsTests, typeTests, ingredientTests, resultTests, modifier) {
9
- super(modifier);
10
- this.context = context;
11
- this.idsTests = idsTests;
12
- this.typeTests = typeTests;
13
- this.ingredientTests = ingredientTests;
14
- this.resultTests = resultTests;
1
+ import { createId } from "@adeficior/data-modifier-core";
2
+ import { always, every, resolveIdTest, some, } from "@adeficior/data-modifier-core/serializer";
3
+ import { notNull } from "@adeficior/pack-resolver";
4
+ class RecipeRule {
5
+ idPredicate;
6
+ typePredicate;
7
+ ingredientsPredicate;
8
+ resultsPredicate;
9
+ constructor(idPredicate, typePredicate, ingredientsPredicate, resultsPredicate) {
10
+ this.idPredicate = idPredicate;
11
+ this.typePredicate = typePredicate;
12
+ this.ingredientsPredicate = ingredientsPredicate;
13
+ this.resultsPredicate = resultsPredicate;
15
14
  }
16
- matches(id, recipe) {
17
- const types = recipe.getTypes().map(createId);
18
- return (this.idsTests.every((test) => test(id)) &&
19
- this.typeTests.every((test) => types.some((it) => test(it))) &&
20
- this.ingredientTests.every((test) => recipe.getIngredients().some((it) => test(it))) &&
21
- this.resultTests.every((test) => recipe.getResults().some((it) => test(it))));
15
+ matches(id, value) {
16
+ const types = value.getTypes().map(createId);
17
+ return (this.idPredicate(id) &&
18
+ types.some((it) => this.typePredicate(it)) &&
19
+ this.ingredientsPredicate(value.getIngredients()) &&
20
+ this.resultsPredicate(value.getResults()));
22
21
  }
23
- printWarning(logger) {
24
- logger.trace("could not find any recipes matching", this.context);
22
+ }
23
+ export class RecipeRulesImpl {
24
+ predicates;
25
+ constructor(predicates) {
26
+ this.predicates = predicates;
27
+ }
28
+ resolveRecipeFilter(test) {
29
+ const id = [];
30
+ const type = [];
31
+ const ingredient = [];
32
+ const result = [];
33
+ if (test.id)
34
+ id.push(resolveIdTest(test.id));
35
+ if (test.type)
36
+ type.push(resolveIdTest(test.type));
37
+ if (test.namespace)
38
+ id.push((id) => id.namespace === test.namespace);
39
+ if (test.output)
40
+ result.push(this.predicates.result(test.output));
41
+ if (test.input)
42
+ ingredient.push(this.predicates.ingredient(test.input));
43
+ return { id, type, ingredient, result };
44
+ }
45
+ resolveSubjectFilters({ ingredient, result }) {
46
+ return {
47
+ ingredient: notNull(ingredient)
48
+ ? this.predicates.ingredient(ingredient)
49
+ : always(),
50
+ result: notNull(result) ? this.predicates.result(result) : always(),
51
+ };
52
+ }
53
+ resolve(filter = {}, subjectFilters = {}) {
54
+ const recipePredicates = this.resolveRecipeFilter(filter);
55
+ const subjectPredicates = this.resolveSubjectFilters(subjectFilters);
56
+ return new RecipeRule(every(recipePredicates.id), every(recipePredicates.type), every([subjectPredicates.ingredient, ...recipePredicates.ingredient].map(some)), every([subjectPredicates.result, ...recipePredicates.result].map(some)));
25
57
  }
26
58
  }
27
59
  //# sourceMappingURL=rule.js.map
package/dist/rule.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rule.js","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAM/D,MAAM,OAAO,UAAW,SAAQ,IAAkB;IAE7B;IACA;IACA;IACA;IACA;IALnB,YACmB,OAAoB,EACpB,QAAyB,EACzB,SAA0B,EAC1B,eAAwC,EACxC,WAAgC,EACjD,QAAgC;QAEhC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAPC,YAAO,GAAP,OAAO,CAAa;QACpB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAAiB;QAC1B,oBAAe,GAAf,eAAe,CAAyB;QACxC,gBAAW,GAAX,WAAW,CAAqB;IAInD,CAAC;IAED,OAAO,CAAC,EAAM,EAAE,MAAoB;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,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,CAAC,CAAC,CAC/C;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,CAAC,CAAC,CAC3C,CACF,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;CACF"}
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import type { IdInput, SemVerInput, WithConditions } from "@adeficior/data-modifier-core";
1
+ import type { IdInput, ResourceFolder, SemVerInput, WithConditions } from "@adeficior/data-modifier-core";
2
2
  import type { RecipeSerializerId } from "@adeficior/data-modifier/generated";
3
3
  export type RecipeDefinition = WithConditions<Readonly<{
4
4
  type: RecipeSerializerId;
5
5
  }>>;
6
+ export declare function recipeFolder(packFormat: SemVerInput): ResourceFolder;
6
7
  export declare function recipePath(packFormat: SemVerInput, id: IdInput): string;
7
8
  export declare function recipePattern(packFormat: SemVerInput): string;
package/dist/schema.js CHANGED
@@ -1,13 +1,12 @@
1
- import { createId, isAtLeastVersion, jsonFilePattern, } from "@adeficior/data-modifier-core";
2
- function recipeFolder(packFormat) {
3
- return isAtLeastVersion(packFormat, "44") ? "recipe" : "recipes";
1
+ import { isAtLeastVersion, jsonFilePath, jsonFilePattern, } from "@adeficior/data-modifier-core";
2
+ export function recipeFolder(packFormat) {
3
+ const folder = isAtLeastVersion(packFormat, "44") ? "recipe" : "recipes";
4
+ return { packType: "data", folder };
4
5
  }
5
6
  export function recipePath(packFormat, id) {
6
- const folder = recipeFolder(packFormat);
7
- const { namespace, path } = createId(id);
8
- return `data/${namespace}/${folder}/${path}.json`;
7
+ return jsonFilePath(recipeFolder(packFormat), id);
9
8
  }
10
9
  export function recipePattern(packFormat) {
11
- return jsonFilePattern("data", recipeFolder(packFormat));
10
+ return jsonFilePattern(recipeFolder(packFormat));
12
11
  }
13
12
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AASvC,SAAS,YAAY,CAAC,UAAuB;IAC3C,OAAO,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAuB,EAAE,EAAW;IAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,QAAQ,SAAS,IAAI,MAAM,IAAI,IAAI,OAAO,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAuB;IACnD,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,+BAA+B,CAAC;AASvC,MAAM,UAAU,YAAY,CAAC,UAAuB;IAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAuB,EAAE,EAAW;IAC7D,OAAO,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAuB;IACnD,OAAO,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -3,9 +3,19 @@ import type { Replacer } from "@adeficior/data-modifier-core/serializer";
3
3
  import type { Ingredient, Result } from "@adeficior/data-modifier-ingredients";
4
4
  import type { RecipeSerializerId } from "@adeficior/data-modifier/generated";
5
5
  import type { Recipe } from "../model";
6
+ import type { RecipeDefinition } from "../schema";
6
7
  import type { RecipeParseContext } from "./context";
7
8
  import type { RecipeModifier } from "./modifier";
8
- export declare class RecipeHolder {
9
+ type CommonRecipeHolder = {
10
+ serialize(context: RecipeParseContext): RecipeDefinition;
11
+ getIngredients(): Ingredient[];
12
+ getResults(): Result[];
13
+ modify(modifier: RecipeModifier): RecipeHolder;
14
+ replaceIngredient(replace: Replacer<Ingredient>): RecipeHolder;
15
+ replaceResult(replace: Replacer<Result>): RecipeHolder;
16
+ getTypes(): NormalizedId[];
17
+ };
18
+ export declare class RecipeHolder implements CommonRecipeHolder {
9
19
  private readonly definition;
10
20
  readonly recipe: Recipe;
11
21
  readonly serializerType: NormalizedId;
@@ -24,3 +34,18 @@ export declare class RecipeHolder {
24
34
  getTypes(): NormalizedId[];
25
35
  static of(type: IdInput<RecipeSerializerId>, recipe: Recipe, conditions?: Conditions): RecipeHolder;
26
36
  }
37
+ declare class FakeRecipeHolder implements CommonRecipeHolder {
38
+ private readonly definition;
39
+ constructor(definition: RecipeDefinition);
40
+ getIngredients(): Ingredient[];
41
+ getResults(): Result[];
42
+ getTypes(): NormalizedId[];
43
+ cast(): RecipeHolder;
44
+ modify(): RecipeHolder;
45
+ replaceIngredient(): RecipeHolder;
46
+ replaceResult(): RecipeHolder;
47
+ serialize(): RecipeDefinition;
48
+ }
49
+ export declare function isFakeHolder(holder: unknown): holder is FakeRecipeHolder;
50
+ export declare function createFakeHolder(definition: RecipeDefinition): RecipeHolder;
51
+ export {};
@@ -55,4 +55,41 @@ export class RecipeHolder {
55
55
  return new RecipeHolder({ type: encodeId(type), ...conditions }, recipe);
56
56
  }
57
57
  }
58
+ class FakeRecipeHolder {
59
+ definition;
60
+ constructor(definition) {
61
+ this.definition = definition;
62
+ }
63
+ getIngredients() {
64
+ return [];
65
+ }
66
+ getResults() {
67
+ return [];
68
+ }
69
+ getTypes() {
70
+ return [encodeId(this.definition.type)];
71
+ }
72
+ cast() {
73
+ return this;
74
+ }
75
+ modify() {
76
+ return this.cast();
77
+ }
78
+ replaceIngredient() {
79
+ return this.cast();
80
+ }
81
+ replaceResult() {
82
+ return this.cast();
83
+ }
84
+ serialize() {
85
+ return this.definition;
86
+ }
87
+ }
88
+ export function isFakeHolder(holder) {
89
+ return holder instanceof FakeRecipeHolder;
90
+ }
91
+ export function createFakeHolder(definition) {
92
+ const fake = new FakeRecipeHolder(definition);
93
+ return fake.cast();
94
+ }
58
95
  //# sourceMappingURL=holder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"holder.js","sourceRoot":"","sources":["../../src/serializer/holder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AASzD,SAAS,IAAI;IACX,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAI,QAAqB;IACxC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,OAAO,YAAY;IAIJ;IACR;IAJF,cAAc,CAAe;IAEtC,YACmB,UAA4B,EACpC,MAAc;QADN,eAAU,GAAV,UAAU,CAAkB;QACpC,WAAM,GAAN,MAAM,CAAQ;QAEvB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,CAAC,OAA2B;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5D,OAAO;YACL,GAAG,IAAI,CAAC,UAAU;YAClB,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IACtC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,QAAwB;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,iBAAiB,CAAC,OAA6B;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC;YACjB,UAAU,EAAE,OAAO;YACnB,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAAC;YACrC,MAAM,EAAE,IAAI,EAAE;YACd,cAAc,EAAE,IAAI,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,OAAyB;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC;YACjB,UAAU,EAAE,IAAI,EAAE;YAClB,kBAAkB,EAAE,IAAI,EAAE;YAC1B,MAAM,EAAE,OAAO;YACf,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,EAAE,CACP,IAAiC,EACjC,MAAc,EACd,UAAuB;QAEvB,OAAO,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;CACF"}
1
+ {"version":3,"file":"holder.js","sourceRoot":"","sources":["../../src/serializer/holder.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { encodeId } from "@adeficior/data-modifier-core";
2
2
  import { IllegalShapeError, UnknownRegistryEntry, } from "@adeficior/data-modifier-core/serializer";
3
- import { RecipeHolder } from "./holder";
3
+ import { isFakeHolder, RecipeHolder } from "./holder";
4
4
  export class RecipeSerializerImpl {
5
5
  resultSerializer;
6
6
  ingredientSerializer;
@@ -24,6 +24,9 @@ export class RecipeSerializerImpl {
24
24
  throw new UnknownRegistryEntry(`no serializer registered for ${id}`, "minecraft:recipe_serializer", id);
25
25
  }
26
26
  serialize(holder, recipe) {
27
+ if (isFakeHolder(holder)) {
28
+ return holder.serialize();
29
+ }
27
30
  if (holder instanceof RecipeHolder) {
28
31
  const parser = this.typeSerializers.get(holder.serializerType);
29
32
  if (!parser)
@@ -1 +1 @@
1
- {"version":3,"file":"impl.js","sourceRoot":"","sources":["../../src/serializer/impl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impl.js","sourceRoot":"","sources":["../../src/serializer/impl.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export * from "./abstract";
2
2
  export type * from "./context";
3
- export * from "./holder";
3
+ export { RecipeHolder } from "./holder";
4
4
  export * from "./manyToMany";
5
5
  export * from "./manyToOne";
6
6
  export * from "./oneToOne";
@@ -1,5 +1,5 @@
1
1
  export * from "./abstract";
2
- export * from "./holder";
2
+ export { RecipeHolder } from "./holder";
3
3
  export * from "./manyToMany";
4
4
  export * from "./manyToOne";
5
5
  export * from "./oneToOne";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serializer/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAE3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serializer/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -1 +1,2 @@
1
+ export * from "./mocks";
1
2
  export * from "./setup";
@@ -1,2 +1,3 @@
1
+ export * from "./mocks";
1
2
  export * from "./setup";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function mockRules(): {
2
+ resolve: import("bun:test").Mock<(...args: any[]) => any>;
3
+ };
@@ -0,0 +1,7 @@
1
+ import { mock } from "bun:test";
2
+ export function mockRules() {
3
+ return {
4
+ resolve: mock(),
5
+ };
6
+ }
7
+ //# sourceMappingURL=mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/testing/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,OAAO,EAAE,IAAI,EAAE;KACM,CAAC;AAC1B,CAAC"}
@@ -6,7 +6,8 @@ import { createTestDataResolver, setupLookup } from "@adeficior/testing";
6
6
  import { afterAll, afterEach, beforeAll } from "bun:test";
7
7
  import { RecipeEmitterImpl } from "../emitter";
8
8
  import { RecipeLoaderImpl } from "../loader";
9
- import { recipePattern } from "../schema";
9
+ import { RecipeRulesImpl } from "../rule";
10
+ import { recipeFolder, recipePattern } from "../schema";
10
11
  import { registerDefaultSerializers } from "../serializer/default";
11
12
  import { RecipeSerializerImpl } from "../serializer/impl";
12
13
  export function setupRecipeSerializer(version, options) {
@@ -22,7 +23,7 @@ export function setupRecipeSerializer(version, options) {
22
23
  }
23
24
  export function setupRecipeLoader(version, { mods = [], parsers, ...resolverOptions } = {}) {
24
25
  const { lookup, serializer } = setupRecipeSerializer(version, { parsers });
25
- const loader = new RecipeLoaderImpl(serializer, {
26
+ const loader = new RecipeLoaderImpl(serializer, recipeFolder(packFormatOf(version)), {
26
27
  mods: ["minecraft", ...mods],
27
28
  });
28
29
  const logger = createTestLogger();
@@ -50,8 +51,9 @@ export function setupRecipeEmitter(version, options) {
50
51
  const ingredients = setupIngredientSerializer(version, lookup);
51
52
  const tags = setupTagRegistry(version, options);
52
53
  const predicates = setupPredicates(lookup, tags, ingredients);
54
+ const rules = new RecipeRulesImpl(predicates);
53
55
  const logger = createTestLogger();
54
- const emitter = new RecipeEmitterImpl(logger, packFormatOf(version), loader, results, ingredients, predicates, serializer);
56
+ const emitter = new RecipeEmitterImpl(logger, packFormatOf(version), loader, results, ingredients, predicates, rules, serializer);
55
57
  const resolver = emitter.resolver({ logger });
56
58
  afterEach(() => {
57
59
  emitter.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/testing/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/testing/setup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@adeficior/data-modifier-recipes",
3
3
  "description": "data-modifier module for recipes",
4
- "version": "2.0.2",
4
+ "version": "2.1.0",
5
5
  "exports": {
6
6
  ".": "./dist/index.js",
7
7
  "./serializer": "./dist/serializer/index.js",
@@ -11,16 +11,16 @@
11
11
  "type": "module",
12
12
  "devDependencies": {
13
13
  "@types/lodash-es": "^4.17.12",
14
- "@adeficior/data-modifier-ingredients": "^2.0.2"
14
+ "@adeficior/data-modifier-ingredients": "^2.0.3"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "@adeficior/pack-resolver": "^2.0.1",
18
18
  "typescript": "^5",
19
19
  "minimatch": "^10.2.6",
20
20
  "lodash-es": "^4.18.1",
21
- "@adeficior/data-modifier-core": "^2.0.2",
22
- "@adeficior/data-modifier-ingredients": "^2.0.2",
23
- "@adeficior/data-modifier-tags": "^2.0.2"
21
+ "@adeficior/data-modifier-core": "^2.1.0",
22
+ "@adeficior/data-modifier-ingredients": "^2.0.3",
23
+ "@adeficior/data-modifier-tags": "^2.0.3"
24
24
  },
25
25
  "typesVersions": {
26
26
  "*": {