@living-architecture/riviere-extract-config 0.5.3 → 0.5.4

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.
@@ -6,7 +6,7 @@ export type FindTarget = 'classes' | 'methods' | 'functions';
6
6
  * Standard architectural component types recognized by the Riviere extractor.
7
7
  * Each type represents a distinct role in the system's flow-based architecture.
8
8
  */
9
- export type ComponentType = 'api' | 'useCase' | 'domainOp' | 'event' | 'eventHandler' | 'eventPublisher' | 'ui';
9
+ export type ComponentType = 'api' | 'useCase' | 'domainOp' | 'event' | 'eventHandler' | 'ui';
10
10
  /** Matches elements with a specific decorator. */
11
11
  export interface HasDecoratorPredicate {
12
12
  hasDecorator: {
@@ -198,9 +198,25 @@ export interface ConnectionPattern {
198
198
  extract?: ConnectionExtractBlock;
199
199
  linkType: ConnectionLinkType;
200
200
  }
201
+ /**
202
+ * Declares a custom component type as an event publisher.
203
+ * The component type must be defined in customTypes in at least one module.
204
+ */
205
+ export interface EventPublisherConfig {
206
+ /** The custom component type name (e.g. 'eventPublisher'). */
207
+ fromType: string;
208
+ /** The metadata key on this component type that holds the published event type name. */
209
+ metadataKey: string;
210
+ }
201
211
  /** Connection detection configuration with pattern definitions. */
202
212
  export interface ConnectionsConfig {
203
- patterns: ConnectionPattern[];
213
+ patterns?: ConnectionPattern[];
214
+ /** Declares which custom component types publish events and how to detect them. */
215
+ eventPublishers?: EventPublisherConfig[];
216
+ }
217
+ /** Module-level connection detection configuration (patterns only — eventPublishers is top-level only). */
218
+ export interface ModuleConnectionsConfig {
219
+ patterns?: ConnectionPattern[];
204
220
  }
205
221
  /**
206
222
  * Reference to an external module definition file.
@@ -224,10 +240,9 @@ export interface ModuleConfig {
224
240
  domainOp?: ComponentRule;
225
241
  event?: ComponentRule;
226
242
  eventHandler?: ComponentRule;
227
- eventPublisher?: ComponentRule;
228
243
  ui?: ComponentRule;
229
244
  customTypes?: CustomTypes;
230
- connections?: ConnectionsConfig;
245
+ connections?: ModuleConnectionsConfig;
231
246
  }
232
247
  /**
233
248
  * A fully resolved module with all component rules.
@@ -242,7 +257,6 @@ export interface Module {
242
257
  domainOp: ComponentRule;
243
258
  event: ComponentRule;
244
259
  eventHandler: ComponentRule;
245
- eventPublisher: ComponentRule;
246
260
  ui: ComponentRule;
247
261
  customTypes?: CustomTypes;
248
262
  }
@@ -263,5 +277,6 @@ export interface ExtractionConfig {
263
277
  export interface ResolvedExtractionConfig {
264
278
  $schema?: string;
265
279
  modules: Module[];
280
+ connections?: ConnectionsConfig;
266
281
  }
267
282
  //# sourceMappingURL=extraction-config-schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extraction-config-schema.d.ts","sourceRoot":"","sources":["../src/extraction-config-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extraction-config-schema.d.ts","sourceRoot":"","sources":["../src/extraction-config-schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAA;AAE5D;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,GAAG,IAAI,CAAA;AAE5F,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;QACvB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAAE,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAC;AAE9D,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IAAE,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAC;AAEvE,yDAAyD;AACzD,MAAM,WAAW,4BAA4B;IAAE,mBAAmB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAC;AAErF,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IAAE,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAC;AAEzE,2DAA2D;AAC3D,MAAM,WAAW,oBAAoB;IAAE,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAC;AAExE,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IAAE,WAAW,EAAE,SAAS,CAAA;CAAC;AAE9D,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAAE,GAAG,EAAE,SAAS,EAAE,CAAA;CAAC;AAEhD,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAAE,EAAE,EAAE,SAAS,EAAE,CAAA;CAAC;AAE9C,+DAA+D;AAC/D,MAAM,MAAM,SAAS,GACjB,qBAAqB,GACrB,iBAAiB,GACjB,qBAAqB,GACrB,4BAA4B,GAC5B,qBAAqB,GACrB,oBAAoB,GACpB,oBAAoB,GACpB,YAAY,GACZ,WAAW,CAAA;AAEf,oEAAoE;AACpE,MAAM,WAAW,OAAO;IAAE,OAAO,EAAE,IAAI,CAAA;CAAC;AAExC,yDAAyD;AACzD,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,aAAa,CAAC,EAAE,IAAI,CAAA;IACpB,aAAa,CAAC,EAAE,IAAI,CAAA;CACrB;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IAAE,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;CAAC;AAE3E,0CAA0C;AAC1C,MAAM,WAAW,2BAA2B;IAAE,aAAa,EAAE,IAAI,GAAG;QAAE,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAA;CAAC;AAE9F,2CAA2C;AAC3C,MAAM,WAAW,4BAA4B;IAAE,cAAc,EAAE,IAAI,GAAG;QAAE,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAA;CAAC;AAEhG,6DAA6D;AAC7D,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,SAAS,CAAA;KACtB,CAAA;CACF;AAED,4CAA4C;AAC5C,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAA;QAC3B,SAAS,CAAC,EAAE,SAAS,CAAA;KACtB,CAAA;CACF;AAED,8CAA8C;AAC9C,MAAM,WAAW,8BAA8B;IAC7C,gBAAgB,EAAE;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,SAAS,CAAC,EAAE,SAAS,CAAA;KACtB,CAAA;CACF;AAED,qDAAqD;AACrD,MAAM,WAAW,+BAA+B;IAC9C,iBAAiB,EACb,IAAI,GACJ;QACA,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,SAAS,CAAC,EAAE,SAAS,CAAA;KACtB,CAAA;CACJ;AAED,iDAAiD;AACjD,MAAM,WAAW,4BAA4B;IAC3C,cAAc,EAAE;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,SAAS,CAAA;KACtB,CAAA;CACF;AAED,kDAAkD;AAClD,MAAM,WAAW,iCAAiC;IAAE,mBAAmB,EAAE,IAAI,CAAA;CAAC;AAE9E,sDAAsD;AACtD,MAAM,WAAW,mCAAmC;IAAE,qBAAqB,EAAE,IAAI,CAAA;CAAC;AAElF,mDAAmD;AACnD,MAAM,WAAW,+BAA+B;IAC9C,iBAAiB,EAAE;QACjB,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,SAAS,CAAA;KACtB,CAAA;CACF;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,qBAAqB,GACrB,2BAA2B,GAC3B,4BAA4B,GAC5B,0BAA0B,GAC1B,0BAA0B,GAC1B,8BAA8B,GAC9B,+BAA+B,GAC/B,4BAA4B,GAC5B,iCAAiC,GACjC,mCAAmC,GACnC,+BAA+B,CAAA;AAEnC;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAEzD,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,aAAa,CAAA;AAEnD,+DAA+D;AAC/D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAEvD,qCAAqC;AACrC,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAA;AAEhD,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,CAAA;AAEjD,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,UAAU,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CACtC;AAED,oDAAoD;AACpD,MAAM,WAAW,0BAA0B;IAAE,YAAY,EAAE,MAAM,CAAA;CAAC;AAElE,qDAAqD;AACrD,MAAM,WAAW,8BAA8B;IAAE,gBAAgB,EAAE,IAAI,CAAA;CAAC;AAExE,mDAAmD;AACnD,MAAM,WAAW,4BAA4B;IAAE,cAAc,EAAE,IAAI,CAAA;CAAC;AAEpE,0DAA0D;AAC1D,MAAM,MAAM,wBAAwB,GAChC,0BAA0B,GAC1B,8BAA8B,GAC9B,4BAA4B,CAAA;AAEhC,2EAA2E;AAC3E,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAA;AAE7E,8DAA8D;AAC9D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,oBAAoB,CAAA;IAC1B,KAAK,EAAE,uBAAuB,CAAA;IAC9B,OAAO,CAAC,EAAE,sBAAsB,CAAA;IAChC,QAAQ,EAAE,kBAAkB,CAAA;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAA;IAChB,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC9B,mFAAmF;IACnF,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAA;CACzC;AAED,2GAA2G;AAC3G,MAAM,WAAW,uBAAuB;IAAE,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B,EAAE,CAAC,EAAE,aAAa,CAAA;IAClB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,WAAW,CAAC,EAAE,uBAAuB,CAAA;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,aAAa,CAAA;IAClB,OAAO,EAAE,aAAa,CAAA;IACtB,QAAQ,EAAE,aAAa,CAAA;IACvB,KAAK,EAAE,aAAa,CAAA;IACpB,YAAY,EAAE,aAAa,CAAA;IAC3B,EAAE,EAAE,aAAa,CAAA;IACjB,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAChC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation-fixtures.d.ts","sourceRoot":"","sources":["../src/validation-fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,EACnD,MAAM,4BAA4B,CAAA;AAEnC,wBAAgB,uBAAuB,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAY9D;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAY5D;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAa5C;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAED,wBAAgB,oBAAoB,IAAI,wBAAwB,CAE/D;AAED,wBAAgB,mBAAmB,IAAI;IACrC,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;CACf,CAOA;AAED,wBAAgB,gBAAgB,IAAI,gBAAgB,CAqCnD"}
1
+ {"version":3,"file":"validation-fixtures.d.ts","sourceRoot":"","sources":["../src/validation-fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,EACnD,MAAM,4BAA4B,CAAA;AAEnC,wBAAgB,uBAAuB,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAW9D;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAW5D;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAY5C;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAED,wBAAgB,oBAAoB,IAAI,wBAAwB,CAE/D;AAED,wBAAgB,mBAAmB,IAAI;IACrC,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;CACf,CAOA;AAED,wBAAgB,gBAAgB,IAAI,gBAAgB,CAoCnD"}
@@ -7,7 +7,6 @@ export function createModuleWithoutPath() {
7
7
  domainOp: { notUsed: true },
8
8
  event: { notUsed: true },
9
9
  eventHandler: { notUsed: true },
10
- eventPublisher: { notUsed: true },
11
10
  ui: { notUsed: true },
12
11
  };
13
12
  }
@@ -20,7 +19,6 @@ export function createModuleWithoutApi() {
20
19
  domainOp: { notUsed: true },
21
20
  event: { notUsed: true },
22
21
  eventHandler: { notUsed: true },
23
- eventPublisher: { notUsed: true },
24
22
  ui: { notUsed: true },
25
23
  };
26
24
  }
@@ -34,7 +32,6 @@ export function createMinimalModule() {
34
32
  domainOp: { notUsed: true },
35
33
  event: { notUsed: true },
36
34
  eventHandler: { notUsed: true },
37
- eventPublisher: { notUsed: true },
38
35
  ui: { notUsed: true },
39
36
  };
40
37
  }
@@ -84,7 +81,6 @@ export function createFullConfig() {
84
81
  find: 'classes',
85
82
  where: { implementsInterface: { name: 'EventHandler' } },
86
83
  },
87
- eventPublisher: { notUsed: true },
88
84
  ui: { notUsed: true },
89
85
  },
90
86
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,gBAAgB,EAEjB,MAAM,4BAA4B,CAAA;AAgCnC;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,gBAAgB,CAE/E;AAED,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED,4DAA4D;AAC5D,qBAAa,+BAAgC,SAAQ,KAAK;aAE5B,MAAM,EAAE,eAAe,EAAE;IADrD,mEAAmE;gBACvC,MAAM,EAAE,eAAe,EAAE;CAItD;AASD,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,EAAE,CAQzF;AAgED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAa9E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAqBxE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAExE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAMrE"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,gBAAgB,EAGjB,MAAM,4BAA4B,CAAA;AA8BnC;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,gBAAgB,CAE/E;AAED,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED,4DAA4D;AAC5D,qBAAa,+BAAgC,SAAQ,KAAK;aAE5B,MAAM,EAAE,eAAe,EAAE;IADrD,mEAAmE;gBACvC,MAAM,EAAE,eAAe,EAAE;CAItD;AASD,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,EAAE,CAQzF;AA0HD;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAa9E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAqBxE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAExE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAMrE"}
@@ -9,7 +9,6 @@ const REQUIRED_FIELDS = {
9
9
  api: ['apiType'],
10
10
  event: ['eventName'],
11
11
  eventHandler: ['subscribedEvents'],
12
- eventPublisher: [],
13
12
  domainOp: ['operationName'],
14
13
  ui: ['route'],
15
14
  useCase: [],
@@ -20,7 +19,6 @@ const COMPONENT_TYPES = [
20
19
  'domainOp',
21
20
  'event',
22
21
  'eventHandler',
23
- 'eventPublisher',
24
22
  'ui',
25
23
  ];
26
24
  const ajv = new Ajv({ allErrors: true });
@@ -110,6 +108,56 @@ function validateAllExtractionRules(config) {
110
108
  return validateModuleExtractionRules(module, index);
111
109
  });
112
110
  }
111
+ function collectCustomTypeExtractedFields(config) {
112
+ const fieldsByType = new Map();
113
+ for (const module of config.modules) {
114
+ if ('$ref' in module || module.customTypes === undefined) {
115
+ continue;
116
+ }
117
+ for (const [typeName, rule] of Object.entries(module.customTypes)) {
118
+ const existing = fieldsByType.get(typeName) ?? new Set();
119
+ for (const key of Object.keys(rule.extract ?? {})) {
120
+ existing.add(key);
121
+ }
122
+ fieldsByType.set(typeName, existing);
123
+ }
124
+ }
125
+ return fieldsByType;
126
+ }
127
+ function validateEventPublishers(connections, customTypeFields) {
128
+ if (connections.eventPublishers === undefined) {
129
+ return [];
130
+ }
131
+ return connections.eventPublishers.flatMap((publisher, index) => {
132
+ const extractedFields = customTypeFields.get(publisher.fromType);
133
+ if (extractedFields === undefined) {
134
+ return [
135
+ {
136
+ path: `/connections/eventPublishers/${index}/fromType`,
137
+ message: `"${publisher.fromType}" is not defined as a customType in any module. ` +
138
+ `Add a customType named "${publisher.fromType}" to at least one module.`,
139
+ },
140
+ ];
141
+ }
142
+ if (!extractedFields.has(publisher.metadataKey)) {
143
+ return [
144
+ {
145
+ path: `/connections/eventPublishers/${index}/fromType`,
146
+ message: `customType "${publisher.fromType}" does not extract "${publisher.metadataKey}". ` +
147
+ `Add extract["${publisher.metadataKey}"] to that custom type.`,
148
+ },
149
+ ];
150
+ }
151
+ return [];
152
+ });
153
+ }
154
+ function validateConnectionsConfig(config) {
155
+ if (config.connections === undefined) {
156
+ return [];
157
+ }
158
+ const customTypeFields = collectCustomTypeExtractedFields(config);
159
+ return validateEventPublishers(config.connections, customTypeFields);
160
+ }
113
161
  /**
114
162
  * Validates data against the ExtractionConfig JSON Schema only.
115
163
  * Does NOT check semantic rules like required extraction fields.
@@ -144,7 +192,7 @@ export function validateExtractionConfig(data) {
144
192
  return validateExtractionConfigSchema(data);
145
193
  }
146
194
  // data is now narrowed to ExtractionConfig
147
- const semanticErrors = validateAllExtractionRules(data);
195
+ const semanticErrors = [...validateAllExtractionRules(data), ...validateConnectionsConfig(data)];
148
196
  if (semanticErrors.length > 0) {
149
197
  return {
150
198
  valid: false,
@@ -171,9 +219,9 @@ export function formatValidationErrors(errors) {
171
219
  * @throws ExtractionConfigValidationError if validation fails.
172
220
  */
173
221
  export function parseExtractionConfig(data) {
174
- if (isValidExtractionConfig(data)) {
222
+ const result = validateExtractionConfig(data);
223
+ if (result.valid && isValidExtractionConfig(data)) {
175
224
  return data;
176
225
  }
177
- const result = validateExtractionConfig(data);
178
226
  throw new ExtractionConfigValidationError(result.errors);
179
227
  }
@@ -87,10 +87,6 @@
87
87
  "$ref": "#/$defs/componentRule",
88
88
  "description": "Detection rule for EventHandler components"
89
89
  },
90
- "eventPublisher": {
91
- "$ref": "#/$defs/componentRule",
92
- "description": "Detection rule for EventPublisher components"
93
- },
94
90
  "ui": {
95
91
  "$ref": "#/$defs/componentRule",
96
92
  "description": "Detection rule for UI components"
@@ -103,7 +99,7 @@
103
99
  }
104
100
  },
105
101
  "connections": {
106
- "$ref": "#/$defs/connectionsConfig",
102
+ "$ref": "#/$defs/moduleConnectionsConfig",
107
103
  "description": "Module-level connection detection patterns additive to global"
108
104
  }
109
105
  },
