@elqora/dgp-core 1.0.0 → 1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,15 @@
1
1
  export * from "./capabilities.js";
2
+ export * from "./builder.js";
3
+ export * from "./cleanup.js";
2
4
  export * from "./context.js";
3
5
  export * from "./effects.js";
6
+ export * from "./fallbacks.js";
7
+ export * from "./graph.js";
4
8
  export * from "./indexer.js";
5
9
  export * from "./interpreter.js";
10
+ export * from "./normalization.js";
6
11
  export * from "./options.js";
12
+ export * from "./service-filter.js";
7
13
  export * from "./services.js";
8
14
  export * from "./visibility.js";
9
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,16 @@
1
1
  // SPDX-License-Identifier: GPL-3.0-only
2
2
  export * from "./capabilities.js";
3
+ export * from "./builder.js";
4
+ export * from "./cleanup.js";
3
5
  export * from "./context.js";
4
6
  export * from "./effects.js";
7
+ export * from "./fallbacks.js";
8
+ export * from "./graph.js";
5
9
  export * from "./indexer.js";
6
10
  export * from "./interpreter.js";
11
+ export * from "./normalization.js";
7
12
  export * from "./options.js";
13
+ export * from "./service-filter.js";
8
14
  export * from "./services.js";
9
15
  export * from "./visibility.js";
10
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
package/dist/indexer.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { FieldOption, ProductDefinition, ProductField, ProductFilter } from "@elqora/dgp-spec";
2
+ import { type OptionVisit } from "./options.js";
2
3
  export type ProductNodeKind = "filter" | "field" | "option" | "unknown";
3
4
  export type FilterRelation = "self" | "ancestor" | "descendant" | "unrelated";
