@memoarchitect/tools 0.4.4 → 0.4.5

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 (141) hide show
  1. package/README.md +17 -9
  2. package/package.json +19 -18
  3. package/packages/tools/lib/bin/memo.js +0 -0
  4. package/packages/tools/lib/dhf/template-resolver.d.ts +1 -1
  5. package/packages/tools/lib/dhf/template-resolver.d.ts.map +1 -1
  6. package/packages/tools/lib/dhf/template-resolver.js +20 -16
  7. package/packages/tools/lib/dhf/template-resolver.js.map +1 -1
  8. package/packages/tools/lib/model/ontology-loader.js +1 -1
  9. package/packages/tools/lib/model/ontology-loader.js.map +1 -1
  10. package/packages/tools/lib/model/paths.d.ts +6 -4
  11. package/packages/tools/lib/model/paths.d.ts.map +1 -1
  12. package/packages/tools/lib/model/paths.js +20 -9
  13. package/packages/tools/lib/model/paths.js.map +1 -1
  14. package/packages/tools/lib/__tests__/archetype-parsing.test.d.ts +0 -2
  15. package/packages/tools/lib/__tests__/archetype-parsing.test.d.ts.map +0 -1
  16. package/packages/tools/lib/__tests__/archetype-parsing.test.js +0 -42
  17. package/packages/tools/lib/__tests__/archetype-parsing.test.js.map +0 -1
  18. package/packages/tools/lib/__tests__/architecture-discovery.test.d.ts +0 -2
  19. package/packages/tools/lib/__tests__/architecture-discovery.test.d.ts.map +0 -1
  20. package/packages/tools/lib/__tests__/architecture-discovery.test.js +0 -82
  21. package/packages/tools/lib/__tests__/architecture-discovery.test.js.map +0 -1
  22. package/packages/tools/lib/__tests__/behavior.test.d.ts +0 -2
  23. package/packages/tools/lib/__tests__/behavior.test.d.ts.map +0 -1
  24. package/packages/tools/lib/__tests__/behavior.test.js +0 -766
  25. package/packages/tools/lib/__tests__/behavior.test.js.map +0 -1
  26. package/packages/tools/lib/__tests__/builder.test.d.ts +0 -2
  27. package/packages/tools/lib/__tests__/builder.test.d.ts.map +0 -1
  28. package/packages/tools/lib/__tests__/builder.test.js +0 -728
  29. package/packages/tools/lib/__tests__/builder.test.js.map +0 -1
  30. package/packages/tools/lib/__tests__/config-loader.test.d.ts +0 -2
  31. package/packages/tools/lib/__tests__/config-loader.test.d.ts.map +0 -1
  32. package/packages/tools/lib/__tests__/config-loader.test.js +0 -196
  33. package/packages/tools/lib/__tests__/config-loader.test.js.map +0 -1
  34. package/packages/tools/lib/__tests__/conformance.test.d.ts +0 -2
  35. package/packages/tools/lib/__tests__/conformance.test.d.ts.map +0 -1
  36. package/packages/tools/lib/__tests__/conformance.test.js +0 -467
  37. package/packages/tools/lib/__tests__/conformance.test.js.map +0 -1
  38. package/packages/tools/lib/__tests__/constraint-eval.test.d.ts +0 -2
  39. package/packages/tools/lib/__tests__/constraint-eval.test.d.ts.map +0 -1
  40. package/packages/tools/lib/__tests__/constraint-eval.test.js +0 -195
  41. package/packages/tools/lib/__tests__/constraint-eval.test.js.map +0 -1
  42. package/packages/tools/lib/__tests__/constraint-grammar.test.d.ts +0 -2
  43. package/packages/tools/lib/__tests__/constraint-grammar.test.d.ts.map +0 -1
  44. package/packages/tools/lib/__tests__/constraint-grammar.test.js +0 -163
  45. package/packages/tools/lib/__tests__/constraint-grammar.test.js.map +0 -1
  46. package/packages/tools/lib/__tests__/constraint-loader.test.d.ts +0 -2
  47. package/packages/tools/lib/__tests__/constraint-loader.test.d.ts.map +0 -1
  48. package/packages/tools/lib/__tests__/constraint-loader.test.js +0 -150
  49. package/packages/tools/lib/__tests__/constraint-loader.test.js.map +0 -1
  50. package/packages/tools/lib/__tests__/csv-io.test.d.ts +0 -2
  51. package/packages/tools/lib/__tests__/csv-io.test.d.ts.map +0 -1
  52. package/packages/tools/lib/__tests__/csv-io.test.js +0 -317
  53. package/packages/tools/lib/__tests__/csv-io.test.js.map +0 -1
  54. package/packages/tools/lib/__tests__/dhf-doc-store.test.d.ts +0 -2
  55. package/packages/tools/lib/__tests__/dhf-doc-store.test.d.ts.map +0 -1
  56. package/packages/tools/lib/__tests__/dhf-doc-store.test.js +0 -94
  57. package/packages/tools/lib/__tests__/dhf-doc-store.test.js.map +0 -1
  58. package/packages/tools/lib/__tests__/dhf-template-resolver.test.d.ts +0 -2
  59. package/packages/tools/lib/__tests__/dhf-template-resolver.test.d.ts.map +0 -1
  60. package/packages/tools/lib/__tests__/dhf-template-resolver.test.js +0 -39
  61. package/packages/tools/lib/__tests__/dhf-template-resolver.test.js.map +0 -1
  62. package/packages/tools/lib/__tests__/dhf.test.d.ts +0 -2
  63. package/packages/tools/lib/__tests__/dhf.test.d.ts.map +0 -1
  64. package/packages/tools/lib/__tests__/dhf.test.js +0 -393
  65. package/packages/tools/lib/__tests__/dhf.test.js.map +0 -1
  66. package/packages/tools/lib/__tests__/dimension-filter.test.d.ts +0 -2
  67. package/packages/tools/lib/__tests__/dimension-filter.test.d.ts.map +0 -1
  68. package/packages/tools/lib/__tests__/dimension-filter.test.js +0 -85
  69. package/packages/tools/lib/__tests__/dimension-filter.test.js.map +0 -1
  70. package/packages/tools/lib/__tests__/dsm.test.d.ts +0 -2
  71. package/packages/tools/lib/__tests__/dsm.test.d.ts.map +0 -1
  72. package/packages/tools/lib/__tests__/dsm.test.js +0 -112
  73. package/packages/tools/lib/__tests__/dsm.test.js.map +0 -1
  74. package/packages/tools/lib/__tests__/e2e-workflow.test.d.ts +0 -2
  75. package/packages/tools/lib/__tests__/e2e-workflow.test.d.ts.map +0 -1
  76. package/packages/tools/lib/__tests__/e2e-workflow.test.js +0 -707
  77. package/packages/tools/lib/__tests__/e2e-workflow.test.js.map +0 -1
  78. package/packages/tools/lib/__tests__/file-watcher.test.d.ts +0 -2
  79. package/packages/tools/lib/__tests__/file-watcher.test.d.ts.map +0 -1
  80. package/packages/tools/lib/__tests__/file-watcher.test.js +0 -31
  81. package/packages/tools/lib/__tests__/file-watcher.test.js.map +0 -1
  82. package/packages/tools/lib/__tests__/impact.test.d.ts +0 -2
  83. package/packages/tools/lib/__tests__/impact.test.d.ts.map +0 -1
  84. package/packages/tools/lib/__tests__/impact.test.js +0 -82
  85. package/packages/tools/lib/__tests__/impact.test.js.map +0 -1
  86. package/packages/tools/lib/__tests__/importer.test.d.ts +0 -2
  87. package/packages/tools/lib/__tests__/importer.test.d.ts.map +0 -1
  88. package/packages/tools/lib/__tests__/importer.test.js +0 -336
  89. package/packages/tools/lib/__tests__/importer.test.js.map +0 -1
  90. package/packages/tools/lib/__tests__/kind-registry.test.d.ts +0 -2
  91. package/packages/tools/lib/__tests__/kind-registry.test.d.ts.map +0 -1
  92. package/packages/tools/lib/__tests__/kind-registry.test.js +0 -132
  93. package/packages/tools/lib/__tests__/kind-registry.test.js.map +0 -1
  94. package/packages/tools/lib/__tests__/llm.test.d.ts +0 -2
  95. package/packages/tools/lib/__tests__/llm.test.d.ts.map +0 -1
  96. package/packages/tools/lib/__tests__/llm.test.js +0 -275
  97. package/packages/tools/lib/__tests__/llm.test.js.map +0 -1
  98. package/packages/tools/lib/__tests__/manifest-resolver.test.d.ts +0 -2
  99. package/packages/tools/lib/__tests__/manifest-resolver.test.d.ts.map +0 -1
  100. package/packages/tools/lib/__tests__/manifest-resolver.test.js +0 -97
  101. package/packages/tools/lib/__tests__/manifest-resolver.test.js.map +0 -1
  102. package/packages/tools/lib/__tests__/markdown-to-ir.test.d.ts +0 -2
  103. package/packages/tools/lib/__tests__/markdown-to-ir.test.d.ts.map +0 -1
  104. package/packages/tools/lib/__tests__/markdown-to-ir.test.js +0 -74
  105. package/packages/tools/lib/__tests__/markdown-to-ir.test.js.map +0 -1
  106. package/packages/tools/lib/__tests__/methodology-scope.test.d.ts +0 -2
  107. package/packages/tools/lib/__tests__/methodology-scope.test.d.ts.map +0 -1
  108. package/packages/tools/lib/__tests__/methodology-scope.test.js +0 -59
  109. package/packages/tools/lib/__tests__/methodology-scope.test.js.map +0 -1
  110. package/packages/tools/lib/__tests__/parser.test.d.ts +0 -2
  111. package/packages/tools/lib/__tests__/parser.test.d.ts.map +0 -1
  112. package/packages/tools/lib/__tests__/parser.test.js +0 -938
  113. package/packages/tools/lib/__tests__/parser.test.js.map +0 -1
  114. package/packages/tools/lib/__tests__/plugin.test.d.ts +0 -2
  115. package/packages/tools/lib/__tests__/plugin.test.d.ts.map +0 -1
  116. package/packages/tools/lib/__tests__/plugin.test.js +0 -308
  117. package/packages/tools/lib/__tests__/plugin.test.js.map +0 -1
  118. package/packages/tools/lib/__tests__/relationship-registry.test.d.ts +0 -2
  119. package/packages/tools/lib/__tests__/relationship-registry.test.d.ts.map +0 -1
  120. package/packages/tools/lib/__tests__/relationship-registry.test.js +0 -96
  121. package/packages/tools/lib/__tests__/relationship-registry.test.js.map +0 -1
  122. package/packages/tools/lib/__tests__/rule-registry.test.d.ts +0 -2
  123. package/packages/tools/lib/__tests__/rule-registry.test.d.ts.map +0 -1
  124. package/packages/tools/lib/__tests__/rule-registry.test.js +0 -53
  125. package/packages/tools/lib/__tests__/rule-registry.test.js.map +0 -1
  126. package/packages/tools/lib/__tests__/toolchain.test.d.ts +0 -2
  127. package/packages/tools/lib/__tests__/toolchain.test.d.ts.map +0 -1
  128. package/packages/tools/lib/__tests__/toolchain.test.js +0 -94
  129. package/packages/tools/lib/__tests__/toolchain.test.js.map +0 -1
  130. package/packages/tools/lib/__tests__/view-deriver-samples.test.d.ts +0 -2
  131. package/packages/tools/lib/__tests__/view-deriver-samples.test.d.ts.map +0 -1
  132. package/packages/tools/lib/__tests__/view-deriver-samples.test.js +0 -39
  133. package/packages/tools/lib/__tests__/view-deriver-samples.test.js.map +0 -1
  134. package/packages/tools/lib/__tests__/view-kinds.test.d.ts +0 -2
  135. package/packages/tools/lib/__tests__/view-kinds.test.d.ts.map +0 -1
  136. package/packages/tools/lib/__tests__/view-kinds.test.js +0 -263
  137. package/packages/tools/lib/__tests__/view-kinds.test.js.map +0 -1
  138. package/packages/tools/lib/__tests__/view-layout-store.test.d.ts +0 -2
  139. package/packages/tools/lib/__tests__/view-layout-store.test.d.ts.map +0 -1
  140. package/packages/tools/lib/__tests__/view-layout-store.test.js +0 -61
  141. package/packages/tools/lib/__tests__/view-layout-store.test.js.map +0 -1
