@milehimikey/em 1.5.0 → 1.6.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.
Files changed (91) hide show
  1. package/.claude/skills/event-modeling/SKILL.md +62 -17
  2. package/.claude/skills/event-modeling/reference/conform.md +33 -6
  3. package/.claude/skills/event-modeling/reference/em-dsl.md +144 -43
  4. package/.claude/skills/event-modeling/reference/extract.md +12 -2
  5. package/.claude/skills/event-modeling/reference/methodology.md +34 -14
  6. package/.claude/skills/event-modeling/templates/conformance-report.md +9 -7
  7. package/.claude/skills/event-modeling/templates/slice.md +6 -1
  8. package/.claude/skills/event-modeling/templates/state.md +8 -0
  9. package/README.md +1 -0
  10. package/dist/catalog/build.d.ts +33 -0
  11. package/dist/catalog/build.js +117 -0
  12. package/dist/catalog/build.js.map +1 -0
  13. package/dist/catalog/classify.d.ts +14 -0
  14. package/dist/catalog/classify.js +44 -0
  15. package/dist/catalog/classify.js.map +1 -0
  16. package/dist/catalog/pages.d.ts +45 -0
  17. package/dist/catalog/pages.js +174 -0
  18. package/dist/catalog/pages.js.map +1 -0
  19. package/dist/catalog/sliceDoc.d.ts +10 -0
  20. package/dist/catalog/sliceDoc.js +20 -0
  21. package/dist/catalog/sliceDoc.js.map +1 -0
  22. package/dist/cli/catalog-inputs.d.ts +16 -0
  23. package/dist/cli/catalog-inputs.js +18 -0
  24. package/dist/cli/catalog-inputs.js.map +1 -0
  25. package/dist/cli/glossary-inputs.d.ts +15 -0
  26. package/dist/cli/glossary-inputs.js +17 -0
  27. package/dist/cli/glossary-inputs.js.map +1 -0
  28. package/dist/cli/render-inputs.d.ts +27 -0
  29. package/dist/cli/render-inputs.js +41 -0
  30. package/dist/cli/render-inputs.js.map +1 -0
  31. package/dist/cli.js +188 -10
  32. package/dist/cli.js.map +1 -1
  33. package/dist/emit/diffJson.d.ts +1 -1
  34. package/dist/emit/diffJson.js +8 -1
  35. package/dist/emit/diffJson.js.map +1 -1
  36. package/dist/emit/dot.d.ts +7 -0
  37. package/dist/emit/dot.js +10 -4
  38. package/dist/emit/dot.js.map +1 -1
  39. package/dist/emit/glossaryJson.d.ts +13 -0
  40. package/dist/emit/glossaryJson.js +36 -0
  41. package/dist/emit/glossaryJson.js.map +1 -0
  42. package/dist/emit/json.d.ts +16 -2
  43. package/dist/emit/json.js +57 -6
  44. package/dist/emit/json.js.map +1 -1
  45. package/dist/emit/theme.d.ts +3 -0
  46. package/dist/emit/theme.js +19 -0
  47. package/dist/emit/theme.js.map +1 -1
  48. package/dist/model/diff.d.ts +36 -1
  49. package/dist/model/diff.js +198 -35
  50. package/dist/model/diff.js.map +1 -1
  51. package/dist/model/edges.d.ts +12 -1
  52. package/dist/model/edges.js +19 -8
  53. package/dist/model/edges.js.map +1 -1
  54. package/dist/model/glossary.d.ts +68 -0
  55. package/dist/model/glossary.js +138 -0
  56. package/dist/model/glossary.js.map +1 -0
  57. package/dist/model/model.d.ts +35 -0
  58. package/dist/model/model.js +41 -0
  59. package/dist/model/model.js.map +1 -1
  60. package/dist/model/validate.js +114 -3
  61. package/dist/model/validate.js.map +1 -1
  62. package/dist/parser/ast.d.ts +20 -0
  63. package/dist/parser/parser.js +170 -31
  64. package/dist/parser/parser.js.map +1 -1
  65. package/dist/render/drawNotes.d.ts +7 -3
  66. package/dist/render/drawNotes.js +75 -28
  67. package/dist/render/drawNotes.js.map +1 -1
  68. package/dist/render/render.d.ts +20 -1
  69. package/dist/render/render.js +52 -14
  70. package/dist/render/render.js.map +1 -1
  71. package/dist/render/serve.js +155 -0
  72. package/dist/render/serve.js.map +1 -1
  73. package/dist/render/sliceDiagram.d.ts +11 -0
  74. package/dist/render/sliceDiagram.js +198 -0
  75. package/dist/render/sliceDiagram.js.map +1 -0
  76. package/dist/render/sliceOverlay.d.ts +21 -0
  77. package/dist/render/sliceOverlay.js +111 -0
  78. package/dist/render/sliceOverlay.js.map +1 -0
  79. package/dist/render/sliceStatus.d.ts +5 -0
  80. package/dist/render/sliceStatus.js +26 -0
  81. package/dist/render/sliceStatus.js.map +1 -0
  82. package/dist/render/statusOverlay.d.ts +16 -0
  83. package/dist/render/statusOverlay.js +110 -0
  84. package/dist/render/statusOverlay.js.map +1 -0
  85. package/dist/render/svgGeometry.d.ts +30 -0
  86. package/dist/render/svgGeometry.js +33 -14
  87. package/dist/render/svgGeometry.js.map +1 -1
  88. package/dist/render/watch.d.ts +1 -1
  89. package/dist/render/watch.js +5 -2
  90. package/dist/render/watch.js.map +1 -1
  91. package/package.json +3 -2
