@living-architecture/riviere-extract-ts 0.4.4 → 0.4.6
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/features/extraction/domain/connection-detection/detect-connections.d.ts +6 -0
- package/dist/features/extraction/domain/connection-detection/detect-connections.d.ts.map +1 -1
- package/dist/features/extraction/domain/connection-detection/detect-connections.js +13 -3
- package/dist/features/extraction/domain/connection-detection/http-call-link-rewrite.d.ts +13 -0
- package/dist/features/extraction/domain/connection-detection/http-call-link-rewrite.d.ts.map +1 -0
- package/dist/features/extraction/domain/connection-detection/http-call-link-rewrite.js +105 -0
- package/dist/features/extraction/domain/value-extraction/enrich-components.d.ts.map +1 -1
- package/dist/features/extraction/domain/value-extraction/enrich-components.js +68 -14
- package/dist/features/extraction/domain/value-extraction/evaluate-extraction-rule.d.ts +6 -2
- package/dist/features/extraction/domain/value-extraction/evaluate-extraction-rule.d.ts.map +1 -1
- package/dist/features/extraction/domain/value-extraction/evaluate-extraction-rule.js +43 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +3 -3
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Project } from 'ts-morph';
|
|
2
2
|
import type { ConnectionPattern, EventPublisherConfig } from '@living-architecture/riviere-extract-config';
|
|
3
|
+
import type { ExternalLink } from '@living-architecture/riviere-schema';
|
|
3
4
|
import type { EnrichedComponent } from '../value-extraction/enrich-components';
|
|
4
5
|
import type { GlobMatcher } from '../component-extraction/extractor';
|
|
5
6
|
import type { ExtractedLink } from './extracted-link';
|
|
@@ -22,10 +23,13 @@ export interface ConnectionTimings {
|
|
|
22
23
|
/** @riviere-role value-object */
|
|
23
24
|
export interface ConnectionDetectionResult {
|
|
24
25
|
links: ExtractedLink[];
|
|
26
|
+
externalLinks: ExternalLink[];
|
|
25
27
|
timings: ConnectionTimings;
|
|
26
28
|
}
|
|
27
29
|
/** @riviere-role domain-service */
|
|
28
30
|
export declare function deduplicateCrossStrategy(links: ExtractedLink[]): ExtractedLink[];
|
|
31
|
+
/** @riviere-role domain-service */
|
|
32
|
+
export declare function stripHttpCallComponents(components: readonly EnrichedComponent[]): EnrichedComponent[];
|
|
29
33
|
/** @riviere-role value-object */
|
|
30
34
|
export interface PerModuleConnectionOptions {
|
|
31
35
|
allowIncomplete?: boolean;
|
|
@@ -42,6 +46,7 @@ export interface PerModuleTimings {
|
|
|
42
46
|
/** @riviere-role value-object */
|
|
43
47
|
export interface PerModuleDetectionResult {
|
|
44
48
|
links: ExtractedLink[];
|
|
49
|
+
externalLinks: ExternalLink[];
|
|
45
50
|
timings: PerModuleTimings;
|
|
46
51
|
}
|
|
47
52
|
/** @riviere-role domain-service */
|
|
@@ -59,6 +64,7 @@ export interface CrossModuleTimings {
|
|
|
59
64
|
/** @riviere-role value-object */
|
|
60
65
|
export interface CrossModuleDetectionResult {
|
|
61
66
|
links: ExtractedLink[];
|
|
67
|
+
externalLinks: ExternalLink[];
|
|
62
68
|
timings: CrossModuleTimings;
|
|
63
69
|
}
|
|
64
70
|
/** @riviere-role domain-service */
|
|
@@ -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,EACV,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,6CAA6C,CAAA;AACpD,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;
|
|
1
|
+
{"version":3,"file":"detect-connections.d.ts","sourceRoot":"","sources":["../../../../../src/features/extraction/domain/connection-detection/detect-connections.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { buildCallGraph } from './call-graph/build-call-graph';
|
|
|
4
4
|
import { detectEventPublisherConnections } from './async-detection/detect-event-publisher-connections';
|
|
5
5
|
import { detectSubscribeConnections } from './async-detection/detect-subscribe-connections';
|
|
6
6
|
import { detectConfigurableConnections } from './configurable/detect-configurable-connections';
|
|
7
|
+
import { rewriteHttpCallLinks, stripHttpCallComponents as stripHttpCallComponentsInternal, } from './http-call-link-rewrite';
|
|
7
8
|
function computeFilteredFilePaths(project, moduleGlobs, globMatcher) {
|
|
8
9
|
return project
|
|
9
10
|
.getSourceFiles()
|
|
@@ -27,6 +28,10 @@ export function deduplicateCrossStrategy(links) {
|
|
|
27
28
|
return [...seen.values()];
|
|
28
29
|
}
|
|
29
30
|
/** @riviere-role domain-service */
|
|
31
|
+
export function stripHttpCallComponents(components) {
|
|
32
|
+
return stripHttpCallComponentsInternal(components);
|
|
33
|
+
}
|
|
34
|
+
/** @riviere-role domain-service */
|
|
30
35
|
export function detectPerModuleConnections(project, components, options, globMatcher) {
|
|
31
36
|
const setupStart = performance.now();
|
|
32
37
|
const componentIndex = new ComponentIndex(components);
|
|
@@ -43,8 +48,10 @@ export function detectPerModuleConnections(project, components, options, globMat
|
|
|
43
48
|
const callGraphMs = performance.now() - callGraphStart;
|
|
44
49
|
const patterns = options.patterns ?? [];
|
|
45
50
|
const { configurableLinks, configurableMs } = runConfigurableDetection(project, patterns, components, componentIndex, strict, repository);
|
|
51
|
+
const rewritten = rewriteHttpCallLinks([...syncLinks, ...configurableLinks], components);
|
|
46
52
|
return {
|
|
47
|
-
links:
|
|
53
|
+
links: rewritten.links,
|
|
54
|
+
externalLinks: rewritten.externalLinks,
|
|
48
55
|
timings: {
|
|
49
56
|
callGraphMs,
|
|
50
57
|
configurableMs,
|
|
@@ -66,6 +73,7 @@ export function detectCrossModuleConnections(allComponents, options) {
|
|
|
66
73
|
const asyncDetectionMs = performance.now() - asyncStart;
|
|
67
74
|
return {
|
|
68
75
|
links: [...publishLinks, ...subscribeLinks],
|
|
76
|
+
externalLinks: [],
|
|
69
77
|
timings: { asyncDetectionMs },
|
|
70
78
|
};
|
|
71
79
|
}
|
|
@@ -112,11 +120,13 @@ export function detectConnections(project, components, options, globMatcher) {
|
|
|
112
120
|
const asyncDetectionMs = performance.now() - asyncStart;
|
|
113
121
|
const patterns = options.patterns ?? [];
|
|
114
122
|
const { configurableLinks, configurableMs } = runConfigurableDetection(project, patterns, components, componentIndex, strict, repository);
|
|
115
|
-
const totalMs = performance.now() - totalStart;
|
|
116
123
|
const allLinks = [...syncLinks, ...publishLinks, ...subscribeLinks, ...configurableLinks];
|
|
117
124
|
const deduplicatedLinks = deduplicateCrossStrategy(allLinks);
|
|
125
|
+
const rewritten = rewriteHttpCallLinks(deduplicatedLinks, components);
|
|
126
|
+
const totalMs = performance.now() - totalStart;
|
|
118
127
|
return {
|
|
119
|
-
links:
|
|
128
|
+
links: rewritten.links,
|
|
129
|
+
externalLinks: rewritten.externalLinks,
|
|
120
130
|
timings: {
|
|
121
131
|
callGraphMs,
|
|
122
132
|
asyncDetectionMs,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ExternalLink } from '@living-architecture/riviere-schema';
|
|
2
|
+
import type { EnrichedComponent } from '../value-extraction/enrich-components';
|
|
3
|
+
import type { ExtractedLink } from './extracted-link';
|
|
4
|
+
/** @riviere-role value-object */
|
|
5
|
+
export interface HttpCallRewriteResult {
|
|
6
|
+
links: ExtractedLink[];
|
|
7
|
+
externalLinks: ExternalLink[];
|
|
8
|
+
}
|
|
9
|
+
/** @riviere-role domain-service */
|
|
10
|
+
export declare function rewriteHttpCallLinks(links: readonly ExtractedLink[], components: readonly EnrichedComponent[]): HttpCallRewriteResult;
|
|
11
|
+
/** @riviere-role domain-service */
|
|
12
|
+
export declare function stripHttpCallComponents(components: readonly EnrichedComponent[]): EnrichedComponent[];
|
|
13
|
+
//# sourceMappingURL=http-call-link-rewrite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-call-link-rewrite.d.ts","sourceRoot":"","sources":["../../../../../src/features/extraction/domain/connection-detection/http-call-link-rewrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAIrD,iCAAiC;AACjC,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,aAAa,EAAE,YAAY,EAAE,CAAA;CAC9B;AA+ED,mCAAmC;AACnC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,UAAU,EAAE,SAAS,iBAAiB,EAAE,GACvC,qBAAqB,CA2CvB;AAED,mCAAmC;AACnC,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,SAAS,iBAAiB,EAAE,GACvC,iBAAiB,EAAE,CAErB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { componentIdentity } from './call-graph/call-graph-types';
|
|
2
|
+
import { ConnectionDetectionError } from './connection-detection-error';
|
|
3
|
+
function mapComponentsByIdentity(components) {
|
|
4
|
+
const byIdentity = new Map();
|
|
5
|
+
for (const component of components) {
|
|
6
|
+
byIdentity.set(componentIdentity(component), component);
|
|
7
|
+
}
|
|
8
|
+
return byIdentity;
|
|
9
|
+
}
|
|
10
|
+
function mapInternalComponentsByName(components) {
|
|
11
|
+
const byName = new Map();
|
|
12
|
+
for (const component of components) {
|
|
13
|
+
if (component.type === 'httpCall') {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const existing = byName.get(component.name);
|
|
17
|
+
if (existing === undefined) {
|
|
18
|
+
byName.set(component.name, [component]);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
existing.push(component);
|
|
22
|
+
}
|
|
23
|
+
return byName;
|
|
24
|
+
}
|
|
25
|
+
function parseServiceName(httpCallComponent) {
|
|
26
|
+
const rawServiceName = httpCallComponent.metadata['serviceName'];
|
|
27
|
+
if (typeof rawServiceName === 'string' && rawServiceName.trim().length > 0) {
|
|
28
|
+
return rawServiceName;
|
|
29
|
+
}
|
|
30
|
+
throw new ConnectionDetectionError({
|
|
31
|
+
file: httpCallComponent.location.file,
|
|
32
|
+
line: httpCallComponent.location.line,
|
|
33
|
+
typeName: componentIdentity(httpCallComponent),
|
|
34
|
+
reason: `Expected metadata.serviceName to be a non-empty string, got ${JSON.stringify(rawServiceName)}`,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function parseRoute(httpCallComponent) {
|
|
38
|
+
const rawRoute = httpCallComponent.metadata['route'];
|
|
39
|
+
if (rawRoute === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
if (typeof rawRoute === 'string' && rawRoute.trim().length > 0) {
|
|
43
|
+
return rawRoute;
|
|
44
|
+
}
|
|
45
|
+
throw new ConnectionDetectionError({
|
|
46
|
+
file: httpCallComponent.location.file,
|
|
47
|
+
line: httpCallComponent.location.line,
|
|
48
|
+
typeName: componentIdentity(httpCallComponent),
|
|
49
|
+
reason: `Expected metadata.route to be a non-empty string when provided, got ${JSON.stringify(rawRoute)}`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function toExternalLink(link, serviceName, route) {
|
|
53
|
+
return {
|
|
54
|
+
source: link.source,
|
|
55
|
+
target: {
|
|
56
|
+
name: serviceName,
|
|
57
|
+
...(route === undefined ? {} : { route }),
|
|
58
|
+
},
|
|
59
|
+
...(link.type === undefined ? {} : { type: link.type }),
|
|
60
|
+
...(link.sourceLocation === undefined ? {} : { sourceLocation: link.sourceLocation }),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** @riviere-role domain-service */
|
|
64
|
+
export function rewriteHttpCallLinks(links, components) {
|
|
65
|
+
const linksToKeep = [];
|
|
66
|
+
const externalLinks = [];
|
|
67
|
+
const componentsByIdentity = mapComponentsByIdentity(components);
|
|
68
|
+
const internalComponentsByName = mapInternalComponentsByName(components);
|
|
69
|
+
for (const link of links) {
|
|
70
|
+
const targetComponent = componentsByIdentity.get(link.target);
|
|
71
|
+
if (targetComponent?.type !== 'httpCall') {
|
|
72
|
+
linksToKeep.push(link);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const serviceName = parseServiceName(targetComponent);
|
|
76
|
+
const matchedInternalComponents = internalComponentsByName.get(serviceName) ?? [];
|
|
77
|
+
const matchedInternalCount = matchedInternalComponents.length;
|
|
78
|
+
if (matchedInternalCount > 1) {
|
|
79
|
+
throw new ConnectionDetectionError({
|
|
80
|
+
file: targetComponent.location.file,
|
|
81
|
+
line: targetComponent.location.line,
|
|
82
|
+
typeName: componentIdentity(targetComponent),
|
|
83
|
+
reason: `Expected metadata.serviceName to match exactly one internal component name, got ${matchedInternalCount} matches for ${JSON.stringify(serviceName)}`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const [uniqueInternalTarget] = matchedInternalComponents;
|
|
87
|
+
if (uniqueInternalTarget !== undefined) {
|
|
88
|
+
linksToKeep.push({
|
|
89
|
+
...link,
|
|
90
|
+
target: componentIdentity(uniqueInternalTarget),
|
|
91
|
+
});
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const route = parseRoute(targetComponent);
|
|
95
|
+
externalLinks.push(toExternalLink(link, serviceName, route));
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
links: linksToKeep,
|
|
99
|
+
externalLinks,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** @riviere-role domain-service */
|
|
103
|
+
export function stripHttpCallComponents(components) {
|
|
104
|
+
return components.filter((component) => component.type !== 'httpCall');
|
|
105
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrich-components.d.ts","sourceRoot":"","sources":["../../../../../src/features/extraction/domain/value-extraction/enrich-components.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAC2B,OAAO,EAC7C,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EACV,wBAAwB,EAKzB,MAAM,6CAA6C,CAAA;AACpD,OAAO,KAAK,EACV,cAAc,EAAE,WAAW,EAC5B,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"enrich-components.d.ts","sourceRoot":"","sources":["../../../../../src/features/extraction/domain/value-extraction/enrich-components.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAC2B,OAAO,EAC7C,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EACV,wBAAwB,EAKzB,MAAM,6CAA6C,CAAA;AACpD,OAAO,KAAK,EACV,cAAc,EAAE,WAAW,EAC5B,MAAM,mCAAmC,CAAA;AAgB1C,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAA;AAEzD,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACvC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,cAAc,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,iBAAiB,EAAE,CAAA;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAC9B;AA8WD,mCAAmC;AACnC,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,cAAc,EAAE,EACjC,MAAM,EAAE,wBAAwB,EAChC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,GAChB,gBAAgB,CAclB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { posix } from 'node:path';
|
|
2
|
-
import { evaluateLiteralRule, evaluateFromClassNameRule, evaluateFromFilePathRule, evaluateFromPropertyRule, evaluateFromMethodNameRule, } from './evaluate-extraction-rule';
|
|
2
|
+
import { evaluateLiteralRule, evaluateFromClassNameRule, evaluateFromFilePathRule, evaluateFromPropertyRule, evaluateFromMethodNameRule, evaluateFromDecoratorArgRule, evaluateFromDecoratorNameRule, evaluateFromClassDecoratorArgRule, } from './evaluate-extraction-rule';
|
|
3
3
|
import { evaluateFromGenericArgRule } from './evaluate-extraction-rule-generic';
|
|
4
4
|
import { ExtractionError } from '../../../../platform/domain/ast-literals/literal-detection';
|
|
5
5
|
import { applyTransforms } from '../../../../platform/domain/string-transforms/transforms';
|
|
@@ -65,6 +65,39 @@ function findMethodAtLine(project, draft) {
|
|
|
65
65
|
}
|
|
66
66
|
throw new ExtractionError(`No method declaration found at line ${draft.location.line}`, draft.location.file, draft.location.line);
|
|
67
67
|
}
|
|
68
|
+
function requireMethodForDecoratorRule(project, draft, ruleName) {
|
|
69
|
+
try {
|
|
70
|
+
return findMethodAtLine(project, draft);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (error instanceof ExtractionError &&
|
|
74
|
+
error.message.includes('No method declaration found at line')) {
|
|
75
|
+
throw new ExtractionError(`Rule '${ruleName}' requires a method component. Use 'fromClassDecoratorArg' for class decorators.`, draft.location.file, draft.location.line);
|
|
76
|
+
}
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function findDecoratorOnMethod(methodDecl, decoratorName) {
|
|
81
|
+
const decorators = methodDecl.getDecorators();
|
|
82
|
+
const sourceFile = methodDecl.getSourceFile();
|
|
83
|
+
const line = methodDecl.getStartLineNumber();
|
|
84
|
+
if (decorators.length === 0) {
|
|
85
|
+
throw new ExtractionError(`No decorators found on method '${methodDecl.getName()}'`, sourceFile.getFilePath(), line);
|
|
86
|
+
}
|
|
87
|
+
if (decoratorName === undefined) {
|
|
88
|
+
const firstDecorator = decorators[0];
|
|
89
|
+
/* v8 ignore next -- @preserve: decorators.length > 0 guarantees first decorator exists */
|
|
90
|
+
if (firstDecorator === undefined) {
|
|
91
|
+
throw new ExtractionError(`No decorators found on method '${methodDecl.getName()}'`, sourceFile.getFilePath(), line);
|
|
92
|
+
}
|
|
93
|
+
return firstDecorator;
|
|
94
|
+
}
|
|
95
|
+
const decorator = decorators.find((candidate) => candidate.getName() === decoratorName);
|
|
96
|
+
if (decorator === undefined) {
|
|
97
|
+
throw new ExtractionError(`Decorator '@${decoratorName}' not found on method '${methodDecl.getName()}'`, sourceFile.getFilePath(), line);
|
|
98
|
+
}
|
|
99
|
+
return decorator;
|
|
100
|
+
}
|
|
68
101
|
function findContainingClass(project, draft) {
|
|
69
102
|
const sourceFile = project.getSourceFile(draft.location.file);
|
|
70
103
|
if (sourceFile === undefined) {
|
|
@@ -86,24 +119,24 @@ function evaluateClassRule(rule, classDecl) {
|
|
|
86
119
|
}
|
|
87
120
|
throw new ExtractionError('Unsupported extraction rule type for class-based component', classDecl.getSourceFile().getFilePath(), classDecl.getStartLineNumber());
|
|
88
121
|
}
|
|
89
|
-
function
|
|
90
|
-
if ('literal' in rule) {
|
|
91
|
-
return evaluateLiteralRule(rule);
|
|
92
|
-
}
|
|
93
|
-
if ('fromFilePath' in rule) {
|
|
94
|
-
return evaluateFromFilePathRule(rule, draft.location.file);
|
|
95
|
-
}
|
|
122
|
+
function evaluateMethodRule(rule, draft, project) {
|
|
96
123
|
if ('fromMethodName' in rule) {
|
|
97
124
|
const methodDecl = findMethodAtLine(project, draft);
|
|
98
125
|
return evaluateFromMethodNameRule(rule, methodDecl);
|
|
99
126
|
}
|
|
100
|
-
if ('
|
|
101
|
-
const
|
|
102
|
-
|
|
127
|
+
if ('fromDecoratorArg' in rule) {
|
|
128
|
+
const methodDecl = requireMethodForDecoratorRule(project, draft, 'fromDecoratorArg');
|
|
129
|
+
const decorator = findDecoratorOnMethod(methodDecl, rule.fromDecoratorArg.decorator);
|
|
130
|
+
return evaluateFromDecoratorArgRule(rule, decorator);
|
|
103
131
|
}
|
|
104
|
-
if ('
|
|
105
|
-
const
|
|
106
|
-
return
|
|
132
|
+
if ('fromClassDecoratorArg' in rule) {
|
|
133
|
+
const methodDecl = findMethodAtLine(project, draft);
|
|
134
|
+
return evaluateFromClassDecoratorArgRule(rule, methodDecl);
|
|
135
|
+
}
|
|
136
|
+
if ('fromDecoratorName' in rule) {
|
|
137
|
+
const methodDecl = requireMethodForDecoratorRule(project, draft, 'fromDecoratorName');
|
|
138
|
+
const decorator = findDecoratorOnMethod(methodDecl);
|
|
139
|
+
return evaluateFromDecoratorNameRule(rule, decorator);
|
|
107
140
|
}
|
|
108
141
|
if ('fromParameterType' in rule) {
|
|
109
142
|
const methodDecl = findMethodAtLine(project, draft);
|
|
@@ -120,6 +153,27 @@ function evaluateRule(rule, draft, project) {
|
|
|
120
153
|
}
|
|
121
154
|
return { value: applyTransforms(typeName, transform) };
|
|
122
155
|
}
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
function evaluateRule(rule, draft, project) {
|
|
159
|
+
if ('literal' in rule) {
|
|
160
|
+
return evaluateLiteralRule(rule);
|
|
161
|
+
}
|
|
162
|
+
if ('fromFilePath' in rule) {
|
|
163
|
+
return evaluateFromFilePathRule(rule, draft.location.file);
|
|
164
|
+
}
|
|
165
|
+
const methodRuleResult = evaluateMethodRule(rule, draft, project);
|
|
166
|
+
if (methodRuleResult !== undefined) {
|
|
167
|
+
return methodRuleResult;
|
|
168
|
+
}
|
|
169
|
+
if ('fromGenericArg' in rule) {
|
|
170
|
+
const classDecl = findContainingClass(project, draft);
|
|
171
|
+
return evaluateFromGenericArgRule(rule, classDecl);
|
|
172
|
+
}
|
|
173
|
+
if ('fromProperty' in rule) {
|
|
174
|
+
const classDecl = findContainingClass(project, draft);
|
|
175
|
+
return evaluateFromPropertyRule(rule, classDecl);
|
|
176
|
+
}
|
|
123
177
|
const classDecl = findClassAtLine(project, draft);
|
|
124
178
|
return evaluateClassRule(rule, classDecl);
|
|
125
179
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type { LiteralExtractionRule, FromClassNameExtractionRule, FromMethodNameExtractionRule, FromFilePathExtractionRule, FromPropertyExtractionRule, FromDecoratorArgExtractionRule, FromDecoratorNameExtractionRule } from '@living-architecture/riviere-extract-config';
|
|
1
|
+
import type { LiteralExtractionRule, FromClassNameExtractionRule, FromMethodNameExtractionRule, FromFilePathExtractionRule, FromPropertyExtractionRule, FromDecoratorArgExtractionRule, FromClassDecoratorArgExtractionRule, FromDecoratorNameExtractionRule } from '@living-architecture/riviere-extract-config';
|
|
2
2
|
export { evaluateFromMethodSignatureRule, evaluateFromConstructorParamsRule, evaluateFromParameterTypeRule, type ParameterInfo, type MethodSignature, } from './evaluate-extraction-rule-method';
|
|
3
3
|
export { evaluateFromGenericArgRule } from './evaluate-extraction-rule-generic';
|
|
4
|
-
|
|
4
|
+
type ClassDeclaration = import('ts-morph').ClassDeclaration;
|
|
5
|
+
type MethodDeclaration = import('ts-morph').MethodDeclaration;
|
|
6
|
+
type Decorator = import('ts-morph').Decorator;
|
|
5
7
|
/** @riviere-role value-object */
|
|
6
8
|
export type ExtractionContext = {
|
|
7
9
|
filePath: string;
|
|
@@ -24,5 +26,7 @@ export declare function evaluateFromPropertyRule(rule: FromPropertyExtractionRul
|
|
|
24
26
|
/** @riviere-role domain-service */
|
|
25
27
|
export declare function evaluateFromDecoratorArgRule(rule: FromDecoratorArgExtractionRule, decorator: Decorator): ExtractionResult;
|
|
26
28
|
/** @riviere-role domain-service */
|
|
29
|
+
export declare function evaluateFromClassDecoratorArgRule(rule: FromClassDecoratorArgExtractionRule, methodDecl: MethodDeclaration): ExtractionResult;
|
|
30
|
+
/** @riviere-role domain-service */
|
|
27
31
|
export declare function evaluateFromDecoratorNameRule(rule: FromDecoratorNameExtractionRule, decorator: Decorator): ExtractionResult;
|
|
28
32
|
//# sourceMappingURL=evaluate-extraction-rule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-extraction-rule.d.ts","sourceRoot":"","sources":["../../../../../src/features/extraction/domain/value-extraction/evaluate-extraction-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,8BAA8B,EAC9B,+BAA+B,EAChC,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,6BAA6B,EAC7B,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"evaluate-extraction-rule.d.ts","sourceRoot":"","sources":["../../../../../src/features/extraction/domain/value-extraction/evaluate-extraction-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,8BAA8B,EAC9B,mCAAmC,EACnC,+BAA+B,EAChC,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,6BAA6B,EAC7B,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AAQ/E,KAAK,gBAAgB,GAAG,OAAO,UAAU,EAAE,gBAAgB,CAAA;AAC3D,KAAK,iBAAiB,GAAG,OAAO,UAAU,EAAE,iBAAiB,CAAA;AAC7D,KAAK,SAAS,GAAG,OAAO,UAAU,EAAE,SAAS,CAAA;AAE7C,iCAAiC;AACjC,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAA;AAE3D,iCAAiC;AACjC,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,eAAe,CAAA;CAAE,CAAA;AAMzD,mCAAmC;AACnC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,CAEjF;AAED,mCAAmC;AACnC,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,2BAA2B,EACjC,SAAS,EAAE,gBAAgB,GAC1B,gBAAgB,CAkBlB;AAED,mCAAmC;AACnC,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,4BAA4B,EAClC,UAAU,EAAE,iBAAiB,GAC5B,gBAAgB,CAalB;AAED,mCAAmC;AACnC,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,0BAA0B,EAChC,QAAQ,EAAE,MAAM,GACf,gBAAgB,CA6BlB;AAqCD,mCAAmC;AACnC,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,0BAA0B,EAChC,SAAS,EAAE,gBAAgB,GAC1B,gBAAgB,CAgClB;AAgHD,mCAAmC;AACnC,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,8BAA8B,EACpC,SAAS,EAAE,SAAS,GACnB,gBAAgB,CAqClB;AAED,mCAAmC;AACnC,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,mCAAmC,EACzC,UAAU,EAAE,iBAAiB,GAC5B,gBAAgB,CAqClB;AAED,mCAAmC;AACnC,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,+BAA+B,EACrC,SAAS,EAAE,SAAS,GACnB,gBAAgB,CAiBlB"}
|
|
@@ -41,7 +41,9 @@ export function evaluateFromMethodNameRule(rule, methodDecl) {
|
|
|
41
41
|
}
|
|
42
42
|
/** @riviere-role domain-service */
|
|
43
43
|
export function evaluateFromFilePathRule(rule, filePath) {
|
|
44
|
-
const
|
|
44
|
+
const pattern = rule.fromFilePath.pattern;
|
|
45
|
+
const capture = rule.fromFilePath.capture;
|
|
46
|
+
const transform = rule.fromFilePath.transform;
|
|
45
47
|
const regex = new RegExp(pattern);
|
|
46
48
|
const match = regex.exec(filePath);
|
|
47
49
|
if (match === null) {
|
|
@@ -78,7 +80,9 @@ function findPropertyInHierarchy(classDecl, propertyName, isStatic) {
|
|
|
78
80
|
}
|
|
79
81
|
/** @riviere-role domain-service */
|
|
80
82
|
export function evaluateFromPropertyRule(rule, classDecl) {
|
|
81
|
-
const
|
|
83
|
+
const name = rule.fromProperty.name;
|
|
84
|
+
const kind = rule.fromProperty.kind;
|
|
85
|
+
const transform = rule.fromProperty.transform;
|
|
82
86
|
const isStatic = kind === 'static';
|
|
83
87
|
const propertyInfo = findPropertyInHierarchy(classDecl, name, isStatic);
|
|
84
88
|
if (propertyInfo === undefined) {
|
|
@@ -149,7 +153,14 @@ function extractNamedArg(decorator, name) {
|
|
|
149
153
|
}
|
|
150
154
|
/** @riviere-role domain-service */
|
|
151
155
|
export function evaluateFromDecoratorArgRule(rule, decorator) {
|
|
152
|
-
const
|
|
156
|
+
const decoratorName = rule.fromDecoratorArg.decorator;
|
|
157
|
+
const position = rule.fromDecoratorArg.position;
|
|
158
|
+
const name = rule.fromDecoratorArg.name;
|
|
159
|
+
const transform = rule.fromDecoratorArg.transform;
|
|
160
|
+
if (decoratorName !== undefined && decorator.getName() !== decoratorName) {
|
|
161
|
+
const location = getDecoratorLocation(decorator);
|
|
162
|
+
throw new ExtractionError(`Expected decorator '@${decoratorName}', got '@${decorator.getName()}'`, location.filePath, location.line);
|
|
163
|
+
}
|
|
153
164
|
const extractValue = () => {
|
|
154
165
|
if (position !== undefined) {
|
|
155
166
|
return extractPositionalArg(decorator, position);
|
|
@@ -167,12 +178,40 @@ export function evaluateFromDecoratorArgRule(rule, decorator) {
|
|
|
167
178
|
return { value: applyTransforms(value, transform) };
|
|
168
179
|
}
|
|
169
180
|
/** @riviere-role domain-service */
|
|
181
|
+
export function evaluateFromClassDecoratorArgRule(rule, methodDecl) {
|
|
182
|
+
const classDecl = methodDecl.getParentIfKind(SyntaxKind.ClassDeclaration);
|
|
183
|
+
if (classDecl === undefined) {
|
|
184
|
+
const sourceFile = methodDecl.getSourceFile();
|
|
185
|
+
throw new ExtractionError(`Expected method '${methodDecl.getName()}' to be declared inside a class`, sourceFile.getFilePath(), methodDecl.getStartLineNumber());
|
|
186
|
+
}
|
|
187
|
+
const classDecorator = classDecl
|
|
188
|
+
.getDecorators()
|
|
189
|
+
.find((decorator) => decorator.getName() === rule.fromClassDecoratorArg.decorator);
|
|
190
|
+
if (classDecorator === undefined) {
|
|
191
|
+
const sourceFile = classDecl.getSourceFile();
|
|
192
|
+
throw new ExtractionError(`Decorator '@${rule.fromClassDecoratorArg.decorator}' not found on containing class '${classDecl.getName() ?? 'anonymous'}'`, sourceFile.getFilePath(), classDecl.getStartLineNumber());
|
|
193
|
+
}
|
|
194
|
+
const fromClassDecoratorArg = rule.fromClassDecoratorArg;
|
|
195
|
+
const fromDecoratorArgRule = {
|
|
196
|
+
decorator: fromClassDecoratorArg.decorator,
|
|
197
|
+
...(fromClassDecoratorArg.position === undefined
|
|
198
|
+
? {}
|
|
199
|
+
: { position: fromClassDecoratorArg.position }),
|
|
200
|
+
...(fromClassDecoratorArg.name === undefined ? {} : { name: fromClassDecoratorArg.name }),
|
|
201
|
+
...(fromClassDecoratorArg.transform === undefined
|
|
202
|
+
? {}
|
|
203
|
+
: { transform: fromClassDecoratorArg.transform }),
|
|
204
|
+
};
|
|
205
|
+
return evaluateFromDecoratorArgRule({ fromDecoratorArg: fromDecoratorArgRule }, classDecorator);
|
|
206
|
+
}
|
|
207
|
+
/** @riviere-role domain-service */
|
|
170
208
|
export function evaluateFromDecoratorNameRule(rule, decorator) {
|
|
171
209
|
const decoratorName = decorator.getName();
|
|
172
210
|
if (rule.fromDecoratorName === true) {
|
|
173
211
|
return { value: decoratorName };
|
|
174
212
|
}
|
|
175
|
-
const
|
|
213
|
+
const mapping = rule.fromDecoratorName.mapping;
|
|
214
|
+
const transform = rule.fromDecoratorName.transform;
|
|
176
215
|
const mappedValue = mapping?.[decoratorName] ?? decoratorName;
|
|
177
216
|
if (transform === undefined) {
|
|
178
217
|
return { value: mappedValue };
|
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/external-clients/minimatch/minimatch-glob';
|
|
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';
|
|
7
|
+
export { detectConnections, detectPerModuleConnections, detectCrossModuleConnections, deduplicateCrossStrategy, stripHttpCallComponents, 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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,4DAA4D,CAAA;AACxF,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"}
|
|
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,4DAA4D,CAAA;AACxF,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,uBAAuB,EACvB,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/external-clients/minimatch/minimatch-glob';
|
|
7
|
-
export { detectConnections, detectPerModuleConnections, detectCrossModuleConnections, deduplicateCrossStrategy, } from './features/extraction/domain/connection-detection/detect-connections';
|
|
7
|
+
export { detectConnections, detectPerModuleConnections, detectCrossModuleConnections, deduplicateCrossStrategy, stripHttpCallComponents, } 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.4.
|
|
3
|
+
"version": "0.4.6",
|
|
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-extract-config": "0.5.
|
|
28
|
-
"@living-architecture/riviere-schema": "0.6.
|
|
27
|
+
"@living-architecture/riviere-extract-config": "0.5.6",
|
|
28
|
+
"@living-architecture/riviere-schema": "0.6.6"
|
|
29
29
|
}
|
|
30
30
|
}
|