@milehimikey/em 1.6.1 → 1.7.1
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/.claude/skills/event-modeling/SKILL.md +94 -49
- package/.claude/skills/event-modeling/reference/conform.md +30 -8
- package/.claude/skills/event-modeling/reference/em-dsl.md +194 -73
- package/.claude/skills/event-modeling/reference/extract.md +14 -11
- package/.claude/skills/event-modeling/reference/implement.md +172 -0
- package/.claude/skills/event-modeling/reference/methodology.md +40 -33
- package/.claude/skills/event-modeling/templates/conformance-report.md +15 -9
- package/.claude/skills/event-modeling/templates/model-readme.md +7 -7
- package/.claude/skills/event-modeling/templates/slice.md +73 -7
- package/.claude/skills/event-modeling/templates/state.md +7 -6
- package/README.md +1 -0
- package/dist/catalog/build.d.ts +5 -0
- package/dist/catalog/build.js +1 -3
- package/dist/catalog/build.js.map +1 -1
- package/dist/catalog/classify.d.ts +7 -8
- package/dist/catalog/classify.js +7 -8
- package/dist/catalog/classify.js.map +1 -1
- package/dist/catalog/docJoin.d.ts +39 -0
- package/dist/catalog/docJoin.js +86 -0
- package/dist/catalog/docJoin.js.map +1 -0
- package/dist/catalog/driftSignal.d.ts +16 -0
- package/dist/catalog/driftSignal.js +24 -0
- package/dist/catalog/driftSignal.js.map +1 -0
- package/dist/catalog/frontmatterCoherenceValidate.d.ts +8 -0
- package/dist/catalog/frontmatterCoherenceValidate.js +52 -0
- package/dist/catalog/frontmatterCoherenceValidate.js.map +1 -0
- package/dist/catalog/lineageValidate.d.ts +9 -0
- package/dist/catalog/lineageValidate.js +161 -0
- package/dist/catalog/lineageValidate.js.map +1 -0
- package/dist/catalog/readSliceDoc.d.ts +2 -0
- package/dist/catalog/readSliceDoc.js +21 -0
- package/dist/catalog/readSliceDoc.js.map +1 -0
- package/dist/catalog/sliceDoc.d.ts +94 -3
- package/dist/catalog/sliceDoc.js +157 -7
- package/dist/catalog/sliceDoc.js.map +1 -1
- package/dist/catalog/sliceReadyValidate.d.ts +11 -0
- package/dist/catalog/sliceReadyValidate.js +85 -0
- package/dist/catalog/sliceReadyValidate.js.map +1 -0
- package/dist/cli/diff-inputs.d.ts +20 -0
- package/dist/cli/diff-inputs.js +75 -18
- package/dist/cli/diff-inputs.js.map +1 -1
- package/dist/cli/ledgerCheck.d.ts +38 -0
- package/dist/cli/ledgerCheck.js +116 -0
- package/dist/cli/ledgerCheck.js.map +1 -0
- package/dist/cli/skillCheck.d.ts +18 -0
- package/dist/cli/skillCheck.js +63 -0
- package/dist/cli/skillCheck.js.map +1 -0
- package/dist/cli/skillSync.d.ts +22 -0
- package/dist/cli/skillSync.js +69 -0
- package/dist/cli/skillSync.js.map +1 -0
- package/dist/cli/skillVersionCheck.d.ts +32 -0
- package/dist/cli/skillVersionCheck.js +145 -0
- package/dist/cli/skillVersionCheck.js.map +1 -0
- package/dist/cli.d.ts +3 -1
- package/dist/cli.js +203 -32
- package/dist/cli.js.map +1 -1
- package/dist/emit/diffJson.d.ts +1 -1
- package/dist/emit/diffJson.js +18 -14
- package/dist/emit/diffJson.js.map +1 -1
- package/dist/emit/dot.js +46 -5
- package/dist/emit/dot.js.map +1 -1
- package/dist/emit/json.d.ts +10 -25
- package/dist/emit/json.js +70 -103
- package/dist/emit/json.js.map +1 -1
- package/dist/emit/ledgerJson.d.ts +5 -0
- package/dist/emit/ledgerJson.js +25 -0
- package/dist/emit/ledgerJson.js.map +1 -0
- package/dist/emit/skillCheckJson.d.ts +5 -0
- package/dist/emit/skillCheckJson.js +32 -0
- package/dist/emit/skillCheckJson.js.map +1 -0
- package/dist/model/diff.d.ts +44 -1
- package/dist/model/diff.js +51 -9
- package/dist/model/diff.js.map +1 -1
- package/dist/model/edges.js +17 -17
- package/dist/model/edges.js.map +1 -1
- package/dist/model/model.d.ts +1 -1
- package/dist/model/refs.d.ts +23 -0
- package/dist/model/refs.js +75 -0
- package/dist/model/refs.js.map +1 -0
- package/dist/model/rules.d.ts +253 -0
- package/dist/model/rules.js +254 -0
- package/dist/model/rules.js.map +1 -0
- package/dist/model/validate.d.ts +23 -1
- package/dist/model/validate.js +207 -69
- package/dist/model/validate.js.map +1 -1
- package/dist/parser/ast.d.ts +3 -2
- package/dist/parser/lexer.d.ts +17 -2
- package/dist/parser/lexer.js +119 -13
- package/dist/parser/lexer.js.map +1 -1
- package/dist/parser/parser.js +75 -34
- package/dist/parser/parser.js.map +1 -1
- package/dist/pipeline.d.ts +9 -0
- package/dist/pipeline.js +4 -2
- package/dist/pipeline.js.map +1 -1
- package/dist/render/sliceDiagram.js +33 -35
- package/dist/render/sliceDiagram.js.map +1 -1
- package/dist/render/sliceStatus.js +1 -1
- package/dist/render/sliceStatus.js.map +1 -1
- package/dist/util/isMainModule.d.ts +14 -0
- package/dist/util/isMainModule.js +33 -0
- package/dist/util/isMainModule.js.map +1 -0
- package/dist/util/walkDir.d.ts +4 -0
- package/dist/util/walkDir.js +28 -0
- package/dist/util/walkDir.js.map +1 -0
- package/package.json +5 -2
package/dist/parser/lexer.d.ts
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Index of `ch`'s matching closing `"`, scanning from just after the opening `"`
|
|
2
|
+
* at `openIdx`, honouring `\"`/`\\` escapes. Returns -1 if unterminated. */
|
|
3
|
+
export declare function matchQuote(s: string, openIdx: number): number;
|
|
4
|
+
/** First unquoted occurrence of `ch` in `s`, or -1. */
|
|
5
|
+
export declare function indexOfUnquoted(s: string, ch: string): number;
|
|
6
|
+
/** Last unquoted occurrence of `ch` in `s`, or -1. */
|
|
7
|
+
export declare function lastIndexOfUnquoted(s: string, ch: string): number;
|
|
8
|
+
/** Decode a quoted string's captured inner text: `\"` -> `"`, `\\` -> `\`. */
|
|
9
|
+
export declare function decodeQuoted(s: string): string;
|
|
10
|
+
/** True if `s` contains a `"` whose string never closes (accounting for escapes). */
|
|
11
|
+
export declare function hasUnterminatedQuote(s: string): boolean;
|
|
12
|
+
/** Remove a trailing `# comment`, ignoring `#` inside a grammar-anchored `"..."`
|
|
13
|
+
* span (see `isQuoteOpener`) — a stray, unopened bare `"` doesn't hide a `#`
|
|
14
|
+
* that follows it. */
|
|
2
15
|
export declare function stripComment(line: string): string;
|
|
3
|
-
/** Strip a single pair of surrounding double quotes, if present
|
|
16
|
+
/** Strip a single pair of surrounding double quotes, if present, decoding any
|
|
17
|
+
* `\"`/`\\` escapes inside. Text that merely starts with `"` but whose string
|
|
18
|
+
* never actually closes at the end of `s` is left untouched, unquoted. */
|
|
4
19
|
export declare function unquote(s: string): string;
|
|
5
20
|
/** Split a comma-separated list, honouring quotes, returning trimmed unquoted items. */
|
|
6
21
|
export declare function splitQuotedList(s: string): string[];
|
package/dist/parser/lexer.js
CHANGED
|
@@ -1,22 +1,127 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
// Small lexing helpers shared by the line-oriented parser.
|
|
3
|
-
|
|
3
|
+
//
|
|
4
|
+
// All quote-awareness below shares one escape convention: inside a double-quoted
|
|
5
|
+
// string, `\"` is a literal quote (doesn't end the string) and `\\` is a literal
|
|
6
|
+
// backslash — no other `\x` sequence is special, so e.g. `C:\path` round-trips
|
|
7
|
+
// untouched. Everything else between an opening and closing `"` — including `{`,
|
|
8
|
+
// `}`, and `#` — is inert literal content, never re-interpreted as syntax.
|
|
9
|
+
/** Advance past an escape (`\` + next char) starting at `i`, if one starts there.
|
|
10
|
+
* Returns the index to resume scanning from, or `i` if there's no escape here. A
|
|
11
|
+
* trailing lone `\` (nothing left to escape) still advances to end-of-string —
|
|
12
|
+
* never returns `i` unchanged for a `\`, or callers scanning in a `while (i <
|
|
13
|
+
* s.length)` loop spin forever on it. */
|
|
14
|
+
function skipEscape(s, i) {
|
|
15
|
+
return s[i] === "\\" ? Math.min(i + 2, s.length) : i;
|
|
16
|
+
}
|
|
17
|
+
/** Index of `ch`'s matching closing `"`, scanning from just after the opening `"`
|
|
18
|
+
* at `openIdx`, honouring `\"`/`\\` escapes. Returns -1 if unterminated. */
|
|
19
|
+
export function matchQuote(s, openIdx) {
|
|
20
|
+
for (let i = openIdx + 1; i < s.length;) {
|
|
21
|
+
if (s[i] === "\\") {
|
|
22
|
+
i = skipEscape(s, i);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (s[i] === '"')
|
|
26
|
+
return i;
|
|
27
|
+
i++;
|
|
28
|
+
}
|
|
29
|
+
return -1;
|
|
30
|
+
}
|
|
31
|
+
/** Keywords after which a `"` is grammar-legitimate as the start of a quoted
|
|
32
|
+
* string: a declaration's name (`model "Name"`, `slice "Name"`, `type "Name"`)
|
|
33
|
+
* or a clause's value (`note`/`issue`/`divergence`/`from`/`source "..."`). */
|
|
34
|
+
const QUOTE_OPENER_KEYWORDS = /(?:^|\s)(?:model|slice|type|note|issue|divergence|from|source)$/i;
|
|
35
|
+
/** True if the `"` at `s[i]` is grammar-legitimate as the START of a quoted
|
|
36
|
+
* string — the very first character of `s`, immediately after one of
|
|
37
|
+
* `QUOTE_OPENER_KEYWORDS` (`keyword "value"`), or immediately after a
|
|
38
|
+
* list-item comma (`from "A", "B"`). Any other `"` — an inch mark, a scare
|
|
39
|
+
* quote inside otherwise-unquoted free text — is just a character, never a
|
|
40
|
+
* quote-opener: free-text element names carry no quoting convention of their
|
|
41
|
+
* own, and treating every bare `"` as an opener let two *independently* stray
|
|
42
|
+
* quotes accidentally pair with *each other*, silently swallowing a real
|
|
43
|
+
* field block or comment between them (MIL-122 follow-up). A quote that fails
|
|
44
|
+
* this check can still validly serve as some other span's *closing* quote —
|
|
45
|
+
* only opens are anchored, `matchQuote` finds the close unconditionally. */
|
|
46
|
+
function isQuoteOpener(s, i) {
|
|
47
|
+
if (s[i] !== '"')
|
|
48
|
+
return false;
|
|
49
|
+
if (i === 0)
|
|
50
|
+
return true;
|
|
51
|
+
const before = s.slice(0, i).replace(/\s+$/, "");
|
|
52
|
+
return before.endsWith(",") || QUOTE_OPENER_KEYWORDS.test(before);
|
|
53
|
+
}
|
|
54
|
+
/** Index of the first (or last) unquoted occurrence of the single character `ch` in
|
|
55
|
+
* `s` — one not inside a grammar-anchored `"..."` span (see `isQuoteOpener`).
|
|
56
|
+
* A span is skipped whole once opened (escapes honoured throughout), so a
|
|
57
|
+
* literal `ch` written inside it is invisible to this scan. Returns -1 if `ch`
|
|
58
|
+
* never occurs outside such a span. */
|
|
59
|
+
function scanUnquoted(s, ch, last) {
|
|
60
|
+
let result = -1;
|
|
61
|
+
for (let i = 0; i < s.length; i++) {
|
|
62
|
+
if (isQuoteOpener(s, i)) {
|
|
63
|
+
const close = matchQuote(s, i);
|
|
64
|
+
if (close >= 0)
|
|
65
|
+
i = close;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (s[i] === ch) {
|
|
69
|
+
if (!last)
|
|
70
|
+
return i;
|
|
71
|
+
result = i;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
/** First unquoted occurrence of `ch` in `s`, or -1. */
|
|
77
|
+
export function indexOfUnquoted(s, ch) {
|
|
78
|
+
return scanUnquoted(s, ch, false);
|
|
79
|
+
}
|
|
80
|
+
/** Last unquoted occurrence of `ch` in `s`, or -1. */
|
|
81
|
+
export function lastIndexOfUnquoted(s, ch) {
|
|
82
|
+
return scanUnquoted(s, ch, true);
|
|
83
|
+
}
|
|
84
|
+
/** Decode a quoted string's captured inner text: `\"` -> `"`, `\\` -> `\`. */
|
|
85
|
+
export function decodeQuoted(s) {
|
|
86
|
+
return s.replace(/\\(["\\])/g, "$1");
|
|
87
|
+
}
|
|
88
|
+
/** True if `s` contains a `"` whose string never closes (accounting for escapes). */
|
|
89
|
+
export function hasUnterminatedQuote(s) {
|
|
90
|
+
for (let i = 0; i < s.length; i++) {
|
|
91
|
+
if (s[i] === '"') {
|
|
92
|
+
const close = matchQuote(s, i);
|
|
93
|
+
if (close < 0)
|
|
94
|
+
return true;
|
|
95
|
+
i = close;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
/** Remove a trailing `# comment`, ignoring `#` inside a grammar-anchored `"..."`
|
|
101
|
+
* span (see `isQuoteOpener`) — a stray, unopened bare `"` doesn't hide a `#`
|
|
102
|
+
* that follows it. */
|
|
4
103
|
export function stripComment(line) {
|
|
5
|
-
let inQuote = false;
|
|
6
104
|
for (let i = 0; i < line.length; i++) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
105
|
+
if (isQuoteOpener(line, i)) {
|
|
106
|
+
const close = matchQuote(line, i);
|
|
107
|
+
if (close >= 0)
|
|
108
|
+
i = close;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (line[i] === "#")
|
|
11
112
|
return line.slice(0, i);
|
|
12
113
|
}
|
|
13
114
|
return line;
|
|
14
115
|
}
|
|
15
|
-
/** Strip a single pair of surrounding double quotes, if present
|
|
116
|
+
/** Strip a single pair of surrounding double quotes, if present, decoding any
|
|
117
|
+
* `\"`/`\\` escapes inside. Text that merely starts with `"` but whose string
|
|
118
|
+
* never actually closes at the end of `s` is left untouched, unquoted. */
|
|
16
119
|
export function unquote(s) {
|
|
17
120
|
const t = s.trim();
|
|
18
|
-
if (t.length >= 2 && t.startsWith('"')
|
|
19
|
-
|
|
121
|
+
if (t.length >= 2 && t.startsWith('"')) {
|
|
122
|
+
const close = matchQuote(t, 0);
|
|
123
|
+
if (close === t.length - 1)
|
|
124
|
+
return decodeQuoted(t.slice(1, -1));
|
|
20
125
|
}
|
|
21
126
|
return t;
|
|
22
127
|
}
|
|
@@ -24,14 +129,15 @@ export function unquote(s) {
|
|
|
24
129
|
export function splitQuotedList(s) {
|
|
25
130
|
const items = [];
|
|
26
131
|
let cur = "";
|
|
27
|
-
let inQuote = false;
|
|
28
132
|
for (let i = 0; i < s.length; i++) {
|
|
29
133
|
const c = s[i];
|
|
30
134
|
if (c === '"') {
|
|
31
|
-
|
|
32
|
-
|
|
135
|
+
const close = matchQuote(s, i);
|
|
136
|
+
const end = close >= 0 ? close : s.length - 1;
|
|
137
|
+
cur += s.slice(i, end + 1);
|
|
138
|
+
i = end;
|
|
33
139
|
}
|
|
34
|
-
else if (c === ","
|
|
140
|
+
else if (c === ",") {
|
|
35
141
|
items.push(unquote(cur));
|
|
36
142
|
cur = "";
|
|
37
143
|
}
|
package/dist/parser/lexer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/parser/lexer.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,2DAA2D;
|
|
1
|
+
{"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/parser/lexer.ts"],"names":[],"mappings":"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"}
|
package/dist/parser/parser.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// arrow <From Element> -> <To Element>
|
|
17
17
|
// type "Name" { field: Type, ... }
|
|
18
18
|
import { AUTOMATION_KINDS, } from "./ast.js";
|
|
19
|
-
import { splitQuotedList, stripComment, unquote } from "./lexer.js";
|
|
19
|
+
import { decodeQuoted, hasUnterminatedQuote, indexOfUnquoted, lastIndexOfUnquoted, matchQuote, splitQuotedList, stripComment, unquote, } from "./lexer.js";
|
|
20
20
|
export class ParseError extends Error {
|
|
21
21
|
line;
|
|
22
22
|
constructor(message, line) {
|
|
@@ -107,14 +107,16 @@ export function parse(source) {
|
|
|
107
107
|
if (!ELEMENT_KEYWORDS.has(keyword)) {
|
|
108
108
|
throw new ParseError(`'${keyword}' is not valid inside a slice (expected ui/command/view/event/automation/processor/saga/translation or '}')`, lineNo);
|
|
109
109
|
}
|
|
110
|
-
// An element may open a `{ … }` field block (inline or multi-line).
|
|
111
|
-
|
|
110
|
+
// An element may open a `{ … }` field block (inline or multi-line). The brace
|
|
111
|
+
// scan is quote-aware: a literal `{`/`}` inside a quoted clause (e.g.
|
|
112
|
+
// `issue "PUT /widgets/{id}"`) is string content, never a block opener (MIL-122).
|
|
113
|
+
const braceAt = indexOfUnquoted(remainder, "{");
|
|
112
114
|
if (braceAt >= 0) {
|
|
113
115
|
const el = parseElement(keyword, remainder.slice(0, braceAt).trim(), lineNo);
|
|
114
116
|
el.fields = [];
|
|
115
117
|
currentSlice.elements.push(el);
|
|
116
118
|
const after = remainder.slice(braceAt + 1);
|
|
117
|
-
const closeAt = after
|
|
119
|
+
const closeAt = indexOfUnquoted(after, "}");
|
|
118
120
|
const inner = closeAt >= 0 ? after.slice(0, closeAt) : after;
|
|
119
121
|
el.fields.push(...parseInlineFields(inner));
|
|
120
122
|
if (closeAt < 0) {
|
|
@@ -150,7 +152,9 @@ export function parse(source) {
|
|
|
150
152
|
pushUnique(model.contexts, unquote(remainder));
|
|
151
153
|
break;
|
|
152
154
|
case "slice": {
|
|
153
|
-
|
|
155
|
+
// Quote-aware so a literal `{` inside a quoted `source "url"` (or the slice
|
|
156
|
+
// name itself) is never mistaken for the block opener (MIL-122).
|
|
157
|
+
const open = lastIndexOfUnquoted(remainder, "{");
|
|
154
158
|
if (open < 0)
|
|
155
159
|
throw new ParseError("slice must open a block with '{'", lineNo);
|
|
156
160
|
let header = remainder.slice(0, open).trim();
|
|
@@ -159,10 +163,10 @@ export function parse(source) {
|
|
|
159
163
|
// to the name): a link to the ticket/conversation this slice traces
|
|
160
164
|
// back to, so the intake-loop audit chain is machine-traversable
|
|
161
165
|
// through `em export` instead of living only in prose (MIL-69).
|
|
162
|
-
const
|
|
163
|
-
if (
|
|
164
|
-
node.source =
|
|
165
|
-
header =
|
|
166
|
+
const sourceClause = extractQuotedClause(header, "source", lineNo);
|
|
167
|
+
if (sourceClause) {
|
|
168
|
+
node.source = sourceClause.value;
|
|
169
|
+
header = sourceClause.rest;
|
|
166
170
|
}
|
|
167
171
|
node.name = unquote(header);
|
|
168
172
|
if (!node.name)
|
|
@@ -174,7 +178,7 @@ export function parse(source) {
|
|
|
174
178
|
model.arrows.push(parseArrow(remainder, lineNo));
|
|
175
179
|
break;
|
|
176
180
|
case "type": {
|
|
177
|
-
const braceAt = remainder
|
|
181
|
+
const braceAt = indexOfUnquoted(remainder, "{");
|
|
178
182
|
if (braceAt < 0)
|
|
179
183
|
throw new ParseError("type must open a block with '{'", lineNo);
|
|
180
184
|
const name = unquote(remainder.slice(0, braceAt).trim());
|
|
@@ -182,7 +186,7 @@ export function parse(source) {
|
|
|
182
186
|
throw new ParseError("type requires a name", lineNo);
|
|
183
187
|
const decl = { name, fields: [], line: lineNo };
|
|
184
188
|
const after = remainder.slice(braceAt + 1);
|
|
185
|
-
const closeAt = after
|
|
189
|
+
const closeAt = indexOfUnquoted(after, "}");
|
|
186
190
|
const inner = closeAt >= 0 ? after.slice(0, closeAt) : after;
|
|
187
191
|
decl.fields.push(...parseInlineFields(inner));
|
|
188
192
|
if (closeAt < 0) {
|
|
@@ -222,6 +226,29 @@ function parseElement(kind, raw, line) {
|
|
|
222
226
|
throw new ParseError(`${kind} requires a name`, line);
|
|
223
227
|
return node;
|
|
224
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* Pulls a `keyword "value"` clause out of `rest`, case-insensitively, honouring
|
|
231
|
+
* `\"`/`\\` escapes inside the string (decoded in the returned `value`) and a
|
|
232
|
+
* literal `{`/`}`/`#` anywhere inside it — string content is never re-interpreted
|
|
233
|
+
* as block or comment syntax (MIL-122). Returns `null` if `keyword` isn't
|
|
234
|
+
* immediately followed by an opening quote (clause absent; same as a failed regex
|
|
235
|
+
* match, e.g. `keyword` appearing only as part of the element's free-text name).
|
|
236
|
+
* Throws if the string never finds its closing quote, naming the real cause
|
|
237
|
+
* instead of surfacing as a confusing downstream "unrecognized trailing text".
|
|
238
|
+
*/
|
|
239
|
+
function extractQuotedClause(rest, keyword, line) {
|
|
240
|
+
const kwMatch = rest.match(new RegExp(`(?:^|\\s)${keyword}\\s+(?=")`, "i"));
|
|
241
|
+
if (!kwMatch || kwMatch.index === undefined)
|
|
242
|
+
return null;
|
|
243
|
+
const openIdx = kwMatch.index + kwMatch[0].length;
|
|
244
|
+
const closeIdx = matchQuote(rest, openIdx);
|
|
245
|
+
if (closeIdx < 0)
|
|
246
|
+
throw new ParseError(`unterminated string literal in '${keyword}' clause`, line);
|
|
247
|
+
return {
|
|
248
|
+
value: decodeQuoted(rest.slice(openIdx + 1, closeIdx)),
|
|
249
|
+
rest: (rest.slice(0, kwMatch.index) + rest.slice(closeIdx + 1)).trim(),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
225
252
|
/**
|
|
226
253
|
* Pulls `note`/`issue`/`divergence`/`from`/`public`/`@Tag`/`again` clauses out
|
|
227
254
|
* of `raw`, applying each to `node` and returning whatever text is left (the
|
|
@@ -239,27 +266,27 @@ function extractClauses(node, raw, line) {
|
|
|
239
266
|
let rest = raw;
|
|
240
267
|
// `note "path.md"` clause (valid on any element). Pulled off first because
|
|
241
268
|
// the `from` clause below greedily consumes to end-of-line.
|
|
242
|
-
const
|
|
243
|
-
if (
|
|
244
|
-
node.note =
|
|
245
|
-
rest =
|
|
269
|
+
const noteClause = extractQuotedClause(rest, "note", line);
|
|
270
|
+
if (noteClause) {
|
|
271
|
+
node.note = noteClause.value;
|
|
272
|
+
rest = noteClause.rest;
|
|
246
273
|
}
|
|
247
274
|
// `issue "text"` clause (valid on any element): an open question flagged red on
|
|
248
275
|
// the diagram, distinct from `note`'s file link. Extracted the same way, before
|
|
249
276
|
// `from`, for the same reason.
|
|
250
|
-
const
|
|
251
|
-
if (
|
|
252
|
-
node.issue =
|
|
253
|
-
rest =
|
|
277
|
+
const issueClause = extractQuotedClause(rest, "issue", line);
|
|
278
|
+
if (issueClause) {
|
|
279
|
+
node.issue = issueClause.value;
|
|
280
|
+
rest = issueClause.rest;
|
|
254
281
|
}
|
|
255
282
|
// `divergence "text"` clause (valid on any element): a reasoned, ratified
|
|
256
283
|
// deviation between this element and its implementation — the *resolved*
|
|
257
284
|
// sibling of `issue`'s open question. Extracted the same way, before
|
|
258
285
|
// `from`, for the same reason.
|
|
259
|
-
const
|
|
260
|
-
if (
|
|
261
|
-
node.divergence =
|
|
262
|
-
rest =
|
|
286
|
+
const divergenceClause = extractQuotedClause(rest, "divergence", line);
|
|
287
|
+
if (divergenceClause) {
|
|
288
|
+
node.divergence = divergenceClause.value;
|
|
289
|
+
rest = divergenceClause.rest;
|
|
263
290
|
}
|
|
264
291
|
// `from "A", "B"` clause (views and reactions). The keyword is case-sensitive
|
|
265
292
|
// and its operand must open with a quote, so a capitalized `From` — or a bare
|
|
@@ -270,28 +297,42 @@ function extractClauses(node, raw, line) {
|
|
|
270
297
|
if (fromMatch && fromMatch.index !== undefined) {
|
|
271
298
|
if (node.kind !== "view" && !AUTOMATION_KINDS.has(node.kind))
|
|
272
299
|
throw new ParseError("`from` is only valid on view or a reaction (automation/processor/saga/translation)", line);
|
|
300
|
+
if (hasUnterminatedQuote(fromMatch[1]))
|
|
301
|
+
throw new ParseError("unterminated string literal in 'from' clause", line);
|
|
273
302
|
node.from = splitQuotedList(fromMatch[1]);
|
|
274
303
|
rest = rest.slice(0, fromMatch.index).trim();
|
|
275
304
|
}
|
|
276
|
-
// `public` clause (event
|
|
277
|
-
// integration surface
|
|
278
|
-
//
|
|
279
|
-
//
|
|
280
|
-
//
|
|
281
|
-
//
|
|
305
|
+
// `public` clause (event or view): marks this element as part of the published
|
|
306
|
+
// integration surface — an event as an AsyncAPI-style contract, a view as the response
|
|
307
|
+
// shape of a public read API/webhook another team or service consumes — as opposed to an
|
|
308
|
+
// internal-only fact or read model. Checked here, before `@Tag`/`again`, so `public` may be
|
|
309
|
+
// written either as the true last token, immediately before a trailing `@Tag` (event), or
|
|
310
|
+
// immediately before a trailing `again` (view) — either way the later token ends up the
|
|
311
|
+
// trailing-most once `public` is excised, which is what those blocks below require.
|
|
282
312
|
// Anywhere else in the line, a bare `public` is left alone and folds into the free-
|
|
283
313
|
// text name, same as any other unrecognized word (matching `again`'s discipline).
|
|
284
314
|
// Case-sensitive, like the top-level keyword table, so a title-cased `Public`
|
|
285
315
|
// in a name (`event Account Made Public`) is never taken as the marker.
|
|
286
|
-
const publicMatch = rest.match(/(?:^|\s)public(?=\s+@\S
|
|
316
|
+
const publicMatch = rest.match(/(?:^|\s)public(?=\s+again\s*$|\s+@\S.*$|\s*$)/);
|
|
287
317
|
if (publicMatch && publicMatch.index !== undefined) {
|
|
288
|
-
if (node.kind !== "event")
|
|
289
|
-
throw new ParseError("`public` is only valid on event — only recorded facts
|
|
318
|
+
if (node.kind !== "event" && node.kind !== "view")
|
|
319
|
+
throw new ParseError("`public` is only valid on event or view — only recorded facts and read models are " +
|
|
320
|
+
"promoted to the integration surface", line);
|
|
290
321
|
node.public = true;
|
|
291
322
|
rest = (rest.slice(0, publicMatch.index) + rest.slice(publicMatch.index + publicMatch[0].length)).trim();
|
|
292
323
|
}
|
|
293
|
-
// Trailing `@Tag` (persona for ui, context for event).
|
|
294
|
-
|
|
324
|
+
// Trailing `@Tag` (persona for ui, context for event). Captures everything from `@` to
|
|
325
|
+
// end of line, not just the first word, so a multi-word persona/context (`@Pax8 Admin`,
|
|
326
|
+
// declared as `persona Pax8 Admin` — declarations are already free multi-word text, see
|
|
327
|
+
// the top-level `persona`/`context` handling) resolves correctly instead of silently
|
|
328
|
+
// failing to match. A failed match here doesn't error — the `@`-prefixed text just folds
|
|
329
|
+
// into the free-text name — so unquoted multi-word tags used to fail *silently*: the
|
|
330
|
+
// element's `persona`/`context` stayed unset, and normalization's fallback (first-declared
|
|
331
|
+
// persona/context) accepted it without complaint. Safe to capture greedily to end of line
|
|
332
|
+
// because every clause that can trail an element (`note`/`issue`/`divergence`/`from`/
|
|
333
|
+
// `public`) is already stripped from `rest` by this point; `again` is view-only and never
|
|
334
|
+
// co-occurs with a tag (ui/event only).
|
|
335
|
+
const tagMatch = rest.match(/(?:^|\s)@(\S.*?)\s*$/);
|
|
295
336
|
if (tagMatch && tagMatch.index !== undefined) {
|
|
296
337
|
const tag = tagMatch[1];
|
|
297
338
|
if (node.kind === "ui")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/pipeline.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { NormalizedModel } from "./model/model.js";
|
|
2
2
|
import { Grid, LayoutOptions } from "./layout/grid.js";
|
|
3
3
|
import { Diagnostic } from "./model/validate.js";
|
|
4
|
+
import { RefsResult } from "./model/refs.js";
|
|
4
5
|
export type CompileOptions = LayoutOptions;
|
|
5
6
|
export interface CompileResult {
|
|
6
7
|
model: NormalizedModel;
|
|
7
8
|
grid: Grid;
|
|
9
|
+
/** Export-stable identity (slice keys, element/type refs) — computed exactly once per
|
|
10
|
+
* compile (MIL-91) so `em export`/`em diff`/`em catalog` reuse it instead of recomputing,
|
|
11
|
+
* which would double-emit `computeRefs()`'s own ref-collision diagnostics. */
|
|
12
|
+
refs: RefsResult;
|
|
13
|
+
/** validate()'s diagnostics plus refs' ref-collision warnings, combined — every command
|
|
14
|
+
* that only ever prints `diagnostics` (validate/render/watch/glossary) now sees
|
|
15
|
+
* collision warnings too, previously visible only to commands that called
|
|
16
|
+
* computeRefs() themselves. */
|
|
8
17
|
diagnostics: Diagnostic[];
|
|
9
18
|
dot: string;
|
|
10
19
|
}
|
package/dist/pipeline.js
CHANGED
|
@@ -4,13 +4,15 @@ import { parse } from "./parser/parser.js";
|
|
|
4
4
|
import { normalize } from "./model/model.js";
|
|
5
5
|
import { layout } from "./layout/grid.js";
|
|
6
6
|
import { validate } from "./model/validate.js";
|
|
7
|
+
import { computeRefs } from "./model/refs.js";
|
|
7
8
|
import { emitDot } from "./emit/dot.js";
|
|
8
9
|
export function compile(source, opts = {}) {
|
|
9
10
|
const ast = parse(source);
|
|
10
11
|
const model = normalize(ast);
|
|
11
12
|
const grid = layout(model, opts);
|
|
12
|
-
const
|
|
13
|
+
const refs = computeRefs(model);
|
|
14
|
+
const diagnostics = [...validate(model, grid, refs), ...refs.diagnostics];
|
|
13
15
|
const dot = emitDot(model, grid);
|
|
14
|
-
return { model, grid, diagnostics, dot };
|
|
16
|
+
return { model, grid, refs, diagnostics, dot };
|
|
15
17
|
}
|
|
16
18
|
//# sourceMappingURL=pipeline.js.map
|
package/dist/pipeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,kFAAkF;AAElF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAuB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAc,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,kFAAkF;AAElF,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAuB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAc,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAc,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAmBxC,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,OAAuB,EAAE;IAC/D,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
// The key trick: every piece of "immediate context" a slice needs to draw its
|
|
9
9
|
// own shape is already one hop away in the compiled model — a view's upstream
|
|
10
10
|
// event(s) resolve via `from` (resolveFromSource, shared with semanticEdges),
|
|
11
|
-
// and an automation/translation's watched view
|
|
12
|
-
// the same
|
|
11
|
+
// and an automation/translation's watched view resolves via the reaction's own
|
|
12
|
+
// `from` the same way (the reaction, its command, and that command's event all
|
|
13
|
+
// share this slice already, so none of *those* need to be pulled from
|
|
14
|
+
// elsewhere). So this builds a tiny *synthetic* NormalizedModel — reusing
|
|
13
15
|
// the real, already-normalized Element objects (same ids, same fields, same
|
|
14
16
|
// notes), shallow-cloned only to reassign which of a handful of new columns
|
|
15
17
|
// they land in — and runs it through the exact same layout()/emitDot() the
|
|
@@ -18,11 +20,10 @@
|
|
|
18
20
|
// is populated, the arrows get drawn by the existing inference with zero new
|
|
19
21
|
// edge-drawing code.
|
|
20
22
|
//
|
|
21
|
-
// This never chases more than one hop away (
|
|
22
|
-
// State
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
// a naive crop or a naive "just extract this slice and recompile" both could.
|
|
23
|
+
// This never chases more than one hop away (a view's own `from` sources, for
|
|
24
|
+
// both State View and Automation/Translation), so a slice diagram can never
|
|
25
|
+
// balloon into showing most of the model, the way a naive crop or a naive
|
|
26
|
+
// "just extract this slice and recompile" both could.
|
|
26
27
|
import { AUTOMATION_KINDS } from "../parser/ast.js";
|
|
27
28
|
import { normalizeName } from "../model/model.js";
|
|
28
29
|
import { resolveFromSource } from "../model/edges.js";
|
|
@@ -54,20 +55,13 @@ function collectColumns(model, sliceIndex, pattern) {
|
|
|
54
55
|
return [{ sourceSliceIndex: sliceIndex, elements: model.slices[sliceIndex].elements }];
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
|
-
/** State Change: UI -> Command -> Event, all in this slice.
|
|
58
|
-
*
|
|
59
|
-
*
|
|
58
|
+
/** State Change: UI -> Command -> Event, all in this slice. A slice classifies as
|
|
59
|
+
* "state-change" only when it carries no automation-kind element at all (see
|
|
60
|
+
* classify.ts), so a command with no local `ui` here has nothing else to pull in —
|
|
61
|
+
* that's exactly `both-ends-of-a-flow/command-untriggered`'s case, not a shape this
|
|
62
|
+
* renderer can complete by reaching elsewhere. */
|
|
60
63
|
function columnsForStateChange(model, i) {
|
|
61
|
-
|
|
62
|
-
const hasUi = slice.elements.some((e) => e.kind === "ui");
|
|
63
|
-
const cols = [{ sourceSliceIndex: i, elements: slice.elements }];
|
|
64
|
-
if (!hasUi) {
|
|
65
|
-
const prev = model.slices[i - 1];
|
|
66
|
-
const trigger = prev?.elements.find((e) => AUTOMATION_KINDS.has(e.kind));
|
|
67
|
-
if (trigger)
|
|
68
|
-
cols.push({ sourceSliceIndex: i - 1, elements: [trigger] });
|
|
69
|
-
}
|
|
70
|
-
return cols;
|
|
64
|
+
return [{ sourceSliceIndex: i, elements: model.slices[i].elements }];
|
|
71
65
|
}
|
|
72
66
|
/** State View: Event(s) -> View -> UI. Each view's `from` names resolve to their
|
|
73
67
|
* real source Elements (same rule semanticEdges uses) — one column per distinct
|
|
@@ -87,26 +81,30 @@ function columnsForStateView(model, i) {
|
|
|
87
81
|
cols.push({ sourceSliceIndex: i, elements: slice.elements });
|
|
88
82
|
return cols;
|
|
89
83
|
}
|
|
90
|
-
/** Automation/Translation share one shape: [View ->]
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
84
|
+
/** Automation/Translation share one shape: [View ->] Reaction -> Command -> Event, all in
|
|
85
|
+
* this one slice — same as State Change's ui -> command -> event. The watched view (when
|
|
86
|
+
* internally triggered) resolves via the reaction's own `from` names to their real source
|
|
87
|
+
* Elements, exactly the rule columnsForStateView uses for a view's `from` — one column per
|
|
88
|
+
* distinct origin slice. An externally-triggered reaction carries no `from` at all, so
|
|
89
|
+
* there's nothing to pull. */
|
|
96
90
|
function columnsForReaction(model, i) {
|
|
97
91
|
const slice = model.slices[i];
|
|
98
|
-
const cols = [
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
92
|
+
const cols = [];
|
|
93
|
+
for (const auto of slice.elements.filter((e) => AUTOMATION_KINDS.has(e.kind))) {
|
|
94
|
+
for (const name of auto.from ?? []) {
|
|
95
|
+
const src = resolveFromSource(model, auto, name);
|
|
96
|
+
if (src)
|
|
97
|
+
cols.push({ sourceSliceIndex: src.sliceIndex, elements: [src] });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
cols.push({ sourceSliceIndex: i, elements: slice.elements });
|
|
103
101
|
return cols;
|
|
104
102
|
}
|
|
105
103
|
/** Merge columns sharing a source slice (two `from` names can resolve to the same
|
|
106
|
-
* origin slice), dedupe elements by id, then sort chronologically. `from
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
104
|
+
* origin slice), dedupe elements by id, then sort chronologically. `from` wiring
|
|
105
|
+
* only ever points backward (or to this same slice), so a plain ascending sort by
|
|
106
|
+
* real slice index is sufficient for correct left-to-right placement across every
|
|
107
|
+
* pattern — no pattern-specific ordering code needed. */
|
|
110
108
|
function mergeColumns(columns) {
|
|
111
109
|
const bySource = new Map();
|
|
112
110
|
for (const col of columns) {
|