@nielspeter/eess-mermaid 0.5.0 → 0.7.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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.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/parser/diagram-kind.d.ts +11 -0
- package/dist/parser/diagram-kind.d.ts.map +1 -0
- package/dist/parser/diagram-kind.js +44 -0
- package/dist/parser/diagram-kind.js.map +1 -0
- 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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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export type { CliConfig } from './cli/config.js';
|
|
|
28
28
|
export { fromDiagram } from './bridge/from-diagram.js';
|
|
29
29
|
export type { BridgeOptions, BridgeRule, BridgeRuleAllowedEdge, BridgeRuleForbiddenEdge, BridgeRuleInheritance, BridgeOutput, } from './bridge/from-diagram.js';
|
|
30
30
|
export { parseErDiagram } from './parser/parse-er-diagram.js';
|
|
31
|
+
export { diagramKind } from './parser/diagram-kind.js';
|
|
31
32
|
export { collectEntities, collectErRelationships } from './models/er-entity.js';
|
|
32
33
|
export type { ErAttributeInfo, ErEntityInfo, ErRelationshipInfo } from './models/er-entity.js';
|
|
33
34
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAA;AAC/B,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC9E,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKlD,OAAO,EACL,eAAe,EACf,aAAa,EAMb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACtE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAG/C,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAG3C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAG1F,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAI7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC7E,YAAY,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EACV,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,GACb,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAA;AAC/B,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC9E,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKlD,OAAO,EACL,eAAe,EACf,aAAa,EAMb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACtE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAG/C,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAG3C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAG1F,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAI7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC7E,YAAY,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EACV,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,GACb,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC/E,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -34,5 +34,7 @@ export { defineConfig } from './cli/config.js';
|
|
|
34
34
|
export { fromDiagram } from './bridge/from-diagram.js';
|
|
35
35
|
// ER diagrams (plan 0069 Phase 3)
|
|
36
36
|
export { parseErDiagram } from './parser/parse-er-diagram.js';
|
|
37
|
+
// Plan 0214: the one lexer for a diagram's declared kind.
|
|
38
|
+
export { diagramKind } from './parser/diagram-kind.js';
|
|
37
39
|
export { collectEntities, collectErRelationships } from './models/er-entity.js';
|
|
38
40
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,cAAc,iBAAiB,CAAA;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE9E,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,iFAAiF;AACjF,8EAA8E;AAC9E,iEAAiE;AACjE,OAAO,EACL,eAAe,EACf,aAAa;AACb,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,uEAAuE;AACvE,WAAW;AACX,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAI/C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE3C,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAE1F,oBAAoB;AACpB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAE5E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7E,aAAa;AACb,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAW7E,uBAAuB;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAGjE,oDAAoD;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,oBAAoB;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAUtD,kCAAkC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,cAAc,iBAAiB,CAAA;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE9E,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,iFAAiF;AACjF,8EAA8E;AAC9E,iEAAiE;AACjE,OAAO,EACL,eAAe,EACf,aAAa;AACb,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,uEAAuE;AACvE,WAAW;AACX,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAI/C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE3C,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAE1F,oBAAoB;AACpB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAE5E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7E,aAAa;AACb,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAW7E,uBAAuB;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAGjE,oDAAoD;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,oBAAoB;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAUtD,kCAAkC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,0DAA0D;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The declared kind of a Mermaid diagram (plan 0214): the first token of the line that declares it,
|
|
3
|
+
* such as `erDiagram`, `graph` or `stateDiagram-v2`, or `''` when the text declares none.
|
|
4
|
+
*
|
|
5
|
+
* Mermaid's grammar treats `%%…` lines as hidden terminals and permits a `---` frontmatter block, so
|
|
6
|
+
* the keyword is not necessarily the first thing in a diagram. This is the one lexer for that
|
|
7
|
+
* question in the family; it used to live in eess-crossvalidate as `declaredKind()`, while the ER
|
|
8
|
+
* binding tested the raw text and missed a themed diagram entirely (bug 0210).
|
|
9
|
+
*/
|
|
10
|
+
export declare function diagramKind(text: string): string;
|
|
11
|
+
//# sourceMappingURL=diagram-kind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-kind.d.ts","sourceRoot":"","sources":["../../src/parser/diagram-kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The declared kind of a Mermaid diagram (plan 0214): the first token of the line that declares it,
|
|
3
|
+
* such as `erDiagram`, `graph` or `stateDiagram-v2`, or `''` when the text declares none.
|
|
4
|
+
*
|
|
5
|
+
* Mermaid's grammar treats `%%…` lines as hidden terminals and permits a `---` frontmatter block, so
|
|
6
|
+
* the keyword is not necessarily the first thing in a diagram. This is the one lexer for that
|
|
7
|
+
* question in the family; it used to live in eess-crossvalidate as `declaredKind()`, while the ER
|
|
8
|
+
* binding tested the raw text and missed a themed diagram entirely (bug 0210).
|
|
9
|
+
*/
|
|
10
|
+
export function diagramKind(text) {
|
|
11
|
+
return (declaredLine(text).split(/[\s{]/)[0] ?? '').trim();
|
|
12
|
+
}
|
|
13
|
+
function declaredLine(text) {
|
|
14
|
+
const lines = text.split(/\r?\n/);
|
|
15
|
+
let i = 0;
|
|
16
|
+
if (lines[0]?.trim() === '---') {
|
|
17
|
+
i = 1;
|
|
18
|
+
while (i < lines.length && lines[i]?.trim() !== '---')
|
|
19
|
+
i += 1;
|
|
20
|
+
i += 1;
|
|
21
|
+
}
|
|
22
|
+
let inDirective = false;
|
|
23
|
+
for (; i < lines.length; i += 1) {
|
|
24
|
+
const line = lines[i]?.trim() ?? '';
|
|
25
|
+
if (line === '')
|
|
26
|
+
continue;
|
|
27
|
+
// `%%{ … }%%` may span lines. Track it, or the continuation line gets read as the declared kind:
|
|
28
|
+
// measured, a multi-line init block ahead of a sequenceDiagram made it selected.
|
|
29
|
+
if (inDirective) {
|
|
30
|
+
if (line.endsWith('}%%'))
|
|
31
|
+
inDirective = false;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (line.startsWith('%%{') && !line.endsWith('}%%')) {
|
|
35
|
+
inDirective = true;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (line.startsWith('%%'))
|
|
39
|
+
continue;
|
|
40
|
+
return line;
|
|
41
|
+
}
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=diagram-kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-kind.js","sourceRoot":"","sources":["../../src/parser/diagram-kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACjC,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QAC/B,CAAC,GAAG,CAAC,CAAA;QACL,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK;YAAE,CAAC,IAAI,CAAC,CAAA;QAC7D,CAAC,IAAI,CAAC,CAAA;IACR,CAAC;IACD,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;QACnC,IAAI,IAAI,KAAK,EAAE;YAAE,SAAQ;QACzB,iGAAiG;QACjG,iFAAiF;QACjF,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,WAAW,GAAG,KAAK,CAAA;YAC7C,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,WAAW,GAAG,IAAI,CAAA;YAClB,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAQ;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC"}
|
|
@@ -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.7.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.
|
|
47
|
+
"@nielspeter/eess": "^0.7.0",
|
|
48
48
|
"jiti": "^2.7.0",
|
|
49
49
|
"langium": "^4.2.3"
|
|
50
50
|
}
|