@milehimikey/em 1.2.0 → 1.4.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/.claude/skills/event-modeling/SKILL.md +66 -16
- package/.claude/skills/event-modeling/reference/conform.md +228 -0
- package/.claude/skills/event-modeling/reference/em-dsl.md +22 -5
- package/.claude/skills/event-modeling/reference/extract.md +5 -4
- package/.claude/skills/event-modeling/reference/methodology.md +11 -3
- package/.claude/skills/event-modeling/templates/conformance-report.md +69 -0
- package/.claude/skills/event-modeling/templates/model-readme.md +6 -4
- package/.claude/skills/event-modeling/templates/slice.md +11 -2
- package/.claude/skills/event-modeling/templates/state.md +17 -7
- package/README.md +17 -3
- package/dist/cli/changelog-git.d.ts +53 -0
- package/dist/cli/changelog-git.js +112 -0
- package/dist/cli/changelog-git.js.map +1 -0
- package/dist/cli/diff-inputs.d.ts +44 -0
- package/dist/cli/diff-inputs.js +62 -0
- package/dist/cli/diff-inputs.js.map +1 -0
- package/dist/cli.js +231 -7
- package/dist/cli.js.map +1 -1
- package/dist/emit/changelog.d.ts +57 -0
- package/dist/emit/changelog.js +143 -0
- package/dist/emit/changelog.js.map +1 -0
- package/dist/emit/diffJson.d.ts +17 -0
- package/dist/emit/diffJson.js +74 -0
- package/dist/emit/diffJson.js.map +1 -0
- package/dist/emit/json.d.ts +29 -0
- package/dist/emit/json.js +121 -0
- package/dist/emit/json.js.map +1 -0
- package/dist/model/diff.d.ts +52 -0
- package/dist/model/diff.js +351 -0
- package/dist/model/diff.js.map +1 -0
- package/dist/model/model.d.ts +2 -0
- package/dist/model/model.js +1 -0
- package/dist/model/model.js.map +1 -1
- package/dist/model/validate.js +74 -0
- package/dist/model/validate.js.map +1 -1
- package/dist/parser/ast.d.ts +2 -0
- package/dist/parser/parser.js +8 -0
- package/dist/parser/parser.js.map +1 -1
- package/dist/render/drawNotes.d.ts +8 -2
- package/dist/render/drawNotes.js +106 -42
- package/dist/render/drawNotes.js.map +1 -1
- package/dist/render/render.js +5 -4
- package/dist/render/render.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { NormalizedModel } from "../model/model.js";
|
|
2
|
+
import { Diagnostic } from "../model/validate.js";
|
|
3
|
+
export declare const GENERATOR_NAME = "@milehimikey/em";
|
|
4
|
+
export declare const GENERATOR_VERSION: string;
|
|
5
|
+
export declare const SCHEMA_VERSION = "1.0";
|
|
6
|
+
export interface ExportResult {
|
|
7
|
+
/** Pretty-printed JSON, no trailing newline. */
|
|
8
|
+
text: string;
|
|
9
|
+
/** validate()'s diagnostics plus any ref-collision warnings raised while exporting. */
|
|
10
|
+
diagnostics: Diagnostic[];
|
|
11
|
+
}
|
|
12
|
+
export interface RefsResult {
|
|
13
|
+
/** Export key per slice, same order/index as `model.slices`. */
|
|
14
|
+
sliceKeys: string[];
|
|
15
|
+
/** Internal `Element.id` -> stable export `ref`. */
|
|
16
|
+
refById: Map<string, string>;
|
|
17
|
+
/** Ref-collision warnings raised while assigning keys/refs (duplicate names). */
|
|
18
|
+
diagnostics: Diagnostic[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Assign every slice its export key (`slug(name)`) and every element its
|
|
22
|
+
* export ref (`<sliceKey>/<kind>.<slug(name)>`), in document order, deduped
|
|
23
|
+
* with a `~2`, `~3`, … suffix on collision. Shared by `em export` (this
|
|
24
|
+
* module) and `em diff` (`src/model/diff.ts`), which both need the same
|
|
25
|
+
* edit-stable identity scheme to match elements/slices across models.
|
|
26
|
+
*/
|
|
27
|
+
export declare function computeRefs(model: NormalizedModel): RefsResult;
|
|
28
|
+
/** Build the `em export` document for an already-validated (error-free) model. */
|
|
29
|
+
export declare function buildExport(model: NormalizedModel, diagnostics: Diagnostic[], source: string, path: string): ExportResult;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Builds the `em export` JSON document: a versioned, deterministic snapshot of
|
|
3
|
+
// the normalized model with stable public refs (see design/export-schema.md
|
|
4
|
+
// under internal/engagements/tier1-intent-capture/ for the approved shape).
|
|
5
|
+
//
|
|
6
|
+
// Internal `Element.id` is document-order-deduped `slug(name)` — edit-unstable,
|
|
7
|
+
// and never exposed here. Export refs are computed separately, keyed off
|
|
8
|
+
// `<sliceKey>/<kind>.<slug(name)>`, so inserting or reordering slices never
|
|
9
|
+
// changes an existing element's public identity.
|
|
10
|
+
import { createHash } from "node:crypto";
|
|
11
|
+
import { readFileSync } from "node:fs";
|
|
12
|
+
import { dirname, join } from "node:path";
|
|
13
|
+
import { fileURLToPath } from "node:url";
|
|
14
|
+
import { resolveByName } from "../model/model.js";
|
|
15
|
+
import { dedupe, kebabSlug } from "../util/slug.js";
|
|
16
|
+
// Read once from package.json (two levels up from src/emit/ and dist/emit/
|
|
17
|
+
// alike) so `generator.version` can never drift from the released version.
|
|
18
|
+
// tsconfig targets NodeNext without resolveJsonModule, hence fs over import.
|
|
19
|
+
export const GENERATOR_NAME = "@milehimikey/em";
|
|
20
|
+
export const GENERATOR_VERSION = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), "..", "..", "package.json"), "utf8")).version;
|
|
21
|
+
export const SCHEMA_VERSION = "1.0";
|
|
22
|
+
/**
|
|
23
|
+
* Assign every slice its export key (`slug(name)`) and every element its
|
|
24
|
+
* export ref (`<sliceKey>/<kind>.<slug(name)>`), in document order, deduped
|
|
25
|
+
* with a `~2`, `~3`, … suffix on collision. Shared by `em export` (this
|
|
26
|
+
* module) and `em diff` (`src/model/diff.ts`), which both need the same
|
|
27
|
+
* edit-stable identity scheme to match elements/slices across models.
|
|
28
|
+
*/
|
|
29
|
+
export function computeRefs(model) {
|
|
30
|
+
const diagnostics = [];
|
|
31
|
+
// Pass 1: assign every slice its export key and every element its export
|
|
32
|
+
// ref, in document order, before resolving any cross-references. Doing
|
|
33
|
+
// refs and cross-references in separate passes means a `from` or arrow
|
|
34
|
+
// can point at any element regardless of declaration order within a slice.
|
|
35
|
+
const usedSliceKeys = new Set();
|
|
36
|
+
const sliceKeys = model.slices.map((slice) => {
|
|
37
|
+
const base = kebabSlug(slice.name);
|
|
38
|
+
const key = dedupe(base, usedSliceKeys, "~");
|
|
39
|
+
if (key !== base) {
|
|
40
|
+
diagnostics.push({
|
|
41
|
+
severity: "warning",
|
|
42
|
+
message: `duplicate slice name "${slice.name}" (export key "${base}" already used); rename slices uniquely for stable export refs`,
|
|
43
|
+
line: slice.line,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return key;
|
|
47
|
+
});
|
|
48
|
+
const usedElementRefs = new Set();
|
|
49
|
+
const refById = new Map();
|
|
50
|
+
model.slices.forEach((slice, sliceIndex) => {
|
|
51
|
+
const sliceKey = sliceKeys[sliceIndex];
|
|
52
|
+
for (const el of slice.elements) {
|
|
53
|
+
const base = `${sliceKey}/${el.kind}.${kebabSlug(el.name)}`;
|
|
54
|
+
const ref = dedupe(base, usedElementRefs, "~");
|
|
55
|
+
if (ref !== base) {
|
|
56
|
+
diagnostics.push({
|
|
57
|
+
severity: "warning",
|
|
58
|
+
message: `duplicate ${el.kind} "${el.name}" in slice "${slice.name}" (export ref "${base}" already used); rename for a stable export ref`,
|
|
59
|
+
line: el.line,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
refById.set(el.id, ref);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return { sliceKeys, refById, diagnostics };
|
|
66
|
+
}
|
|
67
|
+
/** Build the `em export` document for an already-validated (error-free) model. */
|
|
68
|
+
export function buildExport(model, diagnostics, source, path) {
|
|
69
|
+
const { sliceKeys, refById, diagnostics: extra } = computeRefs(model);
|
|
70
|
+
const refOf = (id) => id ? refById.get(id) ?? null : null;
|
|
71
|
+
const fromOf = (el) => {
|
|
72
|
+
if (!el.from || el.from.length === 0)
|
|
73
|
+
return null;
|
|
74
|
+
return el.from.map((name) => ({ name, ref: refOf(resolveByName(model.byName, name)) }));
|
|
75
|
+
};
|
|
76
|
+
const doc = {
|
|
77
|
+
schemaVersion: SCHEMA_VERSION,
|
|
78
|
+
generator: { name: GENERATOR_NAME, version: GENERATOR_VERSION },
|
|
79
|
+
source: { path, sha256: createHash("sha256").update(source, "utf8").digest("hex") },
|
|
80
|
+
model: {
|
|
81
|
+
name: model.name,
|
|
82
|
+
personas: model.personas,
|
|
83
|
+
contexts: model.contexts,
|
|
84
|
+
hasAutomation: model.hasAutomation,
|
|
85
|
+
slices: model.slices.map((slice, sliceIndex) => ({
|
|
86
|
+
key: sliceKeys[sliceIndex],
|
|
87
|
+
name: slice.name,
|
|
88
|
+
index: slice.index,
|
|
89
|
+
line: slice.line,
|
|
90
|
+
elements: slice.elements.map((el) => ({
|
|
91
|
+
ref: refById.get(el.id),
|
|
92
|
+
kind: el.kind,
|
|
93
|
+
name: el.name,
|
|
94
|
+
line: el.line,
|
|
95
|
+
fields: el.fields ? el.fields.map((f) => ({ name: f.name, type: f.type ?? null })) : null,
|
|
96
|
+
note: el.note ?? null,
|
|
97
|
+
issue: el.issue ?? null,
|
|
98
|
+
from: fromOf(el),
|
|
99
|
+
persona: el.persona ?? null,
|
|
100
|
+
context: el.context ?? null,
|
|
101
|
+
again: el.again === true,
|
|
102
|
+
logicalRef: el.kind === "view" && el.again === true ? refOf(el.logicalId) : null,
|
|
103
|
+
})),
|
|
104
|
+
})),
|
|
105
|
+
arrows: model.arrows.map((a) => ({
|
|
106
|
+
from: a.from,
|
|
107
|
+
to: a.to,
|
|
108
|
+
fromRef: refOf(a.fromId),
|
|
109
|
+
toRef: refOf(a.toId),
|
|
110
|
+
line: a.line,
|
|
111
|
+
})),
|
|
112
|
+
},
|
|
113
|
+
diagnostics: [...diagnostics, ...extra].map((d) => ({
|
|
114
|
+
severity: d.severity,
|
|
115
|
+
message: d.message,
|
|
116
|
+
line: d.line ?? null,
|
|
117
|
+
})),
|
|
118
|
+
};
|
|
119
|
+
return { text: JSON.stringify(doc, null, 2), diagnostics: [...diagnostics, ...extra] };
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/emit/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { NormalizedModel } from "./model.js";
|
|
2
|
+
import { ElementKind } from "../parser/ast.js";
|
|
3
|
+
export type ChangeType = "slice-added" | "slice-removed" | "element-added" | "element-removed" | "element-moved" | "field-added" | "field-removed" | "field-changed" | "from-added" | "from-removed" | "note-added" | "note-removed" | "note-changed" | "issue-opened" | "issue-resolved" | "issue-changed" | "arrow-added" | "arrow-removed";
|
|
4
|
+
/**
|
|
5
|
+
* One reported change. Not every field applies to every `type` — see
|
|
6
|
+
* formatEntry() for which fields each variant reads.
|
|
7
|
+
*/
|
|
8
|
+
export interface ChangeEntry {
|
|
9
|
+
type: ChangeType;
|
|
10
|
+
kind?: ElementKind;
|
|
11
|
+
name?: string;
|
|
12
|
+
sliceName?: string;
|
|
13
|
+
fromSlice?: string;
|
|
14
|
+
toSlice?: string;
|
|
15
|
+
field?: string;
|
|
16
|
+
fieldType?: string | null;
|
|
17
|
+
oldType?: string | null;
|
|
18
|
+
newType?: string | null;
|
|
19
|
+
source?: string;
|
|
20
|
+
oldNote?: string;
|
|
21
|
+
newNote?: string;
|
|
22
|
+
oldText?: string;
|
|
23
|
+
newText?: string;
|
|
24
|
+
from?: string;
|
|
25
|
+
to?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DiffCounts {
|
|
28
|
+
slicesAdded: number;
|
|
29
|
+
slicesRemoved: number;
|
|
30
|
+
elementsAdded: number;
|
|
31
|
+
elementsRemoved: number;
|
|
32
|
+
elementsMoved: number;
|
|
33
|
+
fieldChanges: number;
|
|
34
|
+
fromChanges: number;
|
|
35
|
+
noteChanges: number;
|
|
36
|
+
issuesOpened: number;
|
|
37
|
+
issuesResolved: number;
|
|
38
|
+
issuesChanged: number;
|
|
39
|
+
arrowsAdded: number;
|
|
40
|
+
arrowsRemoved: number;
|
|
41
|
+
}
|
|
42
|
+
export interface ModelDiff {
|
|
43
|
+
/** Additions and changes, in new-file document order. */
|
|
44
|
+
changes: ChangeEntry[];
|
|
45
|
+
/** Removals, in old-file document order. */
|
|
46
|
+
removals: ChangeEntry[];
|
|
47
|
+
counts: DiffCounts;
|
|
48
|
+
}
|
|
49
|
+
export declare function diffModels(oldModel: NormalizedModel, newModel: NormalizedModel): ModelDiff;
|
|
50
|
+
export declare function hasChanges(diff: ModelDiff): boolean;
|
|
51
|
+
/** Full `em diff` report: rollup line + blank + one line per change, or just "no structural changes". */
|
|
52
|
+
export declare function formatModelDiff(diff: ModelDiff): string;
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Structural diff between two NormalizedModels, for `em diff`. Identity is
|
|
3
|
+
// export identity: slices are matched by their `em export` key, elements by
|
|
4
|
+
// their `em export` ref (see computeRefs() in ../emit/json.ts) — the same
|
|
5
|
+
// edit-stable scheme `em export` already guarantees (inserting/reordering
|
|
6
|
+
// slices doesn't change an existing element's ref). A rename (same slot,
|
|
7
|
+
// different name) is therefore NOT tracked as a rename — it reads as a
|
|
8
|
+
// remove+add, deliberately: a rename IS a model change. A cross-slice MOVE
|
|
9
|
+
// (same kind + normalized name, different slice) is detected separately and
|
|
10
|
+
// reported once, not as add+remove.
|
|
11
|
+
import { computeRefs } from "../emit/json.js";
|
|
12
|
+
import { normalizeName } from "./model.js";
|
|
13
|
+
function emptyCounts() {
|
|
14
|
+
return {
|
|
15
|
+
slicesAdded: 0,
|
|
16
|
+
slicesRemoved: 0,
|
|
17
|
+
elementsAdded: 0,
|
|
18
|
+
elementsRemoved: 0,
|
|
19
|
+
elementsMoved: 0,
|
|
20
|
+
fieldChanges: 0,
|
|
21
|
+
fromChanges: 0,
|
|
22
|
+
noteChanges: 0,
|
|
23
|
+
issuesOpened: 0,
|
|
24
|
+
issuesResolved: 0,
|
|
25
|
+
issuesChanged: 0,
|
|
26
|
+
arrowsAdded: 0,
|
|
27
|
+
arrowsRemoved: 0,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const arrowKey = (from, to) => `${normalizeName(from)}->${normalizeName(to)}`;
|
|
31
|
+
export function diffModels(oldModel, newModel) {
|
|
32
|
+
const oldRefs = computeRefs(oldModel);
|
|
33
|
+
const newRefs = computeRefs(newModel);
|
|
34
|
+
const oldSliceKeySet = new Set(oldRefs.sliceKeys);
|
|
35
|
+
const newSliceKeySet = new Set(newRefs.sliceKeys);
|
|
36
|
+
// Whole-model ref indexes (not just surviving slices) — move detection and
|
|
37
|
+
// matched-pair diffing both need to see every element on both sides.
|
|
38
|
+
const oldElByRef = new Map();
|
|
39
|
+
oldModel.slices.forEach((slice, i) => {
|
|
40
|
+
const sliceKey = oldRefs.sliceKeys[i];
|
|
41
|
+
for (const el of slice.elements) {
|
|
42
|
+
oldElByRef.set(oldRefs.refById.get(el.id), { el, sliceKey, sliceName: slice.name });
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
const newElByRef = new Map();
|
|
46
|
+
newModel.slices.forEach((slice, i) => {
|
|
47
|
+
const sliceKey = newRefs.sliceKeys[i];
|
|
48
|
+
for (const el of slice.elements) {
|
|
49
|
+
newElByRef.set(newRefs.refById.get(el.id), { el, sliceKey, sliceName: slice.name });
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// Move detection: pair up refs that only exist on one side, by (kind,
|
|
53
|
+
// normalized name). Queue removed candidates in old document order; drain
|
|
54
|
+
// the queue as matching added candidates are found in new document order,
|
|
55
|
+
// so a move always lands on the *first* still-unmatched same-name origin.
|
|
56
|
+
const removedQueue = new Map();
|
|
57
|
+
for (const [ref, entry] of oldElByRef) {
|
|
58
|
+
if (newElByRef.has(ref))
|
|
59
|
+
continue;
|
|
60
|
+
const key = `${entry.el.kind}::${normalizeName(entry.el.name)}`;
|
|
61
|
+
const bucket = removedQueue.get(key);
|
|
62
|
+
if (bucket)
|
|
63
|
+
bucket.push({ ...entry, ref });
|
|
64
|
+
else
|
|
65
|
+
removedQueue.set(key, [{ ...entry, ref }]);
|
|
66
|
+
}
|
|
67
|
+
const movedOldRefs = new Set();
|
|
68
|
+
const movedNewRefs = new Map();
|
|
69
|
+
// Walk new-model elements in document order so the pairing itself is deterministic.
|
|
70
|
+
newModel.slices.forEach((slice, i) => {
|
|
71
|
+
const targetIsNew = !oldSliceKeySet.has(newRefs.sliceKeys[i]);
|
|
72
|
+
for (const el of slice.elements) {
|
|
73
|
+
const ref = newRefs.refById.get(el.id);
|
|
74
|
+
if (oldElByRef.has(ref))
|
|
75
|
+
continue;
|
|
76
|
+
const key = `${el.kind}::${normalizeName(el.name)}`;
|
|
77
|
+
const bucket = removedQueue.get(key);
|
|
78
|
+
if (bucket && bucket.length > 0) {
|
|
79
|
+
const origin = bucket.shift();
|
|
80
|
+
// A slice rename changes every element's ref (the ref embeds the slice
|
|
81
|
+
// key), so each element pairs up as a "move" from the old slice name to
|
|
82
|
+
// the new one. That's noise: the slice add/remove lines already tell the
|
|
83
|
+
// story. Suppress the per-element move when its origin slice was removed
|
|
84
|
+
// AND its target slice is new (the rename signature) — mark the origin as
|
|
85
|
+
// "moved" so the removal pass stays quiet, but don't record a move line
|
|
86
|
+
// (and, since the target slice is new, the additions pass won't enumerate
|
|
87
|
+
// it as an add either). Genuine moves — into a new slice from a surviving
|
|
88
|
+
// origin, or from a removed slice into a surviving target — still report.
|
|
89
|
+
const originRemoved = !newSliceKeySet.has(origin.sliceKey);
|
|
90
|
+
movedOldRefs.add(origin.ref);
|
|
91
|
+
if (!(targetIsNew && originRemoved)) {
|
|
92
|
+
movedNewRefs.set(ref, { fromSlice: origin.sliceName });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
const changes = [];
|
|
98
|
+
const removals = [];
|
|
99
|
+
const counts = emptyCounts();
|
|
100
|
+
// --- additions/changes, in new-file document order ---
|
|
101
|
+
newModel.slices.forEach((slice, i) => {
|
|
102
|
+
const sliceKey = newRefs.sliceKeys[i];
|
|
103
|
+
const sliceIsNew = !oldSliceKeySet.has(sliceKey);
|
|
104
|
+
if (sliceIsNew) {
|
|
105
|
+
changes.push({ type: "slice-added", name: slice.name });
|
|
106
|
+
counts.slicesAdded++;
|
|
107
|
+
}
|
|
108
|
+
for (const el of slice.elements) {
|
|
109
|
+
const ref = newRefs.refById.get(el.id);
|
|
110
|
+
const oldEntry = oldElByRef.get(ref);
|
|
111
|
+
if (oldEntry) {
|
|
112
|
+
pushElementChanges(changes, counts, oldEntry.el, el, slice.name);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const moved = movedNewRefs.get(ref);
|
|
116
|
+
if (moved) {
|
|
117
|
+
changes.push({
|
|
118
|
+
type: "element-moved",
|
|
119
|
+
kind: el.kind,
|
|
120
|
+
name: el.name,
|
|
121
|
+
fromSlice: moved.fromSlice,
|
|
122
|
+
toSlice: slice.name,
|
|
123
|
+
});
|
|
124
|
+
counts.elementsMoved++;
|
|
125
|
+
}
|
|
126
|
+
else if (!sliceIsNew) {
|
|
127
|
+
// A genuinely new element in a slice that already existed. (A new
|
|
128
|
+
// element inside a brand-new slice is implied by "+ slice" above —
|
|
129
|
+
// element add/remove reporting is scoped to surviving slices.)
|
|
130
|
+
changes.push({ type: "element-added", kind: el.kind, name: el.name, sliceName: slice.name });
|
|
131
|
+
counts.elementsAdded++;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
for (const a of newModel.arrows) {
|
|
136
|
+
const key = arrowKey(a.from, a.to);
|
|
137
|
+
if (!oldModel.arrows.some((oa) => arrowKey(oa.from, oa.to) === key)) {
|
|
138
|
+
changes.push({ type: "arrow-added", from: a.from, to: a.to });
|
|
139
|
+
counts.arrowsAdded++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// --- removals, in old-file document order ---
|
|
143
|
+
oldModel.slices.forEach((slice, i) => {
|
|
144
|
+
const sliceKey = oldRefs.sliceKeys[i];
|
|
145
|
+
const sliceIsRemoved = !newSliceKeySet.has(sliceKey);
|
|
146
|
+
if (sliceIsRemoved) {
|
|
147
|
+
removals.push({ type: "slice-removed", name: slice.name });
|
|
148
|
+
counts.slicesRemoved++;
|
|
149
|
+
}
|
|
150
|
+
for (const el of slice.elements) {
|
|
151
|
+
const ref = oldRefs.refById.get(el.id);
|
|
152
|
+
if (newElByRef.has(ref))
|
|
153
|
+
continue; // matched pair, already diffed above
|
|
154
|
+
if (movedOldRefs.has(ref))
|
|
155
|
+
continue; // reported as "moved:" already
|
|
156
|
+
if (!sliceIsRemoved) {
|
|
157
|
+
removals.push({ type: "element-removed", kind: el.kind, name: el.name, sliceName: slice.name });
|
|
158
|
+
counts.elementsRemoved++;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
for (const a of oldModel.arrows) {
|
|
163
|
+
const key = arrowKey(a.from, a.to);
|
|
164
|
+
if (!newModel.arrows.some((na) => arrowKey(na.from, na.to) === key)) {
|
|
165
|
+
removals.push({ type: "arrow-removed", from: a.from, to: a.to });
|
|
166
|
+
counts.arrowsRemoved++;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return { changes, removals, counts };
|
|
170
|
+
}
|
|
171
|
+
/** Diff field/from/note/issue changes for an element present on both sides (same ref). */
|
|
172
|
+
function pushElementChanges(changes, counts, oldEl, newEl, sliceName) {
|
|
173
|
+
const oldFields = new Map((oldEl.fields ?? []).map((f) => [normalizeName(f.name), f]));
|
|
174
|
+
const newFields = new Map((newEl.fields ?? []).map((f) => [normalizeName(f.name), f]));
|
|
175
|
+
for (const [key, f] of newFields) {
|
|
176
|
+
if (!oldFields.has(key)) {
|
|
177
|
+
changes.push({
|
|
178
|
+
type: "field-added",
|
|
179
|
+
kind: newEl.kind,
|
|
180
|
+
name: newEl.name,
|
|
181
|
+
sliceName,
|
|
182
|
+
field: f.name,
|
|
183
|
+
fieldType: f.type ?? null,
|
|
184
|
+
});
|
|
185
|
+
counts.fieldChanges++;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
for (const [key, f] of oldFields) {
|
|
189
|
+
if (!newFields.has(key)) {
|
|
190
|
+
changes.push({
|
|
191
|
+
type: "field-removed",
|
|
192
|
+
kind: newEl.kind,
|
|
193
|
+
name: newEl.name,
|
|
194
|
+
sliceName,
|
|
195
|
+
field: f.name,
|
|
196
|
+
fieldType: f.type ?? null,
|
|
197
|
+
});
|
|
198
|
+
counts.fieldChanges++;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
for (const [key, newF] of newFields) {
|
|
202
|
+
const oldF = oldFields.get(key);
|
|
203
|
+
if (oldF && (oldF.type ?? null) !== (newF.type ?? null)) {
|
|
204
|
+
changes.push({
|
|
205
|
+
type: "field-changed",
|
|
206
|
+
kind: newEl.kind,
|
|
207
|
+
name: newEl.name,
|
|
208
|
+
sliceName,
|
|
209
|
+
field: newF.name,
|
|
210
|
+
oldType: oldF.type ?? null,
|
|
211
|
+
newType: newF.type ?? null,
|
|
212
|
+
});
|
|
213
|
+
counts.fieldChanges++;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const oldFrom = oldEl.from ?? [];
|
|
217
|
+
const newFrom = newEl.from ?? [];
|
|
218
|
+
const oldFromSet = new Set(oldFrom.map(normalizeName));
|
|
219
|
+
const newFromSet = new Set(newFrom.map(normalizeName));
|
|
220
|
+
for (const n of newFrom) {
|
|
221
|
+
if (!oldFromSet.has(normalizeName(n))) {
|
|
222
|
+
changes.push({ type: "from-added", kind: newEl.kind, name: newEl.name, sliceName, source: n });
|
|
223
|
+
counts.fromChanges++;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
for (const n of oldFrom) {
|
|
227
|
+
if (!newFromSet.has(normalizeName(n))) {
|
|
228
|
+
changes.push({ type: "from-removed", kind: newEl.kind, name: newEl.name, sliceName, source: n });
|
|
229
|
+
counts.fromChanges++;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (oldEl.note !== newEl.note) {
|
|
233
|
+
if (!oldEl.note && newEl.note) {
|
|
234
|
+
changes.push({ type: "note-added", kind: newEl.kind, name: newEl.name, sliceName, newNote: newEl.note });
|
|
235
|
+
}
|
|
236
|
+
else if (oldEl.note && !newEl.note) {
|
|
237
|
+
changes.push({ type: "note-removed", kind: newEl.kind, name: newEl.name, sliceName, oldNote: oldEl.note });
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
changes.push({
|
|
241
|
+
type: "note-changed",
|
|
242
|
+
kind: newEl.kind,
|
|
243
|
+
name: newEl.name,
|
|
244
|
+
sliceName,
|
|
245
|
+
oldNote: oldEl.note,
|
|
246
|
+
newNote: newEl.note,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
counts.noteChanges++;
|
|
250
|
+
}
|
|
251
|
+
// Issue lifecycle: opened / resolved / text changed. Resolved is good
|
|
252
|
+
// news for the intent-capture angle — surfaced with its own positive tag,
|
|
253
|
+
// not lumped in as a generic "removed".
|
|
254
|
+
if (oldEl.issue !== newEl.issue) {
|
|
255
|
+
if (!oldEl.issue && newEl.issue) {
|
|
256
|
+
changes.push({ type: "issue-opened", kind: newEl.kind, name: newEl.name, sliceName, newText: newEl.issue });
|
|
257
|
+
counts.issuesOpened++;
|
|
258
|
+
}
|
|
259
|
+
else if (oldEl.issue && !newEl.issue) {
|
|
260
|
+
changes.push({ type: "issue-resolved", kind: newEl.kind, name: newEl.name, sliceName, oldText: oldEl.issue });
|
|
261
|
+
counts.issuesResolved++;
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
changes.push({
|
|
265
|
+
type: "issue-changed",
|
|
266
|
+
kind: newEl.kind,
|
|
267
|
+
name: newEl.name,
|
|
268
|
+
sliceName,
|
|
269
|
+
oldText: oldEl.issue,
|
|
270
|
+
newText: newEl.issue,
|
|
271
|
+
});
|
|
272
|
+
counts.issuesChanged++;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
export function hasChanges(diff) {
|
|
277
|
+
return diff.changes.length > 0 || diff.removals.length > 0;
|
|
278
|
+
}
|
|
279
|
+
/** One-line rollup, e.g. "2 slices added, 1 element moved, 1 issue resolved, 3 field changes". */
|
|
280
|
+
function formatSummary(c) {
|
|
281
|
+
const parts = [];
|
|
282
|
+
const push = (n, singular, plural) => {
|
|
283
|
+
if (n > 0)
|
|
284
|
+
parts.push(`${n} ${n === 1 ? singular : plural}`);
|
|
285
|
+
};
|
|
286
|
+
push(c.slicesAdded, "slice added", "slices added");
|
|
287
|
+
push(c.slicesRemoved, "slice removed", "slices removed");
|
|
288
|
+
push(c.elementsAdded, "element added", "elements added");
|
|
289
|
+
push(c.elementsRemoved, "element removed", "elements removed");
|
|
290
|
+
push(c.elementsMoved, "element moved", "elements moved");
|
|
291
|
+
push(c.fieldChanges, "field change", "field changes");
|
|
292
|
+
push(c.fromChanges, "from change", "from changes");
|
|
293
|
+
push(c.noteChanges, "note change", "note changes");
|
|
294
|
+
push(c.issuesOpened, "issue opened", "issues opened");
|
|
295
|
+
push(c.issuesResolved, "issue resolved", "issues resolved");
|
|
296
|
+
push(c.issuesChanged, "issue text change", "issue text changes");
|
|
297
|
+
push(c.arrowsAdded, "arrow added", "arrows added");
|
|
298
|
+
push(c.arrowsRemoved, "arrow removed", "arrows removed");
|
|
299
|
+
return parts.length === 0 ? "no structural changes" : parts.join(", ");
|
|
300
|
+
}
|
|
301
|
+
function typeLabel(t) {
|
|
302
|
+
return t ?? "(untyped)";
|
|
303
|
+
}
|
|
304
|
+
function formatEntry(e) {
|
|
305
|
+
switch (e.type) {
|
|
306
|
+
case "slice-added":
|
|
307
|
+
return `+ slice "${e.name}"`;
|
|
308
|
+
case "slice-removed":
|
|
309
|
+
return `- slice "${e.name}"`;
|
|
310
|
+
case "element-added":
|
|
311
|
+
return `+ ${e.kind} "${e.name}" (slice "${e.sliceName}")`;
|
|
312
|
+
case "element-removed":
|
|
313
|
+
return `- ${e.kind} "${e.name}" (slice "${e.sliceName}")`;
|
|
314
|
+
case "element-moved":
|
|
315
|
+
return `moved: ${e.kind} "${e.name}" (slice "${e.fromSlice}" -> slice "${e.toSlice}")`;
|
|
316
|
+
case "field-added":
|
|
317
|
+
return `~ field "${e.field}"${e.fieldType ? `: ${e.fieldType}` : ""} added to ${e.kind} "${e.name}" (slice "${e.sliceName}")`;
|
|
318
|
+
case "field-removed":
|
|
319
|
+
return `~ field "${e.field}"${e.fieldType ? `: ${e.fieldType}` : ""} removed from ${e.kind} "${e.name}" (slice "${e.sliceName}")`;
|
|
320
|
+
case "field-changed":
|
|
321
|
+
return `~ field "${e.field}" type changed on ${e.kind} "${e.name}" (slice "${e.sliceName}"): ${typeLabel(e.oldType)} -> ${typeLabel(e.newType)}`;
|
|
322
|
+
case "from-added":
|
|
323
|
+
return `~ from "${e.source}" added on ${e.kind} "${e.name}" (slice "${e.sliceName}")`;
|
|
324
|
+
case "from-removed":
|
|
325
|
+
return `~ from "${e.source}" removed from ${e.kind} "${e.name}" (slice "${e.sliceName}")`;
|
|
326
|
+
case "note-added":
|
|
327
|
+
return `~ note added on ${e.kind} "${e.name}" (slice "${e.sliceName}"): "${e.newNote}"`;
|
|
328
|
+
case "note-removed":
|
|
329
|
+
return `~ note removed from ${e.kind} "${e.name}" (slice "${e.sliceName}"): "${e.oldNote}"`;
|
|
330
|
+
case "note-changed":
|
|
331
|
+
return `~ note changed on ${e.kind} "${e.name}" (slice "${e.sliceName}"): "${e.oldNote}" -> "${e.newNote}"`;
|
|
332
|
+
case "issue-opened":
|
|
333
|
+
return `issue opened: ${e.kind} "${e.name}" (slice "${e.sliceName}"): "${e.newText}"`;
|
|
334
|
+
case "issue-resolved":
|
|
335
|
+
return `issue resolved: ${e.kind} "${e.name}" (slice "${e.sliceName}"): "${e.oldText}"`;
|
|
336
|
+
case "issue-changed":
|
|
337
|
+
return `issue text changed: ${e.kind} "${e.name}" (slice "${e.sliceName}"): "${e.oldText}" -> "${e.newText}"`;
|
|
338
|
+
case "arrow-added":
|
|
339
|
+
return `+ arrow "${e.from}" -> "${e.to}"`;
|
|
340
|
+
case "arrow-removed":
|
|
341
|
+
return `- arrow "${e.from}" -> "${e.to}"`;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/** Full `em diff` report: rollup line + blank + one line per change, or just "no structural changes". */
|
|
345
|
+
export function formatModelDiff(diff) {
|
|
346
|
+
const lines = [...diff.changes.map(formatEntry), ...diff.removals.map(formatEntry)];
|
|
347
|
+
if (lines.length === 0)
|
|
348
|
+
return "no structural changes";
|
|
349
|
+
return [formatSummary(diff.counts), "", ...lines].join("\n");
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/model/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/model/model.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface Element {
|
|
|
13
13
|
from?: string[];
|
|
14
14
|
/** Markdown file holding this element's notes, relative to the .em file. */
|
|
15
15
|
note?: string;
|
|
16
|
+
/** Open question text, flagged red on the diagram until resolved. */
|
|
17
|
+
issue?: string;
|
|
16
18
|
/** Data attributes declared on the element. */
|
|
17
19
|
fields?: Field[];
|
|
18
20
|
sliceIndex: number;
|
package/dist/model/model.js
CHANGED
package/dist/model/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model/model.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,sEAAsE;AACtE,2EAA2E;AAE3E,OAAO,EAAE,gBAAgB,EAAiC,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model/model.ts"],"names":[],"mappings":"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"}
|