@nielspeter/eess-mermaid 0.1.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/LICENSE +21 -0
- package/README.md +29 -0
- package/dist/bridge/from-diagram.d.ts +58 -0
- package/dist/bridge/from-diagram.d.ts.map +1 -0
- package/dist/bridge/from-diagram.js +112 -0
- package/dist/bridge/from-diagram.js.map +1 -0
- package/dist/builders/class-rule-builder.d.ts +45 -0
- package/dist/builders/class-rule-builder.d.ts.map +1 -0
- package/dist/builders/class-rule-builder.js +89 -0
- package/dist/builders/class-rule-builder.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +4 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/check.d.ts +8 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +44 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +6 -0
- package/dist/cli/commands/explain.d.ts.map +1 -0
- package/dist/cli/commands/explain.js +29 -0
- package/dist/cli/commands/explain.js.map +1 -0
- package/dist/cli/config.d.ts +8 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +4 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +130 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/load-rules.d.ts +10 -0
- package/dist/cli/load-rules.d.ts.map +1 -0
- package/dist/cli/load-rules.js +62 -0
- package/dist/cli/load-rules.js.map +1 -0
- package/dist/cli/resolve-config.d.ts +3 -0
- package/dist/cli/resolve-config.d.ts.map +1 -0
- package/dist/cli/resolve-config.js +50 -0
- package/dist/cli/resolve-config.js.map +1 -0
- package/dist/cli/watch.d.ts +8 -0
- package/dist/cli/watch.d.ts.map +1 -0
- package/dist/cli/watch.js +114 -0
- package/dist/cli/watch.js.map +1 -0
- package/dist/conditions/class.d.ts +11 -0
- package/dist/conditions/class.d.ts.map +1 -0
- package/dist/conditions/class.js +163 -0
- package/dist/conditions/class.js.map +1 -0
- package/dist/core/diagram.d.ts +3 -0
- package/dist/core/diagram.d.ts.map +1 -0
- package/dist/core/diagram.js +18 -0
- package/dist/core/diagram.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/project.d.ts +7 -0
- package/dist/core/project.d.ts.map +1 -0
- package/dist/core/project.js +2 -0
- package/dist/core/project.js.map +1 -0
- package/dist/core/violation.d.ts +15 -0
- package/dist/core/violation.d.ts.map +1 -0
- package/dist/core/violation.js +16 -0
- package/dist/core/violation.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/models/arch-class.d.ts +20 -0
- package/dist/models/arch-class.d.ts.map +1 -0
- package/dist/models/arch-class.js +33 -0
- package/dist/models/arch-class.js.map +1 -0
- package/dist/models/er-entity.d.ts +32 -0
- package/dist/models/er-entity.d.ts.map +1 -0
- package/dist/models/er-entity.js +37 -0
- package/dist/models/er-entity.js.map +1 -0
- package/dist/parser/generated/ast.d.ts +539 -0
- package/dist/parser/generated/ast.d.ts.map +1 -0
- package/dist/parser/generated/ast.js +443 -0
- package/dist/parser/generated/ast.js.map +1 -0
- package/dist/parser/generated/grammar.d.ts +8 -0
- package/dist/parser/generated/grammar.d.ts.map +1 -0
- package/dist/parser/generated/grammar.js +10 -0
- package/dist/parser/generated/grammar.js.map +1 -0
- package/dist/parser/generated/module.d.ts +21 -0
- package/dist/parser/generated/module.d.ts.map +1 -0
- package/dist/parser/generated/module.js +32 -0
- package/dist/parser/generated/module.js.map +1 -0
- package/dist/parser/parse-class-diagram.d.ts +7 -0
- package/dist/parser/parse-class-diagram.d.ts.map +1 -0
- package/dist/parser/parse-class-diagram.js +33 -0
- package/dist/parser/parse-class-diagram.js.map +1 -0
- package/dist/parser/parse-directives.d.ts +38 -0
- package/dist/parser/parse-directives.d.ts.map +1 -0
- package/dist/parser/parse-directives.js +96 -0
- package/dist/parser/parse-directives.js.map +1 -0
- package/dist/parser/parse-er-diagram.d.ts +4 -0
- package/dist/parser/parse-er-diagram.d.ts.map +1 -0
- package/dist/parser/parse-er-diagram.js +27 -0
- package/dist/parser/parse-er-diagram.js.map +1 -0
- package/dist/parser/validate-diagram.d.ts +11 -0
- package/dist/parser/validate-diagram.d.ts.map +1 -0
- package/dist/parser/validate-diagram.js +67 -0
- package/dist/parser/validate-diagram.js.map +1 -0
- package/dist/predicates/class.d.ts +13 -0
- package/dist/predicates/class.d.ts.map +1 -0
- package/dist/predicates/class.js +73 -0
- package/dist/predicates/class.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Diagram } from './generated/ast.js';
|
|
2
|
+
export interface DirectiveSchema {
|
|
3
|
+
kind: 'schema';
|
|
4
|
+
path: string;
|
|
5
|
+
raw: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DirectiveStereotype {
|
|
8
|
+
kind: 'stereotype';
|
|
9
|
+
name: string;
|
|
10
|
+
body: string;
|
|
11
|
+
raw: string;
|
|
12
|
+
}
|
|
13
|
+
export interface DirectiveId {
|
|
14
|
+
kind: 'id';
|
|
15
|
+
className: string;
|
|
16
|
+
id: string;
|
|
17
|
+
raw: string;
|
|
18
|
+
}
|
|
19
|
+
export interface DirectiveUnknown {
|
|
20
|
+
kind: 'unknown';
|
|
21
|
+
name: string;
|
|
22
|
+
raw: string;
|
|
23
|
+
}
|
|
24
|
+
export type ParsedDirective = DirectiveSchema | DirectiveStereotype | DirectiveId | DirectiveUnknown;
|
|
25
|
+
export interface DirectiveDiagnostic {
|
|
26
|
+
level: 'warning' | 'error';
|
|
27
|
+
message: string;
|
|
28
|
+
raw: string;
|
|
29
|
+
}
|
|
30
|
+
export interface DirectiveParseResult {
|
|
31
|
+
directives: ParsedDirective[];
|
|
32
|
+
diagnostics: DirectiveDiagnostic[];
|
|
33
|
+
}
|
|
34
|
+
export declare function parseDirectives(ast: Diagram): DirectiveParseResult;
|
|
35
|
+
export declare function findDirective<K extends ParsedDirective['kind']>(result: DirectiveParseResult, kind: K): Extract<ParsedDirective, {
|
|
36
|
+
kind: K;
|
|
37
|
+
}>[];
|
|
38
|
+
//# sourceMappingURL=parse-directives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-directives.d.ts","sourceRoot":"","sources":["../../src/parser/parse-directives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAIjD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,mBAAmB,GAAG,WAAW,GAAG,gBAAgB,CAAA;AAEpG,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,WAAW,EAAE,mBAAmB,EAAE,CAAA;CACnC;AAwFD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,oBAAoB,CASlE;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,EAC7D,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EAAE,CAIzC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const RECOGNIZED_DIRECTIVES = new Set(['schema', 'stereotype', 'id']);
|
|
2
|
+
const HEADER_PATTERN = /^%%\s*@(\w+)\s*(.*)$/;
|
|
3
|
+
function stripBlock(rest) {
|
|
4
|
+
const match = /^(\S+)\s*\{(.*)\}\s*$/.exec(rest);
|
|
5
|
+
if (!match)
|
|
6
|
+
return undefined;
|
|
7
|
+
const [, name, body] = match;
|
|
8
|
+
if (name === undefined || body === undefined)
|
|
9
|
+
return undefined;
|
|
10
|
+
return { name, body: body.trim() };
|
|
11
|
+
}
|
|
12
|
+
function parseOne(raw) {
|
|
13
|
+
const m = HEADER_PATTERN.exec(raw.trim());
|
|
14
|
+
if (!m) {
|
|
15
|
+
return {
|
|
16
|
+
directive: { kind: 'unknown', name: '', raw },
|
|
17
|
+
diagnostic: {
|
|
18
|
+
level: 'warning',
|
|
19
|
+
message: `malformed directive: ${raw}`,
|
|
20
|
+
raw,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const name = m[1] ?? '';
|
|
25
|
+
const rest = (m[2] ?? '').trim();
|
|
26
|
+
if (name === 'schema') {
|
|
27
|
+
if (!rest) {
|
|
28
|
+
return {
|
|
29
|
+
directive: { kind: 'schema', path: '', raw },
|
|
30
|
+
diagnostic: {
|
|
31
|
+
level: 'warning',
|
|
32
|
+
message: '@schema directive requires a path',
|
|
33
|
+
raw,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return { directive: { kind: 'schema', path: rest, raw } };
|
|
38
|
+
}
|
|
39
|
+
if (name === 'stereotype') {
|
|
40
|
+
const block = stripBlock(rest);
|
|
41
|
+
if (!block) {
|
|
42
|
+
return {
|
|
43
|
+
directive: { kind: 'stereotype', name: rest, body: '', raw },
|
|
44
|
+
diagnostic: {
|
|
45
|
+
level: 'warning',
|
|
46
|
+
message: '@stereotype directive expects `<name> { ... }`',
|
|
47
|
+
raw,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return { directive: { kind: 'stereotype', name: block.name, body: block.body, raw } };
|
|
52
|
+
}
|
|
53
|
+
if (name === 'id') {
|
|
54
|
+
const parts = rest.split(/\s+/);
|
|
55
|
+
if (parts.length < 2) {
|
|
56
|
+
return {
|
|
57
|
+
directive: { kind: 'id', className: parts[0] ?? '', id: '', raw },
|
|
58
|
+
diagnostic: {
|
|
59
|
+
level: 'warning',
|
|
60
|
+
message: '@id directive expects `<ClassName> <stable-id>`',
|
|
61
|
+
raw,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
directive: { kind: 'id', className: parts[0] ?? '', id: parts.slice(1).join(' '), raw },
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (!RECOGNIZED_DIRECTIVES.has(name)) {
|
|
70
|
+
return {
|
|
71
|
+
directive: { kind: 'unknown', name, raw },
|
|
72
|
+
diagnostic: {
|
|
73
|
+
level: 'warning',
|
|
74
|
+
message: `unknown directive @${name} — accepted as-is, but no semantics applied`,
|
|
75
|
+
raw,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// Recognized but unhandled — defensive.
|
|
80
|
+
return { directive: { kind: 'unknown', name, raw } };
|
|
81
|
+
}
|
|
82
|
+
export function parseDirectives(ast) {
|
|
83
|
+
const directives = [];
|
|
84
|
+
const diagnostics = [];
|
|
85
|
+
for (const d of ast.directives) {
|
|
86
|
+
const { directive, diagnostic } = parseOne(d.text);
|
|
87
|
+
directives.push(directive);
|
|
88
|
+
if (diagnostic)
|
|
89
|
+
diagnostics.push(diagnostic);
|
|
90
|
+
}
|
|
91
|
+
return { directives, diagnostics };
|
|
92
|
+
}
|
|
93
|
+
export function findDirective(result, kind) {
|
|
94
|
+
return result.directives.filter((d) => d.kind === kind);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=parse-directives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-directives.js","sourceRoot":"","sources":["../../src/parser/parse-directives.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-er-diagram.d.ts","sourceRoot":"","sources":["../../src/parser/parse-er-diagram.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAoBnD,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAWtD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EmptyFileSystem, createDefaultCoreModule, createDefaultSharedCoreModule, inject, } from 'langium';
|
|
2
|
+
import { ErDiagramGrammarGeneratedModule, MermaidUnitGeneratedSharedModule, } from './generated/module.js';
|
|
3
|
+
import { MermaidUnitParseError } from './parse-class-diagram.js';
|
|
4
|
+
let cachedServices;
|
|
5
|
+
function getServices() {
|
|
6
|
+
if (cachedServices)
|
|
7
|
+
return cachedServices;
|
|
8
|
+
const shared = inject(createDefaultSharedCoreModule(EmptyFileSystem), MermaidUnitGeneratedSharedModule);
|
|
9
|
+
const services = inject(createDefaultCoreModule({ shared }), ErDiagramGrammarGeneratedModule);
|
|
10
|
+
shared.ServiceRegistry.register(services);
|
|
11
|
+
cachedServices = services;
|
|
12
|
+
return services;
|
|
13
|
+
}
|
|
14
|
+
/** Parse a Mermaid `erDiagram` source into the generated AST (plan 0069 Phase 3). */
|
|
15
|
+
export function parseErDiagram(text) {
|
|
16
|
+
const services = getServices();
|
|
17
|
+
const result = services.parser.LangiumParser.parse(text);
|
|
18
|
+
const errors = [
|
|
19
|
+
...result.lexerErrors.map((e) => `lexer:${e.line}:${e.column} ${e.message}`),
|
|
20
|
+
...result.parserErrors.map((e) => `parser: ${e.message}`),
|
|
21
|
+
];
|
|
22
|
+
if (errors.length > 0) {
|
|
23
|
+
throw new MermaidUnitParseError(errors);
|
|
24
|
+
}
|
|
25
|
+
return result.value;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=parse-er-diagram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-er-diagram.js","sourceRoot":"","sources":["../../src/parser/parse-er-diagram.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,6BAA6B,EAC7B,MAAM,GAGP,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,IAAI,cAA+C,CAAA;AAEnD,SAAS,WAAW;IAClB,IAAI,cAAc;QAAE,OAAO,cAAc,CAAA;IACzC,MAAM,MAAM,GAA8B,MAAM,CAC9C,6BAA6B,CAAC,eAAe,CAAC,EAC9C,gCAAgC,CACjC,CAAA;IACD,MAAM,QAAQ,GAAwB,MAAM,CAC1C,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,EACnC,+BAA+B,CAChC,CAAA;IACD,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACzC,cAAc,GAAG,QAAQ,CAAA;IACzB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAY,IAAI,CAAC,CAAA;IACnE,MAAM,MAAM,GAAG;QACb,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5E,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;KAC1D,CAAA;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAA;IACzC,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Diagram } from './generated/ast.js';
|
|
2
|
+
export interface ReferenceDiagnostic {
|
|
3
|
+
level: 'error' | 'warning';
|
|
4
|
+
kind: 'unresolved-reference' | 'duplicate-class';
|
|
5
|
+
message: string;
|
|
6
|
+
refText: string;
|
|
7
|
+
declaredOn: 'relationship' | 'stereotypeAssignment' | 'note';
|
|
8
|
+
line?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function validateReferences(ast: Diagram): ReferenceDiagnostic[];
|
|
11
|
+
//# sourceMappingURL=validate-diagram.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-diagram.d.ts","sourceRoot":"","sources":["../../src/parser/validate-diagram.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,sBAAsB,GAAG,iBAAiB,CAAA;IAChD,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,cAAc,GAAG,sBAAsB,GAAG,MAAM,CAAA;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,EAAE,CAsEtE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export function validateReferences(ast) {
|
|
2
|
+
const declared = new Set(ast.classes.map((c) => c.name));
|
|
3
|
+
const diagnostics = [];
|
|
4
|
+
// Duplicate class declarations
|
|
5
|
+
const seen = new Set();
|
|
6
|
+
for (const c of ast.classes) {
|
|
7
|
+
if (seen.has(c.name)) {
|
|
8
|
+
diagnostics.push({
|
|
9
|
+
level: 'error',
|
|
10
|
+
kind: 'duplicate-class',
|
|
11
|
+
message: `class ${c.name} is declared more than once`,
|
|
12
|
+
refText: c.name,
|
|
13
|
+
declaredOn: 'relationship',
|
|
14
|
+
line: c.$cstNode?.range.start.line,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
seen.add(c.name);
|
|
18
|
+
}
|
|
19
|
+
for (const r of ast.relationships) {
|
|
20
|
+
if (!declared.has(r.lhs.$refText)) {
|
|
21
|
+
diagnostics.push({
|
|
22
|
+
level: 'error',
|
|
23
|
+
kind: 'unresolved-reference',
|
|
24
|
+
message: `relationship references undeclared class '${r.lhs.$refText}'`,
|
|
25
|
+
refText: r.lhs.$refText,
|
|
26
|
+
declaredOn: 'relationship',
|
|
27
|
+
line: r.$cstNode?.range.start.line,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (!declared.has(r.rhs.$refText)) {
|
|
31
|
+
diagnostics.push({
|
|
32
|
+
level: 'error',
|
|
33
|
+
kind: 'unresolved-reference',
|
|
34
|
+
message: `relationship references undeclared class '${r.rhs.$refText}'`,
|
|
35
|
+
refText: r.rhs.$refText,
|
|
36
|
+
declaredOn: 'relationship',
|
|
37
|
+
line: r.$cstNode?.range.start.line,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
for (const a of ast.stereotypeAssignments) {
|
|
42
|
+
if (!declared.has(a.classRef.$refText)) {
|
|
43
|
+
diagnostics.push({
|
|
44
|
+
level: 'error',
|
|
45
|
+
kind: 'unresolved-reference',
|
|
46
|
+
message: `stereotype <<${a.stereotype.name}>> references undeclared class '${a.classRef.$refText}'`,
|
|
47
|
+
refText: a.classRef.$refText,
|
|
48
|
+
declaredOn: 'stereotypeAssignment',
|
|
49
|
+
line: a.$cstNode?.range.start.line,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
for (const n of ast.notes) {
|
|
54
|
+
if (n.target && !declared.has(n.target.$refText)) {
|
|
55
|
+
diagnostics.push({
|
|
56
|
+
level: 'error',
|
|
57
|
+
kind: 'unresolved-reference',
|
|
58
|
+
message: `note targets undeclared class '${n.target.$refText}'`,
|
|
59
|
+
refText: n.target.$refText,
|
|
60
|
+
declaredOn: 'note',
|
|
61
|
+
line: n.$cstNode?.range.start.line,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return diagnostics;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=validate-diagram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-diagram.js","sourceRoot":"","sources":["../../src/parser/validate-diagram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Predicate } from '@nielspeter/eess';
|
|
2
|
+
import type { ArchClass } from '../models/arch-class.js';
|
|
3
|
+
export declare function haveStereotype(name: string): Predicate<ArchClass>;
|
|
4
|
+
export declare function haveNameMatching(pattern: RegExp): Predicate<ArchClass>;
|
|
5
|
+
export declare function haveNameStartingWith(prefix: string): Predicate<ArchClass>;
|
|
6
|
+
export declare function haveNameEndingWith(suffix: string): Predicate<ArchClass>;
|
|
7
|
+
export declare function haveMemberNamed(name: string): Predicate<ArchClass>;
|
|
8
|
+
export declare function haveMethodNamed(name: string): Predicate<ArchClass>;
|
|
9
|
+
export declare function areAbstract(): Predicate<ArchClass>;
|
|
10
|
+
export declare function haveAtLeastOneMethod(): Predicate<ArchClass>;
|
|
11
|
+
export declare function haveNoMembers(): Predicate<ArchClass>;
|
|
12
|
+
export declare function extendName(superName: string): Predicate<ArchClass>;
|
|
13
|
+
//# sourceMappingURL=class.d.ts.map
|
|
@@ -0,0 +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;AAExD,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,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAgBlE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export function haveStereotype(name) {
|
|
2
|
+
return {
|
|
3
|
+
description: `have stereotype <<${name}>>`,
|
|
4
|
+
test: (c) => c.stereotypes.includes(name),
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export function haveNameMatching(pattern) {
|
|
8
|
+
return {
|
|
9
|
+
description: `have name matching ${pattern.toString()}`,
|
|
10
|
+
test: (c) => pattern.test(c.name),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function haveNameStartingWith(prefix) {
|
|
14
|
+
return {
|
|
15
|
+
description: `have name starting with '${prefix}'`,
|
|
16
|
+
test: (c) => c.name.startsWith(prefix),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function haveNameEndingWith(suffix) {
|
|
20
|
+
return {
|
|
21
|
+
description: `have name ending with '${suffix}'`,
|
|
22
|
+
test: (c) => c.name.endsWith(suffix),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function haveMemberNamed(name) {
|
|
26
|
+
return {
|
|
27
|
+
description: `have member named '${name}'`,
|
|
28
|
+
test: (c) => c.memberNames.includes(name),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function haveMethodNamed(name) {
|
|
32
|
+
return {
|
|
33
|
+
description: `have method named '${name}'`,
|
|
34
|
+
test: (c) => c.methodNames.includes(name),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function areAbstract() {
|
|
38
|
+
return {
|
|
39
|
+
description: 'are abstract',
|
|
40
|
+
test: (c) => c.stereotypes.includes('abstract'),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function haveAtLeastOneMethod() {
|
|
44
|
+
return {
|
|
45
|
+
description: 'have at least one method',
|
|
46
|
+
test: (c) => c.methodNames.length > 0,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export function haveNoMembers() {
|
|
50
|
+
return {
|
|
51
|
+
description: 'have no members',
|
|
52
|
+
test: (c) => c.memberNames.length === 0,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function extendName(superName) {
|
|
56
|
+
return {
|
|
57
|
+
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
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/predicates/class.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nielspeter/eess-mermaid",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Architecture testing for Mermaid class diagrams — the Mermaid dialect of the eess family (formerly mermaidunit)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"import": "./dist/index.js"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"bin": {
|
|
13
|
+
"eess-mermaid": "./dist/cli/bin.js"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=24.0.0"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/nielspeter/eess.git",
|
|
26
|
+
"directory": "packages/mermaid"
|
|
27
|
+
},
|
|
28
|
+
"author": "Niels Peter",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"scripts": {
|
|
31
|
+
"prepublishOnly": "npm run build",
|
|
32
|
+
"langium:gen": "langium generate --file langium-config.json",
|
|
33
|
+
"build": "npm run langium:gen && tsc -p tsconfig.build.json && chmod +x dist/cli/bin.js",
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"test:watch": "vitest",
|
|
36
|
+
"typecheck": "tsc --noEmit"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"mermaid",
|
|
40
|
+
"architecture",
|
|
41
|
+
"testing",
|
|
42
|
+
"diagram",
|
|
43
|
+
"eess"
|
|
44
|
+
],
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@nielspeter/eess": "^0.1.0",
|
|
47
|
+
"jiti": "^2.7.0",
|
|
48
|
+
"langium": "^4.2.3"
|
|
49
|
+
}
|
|
50
|
+
}
|