@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
package/dist/cli.js
CHANGED
|
@@ -11,12 +11,22 @@ import { renderDot, formatFromPath } from "./render/render.js";
|
|
|
11
11
|
import { watchFile } from "./render/watch.js";
|
|
12
12
|
import { startLiveServer } from "./render/serve.js";
|
|
13
13
|
import { formatDiagnostic, hasErrors } from "./model/validate.js";
|
|
14
|
+
import { buildExport } from "./emit/json.js";
|
|
15
|
+
import { buildDiffJson } from "./emit/diffJson.js";
|
|
16
|
+
import { diffModels, formatModelDiff, hasChanges } from "./model/diff.js";
|
|
17
|
+
import { planDiffArgs, resolveRevision } from "./cli/diff-inputs.js";
|
|
18
|
+
import { listModelCommits, readFileAtCommit } from "./cli/changelog-git.js";
|
|
19
|
+
import { buildChangelog, parseDecisionsLog } from "./emit/changelog.js";
|
|
14
20
|
import { STARTER_EM } from "./templates.js";
|
|
15
21
|
const program = new Command();
|
|
22
|
+
// Single source of truth for the version (also read by src/emit/json.ts for
|
|
23
|
+
// `generator.version` in `em export`): package.json, one level up from both
|
|
24
|
+
// src/ and dist/.
|
|
25
|
+
const PKG_VERSION = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), "..", "package.json"), "utf8")).version;
|
|
16
26
|
program
|
|
17
27
|
.name("em")
|
|
18
28
|
.description("Event Modeling CLI — slice-first DSL rendered as a strict Graphviz grid")
|
|
19
|
-
.version(
|
|
29
|
+
.version(PKG_VERSION);
|
|
20
30
|
program
|
|
21
31
|
.command("init")
|
|
22
32
|
.description("scaffold a starter .em model")
|
|
@@ -63,6 +73,77 @@ program
|
|
|
63
73
|
await renderDot(dot, model, out, fmt, dirname(file));
|
|
64
74
|
console.log(`rendered ${out}`);
|
|
65
75
|
});
|
|
76
|
+
program
|
|
77
|
+
.command("export")
|
|
78
|
+
.description("export a versioned JSON snapshot of the normalized model")
|
|
79
|
+
.argument("<file>", "input .em file")
|
|
80
|
+
.option("-o, --out <path>", "write to a file instead of stdout")
|
|
81
|
+
.action((file, opts) => {
|
|
82
|
+
const { model, diagnostics, source } = compileFile(file);
|
|
83
|
+
printDiagnostics(diagnostics);
|
|
84
|
+
if (hasErrors(diagnostics)) {
|
|
85
|
+
console.error("not exporting: fix the errors above");
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
const exported = buildExport(model, diagnostics, source, file);
|
|
89
|
+
printDiagnostics(exported.diagnostics.filter((d) => !diagnostics.includes(d)));
|
|
90
|
+
if (opts.out) {
|
|
91
|
+
writeFileSync(opts.out, exported.text + "\n");
|
|
92
|
+
console.log(`wrote ${opts.out}`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
process.stdout.write(exported.text + "\n");
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
program
|
|
99
|
+
.command("diff")
|
|
100
|
+
.description("compare two models structurally (two files, or one file across git revisions)")
|
|
101
|
+
.argument("<old>", "old model file — or the file to diff, when using --from")
|
|
102
|
+
.argument("[new]", "new model file (omit when using --from/--to)")
|
|
103
|
+
.option("--from <rev>", "diff <old> against this git revision instead of a second file")
|
|
104
|
+
.option("--to <rev>", "diff against this git revision instead of the current file (requires --from)")
|
|
105
|
+
.option("--exit-code", "exit 1 if the models differ, 0 if identical (git-diff convention)")
|
|
106
|
+
.option("--json", "print a JSON document instead of the text report (see docs/cli.md)")
|
|
107
|
+
.action((oldFile, newFile, opts) => {
|
|
108
|
+
const plan = planDiffArgs(oldFile, newFile, opts);
|
|
109
|
+
if ("error" in plan) {
|
|
110
|
+
console.error(plan.error);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
if (plan.form === "files") {
|
|
114
|
+
const oldSource = readFileOrExit(plan.oldFile);
|
|
115
|
+
const newSource = readFileOrExit(plan.newFile);
|
|
116
|
+
runDiff(oldSource, plan.oldFile, newSource, plan.newFile, opts.exitCode, opts.json);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const oldSource = readAtRevision(plan.file, plan.from);
|
|
120
|
+
const oldLabel = `${plan.file}@${plan.from}`;
|
|
121
|
+
const newSource = plan.to ? readAtRevision(plan.file, plan.to) : readFileOrExit(plan.file);
|
|
122
|
+
const newLabel = plan.to ? `${plan.file}@${plan.to}` : plan.file;
|
|
123
|
+
runDiff(oldSource, oldLabel, newSource, newLabel, opts.exitCode, opts.json);
|
|
124
|
+
});
|
|
125
|
+
program
|
|
126
|
+
.command("changelog")
|
|
127
|
+
.description("render a model's git history as a business-readable ledger (see docs/cli.md)")
|
|
128
|
+
.argument("<file>", "input .em file (must be tracked in git)")
|
|
129
|
+
.option("--from <rev>", "start the walk at this revision (inclusive)")
|
|
130
|
+
.option("--to <rev>", "end the walk at this revision (inclusive; default HEAD)")
|
|
131
|
+
.option("-o, --out <path>", "write to a file instead of stdout")
|
|
132
|
+
.action((file, opts) => {
|
|
133
|
+
const commitsResult = listModelCommits(file, { from: opts.from, to: opts.to });
|
|
134
|
+
if (!commitsResult.ok) {
|
|
135
|
+
console.error(commitsResult.message);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
const markdown = buildChangelogDoc(file, commitsResult.repoRoot, commitsResult.commits);
|
|
139
|
+
if (opts.out) {
|
|
140
|
+
writeFileSync(opts.out, markdown + "\n");
|
|
141
|
+
console.log(`wrote ${opts.out}`);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
process.stdout.write(markdown + "\n");
|
|
145
|
+
}
|
|
146
|
+
});
|
|
66
147
|
program
|
|
67
148
|
.command("watch")
|
|
68
149
|
.description("re-render on every save")
|
|
@@ -116,13 +197,25 @@ program
|
|
|
116
197
|
.command("validate")
|
|
117
198
|
.description("check a model against event-modeling rules")
|
|
118
199
|
.argument("<file>", "input .em file")
|
|
119
|
-
.
|
|
120
|
-
|
|
121
|
-
|
|
200
|
+
.option("--list-issues", "print only open `issue` diagnostics (slice, element, line, text)")
|
|
201
|
+
.option("--fail-on-issues", "exit non-zero if the model has any open `issue`s (opt-in — issues are warnings and don't block by default)")
|
|
202
|
+
.action((file, opts) => {
|
|
203
|
+
const { model, diagnostics } = compileFile(file);
|
|
204
|
+
if (opts.listIssues) {
|
|
205
|
+
printIssues(model);
|
|
206
|
+
// Errors still fail the run below — surface them rather than exiting
|
|
207
|
+
// non-zero with nothing but the issue list on screen.
|
|
208
|
+
printDiagnostics(diagnostics.filter((d) => d.severity === "error"));
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
printDiagnostics(diagnostics);
|
|
212
|
+
if (diagnostics.length === 0)
|
|
213
|
+
console.log("ok — no issues");
|
|
214
|
+
}
|
|
122
215
|
if (hasErrors(diagnostics))
|
|
123
216
|
process.exit(1);
|
|
124
|
-
if (
|
|
125
|
-
|
|
217
|
+
if (opts.failOnIssues && model.elements.some((el) => el.issue))
|
|
218
|
+
process.exit(1);
|
|
126
219
|
});
|
|
127
220
|
const skill = program
|
|
128
221
|
.command("skill")
|
|
@@ -160,7 +253,7 @@ function compileFile(file, opts = {}) {
|
|
|
160
253
|
process.exit(1);
|
|
161
254
|
}
|
|
162
255
|
try {
|
|
163
|
-
return compile(source, opts);
|
|
256
|
+
return { ...compile(source, opts), source };
|
|
164
257
|
}
|
|
165
258
|
catch (e) {
|
|
166
259
|
if (e instanceof ParseError) {
|
|
@@ -170,6 +263,125 @@ function compileFile(file, opts = {}) {
|
|
|
170
263
|
throw e;
|
|
171
264
|
}
|
|
172
265
|
}
|
|
266
|
+
/** Read a file's text, or exit with a clear error — used by `em diff`'s two-file form. */
|
|
267
|
+
function readFileOrExit(file) {
|
|
268
|
+
try {
|
|
269
|
+
return readFileSync(file, "utf8");
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
console.error(`cannot read ${file}`);
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/** Parse+normalize source text for `em diff`, exiting with a labeled parse error on failure. */
|
|
277
|
+
function compileSource(source, label) {
|
|
278
|
+
try {
|
|
279
|
+
return compile(source);
|
|
280
|
+
}
|
|
281
|
+
catch (e) {
|
|
282
|
+
if (e instanceof ParseError) {
|
|
283
|
+
console.error(`parse error in ${label} ${e.message}`);
|
|
284
|
+
process.exit(1);
|
|
285
|
+
}
|
|
286
|
+
throw e;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/** Resolve `file`'s content at a git revision, exiting with a clear error on any git failure. */
|
|
290
|
+
function readAtRevision(file, rev) {
|
|
291
|
+
const result = resolveRevision(file, rev);
|
|
292
|
+
if (!result.ok) {
|
|
293
|
+
console.error(result.message);
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
return result.content;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Build the `em changelog` markdown document for an already-resolved commit
|
|
300
|
+
* list (oldest -> newest). Compiles every revision once; per-revision
|
|
301
|
+
* warnings are deliberately never printed (historical revisions can be noisy)
|
|
302
|
+
* — only a compile *failure* (parse error or validation error, same
|
|
303
|
+
* threshold `em diff` uses) surfaces, as that entry's error note, never a
|
|
304
|
+
* crash. Diffs are computed against the previous *parseable* revision, so a
|
|
305
|
+
* single bad revision in the middle of the walk doesn't break every entry
|
|
306
|
+
* after it. Content is read at each commit's own path (`readFileAtCommit`),
|
|
307
|
+
* so the walk survives renames.
|
|
308
|
+
*/
|
|
309
|
+
function buildChangelogDoc(file, repoRoot, commits) {
|
|
310
|
+
const models = [];
|
|
311
|
+
const errors = [];
|
|
312
|
+
for (const c of commits) {
|
|
313
|
+
const rev = readFileAtCommit(repoRoot, c);
|
|
314
|
+
if (!rev.ok) {
|
|
315
|
+
models.push(null);
|
|
316
|
+
errors.push(rev.message);
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
try {
|
|
320
|
+
const { model, diagnostics } = compile(rev.content);
|
|
321
|
+
if (hasErrors(diagnostics)) {
|
|
322
|
+
models.push(null);
|
|
323
|
+
errors.push(`validation errors at ${c.shortHash} — fix with \`em validate\` at that revision`);
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
models.push(model);
|
|
327
|
+
errors.push(null);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (e) {
|
|
331
|
+
models.push(null);
|
|
332
|
+
errors.push(e instanceof ParseError ? `parse error: ${e.message}` : e instanceof Error ? e.message : String(e));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
const entries = [];
|
|
336
|
+
let prevParseable = -1;
|
|
337
|
+
commits.forEach((c, i) => {
|
|
338
|
+
const base = { shortHash: c.shortHash, date: c.date, subject: c.subject };
|
|
339
|
+
if (i === 0) {
|
|
340
|
+
entries.push({ ...base, diff: null });
|
|
341
|
+
}
|
|
342
|
+
else if (!models[i]) {
|
|
343
|
+
entries.push({ ...base, diff: null, error: errors[i] });
|
|
344
|
+
}
|
|
345
|
+
else if (prevParseable === -1) {
|
|
346
|
+
entries.push({ ...base, diff: null, error: `no earlier parseable revision to diff against (${commits[0].shortHash}: ${errors[0]})` });
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
entries.push({ ...base, diff: diffModels(models[prevParseable], models[i]) });
|
|
350
|
+
}
|
|
351
|
+
if (models[i])
|
|
352
|
+
prevParseable = i;
|
|
353
|
+
});
|
|
354
|
+
const intro = models[0] ? { slices: models[0].slices.length, elements: models[0].elements.length } : null;
|
|
355
|
+
const introError = models[0] ? undefined : (errors[0] ?? undefined);
|
|
356
|
+
const stateFile = join(dirname(file), ".event-modeling.md");
|
|
357
|
+
const decisions = existsSync(stateFile) ? parseDecisionsLog(readFileSync(stateFile, "utf8")) : [];
|
|
358
|
+
return buildChangelog(entries, decisions, { file, intro, introError });
|
|
359
|
+
}
|
|
360
|
+
/** Shared body for both `em diff` forms: compile both sides, gate on errors, print, exit-code. */
|
|
361
|
+
function runDiff(oldSource, oldLabel, newSource, newLabel, exitCode, json) {
|
|
362
|
+
const oldResult = compileSource(oldSource, oldLabel);
|
|
363
|
+
const newResult = compileSource(newSource, newLabel);
|
|
364
|
+
printDiagnostics(oldResult.diagnostics);
|
|
365
|
+
printDiagnostics(newResult.diagnostics);
|
|
366
|
+
if (hasErrors(oldResult.diagnostics) || hasErrors(newResult.diagnostics)) {
|
|
367
|
+
console.error("not diffing: fix the errors above");
|
|
368
|
+
process.exit(1);
|
|
369
|
+
}
|
|
370
|
+
const diff = diffModels(oldResult.model, newResult.model);
|
|
371
|
+
if (json) {
|
|
372
|
+
const oldSide = { label: oldLabel, source: oldSource, diagnostics: oldResult.diagnostics };
|
|
373
|
+
const newSide = { label: newLabel, source: newSource, diagnostics: newResult.diagnostics };
|
|
374
|
+
process.stdout.write(buildDiffJson(diff, oldSide, newSide) + "\n");
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
console.log(formatModelDiff(diff));
|
|
378
|
+
}
|
|
379
|
+
// Set the code rather than process.exit(): stdout to a pipe is asynchronous
|
|
380
|
+
// on POSIX, so exiting here would truncate a JSON document larger than the
|
|
381
|
+
// pipe buffer — exactly the `--json --exit-code | ...` case in CI.
|
|
382
|
+
if (exitCode && hasChanges(diff))
|
|
383
|
+
process.exitCode = 1;
|
|
384
|
+
}
|
|
173
385
|
function defaultOut(file, fmt) {
|
|
174
386
|
const base = basename(file, extname(file));
|
|
175
387
|
return `${base}.${fmt}`;
|
|
@@ -183,6 +395,18 @@ function warnMissingNotes(file, model) {
|
|
|
183
395
|
}
|
|
184
396
|
}
|
|
185
397
|
}
|
|
398
|
+
/** Print only the open `issue "text"` diagnostics: slice, element, line, text — for CI. */
|
|
399
|
+
function printIssues(model) {
|
|
400
|
+
const withIssues = model.elements.filter((el) => el.issue);
|
|
401
|
+
if (withIssues.length === 0) {
|
|
402
|
+
console.log("no open issues");
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
for (const el of withIssues) {
|
|
406
|
+
const slice = model.slices[el.sliceIndex];
|
|
407
|
+
console.log(` issue :${el.line} slice "${slice.name}" ${el.kind} "${el.name}": ${el.issue}`);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
186
410
|
function printDiagnostics(diags) {
|
|
187
411
|
if (diags.length === 0)
|
|
188
412
|
return;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ModelDiff } from "../model/diff.js";
|
|
2
|
+
/** One dated bullet parsed from a state file's `## Decisions log` section. */
|
|
3
|
+
export interface DecisionEntry {
|
|
4
|
+
/** YYYY-MM-DD, as written in the bullet. */
|
|
5
|
+
date: string;
|
|
6
|
+
/** Bullet text plus any continuation lines, joined with a space. Markdown (e.g. `**bold**`) passes through untouched. */
|
|
7
|
+
text: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Parse the dated bullets (`- YYYY-MM-DD: …`) out of a state file's
|
|
11
|
+
* `## Decisions log` section, including continuation lines (any non-bullet,
|
|
12
|
+
* non-heading line following a dated bullet) up to the next bullet or the
|
|
13
|
+
* next heading. Returns `[]` when there's no such section — callers treat a
|
|
14
|
+
* missing/absent state file the same way, by never calling this at all.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseDecisionsLog(stateText: string): DecisionEntry[];
|
|
17
|
+
/** One commit's worth of changelog content, oldest -> newest (matches `listModelCommits`). */
|
|
18
|
+
export interface ChangelogEntry {
|
|
19
|
+
shortHash: string;
|
|
20
|
+
/** YYYY-MM-DD author date. */
|
|
21
|
+
date: string;
|
|
22
|
+
subject: string;
|
|
23
|
+
/**
|
|
24
|
+
* Structural diff against the previous *parseable* revision. `null` for
|
|
25
|
+
* the oldest entry (no predecessor — see `ChangelogOptions.intro`) or when
|
|
26
|
+
* this revision itself failed to compile (see `error`).
|
|
27
|
+
*/
|
|
28
|
+
diff: ModelDiff | null;
|
|
29
|
+
/** Set when this revision couldn't be compiled; `diff` is null in that case. */
|
|
30
|
+
error?: string;
|
|
31
|
+
}
|
|
32
|
+
/** Rollup of the oldest commit's model itself — computed by compiling that revision, not diffing. */
|
|
33
|
+
export interface ChangelogIntro {
|
|
34
|
+
slices: number;
|
|
35
|
+
elements: number;
|
|
36
|
+
}
|
|
37
|
+
export interface ChangelogOptions {
|
|
38
|
+
/** The file path/label to put in the document header. */
|
|
39
|
+
file: string;
|
|
40
|
+
/** Oldest-commit rollup, or `null` when that revision failed to compile (see `introError`). */
|
|
41
|
+
intro: ChangelogIntro | null;
|
|
42
|
+
/** Set when the oldest revision couldn't be compiled; `intro` is null in that case. */
|
|
43
|
+
introError?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Assemble the full `em changelog` markdown document: header, then sections
|
|
47
|
+
* newest-first, then a trailing "Decisions not tied to a model commit"
|
|
48
|
+
* section for any decision whose date matches no commit. A date's decisions
|
|
49
|
+
* attach once, to the newest commit of that date. `entries` must be
|
|
50
|
+
* oldest -> newest (matches `listModelCommits`); `entries[0]` is the model's
|
|
51
|
+
* introduction (no predecessor to diff against — see `opts.intro`).
|
|
52
|
+
*
|
|
53
|
+
* A section is omitted when it has no structural change AND no matching
|
|
54
|
+
* decision. The introduction and any error section always render — they're
|
|
55
|
+
* never silently dropped.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildChangelog(entries: ChangelogEntry[], decisions: DecisionEntry[], opts: ChangelogOptions): string;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Builds the `em changelog` markdown document: a business-readable ledger of
|
|
3
|
+
// a model's git history, newest-first, with structural deltas (via
|
|
4
|
+
// ../model/diff.ts) and dated Decisions-log entries from the adjacent
|
|
5
|
+
// `.event-modeling.md` woven in by date. Pure — no git, no fs; the CLI
|
|
6
|
+
// (src/cli.ts) and src/cli/changelog-git.ts own all I/O so this module is
|
|
7
|
+
// unit-testable with plain data (see test/changelog.test.ts).
|
|
8
|
+
import { formatModelDiff, hasChanges } from "../model/diff.js";
|
|
9
|
+
const HEADING_RE = /^#{1,6}\s+\S/;
|
|
10
|
+
const DECISIONS_HEADING_RE = /^##\s+Decisions log\s*$/;
|
|
11
|
+
const DATED_BULLET_RE = /^-\s+(\d{4}-\d{2}-\d{2}):\s?(.*)$/;
|
|
12
|
+
const BULLET_RE = /^-\s+/;
|
|
13
|
+
/**
|
|
14
|
+
* Parse the dated bullets (`- YYYY-MM-DD: …`) out of a state file's
|
|
15
|
+
* `## Decisions log` section, including continuation lines (any non-bullet,
|
|
16
|
+
* non-heading line following a dated bullet) up to the next bullet or the
|
|
17
|
+
* next heading. Returns `[]` when there's no such section — callers treat a
|
|
18
|
+
* missing/absent state file the same way, by never calling this at all.
|
|
19
|
+
*/
|
|
20
|
+
export function parseDecisionsLog(stateText) {
|
|
21
|
+
const lines = stateText.split(/\r?\n/);
|
|
22
|
+
const entries = [];
|
|
23
|
+
let inSection = false;
|
|
24
|
+
let current = null;
|
|
25
|
+
const flush = () => {
|
|
26
|
+
if (current) {
|
|
27
|
+
entries.push({ date: current.date, text: current.text.trim() });
|
|
28
|
+
current = null;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
for (const line of lines) {
|
|
32
|
+
if (!inSection) {
|
|
33
|
+
if (DECISIONS_HEADING_RE.test(line))
|
|
34
|
+
inSection = true;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (HEADING_RE.test(line))
|
|
38
|
+
break; // next section — Decisions log is over
|
|
39
|
+
const dated = DATED_BULLET_RE.exec(line);
|
|
40
|
+
if (dated) {
|
|
41
|
+
flush();
|
|
42
|
+
current = { date: dated[1], text: dated[2] };
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (BULLET_RE.test(line)) {
|
|
46
|
+
// A non-dated bullet (e.g. the template's `{{YYYY-MM-DD}}` placeholder)
|
|
47
|
+
// — not a decision, but it still ends any open continuation.
|
|
48
|
+
flush();
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (line.trim() === "")
|
|
52
|
+
continue; // blank line: neither ends nor extends a continuation
|
|
53
|
+
if (current)
|
|
54
|
+
current.text += " " + line.trim();
|
|
55
|
+
// else: a stray line before any bullet (e.g. the template's HTML comment) — ignore.
|
|
56
|
+
}
|
|
57
|
+
flush();
|
|
58
|
+
return entries;
|
|
59
|
+
}
|
|
60
|
+
function heading(entry) {
|
|
61
|
+
return `## ${entry.date} — ${entry.subject} (${entry.shortHash})`;
|
|
62
|
+
}
|
|
63
|
+
function decisionsBlock(decisions) {
|
|
64
|
+
if (decisions.length === 0)
|
|
65
|
+
return null;
|
|
66
|
+
return ["Decisions:", ...decisions.map((d) => `- ${d.text}`)].join("\n");
|
|
67
|
+
}
|
|
68
|
+
function assembleSection(parts) {
|
|
69
|
+
return parts.filter((p) => p !== null).join("\n\n");
|
|
70
|
+
}
|
|
71
|
+
function renderIntroSection(entry, opts, decisions) {
|
|
72
|
+
const body = opts.introError
|
|
73
|
+
? `_could not compile this revision: ${opts.introError}_`
|
|
74
|
+
: opts.intro
|
|
75
|
+
? `Model introduced: ${opts.intro.slices} slice${opts.intro.slices === 1 ? "" : "s"}, ${opts.intro.elements} element${opts.intro.elements === 1 ? "" : "s"}.`
|
|
76
|
+
: "_model introduced._";
|
|
77
|
+
return assembleSection([heading(entry), body, decisionsBlock(decisions)]);
|
|
78
|
+
}
|
|
79
|
+
function renderErrorSection(entry, decisions) {
|
|
80
|
+
return assembleSection([heading(entry), `_could not compile this revision: ${entry.error}_`, decisionsBlock(decisions)]);
|
|
81
|
+
}
|
|
82
|
+
function renderDiffSection(entry, diff, decisions) {
|
|
83
|
+
return assembleSection([heading(entry), formatModelDiff(diff), decisionsBlock(decisions)]);
|
|
84
|
+
}
|
|
85
|
+
function renderUnmatchedSection(decisions) {
|
|
86
|
+
const list = decisions.map((d) => `- ${d.date}: ${d.text}`).join("\n");
|
|
87
|
+
return assembleSection(["## Decisions not tied to a model commit", list]);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Assemble the full `em changelog` markdown document: header, then sections
|
|
91
|
+
* newest-first, then a trailing "Decisions not tied to a model commit"
|
|
92
|
+
* section for any decision whose date matches no commit. A date's decisions
|
|
93
|
+
* attach once, to the newest commit of that date. `entries` must be
|
|
94
|
+
* oldest -> newest (matches `listModelCommits`); `entries[0]` is the model's
|
|
95
|
+
* introduction (no predecessor to diff against — see `opts.intro`).
|
|
96
|
+
*
|
|
97
|
+
* A section is omitted when it has no structural change AND no matching
|
|
98
|
+
* decision. The introduction and any error section always render — they're
|
|
99
|
+
* never silently dropped.
|
|
100
|
+
*/
|
|
101
|
+
export function buildChangelog(entries, decisions, opts) {
|
|
102
|
+
const decisionsByDate = new Map();
|
|
103
|
+
for (const d of decisions) {
|
|
104
|
+
const bucket = decisionsByDate.get(d.date);
|
|
105
|
+
if (bucket)
|
|
106
|
+
bucket.push(d);
|
|
107
|
+
else
|
|
108
|
+
decisionsByDate.set(d.date, [d]);
|
|
109
|
+
}
|
|
110
|
+
const entryDates = new Set(entries.map((e) => e.date));
|
|
111
|
+
// Each decision attaches to exactly ONE section: the newest commit of its
|
|
112
|
+
// date. Attaching to every same-date section duplicates the whole day's
|
|
113
|
+
// decisions block per commit — on a real history with many commits in a
|
|
114
|
+
// day, that duplication drowns the ledger. The map is consumed on first
|
|
115
|
+
// (i.e. newest, given the reverse walk below) use.
|
|
116
|
+
const takeDecisions = (date) => {
|
|
117
|
+
const bucket = decisionsByDate.get(date) ?? [];
|
|
118
|
+
decisionsByDate.delete(date);
|
|
119
|
+
return bucket;
|
|
120
|
+
};
|
|
121
|
+
const sections = [];
|
|
122
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
123
|
+
const entry = entries[i];
|
|
124
|
+
const matching = takeDecisions(entry.date);
|
|
125
|
+
if (i === 0) {
|
|
126
|
+
sections.push(renderIntroSection(entry, opts, matching));
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if (entry.error) {
|
|
130
|
+
sections.push(renderErrorSection(entry, matching));
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const diff = entry.diff; // non-intro, non-error entries always carry a diff
|
|
134
|
+
if (!hasChanges(diff) && matching.length === 0)
|
|
135
|
+
continue; // skip: nothing to report
|
|
136
|
+
sections.push(renderDiffSection(entry, diff, matching));
|
|
137
|
+
}
|
|
138
|
+
const unmatched = decisions.filter((d) => !entryDates.has(d.date));
|
|
139
|
+
if (unmatched.length > 0)
|
|
140
|
+
sections.push(renderUnmatchedSection(unmatched));
|
|
141
|
+
return [`# Model changelog — ${opts.file}`, ...sections].join("\n\n");
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=changelog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../src/emit/changelog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ModelDiff } from "../model/diff.js";
|
|
2
|
+
import { Diagnostic } from "../model/validate.js";
|
|
3
|
+
export declare const DIFF_SCHEMA_VERSION = "1.0";
|
|
4
|
+
/** One side of the diff: what it was called, its source text, and its warnings. */
|
|
5
|
+
export interface DiffSide {
|
|
6
|
+
/** A file path, or `path@rev` for the `--from`/`--to` form. */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Source text, hashed into the envelope so a consumer can pin what was diffed. */
|
|
9
|
+
source: string;
|
|
10
|
+
/** This side's validate() diagnostics — warnings only; `em diff` refuses on errors. */
|
|
11
|
+
diagnostics: Diagnostic[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build the `em diff --json` document for an already-computed `ModelDiff`.
|
|
15
|
+
* Pretty-printed (2-space), no trailing newline — the caller adds it.
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildDiffJson(diff: ModelDiff, oldSide: DiffSide, newSide: DiffSide): string;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Builds the `em diff --json` document: a versioned, deterministic envelope
|
|
3
|
+
// around `ModelDiff` (see ../model/diff.ts). Follows `em export`'s
|
|
4
|
+
// conventions (src/emit/json.ts): a schema field versioned independently of
|
|
5
|
+
// the npm package, explicit `null` for every optional field so consumers can
|
|
6
|
+
// destructure without sniffing, and byte-deterministic output.
|
|
7
|
+
import { createHash } from "node:crypto";
|
|
8
|
+
import { hasChanges } from "../model/diff.js";
|
|
9
|
+
import { GENERATOR_NAME, GENERATOR_VERSION } from "./json.js";
|
|
10
|
+
export const DIFF_SCHEMA_VERSION = "1.0";
|
|
11
|
+
/** `ChangeEntry` with every optional field present, explicit `null` when unused by `type`. */
|
|
12
|
+
function serializeEntry(e) {
|
|
13
|
+
return {
|
|
14
|
+
type: e.type,
|
|
15
|
+
kind: e.kind ?? null,
|
|
16
|
+
name: e.name ?? null,
|
|
17
|
+
sliceName: e.sliceName ?? null,
|
|
18
|
+
fromSlice: e.fromSlice ?? null,
|
|
19
|
+
toSlice: e.toSlice ?? null,
|
|
20
|
+
field: e.field ?? null,
|
|
21
|
+
fieldType: e.fieldType ?? null,
|
|
22
|
+
oldType: e.oldType ?? null,
|
|
23
|
+
newType: e.newType ?? null,
|
|
24
|
+
source: e.source ?? null,
|
|
25
|
+
oldNote: e.oldNote ?? null,
|
|
26
|
+
newNote: e.newNote ?? null,
|
|
27
|
+
oldText: e.oldText ?? null,
|
|
28
|
+
newText: e.newText ?? null,
|
|
29
|
+
from: e.from ?? null,
|
|
30
|
+
to: e.to ?? null,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* `em export`'s `{ severity, message, line }` shape plus the `side` it came
|
|
35
|
+
* from. Flat and side-tagged rather than `{ old: [...], new: [...] }` so the
|
|
36
|
+
* array stays filterable and no key is a reserved word (see `oldModel`/
|
|
37
|
+
* `newModel` below).
|
|
38
|
+
*/
|
|
39
|
+
function serializeDiagnostic(side) {
|
|
40
|
+
return (d) => ({
|
|
41
|
+
side,
|
|
42
|
+
severity: d.severity,
|
|
43
|
+
message: d.message,
|
|
44
|
+
line: d.line ?? null,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function serializeSide(side) {
|
|
48
|
+
return {
|
|
49
|
+
label: side.label,
|
|
50
|
+
sha256: createHash("sha256").update(side.source, "utf8").digest("hex"),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Build the `em diff --json` document for an already-computed `ModelDiff`.
|
|
55
|
+
* Pretty-printed (2-space), no trailing newline — the caller adds it.
|
|
56
|
+
*/
|
|
57
|
+
export function buildDiffJson(diff, oldSide, newSide) {
|
|
58
|
+
const doc = {
|
|
59
|
+
diffSchemaVersion: DIFF_SCHEMA_VERSION,
|
|
60
|
+
generator: { name: GENERATOR_NAME, version: GENERATOR_VERSION },
|
|
61
|
+
oldModel: serializeSide(oldSide),
|
|
62
|
+
newModel: serializeSide(newSide),
|
|
63
|
+
identical: !hasChanges(diff),
|
|
64
|
+
counts: diff.counts,
|
|
65
|
+
changes: diff.changes.map(serializeEntry),
|
|
66
|
+
removals: diff.removals.map(serializeEntry),
|
|
67
|
+
diagnostics: [
|
|
68
|
+
...oldSide.diagnostics.map(serializeDiagnostic("old")),
|
|
69
|
+
...newSide.diagnostics.map(serializeDiagnostic("new")),
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
return JSON.stringify(doc, null, 2);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=diffJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diffJson.js","sourceRoot":"","sources":["../../src/emit/diffJson.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,4EAA4E;AAC5E,mEAAmE;AACnE,4EAA4E;AAC5E,6EAA6E;AAC7E,+DAA+D;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAsC,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAElF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAqBzC,8FAA8F;AAC9F,SAAS,cAAc,CAAC,CAAc;IACpC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;QACpB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;QACpB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI;QAC9B,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI;QAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI;QACtB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI;QAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;QACxB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;QACpB,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI;KACjB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,IAAmB;IAC9C,OAAO,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI;QACJ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,IAAc;IACnC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KACvE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAe,EAAE,OAAiB,EAAE,OAAiB;IACjF,MAAM,GAAG,GAAG;QACV,iBAAiB,EAAE,mBAAmB;QACtC,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAC/D,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC;QAChC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC;QAChC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACzC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3C,WAAW,EAAE;YACX,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACtD,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SACvD;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC"}
|