@living-architecture/riviere-extract-ts 0.2.10 → 0.2.12

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,6 +1,5 @@
1
- import type { Project } from 'ts-morph';
2
1
  import type { EnrichedComponent } from '../../value-extraction/enrich-components';
3
2
  import type { ExtractedLink } from '../extracted-link';
4
3
  import type { AsyncDetectionOptions } from './detect-subscribe-connections';
5
- export declare function detectPublishConnections(project: Project, components: readonly EnrichedComponent[], options: AsyncDetectionOptions): ExtractedLink[];
4
+ export declare function detectPublishConnections(components: readonly EnrichedComponent[], options: AsyncDetectionOptions): ExtractedLink[];
6
5
  //# sourceMappingURL=detect-publish-connections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect-publish-connections.d.ts","sourceRoot":"","sources":["../../../../../../src/features/extraction/domain/connection-detection/async-detection/detect-publish-connections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAMtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAI3E,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,OAAO,EAAE,qBAAqB,GAC7B,aAAa,EAAE,CAQjB"}
1
+ {"version":3,"file":"detect-publish-connections.d.ts","sourceRoot":"","sources":["../../../../../../src/features/extraction/domain/connection-detection/async-detection/detect-publish-connections.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAI3E,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,OAAO,EAAE,qBAAqB,GAC7B,aAAa,EAAE,CAmBjB"}
@@ -1,50 +1,47 @@
1
1
  import { ConnectionDetectionError } from '../connection-detection-error';
2
- import { componentIdentity, stripGenericArgs } from '../call-graph/call-graph-types';
3
- import { findClassInProject } from '../call-graph/trace-calls';
4
- export function detectPublishConnections(project, components, options) {
2
+ import { componentIdentity } from '../call-graph/call-graph-types';
3
+ export function detectPublishConnections(components, options) {
5
4
  const publishers = components.filter((c) => c.type === 'eventPublisher');
6
5
  const events = components.filter((c) => c.type === 'event');
7
6
  const repository = options.repository;
8
- return publishers.flatMap((publisher) => extractPublisherLinks(project, publisher, events, options, repository));
9
- }
10
- function extractPublisherLinks(project, publisher, events, options, repository) {
11
- const publishedEventType = publisher.metadata['publishedEventType'];
12
- if (typeof publishedEventType === 'string') {
7
+ return publishers.flatMap((publisher) => {
8
+ const publishedEventType = publisher.metadata['publishedEventType'];
13
9
  const sourceLocation = {
14
10
  repository,
15
11
  filePath: publisher.location.file,
16
12
  lineNumber: publisher.location.line,
17
13
  };
18
- return resolvePublishTarget(publisher, publishedEventType, events, options, sourceLocation);
19
- }
20
- const classDecl = findClassInProject(project, publisher);
21
- if (classDecl === undefined) {
22
- return [];
23
- }
24
- const methods = classDecl.getMethods();
25
- return methods.flatMap((method) => {
26
- const firstParam = method.getParameters()[0];
27
- if (firstParam === undefined) {
28
- return [];
14
+ if (typeof publishedEventType !== 'string') {
15
+ return [handleMissingMetadata(publisher, options, sourceLocation)];
29
16
  }
30
- const paramType = firstParam.getType();
31
- const paramTypeName = stripGenericArgs(paramType.getText(firstParam));
32
- const sourceLocation = {
33
- repository,
34
- filePath: publisher.location.file,
35
- lineNumber: method.getStartLineNumber(),
36
- };
37
- return resolvePublishTarget(publisher, paramTypeName, events, options, sourceLocation);
17
+ return resolvePublishTarget(publisher, publishedEventType, events, options, sourceLocation);
38
18
  });
39
19
  }
40
- function resolvePublishTarget(publisher, paramTypeName, events, options, sourceLocation) {
41
- const matchingEvents = events.filter((e) => e.metadata['eventName'] === paramTypeName);
20
+ function handleMissingMetadata(publisher, options, sourceLocation) {
21
+ if (options.strict) {
22
+ throw new ConnectionDetectionError({
23
+ file: sourceLocation.filePath,
24
+ line: sourceLocation.lineNumber,
25
+ typeName: publisher.name,
26
+ reason: 'eventPublisher is missing required "publishedEventType" metadata',
27
+ });
28
+ }
29
+ return {
30
+ source: componentIdentity(publisher),
31
+ target: '_unresolved',
32
+ type: 'async',
33
+ sourceLocation,
34
+ _uncertain: `eventPublisher "${publisher.name}" is missing required "publishedEventType" metadata`,
35
+ };
36
+ }
37
+ function resolvePublishTarget(publisher, publishedEventType, events, options, sourceLocation) {
38
+ const matchingEvents = events.filter((e) => e.metadata['eventName'] === publishedEventType);
42
39
  if (matchingEvents.length === 0) {
43
- return [handleNoMatch(publisher, paramTypeName, options, sourceLocation)];
40
+ return [handleNoMatch(publisher, publishedEventType, options, sourceLocation)];
44
41
  }
45
42
  if (matchingEvents.length > 1) {
46
43
  return [
47
- handleAmbiguousMatch(publisher, paramTypeName, matchingEvents.length, options, sourceLocation),
44
+ handleAmbiguousMatch(publisher, publishedEventType, matchingEvents.length, options, sourceLocation),
48
45
  ];
49
46
  }
50
47
  return matchingEvents.map((event) => ({
@@ -54,13 +51,13 @@ function resolvePublishTarget(publisher, paramTypeName, events, options, sourceL
54
51
  sourceLocation,
55
52
  }));
56
53
  }
57
- function handleAmbiguousMatch(publisher, paramTypeName, matchCount, options, sourceLocation) {
54
+ function handleAmbiguousMatch(publisher, publishedEventType, matchCount, options, sourceLocation) {
58
55
  if (options.strict) {
59
56
  throw new ConnectionDetectionError({
60
57
  file: sourceLocation.filePath,
61
58
  line: sourceLocation.lineNumber,
62
59
  typeName: publisher.name,
63
- reason: `parameter type "${paramTypeName}" matches ${matchCount} Event components (ambiguous)`,
60
+ reason: `publishedEventType "${publishedEventType}" matches ${matchCount} Event components (ambiguous)`,
64
61
  });
65
62
  }
66
63
  return {
@@ -68,16 +65,16 @@ function handleAmbiguousMatch(publisher, paramTypeName, matchCount, options, sou
68
65
  target: '_unresolved',
69
66
  type: 'async',
70
67
  sourceLocation,
71
- _uncertain: `ambiguous: ${matchCount} events match parameter type: ${paramTypeName}`,
68
+ _uncertain: `ambiguous: ${matchCount} events match publishedEventType: ${publishedEventType}`,
72
69
  };
73
70
  }
74
- function handleNoMatch(publisher, paramTypeName, options, sourceLocation) {
71
+ function handleNoMatch(publisher, publishedEventType, options, sourceLocation) {
75
72
  if (options.strict) {
76
73
  throw new ConnectionDetectionError({
77
74
  file: sourceLocation.filePath,
78
75
  line: sourceLocation.lineNumber,
79
76
  typeName: publisher.name,
80
- reason: `parameter type "${paramTypeName}" does not match any Event component`,
77
+ reason: `publishedEventType "${publishedEventType}" does not match any Event component`,
81
78
  });
82
79
  }
83
80
  return {
@@ -85,6 +82,6 @@ function handleNoMatch(publisher, paramTypeName, options, sourceLocation) {
85
82
  target: '_unresolved',
86
83
  type: 'async',
87
84
  sourceLocation,
88
- _uncertain: `no event found for parameter type: ${paramTypeName}`,
85
+ _uncertain: `no event found for publishedEventType: ${publishedEventType}`,
89
86
  };
90
87
  }
@@ -21,5 +21,33 @@ export interface ConnectionDetectionResult {
21
21
  timings: ConnectionTimings;
22
22
  }
23
23
  export declare function deduplicateCrossStrategy(links: ExtractedLink[]): ExtractedLink[];
24
+ export interface PerModuleConnectionOptions {
25
+ allowIncomplete?: boolean;
26
+ moduleGlobs: string[];
27
+ patterns?: ConnectionPattern[];
28
+ repository: string;
29
+ }
30
+ export interface PerModuleTimings {
31
+ callGraphMs: number;
32
+ configurableMs: number;
33
+ setupMs: number;
34
+ }
35
+ export interface PerModuleDetectionResult {
36
+ links: ExtractedLink[];
37
+ timings: PerModuleTimings;
38
+ }
39
+ export declare function detectPerModuleConnections(project: Project, components: readonly EnrichedComponent[], options: PerModuleConnectionOptions, globMatcher: GlobMatcher): PerModuleDetectionResult;
40
+ export interface CrossModuleConnectionOptions {
41
+ allowIncomplete?: boolean;
42
+ repository: string;
43
+ }
44
+ export interface CrossModuleTimings {
45
+ asyncDetectionMs: number;
46
+ }
47
+ export interface CrossModuleDetectionResult {
48
+ links: ExtractedLink[];
49
+ timings: CrossModuleTimings;
50
+ }
51
+ export declare function detectCrossModuleConnections(allComponents: readonly EnrichedComponent[], options: CrossModuleConnectionOptions): CrossModuleDetectionResult;
24
52
  export declare function detectConnections(project: Project, components: readonly EnrichedComponent[], options: ConnectionDetectionOptions, globMatcher: GlobMatcher): ConnectionDetectionResult;
25
53
  //# sourceMappingURL=detect-connections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect-connections.d.ts","sourceRoot":"","sources":["../../../../../src/features/extraction/domain/connection-detection/detect-connections.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAA;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAOrD,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAaD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAchF;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,OAAO,EAAE,0BAA0B,EACnC,WAAW,EAAE,WAAW,GACvB,yBAAyB,CAwE3B"}
1
+ {"version":3,"file":"detect-connections.d.ts","sourceRoot":"","sources":["../../../../../src/features/extraction/domain/connection-detection/detect-connections.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAA;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAOrD,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAaD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAchF;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,OAAO,EAAE,0BAA0B,EACnC,WAAW,EAAE,WAAW,GACvB,wBAAwB,CAqC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAC;AAE9D,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,OAAO,EAAE,kBAAkB,CAAA;CAC5B;AAED,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,SAAS,iBAAiB,EAAE,EAC3C,OAAO,EAAE,4BAA4B,GACpC,0BAA0B,CAmB5B;AA8BD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,OAAO,EAAE,0BAA0B,EACnC,WAAW,EAAE,WAAW,GACvB,yBAAyB,CAyD3B"}
@@ -25,6 +25,66 @@ export function deduplicateCrossStrategy(links) {
25
25
  }
26
26
  return [...seen.values()];
27
27
  }
28
+ export function detectPerModuleConnections(project, components, options, globMatcher) {
29
+ const setupStart = performance.now();
30
+ const componentIndex = new ComponentIndex(components);
31
+ const sourceFilePaths = computeFilteredFilePaths(project, options.moduleGlobs, globMatcher);
32
+ const setupMs = performance.now() - setupStart;
33
+ const strict = options.allowIncomplete !== true;
34
+ const repository = options.repository;
35
+ const callGraphStart = performance.now();
36
+ const syncLinks = buildCallGraph(project, components, componentIndex, {
37
+ strict,
38
+ sourceFilePaths,
39
+ repository,
40
+ });
41
+ const callGraphMs = performance.now() - callGraphStart;
42
+ const patterns = options.patterns ?? [];
43
+ const { configurableLinks, configurableMs } = runConfigurableDetection(project, patterns, components, componentIndex, strict, repository);
44
+ return {
45
+ links: [...syncLinks, ...configurableLinks],
46
+ timings: {
47
+ callGraphMs,
48
+ configurableMs,
49
+ setupMs,
50
+ },
51
+ };
52
+ }
53
+ export function detectCrossModuleConnections(allComponents, options) {
54
+ const strict = options.allowIncomplete !== true;
55
+ const repository = options.repository;
56
+ const asyncStart = performance.now();
57
+ const publishLinks = detectPublishConnections(allComponents, {
58
+ strict,
59
+ repository,
60
+ });
61
+ const subscribeLinks = detectSubscribeConnections(allComponents, {
62
+ strict,
63
+ repository,
64
+ });
65
+ const asyncDetectionMs = performance.now() - asyncStart;
66
+ return {
67
+ links: [...publishLinks, ...subscribeLinks],
68
+ timings: { asyncDetectionMs },
69
+ };
70
+ }
71
+ function runConfigurableDetection(project, patterns, components, componentIndex, strict, repository) {
72
+ if (patterns.length === 0) {
73
+ return {
74
+ configurableLinks: [],
75
+ configurableMs: 0,
76
+ };
77
+ }
78
+ const configurableStart = performance.now();
79
+ const links = detectConfigurableConnections(project, patterns, components, componentIndex, {
80
+ strict,
81
+ repository,
82
+ });
83
+ return {
84
+ configurableLinks: links,
85
+ configurableMs: performance.now() - configurableStart,
86
+ };
87
+ }
28
88
  export function detectConnections(project, components, options, globMatcher) {
29
89
  const totalStart = performance.now();
30
90
  const setupStart = performance.now();
@@ -41,7 +101,7 @@ export function detectConnections(project, components, options, globMatcher) {
41
101
  });
42
102
  const callGraphMs = performance.now() - callGraphStart;
43
103
  const asyncStart = performance.now();
44
- const publishLinks = detectPublishConnections(project, components, {
104
+ const publishLinks = detectPublishConnections(components, {
45
105
  strict,
46
106
  repository,
47
107
  });
@@ -51,22 +111,7 @@ export function detectConnections(project, components, options, globMatcher) {
51
111
  });
52
112
  const asyncDetectionMs = performance.now() - asyncStart;
53
113
  const patterns = options.patterns ?? [];
54
- const { configurableLinks, configurableMs } = patterns.length > 0
55
- ? (() => {
56
- const configurableStart = performance.now();
57
- const links = detectConfigurableConnections(project, patterns, components, componentIndex, {
58
- strict,
59
- repository,
60
- });
61
- return {
62
- configurableLinks: links,
63
- configurableMs: performance.now() - configurableStart,
64
- };
65
- })()
66
- : {
67
- configurableLinks: [],
68
- configurableMs: 0,
69
- };
114
+ const { configurableLinks, configurableMs } = runConfigurableDetection(project, patterns, components, componentIndex, strict, repository);
70
115
  const totalMs = performance.now() - totalStart;
71
116
  const allLinks = [...syncLinks, ...publishLinks, ...subscribeLinks, ...configurableLinks];
72
117
  const deduplicatedLinks = deduplicateCrossStrategy(allLinks);
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@ export { resolveConfig, type ConfigLoader, } from './features/extraction/domain/
4
4
  export { ConfigLoaderRequiredError, MissingComponentRuleError, } from './features/extraction/domain/config-resolution/config-resolution-errors';
5
5
  export { applyTransforms, ExtractionError, type ExtractionContext, type ExtractionResult, type ParameterInfo, type MethodSignature, } from './features/extraction/domain/value-extraction';
6
6
  export { matchesGlob } from './platform/infra/glob-matching/minimatch-glob';
7
- export { detectConnections, type ConnectionDetectionOptions, type ConnectionDetectionResult, type ConnectionTimings, } from './features/extraction/domain/connection-detection/detect-connections';
7
+ export { detectConnections, detectPerModuleConnections, detectCrossModuleConnections, deduplicateCrossStrategy, type ConnectionDetectionOptions, type ConnectionDetectionResult, type ConnectionTimings, type PerModuleConnectionOptions, type PerModuleDetectionResult, type PerModuleTimings, type CrossModuleConnectionOptions, type CrossModuleDetectionResult, type CrossModuleTimings, } from './features/extraction/domain/connection-detection/detect-connections';
8
8
  export type { ExtractedLink } from './features/extraction/domain/connection-detection/extracted-link';
9
9
  export { ComponentIndex } from './features/extraction/domain/connection-detection/component-index';
10
10
  export { ConnectionDetectionError } from './features/extraction/domain/connection-detection/connection-detection-error';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,6DAA6D,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sEAAsE,CAAA;AACxG,OAAO,EACL,aAAa,EACb,KAAK,YAAY,GAClB,MAAM,+DAA+D,CAAA;AACtE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,yEAAyE,CAAA;AAChF,OAAO,EACL,eAAe,EACf,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAC3E,OAAO,EACL,iBAAiB,EACjB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,GACvB,MAAM,sEAAsE,CAAA;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,kEAAkE,CAAA;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,mEAAmE,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAAE,MAAM,8EAA8E,CAAA;AACvH,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,iEAAiE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,6DAA6D,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sEAAsE,CAAA;AACxG,OAAO,EACL,aAAa,EACb,KAAK,YAAY,GAClB,MAAM,+DAA+D,CAAA;AACtE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,yEAAyE,CAAA;AAChF,OAAO,EACL,eAAe,EACf,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAC3E,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,GACxB,MAAM,sEAAsE,CAAA;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,kEAAkE,CAAA;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,mEAAmE,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAAE,MAAM,8EAA8E,CAAA;AACvH,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,iEAAiE,CAAA"}
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ export { resolveConfig, } from './features/extraction/domain/config-resolution/r
4
4
  export { ConfigLoaderRequiredError, MissingComponentRuleError, } from './features/extraction/domain/config-resolution/config-resolution-errors';
5
5
  export { applyTransforms, ExtractionError, } from './features/extraction/domain/value-extraction';
6
6
  export { matchesGlob } from './platform/infra/glob-matching/minimatch-glob';
7
- export { detectConnections, } from './features/extraction/domain/connection-detection/detect-connections';
7
+ export { detectConnections, detectPerModuleConnections, detectCrossModuleConnections, deduplicateCrossStrategy, } from './features/extraction/domain/connection-detection/detect-connections';
8
8
  export { ComponentIndex } from './features/extraction/domain/connection-detection/component-index';
9
9
  export { ConnectionDetectionError } from './features/extraction/domain/connection-detection/connection-detection-error';
10
10
  export { enrichComponents, } from './features/extraction/domain/value-extraction/enrich-components';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@living-architecture/riviere-extract-ts",
3
- "version": "0.2.10",
3
+ "version": "0.2.12",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -24,7 +24,7 @@
24
24
  "dependencies": {
25
25
  "minimatch": "^10.0.1",
26
26
  "ts-morph": "^24.0.0",
27
- "@living-architecture/riviere-schema": "0.5.5",
28
- "@living-architecture/riviere-extract-config": "0.4.5"
27
+ "@living-architecture/riviere-extract-config": "0.4.6",
28
+ "@living-architecture/riviere-schema": "0.5.6"
29
29
  }
30
30
  }