@altopelago/aeos-core 0.11.0 → 0.12.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.
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/rules/numericForm.d.ts.map +1 -1
- package/dist/rules/numericForm.js +1 -9
- package/dist/rules/numericForm.js.map +1 -1
- package/dist/rules/stringForm.js +1 -1
- package/dist/rules/stringForm.js.map +1 -1
- package/dist/rules/typeCheck.d.ts +1 -0
- package/dist/rules/typeCheck.d.ts.map +1 -1
- package/dist/rules/typeCheck.js +6 -2
- package/dist/rules/typeCheck.js.map +1 -1
- package/dist/schema-codec.d.ts.map +1 -1
- package/dist/schema-codec.js +141 -8
- package/dist/schema-codec.js.map +1 -1
- package/dist/schema-tools.d.ts +90 -0
- package/dist/schema-tools.d.ts.map +1 -0
- package/dist/schema-tools.js +465 -0
- package/dist/schema-tools.js.map +1 -0
- package/dist/types/schema.d.ts +22 -1
- package/dist/types/schema.d.ts.map +1 -1
- package/dist/types/schema.js.map +1 -1
- package/dist/util/datatypes.d.ts +13 -0
- package/dist/util/datatypes.d.ts.map +1 -0
- package/dist/util/datatypes.js +50 -0
- package/dist/util/datatypes.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +6 -37
- package/dist/validate.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tooling primitives for deriving editable schema candidates and reviewing
|
|
3
|
+
* changes between schema versions. These functions do not admit migrations.
|
|
4
|
+
*/
|
|
5
|
+
import { compile } from '@altopelago/aeon-core';
|
|
6
|
+
import { parseAddress } from '@altopelago/sansa';
|
|
7
|
+
import { normalizeSchemaObject, parseSchemaSource, schemaToAeon } from './schema-codec.js';
|
|
8
|
+
export class SchemaInferenceError extends Error {
|
|
9
|
+
diagnostics;
|
|
10
|
+
constructor(message, diagnostics = []) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = 'SchemaInferenceError';
|
|
13
|
+
this.diagnostics = diagnostics;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const INFERENCE_ASSUMPTIONS = Object.freeze([
|
|
17
|
+
'Only bindings observed in this bootstrap document are represented.',
|
|
18
|
+
'Observed bindings are marked required; optionality must be reviewed by the author.',
|
|
19
|
+
'Collection indexes remain exact paths; selectors and reusable shapes must be authored deliberately.',
|
|
20
|
+
'Value types and datatype labels are copied, but bounds, patterns, unions, and business rules are not inferred.',
|
|
21
|
+
]);
|
|
22
|
+
export function inferSchemaFromAeon(source, options = {}) {
|
|
23
|
+
const maxInputBytes = options.maxInputBytes ?? options.compileOptions?.maxInputBytes;
|
|
24
|
+
const maxEvents = options.maxEvents ?? options.compileOptions?.maxEvents;
|
|
25
|
+
const compiled = compile(source, {
|
|
26
|
+
...options.compileOptions,
|
|
27
|
+
recovery: false,
|
|
28
|
+
datatypePolicy: options.compileOptions?.datatypePolicy ?? 'allow_custom',
|
|
29
|
+
...(maxInputBytes === undefined ? {} : { maxInputBytes }),
|
|
30
|
+
...(maxEvents === undefined ? {} : { maxEvents }),
|
|
31
|
+
});
|
|
32
|
+
if (compiled.errors.length > 0) {
|
|
33
|
+
const diagnostics = compiled.errors.map(formatDiagnostic);
|
|
34
|
+
throw new SchemaInferenceError(`Bootstrap AEON did not compile: ${diagnostics.join('; ')}`, diagnostics);
|
|
35
|
+
}
|
|
36
|
+
return inferSchemaFromEvents(compiled.events, options.world === undefined ? {} : { world: options.world });
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Projects a schema into one inspectable AEON instance shape. The schema remains
|
|
40
|
+
* authoritative; this deliberately cannot represent every valid value.
|
|
41
|
+
*/
|
|
42
|
+
export function projectSchemaToAeon(schema) {
|
|
43
|
+
const root = projectionNode();
|
|
44
|
+
const omittedRules = [];
|
|
45
|
+
let includesOptional = false;
|
|
46
|
+
let expandsSelector = false;
|
|
47
|
+
const orderedRules = [...schema.rules].sort((left, right) => Number(left.selector !== undefined) - Number(right.selector !== undefined));
|
|
48
|
+
for (const rule of orderedRules) {
|
|
49
|
+
const address = parseAddress(rule.path ?? rule.selector);
|
|
50
|
+
if (!address.ok || address.address.root.kind !== 'absolute') {
|
|
51
|
+
omittedRules.push(ruleAddress(rule));
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
let current = root;
|
|
55
|
+
let supported = true;
|
|
56
|
+
for (const selector of address.address.selectors) {
|
|
57
|
+
if (selector.type === 'member') {
|
|
58
|
+
current = childMember(current, selector.name);
|
|
59
|
+
}
|
|
60
|
+
else if (selector.type === 'position') {
|
|
61
|
+
current = childPosition(current, selector.index);
|
|
62
|
+
}
|
|
63
|
+
else if (selector.type === 'directExpansion') {
|
|
64
|
+
expandsSelector = true;
|
|
65
|
+
current = projectionContainerKind(current) === 'sequence'
|
|
66
|
+
? childPosition(current, 0)
|
|
67
|
+
: childMember(current, 'example');
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
supported = false;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (!supported) {
|
|
75
|
+
omittedRules.push(ruleAddress(rule));
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
current.rule = rule;
|
|
79
|
+
if (rule.constraints.required !== true)
|
|
80
|
+
includesOptional = true;
|
|
81
|
+
}
|
|
82
|
+
const assumptions = [
|
|
83
|
+
'Placeholder values illustrate representation shape; they are not guaranteed to satisfy business patterns or ranges.',
|
|
84
|
+
...(includesOptional ? ['Optional declarations are included to make the available shape visible.'] : []),
|
|
85
|
+
...(expandsSelector ? ["Each direct wildcard selector is represented by one member or item named 'example'."] : []),
|
|
86
|
+
...(omittedRules.length > 0 ? ['Rules using filters, ranges, parent traversal, or other non-structural selectors are omitted.'] : []),
|
|
87
|
+
];
|
|
88
|
+
return {
|
|
89
|
+
source: `${renderProjectionRoot(root)}\n`,
|
|
90
|
+
assumptions,
|
|
91
|
+
omittedRules,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function projectSchemaSourceToAeon(source) {
|
|
95
|
+
return projectSchemaToAeon(parseSchemaSource(source));
|
|
96
|
+
}
|
|
97
|
+
function projectionNode() {
|
|
98
|
+
return { members: new Map(), positions: new Map() };
|
|
99
|
+
}
|
|
100
|
+
function childMember(parent, name) {
|
|
101
|
+
const existing = parent.members.get(name);
|
|
102
|
+
if (existing !== undefined)
|
|
103
|
+
return existing;
|
|
104
|
+
const child = projectionNode();
|
|
105
|
+
parent.members.set(name, child);
|
|
106
|
+
return child;
|
|
107
|
+
}
|
|
108
|
+
function childPosition(parent, index) {
|
|
109
|
+
const existing = parent.positions.get(index);
|
|
110
|
+
if (existing !== undefined)
|
|
111
|
+
return existing;
|
|
112
|
+
const child = projectionNode();
|
|
113
|
+
parent.positions.set(index, child);
|
|
114
|
+
return child;
|
|
115
|
+
}
|
|
116
|
+
function projectionContainerKind(node) {
|
|
117
|
+
const type = node.rule?.constraints.type;
|
|
118
|
+
return type === 'ListNode' || type === 'ListLiteral' || type === 'TupleLiteral'
|
|
119
|
+
|| node.rule?.constraints.type_is === 'list' || node.rule?.constraints.type_is === 'tuple'
|
|
120
|
+
? 'sequence'
|
|
121
|
+
: 'object';
|
|
122
|
+
}
|
|
123
|
+
function renderProjectionRoot(root) {
|
|
124
|
+
return [...root.members.entries()].map(([name, node]) => renderProjectionBinding(name, node, 0)).join('\n');
|
|
125
|
+
}
|
|
126
|
+
function renderProjectionBinding(name, node, indent) {
|
|
127
|
+
const pad = ' '.repeat(indent);
|
|
128
|
+
return `${pad}${renderProjectionKey(name)}:${projectionDatatype(node)} = ${renderProjectionValue(node, indent)}`;
|
|
129
|
+
}
|
|
130
|
+
function renderProjectionValue(node, indent) {
|
|
131
|
+
const type = node.rule?.constraints.type;
|
|
132
|
+
if (node.positions.size > 0 || type === 'ListNode' || type === 'ListLiteral' || type === 'TupleLiteral') {
|
|
133
|
+
const tuple = type === 'TupleLiteral' || node.rule?.constraints.type_is === 'tuple';
|
|
134
|
+
const open = tuple ? '(' : '[';
|
|
135
|
+
const close = tuple ? ')' : ']';
|
|
136
|
+
const maximum = Math.max(-1, ...node.positions.keys());
|
|
137
|
+
if (maximum < 0)
|
|
138
|
+
return `${open}${close}`;
|
|
139
|
+
const items = Array.from({ length: maximum + 1 }, (_, index) => {
|
|
140
|
+
const item = node.positions.get(index);
|
|
141
|
+
return `${' '.repeat(indent + 1)}${item === undefined ? '!notSet' : renderProjectionValue(item, indent + 1)}`;
|
|
142
|
+
});
|
|
143
|
+
return `${open}\n${items.join('\n')}\n${' '.repeat(indent)}${close}`;
|
|
144
|
+
}
|
|
145
|
+
if (node.members.size > 0 || type === 'ObjectNode') {
|
|
146
|
+
if (node.members.size === 0)
|
|
147
|
+
return '{}';
|
|
148
|
+
const entries = [...node.members.entries()].map(([name, child]) => renderProjectionBinding(name, child, indent + 1));
|
|
149
|
+
return `{\n${entries.join('\n')}\n${' '.repeat(indent)}}`;
|
|
150
|
+
}
|
|
151
|
+
return projectionLiteral(node.rule?.constraints);
|
|
152
|
+
}
|
|
153
|
+
function projectionDatatype(node) {
|
|
154
|
+
if (node.rule?.constraints.datatype !== undefined)
|
|
155
|
+
return node.rule.constraints.datatype;
|
|
156
|
+
const type = node.rule?.constraints.type;
|
|
157
|
+
if (type === 'ObjectNode' || node.members.size > 0)
|
|
158
|
+
return 'object';
|
|
159
|
+
if (type === 'TupleLiteral')
|
|
160
|
+
return 'tuple';
|
|
161
|
+
if (type === 'ListNode' || type === 'ListLiteral' || node.positions.size > 0)
|
|
162
|
+
return 'list';
|
|
163
|
+
return {
|
|
164
|
+
StringLiteral: 'string', NumberLiteral: 'number', BooleanLiteral: 'boolean', ToggleLiteral: 'toggle',
|
|
165
|
+
NullLiteral: 'null', SansaAddressLiteral: 'sansa',
|
|
166
|
+
}[type ?? ''] ?? 'value';
|
|
167
|
+
}
|
|
168
|
+
function projectionLiteral(constraints) {
|
|
169
|
+
const effective = constraints?.any_of?.[0] === undefined ? constraints : { ...constraints, ...constraints.any_of[0], any_of: undefined };
|
|
170
|
+
switch (effective?.type) {
|
|
171
|
+
case 'StringLiteral': {
|
|
172
|
+
const minimum = Math.max(0, effective.min_length ?? 0);
|
|
173
|
+
const maximum = Math.max(minimum, effective.max_length ?? Math.max(7, minimum));
|
|
174
|
+
const length = Math.max(minimum, Math.min(7, maximum));
|
|
175
|
+
return JSON.stringify('example'.slice(0, length).padEnd(length, 'x'));
|
|
176
|
+
}
|
|
177
|
+
case 'NumberLiteral': return effective.min_value ?? '0';
|
|
178
|
+
case 'BooleanLiteral': return 'true';
|
|
179
|
+
case 'ToggleLiteral': return effective.toggle_pair === 'on_off' ? 'on' : 'yes';
|
|
180
|
+
case 'NullLiteral': return `!${effective.null_value ?? effective.null_values?.[0] ?? 'notSet'}`;
|
|
181
|
+
case 'SansaAddressLiteral': return '$';
|
|
182
|
+
case 'InfinityLiteral': return 'Infinity';
|
|
183
|
+
case 'NaNLiteral': return 'NaN';
|
|
184
|
+
case 'HexLiteral': return '#0';
|
|
185
|
+
default: return '!notSet';
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function renderProjectionKey(key) {
|
|
189
|
+
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(key) ? key : JSON.stringify(key);
|
|
190
|
+
}
|
|
191
|
+
export function inferSchemaFromEvents(events, options = {}) {
|
|
192
|
+
const rules = [];
|
|
193
|
+
const seen = new Set();
|
|
194
|
+
for (const event of events) {
|
|
195
|
+
const path = formatEventPath(event.path);
|
|
196
|
+
if (path === '$' || isHeaderPath(path) || seen.has(path))
|
|
197
|
+
continue;
|
|
198
|
+
seen.add(path);
|
|
199
|
+
const declarationId = generatedRuleIdentity(path);
|
|
200
|
+
rules.push({
|
|
201
|
+
declaration_id: declarationId,
|
|
202
|
+
lineage_id: declarationId,
|
|
203
|
+
path,
|
|
204
|
+
constraints: constraintsFromShape(event),
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
const schema = normalizeSchemaObject({ world: options.world ?? 'open', rules });
|
|
208
|
+
return {
|
|
209
|
+
schema,
|
|
210
|
+
source: schemaToAeon(schema),
|
|
211
|
+
observedEventCount: events.length,
|
|
212
|
+
assumptions: INFERENCE_ASSUMPTIONS,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
export function diffSchemaSources(source, target) {
|
|
216
|
+
return diffSchemas(parseSchemaSource(source), parseSchemaSource(target));
|
|
217
|
+
}
|
|
218
|
+
/** Validate authored temporal intent against the two schema states it relates. */
|
|
219
|
+
export function validateSchemaEvolution(source, target) {
|
|
220
|
+
const before = normalizeSchemaObject(source);
|
|
221
|
+
const after = normalizeSchemaObject(target);
|
|
222
|
+
const beforeById = declarationsById(before.rules);
|
|
223
|
+
const afterById = declarationsById(after.rules);
|
|
224
|
+
const diagnostics = [];
|
|
225
|
+
for (const change of after.evolution ?? []) {
|
|
226
|
+
const missing = change.from_declarations.filter((id) => !beforeById.has(id));
|
|
227
|
+
if (missing.length > 0) {
|
|
228
|
+
diagnostics.push({
|
|
229
|
+
changeId: change.change_id,
|
|
230
|
+
code: 'SOURCE_DECLARATION_MISSING',
|
|
231
|
+
message: `Source declaration${missing.length === 1 ? '' : 's'} ${missing.join(', ')} do not exist in the source schema.`,
|
|
232
|
+
});
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
if (!evolutionMatchesStates(change, beforeById, afterById)) {
|
|
236
|
+
diagnostics.push({
|
|
237
|
+
changeId: change.change_id,
|
|
238
|
+
code: 'TEMPORAL_KIND_MISMATCH',
|
|
239
|
+
message: `The declared '${change.kind}' intent does not match the source and target schema states.`,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return diagnostics;
|
|
244
|
+
}
|
|
245
|
+
export function validateSchemaEvolutionSources(source, target) {
|
|
246
|
+
return validateSchemaEvolution(parseSchemaSource(source), parseSchemaSource(target));
|
|
247
|
+
}
|
|
248
|
+
export function diffSchemas(source, target) {
|
|
249
|
+
const before = normalizeSchemaObject(source);
|
|
250
|
+
const after = normalizeSchemaObject(target);
|
|
251
|
+
const changes = [];
|
|
252
|
+
compareSetting(changes, 'world', before.world, after.world);
|
|
253
|
+
compareSetting(changes, 'reference_policy', before.reference_policy, after.reference_policy);
|
|
254
|
+
compareSetting(changes, 'attribute_policy', before.attribute_policy, after.attribute_policy);
|
|
255
|
+
compareSetting(changes, 'datatype_rules', before.datatype_rules, after.datatype_rules);
|
|
256
|
+
compareSetting(changes, 'resource_policy', before.resource_policy, after.resource_policy);
|
|
257
|
+
const afterByDeclaration = new Map(after.rules
|
|
258
|
+
.filter((rule) => rule.declaration_id !== undefined)
|
|
259
|
+
.map((rule) => [rule.declaration_id, rule]));
|
|
260
|
+
const afterByAddress = new Map(after.rules.map((rule) => [ruleIdentity(rule), rule]));
|
|
261
|
+
const matchedAfter = new Set();
|
|
262
|
+
const removed = [];
|
|
263
|
+
const added = [];
|
|
264
|
+
for (const rule of before.rules) {
|
|
265
|
+
const declarationMatch = rule.declaration_id === undefined ? undefined : afterByDeclaration.get(rule.declaration_id);
|
|
266
|
+
const addressMatch = afterByAddress.get(ruleIdentity(rule));
|
|
267
|
+
const compatibleAddressMatch = addressMatch !== undefined
|
|
268
|
+
&& (rule.declaration_id === undefined
|
|
269
|
+
|| addressMatch.declaration_id === undefined
|
|
270
|
+
|| rule.declaration_id === addressMatch.declaration_id)
|
|
271
|
+
? addressMatch
|
|
272
|
+
: undefined;
|
|
273
|
+
const next = declarationMatch !== undefined && !matchedAfter.has(declarationMatch)
|
|
274
|
+
? declarationMatch
|
|
275
|
+
: compatibleAddressMatch !== undefined && !matchedAfter.has(compatibleAddressMatch)
|
|
276
|
+
? compatibleAddressMatch
|
|
277
|
+
: undefined;
|
|
278
|
+
if (!next) {
|
|
279
|
+
removed.push(rule);
|
|
280
|
+
changes.push({ kind: 'rule-removed', rule });
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
matchedAfter.add(next);
|
|
284
|
+
const identity = rule.declaration_id !== undefined && rule.declaration_id === next.declaration_id
|
|
285
|
+
? `declaration:${rule.declaration_id}`
|
|
286
|
+
: ruleIdentity(rule);
|
|
287
|
+
if (ruleIdentity(rule) !== ruleIdentity(next)) {
|
|
288
|
+
changes.push({
|
|
289
|
+
kind: 'rule-relocated',
|
|
290
|
+
identity,
|
|
291
|
+
before: rule,
|
|
292
|
+
after: next,
|
|
293
|
+
constraintPaths: changedPaths(rule.constraints, next.constraints),
|
|
294
|
+
evidence: 'shared-declaration-id',
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
else if (!jsonEqual(rule.constraints, next.constraints)
|
|
298
|
+
|| rule.declaration_id !== next.declaration_id
|
|
299
|
+
|| rule.lineage_id !== next.lineage_id) {
|
|
300
|
+
const metadataPaths = [
|
|
301
|
+
...(rule.declaration_id === next.declaration_id ? [] : ['declaration_id']),
|
|
302
|
+
...(rule.lineage_id === next.lineage_id ? [] : ['lineage_id']),
|
|
303
|
+
];
|
|
304
|
+
changes.push({
|
|
305
|
+
kind: 'rule-changed',
|
|
306
|
+
identity,
|
|
307
|
+
before: rule,
|
|
308
|
+
after: next,
|
|
309
|
+
constraintPaths: changedPaths(rule.constraints, next.constraints),
|
|
310
|
+
...(metadataPaths.length === 0 ? {} : { metadataPaths }),
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
for (const rule of after.rules) {
|
|
315
|
+
if (!matchedAfter.has(rule)) {
|
|
316
|
+
added.push(rule);
|
|
317
|
+
changes.push({ kind: 'rule-added', rule });
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
const possibleRuleMoves = [];
|
|
321
|
+
for (const oldRule of removed) {
|
|
322
|
+
const lineageMatches = oldRule.lineage_id === undefined
|
|
323
|
+
? []
|
|
324
|
+
: added.filter((newRule) => newRule.lineage_id === oldRule.lineage_id);
|
|
325
|
+
const uniqueLineage = lineageMatches.length === 1
|
|
326
|
+
&& removed.filter((candidate) => candidate.lineage_id === oldRule.lineage_id).length === 1;
|
|
327
|
+
const constraintMatches = added.filter((newRule) => jsonEqual(oldRule.constraints, newRule.constraints));
|
|
328
|
+
const uniqueConstraints = constraintMatches.length === 1
|
|
329
|
+
&& removed.filter((candidate) => jsonEqual(candidate.constraints, constraintMatches[0].constraints)).length === 1;
|
|
330
|
+
const matches = uniqueLineage ? lineageMatches : uniqueConstraints ? constraintMatches : [];
|
|
331
|
+
if (matches.length === 1) {
|
|
332
|
+
possibleRuleMoves.push({
|
|
333
|
+
from: ruleIdentity(oldRule),
|
|
334
|
+
to: ruleIdentity(matches[0]),
|
|
335
|
+
reason: uniqueLineage ? 'shared-lineage-id' : 'identical-constraints',
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return { equal: changes.length === 0, changes, possibleRuleMoves };
|
|
340
|
+
}
|
|
341
|
+
function constraintsFromShape(entry) {
|
|
342
|
+
const constraints = {
|
|
343
|
+
required: true,
|
|
344
|
+
type: entry.value.type,
|
|
345
|
+
};
|
|
346
|
+
if (entry.datatype)
|
|
347
|
+
constraints.datatype = entry.datatype;
|
|
348
|
+
if (entry.annotations && entry.annotations.size > 0) {
|
|
349
|
+
const attributes = {};
|
|
350
|
+
for (const [key, attribute] of entry.annotations) {
|
|
351
|
+
attributes[key] = constraintsFromShape(attribute);
|
|
352
|
+
}
|
|
353
|
+
constraints.attributes = attributes;
|
|
354
|
+
}
|
|
355
|
+
return constraints;
|
|
356
|
+
}
|
|
357
|
+
function declarationsById(rules) {
|
|
358
|
+
return new Map(rules.flatMap((rule) => rule.declaration_id === undefined ? [] : [[rule.declaration_id, rule]]));
|
|
359
|
+
}
|
|
360
|
+
function evolutionMatchesStates(change, before, after) {
|
|
361
|
+
const from = change.from_declarations.map((id) => before.get(id));
|
|
362
|
+
const to = change.to_declarations.map((id) => after.get(id));
|
|
363
|
+
if (change.kind === 'add')
|
|
364
|
+
return !before.has(change.to_declarations[0]) && to.length === 1;
|
|
365
|
+
if (change.kind === 'remove')
|
|
366
|
+
return !after.has(change.from_declarations[0]) && from.length === 1;
|
|
367
|
+
if (['split', 'merge', 'derive', 'replace'].includes(change.kind))
|
|
368
|
+
return true;
|
|
369
|
+
if (from.length !== 1 || to.length !== 1)
|
|
370
|
+
return false;
|
|
371
|
+
const sourceAddress = ruleAddress(from[0]);
|
|
372
|
+
const targetAddress = ruleAddress(to[0]);
|
|
373
|
+
if (change.kind === 'rename')
|
|
374
|
+
return sameParent(sourceAddress, targetAddress) && sourceAddress !== targetAddress;
|
|
375
|
+
if (change.kind === 'move')
|
|
376
|
+
return !sameParent(sourceAddress, targetAddress);
|
|
377
|
+
if (change.kind === 'constraint-change') {
|
|
378
|
+
return sourceAddress === targetAddress && !jsonEqual(from[0].constraints, to[0].constraints);
|
|
379
|
+
}
|
|
380
|
+
if (change.kind === 'datatype-change') {
|
|
381
|
+
return sourceAddress === targetAddress
|
|
382
|
+
&& from[0].constraints.datatype !== to[0].constraints.datatype;
|
|
383
|
+
}
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
function ruleAddress(rule) {
|
|
387
|
+
return rule.path ?? rule.selector;
|
|
388
|
+
}
|
|
389
|
+
function sameParent(left, right) {
|
|
390
|
+
const leftAddress = parseAddress(left);
|
|
391
|
+
const rightAddress = parseAddress(right);
|
|
392
|
+
if (!leftAddress.ok || !rightAddress.ok)
|
|
393
|
+
return false;
|
|
394
|
+
return jsonEqual(leftAddress.address.root, rightAddress.address.root)
|
|
395
|
+
&& jsonEqual(leftAddress.address.selectors.slice(0, -1), rightAddress.address.selectors.slice(0, -1));
|
|
396
|
+
}
|
|
397
|
+
function formatEventPath(path) {
|
|
398
|
+
let result = '';
|
|
399
|
+
for (const segment of path.segments) {
|
|
400
|
+
if (segment.type === 'root')
|
|
401
|
+
result = '$';
|
|
402
|
+
if (segment.type === 'member') {
|
|
403
|
+
result += /^[A-Za-z_][A-Za-z0-9_]*$/.test(segment.key)
|
|
404
|
+
? `.${segment.key}`
|
|
405
|
+
: `.[${JSON.stringify(segment.key)}]`;
|
|
406
|
+
}
|
|
407
|
+
if (segment.type === 'index')
|
|
408
|
+
result += `[${segment.index}]`;
|
|
409
|
+
}
|
|
410
|
+
return result || '$';
|
|
411
|
+
}
|
|
412
|
+
function isHeaderPath(path) {
|
|
413
|
+
return path.startsWith('$.[') && path.includes('"aeon:');
|
|
414
|
+
}
|
|
415
|
+
function formatDiagnostic(error) {
|
|
416
|
+
if (error instanceof Error)
|
|
417
|
+
return error.message;
|
|
418
|
+
return String(error);
|
|
419
|
+
}
|
|
420
|
+
function ruleIdentity(rule) {
|
|
421
|
+
return rule.path !== undefined ? `path:${rule.path}` : `selector:${rule.selector}`;
|
|
422
|
+
}
|
|
423
|
+
function generatedRuleIdentity(path) {
|
|
424
|
+
return `rule:path:${encodeURIComponent(path)}`;
|
|
425
|
+
}
|
|
426
|
+
function compareSetting(changes, setting, before, after) {
|
|
427
|
+
if (!jsonEqual(before, after)) {
|
|
428
|
+
changes.push({
|
|
429
|
+
kind: 'setting-changed',
|
|
430
|
+
setting,
|
|
431
|
+
...(before !== undefined ? { before: before } : {}),
|
|
432
|
+
...(after !== undefined ? { after: after } : {}),
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
function jsonEqual(left, right) {
|
|
437
|
+
return stableJson(left) === stableJson(right);
|
|
438
|
+
}
|
|
439
|
+
function stableJson(value) {
|
|
440
|
+
if (value === undefined)
|
|
441
|
+
return 'undefined';
|
|
442
|
+
if (value === null || typeof value !== 'object')
|
|
443
|
+
return JSON.stringify(value);
|
|
444
|
+
if (Array.isArray(value))
|
|
445
|
+
return `[${value.map(stableJson).join(',')}]`;
|
|
446
|
+
return `{${Object.keys(value)
|
|
447
|
+
.sort()
|
|
448
|
+
.map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`)
|
|
449
|
+
.join(',')}}`;
|
|
450
|
+
}
|
|
451
|
+
function changedPaths(before, after, prefix = 'constraints') {
|
|
452
|
+
if (jsonEqual(before, after))
|
|
453
|
+
return [];
|
|
454
|
+
if (!isRecord(before) || !isRecord(after))
|
|
455
|
+
return [prefix];
|
|
456
|
+
const paths = [];
|
|
457
|
+
for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {
|
|
458
|
+
paths.push(...changedPaths(before[key], after[key], `${prefix}.${key}`));
|
|
459
|
+
}
|
|
460
|
+
return paths;
|
|
461
|
+
}
|
|
462
|
+
function isRecord(value) {
|
|
463
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=schema-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-tools.js","sourceRoot":"","sources":["../src/schema-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/types/schema.d.ts
CHANGED
|
@@ -63,7 +63,7 @@ export interface ConstraintsV1 {
|
|
|
63
63
|
readonly max_length?: number;
|
|
64
64
|
/** AEOS portable pattern for string matching */
|
|
65
65
|
readonly pattern?: string;
|
|
66
|
-
/**
|
|
66
|
+
/** Exact datatype-label constraint; deeper datatype semantics belong in datatype_rules. */
|
|
67
67
|
readonly datatype?: string;
|
|
68
68
|
/** Attribute entry constraints keyed by attribute name */
|
|
69
69
|
readonly attributes?: Readonly<Record<string, AttributeConstraintsV1>>;
|
|
@@ -74,6 +74,14 @@ export interface ConstraintsV1 {
|
|
|
74
74
|
* Schema rule for an exact SANSA path or non-exact SANSA selector
|
|
75
75
|
*/
|
|
76
76
|
export interface SchemaRule {
|
|
77
|
+
/** Stable identity for this declaration across schema versions. */
|
|
78
|
+
readonly declaration_id?: string;
|
|
79
|
+
/** Optional semantic lineage shared by related declarations. */
|
|
80
|
+
readonly lineage_id?: string;
|
|
81
|
+
/** Optional short consumer-facing name; non-operational schema metadata. */
|
|
82
|
+
readonly label?: string;
|
|
83
|
+
/** Optional consumer-facing purpose and usage description; non-operational schema metadata. */
|
|
84
|
+
readonly description?: string;
|
|
77
85
|
/** Exact SANSA path this rule applies to */
|
|
78
86
|
readonly path?: string;
|
|
79
87
|
/** SANSA selector this rule applies to */
|
|
@@ -81,12 +89,25 @@ export interface SchemaRule {
|
|
|
81
89
|
/** Constraints to apply */
|
|
82
90
|
readonly constraints: ConstraintsV1;
|
|
83
91
|
}
|
|
92
|
+
export type SchemaEvolutionKindV1 = 'add' | 'remove' | 'rename' | 'move' | 'constraint-change' | 'datatype-change' | 'split' | 'merge' | 'derive' | 'replace';
|
|
93
|
+
/** Authored temporal intent relating declarations across schema versions. */
|
|
94
|
+
export interface SchemaEvolutionV1 {
|
|
95
|
+
readonly change_id: string;
|
|
96
|
+
readonly kind: SchemaEvolutionKindV1;
|
|
97
|
+
readonly from_declarations: readonly string[];
|
|
98
|
+
readonly to_declarations: readonly string[];
|
|
99
|
+
readonly from_contract?: string;
|
|
100
|
+
readonly transform?: string;
|
|
101
|
+
readonly note?: string;
|
|
102
|
+
}
|
|
84
103
|
/**
|
|
85
104
|
* AEOS Schema v1
|
|
86
105
|
*/
|
|
87
106
|
export interface SchemaV1 {
|
|
88
107
|
/** Array of rules */
|
|
89
108
|
readonly rules: readonly SchemaRule[];
|
|
109
|
+
/** Authored changes from an earlier schema into this schema. */
|
|
110
|
+
readonly evolution?: readonly SchemaEvolutionV1[];
|
|
90
111
|
/** Open-world or closed-world validation policy */
|
|
91
112
|
readonly world?: 'open' | 'closed';
|
|
92
113
|
/** Optional schema-wide reference policy */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,aAAa;CAAG;AAEhE,MAAM,WAAW,aAAa;IAC1B,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAE5B,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB,uDAAuD;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAE3C,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAE5B,gEAAgE;IAChE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAElC,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE7B,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEzC,mCAAmC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAEnD,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAEpD,uDAAuD;IACvD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IAEzD,oFAAoF;IACpF,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAE3C,kFAAkF;IAClF,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAE1C,iDAAiD;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAEtC,gDAAgD;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,gDAAgD;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,8EAA8E;IAC9E,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAE3C,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,gDAAgD;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/types/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0LH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAC9D,UAAU;IACV,MAAM;IACN,QAAQ;IACR,UAAU;IACV,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,aAAa;IACb,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,0BAA0B;IAC1B,wBAAwB;IACxB,SAAS;IACT,cAAc;IACd,cAAc;IACd,cAAc;IACd,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,yBAAyB;IACzB,WAAW;IACX,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,UAAU;IACV,YAAY;IACZ,mBAAmB;CACtB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAoC;IACzE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return the base name of a datatype without generic parameters or clarifiers.
|
|
3
|
+
*/
|
|
4
|
+
export declare function datatypeBase(datatype: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Parse the JSON-compatible values from a datatype clarifier list.
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseClarifierValues(datatype: string): (string | number)[];
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the radix declared by a built-in numeric datatype.
|
|
11
|
+
*/
|
|
12
|
+
export declare function declaredRadixFromDatatype(datatype: string | undefined): number | null;
|
|
13
|
+
//# sourceMappingURL=datatypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datatypes.d.ts","sourceRoot":"","sources":["../../src/util/datatypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAW1E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAWrF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return the base name of a datatype without generic parameters or clarifiers.
|
|
3
|
+
*/
|
|
4
|
+
export function datatypeBase(datatype) {
|
|
5
|
+
const genericIdx = datatype.indexOf('<');
|
|
6
|
+
const clarifierIdx = datatype.indexOf('[');
|
|
7
|
+
const endIdx = [genericIdx, clarifierIdx]
|
|
8
|
+
.filter((idx) => idx >= 0)
|
|
9
|
+
.reduce((min, idx) => Math.min(min, idx), datatype.length);
|
|
10
|
+
return datatype.slice(0, endIdx);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parse the JSON-compatible values from a datatype clarifier list.
|
|
14
|
+
*/
|
|
15
|
+
export function parseClarifierValues(datatype) {
|
|
16
|
+
const start = datatype.indexOf('[');
|
|
17
|
+
if (start < 0 || !datatype.endsWith(']'))
|
|
18
|
+
return [];
|
|
19
|
+
const payload = datatype.slice(start + 1, -1);
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(`[${payload}]`);
|
|
22
|
+
if (!Array.isArray(parsed))
|
|
23
|
+
return [];
|
|
24
|
+
return parsed.filter((value) => typeof value === 'string' || typeof value === 'number');
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolve the radix declared by a built-in numeric datatype.
|
|
32
|
+
*/
|
|
33
|
+
export function declaredRadixFromDatatype(datatype) {
|
|
34
|
+
if (datatype === undefined)
|
|
35
|
+
return null;
|
|
36
|
+
const trimmed = datatype.trim();
|
|
37
|
+
if (trimmed.toLowerCase() === 'decimal')
|
|
38
|
+
return 10;
|
|
39
|
+
const alias = /^radix(2|6|8|12)$/i.exec(trimmed);
|
|
40
|
+
if (alias)
|
|
41
|
+
return Number(alias[1]);
|
|
42
|
+
if (datatypeBase(trimmed).toLowerCase() !== 'radix')
|
|
43
|
+
return null;
|
|
44
|
+
const values = parseClarifierValues(trimmed);
|
|
45
|
+
if (values.length !== 1 || typeof values[0] !== 'number')
|
|
46
|
+
return null;
|
|
47
|
+
const value = values[0];
|
|
48
|
+
return Number.isInteger(value) && value >= 2 && value <= 64 ? value : null;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=datatypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datatypes.js","sourceRoot":"","sources":["../../src/util/datatypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC;SACpC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;SACzB,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAY,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAA4B,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IACtH,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA4B;IAClE,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,KAAK;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC"}
|