4
5
  export type IndexedProductNode = {
@@ -18,6 +19,30 @@ export type IndexedProductNode = {
18
19
  kind: "unknown";
19
20
  id: string;
20
21
  };
22
+ export type ResolvedTrigger = {
23
+ kind: "filter";
24
+ id: string;
25
+ triggerId: string;
26
+ filter: ProductFilter;
27
+ } | {
28
+ kind: "button";
29
+ id: string;
30
+ triggerId: string;
31
+ field: ProductField;
32
+ filterIds: string[];
33
+ } | {
34
+ kind: "option";
35
+ id: string;
36
+ triggerId: string;
37
+ option: FieldOption;
38
+ field: ProductField;
39
+ filterIds: string[];
40
+ ancestors: FieldOption[];
41
+ } | {
42
+ kind: "unknown";
43
+ id: string;
44
+ triggerId: string;
45
+ };
21
46
  export interface ProductIndex {
22
47
  readonly definition: ProductDefinition;
23
48
  getNode(id: string): IndexedProductNode;
@@ -25,11 +50,19 @@ export interface ProductIndex {
25
50
  getField(id: string): ProductField | undefined;
26
51
  getOption(id: string): FieldOption | undefined;
27
52
  getOptionOwner(id: string): ProductField | undefined;
53
+ getOptionVisit(id: string): OptionVisit | undefined;
54
+ optionAncestors(id: string): FieldOption[];
55
+ optionDescendants(id: string): FieldOption[];
56
+ nodeIds(): string[];
57
+ triggerIds(): string[];
58
+ resolveTrigger(id: string): ResolvedTrigger;
59
+ rootFilters(): ProductFilter[];
28
60
  filterLineage(id: string): ProductFilter[];
29
61
  filterChildren(id: string): ProductFilter[];
30
62
  filterDescendants(id: string): ProductFilter[];
31
63
  relationBetweenFilters(baseId: string, otherId: string): FilterRelation;
32
64
  fieldBindIds(fieldOrId: ProductField | string): string[];
65
+ /** Direct authored bind contexts only; relationship/effect reachability requires visibility resolution. */
33
66
  nodeFilterIds(nodeId: string): string[];
34
67
  isFieldBoundWithin(fieldOrId: ProductField | string, filterId: string): boolean;
35
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIpG,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC;AAE9E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,CAAC;IACxC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAC/C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IACrD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAC3C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAC5C,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/C,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;IACxE,YAAY,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACzD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxC,kBAAkB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CACjF;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,GAAG,YAAY,CA8G9E"}
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
package/dist/indexer.js CHANGED
@@ -14,7 +14,7 @@ export function createProductIndex(definition) {
14
14
  fields.set(field.id, field);
15
15
  for (const visit of walkFieldOptions(field)) {
16
16
  if (!options.has(visit.optionId)) {
17
- options.set(visit.optionId, { option: visit.option, field });
17
+ options.set(visit.optionId, { option: visit.option, field, visit });
18
18
  }
19
19
  }
20
20
  }
@@ -94,6 +94,85 @@ export function createProductIndex(definition) {
94
94
  getOptionOwner(id) {
95
95
  return options.get(id)?.field;
96
96
  },
97
+ getOptionVisit(id) {
98
+ return options.get(id)?.visit;
99
+ },
100
+ optionAncestors(id) {
101
+ const result = [];
102
+ const seen = new Set();
103
+ let current = options.get(id)?.visit;
104
+ while (current?.parentId !== undefined && !seen.has(current.parentId)) {
105
+ seen.add(current.parentId);
106
+ const parent = options.get(current.parentId);
107
+ if (parent === undefined)
108
+ break;
109
+ result.unshift(parent.option);
110
+ current = parent.visit;
111
+ }
112
+ return result;
113
+ },
114
+ optionDescendants(id) {
115
+ const root = options.get(id);
116
+ if (root === undefined)
117
+ return [];
118
+ const result = [];
119
+ const queue = [...(root.option.children ?? [])];
120
+ const seen = new Set([id]);
121
+ while (queue.length > 0) {
122
+ const option = queue.shift();
123
+ if (option === undefined || seen.has(option.id))
124
+ continue;
125
+ seen.add(option.id);
126
+ result.push(option);
127
+ queue.push(...(option.children ?? []));
128
+ }
129
+ return result;
130
+ },
131
+ nodeIds() {
132
+ return [...filters.keys(), ...fields.keys(), ...options.keys()];
133
+ },
134
+ triggerIds() {
135
+ return [
136
+ ...[...fields.values()].filter((field) => field.button === true).map((field) => field.id),
137
+ ...options.keys(),
138
+ ];
139
+ },
140
+ resolveTrigger(id) {
141
+ const filter = filters.get(id);
142
+ if (filter !== undefined)
143
+ return { kind: "filter", id, triggerId: id, filter };
144
+ const field = fields.get(id);
145
+ if (field?.button === true) {
146
+ return { kind: "button", id, triggerId: id, field, filterIds: fieldBindIds(field) };
147
+ }
148
+ const hit = options.get(id);
149
+ if (hit !== undefined) {
150
+ const ancestors = [];
151
+ const seen = new Set();
152
+ let visit = hit.visit;
153
+ while (visit.parentId !== undefined && !seen.has(visit.parentId)) {
154
+ seen.add(visit.parentId);
155
+ const parent = options.get(visit.parentId);
156
+ if (parent === undefined)
157
+ break;
158
+ ancestors.unshift(parent.option);
159
+ visit = parent.visit;
160
+ }
161
+ return {
162
+ kind: "option",
163
+ id,
164
+ triggerId: id,
165
+ option: hit.option,
166
+ field: hit.field,
167
+ filterIds: fieldBindIds(hit.field),
168
+ ancestors,
169
+ };
170
+ }
171
+ return { kind: "unknown", id, triggerId: id };
172
+ },
173
+ rootFilters() {
174
+ return definition.filters.filter((filter) => filter.bind_id === undefined || !filters.has(filter.bind_id));
175
+ },
97
176
  filterLineage,
98
177
  filterChildren(id) {
99
178
  return [...(children.get(id) ?? [])];
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ProductDefinition } from "@elqora/dgp-spec";
2
+ /** Canonical authoring input. Missing collection roots are authoring defaults, not legacy aliases. */
3
+ export type ProductDefinitionDraft = Pick<ProductDefinition, "id" | "name"> & Partial<Omit<ProductDefinition, "id" | "name">>;
4
+ export interface NormalizeProductDefinitionOptions {
5
+ /** Used only when an authoring draft has no filter context at all. */
6
+ root_id?: string;
7
+ root_label?: string;
8
+ default_pricing_role?: "base" | "utility";
9
+ }
10
+ /**
11
+ * Normalize a canonical authoring draft. This deliberately recognizes no legacy keys and must not
12
+ * be used as a substitute for validating externally supplied published documents.
13
+ */
14
+ export declare function normalizeProductDefinition(input: ProductDefinitionDraft, options?: NormalizeProductDefinitionOptions): ProductDefinition;
15
+ //# sourceMappingURL=normalization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalization.d.ts","sourceRoot":"","sources":["../src/normalization.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,iBAAiB,EAMlB,MAAM,kBAAkB,CAAC;AAE1B,sGAAsG;AACtG,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,MAAM,CAAC,GACzE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;AAElD,MAAM,WAAW,iCAAiC;IAChD,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAuLD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,sBAAsB,EAC7B,OAAO,GAAE,iCAAsC,GAC9C,iBAAiB,CAsBnB"}
@@ -0,0 +1,207 @@
1
+ // SPDX-License-Identifier: GPL-3.0-only
2
+ function cloneJson(value) {
3
+ return JSON.parse(JSON.stringify(value));
4
+ }
5
+ function trimmed(value) {
6
+ return value.trim();
7
+ }
8
+ function uniqueStrings(values) {
9
+ const result = [];
10
+ const seen = new Set();
11
+ for (const value of values ?? []) {
12
+ const next = value.trim();
13
+ if (next.length === 0 || seen.has(next))
14
+ continue;
15
+ seen.add(next);
16
+ result.push(next);
17
+ }
18
+ return result;
19
+ }
20
+ function uniqueServiceIds(values, self) {
21
+ const result = [];
22
+ const seen = new Set();
23
+ const selfKey = self === undefined ? undefined : String(self);
24
+ for (const value of values ?? []) {
25
+ const key = String(value);
26
+ if (key.length === 0 || key === selfKey || seen.has(key))
27
+ continue;
28
+ seen.add(key);
29
+ result.push(value);
30
+ }
31
+ return result;
32
+ }
33
+ function normalizedBindId(value) {
34
+ if (value === undefined)
35
+ return undefined;
36
+ if (typeof value === "string") {
37
+ const next = value.trim();
38
+ return next.length === 0 ? undefined : next;
39
+ }
40
+ const values = uniqueStrings(value);
41
+ if (values.length === 0)
42
+ return undefined;
43
+ return values.length === 1 ? values[0] : values;
44
+ }
45
+ function normalizeOption(option, inheritedRole) {
46
+ const pricingRole = option.pricing_role ?? inheritedRole;
47
+ const children = option.children?.map((child) => normalizeOption(child, pricingRole));
48
+ return {
49
+ id: trimmed(option.id),
50
+ label: trimmed(option.label),
51
+ ...(option.value === undefined ? {} : { value: option.value }),
52
+ ...(option.service_id === undefined ? {} : { service_id: option.service_id }),
53
+ ...(option.visibility_expression === undefined ? {} : { visibility_expression: cloneJson(option.visibility_expression) }),
54
+ pricing_role: pricingRole,
55
+ ...(option.quantity_default === undefined ? {} : { quantity_default: option.quantity_default }),
56
+ ...(option.utility === undefined ? {} : { utility: cloneJson(option.utility) }),
57
+ ...(option.meta === undefined ? {} : { meta: cloneJson(option.meta) }),
58
+ ...(children === undefined ? {} : { children }),
59
+ };
60
+ }
61
+ function normalizeField(field, defaultRole) {
62
+ const pricingRole = field.pricing_role ?? defaultRole;
63
+ const bindId = normalizedBindId(field.bind_id);
64
+ const options = field.options?.map((option) => normalizeOption(option, pricingRole));
65
+ const common = {
66
+ id: trimmed(field.id),
67
+ type: trimmed(field.type),
68
+ ...(field.variant === undefined ? {} : { variant: trimmed(field.variant) }),
69
+ label: trimmed(field.label),
70
+ ...(field.visibility_expression === undefined ? {} : { visibility_expression: cloneJson(field.visibility_expression) }),
71
+ ...(bindId === undefined ? {} : { bind_id: bindId }),
72
+ ...(field.name === undefined ? {} : { name: trimmed(field.name) }),
73
+ ...(field.required === undefined ? {} : { required: field.required }),
74
+ ...(field.multiple === undefined ? {} : { multiple: field.multiple }),
75
+ ...(field.default_value === undefined ? {} : { default_value: cloneJson(field.default_value) }),
76
+ ...(field.defaults === undefined ? {} : { defaults: cloneJson(field.defaults) }),
77
+ ...(options === undefined ? {} : { options }),
78
+ ...(field.description === undefined ? {} : { description: field.description }),
79
+ pricing_role: pricingRole,
80
+ ...(field.validation === undefined ? {} : { validation: cloneJson(field.validation) }),
81
+ ...(field.quantity_default === undefined ? {} : { quantity_default: field.quantity_default }),
82
+ ...(field.quantity === undefined ? {} : { quantity: cloneJson(field.quantity) }),
83
+ ...(field.utility === undefined ? {} : { utility: cloneJson(field.utility) }),
84
+ ...(field.meta === undefined ? {} : { meta: cloneJson(field.meta) }),
85
+ };
86
+ return field.button === true
87
+ ? { ...common, button: true, ...(field.service_id === undefined ? {} : { service_id: field.service_id }) }
88
+ : { ...common, ...(field.button === false ? { button: false } : {}) };
89
+ }
90
+ function normalizeFilter(filter) {
91
+ const includes = uniqueStrings(filter.includes);
92
+ const excludes = uniqueStrings(filter.excludes);
93
+ const bindId = filter.bind_id?.trim();
94
+ return {
95
+ id: trimmed(filter.id),
96
+ label: trimmed(filter.label),
97
+ ...(bindId === undefined || bindId.length === 0 ? {} : { bind_id: bindId }),
98
+ ...(filter.service_id === undefined ? {} : { service_id: filter.service_id }),
99
+ ...(includes.length === 0 ? {} : { includes }),
100
+ ...(excludes.length === 0 ? {} : { excludes }),
101
+ ...(filter.capabilities === undefined ? {} : { capabilities: { ...filter.capabilities } }),
102
+ ...(filter.quantity_default === undefined ? {} : { quantity_default: filter.quantity_default }),
103
+ ...(filter.meta === undefined ? {} : { meta: cloneJson(filter.meta) }),
104
+ };
105
+ }
106
+ function normalizeStringArrayMap(value) {
107
+ const result = {};
108
+ for (const [rawKey, rawValues] of Object.entries(value ?? {})) {
109
+ const key = rawKey.trim();
110
+ const values = uniqueStrings(rawValues);
111
+ if (key.length > 0 && values.length > 0)
112
+ result[key] = values;
113
+ }
114
+ return result;
115
+ }
116
+ function normalizeOptionEffects(value) {
117
+ const result = {};
118
+ for (const [rawTriggerId, rawTargets] of Object.entries(value ?? {})) {
119
+ const triggerId = rawTriggerId.trim();
120
+ const targets = {};
121
+ for (const [rawFieldId, rawEffect] of Object.entries(rawTargets)) {
122
+ const fieldId = rawFieldId.trim();
123
+ const include = uniqueStrings(rawEffect.include);
124
+ const exclude = uniqueStrings(rawEffect.exclude);
125
+ if (fieldId.length === 0)
126
+ continue;
127
+ if (rawEffect.force_visible !== true && include.length === 0 && exclude.length === 0)
128
+ continue;
129
+ targets[fieldId] = {
130
+ ...(rawEffect.force_visible === true ? { force_visible: true } : {}),
131
+ ...(include.length === 0 ? {} : { include }),
132
+ ...(exclude.length === 0 ? {} : { exclude }),
133
+ };
134
+ }
135
+ if (triggerId.length > 0 && Object.keys(targets).length > 0)
136
+ result[triggerId] = targets;
137
+ }
138
+ return result;
139
+ }
140
+ function normalizeValueEffects(value) {
141
+ const result = {};
142
+ for (const [rawTriggerId, rawTargets] of Object.entries(value ?? {})) {
143
+ const triggerId = rawTriggerId.trim();
144
+ const targets = {};
145
+ for (const [rawFieldId, rawEffect] of Object.entries(rawTargets)) {
146
+ const fieldId = rawFieldId.trim();
147
+ if (fieldId.length === 0)
148
+ continue;
149
+ targets[fieldId] = cloneJson(rawEffect);
150
+ }
151
+ if (triggerId.length > 0 && Object.keys(targets).length > 0)
152
+ result[triggerId] = targets;
153
+ }
154
+ return result;
155
+ }
156
+ function normalizeFallbacks(value) {
157
+ if (value === null || value === undefined)
158
+ return null;
159
+ const nodes = {};
160
+ const global = {};
161
+ for (const [rawNodeId, candidates] of Object.entries(value.nodes ?? {})) {
162
+ const nodeId = rawNodeId.trim();
163
+ const next = uniqueServiceIds(candidates);
164
+ if (nodeId.length > 0 && next.length > 0)
165
+ nodes[nodeId] = next;
166
+ }
167
+ for (const [rawPrimary, candidates] of Object.entries(value.global ?? {})) {
168
+ const primary = rawPrimary.trim();
169
+ const next = uniqueServiceIds(candidates, primary);
170
+ if (primary.length > 0 && next.length > 0)
171
+ global[primary] = next;
172
+ }
173
+ return Object.keys(nodes).length === 0 && Object.keys(global).length === 0
174
+ ? null
175
+ : {
176
+ ...(Object.keys(nodes).length === 0 ? {} : { nodes }),
177
+ ...(Object.keys(global).length === 0 ? {} : { global }),
178
+ };
179
+ }
180
+ /**
181
+ * Normalize a canonical authoring draft. This deliberately recognizes no legacy keys and must not
182
+ * be used as a substitute for validating externally supplied published documents.
183
+ */
184
+ export function normalizeProductDefinition(input, options = {}) {
185
+ const defaultRole = options.default_pricing_role ?? "base";
186
+ const filters = (input.filters ?? []).map(normalizeFilter);
187
+ if (filters.length === 0) {
188
+ filters.push({ id: options.root_id ?? "root", label: options.root_label ?? "Root" });
189
+ }
190
+ return {
191
+ id: input.id,
192
+ name: trimmed(input.name),
193
+ filters,
194
+ fields: (input.fields ?? []).map((field) => normalizeField(field, defaultRole)),
195
+ order_for_tags: normalizeStringArrayMap(input.order_for_tags),
196
+ includes_for_buttons: normalizeStringArrayMap(input.includes_for_buttons),
197
+ excludes_for_buttons: normalizeStringArrayMap(input.excludes_for_buttons),
198
+ option_effects_for_buttons: normalizeOptionEffects(input.option_effects_for_buttons),
199
+ value_effects_for_triggers: normalizeValueEffects(input.value_effects_for_triggers),
200
+ schema_version: "1",
201
+ fallbacks: normalizeFallbacks(input.fallbacks),
202
+ description: input.description ?? null,
203
+ notices: cloneJson(input.notices ?? []),
204
+ meta: cloneJson(input.meta ?? {}),
205
+ };
206
+ }
207
+ //# sourceMappingURL=normalization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalization.js","sourceRoot":"","sources":["../src/normalization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { HandlerService, ServiceId, ServiceRatePolicy } from "@elqora/dgp-spec";
2
+ export interface ServiceFilterRejection {
3
+ service: HandlerService;
4
+ reasons: Array<"unavailable" | "capability_mismatch" | "rate_mismatch" | "excluded">;
5
+ }
6
+ export interface ServiceFilterResult {
7
+ accepted: HandlerService[];
8
+ rejected: ServiceFilterRejection[];
9
+ }
10
+ export interface ServiceFilterOptions {
11
+ capabilities?: Readonly<Record<string, boolean>>;
12
+ primary_rate?: number;
13
+ rate_policy?: ServiceRatePolicy;
14
+ exclude_ids?: Iterable<ServiceId>;
15
+ }
16
+ /** Compare catalog-rate evidence without calculating a final or authoritative customer price. */
17
+ export declare function serviceRateMatchesPolicy(candidateRate: number | null, primaryRate: number | null | undefined, policy: ServiceRatePolicy | undefined): boolean;
18
+ export declare function filterHandlerServices(services: readonly HandlerService[], options?: ServiceFilterOptions): ServiceFilterResult;
19
+ //# sourceMappingURL=service-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-filter.d.ts","sourceRoot":"","sources":["../src/service-filter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,qBAAqB,GAAG,eAAe,GAAG,UAAU,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,WAAW,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;CACnC;AAED,iGAAiG;AACjG,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,OAAO,CAcT;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAkBrB"}
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: GPL-3.0-only
2
+ import { serviceSatisfiesCapabilities } from "./capabilities.js";
3
+ /** Compare catalog-rate evidence without calculating a final or authoritative customer price. */
4
+ export function serviceRateMatchesPolicy(candidateRate, primaryRate, policy) {
5
+ if (policy === undefined)
6
+ return true;
7
+ if (primaryRate === undefined)
8
+ return true;
9
+ if (primaryRate === null || candidateRate === null)
10
+ return false;
11
+ switch (policy.kind) {
12
+ case "eq_primary":
13
+ return candidateRate === primaryRate;
14
+ case "lte_primary":
15
+ return candidateRate <= primaryRate && candidateRate >= primaryRate * (1 - policy.pct / 100);
16
+ case "within_pct":
17
+ return candidateRate <= primaryRate * (1 + policy.pct / 100);
18
+ case "at_least_pct_lower":
19
+ return candidateRate <= primaryRate * (1 - policy.pct / 100);
20
+ }
21
+ }
22
+ export function filterHandlerServices(services, options = {}) {
23
+ const excluded = new Set([...options.exclude_ids ?? []].map(String));
24
+ const accepted = [];
25
+ const rejected = [];
26
+ for (const service of services) {
27
+ const reasons = [];
28
+ if (excluded.has(String(service.id)))
29
+ reasons.push("excluded");
30
+ if (service.state !== "enabled")
31
+ reasons.push("unavailable");
32
+ if (!serviceSatisfiesCapabilities(service, options.capabilities ?? {})) {
33
+ reasons.push("capability_mismatch");
34
+ }
35
+ if (!serviceRateMatchesPolicy(service.rate, options.primary_rate, options.rate_policy)) {
36
+ reasons.push("rate_mismatch");
37
+ }
38
+ if (reasons.length === 0)
39
+ accepted.push(service);
40
+ else
41
+ rejected.push({ service, reasons });
42
+ }
43
+ return { accepted, rejected };
44
+ }
45
+ //# sourceMappingURL=service-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-filter.js","sourceRoot":"","sources":["../src/service-filter.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAIxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAmBjE,iGAAiG;AACjG,MAAM,UAAU,wBAAwB,CACtC,aAA4B,EAC5B,WAAsC,EACtC,MAAqC;IAErC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,WAAW,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,YAAY;YACf,OAAO,aAAa,KAAK,WAAW,CAAC;QACvC,KAAK,aAAa;YAChB,OAAO,aAAa,IAAI,WAAW,IAAI,aAAa,IAAI,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC/F,KAAK,YAAY;YACf,OAAO,aAAa,IAAI,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC/D,KAAK,oBAAoB;YACvB,OAAO,aAAa,IAAI,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAmC,EACnC,UAAgC,EAAE;IAElC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAsC,EAAE,CAAC;QACtD,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;YAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elqora/dgp-core",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Deterministic framework-neutral interpretation for Digital Goods Protocol product definitions.",
5
5
  "license": "GPL-3.0-only",
6
6
  "type": "module",
@@ -38,10 +38,11 @@
38
38
  "test": "vitest run",
39
39
  "check:boundaries": "node scripts/check-boundaries.mjs",
40
40
  "check": "npm run lint && npm run typecheck && npm run test && npm run check:boundaries && npm run build",
41
+ "prepare": "npm run build",
41
42
  "prepack": "npm run check"
42
43
  },
43
44
  "dependencies": {
44
- "@elqora/dgp-spec": "^1.0.0"
45
+ "@elqora/dgp-spec": "^1.5.0"
45
46
  },
46
47
  "devDependencies": {
47
48
  "@eslint/js": "10.0.1",