@bett3r-dev/blueprint-schema 1.6.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 (221) hide show
  1. package/README.md +7 -0
  2. package/build/cjs/apply-design.d.ts +22 -0
  3. package/build/cjs/apply-design.d.ts.map +1 -0
  4. package/build/cjs/apply-design.js +206 -0
  5. package/build/cjs/apply-design.js.map +1 -0
  6. package/build/cjs/apply-overrides.d.ts +11 -0
  7. package/build/cjs/apply-overrides.d.ts.map +1 -0
  8. package/build/cjs/apply-overrides.js +240 -0
  9. package/build/cjs/apply-overrides.js.map +1 -0
  10. package/build/cjs/convergence.d.ts +15 -0
  11. package/build/cjs/convergence.d.ts.map +1 -0
  12. package/build/cjs/convergence.js +28 -0
  13. package/build/cjs/convergence.js.map +1 -0
  14. package/build/cjs/design.d.ts +85 -0
  15. package/build/cjs/design.d.ts.map +1 -0
  16. package/build/cjs/design.js +51 -0
  17. package/build/cjs/design.js.map +1 -0
  18. package/build/cjs/diagnostics.d.ts +74 -0
  19. package/build/cjs/diagnostics.d.ts.map +1 -0
  20. package/build/cjs/diagnostics.js +16 -0
  21. package/build/cjs/diagnostics.js.map +1 -0
  22. package/build/cjs/edges.d.ts +17 -0
  23. package/build/cjs/edges.d.ts.map +1 -0
  24. package/build/cjs/edges.js +21 -0
  25. package/build/cjs/edges.js.map +1 -0
  26. package/build/cjs/entry-points.d.ts +17 -0
  27. package/build/cjs/entry-points.d.ts.map +1 -0
  28. package/build/cjs/entry-points.js +58 -0
  29. package/build/cjs/entry-points.js.map +1 -0
  30. package/build/cjs/find-orphan-nodes.d.ts +5 -0
  31. package/build/cjs/find-orphan-nodes.d.ts.map +1 -0
  32. package/build/cjs/find-orphan-nodes.js +14 -0
  33. package/build/cjs/find-orphan-nodes.js.map +1 -0
  34. package/build/cjs/flow-traversal.d.ts +24 -0
  35. package/build/cjs/flow-traversal.d.ts.map +1 -0
  36. package/build/cjs/flow-traversal.js +102 -0
  37. package/build/cjs/flow-traversal.js.map +1 -0
  38. package/build/cjs/graph.d.ts +19 -0
  39. package/build/cjs/graph.d.ts.map +1 -0
  40. package/build/cjs/graph.js +32 -0
  41. package/build/cjs/graph.js.map +1 -0
  42. package/build/cjs/handler-scope.d.ts +27 -0
  43. package/build/cjs/handler-scope.d.ts.map +1 -0
  44. package/build/cjs/handler-scope.js +54 -0
  45. package/build/cjs/handler-scope.js.map +1 -0
  46. package/build/cjs/index.d.ts +27 -0
  47. package/build/cjs/index.d.ts.map +1 -0
  48. package/build/cjs/index.js +43 -0
  49. package/build/cjs/index.js.map +1 -0
  50. package/build/cjs/map-links.d.ts +12 -0
  51. package/build/cjs/map-links.d.ts.map +1 -0
  52. package/build/cjs/map-links.js +59 -0
  53. package/build/cjs/map-links.js.map +1 -0
  54. package/build/cjs/map-structure.d.ts +110 -0
  55. package/build/cjs/map-structure.d.ts.map +1 -0
  56. package/build/cjs/map-structure.js +54 -0
  57. package/build/cjs/map-structure.js.map +1 -0
  58. package/build/cjs/map-vocabulary.d.ts +53 -0
  59. package/build/cjs/map-vocabulary.d.ts.map +1 -0
  60. package/build/cjs/map-vocabulary.js +156 -0
  61. package/build/cjs/map-vocabulary.js.map +1 -0
  62. package/build/cjs/nodes.d.ts +39 -0
  63. package/build/cjs/nodes.d.ts.map +1 -0
  64. package/build/cjs/nodes.js +31 -0
  65. package/build/cjs/nodes.js.map +1 -0
  66. package/build/cjs/op-chain.d.ts +18 -0
  67. package/build/cjs/op-chain.d.ts.map +1 -0
  68. package/build/cjs/op-chain.js +42 -0
  69. package/build/cjs/op-chain.js.map +1 -0
  70. package/build/cjs/ops.d.ts +158 -0
  71. package/build/cjs/ops.d.ts.map +1 -0
  72. package/build/cjs/ops.js +11 -0
  73. package/build/cjs/ops.js.map +1 -0
  74. package/build/cjs/organisation.d.ts +10 -0
  75. package/build/cjs/organisation.d.ts.map +1 -0
  76. package/build/cjs/organisation.js +21 -0
  77. package/build/cjs/organisation.js.map +1 -0
  78. package/build/cjs/overrides.d.ts +74 -0
  79. package/build/cjs/overrides.d.ts.map +1 -0
  80. package/build/cjs/overrides.js +20 -0
  81. package/build/cjs/overrides.js.map +1 -0
  82. package/build/cjs/reachability.d.ts +27 -0
  83. package/build/cjs/reachability.d.ts.map +1 -0
  84. package/build/cjs/reachability.js +218 -0
  85. package/build/cjs/reachability.js.map +1 -0
  86. package/build/cjs/reality-check.d.ts +42 -0
  87. package/build/cjs/reality-check.d.ts.map +1 -0
  88. package/build/cjs/reality-check.js +191 -0
  89. package/build/cjs/reality-check.js.map +1 -0
  90. package/build/cjs/replication.d.ts +7 -0
  91. package/build/cjs/replication.d.ts.map +1 -0
  92. package/build/cjs/replication.js +19 -0
  93. package/build/cjs/replication.js.map +1 -0
  94. package/build/cjs/retention.d.ts +11 -0
  95. package/build/cjs/retention.d.ts.map +1 -0
  96. package/build/cjs/retention.js +22 -0
  97. package/build/cjs/retention.js.map +1 -0
  98. package/build/cjs/session.d.ts +45 -0
  99. package/build/cjs/session.d.ts.map +1 -0
  100. package/build/cjs/session.js +55 -0
  101. package/build/cjs/session.js.map +1 -0
  102. package/build/cjs/topology.d.ts +12 -0
  103. package/build/cjs/topology.d.ts.map +1 -0
  104. package/build/cjs/topology.js +48 -0
  105. package/build/cjs/topology.js.map +1 -0
  106. package/build/cjs/validate-design.d.ts +22 -0
  107. package/build/cjs/validate-design.d.ts.map +1 -0
  108. package/build/cjs/validate-design.js +576 -0
  109. package/build/cjs/validate-design.js.map +1 -0
  110. package/build/esm/apply-design.d.ts +22 -0
  111. package/build/esm/apply-design.d.ts.map +1 -0
  112. package/build/esm/apply-design.js +202 -0
  113. package/build/esm/apply-design.js.map +1 -0
  114. package/build/esm/apply-overrides.d.ts +11 -0
  115. package/build/esm/apply-overrides.d.ts.map +1 -0
  116. package/build/esm/apply-overrides.js +235 -0
  117. package/build/esm/apply-overrides.js.map +1 -0
  118. package/build/esm/convergence.d.ts +15 -0
  119. package/build/esm/convergence.d.ts.map +1 -0
  120. package/build/esm/convergence.js +25 -0
  121. package/build/esm/convergence.js.map +1 -0
  122. package/build/esm/design.d.ts +85 -0
  123. package/build/esm/design.d.ts.map +1 -0
  124. package/build/esm/design.js +43 -0
  125. package/build/esm/design.js.map +1 -0
  126. package/build/esm/diagnostics.d.ts +74 -0
  127. package/build/esm/diagnostics.d.ts.map +1 -0
  128. package/build/esm/diagnostics.js +13 -0
  129. package/build/esm/diagnostics.js.map +1 -0
  130. package/build/esm/edges.d.ts +17 -0
  131. package/build/esm/edges.d.ts.map +1 -0
  132. package/build/esm/edges.js +18 -0
  133. package/build/esm/edges.js.map +1 -0
  134. package/build/esm/entry-points.d.ts +17 -0
  135. package/build/esm/entry-points.d.ts.map +1 -0
  136. package/build/esm/entry-points.js +52 -0
  137. package/build/esm/entry-points.js.map +1 -0
  138. package/build/esm/find-orphan-nodes.d.ts +5 -0
  139. package/build/esm/find-orphan-nodes.d.ts.map +1 -0
  140. package/build/esm/find-orphan-nodes.js +11 -0
  141. package/build/esm/find-orphan-nodes.js.map +1 -0
  142. package/build/esm/flow-traversal.d.ts +24 -0
  143. package/build/esm/flow-traversal.d.ts.map +1 -0
  144. package/build/esm/flow-traversal.js +96 -0
  145. package/build/esm/flow-traversal.js.map +1 -0
  146. package/build/esm/graph.d.ts +19 -0
  147. package/build/esm/graph.d.ts.map +1 -0
  148. package/build/esm/graph.js +26 -0
  149. package/build/esm/graph.js.map +1 -0
  150. package/build/esm/handler-scope.d.ts +27 -0
  151. package/build/esm/handler-scope.d.ts.map +1 -0
  152. package/build/esm/handler-scope.js +49 -0
  153. package/build/esm/handler-scope.js.map +1 -0
  154. package/build/esm/index.d.ts +27 -0
  155. package/build/esm/index.d.ts.map +1 -0
  156. package/build/esm/index.js +27 -0
  157. package/build/esm/index.js.map +1 -0
  158. package/build/esm/map-links.d.ts +12 -0
  159. package/build/esm/map-links.d.ts.map +1 -0
  160. package/build/esm/map-links.js +56 -0
  161. package/build/esm/map-links.js.map +1 -0
  162. package/build/esm/map-structure.d.ts +110 -0
  163. package/build/esm/map-structure.d.ts.map +1 -0
  164. package/build/esm/map-structure.js +46 -0
  165. package/build/esm/map-structure.js.map +1 -0
  166. package/build/esm/map-vocabulary.d.ts +53 -0
  167. package/build/esm/map-vocabulary.d.ts.map +1 -0
  168. package/build/esm/map-vocabulary.js +146 -0
  169. package/build/esm/map-vocabulary.js.map +1 -0
  170. package/build/esm/nodes.d.ts +39 -0
  171. package/build/esm/nodes.d.ts.map +1 -0
  172. package/build/esm/nodes.js +28 -0
  173. package/build/esm/nodes.js.map +1 -0
  174. package/build/esm/op-chain.d.ts +18 -0
  175. package/build/esm/op-chain.d.ts.map +1 -0
  176. package/build/esm/op-chain.js +36 -0
  177. package/build/esm/op-chain.js.map +1 -0
  178. package/build/esm/ops.d.ts +158 -0
  179. package/build/esm/ops.d.ts.map +1 -0
  180. package/build/esm/ops.js +7 -0
  181. package/build/esm/ops.js.map +1 -0
  182. package/build/esm/organisation.d.ts +10 -0
  183. package/build/esm/organisation.d.ts.map +1 -0
  184. package/build/esm/organisation.js +16 -0
  185. package/build/esm/organisation.js.map +1 -0
  186. package/build/esm/overrides.d.ts +74 -0
  187. package/build/esm/overrides.d.ts.map +1 -0
  188. package/build/esm/overrides.js +15 -0
  189. package/build/esm/overrides.js.map +1 -0
  190. package/build/esm/package.json +1 -0
  191. package/build/esm/reachability.d.ts +27 -0
  192. package/build/esm/reachability.d.ts.map +1 -0
  193. package/build/esm/reachability.js +212 -0
  194. package/build/esm/reachability.js.map +1 -0
  195. package/build/esm/reality-check.d.ts +42 -0
  196. package/build/esm/reality-check.d.ts.map +1 -0
  197. package/build/esm/reality-check.js +185 -0
  198. package/build/esm/reality-check.js.map +1 -0
  199. package/build/esm/replication.d.ts +7 -0
  200. package/build/esm/replication.d.ts.map +1 -0
  201. package/build/esm/replication.js +15 -0
  202. package/build/esm/replication.js.map +1 -0
  203. package/build/esm/retention.d.ts +11 -0
  204. package/build/esm/retention.d.ts.map +1 -0
  205. package/build/esm/retention.js +17 -0
  206. package/build/esm/retention.js.map +1 -0
  207. package/build/esm/session.d.ts +45 -0
  208. package/build/esm/session.d.ts.map +1 -0
  209. package/build/esm/session.js +49 -0
  210. package/build/esm/session.js.map +1 -0
  211. package/build/esm/topology.d.ts +12 -0
  212. package/build/esm/topology.d.ts.map +1 -0
  213. package/build/esm/topology.js +43 -0
  214. package/build/esm/topology.js.map +1 -0
  215. package/build/esm/validate-design.d.ts +22 -0
  216. package/build/esm/validate-design.d.ts.map +1 -0
  217. package/build/esm/validate-design.js +572 -0
  218. package/build/esm/validate-design.js.map +1 -0
  219. package/build/tsconfig.tsbuildinfo +1 -0
  220. package/package.json +37 -0
  221. package/schema/map.schema.json +44 -0