@@ -0,0 +1,68 @@
1
+ import { ElementKind } from "../parser/ast.js";
2
+ import { NormalizedModel } from "./model.js";
3
+ export interface GlossaryModelInput {
4
+ /** File path (or other label) as given on the command line — this command's
5
+ * only cross-file identity, same convention as em diff's DiffSide.label. */
6
+ label: string;
7
+ model: NormalizedModel;
8
+ }
9
+ interface Occurrence {
10
+ model: string;
11
+ }
12
+ interface ElementOccurrence extends Occurrence {
13
+ kind: ElementKind;
14
+ line: number;
15
+ sliceName: string;
16
+ }
17
+ interface FieldOccurrence extends Occurrence {
18
+ elementKind: ElementKind;
19
+ elementName: string;
20
+ type: string | null;
21
+ line: number;
22
+ sliceName: string;
23
+ }
24
+ /** One normalized term and every place it was declared/used, across all input models. */
25
+ export interface GlossaryTerm<O extends Occurrence = Occurrence> {
26
+ key: string;
27
+ /** First-seen display name (first model, first occurrence). */
28
+ name: string;
29
+ occurrences: O[];
30
+ }
31
+ export interface Glossary {
32
+ /** Input labels, argument order. */
33
+ models: string[];
34
+ /** Element names, sorted by normalized key. */
35
+ elements: GlossaryTerm<ElementOccurrence>[];
36
+ /** Field names — a global namespace across every element/model, not qualified
37
+ * by owning element, matching validate.ts's own field-name-union convention. */
38
+ fields: GlossaryTerm<FieldOccurrence>[];
39
+ personas: GlossaryTerm[];
40
+ contexts: GlossaryTerm[];
41
+ }
42
+ export type GlossaryConflictType = "kind-conflict" | "field-type-conflict";
43
+ /** A term used inconsistently across ≥2 models. Not a `Diagnostic`: a cross-model
44
+ * finding needs to carry which model each conflicting occurrence came from, which
45
+ * `Diagnostic`'s `{severity, message, line}` has no room for — same reasoning that
46
+ * gives `em diff` its own `ChangeEntry` instead of reusing `Diagnostic`. */
47
+ export interface GlossaryConflict {
48
+ type: GlossaryConflictType;
49
+ term: string;
50
+ occurrences: (ElementOccurrence | FieldOccurrence)[];
51
+ }
52
+ /** Build the glossary: walk every input model's elements/fields/personas/contexts. */
53
+ export declare function buildGlossary(inputs: GlossaryModelInput[]): Glossary;
54
+ /** Same term, different element `kind`, across ≥2 distinct models. Requiring ≥2
55
+ * distinct models keeps this non-overlapping with validate.ts's existing
56
+ * single-model "ambiguous names" check (a name defined >1 time in one file). */
57
+ export declare function detectKindConflicts(glossary: Glossary): GlossaryConflict[];
58
+ /** Same field name, different `type` (or typed vs. untyped), across ≥2 distinct models. */
59
+ export declare function detectFieldTypeConflicts(glossary: Glossary): GlossaryConflict[];
60
+ export declare function hasConflicts(conflicts: GlossaryConflict[]): boolean;
61
+ /** One formatted conflict line, e.g.:
62
+ * `kind-conflict "Order": event in checkout.em:12 (slice "Submit Order"), view in billing.em:5 (slice "Show Orders")` */
63
+ export declare function formatConflictLine(c: GlossaryConflict): string;
64
+ /** Full `em glossary` default report: scale summary line, then either every conflict
65
+ * line or "no conflicts" — conflicts are this command's "diagnostics," the same role
66
+ * `Diagnostic[]` plays for `em validate`. */
67
+ export declare function formatGlossarySummary(glossary: Glossary, conflicts: GlossaryConflict[]): string;
68
+ export {};
@@ -0,0 +1,138 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Cross-model glossary for `em glossary`: aggregates the terms declared across
3
+ // N independently-compiled models (element names, field names, personas,
4
+ // contexts) and flags conflicting usage of the same normalized term. Simpler
5
+ // than diff.ts: glossary aggregates occurrences of a name across independent
6
+ // models, so it never needs computeRefs()'s edit-stable ref/slot-matching
7
+ // scheme (that's for correlating old-vs-new of the *same* model).
8
+ import { normalizeName } from "./model.js";
9
+ function collectTerms(entries) {
10
+ const byKey = new Map();
11
+ for (const { name, occurrence } of entries) {
12
+ const key = normalizeName(name);
13
+ let term = byKey.get(key);
14
+ if (!term) {
15
+ term = { key, name, occurrences: [] };
16
+ byKey.set(key, term);
17
+ }
18
+ term.occurrences.push(occurrence);
19
+ }
20
+ return [...byKey.values()].sort((a, b) => a.key.localeCompare(b.key));
21
+ }
22
+ /** Build the glossary: walk every input model's elements/fields/personas/contexts. */
23
+ export function buildGlossary(inputs) {
24
+ const elementEntries = [];
25
+ const fieldEntries = [];
26
+ const personaEntries = [];
27
+ const contextEntries = [];
28
+ for (const { label, model } of inputs) {
29
+ for (const el of model.elements) {
30
+ const sliceName = model.slices[el.sliceIndex].name;
31
+ elementEntries.push({
32
+ name: el.name,
33
+ occurrence: { model: label, kind: el.kind, line: el.line, sliceName },
34
+ });
35
+ for (const f of el.fields ?? []) {
36
+ fieldEntries.push({
37
+ name: f.name,
38
+ occurrence: {
39
+ model: label,
40
+ elementKind: el.kind,
41
+ elementName: el.name,
42
+ type: f.type ?? null,
43
+ line: el.line,
44
+ sliceName,
45
+ },
46
+ });
47
+ }
48
+ }
49
+ // Dedup personas/contexts per-model by normalized key before recording an
50
+ // occurrence: model.ts's own persona/context arrays dedupe by case-sensitive
51
+ // `Array.includes`, not `normalizeName` — without this, e.g. "Order" and
52
+ // "order" both declared in one model would fabricate two occurrences of what
53
+ // should be a single per-model occurrence. Casing conflicts are out of v1
54
+ // scope, but this keeps them from silently inflating cross-model conflicts.
55
+ const seenPersonas = new Set();
56
+ for (const p of model.personas) {
57
+ const key = normalizeName(p);
58
+ if (seenPersonas.has(key))
59
+ continue;
60
+ seenPersonas.add(key);
61
+ personaEntries.push({ name: p, occurrence: { model: label } });
62
+ }
63
+ const seenContexts = new Set();
64
+ for (const c of model.contexts) {
65
+ const key = normalizeName(c);
66
+ if (seenContexts.has(key))
67
+ continue;
68
+ seenContexts.add(key);
69
+ contextEntries.push({ name: c, occurrence: { model: label } });
70
+ }
71
+ }
72
+ return {
73
+ models: inputs.map((i) => i.label),
74
+ elements: collectTerms(elementEntries),
75
+ fields: collectTerms(fieldEntries),
76
+ personas: collectTerms(personaEntries),
77
+ contexts: collectTerms(contextEntries),
78
+ };
79
+ }
80
+ /** Same term, different element `kind`, across ≥2 distinct models. Requiring ≥2
81
+ * distinct models keeps this non-overlapping with validate.ts's existing
82
+ * single-model "ambiguous names" check (a name defined >1 time in one file). */
83
+ export function detectKindConflicts(glossary) {
84
+ const conflicts = [];
85
+ for (const term of glossary.elements) {
86
+ const models = new Set(term.occurrences.map((o) => o.model));
87
+ const kinds = new Set(term.occurrences.map((o) => o.kind));
88
+ if (models.size > 1 && kinds.size > 1) {
89
+ conflicts.push({ type: "kind-conflict", term: term.name, occurrences: term.occurrences });
90
+ }
91
+ }
92
+ return conflicts;
93
+ }
94
+ /** Same field name, different `type` (or typed vs. untyped), across ≥2 distinct models. */
95
+ export function detectFieldTypeConflicts(glossary) {
96
+ const conflicts = [];
97
+ for (const term of glossary.fields) {
98
+ const models = new Set(term.occurrences.map((o) => o.model));
99
+ const types = new Set(term.occurrences.map((o) => o.type));
100
+ if (models.size > 1 && types.size > 1) {
101
+ conflicts.push({ type: "field-type-conflict", term: term.name, occurrences: term.occurrences });
102
+ }
103
+ }
104
+ return conflicts;
105
+ }
106
+ export function hasConflicts(conflicts) {
107
+ return conflicts.length > 0;
108
+ }
109
+ function typeLabel(t) {
110
+ return t ?? "(untyped)";
111
+ }
112
+ /** One formatted conflict line, e.g.:
113
+ * `kind-conflict "Order": event in checkout.em:12 (slice "Submit Order"), view in billing.em:5 (slice "Show Orders")` */
114
+ export function formatConflictLine(c) {
115
+ if (c.type === "kind-conflict") {
116
+ const els = c.occurrences;
117
+ const parts = els.map((o) => `${o.kind} in ${o.model}:${o.line} (slice "${o.sliceName}")`).join(", ");
118
+ return `kind-conflict "${c.term}": ${parts}`;
119
+ }
120
+ const flds = c.occurrences;
121
+ const parts = flds
122
+ .map((o) => `${typeLabel(o.type)} on ${o.elementKind} "${o.elementName}" in ${o.model}:${o.line}`)
123
+ .join(", ");
124
+ return `field-type-conflict "${c.term}": ${parts}`;
125
+ }
126
+ /** Full `em glossary` default report: scale summary line, then either every conflict
127
+ * line or "no conflicts" — conflicts are this command's "diagnostics," the same role
128
+ * `Diagnostic[]` plays for `em validate`. */
129
+ export function formatGlossarySummary(glossary, conflicts) {
130
+ const termCount = glossary.elements.length + glossary.fields.length + glossary.personas.length + glossary.contexts.length;
131
+ const modelWord = glossary.models.length === 1 ? "model" : "models";
132
+ const termWord = termCount === 1 ? "term" : "terms";
133
+ const conflictWord = conflicts.length === 1 ? "conflict" : "conflicts";
134
+ const header = `${glossary.models.length} ${modelWord}, ${termCount} ${termWord}, ${conflicts.length} ${conflictWord}`;
135
+ const body = conflicts.length === 0 ? "no conflicts" : conflicts.map(formatConflictLine).join("\n");
136
+ return `${header}\n\n${body}`;
137
+ }
138
+ //# sourceMappingURL=glossary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glossary.js","sourceRoot":"","sources":["../../src/model/glossary.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,18 @@
1
1
  import { ElementKind, Field, ModelNode } from "../parser/ast.js";
2
+ /** A declared named type (`type Name { … }`) — its own top-level namespace, separate from
3
+ * elements (a type and an element may share a name without colliding). */
4
+ export interface TypeDecl {
5
+ id: string;
6
+ name: string;
7
+ fields: Field[];
8
+ line: number;
9
+ }
10
+ /** A field's type string resolved to a declared type, when it names one. */
11
+ export interface TypeRef {
12
+ typeDecl: TypeDecl;
13
+ /** True when the field's type is `Name[]` (an array of the referenced type) rather than bare. */
14
+ array: boolean;
15
+ }
2
16
  export declare const DEFAULT_PERSONA = "User";
3
17
  export declare const DEFAULT_CONTEXT = "Domain";
4
18
  export interface Element {
@@ -15,18 +29,25 @@ export interface Element {
15
29
  note?: string;
16
30
  /** Open question text, flagged red on the diagram until resolved. */
17
31
  issue?: string;
32
+ /** Reasoned, ratified deviation between this element and its implementation — the
33
+ * resolved sibling of `issue` (lint-suppression-with-rationale for conformance). */
34
+ divergence?: string;
18
35
  /** Data attributes declared on the element. */
19
36
  fields?: Field[];
20
37
  sliceIndex: number;
21
38
  line: number;
22
39
  /** view-only: marks a later timeline instance of an already-declared read model. */
23
40
  again?: boolean;
41
+ /** event-only: marks this event as part of the published integration surface. */
42
+ public?: boolean;
24
43
  /** id of the first instance of this logical element (== id for everything except later view instances). */
25
44
  logicalId: string;
26
45
  }
27
46
  export interface Slice {
28
47
  name: string;
29
48
  index: number;
49
+ /** `source "url"` — link to the ticket/conversation this slice traces back to. */
50
+ source?: string;
30
51
  elements: Element[];
31
52
  line: number;
32
53
  }
@@ -48,8 +69,22 @@ export interface NormalizedModel {
48
69
  /** Normalized display name -> elements with that name (across slices). */
49
70
  byName: Map<string, Element[]>;
50
71
  arrows: ResolvedArrow[];
72
+ /** Declared named types (`type Name { … }`), in document order. */
73
+ types: TypeDecl[];
74
+ /** Normalized name -> first-declared TypeDecl (references resolve to the first occurrence,
75
+ * same convention as `byName`). */
76
+ typesByName: Map<string, TypeDecl>;
51
77
  }
52
78
  export declare function normalizeName(name: string): string;
53
79
  export declare function normalize(ast: ModelNode): NormalizedModel;
80
+ /**
81
+ * Resolve a field's raw type string to a declared type, when it names one — bare (`Name`) or
82
+ * as an array (`Name[]`), matched case/whitespace-insensitively via `normalizeName`. Every
83
+ * other type string (`Money`, `UUID`, `List<LineItem>`, anything undeclared) resolves to
84
+ * `null` and stays exactly as free-text/unchecked as it is today — there is no primitive
85
+ * whitelist, only opportunistic resolution against whatever `type` blocks the model declares.
86
+ * Shared by `validate.ts` (cycle detection) and `emit/json.ts` (`typeRef` export).
87
+ */
88
+ export declare function resolveTypeRef(typeStr: string | undefined, typesByName: Map<string, TypeDecl>): TypeRef | null;
54
89
  /** Resolve an arrow endpoint (given by display name) to an element id. */
55
90
  export declare function resolveByName(byName: Map<string, Element[]>, name: string): string | undefined;
@@ -19,10 +19,28 @@ export function normalize(ast) {
19
19
  const firstViewIdByName = new Map();
20
20
  let hasAutomation = false;
21
21
  const makeId = (name) => dedupe(slug(name), usedIds, "_");
22
+ // Types are their own namespace: a separate id set so a type and an element may
23
+ // legitimately share a name/slug without colliding (their ids are never compared
24
+ // against each other, only used as map keys within their own registry).
25
+ const usedTypeIds = new Set();
26
+ const makeTypeId = (name) => dedupe(slug(name), usedTypeIds, "_");
27
+ const types = ast.types.map((t) => ({
28
+ id: makeTypeId(t.name),
29
+ name: t.name,
30
+ fields: t.fields,
31
+ line: t.line,
32
+ }));
33
+ const typesByName = new Map();
34
+ for (const t of types) {
35
+ const key = normalizeName(t.name);
36
+ if (!typesByName.has(key))
37
+ typesByName.set(key, t); // first declaration wins
38
+ }
22
39
  ast.slices.forEach((sliceNode, sliceIndex) => {
23
40
  const slice = {
24
41
  name: sliceNode.name,
25
42
  index: sliceIndex,
43
+ source: sliceNode.source,
26
44
  elements: [],
27
45
  line: sliceNode.line,
28
46
  };
@@ -31,6 +49,7 @@ export function normalize(ast) {
31
49
  id: makeId(el.name),
32
50
  logicalId: "",
33
51
  again: el.again,
52
+ public: el.public,
34
53
  kind: el.kind,
35
54
  name: el.name,
36
55
  sliceIndex,
@@ -38,6 +57,7 @@ export function normalize(ast) {
38
57
  from: el.from,
39
58
  note: el.note,
40
59
  issue: el.issue,
60
+ divergence: el.divergence,
41
61
  fields: el.fields,
42
62
  };
43
63
  if (el.kind === "ui") {
@@ -98,8 +118,29 @@ export function normalize(ast) {
98
118
  byId,
99
119
  byName,
100
120
  arrows,
121
+ types,
122
+ typesByName,
101
123
  };
102
124
  }
125
+ /**
126
+ * Resolve a field's raw type string to a declared type, when it names one — bare (`Name`) or
127
+ * as an array (`Name[]`), matched case/whitespace-insensitively via `normalizeName`. Every
128
+ * other type string (`Money`, `UUID`, `List<LineItem>`, anything undeclared) resolves to
129
+ * `null` and stays exactly as free-text/unchecked as it is today — there is no primitive
130
+ * whitelist, only opportunistic resolution against whatever `type` blocks the model declares.
131
+ * Shared by `validate.ts` (cycle detection) and `emit/json.ts` (`typeRef` export).
132
+ */
133
+ export function resolveTypeRef(typeStr, typesByName) {
134
+ if (!typeStr)
135
+ return null;
136
+ const trimmed = typeStr.trim();
137
+ const array = trimmed.endsWith("[]");
138
+ const base = (array ? trimmed.slice(0, -2) : trimmed).trim();
139
+ if (!base)
140
+ return null;
141
+ const typeDecl = typesByName.get(normalizeName(base));
142
+ return typeDecl ? { typeDecl, array } : null;
143
+ }
103
144
  /** Resolve an arrow endpoint (given by display name) to an element id. */
104
145
  export function resolveByName(byName, name) {
105
146
  const bucket = byName.get(normalizeName(name));
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model/model.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  // Event-modeling rule checks over the normalized model + grid.
3
3
  import { AUTOMATION_KINDS } from "../parser/ast.js";
4
- import { normalizeName } from "./model.js";
4
+ import { normalizeName, resolveTypeRef } from "./model.js";
5
5
  export function validate(model, grid) {
6
6
  const diags = [];
7
7
  // Grid collisions: two elements of the same band landed in one slice cell.
@@ -29,6 +29,22 @@ export function validate(model, grid) {
29
29
  line: command.line,
30
30
  });
31
31
  }
32
+ // A `ui` only ever triggers a `command` (State Change) — no pattern has a `ui`
33
+ // triggering a reaction. If one sits in a reaction's slice instead, with no read
34
+ // model in the same slice, it renders with no outgoing edge at all: a floating box
35
+ // nothing points at. But a `view` in the same slice draws `view -> ui` regardless of
36
+ // whether an automation also reads it (edges.ts) — that ui IS connected, so stay quiet.
37
+ if (auto && !command && views.length === 0) {
38
+ for (const ui of slice.elements.filter((e) => e.kind === "ui")) {
39
+ diags.push({
40
+ severity: "warning",
41
+ message: `ui "${ui.name}" shares slice "${slice.name}" with ${auto.kind} "${auto.name}"; ` +
42
+ `a \`ui\` only wires to a \`command\` and renders disconnected here — move it to the ` +
43
+ `slice that consumes the read model, or to the slice with the command this triggers`,
44
+ line: ui.line,
45
+ });
46
+ }
47
+ }
32
48
  // A command should record at least one event.
33
49
  if (command && events.length === 0) {
34
50
  diags.push({
@@ -52,9 +68,15 @@ export function validate(model, grid) {
52
68
  const bucket = model.byName.get(normalizeName(src));
53
69
  const evt = bucket?.find((e) => e.kind === "event");
54
70
  if (!evt) {
71
+ // Same courtesy as the reaction check below: if the name exists as
72
+ // another kind, say so rather than calling it unknown.
73
+ const other = bucket?.[0];
55
74
  diags.push({
56
75
  severity: "error",
57
- message: `read model "${view.name}" references unknown event "${src}"`,
76
+ message: other
77
+ ? `read model "${view.name}" references "${src}", which is a ${other.kind}, not an event — ` +
78
+ `\`from\` on a view names the events it projects`
79
+ : `read model "${view.name}" references unknown event "${src}"`,
58
80
  line: view.line,
59
81
  });
60
82
  }
@@ -141,9 +163,17 @@ export function validate(model, grid) {
141
163
  const bucket = model.byName.get(normalizeName(src));
142
164
  const views = bucket?.filter((e) => e.kind === "view") ?? [];
143
165
  if (views.length === 0) {
166
+ // A name that exists but as the wrong kind reads like a typo without
167
+ // saying so — call out the kind mismatch and the fix (project the
168
+ // event into a view) instead of claiming the name is unknown.
169
+ const asEvent = bucket?.find((e) => e.kind === "event");
144
170
  diags.push({
145
171
  severity: "error",
146
- message: `${el.kind} "${el.name}" references unknown read model "${src}"`,
172
+ message: asEvent
173
+ ? `${el.kind} "${el.name}" references "${src}", which is an event, not a read model — ` +
174
+ `reactions watch read models; project the event into a view first ` +
175
+ `(\`view <Pending Work> from "${src}"\`) and reference that view`
176
+ : `${el.kind} "${el.name}" references unknown read model "${src}"`,
147
177
  line: el.line,
148
178
  });
149
179
  }
@@ -316,6 +346,11 @@ export function validate(model, grid) {
316
346
  });
317
347
  }
318
348
  }
349
+ // `divergence "text"` deliberately raises NO diagnostic — unlike `issue`, it records a
350
+ // deviation that's already been reasoned about and accepted, not an open question. The
351
+ // entire point of the annotation is that it stops re-firing as a warning (or as conform-loop
352
+ // drift) on every run; a warning here would defeat that. Use `em validate --list-divergences`
353
+ // to audit them on demand instead.
319
354
  // Ambiguous names (used by arrows / view sources) get a heads-up.
320
355
  for (const [key, els] of model.byName) {
321
356
  // Later \`again\` instances of a view are the SAME logical read model reappearing on the
@@ -330,8 +365,84 @@ export function validate(model, grid) {
330
365
  });
331
366
  }
332
367
  }
368
+ // Duplicate `type` names always warn, unconditionally — unlike the element check above,
369
+ // there's no legitimate unreferenced-duplicate case for a named type: any field anywhere
370
+ // that resolves that name is ambiguous about which declaration it means, whether or not
371
+ // anything happens to reference it *today*.
372
+ const typesByNormalizedName = new Map();
373
+ for (const t of model.types) {
374
+ const key = normalizeName(t.name);
375
+ const bucket = typesByNormalizedName.get(key);
376
+ if (bucket)
377
+ bucket.push(t);
378
+ else
379
+ typesByNormalizedName.set(key, [t]);
380
+ }
381
+ for (const decls of typesByNormalizedName.values()) {
382
+ if (decls.length > 1) {
383
+ diags.push({
384
+ severity: "warning",
385
+ message: `type "${decls[0].name}" is defined ${decls.length} times; references resolve to the first occurrence`,
386
+ line: decls[0].line,
387
+ });
388
+ }
389
+ }
390
+ // Cyclic type references: recursion through declared types is allowed as a DAG (e.g. a
391
+ // shared `Address` referenced twice is fine), but a cycle — a type transitively nesting
392
+ // itself with no array to terminate it at runtime — can never be satisfied and is an error.
393
+ for (const cycle of findTypeCycles(model)) {
394
+ diags.push({
395
+ severity: "error",
396
+ message: `type "${cycle.path[0]}" has a cyclic reference: ${cycle.path.join(" -> ")}`,
397
+ line: cycle.line,
398
+ });
399
+ }
333
400
  return diags;
334
401
  }
402
+ /**
403
+ * DFS with 3-color marking (white/gray/black) over the type-reference graph: an edge A -> B
404
+ * exists when A has a *bare* (non-array) field resolving to B. Array-typed self/mutual
405
+ * references (`children: TreeNode[]`) are deliberately not graph edges — an array can
406
+ * terminate at runtime (empty array), so it can express legitimate recursive/tree shapes
407
+ * (categories, org charts, comment threads, BOMs); only an unconditional bare self-nesting is
408
+ * structurally impossible and gets rejected. Returns one entry per cycle found, each already
409
+ * a JS closed loop that will not be re-reported when reached again through another path
410
+ * (DFS invariant: a node is colored black once fully explored and never re-explored).
411
+ */
412
+ function findTypeCycles(model) {
413
+ const color = new Map(); // 0 = white, 1 = gray (on stack), 2 = black (done)
414
+ const cycles = [];
415
+ const stack = [];
416
+ const dependenciesOf = (t) => t.fields
417
+ .map((f) => resolveTypeRef(f.type, model.typesByName))
418
+ .filter((r) => r !== null && !r.array)
419
+ .map((r) => r.typeDecl);
420
+ function visit(t) {
421
+ color.set(t.id, 1);
422
+ stack.push(t);
423
+ for (const dep of dependenciesOf(t)) {
424
+ const c = color.get(dep.id) ?? 0;
425
+ if (c === 0) {
426
+ visit(dep);
427
+ }
428
+ else if (c === 1) {
429
+ const idx = stack.findIndex((s) => s.id === dep.id);
430
+ cycles.push({
431
+ path: [...stack.slice(idx).map((s) => s.name), dep.name],
432
+ line: stack[idx].line,
433
+ });
434
+ }
435
+ // c === 2 (black): already fully explored via another path — not a new cycle.
436
+ }
437
+ stack.pop();
438
+ color.set(t.id, 2);
439
+ }
440
+ for (const t of model.types) {
441
+ if ((color.get(t.id) ?? 0) === 0)
442
+ visit(t);
443
+ }
444
+ return cycles;
445
+ }
335
446
  const isAuto = (k) => AUTOMATION_KINDS.has(k);
336
447
  /** The only kind pairs a connection may take, per the four patterns: information enters the
337
448
  * system through a command and leaves through a read model, and nothing skips a step. */
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/model/validate.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,+DAA+D;AAE/D,OAAO,EAAE,gBAAgB,EAAe,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAA4B,aAAa,EAAE,MAAM,YAAY,CAAC;AAUrE,MAAM,UAAU,QAAQ,CAAC,KAAsB,EAAE,IAAU;IACzD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,2EAA2E;IAC3E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,OAAO;YACjB,OAAO,EACL,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,gBAAgB;gBACjE,eAAe,CAAC,CAAC,MAAM,oCAAoC;YAC7D,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,kEAAkE;QAClE,iEAAiE;QACjE,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,SAAS;gBACnB,OAAO,EACL,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,mBAAmB,KAAK,CAAC,IAAI,iBAAiB;oBACxE,IAAI,OAAO,CAAC,IAAI,gDAAgD;gBAClE,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,iCAAiC,KAAK,CAAC,IAAI,GAAG;gBAC/E,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;QAED,oDAAoD;QACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC;oBACT,QAAQ,EAAE,SAAS;oBACnB,OAAO,EACL,eAAe,IAAI,CAAC,IAAI,wBAAwB;wBAChD,6DAA6D;oBAC/D,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,KAAK,CAAC,IAAI,CAAC;wBACT,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,eAAe,IAAI,CAAC,IAAI,+BAA+B,GAAG,GAAG;wBACtE,IAAI,EAAE,IAAI,CAAC,IAAI;qBAChB,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC5C,KAAK,CAAC,IAAI,CAAC;wBACT,QAAQ,EAAE,OAAO;wBACjB,OAAO,EACL,oCAAoC,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,UAAU,GAAG,CAAC,YAAY;4BACtF,qBAAqB,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,UAAU,GAAG,CAAC,2BAA2B;4BACxF,gBAAgB,IAAI,CAAC,IAAI,mBAAmB;wBAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;qBAChB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,wEAAwE;YACxE,4EAA4E;YAC5E,yEAAyE;YACzE,yEAAyE;YACzE,uEAAuE;YACvE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAc,EAAE,CAAC;gBACnC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC1D,KAAK,MAAM,CAAC,IAAI,MAAM;wBAAE,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;4BAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,MAAM,oBAAoB,GACxB,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACpF,IAAI,oBAAoB,EAAE,CAAC;oBACzB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;oBACrC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;wBAC7B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE;4BAAE,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxE,CAAC;oBACD,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;4BAC3C,KAAK,CAAC,IAAI,CAAC;gCACT,QAAQ,EAAE,SAAS;gCACnB,OAAO,EAAE,SAAS,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,IAAI,sBAAsB,SAAS,EAAE;gCAC9E,IAAI,EAAE,IAAI,CAAC,IAAI;6BAChB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,+EAA+E;QAC/E,+EAA+E;QAC/E,yEAAyE;QACzE,sEAAsE;QACtE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,qBAAqB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjF,IAAI,qBAAqB,EAAE,CAAC;gBAC1B,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC5C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE;wBAAE,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/E,CAAC;gBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9D,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC,mBAAmB,OAAO,EAAE,CAAC;gBAC/F,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;oBACzB,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;wBAAE,SAAS;oBACrD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;wBAC3B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;4BAClD,KAAK,CAAC,IAAI,CAAC;gCACT,QAAQ,EAAE,SAAS;gCACnB,OAAO,EAAE,UAAU,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,IAAI,qBAAqB,UAAU,EAAE;gCAC9E,IAAI,EAAE,GAAG,CAAC,IAAI;6BACf,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,mFAAmF;IACnF,iDAAiD;IACjD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7C,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC;oBACT,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,oCAAoC,GAAG,GAAG;oBACzE,IAAI,EAAE,EAAE,CAAC,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7D,KAAK,CAAC,IAAI,CAAC;oBACT,QAAQ,EAAE,OAAO;oBACjB,OAAO,EACL,6BAA6B,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,UAAU,GAAG,CAAC,UAAU;wBACvF,IAAI,GAAG,8EAA8E;oBACvF,IAAI,EAAE,EAAE,CAAC,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,OAAO;gBACjB,OAAO,EACL,SAAS,EAAE,CAAC,IAAI,wDAAwD;oBACxE,8CAA8C;gBAChD,IAAI,EAAE,EAAE,CAAC,IAAI;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,6FAA6F;IAC7F,yFAAyF;IACzF,uFAAuF;IACvF,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAChC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;YACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;gBAAE,SAAS,CAAC,8BAA8B;YACzF,6EAA6E;YAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,SAAS;YAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7D,OAAO,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAChG,CAAC,CAAC,CAAC;YACH,IAAI,OAAO;gBAAE,SAAS;YACtB,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,SAAS;gBACnB,OAAO,EACL,YAAY,GAAG,CAAC,IAAI,8DAA8D;oBAClF,sFAAsF;gBACxF,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2FAA2F;IAC3F,uFAAuF;IACvF,6FAA6F;IAC7F,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,2FAA2F;QAC3F,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QACjC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,GAAG,GACP,MAAM;iBACH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC;iBACjE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAC7F,IAAI,GAAG;gBAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,MAAM;YAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CACvD,CAAC;QACF,IAAI,eAAe;YAAE,SAAS;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;YACnE,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,SAAS;YACzC,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,SAAS;gBACnB,OAAO,EACL,eAAe,IAAI,CAAC,IAAI,qDAAqD;oBAC7E,kFAAkF;gBACpF,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,wFAAwF;IACxF,wFAAwF;IACxF,0FAA0F;IAC1F,yFAAyF;IACzF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QACjC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3B,yFAAyF;QACzF,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,MAAM,IAAI,IAAI,IAAI;gBAAE,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;;YAE5E,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC5D,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;oBAAE,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAChE,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,EAAE,EAAE,IAAI,KAAK,MAAM;YAAE,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO;YAAE,SAAS;QAClC,IAAI,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAAE,SAAS;QACrD,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,SAAS;YACnB,OAAO,EACL,UAAU,EAAE,CAAC,IAAI,0DAA0D;gBAC3E,mBAAmB,EAAE,CAAC,IAAI,kCAAkC;YAC9D,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAED,6DAA6D;IAC7D,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC1D,KAAK,CAAC,IAAI,CAAC;oBACT,QAAQ,EAAE,OAAO;oBACjB,OAAO,EACL,oCAAoC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,oBAAoB;wBAC3E,UAAU,MAAM,CAAC,UAAU,GAAG,CAAC,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,0CAA0C;oBACrG,IAAI,EAAE,CAAC,CAAC,IAAI;iBACb,CAAC,CAAC;YACL,CAAC;YACD,mFAAmF;YACnF,qFAAqF;YACrF,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC;oBACT,QAAQ,EAAE,OAAO;oBACjB,OAAO,EACL,UAAU,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,cAAc,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe;wBAClF,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtE,IAAI,EAAE,CAAC,CAAC,IAAI;iBACb,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,MAAM;YACX,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,iBAAiB,CAAC,CAAC,IAAI,8BAA8B;gBAC9D,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;QACL,IAAI,CAAC,CAAC,CAAC,IAAI;YACT,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,8BAA8B;gBAC5D,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;IACP,CAAC;IAED,+EAA+E;IAC/E,uDAAuD;IACvD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,kBAAkB,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,KAAK,EAAE;gBAClD,IAAI,EAAE,EAAE,CAAC,IAAI;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACtC,yFAAyF;QACzF,0FAA0F;QAC1F,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,SAAS;gBACnB,OAAO,EACL,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAgB,YAAY,CAAC,MAAM,UAAU;oBACjE,4CAA4C;gBAC9C,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAc,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3D;0FAC0F;AAC1F,SAAS,WAAW,CAAC,IAAiB,EAAE,EAAe;IACrD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,eAAe;IAC3D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC,eAAe;IAC9D,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,KAAK,MAAM,CAAC,CAAC,aAAa;IACzD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC;IAC/F,IAAI,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,wCAAwC;IACnF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uEAAuE;AACvE,SAAS,YAAY,CAAC,IAAiB,EAAE,EAAe;IACtD,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,MAAM;QACrC,OAAO,mEAAmE,CAAC;IAC7E,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,SAAS;QACrC,OAAO,kGAAkG,CAAC;IAC5G,IAAI,IAAI,KAAK,OAAO,IAAI,EAAE,KAAK,SAAS;QACtC,OAAO,sGAAsG,CAAC;IAChH,IAAI,IAAI,KAAK,OAAO,IAAI,EAAE,KAAK,OAAO;QACpC,OAAO,mEAAmE,CAAC;IAC7E,IAAI,IAAI,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM;QAClC,OAAO,mHAAmH,CAAC;IAC7H,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;QACxC,OAAO,0DAA0D,CAAC;IACpE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO;QAChC,OAAO,qGAAqG,CAAC;IAC/G,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM;QAChC,OAAO,6DAA6D,CAAC;IACvE,OAAO,CACL,sEAAsE;QACtE,wCAAwC,CACzC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAiB;IAClC,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED,SAAS,WAAW,CAAC,IAAiB;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,KAAsB,EAAE,GAAW;IACvD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;IAChF,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;YAAE,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAmB;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,CAAa;IAC5C,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACvD,OAAO,KAAK,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/model/validate.ts"],"names":[],"mappings":"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"}