@nielspeter/eess-mermaid 0.5.0 → 0.6.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.
- package/dist/builders/class-rule-builder.d.ts +6 -3
- package/dist/builders/class-rule-builder.d.ts.map +1 -1
- package/dist/builders/class-rule-builder.js +6 -3
- package/dist/builders/class-rule-builder.js.map +1 -1
- package/dist/conditions/class.d.ts.map +1 -1
- package/dist/conditions/class.js +7 -28
- package/dist/conditions/class.js.map +1 -1
- package/dist/models/arch-class.d.ts +14 -0
- package/dist/models/arch-class.d.ts.map +1 -1
- package/dist/models/arch-class.js +40 -0
- package/dist/models/arch-class.js.map +1 -1
- package/dist/predicates/class.d.ts +1 -0
- package/dist/predicates/class.d.ts.map +1 -1
- package/dist/predicates/class.js +3 -13
- package/dist/predicates/class.js.map +1 -1
- package/package.json +2 -2
|
@@ -24,11 +24,14 @@ export declare class ClassRuleBuilder extends RuleBuilder<ArchClass, ArchProject
|
|
|
24
24
|
haveAtLeastOneMethod(): this;
|
|
25
25
|
/** Filter to classes with no members (empty body). */
|
|
26
26
|
haveNoMembers(): this;
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Filter to classes that extend the named superclass at any depth, through inheritance or
|
|
29
|
+
* realization edges (ADR-017).
|
|
30
|
+
*/
|
|
28
31
|
extendName(superName: string): this;
|
|
29
|
-
/** Assert matched classes
|
|
32
|
+
/** Assert matched classes have no ancestor, at any depth, carrying the `<<name>>` stereotype. */
|
|
30
33
|
notExtendStereotype(name: string): this;
|
|
31
|
-
/** Assert matched classes extend the named superclass. */
|
|
34
|
+
/** Assert matched classes extend the named superclass at any depth (ADR-017). */
|
|
32
35
|
extend(superName: string): this;
|
|
33
36
|
/** Assert no class matched the preceding filters (the selection must be empty). */
|
|
34
37
|
notExist(): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAwBxE,qBAAa,gBAAiB,SAAQ,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC;IACvE,SAAS,CAAC,WAAW,IAAI,SAAS,EAAE;IAMpC;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOlC,wDAAwD;IACxD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIvC,iEAAiE;IACjE,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C,+DAA+D;IAC/D,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC,kFAAkF;IAClF,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,gEAAgE;IAChE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,+CAA+C;IAC/C,WAAW,IAAI,IAAI;IAInB,uDAAuD;IACvD,oBAAoB,IAAI,IAAI;IAI5B,sDAAsD;IACtD,aAAa,IAAI,IAAI;IAIrB
|
|
1
|
+
{"version":3,"file":"class-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAwBxE,qBAAa,gBAAiB,SAAQ,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC;IACvE,SAAS,CAAC,WAAW,IAAI,SAAS,EAAE;IAMpC;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOlC,wDAAwD;IACxD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIvC,iEAAiE;IACjE,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C,+DAA+D;IAC/D,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC,kFAAkF;IAClF,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,gEAAgE;IAChE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,+CAA+C;IAC/C,WAAW,IAAI,IAAI;IAInB,uDAAuD;IACvD,oBAAoB,IAAI,IAAI;IAI5B,sDAAsD;IACtD,aAAa,IAAI,IAAI;IAIrB;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMnC,iGAAiG;IACjG,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIvC,iFAAiF;IACjF,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/B,mFAAmF;IACnF,QAAQ,IAAI,IAAI;IAIhB,qEAAqE;IACrE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIlC,sEAAsE;IACtE,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIrC,uFAAuF;IACvF,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAGhD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,CAE9D"}
|
|
@@ -49,16 +49,19 @@ export class ClassRuleBuilder extends RuleBuilder {
|
|
|
49
49
|
haveNoMembers() {
|
|
50
50
|
return this.addPredicate(predHaveNoMembers());
|
|
51
51
|
}
|
|
52
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Filter to classes that extend the named superclass at any depth, through inheritance or
|
|
54
|
+
* realization edges (ADR-017).
|
|
55
|
+
*/
|
|
53
56
|
extendName(superName) {
|
|
54
57
|
return this.addPredicate(predExtendName(superName));
|
|
55
58
|
}
|
|
56
59
|
// --- Condition methods (after .should()) ---
|
|
57
|
-
/** Assert matched classes
|
|
60
|
+
/** Assert matched classes have no ancestor, at any depth, carrying the `<<name>>` stereotype. */
|
|
58
61
|
notExtendStereotype(name) {
|
|
59
62
|
return this.addCondition(condNotExtendStereotype(name));
|
|
60
63
|
}
|
|
61
|
-
/** Assert matched classes extend the named superclass. */
|
|
64
|
+
/** Assert matched classes extend the named superclass at any depth (ADR-017). */
|
|
62
65
|
extend(superName) {
|
|
63
66
|
return this.addCondition(condExtendClass(superName));
|
|
64
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-rule-builder.js","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAA;AACxE,OAAO,EACL,cAAc,IAAI,kBAAkB,EACpC,gBAAgB,IAAI,oBAAoB,EACxC,oBAAoB,IAAI,wBAAwB,EAChD,kBAAkB,IAAI,sBAAsB,EAC5C,eAAe,IAAI,mBAAmB,EACtC,eAAe,IAAI,mBAAmB,EACtC,WAAW,IAAI,eAAe,EAC9B,oBAAoB,IAAI,wBAAwB,EAChD,aAAa,IAAI,iBAAiB,EAClC,UAAU,IAAI,cAAc,GAC7B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACL,mBAAmB,IAAI,uBAAuB,EAC9C,WAAW,IAAI,eAAe,EAC9B,QAAQ,IAAI,YAAY,EACxB,cAAc,IAAI,kBAAkB,EACpC,iBAAiB,IAAI,qBAAqB,EAC1C,QAAQ,IAAI,YAAY,EACxB,WAAW,IAAI,eAAe,EAC9B,qBAAqB,IAAI,yBAAyB,GACnD,MAAM,wBAAwB,CAAA;AAE/B,MAAM,OAAO,gBAAiB,SAAQ,WAAmC;IAC7D,WAAW;QACnB,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,4CAA4C;IAE5C;;;OAGG;IACH,cAAc,CAAC,IAAY;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAA;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAA;IACpD,CAAC;IAED,wDAAwD;IACxD,gBAAgB,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,iEAAiE;IACjE,oBAAoB,CAAC,MAAc;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED,+DAA+D;IAC/D,kBAAkB,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,kFAAkF;IAClF,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,gEAAgE;IAChE,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,+CAA+C;IAC/C,WAAW;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,uDAAuD;IACvD,oBAAoB;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,sDAAsD;IACtD,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"class-rule-builder.js","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../src/conditions/class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAInE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../src/conditions/class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAInE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAsBxD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAoCtE;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAgBnE;AA6BD,wBAAgB,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,CAO/C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAMjE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAMpE;AAUD,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAMjE;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAMpE;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAiC9E"}
|
package/dist/conditions/class.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { marksAssertsCardinality } from '@nielspeter/eess/internal';
|
|
2
2
|
import { createViolation } from '../core/violation.js';
|
|
3
|
-
import { collectRelationships, getClassLine } from '../models/arch-class.js';
|
|
4
|
-
const INHERITANCE_ARROWS = new Set(['<|--', '<|..', '--|>', '..|>']);
|
|
3
|
+
import { ancestorPaths, ancestorsOf, collectRelationships, getClassLine, inheritsBetween, } from '../models/arch-class.js';
|
|
5
4
|
function classViolation(c, message, ctx) {
|
|
6
5
|
return createViolation({
|
|
7
6
|
element: c.name,
|
|
@@ -10,17 +9,6 @@ function classViolation(c, message, ctx) {
|
|
|
10
9
|
sourceText: c.project.source,
|
|
11
10
|
}, message, ctx);
|
|
12
11
|
}
|
|
13
|
-
function isExtensionEdge(arrow) {
|
|
14
|
-
return INHERITANCE_ARROWS.has(arrow);
|
|
15
|
-
}
|
|
16
|
-
function inheritsBetween(arrow, source, target) {
|
|
17
|
-
if (!isExtensionEdge(arrow))
|
|
18
|
-
return undefined;
|
|
19
|
-
if (arrow === '<|--' || arrow === '<|..') {
|
|
20
|
-
return { sub: target, sup: source };
|
|
21
|
-
}
|
|
22
|
-
return { sub: source, sup: target };
|
|
23
|
-
}
|
|
24
12
|
export function notExtendStereotype(name) {
|
|
25
13
|
return {
|
|
26
14
|
description: `not extend a class with stereotype <<${name}>>`,
|
|
@@ -39,15 +27,11 @@ export function notExtendStereotype(name) {
|
|
|
39
27
|
}));
|
|
40
28
|
const violations = [];
|
|
41
29
|
for (const c of elements) {
|
|
42
|
-
for (const
|
|
43
|
-
const
|
|
44
|
-
if (!inh)
|
|
45
|
-
continue;
|
|
46
|
-
if (inh.sub !== c.name)
|
|
47
|
-
continue;
|
|
48
|
-
const supStereotypes = allClasses.get(inh.sup) ?? [];
|
|
30
|
+
for (const [sup, via] of ancestorPaths(project, c.name)) {
|
|
31
|
+
const supStereotypes = allClasses.get(sup) ?? [];
|
|
49
32
|
if (supStereotypes.includes(name)) {
|
|
50
|
-
|
|
33
|
+
const path = via.length > 0 ? ` (via ${via.join(', ')})` : '';
|
|
34
|
+
violations.push(classViolation(c, `${c.name} extends ${sup}${path} which has stereotype <<${name}>>`, context));
|
|
51
35
|
}
|
|
52
36
|
}
|
|
53
37
|
}
|
|
@@ -65,12 +49,7 @@ export function extendClass(superName) {
|
|
|
65
49
|
const project = first.project;
|
|
66
50
|
const violations = [];
|
|
67
51
|
for (const c of elements) {
|
|
68
|
-
|
|
69
|
-
.map((r) => inheritsBetween(r.arrow, r.source, r.target))
|
|
70
|
-
.filter((inh) => inh !== undefined)
|
|
71
|
-
.filter((inh) => inh.sub === c.name)
|
|
72
|
-
.map((inh) => inh.sup);
|
|
73
|
-
if (!extends_.includes(superName)) {
|
|
52
|
+
if (!ancestorsOf(project, c.name).has(superName)) {
|
|
74
53
|
violations.push(classViolation(c, `${c.name} does not extend ${superName}`, context));
|
|
75
54
|
}
|
|
76
55
|
}
|
|
@@ -115,7 +94,7 @@ export function notHaveStereotype(name) {
|
|
|
115
94
|
}
|
|
116
95
|
function dependenciesOf(c) {
|
|
117
96
|
return collectRelationships(c.project)
|
|
118
|
-
.filter((r) => r.source === c.name &&
|
|
97
|
+
.filter((r) => r.source === c.name && inheritsBetween(r.arrow, r.source, r.target) === undefined)
|
|
119
98
|
.map((r) => r.target);
|
|
120
99
|
}
|
|
121
100
|
export function dependOn(targetName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/conditions/class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/conditions/class.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,5 +16,19 @@ export interface ArchRelationship {
|
|
|
16
16
|
}
|
|
17
17
|
export declare function collectClasses(project: ArchProject): ArchClass[];
|
|
18
18
|
export declare function collectRelationships(project: ArchProject): ArchRelationship[];
|
|
19
|
+
/** The `{ sub, sup }` pair an inheritance or realization edge declares; none for any other edge. */
|
|
20
|
+
export declare function inheritsBetween(arrow: string, source: string, target: string): {
|
|
21
|
+
sub: string;
|
|
22
|
+
sup: string;
|
|
23
|
+
} | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Every class `className` reaches through inheritance and realization edges, at any depth
|
|
26
|
+
* (bug 0374, ADR-017 rule 6), mapped to the classes passed on the way, nearest first — the
|
|
27
|
+
* shortest such path. Each class is visited once, so a cycle in the diagram ends the walk; a
|
|
28
|
+
* class on a cycle reaches itself.
|
|
29
|
+
*/
|
|
30
|
+
export declare function ancestorPaths(project: ArchProject, className: string): Map<string, readonly string[]>;
|
|
31
|
+
/** The classes `className` reaches through inheritance and realization edges, at any depth. */
|
|
32
|
+
export declare function ancestorsOf(project: ArchProject, className: string): Set<string>;
|
|
19
33
|
export declare function getClassLine(c: ArchClass): number;
|
|
20
34
|
//# sourceMappingURL=arch-class.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arch-class.d.ts","sourceRoot":"","sources":["../../src/models/arch-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,CAqBhE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,EAAE,CAO7E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAEjD"}
|
|
1
|
+
{"version":3,"file":"arch-class.d.ts","sourceRoot":"","sources":["../../src/models/arch-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,CAqBhE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,EAAE,CAO7E;AAID,oGAAoG;AACpG,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAM1C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,GAChB,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAkBhC;AAED,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAEhF;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAEjD"}
|
|
@@ -27,6 +27,46 @@ export function collectRelationships(project) {
|
|
|
27
27
|
label: r.label,
|
|
28
28
|
}));
|
|
29
29
|
}
|
|
30
|
+
const INHERITANCE_ARROWS = new Set(['<|--', '<|..', '--|>', '..|>']);
|
|
31
|
+
/** The `{ sub, sup }` pair an inheritance or realization edge declares; none for any other edge. */
|
|
32
|
+
export function inheritsBetween(arrow, source, target) {
|
|
33
|
+
if (!INHERITANCE_ARROWS.has(arrow))
|
|
34
|
+
return undefined;
|
|
35
|
+
if (arrow === '<|--' || arrow === '<|..') {
|
|
36
|
+
return { sub: target, sup: source };
|
|
37
|
+
}
|
|
38
|
+
return { sub: source, sup: target };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Every class `className` reaches through inheritance and realization edges, at any depth
|
|
42
|
+
* (bug 0374, ADR-017 rule 6), mapped to the classes passed on the way, nearest first — the
|
|
43
|
+
* shortest such path. Each class is visited once, so a cycle in the diagram ends the walk; a
|
|
44
|
+
* class on a cycle reaches itself.
|
|
45
|
+
*/
|
|
46
|
+
export function ancestorPaths(project, className) {
|
|
47
|
+
const parents = new Map();
|
|
48
|
+
for (const r of collectRelationships(project)) {
|
|
49
|
+
const inh = inheritsBetween(r.arrow, r.source, r.target);
|
|
50
|
+
if (inh === undefined)
|
|
51
|
+
continue;
|
|
52
|
+
parents.set(inh.sub, [...(parents.get(inh.sub) ?? []), inh.sup]);
|
|
53
|
+
}
|
|
54
|
+
const reached = new Map();
|
|
55
|
+
const queue = (parents.get(className) ?? []).map((name) => ({ name, via: [] }));
|
|
56
|
+
for (let next = queue.shift(); next !== undefined; next = queue.shift()) {
|
|
57
|
+
if (reached.has(next.name))
|
|
58
|
+
continue;
|
|
59
|
+
reached.set(next.name, next.via);
|
|
60
|
+
const via = [...next.via, next.name];
|
|
61
|
+
for (const name of parents.get(next.name) ?? [])
|
|
62
|
+
queue.push({ name, via });
|
|
63
|
+
}
|
|
64
|
+
return reached;
|
|
65
|
+
}
|
|
66
|
+
/** The classes `className` reaches through inheritance and realization edges, at any depth. */
|
|
67
|
+
export function ancestorsOf(project, className) {
|
|
68
|
+
return new Set(ancestorPaths(project, className).keys());
|
|
69
|
+
}
|
|
30
70
|
export function getClassLine(c) {
|
|
31
71
|
return c.node.$cstNode?.range.start.line ?? 0;
|
|
32
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arch-class.js","sourceRoot":"","sources":["../../src/models/arch-class.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,cAAc,CAAC,OAAoB;IACjD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAoB,CAAA;IACtD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAA;QAClC,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QACjD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAC5B,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACrD,OAAO;YACL,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC;YACrC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACzC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,OAAO;SACR,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACvD,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;QACtB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAY;IACvC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;AAC/C,CAAC"}
|
|
1
|
+
{"version":3,"file":"arch-class.js","sourceRoot":"","sources":["../../src/models/arch-class.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,5 +9,6 @@ export declare function haveMethodNamed(name: string): Predicate<ArchClass>;
|
|
|
9
9
|
export declare function areAbstract(): Predicate<ArchClass>;
|
|
10
10
|
export declare function haveAtLeastOneMethod(): Predicate<ArchClass>;
|
|
11
11
|
export declare function haveNoMembers(): Predicate<ArchClass>;
|
|
12
|
+
/** Matches classes that reach `superName` through inheritance or realization edges, at any depth (ADR-017). */
|
|
12
13
|
export declare function extendName(superName: string): Predicate<ArchClass>;
|
|
13
14
|
//# sourceMappingURL=class.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../src/predicates/class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../src/predicates/class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGxD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAKjE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAKtE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAKzE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAKvE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAKlE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAKlE;AAED,wBAAgB,WAAW,IAAI,SAAS,CAAC,SAAS,CAAC,CAKlD;AAED,wBAAgB,oBAAoB,IAAI,SAAS,CAAC,SAAS,CAAC,CAK3D;AAED,wBAAgB,aAAa,IAAI,SAAS,CAAC,SAAS,CAAC,CAKpD;AAED,+GAA+G;AAC/G,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAKlE"}
|
package/dist/predicates/class.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ancestorsOf } from '../models/arch-class.js';
|
|
1
2
|
export function haveStereotype(name) {
|
|
2
3
|
return {
|
|
3
4
|
description: `have stereotype <<${name}>>`,
|
|
@@ -52,22 +53,11 @@ export function haveNoMembers() {
|
|
|
52
53
|
test: (c) => c.memberNames.length === 0,
|
|
53
54
|
};
|
|
54
55
|
}
|
|
56
|
+
/** Matches classes that reach `superName` through inheritance or realization edges, at any depth (ADR-017). */
|
|
55
57
|
export function extendName(superName) {
|
|
56
58
|
return {
|
|
57
59
|
description: `extend ${superName}`,
|
|
58
|
-
test: (c) =>
|
|
59
|
-
const project = c.project;
|
|
60
|
-
for (const r of project.ast.relationships) {
|
|
61
|
-
if (r.arrow !== '<|--' && r.arrow !== '<|..' && r.arrow !== '--|>' && r.arrow !== '..|>') {
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
const sub = r.arrow === '<|--' || r.arrow === '<|..' ? r.rhs.$refText : r.lhs.$refText;
|
|
65
|
-
const sup = r.arrow === '<|--' || r.arrow === '<|..' ? r.lhs.$refText : r.rhs.$refText;
|
|
66
|
-
if (sub === c.name && sup === superName)
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
return false;
|
|
70
|
-
},
|
|
60
|
+
test: (c) => ancestorsOf(c.project, c.name).has(superName),
|
|
71
61
|
};
|
|
72
62
|
}
|
|
73
63
|
//# sourceMappingURL=class.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/predicates/class.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/predicates/class.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO;QACL,WAAW,EAAE,qBAAqB,IAAI,IAAI;QAC1C,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO;QACL,WAAW,EAAE,sBAAsB,OAAO,CAAC,QAAQ,EAAE,EAAE;QACvD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;KAClC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO;QACL,WAAW,EAAE,4BAA4B,MAAM,GAAG;QAClD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;KACvC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO;QACL,WAAW,EAAE,0BAA0B,MAAM,GAAG;QAChD,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;KACrC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO;QACL,WAAW,EAAE,sBAAsB,IAAI,GAAG;QAC1C,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO;QACL,WAAW,EAAE,sBAAsB,IAAI,GAAG;QAC1C,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;KAChD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,WAAW,EAAE,0BAA0B;QACvC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;KACtC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;KACxC,CAAA;AACH,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO;QACL,WAAW,EAAE,UAAU,SAAS,EAAE;QAClC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;KAC3D,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nielspeter/eess-mermaid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Architecture testing for Mermaid class diagrams — the Mermaid dialect of the eess family (formerly mermaidunit)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"eess"
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@nielspeter/eess": "^0.6.
|
|
47
|
+
"@nielspeter/eess": "^0.6.1",
|
|
48
48
|
"jiti": "^2.7.0",
|
|
49
49
|
"langium": "^4.2.3"
|
|
50
50
|
}
|