@@ -0,0 +1,576 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DESIGN_ISSUE_CLASS = void 0;
4
+ exports.validateDesign = validateDesign;
5
+ const edges_js_1 = require("./edges.js");
6
+ const handler_scope_js_1 = require("./handler-scope.js");
7
+ const design_js_1 = require("./design.js");
8
+ const apply_overrides_js_1 = require("./apply-overrides.js");
9
+ const graph_js_1 = require("./graph.js");
10
+ const nodes_js_1 = require("./nodes.js");
11
+ const overrides_js_1 = require("./overrides.js");
12
+ const topology_js_1 = require("./topology.js");
13
+ exports.DESIGN_ISSUE_CLASS = {
14
+ UNSUPPORTED_SCHEMA_VERSION: 'malformed',
15
+ MALFORMED_ENTRY: 'malformed',
16
+ UNKNOWN_NODE_TYPE: 'malformed',
17
+ UNKNOWN_EDGE_KIND: 'malformed',
18
+ UNMODIFIABLE_FIELD: 'malformed',
19
+ DUPLICATE_COMMENT_ID: 'malformed',
20
+ TOPOLOGY_VIOLATION: 'incoherent',
21
+ DUPLICATE_IDENTITY: 'incoherent',
22
+ EDGE_TARGETS_REMOVED: 'incoherent',
23
+ UNRESOLVED_TARGET: 'incoherent',
24
+ UNRESOLVED_EDGE_ENDPOINT: 'incoherent',
25
+ INVALID_EDGE_HANDLER: 'incoherent'
26
+ };
27
+ function splitByClass(issues) {
28
+ const malformed = [];
29
+ const incoherent = [];
30
+ for (const issue of issues) {
31
+ (exports.DESIGN_ISSUE_CLASS[issue.code] === 'malformed' ? malformed : incoherent).push(issue);
32
+ }
33
+ return { malformed, incoherent };
34
+ }
35
+ function isFilledString(value) {
36
+ return typeof value === 'string' && value.trim().length > 0;
37
+ }
38
+ function checkAttribution(entry, path, issues) {
39
+ if (entry.author !== 'human' && entry.author !== 'ai') {
40
+ issues.push({
41
+ code: 'MALFORMED_ENTRY',
42
+ path,
43
+ message: `${path}.author must be 'human' or 'ai', got ${JSON.stringify(entry.author)}`
44
+ });
45
+ }
46
+ if (!isFilledString(entry.ts)) {
47
+ issues.push({
48
+ code: 'MALFORMED_ENTRY',
49
+ path,
50
+ message: `${path}.ts must be a non-empty ISO-8601 timestamp`
51
+ });
52
+ }
53
+ }
54
+ function checkProposedNode(node, path, issues) {
55
+ if (!nodes_js_1.NODE_TYPES.includes(node.type)) {
56
+ issues.push({
57
+ code: 'UNKNOWN_NODE_TYPE',
58
+ path,
59
+ message: `${path}.type ${JSON.stringify(node.type)} is not an BLUEPRINT node type`
60
+ });
61
+ }
62
+ if (!isFilledString(node.label)) {
63
+ issues.push({
64
+ code: 'MALFORMED_ENTRY',
65
+ path,
66
+ message: `${path}.label must be a non-empty string`
67
+ });
68
+ }
69
+ if (!isFilledString(node.subdomain)) {
70
+ issues.push({
71
+ code: 'MALFORMED_ENTRY',
72
+ path,
73
+ message: `${path}.subdomain must be a non-empty string`
74
+ });
75
+ }
76
+ checkAttribution(node, path, issues);
77
+ }
78
+ function checkModifyEntry(entry, path, issues) {
79
+ checkAttribution(entry, path, issues);
80
+ if (!isFilledString(entry.id)) {
81
+ issues.push({
82
+ code: 'MALFORMED_ENTRY',
83
+ path,
84
+ message: `${path}.id must be the id of the element to modify`
85
+ });
86
+ }
87
+ const set = entry.set;
88
+ if (typeof set !== 'object' || set === null || Array.isArray(set)) {
89
+ issues.push({
90
+ code: 'MALFORMED_ENTRY',
91
+ path,
92
+ message: `${path}.set must be an object of fields to overwrite`
93
+ });
94
+ return;
95
+ }
96
+ const fields = Object.keys(set);
97
+ if (fields.length === 0) {
98
+ issues.push({
99
+ code: 'MALFORMED_ENTRY',
100
+ path,
101
+ message: `${path}.set must change at least one field`
102
+ });
103
+ }
104
+ for (const field of fields) {
105
+ if (design_js_1.MODIFIABLE_NODE_FIELDS.includes(field))
106
+ continue;
107
+ issues.push({
108
+ code: 'UNMODIFIABLE_FIELD',
109
+ path,
110
+ message: `${path}.set may not change ${JSON.stringify(field)} — modifiable fields are `
111
+ + `${design_js_1.MODIFIABLE_NODE_FIELDS.join(', ')}; changing an element's type or id is `
112
+ + 'a remove + a propose, never a modify'
113
+ });
114
+ }
115
+ const values = set;
116
+ for (const field of ['label', 'subdomain', 'resourceKey']) {
117
+ if (values[field] !== undefined && !isFilledString(values[field])) {
118
+ issues.push({
119
+ code: 'MALFORMED_ENTRY',
120
+ path,
121
+ message: `${path}.set.${field} must be a non-empty string`
122
+ });
123
+ }
124
+ }
125
+ if (values.queries !== undefined && !Array.isArray(values.queries)) {
126
+ issues.push({
127
+ code: 'MALFORMED_ENTRY',
128
+ path,
129
+ message: `${path}.set.queries must be an array of read-model queries`
130
+ });
131
+ }
132
+ }
133
+ function checkRemoveEntry(entry, path, issues) {
134
+ checkAttribution(entry, path, issues);
135
+ if (entry.kind === 'node') {
136
+ if (!isFilledString(entry.id)) {
137
+ issues.push({
138
+ code: 'MALFORMED_ENTRY',
139
+ path,
140
+ message: `${path}.id must be the id of the node to remove`
141
+ });
142
+ }
143
+ return;
144
+ }
145
+ if (entry.kind === 'edge') {
146
+ if (!isFilledString(entry.from) || !isFilledString(entry.to)) {
147
+ issues.push({
148
+ code: 'MALFORMED_ENTRY',
149
+ path,
150
+ message: `${path} must name both endpoints of the edge to remove`
151
+ });
152
+ }
153
+ if (!edges_js_1.EDGE_KINDS.includes(entry.edgeKind)) {
154
+ issues.push({
155
+ code: 'UNKNOWN_EDGE_KIND',
156
+ path,
157
+ message: `${path}.edgeKind ${JSON.stringify(entry.edgeKind)} is not an BLUEPRINT edge kind`
158
+ });
159
+ }
160
+ return;
161
+ }
162
+ issues.push({
163
+ code: 'MALFORMED_ENTRY',
164
+ path,
165
+ message: `${path}.kind must be 'node' or 'edge', got `
166
+ + `${JSON.stringify(entry.kind)}`
167
+ });
168
+ }
169
+ function checkComment(entry, path, issues) {
170
+ checkAttribution(entry, path, issues);
171
+ if (!isFilledString(entry.id)) {
172
+ issues.push({
173
+ code: 'MALFORMED_ENTRY',
174
+ path,
175
+ message: `${path}.id must be a non-empty comment id`
176
+ });
177
+ }
178
+ if (!isFilledString(entry.text)) {
179
+ issues.push({
180
+ code: 'MALFORMED_ENTRY',
181
+ path,
182
+ message: `${path}.text must be a non-empty remark`
183
+ });
184
+ }
185
+ if (typeof entry.resolved !== 'boolean') {
186
+ issues.push({
187
+ code: 'MALFORMED_ENTRY',
188
+ path,
189
+ message: `${path}.resolved must be a boolean — either actor may set it`
190
+ });
191
+ }
192
+ if (entry.mentions !== undefined
193
+ && (!Array.isArray(entry.mentions) || !entry.mentions.every(isFilledString))) {
194
+ issues.push({
195
+ code: 'MALFORMED_ENTRY',
196
+ path,
197
+ message: `${path}.mentions must be a list of member ids when present`
198
+ });
199
+ }
200
+ const { anchor } = entry;
201
+ if (anchor === null || anchor === undefined || typeof anchor === 'string')
202
+ return;
203
+ if ((0, design_js_1.isCommentIdAnchor)(anchor))
204
+ return;
205
+ if (!(0, design_js_1.isEdgeRefAnchor)(anchor)) {
206
+ issues.push({
207
+ code: 'MALFORMED_ENTRY',
208
+ path,
209
+ message: `${path}.anchor must be a node id, an edge ref { from, to, kind }, `
210
+ + 'a comment ref { commentId }, or null'
211
+ });
212
+ return;
213
+ }
214
+ if (!edges_js_1.EDGE_KINDS.includes(anchor.kind)) {
215
+ issues.push({
216
+ code: 'UNKNOWN_EDGE_KIND',
217
+ path,
218
+ message: `${path}.anchor.kind ${JSON.stringify(anchor.kind)} is not an BLUEPRINT edge kind`
219
+ });
220
+ }
221
+ }
222
+ function locate(persisted, incoming, prefix) {
223
+ return [
224
+ ...persisted.map((entry, index) => ({
225
+ entry, path: `${prefix}[${index}]`, incoming: false
226
+ })),
227
+ ...incoming.map((entry, index) => ({
228
+ entry, path: `${prefix}[${persisted.length + index}]`, incoming: true
229
+ }))
230
+ ];
231
+ }
232
+ function reportIdentityCollision(entry, held, identity, issues) {
233
+ const designVsDesign = entry.path !== undefined && held.path !== undefined;
234
+ const blamed = entry.path !== undefined && (designVsDesign || entry.incoming === true)
235
+ ? entry
236
+ : held.path !== undefined && (designVsDesign || held.incoming === true)
237
+ ? held
238
+ : undefined;
239
+ if (blamed?.path === undefined)
240
+ return;
241
+ const other = blamed === entry ? held : entry;
242
+ issues.push({
243
+ code: 'DUPLICATE_IDENTITY',
244
+ path: blamed.path,
245
+ message: `${blamed.path} would give two elements the display identity "${identity}" `
246
+ + `(${blamed.subdomain}/${blamed.type}/${blamed.label}) — ${other.owner} already has it`
247
+ });
248
+ }
249
+ function buildNamespace(proposedNodes, modifies, graph, issues) {
250
+ const namespace = new Map();
251
+ for (const node of graph?.nodes ?? []) {
252
+ namespace.set(node.id, {
253
+ type: node.type,
254
+ label: node.label,
255
+ subdomain: node.subdomain,
256
+ owner: node.origin !== undefined && node.origin !== 'extracted'
257
+ ? overrides_js_1.BLUEPRINT_OVERRIDES_FILENAME
258
+ : 'the effective graph'
259
+ });
260
+ }
261
+ for (const { entry: proposed, path, incoming } of proposedNodes) {
262
+ if (!nodes_js_1.NODE_TYPES.includes(proposed.type))
263
+ continue;
264
+ if (!isFilledString(proposed.label) || !isFilledString(proposed.subdomain))
265
+ continue;
266
+ const id = (0, graph_js_1.nodeId)(proposed.subdomain, proposed.type, proposed.label);
267
+ const taken = namespace.get(id);
268
+ if (taken) {
269
+ if (taken.path !== undefined || incoming) {
270
+ issues.push({
271
+ code: 'DUPLICATE_IDENTITY',
272
+ path,
273
+ message: `${path} proposes ${proposed.subdomain}/${proposed.type}/`
274
+ + `${proposed.label}, whose identity "${id}" is already claimed by `
275
+ + `${taken.path ?? taken.owner} — reality keeps the id; drop the propose or rename it`
276
+ });
277
+ }
278
+ continue;
279
+ }
280
+ namespace.set(id, {
281
+ type: proposed.type,
282
+ label: proposed.label,
283
+ subdomain: proposed.subdomain,
284
+ path,
285
+ incoming,
286
+ owner: path
287
+ });
288
+ }
289
+ for (const { entry, path, incoming } of modifies) {
290
+ const target = namespace.get(entry.id);
291
+ if (!target)
292
+ continue;
293
+ const set = (entry.set ?? {});
294
+ if (isFilledString(set.label))
295
+ target.label = set.label;
296
+ if (isFilledString(set.subdomain))
297
+ target.subdomain = set.subdomain;
298
+ target.path = path;
299
+ target.incoming = target.incoming === true || incoming;
300
+ }
301
+ const identityOwner = new Map();
302
+ for (const entry of namespace.values()) {
303
+ const identity = (0, graph_js_1.nodeId)(entry.subdomain, entry.type, entry.label);
304
+ const held = identityOwner.get(identity);
305
+ if (!held) {
306
+ identityOwner.set(identity, entry);
307
+ continue;
308
+ }
309
+ reportIdentityCollision(entry, held, identity, issues);
310
+ }
311
+ return namespace;
312
+ }
313
+ function commentAnchorNamespace(namespace, overrides) {
314
+ const declared = overrides?.add?.nodes ?? [];
315
+ if (declared.length === 0)
316
+ return namespace;
317
+ const widened = new Map(namespace);
318
+ for (const manual of declared) {
319
+ if (manual === null || typeof manual !== 'object')
320
+ continue;
321
+ const id = (0, apply_overrides_js_1.manualNodeId)(manual);
322
+ if (widened.has(id))
323
+ continue;
324
+ widened.set(id, {
325
+ type: manual.type,
326
+ label: manual.label,
327
+ subdomain: manual.subdomain,
328
+ owner: overrides_js_1.BLUEPRINT_OVERRIDES_FILENAME
329
+ });
330
+ }
331
+ return widened;
332
+ }
333
+ function checkTarget(id, located, namespace, issues) {
334
+ if (!located.incoming)
335
+ return;
336
+ if (!isFilledString(id) || namespace.has(id))
337
+ return;
338
+ issues.push({
339
+ code: 'UNRESOLVED_TARGET',
340
+ path: located.path,
341
+ message: `${located.path} targets unknown node id ${JSON.stringify(id)}`
342
+ });
343
+ }
344
+ function edgeKeyOf(edge) {
345
+ return `${edge.from}|${edge.kind}|${edge.to}`;
346
+ }
347
+ function buildScopeContext(namespace, edges, graph) {
348
+ const nodes = [];
349
+ for (const [id, entry] of namespace) {
350
+ nodes.push({ id, type: entry.type, label: entry.label, subdomain: entry.subdomain });
351
+ }
352
+ const realityKeys = new Set((graph?.edges ?? []).map(edgeKeyOf));
353
+ const folded = (graph?.edges ?? [])
354
+ .map(edge => ({ from: edge.from, to: edge.to, kind: edge.kind }));
355
+ const keys = new Set(realityKeys);
356
+ for (const { entry } of edges) {
357
+ if (!edges_js_1.EDGE_KINDS.includes(entry.kind))
358
+ continue;
359
+ if (!namespace.has(entry.from) || !namespace.has(entry.to))
360
+ continue;
361
+ const key = edgeKeyOf(entry);
362
+ if (keys.has(key))
363
+ continue;
364
+ keys.add(key);
365
+ folded.push({ from: entry.from, to: entry.to, kind: entry.kind });
366
+ }
367
+ return { index: (0, handler_scope_js_1.buildHandlerScopeIndex)(nodes, folded), realityKeys };
368
+ }
369
+ function handlerRejectionReason(issue, sourceType) {
370
+ if (issue === 'unresolved')
371
+ return 'does not exist';
372
+ if (issue === 'unconnected')
373
+ return 'is not one of its handlers';
374
+ return sourceType !== undefined
375
+ ? `is not the message type a ${sourceType} discriminates on`
376
+ : 'is not a message type anything discriminates on';
377
+ }
378
+ function checkProposedEdgeScope(located, scope, namespace, issues) {
379
+ const { entry: edge, path } = located;
380
+ if (!located.incoming)
381
+ return;
382
+ const declared = edge.handlers;
383
+ if (declared === undefined || declared.length === 0)
384
+ return;
385
+ if (scope.realityKeys.has(edgeKeyOf(edge))) {
386
+ issues.push({
387
+ code: 'INVALID_EDGE_HANDLER',
388
+ path,
389
+ message: `${path} scopes ${edge.from} -[${edge.kind}]-> ${edge.to}, a coupling that `
390
+ + 'already exists, so the design merge would discard the whole entry and the scope with '
391
+ + `it. The design layer cannot re-scope a coupling reality already draws — correct it in ${overrides_js_1.BLUEPRINT_OVERRIDES_FILENAME} or in the code the extractor reads`
392
+ });
393
+ return;
394
+ }
395
+ const sourceType = namespace.get(edge.from)?.type;
396
+ const { rejected } = (0, handler_scope_js_1.resolveHandlerScope)(edge.from, declared, scope.index);
397
+ for (const { handlerId, issue } of rejected) {
398
+ issues.push({
399
+ code: 'INVALID_EDGE_HANDLER',
400
+ path,
401
+ message: `${path} scopes ${edge.from} -[${edge.kind}]-> ${edge.to} to `
402
+ + `${JSON.stringify(handlerId)}, which ${handlerRejectionReason(issue, sourceType)}`
403
+ });
404
+ }
405
+ }
406
+ function checkProposedEdge(located, namespace, removedIds, scope, issues) {
407
+ const { entry: edge, path } = located;
408
+ checkAttribution(edge, path, issues);
409
+ if (edge.handlers !== undefined
410
+ && (!Array.isArray(edge.handlers) || !edge.handlers.every(isFilledString))) {
411
+ issues.push({
412
+ code: 'MALFORMED_ENTRY',
413
+ path,
414
+ message: `${path}.handlers must be an array of node ids`
415
+ });
416
+ return;
417
+ }
418
+ if (edge.kindSource !== undefined && !edges_js_1.EDGE_KIND_SOURCES.includes(edge.kindSource)) {
419
+ issues.push({
420
+ code: 'MALFORMED_ENTRY',
421
+ path,
422
+ message: `${path}.kindSource ${JSON.stringify(edge.kindSource)} must be `
423
+ + `${edges_js_1.EDGE_KIND_SOURCES.map(source => JSON.stringify(source)).join(' or ')}`
424
+ });
425
+ return;
426
+ }
427
+ if (!edges_js_1.EDGE_KINDS.includes(edge.kind)) {
428
+ issues.push({
429
+ code: 'UNKNOWN_EDGE_KIND',
430
+ path,
431
+ message: `${path}.kind ${JSON.stringify(edge.kind)} is not an BLUEPRINT edge kind`
432
+ });
433
+ return;
434
+ }
435
+ const fromType = isFilledString(edge.from) ? namespace.get(edge.from)?.type : undefined;
436
+ const toType = isFilledString(edge.to) ? namespace.get(edge.to)?.type : undefined;
437
+ if (fromType === undefined || toType === undefined) {
438
+ if (located.incoming) {
439
+ const missing = fromType === undefined ? edge.from : edge.to;
440
+ issues.push({
441
+ code: 'UNRESOLVED_EDGE_ENDPOINT',
442
+ path,
443
+ message: `${path} references unknown node id ${JSON.stringify(missing)}`
444
+ });
445
+ }
446
+ return;
447
+ }
448
+ const removed = removedIds.has(edge.from)
449
+ ? edge.from
450
+ : removedIds.has(edge.to)
451
+ ? edge.to
452
+ : (edge.handlers ?? []).find(handlerId => removedIds.has(handlerId));
453
+ if (removed !== undefined) {
454
+ issues.push({
455
+ code: 'EDGE_TARGETS_REMOVED',
456
+ path,
457
+ message: `${path} proposes an edge on ${JSON.stringify(removed)}, which this design removes`
458
+ });
459
+ return;
460
+ }
461
+ if (!(0, topology_js_1.isAllowedEdge)(fromType, edge.kind, toType)) {
462
+ issues.push({
463
+ code: 'TOPOLOGY_VIOLATION',
464
+ path,
465
+ message: `${path}: ${fromType} -[${edge.kind}]-> ${toType} is not a legal BLUEPRINT triple`
466
+ });
467
+ return;
468
+ }
469
+ if (scope !== undefined)
470
+ checkProposedEdgeScope(located, scope, namespace, issues);
471
+ }
472
+ function validateDesign(design, context = {}) {
473
+ const issues = [];
474
+ if (design.schemaVersion !== 1) {
475
+ issues.push({
476
+ code: 'UNSUPPORTED_SCHEMA_VERSION',
477
+ path: 'schemaVersion',
478
+ message: `design.json has schemaVersion ${JSON.stringify(design.schemaVersion)}; expected 1`
479
+ });
480
+ return splitByClass(issues);
481
+ }
482
+ const incoming = context.incoming ?? {};
483
+ const nodes = locate(design.propose?.nodes ?? [], incoming.propose?.nodes ?? [], 'propose.nodes');
484
+ const edges = locate(design.propose?.edges ?? [], incoming.propose?.edges ?? [], 'propose.edges');
485
+ const modifies = locate(design.modify ?? [], incoming.modify ?? [], 'modify');
486
+ const removes = locate(design.remove ?? [], incoming.remove ?? [], 'remove');
487
+ const comments = locate(design.comments ?? [], incoming.comments ?? [], 'comments');
488
+ for (const { entry, path } of nodes)
489
+ checkProposedNode(entry, path, issues);
490
+ for (const { entry, path } of modifies)
491
+ checkModifyEntry(entry, path, issues);
492
+ for (const { entry, path } of removes)
493
+ checkRemoveEntry(entry, path, issues);
494
+ for (const { entry, path } of comments)
495
+ checkComment(entry, path, issues);
496
+ const commentIds = new Set();
497
+ for (const { entry, path } of comments) {
498
+ if (!isFilledString(entry.id))
499
+ continue;
500
+ if (commentIds.has(entry.id)) {
501
+ issues.push({
502
+ code: 'DUPLICATE_COMMENT_ID',
503
+ path,
504
+ message: `${path} reuses comment id ${JSON.stringify(entry.id)}; a resolve `
505
+ + 'names a comment by id, so ids must be unique in the document'
506
+ });
507
+ continue;
508
+ }
509
+ commentIds.add(entry.id);
510
+ }
511
+ const namespace = buildNamespace(nodes, modifies, context.graph, issues);
512
+ for (const located of modifies) {
513
+ checkTarget(located.entry.id, located, namespace, issues);
514
+ }
515
+ for (const located of removes) {
516
+ const { entry } = located;
517
+ if (entry.kind === 'node') {
518
+ checkTarget(entry.id, located, namespace, issues);
519
+ continue;
520
+ }
521
+ if (entry.kind !== 'edge')
522
+ continue;
523
+ checkTarget(entry.from, located, namespace, issues);
524
+ checkTarget(entry.to, located, namespace, issues);
525
+ }
526
+ const removedIds = new Set(removes
527
+ .filter((located) => located.entry.kind === 'node')
528
+ .map(located => located.entry.id));
529
+ const scope = edges.some(located => located.entry.handlers !== undefined)
530
+ ? buildScopeContext(namespace, edges, context.graph)
531
+ : undefined;
532
+ for (const located of edges) {
533
+ checkProposedEdge(located, namespace, removedIds, scope, issues);
534
+ }
535
+ const anchorable = commentAnchorNamespace(namespace, context.overrides);
536
+ const commentsById = new Map(comments.map(located => [located.entry.id, located.entry]));
537
+ for (const located of comments) {
538
+ const { anchor } = located.entry;
539
+ if (anchor === null || anchor === undefined)
540
+ continue;
541
+ if (typeof anchor === 'string') {
542
+ if (context.mapIds?.has(anchor) === true)
543
+ continue;
544
+ checkTarget(anchor, located, anchorable, issues);
545
+ continue;
546
+ }
547
+ if ((0, design_js_1.isCommentIdAnchor)(anchor)) {
548
+ if (!located.incoming)
549
+ continue;
550
+ const target = commentsById.get(anchor.commentId);
551
+ if (target === undefined) {
552
+ issues.push({
553
+ code: 'UNRESOLVED_TARGET',
554
+ path: located.path,
555
+ message: `${located.path} replies to unknown comment id ${JSON.stringify(anchor.commentId)}`
556
+ });
557
+ continue;
558
+ }
559
+ if ((0, design_js_1.isCommentIdAnchor)(target.anchor)) {
560
+ issues.push({
561
+ code: 'UNRESOLVED_TARGET',
562
+ path: located.path,
563
+ message: `${located.path} replies to comment ${JSON.stringify(anchor.commentId)}, `
564
+ + 'which is itself a reply — replies may not nest'
565
+ });
566
+ }
567
+ continue;
568
+ }
569
+ if (!(0, design_js_1.isEdgeRefAnchor)(anchor))
570
+ continue;
571
+ checkTarget(anchor.from, located, anchorable, issues);
572
+ checkTarget(anchor.to, located, anchorable, issues);
573
+ }
574
+ return splitByClass(issues);
575
+ }
576
+ //# sourceMappingURL=validate-design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-design.js","sourceRoot":"","sources":["../../src/validate-design.ts"],"names":[],"mappings":";;;AAymBA,wCAgHC;AAztBD,yCAAqE;AAErE,yDAI4B;AAC5B,2CAWqB;AACrB,6DAAoD;AACpD,yCAAoD;AACpD,yCAAiE;AACjE,iDAAkF;AAClF,+CAA8C;AAsBjC,QAAA,kBAAkB,GAAwD;IACrF,0BAA0B,EAAE,WAAW;IACvC,eAAe,EAAE,WAAW;IAC5B,iBAAiB,EAAE,WAAW;IAC9B,iBAAiB,EAAE,WAAW;IAC9B,kBAAkB,EAAE,WAAW;IAC/B,oBAAoB,EAAE,WAAW;IACjC,kBAAkB,EAAE,YAAY;IAChC,kBAAkB,EAAE,YAAY;IAChC,oBAAoB,EAAE,YAAY;IAClC,iBAAiB,EAAE,YAAY;IAC/B,wBAAwB,EAAE,YAAY;IACtC,oBAAoB,EAAE,YAAY;CACnC,CAAC;AAOF,SAAS,YAAY,CAAE,MAA+B;IACpD,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAM,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,CAAE,0BAAkB,CAAE,KAAK,CAAC,IAAI,CAAE,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAE,CAAC,IAAI,CAAE,KAAK,CAAE,CAAC;IAC9F,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC;AASD,SAAS,cAAc,CAAE,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAyC,EACzC,IAAY,EACZ,MAA+B;IAE/B,IAAK,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,wCAAyC,IAAI,CAAC,SAAS,CAAE,KAAK,CAAC,MAAM,CAAG,EAAE;SAC7F,CAAC,CAAC;IACL,CAAC;IACD,IAAK,CAAC,cAAc,CAAE,KAAK,CAAC,EAAE,CAAE,EAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,4CAA4C;SAC/D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAkB,EAClB,IAAY,EACZ,MAA+B;IAE/B,IAAK,CAAC,qBAAU,CAAC,QAAQ,CAAE,IAAI,CAAC,IAAI,CAAE,EAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mBAAmB;YACzB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,SAAU,IAAI,CAAC,SAAS,CAAE,IAAI,CAAC,IAAI,CAAG,gCAAgC;SACzF,CAAC,CAAC;IACL,CAAC;IACD,IAAK,CAAC,cAAc,CAAE,IAAI,CAAC,KAAK,CAAE,EAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,mCAAmC;SACtD,CAAC,CAAC;IACL,CAAC;IACD,IAAK,CAAC,cAAc,CAAE,IAAI,CAAC,SAAS,CAAE,EAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,uCAAuC;SAC1D,CAAC,CAAC;IACL,CAAC;IACD,gBAAgB,CAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAE,CAAC;AACzC,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAkB,EAClB,IAAY,EACZ,MAA+B;IAE/B,gBAAgB,CAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAE,CAAC;IAExC,IAAK,CAAC,cAAc,CAAE,KAAK,CAAC,EAAE,CAAE,EAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,6CAA6C;SAChE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAY,KAAK,CAAC,GAAG,CAAC;IAC/B,IAAK,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAE,GAAG,CAAE,EAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,+CAA+C;SAClE,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAE,GAA8B,CAAE,CAAC;IAC7D,IAAK,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,qCAAqC;SACxD,CAAC,CAAC;IACL,CAAC;IAED,KAAM,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAO,kCAA6C,CAAC,QAAQ,CAAE,KAAK,CAAE;YAAE,SAAS;QACjF,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,oBAAoB;YAC1B,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,uBAAwB,IAAI,CAAC,SAAS,CAAE,KAAK,CAAG,2BAA2B;kBACzF,GAAI,kCAAsB,CAAC,IAAI,CAAE,IAAI,CAAG,wCAAwC;kBAChF,sCAAsC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,GAAuC,CAAC;IACvD,KAAM,MAAM,KAAK,IAAI,CAAE,OAAO,EAAE,WAAW,EAAE,aAAa,CAAW,EAAE,CAAC;QACtE,IAAK,MAAM,CAAE,KAAK,CAAE,KAAK,SAAS,IAAI,CAAC,cAAc,CAAE,MAAM,CAAE,KAAK,CAAE,CAAE,EAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,iBAAiB;gBACvB,IAAI;gBACJ,OAAO,EAAE,GAAI,IAAK,QAAS,KAAM,6BAA6B;aAC/D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,IAAK,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,MAAM,CAAC,OAAO,CAAE,EAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,qDAAqD;SACxE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAkB,EAClB,IAAY,EACZ,MAA+B;IAE/B,gBAAgB,CAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAE,CAAC;IAExC,IAAK,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,IAAK,CAAC,cAAc,CAAE,KAAK,CAAC,EAAE,CAAE,EAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,iBAAiB;gBACvB,IAAI;gBACJ,OAAO,EAAE,GAAI,IAAK,0CAA0C;aAC7D,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAK,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,IAAK,CAAC,cAAc,CAAE,KAAK,CAAC,IAAI,CAAE,IAAI,CAAC,cAAc,CAAE,KAAK,CAAC,EAAE,CAAE,EAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,iBAAiB;gBACvB,IAAI;gBACJ,OAAO,EAAE,GAAI,IAAK,iDAAiD;aACpE,CAAC,CAAC;QACL,CAAC;QACD,IAAK,CAAC,qBAAU,CAAC,QAAQ,CAAE,KAAK,CAAC,QAAQ,CAAE,EAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,mBAAmB;gBACzB,IAAI;gBACJ,OAAO,EAAE,GAAI,IAAK,aAAc,IAAI,CAAC,SAAS,CAAE,KAAK,CAAC,QAAQ,CAAG,gCAAgC;aAClG,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,iBAAiB;QACvB,IAAI;QACJ,OAAO,EAAE,GAAI,IAAK,sCAAsC;cACpD,GAAI,IAAI,CAAC,SAAS,CAAG,KAA4B,CAAC,IAAI,CAAG,EAAE;KAChE,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CACnB,KAAoB,EACpB,IAAY,EACZ,MAA+B;IAE/B,gBAAgB,CAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAE,CAAC;IAExC,IAAK,CAAC,cAAc,CAAE,KAAK,CAAC,EAAE,CAAE,EAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,oCAAoC;SACvD,CAAC,CAAC;IACL,CAAC;IACD,IAAK,CAAC,cAAc,CAAE,KAAK,CAAC,IAAI,CAAE,EAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,kCAAkC;SACrD,CAAC,CAAC;IACL,CAAC;IACD,IAAK,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,uDAAuD;SAC1E,CAAC,CAAC;IACL,CAAC;IACD,IAAK,KAAK,CAAC,QAAQ,KAAK,SAAS;WAC5B,CAAE,CAAC,KAAK,CAAC,OAAO,CAAE,KAAK,CAAC,QAAQ,CAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAE,cAAc,CAAE,CAAC,EAAC,CAAC;QACnF,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,qDAAqD;SACxE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,IAAK,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAG,OAAO;IACpF,IAAK,IAAA,6BAAiB,EAAE,MAAM,CAAE;QAAE,OAAO;IACzC,IAAK,CAAC,IAAA,2BAAe,EAAE,MAAM,CAAE,EAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,6DAA6D;kBAC3E,sCAAsC;SAC3C,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAK,CAAC,qBAAU,CAAC,QAAQ,CAAE,MAAM,CAAC,IAAI,CAAE,EAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mBAAmB;YACzB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,gBAAiB,IAAI,CAAC,SAAS,CAAE,MAAM,CAAC,IAAI,CAAG,gCAAgC;SAClG,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAQD,SAAS,MAAM,CACb,SAA2B,EAC3B,QAA0B,EAC1B,MAAc;IAEd,OAAO;QACL,GAAG,SAAS,CAAC,GAAG,CAAC,CAAE,KAAK,EAAE,KAAK,EAAG,EAAE,CAAC,CAAC;YACpC,KAAK,EAAE,IAAI,EAAE,GAAI,MAAO,IAAK,KAAM,GAAG,EAAE,QAAQ,EAAE,KAAK;SACxD,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAE,KAAK,EAAE,KAAK,EAAG,EAAE,CAAC,CAAC;YACnC,KAAK,EAAE,IAAI,EAAE,GAAI,MAAO,IAAK,SAAS,CAAC,MAAM,GAAG,KAAM,GAAG,EAAE,QAAQ,EAAE,IAAI;SAC1E,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAWD,SAAS,uBAAuB,CAC9B,KAAqB,EACrB,IAAoB,EACpB,QAAgB,EAChB,MAA+B;IAE/B,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAE,cAAc,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAE;QACtF,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAE,cAAc,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAE;YACvE,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,SAAS,CAAC;IAChB,IAAK,MAAM,EAAE,IAAI,KAAK,SAAS;QAAG,OAAO;IACzC,MAAM,KAAK,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,GAAI,MAAM,CAAC,IAAK,kDAAmD,QAAS,IAAI;cACrF,IAAK,MAAM,CAAC,SAAU,IAAK,MAAM,CAAC,IAAK,IAAK,MAAM,CAAC,KAAM,OAAQ,KAAK,CAAC,KAAM,iBAAiB;KACnG,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,aAA+C,EAC/C,QAAyC,EACzC,KAAiC,EACjC,MAA+B;IAE/B,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEpD,KAAM,MAAM,IAAI,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,EAAC,CAAC;QACtC,SAAS,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,EAAE;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW;gBAC7D,CAAC,CAAC,2CAA4B;gBAC9B,CAAC,CAAC,qBAAqB;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,KAAM,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,aAAa,EAAE,CAAC;QACjE,IAAK,CAAC,qBAAU,CAAC,QAAQ,CAAE,QAAQ,CAAC,IAAI,CAAE;YAAE,SAAS;QACrD,IAAK,CAAC,cAAc,CAAE,QAAQ,CAAC,KAAK,CAAE,IAAI,CAAC,cAAc,CAAE,QAAQ,CAAC,SAAS,CAAE;YAAE,SAAS;QAC1F,MAAM,EAAE,GAAG,IAAA,iBAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAE,CAAC;QACvE,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAE,EAAE,CAAE,CAAC;QAClC,IAAK,KAAK,EAAE,CAAC;YACX,IAAK,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,oBAAoB;oBAC1B,IAAI;oBACJ,OAAO,EAAE,GAAI,IAAK,aAAc,QAAQ,CAAC,SAAU,IAAK,QAAQ,CAAC,IAAK,GAAG;0BACrE,GAAI,QAAQ,CAAC,KAAM,qBAAsB,EAAG,0BAA0B;0BACtE,GAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAM,wDAAwD;iBAC3F,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QACD,SAAS,CAAC,GAAG,CAAE,EAAE,EAAE;YACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,IAAI;YACJ,QAAQ;YACR,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAED,KAAM,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE,CAAE,CAAC;QACzC,IAAK,CAAC,MAAM;YAAG,SAAS;QACxB,MAAM,GAAG,GAAG,CAAE,KAAK,CAAC,GAAG,IAAI,EAAE,CAAqC,CAAC;QACnE,IAAK,cAAc,CAAE,GAAG,CAAC,KAAK,CAAE;YAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QAC3D,IAAK,cAAc,CAAE,GAAG,CAAC,SAAS,CAAE;YAAE,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QACvE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC;IACzD,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;IACxD,KAAM,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAA,iBAAM,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAE,CAAC;QACpE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAE,QAAQ,CAAE,CAAC;QAC3C,IAAK,CAAC,IAAI,EAAE,CAAC;YACX,aAAa,CAAC,GAAG,CAAE,QAAQ,EAAE,KAAK,CAAE,CAAC;YACrC,SAAS;QACX,CAAC;QACD,uBAAuB,CAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAE,CAAC;IAC3D,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAA8C,EAC9C,SAAyC;IAEzC,MAAM,QAAQ,GAAG,SAAS,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;IAC7C,IAAK,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAG,OAAO,SAAS,CAAC;IAE9C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAE,SAAS,CAAE,CAAC;IACrC,KAAM,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAK,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAG,SAAS;QAC9D,MAAM,EAAE,GAAG,IAAA,iCAAY,EAAE,MAAM,CAAE,CAAC;QAClC,IAAK,OAAO,CAAC,GAAG,CAAE,EAAE,CAAE;YAAE,SAAS;QACjC,OAAO,CAAC,GAAG,CAAE,EAAE,EAAE;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,2CAA4B;SACpC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAClB,EAAU,EACV,OAA4C,EAC5C,SAA8C,EAC9C,MAA+B;IAE/B,IAAK,CAAC,OAAO,CAAC,QAAQ;QAAG,OAAO;IAChC,IAAK,CAAC,cAAc,CAAE,EAAE,CAAE,IAAI,SAAS,CAAC,GAAG,CAAE,EAAE,CAAE;QAAE,OAAO;IAC1D,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,GAAI,OAAO,CAAC,IAAK,4BAA6B,IAAI,CAAC,SAAS,CAAE,EAAE,CAAG,EAAE;KAC/E,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAE,IAAgD;IAClE,OAAO,GAAI,IAAI,CAAC,IAAK,IAAK,IAAI,CAAC,IAAK,IAAK,IAAI,CAAC,EAAG,EAAE,CAAC;AACtD,CAAC;AAOD,SAAS,iBAAiB,CACxB,SAA8C,EAC9C,KAAuC,EACvC,KAAiC;IAEjC,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAM,MAAM,CAAE,EAAE,EAAE,KAAK,CAAE,IAAI,SAAS,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAE,SAAS,CAAE,CAAC,CAAC;IACpE,MAAM,MAAM,GAAmD,CAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;SACjF,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAE,WAAW,CAAE,CAAC;IACpC,KAAM,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;QAC/B,IAAK,CAAC,qBAAU,CAAC,QAAQ,CAAE,KAAK,CAAC,IAAI,CAAE;YAAE,SAAS;QAClD,IAAK,CAAC,SAAS,CAAC,GAAG,CAAE,KAAK,CAAC,IAAI,CAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE,CAAE;YAAE,SAAS;QAC1E,MAAM,GAAG,GAAG,SAAS,CAAE,KAAK,CAAE,CAAC;QAC/B,IAAK,IAAI,CAAC,GAAG,CAAE,GAAG,CAAE;YAAE,SAAS;QAC/B,IAAI,CAAC,GAAG,CAAE,GAAG,CAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAA,yCAAsB,EAAE,KAAK,EAAE,MAAM,CAAE,EAAE,WAAW,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,sBAAsB,CAAE,KAAwB,EAAE,UAAgC;IACzF,IAAK,KAAK,KAAK,YAAY;QAAG,OAAO,gBAAgB,CAAC;IACtD,IAAK,KAAK,KAAK,aAAa;QAAG,OAAO,4BAA4B,CAAC;IACnE,OAAO,UAAU,KAAK,SAAS;QAC7B,CAAC,CAAC,6BAA8B,UAAW,mBAAmB;QAC9D,CAAC,CAAC,iDAAiD,CAAC;AACxD,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAA8B,EAC9B,KAAmB,EACnB,SAA8C,EAC9C,MAA+B;IAE/B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACtC,IAAK,CAAC,OAAO,CAAC,QAAQ;QAAG,OAAO;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAK,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAG,OAAO;IAE9D,IAAK,KAAK,CAAC,WAAW,CAAC,GAAG,CAAE,SAAS,CAAE,IAAI,CAAE,CAAC,EAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,sBAAsB;YAC5B,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,WAAY,IAAI,CAAC,IAAK,MAAO,IAAI,CAAC,IAAK,OAAQ,IAAI,CAAC,EAAG,oBAAoB;kBACzF,uFAAuF;kBACvF,yFACA,2CAA6B,qCAAqC;SACvE,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE,EAAE,IAAI,CAAC;IACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,sCAAmB,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAE,CAAC;IAC7E,KAAM,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,sBAAsB;YAC5B,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,WAAY,IAAI,CAAC,IAAK,MAAO,IAAI,CAAC,IAAK,OAAQ,IAAI,CAAC,EAAG,MAAM;kBAC3E,GAAI,IAAI,CAAC,SAAS,CAAE,SAAS,CAAG,WAAY,sBAAsB,CAAE,KAAK,EAAE,UAAU,CAAG,EAAE;SAC/F,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,OAA8B,EAC9B,SAA8C,EAC9C,UAA+B,EAC/B,KAA+B,EAC/B,MAA+B;IAE/B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACtC,gBAAgB,CAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAE,CAAC;IAEvC,IAAK,IAAI,CAAC,QAAQ,KAAK,SAAS;WAC3B,CAAE,CAAC,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,QAAQ,CAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAE,cAAc,CAAE,CAAC,EAAC,CAAC;QACjF,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,wCAAwC;SAC3D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAK,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,4BAAiB,CAAC,QAAQ,CAAE,IAAI,CAAC,UAAU,CAAE,EAAC,CAAC;QACpF,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,eAAgB,IAAI,CAAC,SAAS,CAAE,IAAI,CAAC,UAAU,CAAG,WAAW;kBAC3E,GAAI,4BAAiB,CAAC,GAAG,CAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAE,MAAM,CAAE,CAAC,CAAC,IAAI,CAAE,MAAM,CAAG,EAAE;SACrF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAK,CAAC,qBAAU,CAAC,QAAQ,CAAE,IAAI,CAAC,IAAI,CAAE,EAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mBAAmB;YACzB,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,SAAU,IAAI,CAAC,SAAS,CAAE,IAAI,CAAC,IAAI,CAAG,gCAAgC;SACzF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAE,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,MAAM,GAAG,cAAc,CAAE,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,IAAK,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACpD,IAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,0BAA0B;gBAChC,IAAI;gBACJ,OAAO,EAAE,GAAI,IAAK,+BAAgC,IAAI,CAAC,SAAS,CAAE,OAAO,CAAG,EAAE;aAC/E,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAE;QACzC,CAAC,CAAC,IAAI,CAAC,IAAI;QACX,CAAC,CAAC,UAAU,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAE;YACzB,CAAC,CAAC,IAAI,CAAC,EAAE;YACT,CAAC,CAAC,CAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAE,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAE,SAAS,CAAE,CAAC,CAAC;IAC7E,IAAK,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,sBAAsB;YAC5B,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,wBAAyB,IAAI,CAAC,SAAS,CAAE,OAAO,CAAG,6BAA6B;SACnG,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAK,CAAC,IAAA,2BAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAE,EAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,oBAAoB;YAC1B,IAAI;YACJ,OAAO,EAAE,GAAI,IAAK,KAAM,QAAS,MAAO,IAAI,CAAC,IAAK,OAAQ,MAAO,kCAAkC;SACpG,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAK,KAAK,KAAK,SAAS;QAAG,sBAAsB,CAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAE,CAAC;AACzF,CAAC;AAED,SAAgB,cAAc,CAC5B,MAAkB,EAClB,UAAiC,EAAE;IAEnC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,IAAK,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,4BAA4B;YAClC,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,iCAAkC,IAAI,CAAC,SAAS,CAAE,MAAM,CAAC,aAAa,CAAG,cAAc;SACjG,CAAC,CAAC;QACH,OAAO,YAAY,CAAE,MAAM,CAAE,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAClB,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,eAAe,CAC5E,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAClB,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,eAAe,CAC5E,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAE,CAAC;IAChF,MAAM,OAAO,GAAG,MAAM,CAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAE,CAAC;IAC/E,MAAM,QAAQ,GAAG,MAAM,CAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,UAAU,CAAE,CAAC;IAEtF,KAAM,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK;QAAG,iBAAiB,CAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAE,CAAC;IAChF,KAAM,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ;QAAG,gBAAgB,CAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAE,CAAC;IAClF,KAAM,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO;QAAG,gBAAgB,CAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAE,CAAC;IACjF,KAAM,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ;QAAG,YAAY,CAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAE,CAAC;IAE9E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAM,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;QACxC,IAAK,CAAC,cAAc,CAAE,KAAK,CAAC,EAAE,CAAE;YAAE,SAAS;QAC3C,IAAK,UAAU,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE,CAAE,EAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,sBAAsB;gBAC5B,IAAI;gBACJ,OAAO,EAAE,GAAI,IAAK,sBAAuB,IAAI,CAAC,SAAS,CAAE,KAAK,CAAC,EAAE,CAAG,cAAc;sBAC9E,8DAA8D;aACnE,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,UAAU,CAAC,GAAG,CAAE,KAAK,CAAC,EAAE,CAAE,CAAC;IAC7B,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAE,CAAC;IAE3E,KAAM,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,WAAW,CAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAE,CAAC;IAC9D,CAAC;IACD,KAAM,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAC1B,IAAK,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,WAAW,CAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAE,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAK,KAAK,CAAC,IAAI,KAAK,MAAM;YAAG,SAAS;QACtC,WAAW,CAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAE,CAAC;QACtD,WAAW,CAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAE,CAAC;IACtD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,OAAO;SACJ,MAAM,CAAC,CAAE,OAAO,EAA+D,EAAE,CAChF,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAE;SAChC,GAAG,CAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAE,CACtC,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAE;QACzE,CAAC,CAAC,iBAAiB,CAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAE;QACtD,CAAC,CAAC,SAAS,CAAC;IACd,KAAM,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC7B,iBAAiB,CAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAE,CAAC;IACrE,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAE,CAAC;IAC1E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAE,QAAQ,CAAC,GAAG,CAAE,OAAO,CAAC,EAAE,CAAC,CAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAE,CAAE,CAAC,CAAC;IAC9F,KAAM,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QACjC,IAAK,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;YAAG,SAAS;QACxD,IAAK,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAK,OAAO,CAAC,MAAM,EAAE,GAAG,CAAE,MAAM,CAAE,KAAK,IAAI;gBAAG,SAAS;YACvD,WAAW,CAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAE,CAAC;YACnD,SAAS;QACX,CAAC;QACD,IAAK,IAAA,6BAAiB,EAAE,MAAM,CAAE,EAAC,CAAC;YAChC,IAAK,CAAC,OAAO,CAAC,QAAQ;gBAAG,SAAS;YAClC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAE,MAAM,CAAC,SAAS,CAAE,CAAC;YACpD,IAAK,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,mBAAmB;oBACzB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,GAAI,OAAO,CAAC,IAAK,kCAAmC,IAAI,CAAC,SAAS,CAAE,MAAM,CAAC,SAAS,CAAG,EAAE;iBACnG,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,IAAK,IAAA,6BAAiB,EAAE,MAAM,CAAC,MAAM,CAAE,EAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,mBAAmB;oBACzB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,GAAI,OAAO,CAAC,IAAK,uBAAwB,IAAI,CAAC,SAAS,CAAE,MAAM,CAAC,SAAS,CAAG,IAAI;0BACrF,gDAAgD;iBACrD,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAK,CAAC,IAAA,2BAAe,EAAE,MAAM,CAAE;YAAE,SAAS;QAC1C,WAAW,CAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAE,CAAC;QACxD,WAAW,CAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAE,CAAC;IACxD,CAAC;IAED,OAAO,YAAY,CAAE,MAAM,CAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { HandlerScopeIssue } from './diagnostics.js';
2
+ import { EdgeKind } from './edges.js';
3
+ import { DesignFile, ProposedNode } from './design.js';
4
+ import { BlueprintGraph } from './graph.js';
5
+ import { StrandingReport } from './reachability.js';
6
+ export type RottedHandlerScope = {
7
+ path: string;
8
+ from: string;
9
+ to: string;
10
+ kind: EdgeKind;
11
+ handlerId: string;
12
+ issue: HandlerScopeIssue;
13
+ };
14
+ export type ApplyDesignResult = {
15
+ graph: BlueprintGraph;
16
+ handlerScopeRejections: RottedHandlerScope[];
17
+ strandedProposals: StrandingReport;
18
+ skippedTargets: string[];
19
+ };
20
+ export declare function proposedNodeId(proposed: Pick<ProposedNode, 'subdomain' | 'type' | 'label'>): string;
21
+ export declare function applyDesign(graph: BlueprintGraph, design: DesignFile | undefined): ApplyDesignResult;
22
+ //# sourceMappingURL=apply-design.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-design.d.ts","sourceRoot":"","sources":["../../src/apply-design.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,UAAU,EAGV,YAAY,EAEb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAU,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAyB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,cAAc,CAAC;IACtB,sBAAsB,EAAE,kBAAkB,EAAE,CAAC;IAC7C,iBAAiB,EAAE,eAAe,CAAC;IACnC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAMF,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC,GAC3D,MAAM,CAER;AAkKD,wBAAgB,WAAW,CACzB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,UAAU,GAAG,SAAS,GAC7B,iBAAiB,CAiDnB"}