wabachi 0.1.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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/architecture/canon/authority.d.ts +35 -0
  4. package/dist/architecture/canon/authority.js +76 -0
  5. package/dist/architecture/canon/authority.js.map +1 -0
  6. package/dist/architecture/canon/boundaries.d.ts +31 -0
  7. package/dist/architecture/canon/boundaries.js +73 -0
  8. package/dist/architecture/canon/boundaries.js.map +1 -0
  9. package/dist/architecture/canon/codec.d.ts +10 -0
  10. package/dist/architecture/canon/codec.js +516 -0
  11. package/dist/architecture/canon/codec.js.map +1 -0
  12. package/dist/architecture/canon/constraints.d.ts +60 -0
  13. package/dist/architecture/canon/constraints.js +116 -0
  14. package/dist/architecture/canon/constraints.js.map +1 -0
  15. package/dist/architecture/canon/decisions.d.ts +62 -0
  16. package/dist/architecture/canon/decisions.js +192 -0
  17. package/dist/architecture/canon/decisions.js.map +1 -0
  18. package/dist/architecture/canon/deployment.d.ts +89 -0
  19. package/dist/architecture/canon/deployment.js +156 -0
  20. package/dist/architecture/canon/deployment.js.map +1 -0
  21. package/dist/architecture/canon/document.d.ts +60 -0
  22. package/dist/architecture/canon/document.js +106 -0
  23. package/dist/architecture/canon/document.js.map +1 -0
  24. package/dist/architecture/canon/elements.d.ts +21 -0
  25. package/dist/architecture/canon/elements.js +87 -0
  26. package/dist/architecture/canon/elements.js.map +1 -0
  27. package/dist/architecture/canon/flows.d.ts +37 -0
  28. package/dist/architecture/canon/flows.js +82 -0
  29. package/dist/architecture/canon/flows.js.map +1 -0
  30. package/dist/architecture/canon/identity.d.ts +45 -0
  31. package/dist/architecture/canon/identity.js +83 -0
  32. package/dist/architecture/canon/identity.js.map +1 -0
  33. package/dist/architecture/canon/relationships.d.ts +48 -0
  34. package/dist/architecture/canon/relationships.js +181 -0
  35. package/dist/architecture/canon/relationships.js.map +1 -0
  36. package/dist/architecture/canon/repository-mappings.d.ts +51 -0
  37. package/dist/architecture/canon/repository-mappings.js +134 -0
  38. package/dist/architecture/canon/repository-mappings.js.map +1 -0
  39. package/dist/architecture/canon/responsibilities.d.ts +40 -0
  40. package/dist/architecture/canon/responsibilities.js +89 -0
  41. package/dist/architecture/canon/responsibilities.js.map +1 -0
  42. package/dist/architecture/canon/validate.d.ts +14 -0
  43. package/dist/architecture/canon/validate.js +389 -0
  44. package/dist/architecture/canon/validate.js.map +1 -0
  45. package/dist/architecture/canon/views.d.ts +101 -0
  46. package/dist/architecture/canon/views.js +182 -0
  47. package/dist/architecture/canon/views.js.map +1 -0
  48. package/dist/architecture/cli.d.ts +2 -0
  49. package/dist/architecture/cli.js +158 -0
  50. package/dist/architecture/cli.js.map +1 -0
  51. package/dist/architecture/documentation/html.d.ts +3 -0
  52. package/dist/architecture/documentation/html.js +143 -0
  53. package/dist/architecture/documentation/html.js.map +1 -0
  54. package/dist/architecture/documentation/model.d.ts +46 -0
  55. package/dist/architecture/documentation/model.js +13 -0
  56. package/dist/architecture/documentation/model.js.map +1 -0
  57. package/dist/architecture/documentation/project.d.ts +4 -0
  58. package/dist/architecture/documentation/project.js +166 -0
  59. package/dist/architecture/documentation/project.js.map +1 -0
  60. package/dist/architecture/documentation/site.d.ts +43 -0
  61. package/dist/architecture/documentation/site.js +147 -0
  62. package/dist/architecture/documentation/site.js.map +1 -0
  63. package/dist/architecture/projection/structurizr-export.d.ts +65 -0
  64. package/dist/architecture/projection/structurizr-export.js +136 -0
  65. package/dist/architecture/projection/structurizr-export.js.map +1 -0
  66. package/dist/architecture/projection/structurizr.d.ts +34 -0
  67. package/dist/architecture/projection/structurizr.js +667 -0
  68. package/dist/architecture/projection/structurizr.js.map +1 -0
  69. package/dist/cli.d.ts +1 -0
  70. package/dist/cli.js +143 -0
  71. package/dist/cli.js.map +1 -0
  72. package/dist/index.d.ts +2 -0
  73. package/dist/index.js +6 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/runtime/correlation.d.ts +143 -0
  76. package/dist/runtime/correlation.js +919 -0
  77. package/dist/runtime/correlation.js.map +1 -0
  78. package/dist/runtime/facts.d.ts +138 -0
  79. package/dist/runtime/facts.js +614 -0
  80. package/dist/runtime/facts.js.map +1 -0
  81. package/dist/runtime/fixtureProvider.d.ts +10 -0
  82. package/dist/runtime/fixtureProvider.js +30 -0
  83. package/dist/runtime/fixtureProvider.js.map +1 -0
  84. package/dist/runtime/graftProvider.d.ts +8 -0
  85. package/dist/runtime/graftProvider.js +107 -0
  86. package/dist/runtime/graftProvider.js.map +1 -0
  87. package/dist/runtime/graftWiring.d.ts +30 -0
  88. package/dist/runtime/graftWiring.js +3 -0
  89. package/dist/runtime/graftWiring.js.map +1 -0
  90. package/dist/runtime/manifest.d.ts +17 -0
  91. package/dist/runtime/manifest.js +39 -0
  92. package/dist/runtime/manifest.js.map +1 -0
  93. package/dist/runtime/matrix.d.ts +337 -0
  94. package/dist/runtime/matrix.js +1485 -0
  95. package/dist/runtime/matrix.js.map +1 -0
  96. package/dist/runtime/observation.d.ts +36 -0
  97. package/dist/runtime/observation.js +3 -0
  98. package/dist/runtime/observation.js.map +1 -0
  99. package/dist/runtime/provider.d.ts +34 -0
  100. package/dist/runtime/provider.js +2 -0
  101. package/dist/runtime/provider.js.map +1 -0
  102. package/dist/runtime/repository.d.ts +20 -0
  103. package/dist/runtime/repository.js +55 -0
  104. package/dist/runtime/repository.js.map +1 -0
  105. package/dist/runtime/run.d.ts +21 -0
  106. package/dist/runtime/run.js +80 -0
  107. package/dist/runtime/run.js.map +1 -0
  108. package/dist/runtime/scipProvider.d.ts +11 -0
  109. package/dist/runtime/scipProvider.js +126 -0
  110. package/dist/runtime/scipProvider.js.map +1 -0
  111. package/dist/runtime/typescriptProvider.d.ts +10 -0
  112. package/dist/runtime/typescriptProvider.js +289 -0
  113. package/dist/runtime/typescriptProvider.js.map +1 -0
  114. package/dist/runtime/workflow.d.ts +30 -0
  115. package/dist/runtime/workflow.js +153 -0
  116. package/dist/runtime/workflow.js.map +1 -0
  117. package/package.json +72 -0