@@ -1,195 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { evaluateNativeConstraint } from '../validator/constraint-eval.js';
3
- // ─── Fixture helpers ──────────────────────────────────────────────────────────
4
- function el(id, kind, attrs = {}) {
5
- return { id, name: id, kind, construct: 'action', layer: 'behavior', file: 'test.sysml', attributes: attrs };
6
- }
7
- function rel(id, type, sourceId, targetId) {
8
- return { id, type, sourceId, sourceEnd: 'a', targetId, targetEnd: 'b', file: 'test.sysml' };
9
- }
10
- function makeModel(elements, relationships) {
11
- const byId = new Map(elements.map(e => [e.id, e]));
12
- const byKind = new Map();
13
- const byLayer = new Map();
14
- const outgoing = new Map();
15
- const incoming = new Map();
16
- const relByType = new Map();
17
- for (const e of elements) {
18
- (byKind.get(e.kind) ?? byKind.set(e.kind, []).get(e.kind)).push(e);
19
- (byLayer.get(e.layer) ?? byLayer.set(e.layer, []).get(e.layer)).push(e);
20
- }
21
- for (const r of relationships) {
22
- (outgoing.get(r.sourceId) ?? outgoing.set(r.sourceId, []).get(r.sourceId)).push(r);
23
- (incoming.get(r.targetId) ?? incoming.set(r.targetId, []).get(r.targetId)).push(r);
24
- (relByType.get(r.type) ?? relByType.set(r.type, []).get(r.type)).push(r);
25
- }
26
- return {
27
- elements: byId, relationships, errors: [],
28
- elementsByKind: byKind, elementsByLayer: byLayer,
29
- relationshipsByType: relByType, outgoing, incoming,
30
- };
31
- }
32
- // Reference fixture: one allocated function, one un-allocated function, one block.
33
- function allocationModel() {
34
- return makeModel([el('pumpControl', 'Function'), el('idleMonitor', 'Function'), el('controllerBlock', 'LogicalBlock')], [rel('r1', 'allocate', 'pumpControl', 'controllerBlock')]);
35
- }
36
- // ─── Tests ──────────────────────────────────────────────────────────────────
37
- describe('native constraint evaluator (Epic EE ⊕-0 spike)', () => {
38
- it('flags the function with no allocation — "allocate->notEmpty()"', () => {
39
- const c = {
40
- id: 'EE-ALLOC-001',
41
- description: 'Every function must be allocated to a structural block.',
42
- appliesToKind: 'Function',
43
- expression: 'allocate->notEmpty()',
44
- severity: 'error',
45
- };
46
- const violations = evaluateNativeConstraint(c, allocationModel());
47
- expect(violations).toHaveLength(1);
48
- expect(violations[0].elementId).toBe('idleMonitor');
49
- expect(violations[0].ruleId).toBe('EE-ALLOC-001');
50
- expect(violations[0].severity).toBe('error');
51
- });
52
- it('supports size comparison — "allocate->size() >= 1"', () => {
53
- const c = {
54
- id: 'EE-ALLOC-002', description: 'allocated at least once', appliesToKind: 'Function',
55
- expression: 'allocate->size() >= 1', severity: 'warning',
56
- };
57
- const v = evaluateNativeConstraint(c, allocationModel());
58
- expect(v.map(x => x.elementId)).toEqual(['idleMonitor']);
59
- });
60
- it('supports boolean conjunction across two relationship types', () => {
61
- // Requirement traceability: must satisfy a need AND mitigate a risk.
62
- const model = makeModel([
63
- el('REQ-1', 'Requirement'), el('REQ-2', 'Requirement'),
64
- el('NEED-1', 'UserNeed'), el('RISK-1', 'Risk'),
65
- ], [
66
- rel('a', 'satisfy', 'REQ-1', 'NEED-1'), rel('b', 'mitigates', 'REQ-1', 'RISK-1'),
67
- rel('c', 'satisfy', 'REQ-2', 'NEED-1'), // REQ-2 satisfies need but mitigates no risk
68
- ]);
69
- const c = {
70
- id: 'EE-TRACE-001', description: 'requirement traces to need and risk', appliesToKind: 'Requirement',
71
- expression: 'satisfy->notEmpty() and mitigates->notEmpty()', severity: 'error',
72
- };
73
- const v = evaluateNativeConstraint(c, model);
74
- expect(v.map(x => x.elementId)).toEqual(['REQ-2']);
75
- });
76
- it('passes vacuously when no element of the subject kind exists', () => {
77
- const c = {
78
- id: 'EE-X', description: 'n/a', appliesToKind: 'Nonexistent',
79
- expression: 'allocate->notEmpty()', severity: 'error',
80
- };
81
- expect(evaluateNativeConstraint(c, allocationModel())).toHaveLength(0);
82
- });
83
- it('rejects an unsupported collection op with a clear error', () => {
84
- const c = {
85
- id: 'EE-BAD', description: 'bad', appliesToKind: 'Function',
86
- expression: 'allocate->isPrime()', severity: 'error',
87
- };
88
- expect(() => evaluateNativeConstraint(c, allocationModel())).toThrow(/Unsupported collection op/);
89
- });
90
- });
91
- // ─── EE-2: attributes, strings, quantifiers, arithmetic ───────────────────────
92
- describe('native constraint evaluator (EE-2 breadth)', () => {
93
- it('resolves a typed field — "kind == \\"Function\\""', () => {
94
- // Subject kind is Function, so the comparison holds for both functions
95
- // and the rule fires for none of them.
96
- const c = {
97
- id: 'EE-ATTR-001', description: 'kind is Function', appliesToKind: 'Function',
98
- expression: 'kind == "Function"', severity: 'error',
99
- };
100
- expect(evaluateNativeConstraint(c, allocationModel())).toHaveLength(0);
101
- });
102
- it('resolves an attribute via attributes["key"] and via dotted access', () => {
103
- const model = makeModel([el('REQ-A', 'Requirement', { safetyClass: 'C' }), el('REQ-B', 'Requirement', { safetyClass: 'B' })], []);
104
- const bracket = {
105
- id: 'EE-ATTR-002', description: 'class C', appliesToKind: 'Requirement',
106
- expression: 'attributes["safetyClass"] == "C"', severity: 'error',
107
- };
108
- const dotted = { ...bracket, id: 'EE-ATTR-003', expression: 'attributes.safetyClass == "C"' };
109
- // Flags every requirement whose class is NOT "C" → REQ-B.
110
- expect(evaluateNativeConstraint(bracket, model).map(v => v.elementId)).toEqual(['REQ-B']);
111
- expect(evaluateNativeConstraint(dotted, model).map(v => v.elementId)).toEqual(['REQ-B']);
112
- });
113
- it('requireAttribute equivalent — "attributes[\\"x\\"]->notEmpty()"', () => {
114
- const model = makeModel([el('H-1', 'Hazard', { severity: 'high' }), el('H-2', 'Hazard', {}), el('H-3', 'Hazard', { severity: '' })], []);
115
- const c = {
116
- id: 'EE-ATTR-004', description: 'severity present', appliesToKind: 'Hazard',
117
- expression: 'attributes["severity"]->notEmpty()', severity: 'error',
118
- };
119
- // Missing and empty-string attributes both fail.
120
- expect(evaluateNativeConstraint(c, model).map(v => v.elementId)).toEqual(['H-2', 'H-3']);
121
- });
122
- it('evaluates arithmetic in a comparison', () => {
123
- const model = makeModel([el('F-1', 'Function'), el('F-2', 'Function'), el('B', 'LogicalBlock'), el('X', 'UserNeed')], [rel('a', 'allocate', 'F-1', 'B'), rel('b', 'satisfy', 'F-1', 'X')]);
124
- // (allocate->size() + satisfy->size()) >= 2 : F-1 has 2, F-2 has 0.
125
- const c = {
126
- id: 'EE-ARITH-001', description: 'total links >= 2', appliesToKind: 'Function',
127
- expression: 'allocate->size() + satisfy->size() >= 2', severity: 'warning',
128
- };
129
- expect(evaluateNativeConstraint(c, model).map(v => v.elementId)).toEqual(['F-2']);
130
- });
131
- it('forAll: every navigated element must satisfy a sub-expression', () => {
132
- const model = makeModel([
133
- el('REQ-OK', 'Requirement'), el('REQ-BAD', 'Requirement'),
134
- el('V-1', 'VerificationCase', { status: 'pass' }),
135
- el('V-2', 'VerificationCase', { status: 'pass' }),
136
- el('V-3', 'VerificationCase', { status: 'fail' }),
137
- ], [
138
- rel('a', 'verify', 'REQ-OK', 'V-1'), rel('b', 'verify', 'REQ-OK', 'V-2'),
139
- rel('c', 'verify', 'REQ-BAD', 'V-3'),
140
- ]);
141
- const c = {
142
- id: 'EE-QUANT-001', description: 'all verifications pass', appliesToKind: 'Requirement',
143
- expression: 'verify->forAll(attributes["status"] == "pass")', severity: 'error',
144
- };
145
- expect(evaluateNativeConstraint(c, model).map(v => v.elementId)).toEqual(['REQ-BAD']);
146
- });
147
- it('exists + select: at least one mitigation of a given kind', () => {
148
- const model = makeModel([
149
- el('RISK-1', 'Risk'), el('RISK-2', 'Risk'),
150
- el('M-1', 'DesignControl'), el('M-2', 'LabelWarning'),
151
- ], [rel('a', 'mitigates', 'M-1', 'RISK-1'), rel('b', 'mitigates', 'M-2', 'RISK-2')]);
152
- const existsC = {
153
- id: 'EE-QUANT-002', description: 'mitigated by a design control', appliesToKind: 'Risk',
154
- expression: 'mitigates->exists(kind == "DesignControl")', severity: 'error',
155
- };
156
- // RISK-2 only mitigated by a LabelWarning → fails.
157
- expect(evaluateNativeConstraint(existsC, model).map(v => v.elementId)).toEqual(['RISK-2']);
158
- const selectC = {
159
- id: 'EE-QUANT-003', description: 'has a design-control mitigation', appliesToKind: 'Risk',
160
- expression: 'mitigates->select(kind == "DesignControl")->notEmpty()', severity: 'error',
161
- };
162
- expect(evaluateNativeConstraint(selectC, model).map(v => v.elementId)).toEqual(['RISK-2']);
163
- });
164
- it('uniqueAttribute equivalent — allOfKind + subject reference', () => {
165
- const model = makeModel([
166
- el('R-1', 'Requirement', { docId: 'SRS-1' }),
167
- el('R-2', 'Requirement', { docId: 'SRS-2' }),
168
- el('R-3', 'Requirement', { docId: 'SRS-1' }), // duplicate docId with R-1
169
- ], []);
170
- const c = {
171
- id: 'EE-UNIQ-001', description: 'docId unique across requirements', appliesToKind: 'Requirement',
172
- expression: 'allOfKind("Requirement")->select(attributes["docId"] == subject.attributes["docId"])->size() <= 1',
173
- severity: 'error',
174
- };
175
- // R-1 and R-3 share SRS-1 → both flagged; R-2 is unique.
176
- expect(evaluateNativeConstraint(c, model).map(v => v.elementId).sort()).toEqual(['R-1', 'R-3']);
177
- });
178
- it('conditional rule: class-C requirements must be verified', () => {
179
- // The conditionalRequireRelationship class of rule: if kind=="Requirement"
180
- // and safetyClass=="C" then verify->notEmpty(). Authored as: not(cond) or consequent.
181
- const model = makeModel([
182
- el('C-OK', 'Requirement', { safetyClass: 'C' }),
183
- el('C-BAD', 'Requirement', { safetyClass: 'C' }),
184
- el('B-OK', 'Requirement', { safetyClass: 'B' }), // condition false → passes vacuously
185
- el('V-1', 'VerificationCase'), el('V-2', 'VerificationCase'),
186
- ], [rel('a', 'verify', 'C-OK', 'V-1'), rel('z', 'verify', 'B-OK', 'V-2')]);
187
- const c = {
188
- id: 'EE-COND-001', description: 'class C requires verification', appliesToKind: 'Requirement',
189
- expression: 'not (kind == "Requirement" and attributes["safetyClass"] == "C") or verify->notEmpty()',
190
- severity: 'error',
191
- };
192
- expect(evaluateNativeConstraint(c, model).map(v => v.elementId)).toEqual(['C-BAD']);
193
- });
194
- });
195
- //# sourceMappingURL=constraint-eval.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-eval.test.js","sourceRoot":"","sources":["../../src/__tests__/constraint-eval.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=constraint-grammar.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-grammar.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/constraint-grammar.test.ts"],"names":[],"mappings":""}
@@ -1,163 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { EmptyFileSystem } from 'langium';
3
- import { parseHelper } from 'langium/test';
4
- import { createMemoSysMLServices } from '../language/memo-sysml-module.js';
5
- import { langiumExprToNode } from '../validator/constraint-eval.js';
6
- // ─── EE-1: native KerML expression grammar for constraint/requirement bodies ──
7
- // Covers the ADR-1-18 supported subset: navigation, collection ops, comparison,
8
- // boolean operators, arithmetic, literals; plus the Langium AST → evaluator
9
- // mapping (langiumExprToNode) over the full EE-2 evaluable breadth.
10
- const services = createMemoSysMLServices({ ...EmptyFileSystem }).MemoSysML;
11
- const parse = parseHelper(services);
12
- /** Parse a `constraint def C { require constraint { <expr> } }` and return the expression. */
13
- async function parseExpr(expr) {
14
- const src = `
15
- package P {
16
- constraint def C {
17
- require constraint { ${expr} }
18
- }
19
- }
20
- `;
21
- const doc = await parse(src);
22
- const errors = doc.parseResult.lexerErrors.concat(doc.parseResult.parserErrors);
23
- if (errors.length > 0) {
24
- throw new Error(`Parse errors:\n${errors.map((e) => e.message).join('\n')}\n\nExpr: ${expr}`);
25
- }
26
- const pkg = doc.parseResult.value.members[0];
27
- const cdef = pkg.members[0];
28
- const member = cdef.body[0];
29
- expect(member.$type).toBe('RequireConstraintMember');
30
- return member.expression;
31
- }
32
- describe('EE-1 constraint expression grammar', () => {
33
- it('parses a require constraint member with zero errors', async () => {
34
- const e = await parseExpr('allocations->notEmpty()');
35
- expect(e.$type).toBe('CollectionOp');
36
- });
37
- it('accepts assert constraint as well as require constraint', async () => {
38
- const doc = await parse(`
39
- package P {
40
- requirement def R {
41
- assert constraint { satisfies->size() >= 1 }
42
- }
43
- }
44
- `);
45
- const errors = doc.parseResult.lexerErrors.concat(doc.parseResult.parserErrors);
46
- expect(errors).toHaveLength(0);
47
- const pkg = doc.parseResult.value.members[0];
48
- const rdef = pkg.members[0];
49
- const member = rdef.body[0];
50
- expect(member.kind).toBe('assert');
51
- });
52
- describe('collection operations', () => {
53
- for (const op of ['size', 'notEmpty', 'isEmpty', 'forAll', 'exists', 'select']) {
54
- it(`parses ->${op}()`, async () => {
55
- const arg = ['forAll', 'exists', 'select'].includes(op) ? 'mitigates->notEmpty()' : '';
56
- const e = await parseExpr(`hazards->${op}(${arg})`);
57
- expect(e.$type).toBe('CollectionOp');
58
- expect(e.op).toBe(op);
59
- });
60
- }
61
- });
62
- describe('comparison operators', () => {
63
- for (const op of ['==', '!=', '>=', '<=', '>', '<']) {
64
- it(`parses ${op}`, async () => {
65
- const e = await parseExpr(`severity->size() ${op} 3`);
66
- expect(e.$type).toBe('BinaryExpr');
67
- expect(e.op).toBe(op);
68
- });
69
- }
70
- });
71
- describe('boolean operators', () => {
72
- it('parses and / or with or looser than and', async () => {
73
- const e = await parseExpr('a->notEmpty() and b->isEmpty() or c->notEmpty()');
74
- // or is the root (loosest binding)
75
- expect(e.$type).toBe('BinaryExpr');
76
- expect(e.op).toBe('or');
77
- expect(e.left.op).toBe('and');
78
- });
79
- it('parses not', async () => {
80
- const e = await parseExpr('not a->isEmpty()');
81
- expect(e.$type).toBe('UnaryExpr');
82
- expect(e.op).toBe('not');
83
- });
84
- });
85
- describe('arithmetic operators', () => {
86
- for (const op of ['+', '-', '*', '/']) {
87
- it(`parses ${op}`, async () => {
88
- const e = await parseExpr(`a->size() == 1 ${op} 2`);
89
- expect(e.$type).toBe('BinaryExpr');
90
- // arithmetic binds tighter than comparison → right side is the arithmetic BinaryExpr
91
- expect(e.right.op).toBe(op);
92
- });
93
- }
94
- });
95
- describe('literals and navigation', () => {
96
- it('parses integer literal', async () => {
97
- const e = await parseExpr('count == 5');
98
- expect(e.right.$type).toBe('LiteralExpr');
99
- // Langium's INT value converter yields a number at runtime.
100
- expect(e.right.intValue).toBe(5);
101
- });
102
- it('parses boolean literal', async () => {
103
- const e = await parseExpr('flag == true');
104
- expect(e.right.boolValue).toBe('true');
105
- });
106
- it('parses string literal', async () => {
107
- const e = await parseExpr('label == "high"');
108
- // Langium's STRING value converter strips the surrounding quotes.
109
- expect(e.right.strValue).toBe('high');
110
- });
111
- it('parses a single-segment feature', async () => {
112
- const e = await parseExpr('allocations->size() == 0');
113
- expect(e.left.target.$type).toBe('FeatureChain');
114
- expect(e.left.target.segments).toEqual(['allocations']);
115
- });
116
- it('parses a dotted feature chain', async () => {
117
- const e = await parseExpr('a.b.c->notEmpty()');
118
- expect(e.target.segments).toEqual(['a', 'b', 'c']);
119
- });
120
- it('parses parenthesized grouping', async () => {
121
- const e = await parseExpr('(a->notEmpty() or b->notEmpty()) and c->isEmpty()');
122
- expect(e.op).toBe('and');
123
- });
124
- });
125
- });
126
- describe('EE-1 langiumExprToNode mapping', () => {
127
- it('maps the evaluable core (nav, collection op, comparison)', async () => {
128
- const node = langiumExprToNode(await parseExpr('allocations->size() >= 1'));
129
- expect(node).toEqual({
130
- kind: 'cmp',
131
- op: '>=',
132
- left: { kind: 'method', target: { kind: 'feature', root: 'current', segments: ['allocations'] }, name: 'size' },
133
- right: { kind: 'int', value: 1 },
134
- });
135
- });
136
- it('maps boolean and/or/not', async () => {
137
- const node = langiumExprToNode(await parseExpr('not a->isEmpty() and b->notEmpty()'));
138
- expect(node.kind).toBe('and');
139
- });
140
- it('maps integer and boolean literals', async () => {
141
- expect(langiumExprToNode((await parseExpr('x == 7')))).toMatchObject({ right: { kind: 'int', value: 7 } });
142
- expect(langiumExprToNode((await parseExpr('x == true')))).toMatchObject({ right: { kind: 'bool', value: true } });
143
- });
144
- it('maps the EE-2 breadth (quantifiers, multi-segment chains, arithmetic, strings)', async () => {
145
- // Quantifier with sub-expression body.
146
- const quant = langiumExprToNode(await parseExpr('hazards->forAll(mitigates->notEmpty())'));
147
- expect(quant).toMatchObject({
148
- kind: 'quant', name: 'forAll',
149
- target: { kind: 'feature', segments: ['hazards'] },
150
- body: { kind: 'method', name: 'notEmpty', target: { kind: 'feature', segments: ['mitigates'] } },
151
- });
152
- // Multi-segment feature chain.
153
- expect(langiumExprToNode(await parseExpr('a.b->notEmpty()')))
154
- .toMatchObject({ kind: 'method', target: { kind: 'feature', segments: ['a', 'b'] } });
155
- // Arithmetic.
156
- expect(langiumExprToNode((await parseExpr('count == 1 + 2'))))
157
- .toMatchObject({ right: { kind: 'arith', op: '+', left: { kind: 'int', value: 1 }, right: { kind: 'int', value: 2 } } });
158
- // String literal.
159
- expect(langiumExprToNode((await parseExpr('label == "x"'))))
160
- .toMatchObject({ right: { kind: 'str', value: 'x' } });
161
- });
162
- });
163
- //# sourceMappingURL=constraint-grammar.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-grammar.test.js","sourceRoot":"","sources":["../../src/__tests__/constraint-grammar.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=constraint-loader.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-loader.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/constraint-loader.test.ts"],"names":[],"mappings":""}
@@ -1,150 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { EmptyFileSystem } from 'langium';
3
- import { parseHelper } from 'langium/test';
4
- import { createMemoSysMLServices } from '../language/memo-sysml-module.js';
5
- import { collectNativeConstraints } from '../validator/constraint-loader.js';
6
- import { evaluateConstraintNode } from '../validator/constraint-eval.js';
7
- // ─── EE-3: ontology constraint def loader ─────────────────────────────────────
8
- // collectNativeConstraints discovers native `constraint def` bodies (the EE-3
9
- // replacement for the proprietary ConsistencyRule predicate-attribute parts) and
10
- // compiles each into an evaluator AST with its rule metadata.
11
- const services = createMemoSysMLServices({ ...EmptyFileSystem }).MemoSysML;
12
- const parse = parseHelper(services);
13
- async function parseDoc(src) {
14
- const doc = await parse(src);
15
- const errors = doc.parseResult.lexerErrors.concat(doc.parseResult.parserErrors);
16
- if (errors.length > 0) {
17
- throw new Error(`Parse errors:\n${errors.map((e) => e.message).join('\n')}`);
18
- }
19
- return { document: doc, filePath: 'test.sysml' };
20
- }
21
- async function load(src) {
22
- return collectNativeConstraints([await parseDoc(src)]);
23
- }
24
- // ─── Test model builder (mirrors constraint-eval.test.ts) ─────────────────────
25
- let _id = 0;
26
- function elem(kind, name, attributes = {}) {
27
- return { id: `${kind}-${++_id}`, name, kind, layer: 'test', attributes };
28
- }
29
- function buildModel(elements, rels = []) {
30
- const byId = new Map(elements.map((e) => [e.id, e]));
31
- const byKind = new Map();
32
- for (const e of elements) {
33
- const list = byKind.get(e.kind) ?? [];
34
- list.push(e);
35
- byKind.set(e.kind, list);
36
- }
37
- const relationships = rels.map((r, i) => ({
38
- id: `rel-${i}`, type: r.type, sourceId: r.from, targetId: r.to,
39
- }));
40
- const outgoing = new Map();
41
- const incoming = new Map();
42
- const relationshipsByType = new Map();
43
- for (const r of relationships) {
44
- if (!outgoing.has(r.sourceId))
45
- outgoing.set(r.sourceId, []);
46
- outgoing.get(r.sourceId).push(r);
47
- if (!incoming.has(r.targetId))
48
- incoming.set(r.targetId, []);
49
- incoming.get(r.targetId).push(r);
50
- if (!relationshipsByType.has(r.type))
51
- relationshipsByType.set(r.type, []);
52
- relationshipsByType.get(r.type).push(r);
53
- }
54
- return { elements: byId, elementsByKind: byKind, relationships, relationshipsByType, outgoing, incoming };
55
- }
56
- describe('collectNativeConstraints', () => {
57
- it('extracts metadata and compiles the require constraint body', async () => {
58
- const constraints = await load(`
59
- package P {
60
- constraint def hazardMitigationRule {
61
- attribute id = "CR-MED-001";
62
- attribute appliesTo = "Hazard";
63
- attribute severity = RuleSeverityKind::error;
64
- attribute rationaleText = "Every hazard must be mitigated.";
65
- require constraint { mitigates->size() >= 1 }
66
- }
67
- }
68
- `);
69
- expect(constraints).toHaveLength(1);
70
- const c = constraints[0];
71
- expect(c.id).toBe('CR-MED-001');
72
- expect(c.appliesToKind).toBe('Hazard');
73
- expect(c.severity).toBe('error');
74
- expect(c.description).toBe('Every hazard must be mitigated.');
75
- expect(c.ast).toEqual({
76
- kind: 'cmp', op: '>=',
77
- left: { kind: 'method', target: { kind: 'feature', root: 'current', segments: ['mitigates'] }, name: 'size' },
78
- right: { kind: 'int', value: 1 },
79
- });
80
- });
81
- it('reads the severity enum, defaulting to warning when absent', async () => {
82
- const [a] = await load(`package P { constraint def R {
83
- attribute id = "A"; attribute appliesTo = "X";
84
- require constraint { foo->notEmpty() } } }`);
85
- expect(a.severity).toBe('warning');
86
- });
87
- it('skips defs with no require/assert body (metadata-only coverage/lifecycle rules)', async () => {
88
- const constraints = await load(`
89
- package P {
90
- constraint def coverageOnly {
91
- attribute id = "COV-1";
92
- attribute appliesTo = "Hazard";
93
- attribute standard = "ISO 14971";
94
- }
95
- }
96
- `);
97
- expect(constraints).toHaveLength(0);
98
- });
99
- it('skips defs without an id attribute', async () => {
100
- const constraints = await load(`package P { constraint def Anon {
101
- require constraint { foo->notEmpty() } } }`);
102
- expect(constraints).toHaveLength(0);
103
- });
104
- it('de-duplicates by rule id across document sets', async () => {
105
- // The same ontology file can appear in more than one document set (ontology
106
- // load + project parse); a rule id is unique so it must not double-count.
107
- const doc = await parseDoc(`
108
- package P {
109
- constraint def hazardMitigationRule {
110
- attribute id = "CR-MED-001";
111
- attribute appliesTo = "Hazard";
112
- require constraint { mitigates->size() >= 1 }
113
- }
114
- }
115
- `);
116
- const constraints = collectNativeConstraints([doc, doc]);
117
- expect(constraints).toHaveLength(1);
118
- expect(constraints[0].id).toBe('CR-MED-001');
119
- });
120
- });
121
- describe('native constraint evaluation (EE-3 rule semantics)', () => {
122
- it('requireRelationship: flags subjects missing the navigation', async () => {
123
- const h1 = elem('Hazard', 'H1'); // unmitigated → violation
124
- const h2 = elem('Hazard', 'H2'); // mitigated → ok
125
- const rc = elem('RiskControl', 'RC1');
126
- const m = buildModel([h1, h2, rc], [{ type: 'mitigates', from: h2.id, to: rc.id }]);
127
- const [native] = await load(`package P { constraint def hazardMitigationRule {
128
- attribute id = "CR-MED-001"; attribute appliesTo = "Hazard";
129
- attribute severity = RuleSeverityKind::error;
130
- attribute rationaleText = "hazard needs mitigation";
131
- require constraint { mitigates->size() >= 1 } } }`);
132
- const nativeViolations = evaluateConstraintNode(native, native.ast, m);
133
- expect(nativeViolations).toHaveLength(1);
134
- expect(nativeViolations[0].elementName).toBe('H1');
135
- expect(nativeViolations[0].severity).toBe('error');
136
- });
137
- it('requireAttribute: native attributes.X != "" flags empty attributes', async () => {
138
- const ok = elem('SoftwareComponent', 'SC1', { safetyClass: 'C' });
139
- const bad = elem('SoftwareComponent', 'SC2', {});
140
- const m = buildModel([ok, bad]);
141
- const [native] = await load(`package P { constraint def swSafety {
142
- attribute id = "CR-MED-020"; attribute appliesTo = "SoftwareComponent";
143
- attribute severity = RuleSeverityKind::error;
144
- require constraint { attributes.safetyClass != "" } } }`);
145
- const nativeViolations = evaluateConstraintNode(native, native.ast, m);
146
- expect(nativeViolations).toHaveLength(1);
147
- expect(nativeViolations[0].elementName).toBe('SC2');
148
- });
149
- });
150
- //# sourceMappingURL=constraint-loader.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-loader.test.js","sourceRoot":"","sources":["../../src/__tests__/constraint-loader.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAwB,eAAe,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAG3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,iFAAiF;AACjF,8EAA8E;AAC9E,iFAAiF;AACjF,8DAA8D;AAE9D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC,SAAS,CAAC;AAC3E,MAAM,KAAK,GAAG,WAAW,CAAQ,QAAQ,CAAC,CAAC;AAE3C,KAAK,UAAU,QAAQ,CAAC,GAAW;IAC/B,MAAM,GAAG,GAA2B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,YAAqB,CAAC,CAAC;IACzF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAoB,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,GAAW;IAC3B,OAAO,wBAAwB,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,iFAAiF;AAEjF,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,SAAS,IAAI,CAAC,IAAY,EAAE,IAAY,EAAE,aAAqC,EAAE;IAC7E,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAiB,CAAC;AAC5F,CAAC;AAED,SAAS,UAAU,CAAC,QAAuB,EAAE,OAAkB,EAAE;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,aAAa,GAAuB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1D,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE;KAC5C,CAAA,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;IACvD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAA8B,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5D,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5D,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1E,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAe,CAAC;AAC3H,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;;;;;;;;;;SAU9B,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9D,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YAClB,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI;YACrB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC7G,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;SACnC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;;uDAEwB,CAAC,CAAC;QACjD,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;;;;;;;;SAQ9B,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;uDACgB,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC3D,4EAA4E;QAC5E,0EAA0E;QAC1E,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC;;;;;;;;SAQ1B,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,wBAAwB,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAChE,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAiB,0BAA0B;QAC3E,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAiB,iBAAiB;QAClE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAEpF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC;;;;8DAI0B,CAAC,CAAC;QACxD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAEvE,MAAM,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QAEhC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC;;;oEAGgC,CAAC,CAAC;QAC9D,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAEvE,MAAM,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=csv-io.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"csv-io.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/csv-io.test.ts"],"names":[],"mappings":""}