@living-architecture/riviere-builder 0.3.5 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
package/dist/builder.js CHANGED
@@ -6,6 +6,7 @@ import { assertCustomTypeExists, assertDomainExists, assertRequiredPropertiesPro
6
6
  import { ComponentId } from '@living-architecture/riviere-schema';
7
7
  import { createSourceNotFoundError, findNearMatches } from './component-suggestion';
8
8
  import { mergeBehavior } from './merge-behavior';
9
+ import { deduplicateStrings, deduplicateStateTransitions } from './deduplicate';
9
10
  import { CustomTypeAlreadyDefinedError, DuplicateComponentError, DuplicateDomainError, InvalidEnrichmentTargetError, } from './errors';
10
11
  /**
11
12
  * Programmatically construct Rivière architecture graphs.
@@ -470,10 +471,14 @@ export class RiviereBuilder {
470
471
  component.entity = enrichment.entity;
471
472
  }
472
473
  if (enrichment.stateChanges !== undefined) {
473
- component.stateChanges = [...(component.stateChanges ?? []), ...enrichment.stateChanges];
474
+ const existing = component.stateChanges ?? [];
475
+ const newItems = deduplicateStateTransitions(existing, enrichment.stateChanges);
476
+ component.stateChanges = [...existing, ...newItems];
474
477
  }
475
478
  if (enrichment.businessRules !== undefined) {
476
- component.businessRules = [...(component.businessRules ?? []), ...enrichment.businessRules];
479
+ const existing = component.businessRules ?? [];
480
+ const newItems = deduplicateStrings(existing, enrichment.businessRules);
481
+ component.businessRules = [...existing, ...newItems];
477
482
  }
478
483
  if (enrichment.behavior !== undefined) {
479
484
  component.behavior = mergeBehavior(component.behavior, enrichment.behavior);
@@ -0,0 +1,4 @@
1
+ import type { StateTransition } from '@living-architecture/riviere-schema';
2
+ export declare function deduplicateStrings(existing: string[], incoming: string[]): string[];
3
+ export declare function deduplicateStateTransitions(existing: StateTransition[], incoming: StateTransition[]): StateTransition[];
4
+ //# sourceMappingURL=deduplicate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deduplicate.d.ts","sourceRoot":"","sources":["../src/deduplicate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAE1E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAGnF;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,eAAe,EAAE,EAC3B,QAAQ,EAAE,eAAe,EAAE,GAC1B,eAAe,EAAE,CAOnB"}
@@ -0,0 +1,7 @@
1
+ export function deduplicateStrings(existing, incoming) {
2
+ const existingSet = new Set(existing);
3
+ return incoming.filter((item) => !existingSet.has(item));
4
+ }
5
+ export function deduplicateStateTransitions(existing, incoming) {
6
+ return incoming.filter((item) => !existing.some((e) => e.from === item.from && e.to === item.to && e.trigger === item.trigger));
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"merge-behavior.d.ts","sourceRoot":"","sources":["../src/merge-behavior.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAE/F,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EACvC,QAAQ,EAAE,iBAAiB,GAC1B,iBAAiB,CAiBnB"}
1
+ {"version":3,"file":"merge-behavior.d.ts","sourceRoot":"","sources":["../src/merge-behavior.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAQ/F,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EACvC,QAAQ,EAAE,iBAAiB,GAC1B,iBAAiB,CASnB"}
@@ -1,18 +1,15 @@
1
+ import { deduplicateStrings } from './deduplicate';
2
+ function mergeStringArray(existing, incoming) {
3
+ const base = existing ?? [];
4
+ return [...base, ...deduplicateStrings(base, incoming)];
5
+ }
1
6
  export function mergeBehavior(existing, incoming) {
2
7
  const base = existing ?? {};
3
8
  return {
4
9
  ...base,
5
- ...(incoming.reads !== undefined && {
6
- reads: [...(base.reads ?? []), ...incoming.reads],
7
- }),
8
- ...(incoming.validates !== undefined && {
9
- validates: [...(base.validates ?? []), ...incoming.validates],
10
- }),
11
- ...(incoming.modifies !== undefined && {
12
- modifies: [...(base.modifies ?? []), ...incoming.modifies],
13
- }),
14
- ...(incoming.emits !== undefined && {
15
- emits: [...(base.emits ?? []), ...incoming.emits],
16
- }),
10
+ ...(incoming.reads !== undefined && { reads: mergeStringArray(base.reads, incoming.reads) }),
11
+ ...(incoming.validates !== undefined && { validates: mergeStringArray(base.validates, incoming.validates) }),
12
+ ...(incoming.modifies !== undefined && { modifies: mergeStringArray(base.modifies, incoming.modifies) }),
13
+ ...(incoming.emits !== undefined && { emits: mergeStringArray(base.emits, incoming.emits) }),
17
14
  };
18
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@living-architecture/riviere-builder",
3
- "version": "0.3.5",
3
+ "version": "0.4.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },