@bett3r-dev/blueprint-schema 1.6.0 → 1.8.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.
Files changed (235) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/build/cjs/apply-design.d.ts +5 -5
  3. package/build/cjs/apply-design.d.ts.map +1 -1
  4. package/build/cjs/apply-design.js +21 -5
  5. package/build/cjs/apply-design.js.map +1 -1
  6. package/build/cjs/apply-overrides.d.ts +3 -3
  7. package/build/cjs/apply-overrides.d.ts.map +1 -1
  8. package/build/cjs/apply-overrides.js +5 -1
  9. package/build/cjs/apply-overrides.js.map +1 -1
  10. package/build/cjs/card-channel.d.ts +18 -0
  11. package/build/cjs/card-channel.d.ts.map +1 -0
  12. package/build/cjs/card-channel.js +30 -0
  13. package/build/cjs/card-channel.js.map +1 -0
  14. package/build/cjs/convergence.d.ts +2 -2
  15. package/build/cjs/convergence.d.ts.map +1 -1
  16. package/build/cjs/coverage-links.d.ts +27 -0
  17. package/build/cjs/coverage-links.d.ts.map +1 -0
  18. package/build/cjs/coverage-links.js +117 -0
  19. package/build/cjs/coverage-links.js.map +1 -0
  20. package/build/cjs/design.d.ts +44 -2
  21. package/build/cjs/design.d.ts.map +1 -1
  22. package/build/cjs/design.js +42 -2
  23. package/build/cjs/design.js.map +1 -1
  24. package/build/cjs/diagnostics.d.ts +2 -2
  25. package/build/cjs/diagnostics.d.ts.map +1 -1
  26. package/build/cjs/edge-endpoints.d.ts +33 -0
  27. package/build/cjs/edge-endpoints.d.ts.map +1 -0
  28. package/build/cjs/edge-endpoints.js +83 -0
  29. package/build/cjs/edge-endpoints.js.map +1 -0
  30. package/build/cjs/edges.d.ts +2 -2
  31. package/build/cjs/edges.d.ts.map +1 -1
  32. package/build/cjs/edges.js +2 -1
  33. package/build/cjs/edges.js.map +1 -1
  34. package/build/cjs/effective-design.d.ts +21 -0
  35. package/build/cjs/effective-design.d.ts.map +1 -0
  36. package/build/cjs/effective-design.js +172 -0
  37. package/build/cjs/effective-design.js.map +1 -0
  38. package/build/cjs/entry-points.d.ts +2 -2
  39. package/build/cjs/entry-points.d.ts.map +1 -1
  40. package/build/cjs/find-orphan-nodes.d.ts +3 -3
  41. package/build/cjs/find-orphan-nodes.d.ts.map +1 -1
  42. package/build/cjs/flow-traversal.d.ts +3 -3
  43. package/build/cjs/flow-traversal.d.ts.map +1 -1
  44. package/build/cjs/fork-scenarios.d.ts +44 -0
  45. package/build/cjs/fork-scenarios.d.ts.map +1 -0
  46. package/build/cjs/fork-scenarios.js +83 -0
  47. package/build/cjs/fork-scenarios.js.map +1 -0
  48. package/build/cjs/graph.d.ts +27 -2
  49. package/build/cjs/graph.d.ts.map +1 -1
  50. package/build/cjs/graph.js +36 -0
  51. package/build/cjs/graph.js.map +1 -1
  52. package/build/cjs/handler-scope.d.ts +3 -3
  53. package/build/cjs/handler-scope.d.ts.map +1 -1
  54. package/build/cjs/index.d.ts +9 -0
  55. package/build/cjs/index.d.ts.map +1 -1
  56. package/build/cjs/index.js +9 -0
  57. package/build/cjs/index.js.map +1 -1
  58. package/build/cjs/invariants.d.ts +26 -0
  59. package/build/cjs/invariants.d.ts.map +1 -0
  60. package/build/cjs/invariants.js +39 -0
  61. package/build/cjs/invariants.js.map +1 -0
  62. package/build/cjs/map-links.d.ts +1 -0
  63. package/build/cjs/map-links.d.ts.map +1 -1
  64. package/build/cjs/map-links.js +14 -1
  65. package/build/cjs/map-links.js.map +1 -1
  66. package/build/cjs/map-structure.d.ts +172 -3
  67. package/build/cjs/map-structure.d.ts.map +1 -1
  68. package/build/cjs/map-structure.js +46 -4
  69. package/build/cjs/map-structure.js.map +1 -1
  70. package/build/cjs/map-vocabulary.d.ts +29 -1
  71. package/build/cjs/map-vocabulary.d.ts.map +1 -1
  72. package/build/cjs/map-vocabulary.js +72 -2
  73. package/build/cjs/map-vocabulary.js.map +1 -1
  74. package/build/cjs/nodes.d.ts +11 -1
  75. package/build/cjs/nodes.d.ts.map +1 -1
  76. package/build/cjs/nodes.js +4 -2
  77. package/build/cjs/nodes.js.map +1 -1
  78. package/build/cjs/ops.d.ts +43 -10
  79. package/build/cjs/ops.d.ts.map +1 -1
  80. package/build/cjs/ops.js +1 -1
  81. package/build/cjs/ops.js.map +1 -1
  82. package/build/cjs/overrides.d.ts +5 -2
  83. package/build/cjs/overrides.d.ts.map +1 -1
  84. package/build/cjs/overrides.js.map +1 -1
  85. package/build/cjs/package.json +1 -0
  86. package/build/cjs/reachability.d.ts +4 -4
  87. package/build/cjs/reachability.d.ts.map +1 -1
  88. package/build/cjs/reachability.js +5 -1
  89. package/build/cjs/reachability.js.map +1 -1
  90. package/build/cjs/reality-check.d.ts +4 -4
  91. package/build/cjs/reality-check.d.ts.map +1 -1
  92. package/build/cjs/reality-check.js +52 -9
  93. package/build/cjs/reality-check.js.map +1 -1
  94. package/build/cjs/session-phase.d.ts +80 -0
  95. package/build/cjs/session-phase.d.ts.map +1 -0
  96. package/build/cjs/session-phase.js +97 -0
  97. package/build/cjs/session-phase.js.map +1 -0
  98. package/build/cjs/session.d.ts +21 -0
  99. package/build/cjs/session.d.ts.map +1 -1
  100. package/build/cjs/session.js +19 -0
  101. package/build/cjs/session.js.map +1 -1
  102. package/build/cjs/spec.d.ts +140 -0
  103. package/build/cjs/spec.d.ts.map +1 -0
  104. package/build/cjs/spec.js +514 -0
  105. package/build/cjs/spec.js.map +1 -0
  106. package/build/cjs/topology.d.ts +2 -2
  107. package/build/cjs/topology.d.ts.map +1 -1
  108. package/build/cjs/topology.js +2 -0
  109. package/build/cjs/topology.js.map +1 -1
  110. package/build/cjs/unproduced-events.d.ts +10 -0
  111. package/build/cjs/unproduced-events.d.ts.map +1 -0
  112. package/build/cjs/unproduced-events.js +37 -0
  113. package/build/cjs/unproduced-events.js.map +1 -0
  114. package/build/cjs/validate-design.d.ts +3 -3
  115. package/build/cjs/validate-design.d.ts.map +1 -1
  116. package/build/cjs/validate-design.js +40 -3
  117. package/build/cjs/validate-design.js.map +1 -1
  118. package/build/esm/apply-design.d.ts +5 -5
  119. package/build/esm/apply-design.d.ts.map +1 -1
  120. package/build/esm/apply-design.js +21 -5
  121. package/build/esm/apply-design.js.map +1 -1
  122. package/build/esm/apply-overrides.d.ts +3 -3
  123. package/build/esm/apply-overrides.d.ts.map +1 -1
  124. package/build/esm/apply-overrides.js +5 -1
  125. package/build/esm/apply-overrides.js.map +1 -1
  126. package/build/esm/card-channel.d.ts +18 -0
  127. package/build/esm/card-channel.d.ts.map +1 -0
  128. package/build/esm/card-channel.js +25 -0
  129. package/build/esm/card-channel.js.map +1 -0
  130. package/build/esm/convergence.d.ts +2 -2
  131. package/build/esm/convergence.d.ts.map +1 -1
  132. package/build/esm/coverage-links.d.ts +27 -0
  133. package/build/esm/coverage-links.d.ts.map +1 -0
  134. package/build/esm/coverage-links.js +113 -0
  135. package/build/esm/coverage-links.js.map +1 -0
  136. package/build/esm/design.d.ts +44 -2
  137. package/build/esm/design.d.ts.map +1 -1
  138. package/build/esm/design.js +38 -1
  139. package/build/esm/design.js.map +1 -1
  140. package/build/esm/diagnostics.d.ts +2 -2
  141. package/build/esm/diagnostics.d.ts.map +1 -1
  142. package/build/esm/edge-endpoints.d.ts +33 -0
  143. package/build/esm/edge-endpoints.d.ts.map +1 -0
  144. package/build/esm/edge-endpoints.js +77 -0
  145. package/build/esm/edge-endpoints.js.map +1 -0
  146. package/build/esm/edges.d.ts +2 -2
  147. package/build/esm/edges.d.ts.map +1 -1
  148. package/build/esm/edges.js +2 -1
  149. package/build/esm/edges.js.map +1 -1
  150. package/build/esm/effective-design.d.ts +21 -0
  151. package/build/esm/effective-design.d.ts.map +1 -0
  152. package/build/esm/effective-design.js +169 -0
  153. package/build/esm/effective-design.js.map +1 -0
  154. package/build/esm/entry-points.d.ts +2 -2
  155. package/build/esm/entry-points.d.ts.map +1 -1
  156. package/build/esm/find-orphan-nodes.d.ts +3 -3
  157. package/build/esm/find-orphan-nodes.d.ts.map +1 -1
  158. package/build/esm/flow-traversal.d.ts +3 -3
  159. package/build/esm/flow-traversal.d.ts.map +1 -1
  160. package/build/esm/fork-scenarios.d.ts +44 -0
  161. package/build/esm/fork-scenarios.d.ts.map +1 -0
  162. package/build/esm/fork-scenarios.js +78 -0
  163. package/build/esm/fork-scenarios.js.map +1 -0
  164. package/build/esm/graph.d.ts +27 -2
  165. package/build/esm/graph.d.ts.map +1 -1
  166. package/build/esm/graph.js +33 -0
  167. package/build/esm/graph.js.map +1 -1
  168. package/build/esm/handler-scope.d.ts +3 -3
  169. package/build/esm/handler-scope.d.ts.map +1 -1
  170. package/build/esm/index.d.ts +9 -0
  171. package/build/esm/index.d.ts.map +1 -1
  172. package/build/esm/index.js +9 -0
  173. package/build/esm/index.js.map +1 -1
  174. package/build/esm/invariants.d.ts +26 -0
  175. package/build/esm/invariants.d.ts.map +1 -0
  176. package/build/esm/invariants.js +36 -0
  177. package/build/esm/invariants.js.map +1 -0
  178. package/build/esm/map-links.d.ts +1 -0
  179. package/build/esm/map-links.d.ts.map +1 -1
  180. package/build/esm/map-links.js +14 -1
  181. package/build/esm/map-links.js.map +1 -1
  182. package/build/esm/map-structure.d.ts +172 -3
  183. package/build/esm/map-structure.d.ts.map +1 -1
  184. package/build/esm/map-structure.js +42 -3
  185. package/build/esm/map-structure.js.map +1 -1
  186. package/build/esm/map-vocabulary.d.ts +29 -1
  187. package/build/esm/map-vocabulary.d.ts.map +1 -1
  188. package/build/esm/map-vocabulary.js +64 -1
  189. package/build/esm/map-vocabulary.js.map +1 -1
  190. package/build/esm/nodes.d.ts +11 -1
  191. package/build/esm/nodes.d.ts.map +1 -1
  192. package/build/esm/nodes.js +4 -2
  193. package/build/esm/nodes.js.map +1 -1
  194. package/build/esm/ops.d.ts +43 -10
  195. package/build/esm/ops.d.ts.map +1 -1
  196. package/build/esm/ops.js +1 -1
  197. package/build/esm/ops.js.map +1 -1
  198. package/build/esm/overrides.d.ts +5 -2
  199. package/build/esm/overrides.d.ts.map +1 -1
  200. package/build/esm/overrides.js.map +1 -1
  201. package/build/esm/reachability.d.ts +4 -4
  202. package/build/esm/reachability.d.ts.map +1 -1
  203. package/build/esm/reachability.js +5 -1
  204. package/build/esm/reachability.js.map +1 -1
  205. package/build/esm/reality-check.d.ts +4 -4
  206. package/build/esm/reality-check.d.ts.map +1 -1
  207. package/build/esm/reality-check.js +53 -10
  208. package/build/esm/reality-check.js.map +1 -1
  209. package/build/esm/session-phase.d.ts +80 -0
  210. package/build/esm/session-phase.d.ts.map +1 -0
  211. package/build/esm/session-phase.js +93 -0
  212. package/build/esm/session-phase.js.map +1 -0
  213. package/build/esm/session.d.ts +21 -0
  214. package/build/esm/session.d.ts.map +1 -1
  215. package/build/esm/session.js +17 -0
  216. package/build/esm/session.js.map +1 -1
  217. package/build/esm/spec.d.ts +140 -0
  218. package/build/esm/spec.d.ts.map +1 -0
  219. package/build/esm/spec.js +501 -0
  220. package/build/esm/spec.js.map +1 -0
  221. package/build/esm/topology.d.ts +2 -2
  222. package/build/esm/topology.d.ts.map +1 -1
  223. package/build/esm/topology.js +2 -0
  224. package/build/esm/topology.js.map +1 -1
  225. package/build/esm/unproduced-events.d.ts +10 -0
  226. package/build/esm/unproduced-events.d.ts.map +1 -0
  227. package/build/esm/unproduced-events.js +32 -0
  228. package/build/esm/unproduced-events.js.map +1 -0
  229. package/build/esm/validate-design.d.ts +3 -3
  230. package/build/esm/validate-design.d.ts.map +1 -1
  231. package/build/esm/validate-design.js +41 -4
  232. package/build/esm/validate-design.js.map +1 -1
  233. package/build/tsconfig.tsbuildinfo +1 -1
  234. package/package.json +14 -4
  235. package/schema/map.schema.json +62 -1
@@ -0,0 +1,169 @@
1
+ import { isCommentIdAnchor, joinedNote } from './design.js';
2
+ import { proposedNodeId } from './apply-design.js';
3
+ import { canonicalEndpoint } from './edge-endpoints.js';
4
+ const edgeKey = (edge) => `${edge.from}|${edge.to}|${edge.kind}`;
5
+ // A modify's note folds in beside the proposal's own, so a note-only modify of a proposal is never lost.
6
+ function withSet(node, set, note) {
7
+ const next = { ...node };
8
+ const joined = joinedNote(node.note, note);
9
+ if (joined !== undefined)
10
+ next.note = joined;
11
+ if (set.label !== undefined)
12
+ next.label = set.label;
13
+ if (set.subdomain !== undefined)
14
+ next.subdomain = set.subdomain;
15
+ if (set.resourceKey !== undefined)
16
+ next.resourceKey = set.resourceKey;
17
+ if (set.queries !== undefined)
18
+ next.queries = set.queries;
19
+ if (set.rule !== undefined)
20
+ next.rule = set.rule;
21
+ if (set.errorCodes !== undefined)
22
+ next.errorCodes = [...set.errorCodes];
23
+ if (set.generic !== undefined)
24
+ next.generic = set.generic;
25
+ return next;
26
+ }
27
+ function anchorOf(anchor, idOf) {
28
+ if (anchor === null || anchor === undefined || isCommentIdAnchor(anchor))
29
+ return anchor;
30
+ if (typeof anchor === 'string')
31
+ return idOf(anchor);
32
+ return { ...anchor, from: idOf(anchor.from), to: idOf(anchor.to) };
33
+ }
34
+ function kpiOf(kpi, idOf) {
35
+ if (kpi.mode !== 'define' || kpi.definition.source.kind !== 'events')
36
+ return kpi;
37
+ const side = (events) => ({
38
+ ...events, esIds: events.esIds.flatMap(id => idOf(id) ?? [])
39
+ });
40
+ const { numerator, denominator } = kpi.definition.source;
41
+ return {
42
+ ...kpi,
43
+ definition: {
44
+ ...kpi.definition,
45
+ source: { ...kpi.definition.source, numerator: side(numerator), ...(denominator === undefined ? {} : { denominator: side(denominator) }) }
46
+ }
47
+ };
48
+ }
49
+ /** The map with each element id rewritten by `idOf`, and each reference to an element `idOf` drops (undefined) left out. */
50
+ function mapOf(map, idOf) {
51
+ const linked = (entries) => entries.flatMap(entry => {
52
+ const esId = idOf(entry.esId);
53
+ return esId === undefined ? [] : [{ ...entry, esId }];
54
+ });
55
+ return {
56
+ ...map,
57
+ links: linked(map.links),
58
+ coverage: linked(map.coverage),
59
+ observations: map.observations.map(observation => ({ ...observation, kpi: kpiOf(observation.kpi, idOf) })),
60
+ ...(map.review === undefined ? {} : { review: linked(map.review) })
61
+ };
62
+ }
63
+ export function effectiveDesignOf(design, map) {
64
+ const nodes = (design.propose?.nodes ?? []).map(node => ({ ...node }));
65
+ // Each live proposal's current id, to its index in `nodes`; the first proposal of an id is the one applyDesign keeps.
66
+ const live = new Map();
67
+ nodes.forEach((node, index) => {
68
+ const id = proposedNodeId(node);
69
+ if (!live.has(id))
70
+ live.set(id, index);
71
+ });
72
+ const proposedIds = new Set(live.keys());
73
+ const renamed = new Map();
74
+ const resolve = (id) => renamed.get(id) ?? id;
75
+ // An endpoint is resolved from the id it names as written, so a reference first becomes the id it was proposed as.
76
+ const endpoint = (id) => resolve(canonicalEndpoint(id, proposedIds) ?? id);
77
+ const modify = [];
78
+ for (const entry of design.modify ?? []) {
79
+ const id = resolve(entry.id);
80
+ const index = live.get(id);
81
+ if (index === undefined) {
82
+ modify.push(entry);
83
+ continue;
84
+ }
85
+ nodes[index] = withSet(nodes[index], entry.set ?? {}, entry.note);
86
+ const next = proposedNodeId(nodes[index]);
87
+ if (next === id)
88
+ continue;
89
+ live.delete(id);
90
+ if (!live.has(next))
91
+ live.set(next, index);
92
+ for (const [from, to] of renamed)
93
+ if (to === id)
94
+ renamed.set(from, next);
95
+ renamed.set(id, next);
96
+ }
97
+ const droppedNodes = new Set();
98
+ const dropped = new Set();
99
+ const writtenEdges = design.propose?.edges ?? [];
100
+ const proposedEdges = writtenEdges.map(edge => ({
101
+ ...edge,
102
+ from: endpoint(edge.from),
103
+ to: endpoint(edge.to),
104
+ ...(edge.handlers === undefined ? {} : { handlers: edge.handlers.map(endpoint) })
105
+ }));
106
+ // A removal drops the proposals it names as written; only when none is written so does it drop by the resolved
107
+ // endpoints. So removing a reference-form edge never also drops its correctly written twin.
108
+ const writtenKeys = writtenEdges.map(edge => edgeKey({ from: resolve(edge.from), to: resolve(edge.to), kind: edge.kind }));
109
+ const resolvedKeys = proposedEdges.map(edgeKey);
110
+ const droppedEdges = new Set();
111
+ const remove = [];
112
+ for (const entry of design.remove ?? []) {
113
+ if (entry.kind === 'node') {
114
+ const id = resolve(entry.id);
115
+ const index = live.get(id);
116
+ if (index === undefined) {
117
+ remove.push(entry);
118
+ continue;
119
+ }
120
+ live.delete(id);
121
+ droppedNodes.add(index);
122
+ dropped.add(id);
123
+ continue;
124
+ }
125
+ const written = edgeKey({ from: resolve(entry.from), to: resolve(entry.to), kind: entry.edgeKind });
126
+ const resolved = edgeKey({ from: endpoint(entry.from), to: endpoint(entry.to), kind: entry.edgeKind });
127
+ const asWritten = writtenKeys.flatMap((key, index) => key === written ? [index] : []);
128
+ const matched = asWritten.length > 0 ? asWritten : resolvedKeys.flatMap((key, index) => key === resolved ? [index] : []);
129
+ if (matched.length > 0)
130
+ matched.forEach(index => droppedEdges.add(index));
131
+ else
132
+ remove.push(entry);
133
+ }
134
+ const kept = new Set();
135
+ const edges = proposedEdges.flatMap((edge, index) => {
136
+ const key = edgeKey(edge);
137
+ if (droppedEdges.has(index) || dropped.has(edge.from) || dropped.has(edge.to) || kept.has(key))
138
+ return [];
139
+ kept.add(key);
140
+ if (edge.handlers === undefined)
141
+ return [edge];
142
+ const { handlers, ...artifactWide } = edge;
143
+ const scoped = handlers.filter(handler => !dropped.has(handler));
144
+ return [scoped.length > 0 ? { ...artifactWide, handlers: scoped } : artifactWide];
145
+ });
146
+ const proposedNodes = nodes.filter((_node, index) => !droppedNodes.has(index));
147
+ const comments = design.comments?.map(comment => ({ ...comment, anchor: anchorOf(comment.anchor, resolve) }));
148
+ const folds = {
149
+ propose: {
150
+ ...(design.propose?.nodes === undefined ? {} : { nodes: proposedNodes }),
151
+ ...(design.propose?.edges === undefined ? {} : { edges })
152
+ },
153
+ modify,
154
+ remove,
155
+ comments
156
+ };
157
+ // Each key where the design holds it, in its order, so the exported file differs from the replay only where it folds.
158
+ const folded = Object.fromEntries(Object.entries(design).map(([key, value]) => [key, key in folds ? folds[key] : value]));
159
+ return {
160
+ design: folded,
161
+ map: mapOf(map, id => {
162
+ const at = resolve(id);
163
+ return dropped.has(at) ? undefined : at;
164
+ }),
165
+ renamed,
166
+ dropped
167
+ };
168
+ }
169
+ //# sourceMappingURL=effective-design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-design.js","sourceRoot":"","sources":["../../src/effective-design.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { BlueprintGraph } from './graph.js';
2
- import { BlueprintNode } from './nodes.js';
1
+ import type { BlueprintGraph } from './graph.js';
2
+ import type { BlueprintNode } from './nodes.js';
3
3
  export type EntryPointIndex = {
4
4
  entryPoints: ReadonlySet<string>;
5
5
  crossSubdomainEntryPoints: ReadonlySet<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"entry-points.d.ts","sourceRoot":"","sources":["../../src/entry-points.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,0BAA0B,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,cAAc,EACrB,YAAW,WAAW,CAAC,MAAM,EAAE,aAAa,CAE3C,KACA,eA0CF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,OAAO,eAAe,EACtB,UAAS,gBAAqB,KAC7B,OAE2E,CAAC;AAE/E,eAAO,MAAM,cAAc,GACzB,IAAI,MAAM,EACV,OAAO,eAAe,EACtB,UAAS,gBAAqB,KAC7B,OAOA,CAAC"}
1
+ {"version":3,"file":"entry-points.d.ts","sourceRoot":"","sources":["../../src/entry-points.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,0BAA0B,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,cAAc,EACrB,YAAW,WAAW,CAAC,MAAM,EAAE,aAAa,CAE3C,KACA,eA0CF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,OAAO,eAAe,EACtB,UAAS,gBAAqB,KAC7B,OAE2E,CAAC;AAE/E,eAAO,MAAM,cAAc,GACzB,IAAI,MAAM,EACV,OAAO,eAAe,EACtB,UAAS,gBAAqB,KAC7B,OAOA,CAAC"}
@@ -1,5 +1,5 @@
1
- import { BlueprintEdge } from './edges.js';
2
- import { BlueprintNode } from './nodes.js';
3
- import { OrphanNode } from './diagnostics.js';
1
+ import type { BlueprintEdge } from './edges.js';
2
+ import type { BlueprintNode } from './nodes.js';
3
+ import type { OrphanNode } from './diagnostics.js';
4
4
  export declare function findOrphanNodes(nodes: BlueprintNode[], edges: BlueprintEdge[]): OrphanNode[];
5
5
  //# sourceMappingURL=find-orphan-nodes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-orphan-nodes.d.ts","sourceRoot":"","sources":["../../src/find-orphan-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,wBAAgB,eAAe,CAAE,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAI,UAAU,EAAE,CAU9F"}
1
+ {"version":3,"file":"find-orphan-nodes.d.ts","sourceRoot":"","sources":["../../src/find-orphan-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wBAAgB,eAAe,CAAE,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAI,UAAU,EAAE,CAU9F"}
@@ -1,6 +1,6 @@
1
- import { EdgeKind, BlueprintEdge } from './edges.js';
2
- import { BlueprintGraph } from './graph.js';
3
- import { BlueprintNode } from './nodes.js';
1
+ import type { EdgeKind, BlueprintEdge } from './edges.js';
2
+ import type { BlueprintGraph } from './graph.js';
3
+ import type { BlueprintNode } from './nodes.js';
4
4
  export declare const TRAVERSABLE_KINDS: ReadonlySet<EdgeKind>;
5
5
  export type CrossSubdomainMode = 'full' | 'leaf' | 'exclude';
6
6
  export type ScopedDataEdge = {
@@ -1 +1 @@
1
- {"version":3,"file":"flow-traversal.d.ts","sourceRoot":"","sources":["../../src/flow-traversal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,QAAQ,CAWjD,CAAC;AAEJ,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACjD,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC,CAAC;AAEF,wBAAgB,cAAc,CAAE,KAAK,EAAE,cAAc,GAAI,SAAS,CAiCjE;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,iBAAiB,GACtB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAkD7B;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC,EACrD,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAIT"}
1
+ {"version":3,"file":"flow-traversal.d.ts","sourceRoot":"","sources":["../../src/flow-traversal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,QAAQ,CAWjD,CAAC;AAEJ,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACjD,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC,CAAC;AAEF,wBAAgB,cAAc,CAAE,KAAK,EAAE,cAAc,GAAI,SAAS,CAiCjE;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,iBAAiB,GACtB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAkD7B;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC,EACrD,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAIT"}
@@ -0,0 +1,44 @@
1
+ import type { DecidedSource } from './map-vocabulary.js';
2
+ import type { GherkinStep, MapEntryId, MapFile, MapOptionId, MapScenario } from './map-structure.js';
3
+ /** Why a stored fork-derived scenario stops feeding tests until a human strikes or supersedes it. */
4
+ export type ScenarioReviewReason = 'option-changed' | 'reopened' | 'moot' | 'fork-gone' | 'walk-changed' | 'walk-gone';
5
+ /** `ready` when the walk carries given, when and then; `needs-gherkin` when it is prose. */
6
+ export type ForkScenarioState = 'ready' | 'needs-gherkin';
7
+ /** A virtual scenario a decided fork proposes; its key is read-only and never an entry id. */
8
+ export type ForkScenarioProposal = {
9
+ key: string;
10
+ forkId: MapEntryId;
11
+ optionId: MapOptionId;
12
+ walk: string;
13
+ source: DecidedSource;
14
+ state: ForkScenarioState;
15
+ title: string;
16
+ text: string;
17
+ anchors: MapEntryId[];
18
+ given: GherkinStep[];
19
+ when: GherkinStep[];
20
+ then: GherkinStep[];
21
+ };
22
+ /** A stored scenario with derivedFrom, and why it is under review; null when its fork still stands. */
23
+ export type DerivedScenarioJudgement = {
24
+ scenarioId: MapEntryId;
25
+ reviewReason: ScenarioReviewReason | null;
26
+ };
27
+ export type ForkScenarioReport = {
28
+ proposals: ForkScenarioProposal[];
29
+ derived: DerivedScenarioJudgement[];
30
+ };
31
+ /** What the join reads: the forks, and of each stored scenario only its id and derivation. */
32
+ export type ForkScenarioMap = Pick<MapFile, 'forks'> & {
33
+ scenarios: ReadonlyArray<Pick<MapScenario, 'id' | 'derivedFrom'>>;
34
+ };
35
+ /** Every virtual proposal's key starts with it; no entry id can, since a map id never holds a colon. */
36
+ export declare const FORK_SCENARIO_KEY_PREFIX = "derived:";
37
+ export declare const forkScenarioKey: (forkId: MapEntryId, optionId: MapOptionId, walk: string) => string;
38
+ /**
39
+ * Every decided, testable fork proposes one scenario per behavioural walk of its chosen option, in
40
+ * map order, unless a stored scenario already names that (fork, option, walk) in any status; and
41
+ * every stored scenario with derivedFrom is judged against its fork, in map order.
42
+ */
43
+ export declare function joinForkScenarios(map: ForkScenarioMap): ForkScenarioReport;
44
+ //# sourceMappingURL=fork-scenarios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork-scenarios.d.ts","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,OAAO,EAEP,WAAW,EAEX,WAAW,EAGZ,MAAM,oBAAoB,CAAC;AAO5B,qGAAqG;AACrG,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,WAAW,CAAC;AAEvH,4FAA4F;AAC5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,eAAe,CAAC;AAE1D,8FAA8F;AAC9F,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,OAAO,EAAE,wBAAwB,EAAE,CAAC;CACrC,CAAC;AAEF,8FAA8F;AAC9F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG;IAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAA;CAAE,CAAC;AAE7H,wGAAwG;AACxG,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,GAAK,QAAQ,UAAU,EAAE,UAAU,WAAW,EAAE,MAAM,MAAM,KAAI,MACxB,CAAC;AAgCrE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,eAAe,GAAI,kBAAkB,CAuC5E"}
@@ -0,0 +1,78 @@
1
+ /** Every virtual proposal's key starts with it; no entry id can, since a map id never holds a colon. */
2
+ export const FORK_SCENARIO_KEY_PREFIX = 'derived:';
3
+ export const forkScenarioKey = (forkId, optionId, walk) => `${FORK_SCENARIO_KEY_PREFIX}${forkId}/${optionId}/${walk}`;
4
+ const isStructural = (walk) => walk.kind === 'structural';
5
+ const hasGherkin = (walk) => walk.given !== undefined && walk.when !== undefined && walk.then !== undefined;
6
+ const stepsOf = (text) => text === undefined ? [] : [{ text }];
7
+ // The walk's fields a basis records; `kind` absent reads as behavioral, so spelling it out changes nothing.
8
+ const sameWalk = (walk, basis) => walk.text === basis.text
9
+ && isStructural(walk) === isStructural(basis)
10
+ && walk.given === basis.given
11
+ && walk.when === basis.when
12
+ && walk.then === basis.then;
13
+ function reviewReasonOf(derivedFrom, forks) {
14
+ const fork = forks.get(derivedFrom.forkId);
15
+ if (fork === undefined)
16
+ return 'fork-gone';
17
+ if (fork.status.kind === 'open')
18
+ return 'reopened';
19
+ if (fork.status.kind === 'moot')
20
+ return 'moot';
21
+ if (fork.status.option !== derivedFrom.optionId)
22
+ return 'option-changed';
23
+ // A derivation from before ESAS-296 names no walk; it is judged on its fork and option alone.
24
+ if (derivedFrom.walk === undefined)
25
+ return null;
26
+ const option = fork.card?.options.find(candidate => candidate.id === derivedFrom.optionId);
27
+ const walk = option?.walks.find(candidate => candidate.scenario === derivedFrom.walk);
28
+ if (walk === undefined)
29
+ return 'walk-gone';
30
+ if (derivedFrom.basis !== undefined && !sameWalk(walk, derivedFrom.basis))
31
+ return 'walk-changed';
32
+ return null;
33
+ }
34
+ /**
35
+ * Every decided, testable fork proposes one scenario per behavioural walk of its chosen option, in
36
+ * map order, unless a stored scenario already names that (fork, option, walk) in any status; and
37
+ * every stored scenario with derivedFrom is judged against its fork, in map order.
38
+ */
39
+ export function joinForkScenarios(map) {
40
+ const stored = new Set(map.scenarios.flatMap(({ derivedFrom }) => derivedFrom?.walk === undefined
41
+ ? []
42
+ : [forkScenarioKey(derivedFrom.forkId, derivedFrom.optionId, derivedFrom.walk)]));
43
+ const proposals = [];
44
+ for (const fork of map.forks) {
45
+ const status = fork.status;
46
+ if (status.kind !== 'decided' || fork.testable === false)
47
+ continue;
48
+ const chosenWalks = (fork.card?.options ?? [])
49
+ .filter(option => option.id === status.option)
50
+ .flatMap(option => option.walks);
51
+ for (const walk of chosenWalks) {
52
+ const key = forkScenarioKey(fork.id, status.option, walk.scenario);
53
+ if (isStructural(walk) || stored.has(key))
54
+ continue;
55
+ const ready = hasGherkin(walk);
56
+ proposals.push({
57
+ key,
58
+ forkId: fork.id,
59
+ optionId: status.option,
60
+ walk: walk.scenario,
61
+ source: status.source,
62
+ state: ready ? 'ready' : 'needs-gherkin',
63
+ title: walk.scenario,
64
+ text: walk.text,
65
+ anchors: [fork.anchor ?? fork.id],
66
+ given: ready ? stepsOf(walk.given) : [],
67
+ when: ready ? stepsOf(walk.when) : [],
68
+ then: ready ? stepsOf(walk.then) : []
69
+ });
70
+ }
71
+ }
72
+ const forks = new Map(map.forks.map(fork => [fork.id, fork]));
73
+ const derived = map.scenarios.flatMap(({ id, derivedFrom }) => derivedFrom === undefined
74
+ ? []
75
+ : [{ scenarioId: id, reviewReason: reviewReasonOf(derivedFrom, forks) }]);
76
+ return { proposals, derived };
77
+ }
78
+ //# sourceMappingURL=fork-scenarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork-scenarios.js","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,40 @@
1
- import { BlueprintEdge } from './edges.js';
2
- import { BlueprintNode, NodeType } from './nodes.js';
1
+ import type { BlueprintEdge } from './edges.js';
2
+ import { type BlueprintNode, type NodeType } from './nodes.js';
3
3
  export type SchemaVersion = 1;
4
+ /**
5
+ * The type words a repository's code names end in, by node type, as the repository declares them
6
+ * (`{ "aggregate": "Aggregate" }`). They are the repository's convention, never Blueprint's: its
7
+ * extractor writes them on the graph, and Blueprint tolerates exactly those. A label carries no type
8
+ * word by guarantee, so a node proposed as `Greeter` is realized by the code named `GreeterAggregate`
9
+ * ({@link codeNodeId}).
10
+ */
11
+ export type TypeWords = Partial<Record<NodeType, string>>;
4
12
  export type BlueprintGraph = {
5
13
  schemaVersion: SchemaVersion;
6
14
  subdomains: string[];
7
15
  nodes: BlueprintNode[];
8
16
  edges: BlueprintEdge[];
17
+ typeWords?: TypeWords;
9
18
  };
10
19
  export declare function emptyGraph(): BlueprintGraph;
11
20
  export declare function slugify(label: string): string;
12
21
  export declare function nodeId(subdomain: string, type: NodeType, label: string): string;
22
+ /** The type words a graph carries, each a string with a letter or digit; anything else in the field is ignored. */
23
+ export declare function typeWordsOf(graph: Pick<BlueprintGraph, 'typeWords'>): TypeWords | undefined;
24
+ /**
25
+ * The name the code of a node labelled `label` carries when its type's word is `word`: the label
26
+ * without the word it may end in, in PascalCase, then the word once. `Greeter` and `Greeter
27
+ * Aggregate` are both `GreeterAggregate`. The label ends in the word when its last letters and
28
+ * digits spell it, case and anything between them aside (`Orders Read Model` ends in `Readmodel`);
29
+ * a label that is nothing but the word keeps it.
30
+ */
31
+ export declare function codeName(label: string, word: string): string;
32
+ /**
33
+ * The id the code of a node proposed as (`subdomain`, `type`, `label`) extracts to when the
34
+ * repository declares a type word for `type`: the id of its {@link codeName}. `undefined` when the
35
+ * repository declares none for the type, so a proposal is realized by its own id alone.
36
+ */
37
+ export declare function codeNodeId(subdomain: string, type: NodeType, label: string, typeWords: TypeWords | undefined): string | undefined;
13
38
  export type ParsedNodeId = {
14
39
  subdomain: string;
15
40
  type: NodeType;
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAoC,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEvF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC;AAE9B,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,UAAU,IAAI,cAAc,CAE3C;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAO/C;AAED,wBAAgB,MAAM,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAEjF;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,WAAW,CAAE,EAAE,EAAE,MAAM,GAAI,YAAY,GAAG,SAAS,CAOlE"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAoC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC;AAE9B;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,wBAAgB,UAAU,IAAI,cAAc,CAE3C;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAO/C;AAED,wBAAgB,MAAM,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAEjF;AAED,mHAAmH;AACnH,wBAAgB,WAAW,CAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAI,SAAS,GAAG,SAAS,CAM7F;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAI,MAAM,CAQ9D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAGpB;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,WAAW,CAAE,EAAE,EAAE,MAAM,GAAI,YAAY,GAAG,SAAS,CAOlE"}
@@ -13,6 +13,39 @@ export function slugify(label) {
13
13
  export function nodeId(subdomain, type, label) {
14
14
  return `${slugify(subdomain)}_${NODE_ABBREV[type]}_${slugify(label)}`;
15
15
  }
16
+ /** The type words a graph carries, each a string with a letter or digit; anything else in the field is ignored. */
17
+ export function typeWordsOf(graph) {
18
+ const declared = graph.typeWords;
19
+ if (declared === null || typeof declared !== 'object' || Array.isArray(declared))
20
+ return undefined;
21
+ const words = Object.entries(declared).filter((entry) => Object.prototype.hasOwnProperty.call(NODE_ABBREV, entry[0]) && typeof entry[1] === 'string' && /[a-zA-Z0-9]/.test(entry[1]));
22
+ return words.length > 0 ? Object.fromEntries(words) : undefined;
23
+ }
24
+ /**
25
+ * The name the code of a node labelled `label` carries when its type's word is `word`: the label
26
+ * without the word it may end in, in PascalCase, then the word once. `Greeter` and `Greeter
27
+ * Aggregate` are both `GreeterAggregate`. The label ends in the word when its last letters and
28
+ * digits spell it, case and anything between them aside (`Orders Read Model` ends in `Readmodel`);
29
+ * a label that is nothing but the word keeps it.
30
+ */
31
+ export function codeName(label, word) {
32
+ const letters = [...word.replace(/[^a-zA-Z0-9]/g, '')];
33
+ const tail = new RegExp(`[^a-zA-Z0-9]*${letters.join('[^a-zA-Z0-9]*')}$`, 'i');
34
+ const stripped = label.replace(tail, '');
35
+ const bare = slugify(stripped) === '' ? label : stripped;
36
+ const pascal = slugify(bare).split('-').filter(Boolean)
37
+ .map(segment => segment.charAt(0).toUpperCase() + segment.slice(1)).join('');
38
+ return `${pascal}${word}`;
39
+ }
40
+ /**
41
+ * The id the code of a node proposed as (`subdomain`, `type`, `label`) extracts to when the
42
+ * repository declares a type word for `type`: the id of its {@link codeName}. `undefined` when the
43
+ * repository declares none for the type, so a proposal is realized by its own id alone.
44
+ */
45
+ export function codeNodeId(subdomain, type, label, typeWords) {
46
+ const word = typeWords?.[type];
47
+ return word === undefined ? undefined : nodeId(subdomain, type, codeName(label, word));
48
+ }
16
49
  export function parseNodeId(id) {
17
50
  const segments = id.split('_');
18
51
  if (segments.length !== 3)
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,WAAW,EAAE,mBAAmB,EAAY,MAAM,YAAY,CAAC;AAWvF,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,OAAO,CAAE,KAAa;IACpC,OAAO,KAAK;SACT,OAAO,CAAE,oBAAoB,EAAE,OAAO,CAAE;SACxC,OAAO,CAAE,uBAAuB,EAAE,OAAO,CAAE;SAC3C,OAAO,CAAE,gBAAgB,EAAE,GAAG,CAAE;SAChC,OAAO,CAAE,UAAU,EAAE,EAAE,CAAE;SACzB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,MAAM,CAAE,SAAiB,EAAE,IAAc,EAAE,KAAa;IACtE,OAAO,GAAI,OAAO,CAAE,SAAS,CAAG,IAAK,WAAW,CAAE,IAAI,CAAG,IAAK,OAAO,CAAE,KAAK,CAAG,EAAE,CAAC;AACpF,CAAC;AAQD,MAAM,UAAU,WAAW,CAAE,EAAU;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAE,GAAG,CAAE,CAAC;IACjC,IAAK,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAG,OAAO,SAAS,CAAC;IAC9C,MAAM,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAE,GAAG,QAAQ,CAAC;IAC7C,MAAM,IAAI,GAAG,mBAAmB,CAAE,MAAM,CAAE,CAAC;IAC3C,IAAK,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAG,OAAO,SAAS,CAAC;IAC1F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { HandlerScopeIssue } from './diagnostics.js';
2
- import { EdgeKind } from './edges.js';
3
- import { BlueprintNode, NodeType } from './nodes.js';
1
+ import type { HandlerScopeIssue } from './diagnostics.js';
2
+ import type { EdgeKind } from './edges.js';
3
+ import type { BlueprintNode, NodeType } from './nodes.js';
4
4
  export type HandlerAttachment = {
5
5
  discriminator: NodeType;
6
6
  via: EdgeKind;
@@ -1 +1 @@
1
- {"version":3,"file":"handler-scope.d.ts","sourceRoot":"","sources":["../../src/handler-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,QAAQ,CAAC;IACxB,GAAG,EAAE,QAAQ,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAKtF,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC,CAAC;AAKF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC9B,KAAK,EAAE,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAC5D,iBAAiB,CAenB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACvC,KAAK,EAAE,iBAAiB,GACvB,kBAAkB,CA4BpB"}
1
+ {"version":3,"file":"handler-scope.d.ts","sourceRoot":"","sources":["../../src/handler-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,QAAQ,CAAC;IACxB,GAAG,EAAE,QAAQ,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAKtF,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC,CAAC;AAKF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC9B,KAAK,EAAE,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GAC5D,iBAAiB,CAenB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACvC,KAAK,EAAE,iBAAiB,GACvB,kBAAkB,CA4BpB"}
@@ -9,19 +9,28 @@ export * from './entry-points.js';
9
9
  export * from './diagnostics.js';
10
10
  export * from './overrides.js';
11
11
  export * from './find-orphan-nodes.js';
12
+ export * from './unproduced-events.js';
12
13
  export * from './apply-overrides.js';
13
14
  export * from './design.js';
14
15
  export * from './ops.js';
15
16
  export * from './op-chain.js';
16
17
  export * from './validate-design.js';
17
18
  export * from './apply-design.js';
19
+ export * from './effective-design.js';
20
+ export * from './edge-endpoints.js';
18
21
  export * from './reality-check.js';
19
22
  export * from './convergence.js';
20
23
  export * from './replication.js';
21
24
  export * from './session.js';
25
+ export * from './session-phase.js';
22
26
  export * from './organisation.js';
23
27
  export * from './retention.js';
24
28
  export * from './map-vocabulary.js';
25
29
  export * from './map-structure.js';
26
30
  export * from './map-links.js';
31
+ export * from './coverage-links.js';
32
+ export * from './card-channel.js';
33
+ export * from './fork-scenarios.js';
34
+ export * from './invariants.js';
35
+ export * from './spec.js';
27
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
@@ -9,19 +9,28 @@ export * from './entry-points.js';
9
9
  export * from './diagnostics.js';
10
10
  export * from './overrides.js';
11
11
  export * from './find-orphan-nodes.js';
12
+ export * from './unproduced-events.js';
12
13
  export * from './apply-overrides.js';
13
14
  export * from './design.js';
14
15
  export * from './ops.js';
15
16
  export * from './op-chain.js';
16
17
  export * from './validate-design.js';
17
18
  export * from './apply-design.js';
19
+ export * from './effective-design.js';
20
+ export * from './edge-endpoints.js';
18
21
  export * from './reality-check.js';
19
22
  export * from './convergence.js';
20
23
  export * from './replication.js';
21
24
  export * from './session.js';
25
+ export * from './session-phase.js';
22
26
  export * from './organisation.js';
23
27
  export * from './retention.js';
24
28
  export * from './map-vocabulary.js';
25
29
  export * from './map-structure.js';
26
30
  export * from './map-links.js';
31
+ export * from './coverage-links.js';
32
+ export * from './card-channel.js';
33
+ export * from './fork-scenarios.js';
34
+ export * from './invariants.js';
35
+ export * from './spec.js';
27
36
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { CoverageReport } from './coverage-links.js';
2
+ import type { BlueprintEdge } from './edges.js';
3
+ import type { MapEntryId } from './map-structure.js';
4
+ import type { BlueprintNode } from './nodes.js';
5
+ /**
6
+ * ESAS-305: what the board says about one invariant, judged on read. `unproven` when no scenario
7
+ * covers it; `indistinct` when it is covered but its rejection cannot be told apart from another
8
+ * rule's on a command it guards: it has no error code, or one other invariant guarding one of the
9
+ * same commands carries every one of its codes.
10
+ */
11
+ export type InvariantJudgement = {
12
+ coveredBy: MapEntryId[];
13
+ unproven: boolean;
14
+ indistinct: boolean;
15
+ };
16
+ export type InvariantGraph = {
17
+ nodes: ReadonlyArray<Pick<BlueprintNode, 'id' | 'type' | 'status' | 'errorCodes'>>;
18
+ edges: ReadonlyArray<Pick<BlueprintEdge, 'from' | 'to' | 'kind' | 'status'>>;
19
+ };
20
+ /**
21
+ * Judges every invariant of the merged graph against the coverage join (joinCoverageLinks). Pure:
22
+ * it reads its inputs and returns a fresh record keyed by invariant id; it never refuses a write
23
+ * (ADR-106). A removed invariant or a removed guarded-by edge takes no part.
24
+ */
25
+ export declare function judgeInvariants(merged: InvariantGraph, coverage: Pick<CoverageReport, 'coveredBy'>): Record<string, InvariantJudgement>;
26
+ //# sourceMappingURL=invariants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../../src/invariants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;IACnF,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;CAC9E,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CA6BpC"}