@@ -0,0 +1,516 @@
1
+ import { createArchitectureDocument, } from "./document.js";
2
+ import { CANON_VERSION } from "./identity.js";
3
+ import { validateArchitectureDocument } from "./validate.js";
4
+ const CANON_DOCUMENT_FIELDS = [
5
+ "canonVersion",
6
+ "documentId",
7
+ "root",
8
+ "elements",
9
+ "interfaces",
10
+ "relationships",
11
+ "responsibilities",
12
+ "authority",
13
+ "boundaries",
14
+ "constraints",
15
+ "flows",
16
+ "deployment",
17
+ "repositoryMappings",
18
+ "decisions",
19
+ "views",
20
+ "globalIdentityRegistry",
21
+ ];
22
+ const GLOBAL_IDENTITY_NAMESPACES = [
23
+ "architecture",
24
+ "element",
25
+ "interface",
26
+ "responsibility",
27
+ "boundary",
28
+ "flow",
29
+ "decision",
30
+ "reference",
31
+ ];
32
+ function compareStrings(left, right) {
33
+ if (left < right)
34
+ return -1;
35
+ if (left > right)
36
+ return 1;
37
+ return 0;
38
+ }
39
+ function assertRecord(value, label) {
40
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
41
+ throw new TypeError(`${label} must be an object`);
42
+ }
43
+ const prototype = Object.getPrototypeOf(value);
44
+ if (prototype !== Object.prototype && prototype !== null) {
45
+ throw new TypeError(`${label} must be a JSON object`);
46
+ }
47
+ return value;
48
+ }
49
+ function assertKnownFields(record, allowed, label) {
50
+ for (const key of Object.keys(record)) {
51
+ if (!allowed.includes(key)) {
52
+ throw new TypeError(`${label} contains unknown field: ${key}`);
53
+ }
54
+ }
55
+ }
56
+ function readRecord(value, label, allowed, required) {
57
+ const record = assertRecord(value, label);
58
+ assertKnownFields(record, allowed, label);
59
+ for (const key of required) {
60
+ if (!Object.hasOwn(record, key) || record[key] === undefined) {
61
+ throw new TypeError(`${label} is missing required field: ${key}`);
62
+ }
63
+ }
64
+ return record;
65
+ }
66
+ function readRequiredString(record, field, label) {
67
+ const value = record[field];
68
+ if (typeof value !== "string") {
69
+ throw new TypeError(`${label} ${field} must be a string`);
70
+ }
71
+ return value;
72
+ }
73
+ function readOptionalString(record, field, label) {
74
+ if (!Object.hasOwn(record, field))
75
+ return undefined;
76
+ return readRequiredString(record, field, label);
77
+ }
78
+ function readRequiredNumber(record, field, label) {
79
+ const value = record[field];
80
+ if (typeof value !== "number" || !Number.isFinite(value)) {
81
+ throw new TypeError(`${label} ${field} must be a finite number`);
82
+ }
83
+ return value;
84
+ }
85
+ function readOptionalNumber(record, field, label) {
86
+ if (!Object.hasOwn(record, field))
87
+ return undefined;
88
+ return readRequiredNumber(record, field, label);
89
+ }
90
+ function readArray(value, label) {
91
+ if (!Array.isArray(value)) {
92
+ throw new TypeError(`${label} must be an array`);
93
+ }
94
+ for (let index = 0; index < value.length; index += 1) {
95
+ if (!Object.hasOwn(value, index)) {
96
+ throw new TypeError(`${label} must not contain sparse entries`);
97
+ }
98
+ }
99
+ return value;
100
+ }
101
+ function readArrayField(record, field, label) {
102
+ return readArray(record[field], `${label} ${field}`);
103
+ }
104
+ function readKind(record, expected, label) {
105
+ const kind = readRequiredString(record, "kind", label);
106
+ if (kind !== expected) {
107
+ throw new TypeError(`${label} kind must be ${expected}`);
108
+ }
109
+ }
110
+ function readRoot(value) {
111
+ const record = readRecord(value, "root", ["kind", "id"], ["kind", "id"]);
112
+ readKind(record, "architecture", "root");
113
+ return { id: readRequiredString(record, "id", "root") };
114
+ }
115
+ function readElement(value) {
116
+ const record = readRecord(value, "element", ["id", "kind", "parentId"], ["id", "kind"]);
117
+ const parentId = readOptionalString(record, "parentId", "element");
118
+ return {
119
+ id: readRequiredString(record, "id", "element"),
120
+ kind: readRequiredString(record, "kind", "element"),
121
+ ...(parentId === undefined ? {} : { parentId }),
122
+ };
123
+ }
124
+ function readInterface(value) {
125
+ const record = readRecord(value, "interface", ["id", "owner", "protocol", "technology"], ["id", "owner"]);
126
+ const protocol = readOptionalString(record, "protocol", "interface");
127
+ const technology = readOptionalString(record, "technology", "interface");
128
+ return {
129
+ id: readRequiredString(record, "id", "interface"),
130
+ owner: readRequiredString(record, "owner", "interface"),
131
+ ...(protocol === undefined ? {} : { protocol }),
132
+ ...(technology === undefined ? {} : { technology }),
133
+ };
134
+ }
135
+ function readRelationship(value) {
136
+ const record = readRecord(value, "relationship", ["source", "target", "kind", "interfaceId"], ["source", "target", "kind"]);
137
+ const interfaceId = readOptionalString(record, "interfaceId", "relationship");
138
+ return {
139
+ source: readRequiredString(record, "source", "relationship"),
140
+ target: readRequiredString(record, "target", "relationship"),
141
+ kind: readRequiredString(record, "kind", "relationship"),
142
+ ...(interfaceId === undefined ? {} : { interfaceId }),
143
+ };
144
+ }
145
+ function readResponsibilityTarget(value) {
146
+ const record = readRecord(value, "responsibility target", ["kind", "id"], ["kind", "id"]);
147
+ const kind = readRequiredString(record, "kind", "responsibility target");
148
+ if (kind !== "architecture" && kind !== "object") {
149
+ throw new TypeError("responsibility target kind is invalid");
150
+ }
151
+ return { kind, id: readRequiredString(record, "id", "responsibility target") };
152
+ }
153
+ function readResponsibility(value) {
154
+ const record = readRecord(value, "responsibility", ["kind", "id", "target", "concern"], ["kind", "id", "target", "concern"]);
155
+ readKind(record, "responsibility", "responsibility");
156
+ return {
157
+ id: readRequiredString(record, "id", "responsibility"),
158
+ target: readResponsibilityTarget(record.target),
159
+ concern: readRequiredString(record, "concern", "responsibility"),
160
+ };
161
+ }
162
+ function readResponsibilities(value) {
163
+ const record = readRecord(value, "responsibilities", ["responsibilities"], ["responsibilities"]);
164
+ return {
165
+ responsibilities: readArrayField(record, "responsibilities", "responsibilities").map(readResponsibility),
166
+ };
167
+ }
168
+ function readAuthorityFact(value) {
169
+ const record = readRecord(value, "authority fact", ["kind", "concern", "owner"], ["kind", "concern", "owner"]);
170
+ readKind(record, "authority", "authority fact");
171
+ return {
172
+ concern: readRequiredString(record, "concern", "authority fact"),
173
+ owner: readRequiredString(record, "owner", "authority fact"),
174
+ };
175
+ }
176
+ function readOwnershipFact(value) {
177
+ const record = readRecord(value, "ownership fact", ["kind", "resource", "owner"], ["kind", "resource", "owner"]);
178
+ readKind(record, "ownership", "ownership fact");
179
+ return {
180
+ resource: readRequiredString(record, "resource", "ownership fact"),
181
+ owner: readRequiredString(record, "owner", "ownership fact"),
182
+ };
183
+ }
184
+ function readAuthority(value) {
185
+ const record = readRecord(value, "authority/ownership facts", ["authority", "ownership"], ["authority", "ownership"]);
186
+ return {
187
+ authority: readArrayField(record, "authority", "authority/ownership facts").map(readAuthorityFact),
188
+ ownership: readArrayField(record, "ownership", "authority/ownership facts").map(readOwnershipFact),
189
+ };
190
+ }
191
+ function readBoundary(value) {
192
+ const record = readRecord(value, "boundary", ["id", "kind", "memberIds"], ["id", "kind", "memberIds"]);
193
+ return {
194
+ id: readRequiredString(record, "id", "boundary"),
195
+ kind: readRequiredString(record, "kind", "boundary"),
196
+ memberIds: readArrayField(record, "memberIds", "boundary").map((memberId) => {
197
+ if (typeof memberId !== "string")
198
+ throw new TypeError("boundary memberIds must contain strings");
199
+ return memberId;
200
+ }),
201
+ };
202
+ }
203
+ function readConstraint(value) {
204
+ const initial = assertRecord(value, "constraint");
205
+ const kind = readRequiredString(initial, "kind", "constraint");
206
+ switch (kind) {
207
+ case "must-go-through": {
208
+ const record = readRecord(value, "constraint", ["kind", "source", "target", "through"], ["kind", "source", "target", "through"]);
209
+ return {
210
+ kind,
211
+ source: readRequiredString(record, "source", "constraint"),
212
+ target: readRequiredString(record, "target", "constraint"),
213
+ through: readRequiredString(record, "through", "constraint"),
214
+ };
215
+ }
216
+ case "single-authority": {
217
+ const record = readRecord(value, "constraint", ["kind", "concern"], ["kind", "concern"]);
218
+ return { kind, concern: readRequiredString(record, "concern", "constraint") };
219
+ }
220
+ case "may-depend-on":
221
+ case "must-not-depend-on":
222
+ case "may-call": {
223
+ const record = readRecord(value, "constraint", ["kind", "source", "target"], ["kind", "source", "target"]);
224
+ return {
225
+ kind,
226
+ source: readRequiredString(record, "source", "constraint"),
227
+ target: readRequiredString(record, "target", "constraint"),
228
+ };
229
+ }
230
+ default:
231
+ readRecord(value, "constraint", ["kind"], ["kind"]);
232
+ return { kind };
233
+ }
234
+ }
235
+ function readFlowStep(value) {
236
+ const record = readRecord(value, "flow step", ["relationshipId", "interfaceId", "operation", "information"], []);
237
+ const relationshipId = readOptionalString(record, "relationshipId", "flow step");
238
+ const interfaceId = readOptionalString(record, "interfaceId", "flow step");
239
+ const operation = readOptionalString(record, "operation", "flow step");
240
+ const information = readOptionalString(record, "information", "flow step");
241
+ return {
242
+ ...(relationshipId === undefined ? {} : { relationshipId }),
243
+ ...(interfaceId === undefined ? {} : { interfaceId }),
244
+ ...(operation === undefined ? {} : { operation }),
245
+ ...(information === undefined ? {} : { information }),
246
+ };
247
+ }
248
+ function readFlow(value) {
249
+ const record = readRecord(value, "flow", ["id", "steps"], ["id", "steps"]);
250
+ return {
251
+ id: readRequiredString(record, "id", "flow"),
252
+ steps: readArrayField(record, "steps", "flow").map(readFlowStep),
253
+ };
254
+ }
255
+ function readDeploymentRecord(value, kind, fields, required) {
256
+ const record = readRecord(value, kind, fields, required);
257
+ readKind(record, kind, kind);
258
+ const result = {};
259
+ for (const field of required) {
260
+ if (field !== "kind")
261
+ result[field] = readRequiredString(record, field, kind);
262
+ }
263
+ for (const field of fields) {
264
+ if (field === "kind" || required.includes(field))
265
+ continue;
266
+ const optional = readOptionalString(record, field, kind);
267
+ if (optional !== undefined)
268
+ result[field] = optional;
269
+ }
270
+ return result;
271
+ }
272
+ function readDeploymentMapping(value) {
273
+ const record = readRecord(value, "deployment mapping", ["kind", "softwareElementId", "deploymentInstanceId"], ["kind", "softwareElementId", "deploymentInstanceId"]);
274
+ readKind(record, "deployment-mapping", "deployment mapping");
275
+ return {
276
+ softwareElementId: readRequiredString(record, "softwareElementId", "deployment mapping"),
277
+ deploymentInstanceId: readRequiredString(record, "deploymentInstanceId", "deployment mapping"),
278
+ };
279
+ }
280
+ function readDeployment(value) {
281
+ const record = readRecord(value, "deployment topology", ["runtimeEnvironments", "deploymentNodes", "deploymentInstances", "infrastructureReferences", "mappings"], ["runtimeEnvironments", "deploymentNodes", "deploymentInstances", "infrastructureReferences", "mappings"]);
282
+ return {
283
+ runtimeEnvironments: readArrayField(record, "runtimeEnvironments", "deployment topology").map((item) => readDeploymentRecord(item, "runtime-environment", ["kind", "id", "displayName"], ["kind", "id"])),
284
+ deploymentNodes: readArrayField(record, "deploymentNodes", "deployment topology").map((item) => readDeploymentRecord(item, "deployment-node", ["kind", "id", "environmentId", "displayName"], ["kind", "id", "environmentId"])),
285
+ deploymentInstances: readArrayField(record, "deploymentInstances", "deployment topology").map((item) => readDeploymentRecord(item, "deployment-instance", ["kind", "id", "nodeId", "displayName"], ["kind", "id", "nodeId"])),
286
+ infrastructureReferences: readArrayField(record, "infrastructureReferences", "deployment topology").map((item) => readDeploymentRecord(item, "infrastructure-reference", ["kind", "id", "reference"], ["kind", "id", "reference"])),
287
+ mappings: readArrayField(record, "mappings", "deployment topology").map(readDeploymentMapping),
288
+ };
289
+ }
290
+ function readRepositoryPath(value) {
291
+ const record = readRecord(value, "repository path mapping", ["path", "scope"], ["path", "scope"]);
292
+ return {
293
+ path: readRequiredString(record, "path", "repository path mapping"),
294
+ scope: readRequiredString(record, "scope", "repository path mapping"),
295
+ };
296
+ }
297
+ function readRepositorySymbol(value) {
298
+ const record = readRecord(value, "repository symbol mapping", ["path", "symbol", "exportName"], ["path", "symbol"]);
299
+ const exportName = readOptionalString(record, "exportName", "repository symbol mapping");
300
+ return {
301
+ path: readRequiredString(record, "path", "repository symbol mapping"),
302
+ symbol: readRequiredString(record, "symbol", "repository symbol mapping"),
303
+ ...(exportName === undefined ? {} : { exportName }),
304
+ };
305
+ }
306
+ function readRepositoryTest(value) {
307
+ const record = readRecord(value, "repository test mapping", ["path", "selector"], ["path", "selector"]);
308
+ return {
309
+ path: readRequiredString(record, "path", "repository test mapping"),
310
+ selector: readRequiredString(record, "selector", "repository test mapping"),
311
+ };
312
+ }
313
+ function readRepositoryMapping(value) {
314
+ const record = readRecord(value, "repository mapping", ["canonId", "paths", "symbols", "tests"], ["canonId", "paths", "symbols", "tests"]);
315
+ return {
316
+ canonId: readRequiredString(record, "canonId", "repository mapping"),
317
+ paths: readArrayField(record, "paths", "repository mapping").map(readRepositoryPath),
318
+ symbols: readArrayField(record, "symbols", "repository mapping").map(readRepositorySymbol),
319
+ tests: readArrayField(record, "tests", "repository mapping").map(readRepositoryTest),
320
+ };
321
+ }
322
+ function readDecision(value) {
323
+ const record = readRecord(value, "decision", ["id", "title", "status", "type", "rationale", "targetIds", "referenceIds", "supersedes"], ["id", "title", "status", "type", "rationale", "targetIds", "referenceIds", "supersedes"]);
324
+ return {
325
+ id: readRequiredString(record, "id", "decision"),
326
+ title: readRequiredString(record, "title", "decision"),
327
+ status: readRequiredString(record, "status", "decision"),
328
+ type: readRequiredString(record, "type", "decision"),
329
+ rationale: readRequiredString(record, "rationale", "decision"),
330
+ targetIds: readArrayField(record, "targetIds", "decision").map((id) => {
331
+ if (typeof id !== "string")
332
+ throw new TypeError("decision targetIds must contain strings");
333
+ return id;
334
+ }),
335
+ referenceIds: readArrayField(record, "referenceIds", "decision").map((id) => {
336
+ if (typeof id !== "string")
337
+ throw new TypeError("decision referenceIds must contain strings");
338
+ return id;
339
+ }),
340
+ supersedes: readArrayField(record, "supersedes", "decision").map((id) => {
341
+ if (typeof id !== "string")
342
+ throw new TypeError("decision supersedes must contain strings");
343
+ return id;
344
+ }),
345
+ };
346
+ }
347
+ function readReference(value) {
348
+ const record = readRecord(value, "reference", ["id", "label", "uri", "description"], ["id", "label", "uri"]);
349
+ const description = readOptionalString(record, "description", "reference");
350
+ return {
351
+ id: readRequiredString(record, "id", "reference"),
352
+ label: readRequiredString(record, "label", "reference"),
353
+ uri: readRequiredString(record, "uri", "reference"),
354
+ ...(description === undefined ? {} : { description }),
355
+ };
356
+ }
357
+ function readReferenceAttachment(value) {
358
+ const record = readRecord(value, "reference attachment", ["targetId", "referenceIds"], ["targetId", "referenceIds"]);
359
+ return {
360
+ targetId: readRequiredString(record, "targetId", "reference attachment"),
361
+ referenceIds: readArrayField(record, "referenceIds", "reference attachment").map((id) => {
362
+ if (typeof id !== "string")
363
+ throw new TypeError("reference attachment referenceIds must contain strings");
364
+ return id;
365
+ }),
366
+ };
367
+ }
368
+ function readDecisions(value) {
369
+ const record = readRecord(value, "architecture decisions", ["decisions", "references", "referenceAttachments"], ["decisions", "references", "referenceAttachments"]);
370
+ return {
371
+ decisions: readArrayField(record, "decisions", "architecture decisions").map(readDecision),
372
+ references: readArrayField(record, "references", "architecture decisions").map(readReference),
373
+ referenceAttachments: readArrayField(record, "referenceAttachments", "architecture decisions").map(readReferenceAttachment),
374
+ };
375
+ }
376
+ function readViewReference(value) {
377
+ const record = readRecord(value, "view reference", ["kind", "id"], ["kind", "id"]);
378
+ return {
379
+ kind: readRequiredString(record, "kind", "view reference"),
380
+ id: readRequiredString(record, "id", "view reference"),
381
+ };
382
+ }
383
+ function readViewScope(value) {
384
+ const record = readRecord(value, "view scope", ["include", "exclude"], ["include", "exclude"]);
385
+ return {
386
+ include: readArrayField(record, "include", "view scope").map(readViewReference),
387
+ exclude: readArrayField(record, "exclude", "view scope").map(readViewReference),
388
+ };
389
+ }
390
+ function readPresentation(value) {
391
+ const record = readRecord(value, "view presentation", ["layout", "direction", "grouping"], []);
392
+ const layout = readOptionalString(record, "layout", "view presentation");
393
+ const direction = readOptionalString(record, "direction", "view presentation");
394
+ const grouping = readOptionalString(record, "grouping", "view presentation");
395
+ return {
396
+ ...(layout === undefined ? {} : { layout }),
397
+ ...(direction === undefined ? {} : { direction }),
398
+ ...(grouping === undefined ? {} : { grouping }),
399
+ };
400
+ }
401
+ function readView(value) {
402
+ const record = readRecord(value, "view", ["key", "kind", "scope", "order", "title", "presentation"], ["key", "kind", "scope"]);
403
+ const order = readOptionalNumber(record, "order", "view");
404
+ const title = readOptionalString(record, "title", "view");
405
+ const presentation = Object.hasOwn(record, "presentation") ? readPresentation(record.presentation) : undefined;
406
+ return {
407
+ key: readRequiredString(record, "key", "view"),
408
+ kind: readRequiredString(record, "kind", "view"),
409
+ scope: readViewScope(record.scope),
410
+ ...(order === undefined ? {} : { order }),
411
+ ...(title === undefined ? {} : { title }),
412
+ ...(presentation === undefined ? {} : { presentation }),
413
+ };
414
+ }
415
+ function readRegistryEntry(value) {
416
+ const record = readRecord(value, "global identity registry entry", ["id", "namespace"], ["id", "namespace"]);
417
+ return {
418
+ id: readRequiredString(record, "id", "global identity registry entry"),
419
+ namespace: readRequiredString(record, "namespace", "global identity registry entry"),
420
+ };
421
+ }
422
+ function readRegistry(value) {
423
+ const record = readRecord(value, "global identity registry", ["entries"], ["entries"]);
424
+ return readArrayField(record, "entries", "global identity registry").map(readRegistryEntry);
425
+ }
426
+ function readDocumentInput(value) {
427
+ const record = readRecord(value, "architecture document", CANON_DOCUMENT_FIELDS, CANON_DOCUMENT_FIELDS);
428
+ const version = record.canonVersion;
429
+ if (typeof version !== "number" || !Number.isInteger(version)) {
430
+ throw new TypeError("architecture document canonVersion must be an integer");
431
+ }
432
+ if (version !== CANON_VERSION) {
433
+ throw new TypeError(`unsupported architecture document canonVersion: ${String(version)}`);
434
+ }
435
+ return {
436
+ input: {
437
+ documentId: readRequiredString(record, "documentId", "architecture document"),
438
+ root: readRoot(record.root),
439
+ elements: readArrayField(record, "elements", "architecture document").map(readElement),
440
+ interfaces: readArrayField(record, "interfaces", "architecture document").map(readInterface),
441
+ relationships: readArrayField(record, "relationships", "architecture document").map(readRelationship),
442
+ responsibilities: readResponsibilities(record.responsibilities),
443
+ authority: readAuthority(record.authority),
444
+ boundaries: readArrayField(record, "boundaries", "architecture document").map(readBoundary),
445
+ constraints: readArrayField(record, "constraints", "architecture document").map(readConstraint),
446
+ flows: readArrayField(record, "flows", "architecture document").map(readFlow),
447
+ deployment: readDeployment(record.deployment),
448
+ repositoryMappings: readArrayField(record, "repositoryMappings", "architecture document").map(readRepositoryMapping),
449
+ decisions: readDecisions(record.decisions),
450
+ views: readArrayField(record, "views", "architecture document").map(readView),
451
+ },
452
+ registry: readRegistry(record.globalIdentityRegistry),
453
+ };
454
+ }
455
+ function readRegistryNamespace(value) {
456
+ if (!GLOBAL_IDENTITY_NAMESPACES.includes(value)) {
457
+ throw new TypeError(`global identity registry namespace is unsupported: ${value}`);
458
+ }
459
+ return value;
460
+ }
461
+ function assertRegistryMatches(document, suppliedEntries) {
462
+ const actual = suppliedEntries
463
+ .map((entry) => ({
464
+ id: readRequiredString(entry, "id", "global identity registry entry"),
465
+ namespace: readRegistryNamespace(readRequiredString(entry, "namespace", "global identity registry entry")),
466
+ }))
467
+ .sort((left, right) => compareStrings(left.id, right.id) || compareStrings(left.namespace, right.namespace));
468
+ const expected = [...document.globalIdentityRegistry.entries].sort((left, right) => compareStrings(left.id, right.id) || compareStrings(left.namespace, right.namespace));
469
+ if (actual.length !== expected.length ||
470
+ actual.some((entry, index) => entry.id !== expected[index]?.id || entry.namespace !== expected[index]?.namespace)) {
471
+ throw new Error("global identity registry does not match the canonical document sections");
472
+ }
473
+ }
474
+ function assertValidDocument(document) {
475
+ const result = validateArchitectureDocument(document);
476
+ if (!result.valid) {
477
+ const diagnostics = result.diagnostics.map(({ path, message }) => `${path}: ${message}`).join("; ");
478
+ throw new Error(`architecture document failed validation: ${diagnostics}`);
479
+ }
480
+ }
481
+ /** Decode a strict canonical JSON-compatible Architecture Canon v1 value. */
482
+ export function decodeArchitectureDocument(value) {
483
+ const { input, registry } = readDocumentInput(value);
484
+ const document = createArchitectureDocument(input);
485
+ const suppliedRegistry = {
486
+ ...document,
487
+ globalIdentityRegistry: {
488
+ entries: registry,
489
+ },
490
+ };
491
+ assertValidDocument(suppliedRegistry);
492
+ assertRegistryMatches(document, registry);
493
+ return document;
494
+ }
495
+ /** Serialize a validated Architecture Canon v1 document deterministically. */
496
+ export function serializeCanonicalArchitectureDocument(document) {
497
+ return JSON.stringify(decodeArchitectureDocument(document));
498
+ }
499
+ /** Parse canonical JSON text and decode it through the same strict boundary. */
500
+ export function parseCanonicalArchitectureDocument(source) {
501
+ if (typeof source !== "string") {
502
+ throw new TypeError("canonical architecture document JSON must be a string");
503
+ }
504
+ let value;
505
+ try {
506
+ value = JSON.parse(source);
507
+ }
508
+ catch (error) {
509
+ throw new SyntaxError(`invalid canonical architecture document JSON: ${String(error)}`);
510
+ }
511
+ return decodeArchitectureDocument(value);
512
+ }
513
+ export const encodeCanonicalJson = serializeCanonicalArchitectureDocument;
514
+ export const serializeCanonicalJson = serializeCanonicalArchitectureDocument;
515
+ export const decodeCanonicalJson = parseCanonicalArchitectureDocument;
516
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../src/architecture/canon/codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { type ObjectId } from "./identity.js";
2
+ /** The deliberately small set of declarative architecture constraints. */
3
+ export declare const CONSTRAINT_KINDS: readonly ["may-depend-on", "must-not-depend-on", "may-call", "must-go-through", "single-authority"];
4
+ export type ConstraintKind = (typeof CONSTRAINT_KINDS)[number];
5
+ export interface MayDependOnConstraint {
6
+ readonly kind: "may-depend-on";
7
+ readonly source: ObjectId;
8
+ readonly target: ObjectId;
9
+ }
10
+ export interface MustNotDependOnConstraint {
11
+ readonly kind: "must-not-depend-on";
12
+ readonly source: ObjectId;
13
+ readonly target: ObjectId;
14
+ }
15
+ export interface MayCallConstraint {
16
+ readonly kind: "may-call";
17
+ readonly source: ObjectId;
18
+ readonly target: ObjectId;
19
+ }
20
+ export interface MustGoThroughConstraint {
21
+ readonly kind: "must-go-through";
22
+ readonly source: ObjectId;
23
+ readonly target: ObjectId;
24
+ readonly through: ObjectId;
25
+ }
26
+ export interface SingleAuthorityConstraint {
27
+ readonly kind: "single-authority";
28
+ readonly concern: ObjectId;
29
+ }
30
+ export type ArchitectureConstraint = MayDependOnConstraint | MustNotDependOnConstraint | MayCallConstraint | MustGoThroughConstraint | SingleAuthorityConstraint;
31
+ export interface MayDependOnConstraintInput {
32
+ readonly kind: "may-depend-on";
33
+ readonly source: string;
34
+ readonly target: string;
35
+ }
36
+ export interface MustNotDependOnConstraintInput {
37
+ readonly kind: "must-not-depend-on";
38
+ readonly source: string;
39
+ readonly target: string;
40
+ }
41
+ export interface MayCallConstraintInput {
42
+ readonly kind: "may-call";
43
+ readonly source: string;
44
+ readonly target: string;
45
+ }
46
+ export interface MustGoThroughConstraintInput {
47
+ readonly kind: "must-go-through";
48
+ readonly source: string;
49
+ readonly target: string;
50
+ readonly through: string;
51
+ }
52
+ export interface SingleAuthorityConstraintInput {
53
+ readonly kind: "single-authority";
54
+ readonly concern: string;
55
+ }
56
+ export type ArchitectureConstraintInput = MayDependOnConstraintInput | MustNotDependOnConstraintInput | MayCallConstraintInput | MustGoThroughConstraintInput | SingleAuthorityConstraintInput;
57
+ /** Create one typed, stable-ID constraint declaration without evaluating it. */
58
+ export declare function createConstraint(input: ArchitectureConstraintInput): ArchitectureConstraint;
59
+ /** Normalize declarative constraints into a frozen, deterministic set. */
60
+ export declare function createConstraints(inputs: readonly ArchitectureConstraintInput[]): readonly ArchitectureConstraint[];