@@ -113,7 +109,7 @@
113
109
  }
114
110
  },
115
111
  "then": {
116
- "required": ["api", "useCase", "domainOp", "event", "eventHandler", "eventPublisher", "ui"]
112
+ "required": ["api", "useCase", "domainOp", "event", "eventHandler", "ui"]
117
113
  }
118
114
  },
119
115
  "componentRule": {
@@ -607,7 +603,6 @@
607
603
  "connectionsConfig": {
608
604
  "type": "object",
609
605
  "description": "Connection detection configuration with pattern definitions",
610
- "required": ["patterns"],
611
606
  "additionalProperties": false,
612
607
  "properties": {
613
608
  "patterns": {
@@ -617,6 +612,47 @@
617
612
  "items": {
618
613
  "$ref": "#/$defs/connectionPattern"
619
614
  }
615
+ },
616
+ "eventPublishers": {
617
+ "type": "array",
618
+ "description": "Declares which custom component types publish events and how to detect the connections",
619
+ "minItems": 1,
620
+ "items": {
621
+ "$ref": "#/$defs/eventPublisherConfig"
622
+ }
623
+ }
624
+ }
625
+ },
626
+ "moduleConnectionsConfig": {
627
+ "type": "object",
628
+ "description": "Module-level connection detection configuration (patterns only — eventPublishers is top-level only)",
629
+ "additionalProperties": false,
630
+ "properties": {
631
+ "patterns": {
632
+ "type": "array",
633
+ "description": "Connection detection patterns",
634
+ "minItems": 1,
635
+ "items": {
636
+ "$ref": "#/$defs/connectionPattern"
637
+ }
638
+ }
639
+ }
640
+ },
641
+ "eventPublisherConfig": {
642
+ "type": "object",
643
+ "description": "Declares a custom component type as an event publisher",
644
+ "required": ["fromType", "metadataKey"],
645
+ "additionalProperties": false,
646
+ "properties": {
647
+ "fromType": {
648
+ "type": "string",
649
+ "description": "The custom component type name — must be defined in customTypes in at least one module",
650
+ "minLength": 1
651
+ },
652
+ "metadataKey": {
653
+ "type": "string",
654
+ "description": "The metadata key on this component type that holds the published event type name",
655
+ "minLength": 1
620
656
  }
621
657
  }
622
658
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@living-architecture/riviere-extract-config",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"