@altopelago/aeon-canonical 0.9.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/README.md ADDED
@@ -0,0 +1,83 @@
1
+ # @altopelago/aeon-canonical
2
+
3
+ Canonical AEON emitter.
4
+
5
+ This package produces a deterministic AEON text representation suitable for
6
+ hashing, diffing, and signing.
7
+
8
+ ## Quick Start
9
+
10
+ ### Canonicalize existing AEON text
11
+
12
+ ```ts
13
+ import { canonicalize } from '@altopelago/aeon-canonical';
14
+
15
+ const result = canonicalize('b = 1\na = 2', {
16
+ maxSeparatorDepth: 8,
17
+ maxAttributeDepth: 8,
18
+ });
19
+ if (result.errors.length === 0) {
20
+ console.log(result.text);
21
+ }
22
+ ```
23
+
24
+ ### Emit AEON from a plain object
25
+
26
+ ```ts
27
+ import { emitFromObject } from '@altopelago/aeon-canonical';
28
+
29
+ const result = emitFromObject(
30
+ {
31
+ name: 'miss-monsoon',
32
+ settings: { targetLufs: -14 },
33
+ },
34
+ { includeHeader: true }
35
+ );
36
+ ```
37
+
38
+ ## What This Package Does
39
+
40
+ - canonicalizes parsed AEON documents into stable text
41
+ - emits deterministic AEON from plain TypeScript objects
42
+ - sorts header fields and binding keys lexicographically
43
+
44
+ ## Common Patterns
45
+
46
+ ### Include a generated header when emitting
47
+
48
+ ```ts
49
+ const result = emitFromObject(
50
+ { name: 'miss-monsoon' },
51
+ { includeHeader: true }
52
+ );
53
+ ```
54
+
55
+ ### Override emitted header fields
56
+
57
+ ```ts
58
+ const result = emitFromObject(
59
+ { name: 'miss-monsoon' },
60
+ {
61
+ includeHeader: true,
62
+ header: {
63
+ encoding: 'utf-8',
64
+ mode: 'strict',
65
+ profile: 'aeon.gp.profile.v1',
66
+ version: 1,
67
+ },
68
+ }
69
+ );
70
+ ```
71
+
72
+ ## API
73
+
74
+ - `canonicalize(input, options?)`
75
+ - `emitFromObject(object, options?)`
76
+
77
+ ## Notes
78
+
79
+ - Emits a default header when none exists.
80
+ - Sorts header fields and binding keys lexicographically.
81
+ - Preserves reference tokens (`~` / `~>`).
82
+ - Parses separator-spec depth up to the AEON v1 capability floor (`8`) during canonicalization.
83
+ - `emitFromObject` emits deterministic AEON from plain TS objects and fails closed on unsupported values.
@@ -0,0 +1,3 @@
1
+ import type { TypeAnnotation } from '@altopelago/aeon-parser';
2
+ export declare function formatDatatypeAnnotation(datatype: TypeAnnotation): string;
3
+ //# sourceMappingURL=datatype.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datatype.d.ts","sourceRoot":"","sources":["../src/datatype.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAMzE"}
@@ -0,0 +1,8 @@
1
+ export function formatDatatypeAnnotation(datatype) {
2
+ const name = datatype.name;
3
+ const generics = datatype.genericArgs.length > 0 ? `<${datatype.genericArgs.join(', ')}>` : '';
4
+ const radixBase = datatype.radixBase != null ? `[${datatype.radixBase}]` : '';
5
+ const sep = datatype.separators.length > 0 ? datatype.separators.map((separator) => `[${separator}]`).join('') : '';
6
+ return `:${name}${generics}${radixBase}${sep}`;
7
+ }
8
+ //# sourceMappingURL=datatype.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datatype.js","sourceRoot":"","sources":["../src/datatype.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,wBAAwB,CAAC,QAAwB;IAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/F,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpH,OAAO,IAAI,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type LexerError } from '@altopelago/aeon-lexer';
2
+ import { type ParserError } from '@altopelago/aeon-parser';
3
+ export type CanonicalError = LexerError | ParserError;
4
+ export interface CanonicalResult {
5
+ readonly text: string;
6
+ readonly errors: readonly CanonicalError[];
7
+ }
8
+ export interface CanonicalizeOptions {
9
+ /** Maximum number of separator specs in a datatype annotation. Default: 8. */
10
+ readonly maxSeparatorDepth?: number;
11
+ /** Maximum nesting depth for attribute heads. Default: 1. */
12
+ readonly maxAttributeDepth?: number;
13
+ /** Maximum nesting depth for nested generic type annotations. Default: 8. */
14
+ readonly maxGenericDepth?: number;
15
+ }
16
+ export interface EmitObjectOptions {
17
+ readonly includeHeader?: boolean;
18
+ readonly header?: Readonly<Record<string, string | number | boolean>>;
19
+ readonly sortKeys?: boolean;
20
+ }
21
+ export interface EmitError {
22
+ readonly code: 'UNSUPPORTED_VALUE' | 'INVALID_NUMBER';
23
+ readonly path: string;
24
+ readonly message: string;
25
+ }
26
+ export interface EmitResult {
27
+ readonly text: string;
28
+ readonly errors: readonly EmitError[];
29
+ }
30
+ export declare function canonicalize(input: string, options?: CanonicalizeOptions): CanonicalResult;
31
+ export declare function emitFromObject(object: Readonly<Record<string, unknown>>, options?: EmitObjectOptions): EmitResult;
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAS,KAAK,WAAW,EAAqG,MAAM,yBAAyB,CAAC;AAIrK,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,mBAAmB;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACzC;AA4CD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,eAAe,CAkB9F;AAED,wBAAgB,cAAc,CAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,OAAO,GAAE,iBAAsB,GAChC,UAAU,CAsBZ"}
package/dist/index.js ADDED
@@ -0,0 +1,716 @@
1
+ import { tokenize } from '@altopelago/aeon-lexer';
2
+ import { parse } from '@altopelago/aeon-parser';
3
+ import { formatReferencePath } from './reference-path.js';
4
+ import { formatDatatypeAnnotation } from './datatype.js';
5
+ const DEFAULT_HEADER = {
6
+ encoding: {
7
+ type: 'StringLiteral',
8
+ value: 'utf-8',
9
+ raw: 'utf-8',
10
+ delimiter: '"',
11
+ span: { start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 1, offset: 0 } },
12
+ },
13
+ mode: {
14
+ type: 'StringLiteral',
15
+ value: 'transport',
16
+ raw: 'transport',
17
+ delimiter: '"',
18
+ span: { start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 1, offset: 0 } },
19
+ },
20
+ profile: {
21
+ type: 'StringLiteral',
22
+ value: 'core',
23
+ raw: 'core',
24
+ delimiter: '"',
25
+ span: { start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 1, offset: 0 } },
26
+ },
27
+ version: {
28
+ type: 'StringLiteral',
29
+ value: '1.0',
30
+ raw: '1.0',
31
+ delimiter: '"',
32
+ span: { start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 1, offset: 0 } },
33
+ },
34
+ };
35
+ const CANONICAL_MAX_SEPARATOR_DEPTH = 8;
36
+ const CANONICAL_MAX_GENERIC_DEPTH = 8;
37
+ function stripLeadingBom(input) {
38
+ return input.startsWith('\uFEFF') ? input.slice(1) : input;
39
+ }
40
+ function compareKeys(a, b) {
41
+ return a < b ? -1 : a > b ? 1 : 0;
42
+ }
43
+ export function canonicalize(input, options = {}) {
44
+ input = stripLeadingBom(input);
45
+ const lex = tokenize(input);
46
+ if (lex.errors.length > 0) {
47
+ return { text: '', errors: lex.errors };
48
+ }
49
+ const parsed = parse(lex.tokens, {
50
+ maxAttributeDepth: options.maxAttributeDepth ?? 1,
51
+ maxSeparatorDepth: options.maxSeparatorDepth ?? CANONICAL_MAX_SEPARATOR_DEPTH,
52
+ maxGenericDepth: options.maxGenericDepth ?? CANONICAL_MAX_GENERIC_DEPTH,
53
+ });
54
+ if (parsed.errors.length > 0 || !parsed.document) {
55
+ return { text: '', errors: parsed.errors };
56
+ }
57
+ const text = renderDocument(parsed.document);
58
+ return { text, errors: [] };
59
+ }
60
+ export function emitFromObject(object, options = {}) {
61
+ const includeHeader = options.includeHeader ?? false;
62
+ const sortKeys = options.sortKeys ?? true;
63
+ const errors = [];
64
+ const lines = [];
65
+ if (includeHeader) {
66
+ const fields = options.header ?? {
67
+ encoding: 'utf-8',
68
+ mode: 'strict',
69
+ profile: 'aeon.gp.profile.v1',
70
+ version: 1,
71
+ };
72
+ lines.push(...renderHeaderFromObject(fields, sortKeys, errors));
73
+ }
74
+ lines.push(...renderObjectBindingsFromObject(object, 0, '$', sortKeys, errors));
75
+ if (errors.length > 0) {
76
+ return { text: '', errors };
77
+ }
78
+ return { text: lines.join('\n'), errors: [] };
79
+ }
80
+ function renderDocument(document) {
81
+ const lines = [];
82
+ lines.push(...renderHeader(document));
83
+ const bindings = [...document.bindings].sort((a, b) => compareKeys(a.key, b.key));
84
+ for (const binding of bindings) {
85
+ lines.push(...renderBinding(binding, 0));
86
+ }
87
+ return `${lines.join('\n')}\n`;
88
+ }
89
+ function renderHeader(document) {
90
+ const bindings = document.header
91
+ ? [...document.header.bindings].sort((a, b) => compareKeys(a.key, b.key))
92
+ : Object.entries(DEFAULT_HEADER)
93
+ .map(([key, value]) => ({
94
+ type: 'Binding',
95
+ key,
96
+ value,
97
+ datatype: null,
98
+ attributes: [],
99
+ span: value.span,
100
+ }))
101
+ .sort((a, b) => compareKeys(a.key, b.key));
102
+ const lines = [];
103
+ lines.push('aeon:header = {');
104
+ for (const binding of bindings) {
105
+ lines.push(...renderBinding(binding, 2));
106
+ }
107
+ lines.push('}');
108
+ return lines;
109
+ }
110
+ function renderBinding(binding, indent) {
111
+ const prefix = ' '.repeat(indent);
112
+ const key = `${formatBindingKey(binding.key)}${renderAttributes(binding.attributes)}${renderType(binding.datatype)}`;
113
+ if (binding.value.type === 'ObjectNode') {
114
+ return renderObjectBinding(prefix, key, binding.value, indent);
115
+ }
116
+ if (binding.value.type === 'ListNode') {
117
+ return renderListBinding(prefix, key, binding.value, indent);
118
+ }
119
+ if (binding.value.type === 'TupleLiteral') {
120
+ return renderTupleBinding(prefix, key, binding.value, indent);
121
+ }
122
+ if (binding.value.type === 'NodeLiteral') {
123
+ return renderNodeBinding(prefix, key, binding.value, indent);
124
+ }
125
+ const valueLines = renderValue(binding.value, indent, { inlineOnly: true });
126
+ if (valueLines.length === 1) {
127
+ return [`${prefix}${key} = ${valueLines[0] ?? ''}`];
128
+ }
129
+ const [first, ...rest] = valueLines;
130
+ return [`${prefix}${key} = ${first ?? ''}`, ...rest];
131
+ }
132
+ function renderNodeBinding(prefix, key, node, indent) {
133
+ const renderedNode = renderNodeValue(node, indent, { inlineOnly: false });
134
+ if (renderedNode.length === 1) {
135
+ return [`${prefix}${key} = ${(renderedNode[0] ?? '').trimStart()}`];
136
+ }
137
+ const [first, ...rest] = renderedNode;
138
+ return [`${prefix}${key} = ${(first ?? '').trimStart()}`, ...rest];
139
+ }
140
+ function renderTupleBinding(prefix, key, tuple, indent) {
141
+ const tupleNode = tuple;
142
+ const elements = tupleNode.elements;
143
+ const simple = elements.every(isSimpleValue);
144
+ if (simple) {
145
+ const rendered = elements.map((element) => renderValue(element, indent + 1, { inlineOnly: true })[0]).join(', ');
146
+ return [`${prefix}${key} = (${rendered})`];
147
+ }
148
+ const lines = [];
149
+ lines.push(`${prefix}${key} = (`);
150
+ elements.forEach((element, index) => {
151
+ const itemLines = renderValue(element, indent + 2, { inlineOnly: false });
152
+ if (itemLines.length > 0 && !(itemLines[0] ?? '').startsWith(' '.repeat(indent + 2))) {
153
+ itemLines[0] = `${' '.repeat(indent + 2)}${itemLines[0] ?? ''}`;
154
+ }
155
+ const lastIndex = itemLines.length - 1;
156
+ if (index < elements.length - 1 && lastIndex >= 0) {
157
+ itemLines[lastIndex] = `${itemLines[lastIndex]},`;
158
+ }
159
+ lines.push(...itemLines);
160
+ });
161
+ lines.push(`${prefix})`);
162
+ return lines;
163
+ }
164
+ function renderObjectBinding(prefix, key, obj, indent) {
165
+ const lines = [];
166
+ lines.push(`${prefix}${key} = {`);
167
+ const objectNode = obj;
168
+ const sorted = [...objectNode.bindings].sort((a, b) => compareKeys(a.key, b.key));
169
+ for (const binding of sorted) {
170
+ lines.push(...renderBinding(binding, indent + 2));
171
+ }
172
+ lines.push(`${prefix}}`);
173
+ return lines;
174
+ }
175
+ function renderListBinding(prefix, key, list, indent) {
176
+ const listNode = list;
177
+ const elements = listNode.elements;
178
+ const simple = elements.every(isSimpleValue);
179
+ if (simple) {
180
+ const rendered = elements.map((element) => renderValue(element, indent + 1, { inlineOnly: true })[0]).join(', ');
181
+ return [`${prefix}${key} = [${rendered}]`];
182
+ }
183
+ const lines = [];
184
+ lines.push(`${prefix}${key} = [`);
185
+ elements.forEach((element, index) => {
186
+ const itemLines = renderValue(element, indent + 2, { inlineOnly: false });
187
+ if (itemLines.length > 0 && !(itemLines[0] ?? '').startsWith(' '.repeat(indent + 2))) {
188
+ itemLines[0] = `${' '.repeat(indent + 2)}${itemLines[0] ?? ''}`;
189
+ }
190
+ const lastIndex = itemLines.length - 1;
191
+ if (index < elements.length - 1 && lastIndex >= 0) {
192
+ itemLines[lastIndex] = `${itemLines[lastIndex]},`;
193
+ }
194
+ lines.push(...itemLines);
195
+ });
196
+ lines.push(`${prefix}]`);
197
+ return lines;
198
+ }
199
+ function renderValue(value, indent, opts) {
200
+ const prefix = ' '.repeat(indent);
201
+ switch (value.type) {
202
+ case 'TypedValue': {
203
+ const rendered = renderValue(value.value, indent, opts);
204
+ const head = `${renderAttributes(value.attributes)}${renderType(value.datatype)}`;
205
+ if (rendered.length === 0) {
206
+ return [`${head} = `];
207
+ }
208
+ const first = rendered[0] ?? '';
209
+ return [`${head} = ${first}`, ...rendered.slice(1)];
210
+ }
211
+ case 'StringLiteral':
212
+ return formatStringLines(value.value, indent);
213
+ case 'NumberLiteral':
214
+ return [formatNumber(value.raw)];
215
+ case 'InfinityLiteral':
216
+ case 'NaNLiteral':
217
+ return [value.raw];
218
+ case 'NullLiteral':
219
+ return [formatNullLiteral(value)];
220
+ case 'BooleanLiteral':
221
+ return [formatBoolean(value)];
222
+ case 'ToggleLiteral':
223
+ return [value.value];
224
+ case 'HexLiteral':
225
+ return [`#${value.value.replace(/_/g, '').toLowerCase()}`];
226
+ case 'RadixLiteral':
227
+ return [`%${value.value.replace(/_/g, '')}`];
228
+ case 'EncodingLiteral':
229
+ return [`$${formatEncoding(value.value)}`];
230
+ case 'SeparatorLiteral':
231
+ return [`^${formatSeparator(value.raw)}`];
232
+ case 'DateLiteral':
233
+ case 'DateTimeLiteral':
234
+ case 'TimeLiteral':
235
+ return [value.value];
236
+ case 'CloneReference':
237
+ return [`~${formatReferencePath(value.path)}`];
238
+ case 'PointerReference':
239
+ return [`~>${formatReferencePath(value.path)}`];
240
+ case 'ObjectNode': {
241
+ const lines = [];
242
+ lines.push(`${prefix}{`.trimEnd());
243
+ const sorted = [...value.bindings].sort((a, b) => compareKeys(a.key, b.key));
244
+ for (const binding of sorted) {
245
+ lines.push(...renderBinding(binding, indent + 2));
246
+ }
247
+ lines.push(`${prefix}}`.trimEnd());
248
+ return lines;
249
+ }
250
+ case 'ListNode': {
251
+ if (opts.inlineOnly && value.elements.every(isSimpleValue)) {
252
+ const rendered = value.elements.map((el) => renderValue(el, indent + 1, { inlineOnly: true })[0]).join(', ');
253
+ return [`[${rendered}]`];
254
+ }
255
+ const lines = [];
256
+ lines.push(`${prefix}[`.trimEnd());
257
+ value.elements.forEach((element, index) => {
258
+ const itemLines = renderValue(element, indent + 2, { inlineOnly: false });
259
+ if (itemLines.length > 0 && !(itemLines[0] ?? '').startsWith(' '.repeat(indent + 2))) {
260
+ itemLines[0] = `${' '.repeat(indent + 2)}${itemLines[0] ?? ''}`;
261
+ }
262
+ const lastIndex = itemLines.length - 1;
263
+ if (index < value.elements.length - 1 && lastIndex >= 0) {
264
+ itemLines[lastIndex] = `${itemLines[lastIndex]},`;
265
+ }
266
+ lines.push(...itemLines);
267
+ });
268
+ lines.push(`${prefix}]`.trimEnd());
269
+ return lines;
270
+ }
271
+ case 'TupleLiteral': {
272
+ if (opts.inlineOnly && value.elements.every(isSimpleValue)) {
273
+ const rendered = value.elements.map((el) => renderValue(el, indent + 1, { inlineOnly: true })[0]).join(', ');
274
+ return [`(${rendered})`];
275
+ }
276
+ const lines = [];
277
+ lines.push(`${prefix}(`.trimEnd());
278
+ value.elements.forEach((element, index) => {
279
+ const itemLines = renderValue(element, indent + 2, { inlineOnly: false });
280
+ if (itemLines.length > 0 && !(itemLines[0] ?? '').startsWith(' '.repeat(indent + 2))) {
281
+ itemLines[0] = `${' '.repeat(indent + 2)}${itemLines[0] ?? ''}`;
282
+ }
283
+ const lastIndex = itemLines.length - 1;
284
+ if (index < value.elements.length - 1 && lastIndex >= 0) {
285
+ itemLines[lastIndex] = `${itemLines[lastIndex]},`;
286
+ }
287
+ lines.push(...itemLines);
288
+ });
289
+ lines.push(`${prefix})`.trimEnd());
290
+ return lines;
291
+ }
292
+ case 'NodeLiteral':
293
+ return renderNodeValue(value, indent, opts);
294
+ default:
295
+ return [''];
296
+ }
297
+ }
298
+ function renderNodeValue(value, indent, opts) {
299
+ const prefix = ' '.repeat(indent);
300
+ const head = `<${formatBindingKey(value.tag)}${renderAttributes(value.attributes)}${renderType(value.datatype)}`;
301
+ const children = value.children;
302
+ const simple = children.every(isSimpleValue);
303
+ if (children.length === 0) {
304
+ return [`${head}>`];
305
+ }
306
+ if (opts.inlineOnly && simple) {
307
+ const rendered = children.map((child) => renderValue(child, indent + 1, { inlineOnly: true })[0]).join(', ');
308
+ return [`${head}(${rendered})>`];
309
+ }
310
+ const lines = [];
311
+ lines.push(`${prefix}${head}(`.trimEnd());
312
+ children.forEach((child, index) => {
313
+ const itemLines = renderValue(child, indent + 2, { inlineOnly: true });
314
+ if (itemLines.length > 0 && !(itemLines[0] ?? '').startsWith(' '.repeat(indent + 2))) {
315
+ itemLines[0] = `${' '.repeat(indent + 2)}${itemLines[0] ?? ''}`;
316
+ }
317
+ const lastIndex = itemLines.length - 1;
318
+ if (index < children.length - 1 && lastIndex >= 0) {
319
+ itemLines[lastIndex] = `${itemLines[lastIndex]},`;
320
+ }
321
+ lines.push(...itemLines);
322
+ });
323
+ lines.push(`${prefix})>`.trimEnd());
324
+ return lines;
325
+ }
326
+ function renderType(datatype) {
327
+ if (!datatype)
328
+ return '';
329
+ return formatDatatypeAnnotation(datatype);
330
+ }
331
+ function renderAttributes(attributes) {
332
+ if (!attributes || attributes.length === 0)
333
+ return '';
334
+ const entries = new Map();
335
+ for (const attr of attributes) {
336
+ for (const [key, value] of attr.entries) {
337
+ entries.set(key, value);
338
+ }
339
+ }
340
+ const sorted = Array.from(entries.entries()).sort(([a], [b]) => compareKeys(a, b));
341
+ const rendered = sorted.map(([key, value]) => {
342
+ const nestedAttributes = renderAttributes(value.attributes);
343
+ const type = value.datatype ? renderType(value.datatype) : '';
344
+ const formatted = renderValueInline(value.value);
345
+ return `${formatBindingKey(key)}${nestedAttributes}${type} = ${formatted}`;
346
+ });
347
+ return `@{${rendered.join(', ')}}`;
348
+ }
349
+ function renderValueInline(value) {
350
+ if (value.type === 'StringLiteral' && value.value.includes('\n')) {
351
+ return formatString(value.value);
352
+ }
353
+ return renderCompactInlineValue(value);
354
+ }
355
+ function renderCompactInlineValue(value) {
356
+ switch (value.type) {
357
+ case 'TypedValue':
358
+ return `${renderAttributes(value.attributes)}${renderType(value.datatype)} = ${renderCompactInlineValue(value.value)}`;
359
+ case 'StringLiteral':
360
+ return formatString(value.value);
361
+ case 'NumberLiteral':
362
+ return formatNumber(value.raw);
363
+ case 'InfinityLiteral':
364
+ case 'NaNLiteral':
365
+ return value.raw;
366
+ case 'NullLiteral':
367
+ return formatNullLiteral(value);
368
+ case 'BooleanLiteral':
369
+ return formatBoolean(value);
370
+ case 'ToggleLiteral':
371
+ return value.value;
372
+ case 'HexLiteral':
373
+ return `#${value.value.replace(/_/g, '').toLowerCase()}`;
374
+ case 'RadixLiteral':
375
+ return `%${value.value.replace(/_/g, '')}`;
376
+ case 'EncodingLiteral':
377
+ return `$${formatEncoding(value.value)}`;
378
+ case 'SeparatorLiteral':
379
+ return `^${formatSeparator(value.raw)}`;
380
+ case 'DateLiteral':
381
+ case 'DateTimeLiteral':
382
+ case 'TimeLiteral':
383
+ return value.value;
384
+ case 'CloneReference':
385
+ return `~${formatReferencePath(value.path)}`;
386
+ case 'PointerReference':
387
+ return `~>${formatReferencePath(value.path)}`;
388
+ case 'ObjectNode': {
389
+ const sorted = [...value.bindings].sort((a, b) => compareKeys(a.key, b.key));
390
+ const bindings = sorted.map((binding) => {
391
+ const key = `${formatBindingKey(binding.key)}${renderAttributes(binding.attributes)}${renderType(binding.datatype)}`;
392
+ return `${key} = ${renderCompactInlineValue(binding.value)}`;
393
+ });
394
+ return `{ ${bindings.join(', ')} }`;
395
+ }
396
+ case 'ListNode':
397
+ return `[${value.elements.map((element) => renderCompactInlineValue(element)).join(', ')}]`;
398
+ case 'TupleLiteral':
399
+ return `(${value.elements.map((element) => renderCompactInlineValue(element)).join(', ')})`;
400
+ case 'NodeLiteral': {
401
+ const head = `<${formatBindingKey(value.tag)}${renderAttributes(value.attributes)}${renderType(value.datatype)}`;
402
+ if (value.children.length === 0) {
403
+ return `${head}>`;
404
+ }
405
+ return `${head}(${value.children.map((child) => renderCompactInlineValue(child)).join(', ')})>`;
406
+ }
407
+ default:
408
+ return renderValue(value, 0, { inlineOnly: true })[0] ?? '';
409
+ }
410
+ }
411
+ function formatEncoding(value) {
412
+ return value.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/u, '');
413
+ }
414
+ function renderHeaderFromObject(header, sortKeys, errors) {
415
+ const keys = Object.keys(header);
416
+ if (sortKeys) {
417
+ keys.sort(compareKeys);
418
+ }
419
+ const lines = [];
420
+ lines.push('aeon:header = {');
421
+ for (const key of keys) {
422
+ const value = header[key];
423
+ const rendered = renderScalarFromObject(value, `$.aeon:header.${key}`, errors);
424
+ if (rendered === null) {
425
+ continue;
426
+ }
427
+ lines.push(` ${formatBindingKey(key)} = ${rendered}`);
428
+ }
429
+ lines.push('}');
430
+ return lines;
431
+ }
432
+ function renderObjectBindingsFromObject(object, indent, path, sortKeys, errors) {
433
+ const keys = Object.keys(object);
434
+ if (sortKeys) {
435
+ keys.sort(compareKeys);
436
+ }
437
+ const lines = [];
438
+ for (const key of keys) {
439
+ const value = object[key];
440
+ if (value === undefined) {
441
+ errors.push({
442
+ code: 'UNSUPPORTED_VALUE',
443
+ path: `${path}.${key}`,
444
+ message: `Unsupported value type for key "${key}": undefined`,
445
+ });
446
+ continue;
447
+ }
448
+ const rendered = renderObjectValue(value, indent, `${path}.${key}`, sortKeys, errors);
449
+ if (rendered === null) {
450
+ continue;
451
+ }
452
+ const prefix = ' '.repeat(indent);
453
+ if (rendered.length === 1) {
454
+ lines.push(`${prefix}${formatBindingKey(key)} = ${rendered[0] ?? ''}`);
455
+ continue;
456
+ }
457
+ lines.push(`${prefix}${formatBindingKey(key)} = ${rendered[0] ?? ''}`);
458
+ lines.push(...rendered.slice(1));
459
+ }
460
+ return lines;
461
+ }
462
+ function renderObjectValue(value, indent, path, sortKeys, errors) {
463
+ const scalar = renderScalarFromObject(value, path, errors);
464
+ if (scalar !== null) {
465
+ return [scalar];
466
+ }
467
+ if (Array.isArray(value)) {
468
+ if (value.every((item) => isScalarObjectValue(item))) {
469
+ const renderedItems = [];
470
+ for (let i = 0; i < value.length; i++) {
471
+ const rendered = renderScalarFromObject(value[i], `${path}[${i}]`, errors);
472
+ if (rendered === null) {
473
+ return null;
474
+ }
475
+ renderedItems.push(rendered);
476
+ }
477
+ return [`[${renderedItems.join(', ')}]`];
478
+ }
479
+ const prefix = ' '.repeat(indent);
480
+ const lines = [];
481
+ lines.push('[');
482
+ for (let i = 0; i < value.length; i++) {
483
+ const itemLines = renderObjectValue(value[i], indent + 2, `${path}[${i}]`, sortKeys, errors);
484
+ if (itemLines === null) {
485
+ return null;
486
+ }
487
+ if (itemLines.length === 1) {
488
+ const suffix = i < value.length - 1 ? ',' : '';
489
+ lines.push(`${' '.repeat(indent + 2)}${itemLines[0] ?? ''}${suffix}`);
490
+ continue;
491
+ }
492
+ lines.push(`${' '.repeat(indent + 2)}${itemLines[0] ?? ''}`);
493
+ for (let j = 1; j < itemLines.length; j++) {
494
+ lines.push(itemLines[j] ?? '');
495
+ }
496
+ if (i < value.length - 1) {
497
+ const idx = lines.length - 1;
498
+ lines[idx] = `${lines[idx] ?? ''},`;
499
+ }
500
+ }
501
+ lines.push(`${prefix}]`);
502
+ return lines;
503
+ }
504
+ if (isPlainObject(value)) {
505
+ const keys = Object.keys(value);
506
+ if (sortKeys) {
507
+ keys.sort(compareKeys);
508
+ }
509
+ const prefix = ' '.repeat(indent);
510
+ const lines = [];
511
+ lines.push('{');
512
+ for (const key of keys) {
513
+ const child = value[key];
514
+ if (child === undefined) {
515
+ errors.push({
516
+ code: 'UNSUPPORTED_VALUE',
517
+ path: `${path}.${key}`,
518
+ message: `Unsupported value type for key "${key}": undefined`,
519
+ });
520
+ return null;
521
+ }
522
+ const childLines = renderObjectValue(child, indent + 2, `${path}.${key}`, sortKeys, errors);
523
+ if (childLines === null) {
524
+ return null;
525
+ }
526
+ const entryPrefix = `${' '.repeat(indent + 2)}${formatBindingKey(key)} = `;
527
+ if (childLines.length === 1) {
528
+ lines.push(`${entryPrefix}${childLines[0] ?? ''}`);
529
+ continue;
530
+ }
531
+ lines.push(`${entryPrefix}${childLines[0] ?? ''}`);
532
+ lines.push(...childLines.slice(1));
533
+ }
534
+ lines.push(`${prefix}}`);
535
+ return lines;
536
+ }
537
+ return null;
538
+ }
539
+ function renderScalarFromObject(value, path, errors) {
540
+ if (typeof value === 'string') {
541
+ return formatString(value);
542
+ }
543
+ if (typeof value === 'boolean') {
544
+ return value ? 'true' : 'false';
545
+ }
546
+ if (typeof value === 'number') {
547
+ if (!Number.isFinite(value)) {
548
+ errors.push({
549
+ code: 'INVALID_NUMBER',
550
+ path,
551
+ message: `Invalid number at ${path}: only finite numbers can be emitted to AEON`,
552
+ });
553
+ return null;
554
+ }
555
+ return formatNumber(String(value));
556
+ }
557
+ if (value === null) {
558
+ errors.push({
559
+ code: 'UNSUPPORTED_VALUE',
560
+ path,
561
+ message: `Unsupported value type at ${path}: null`,
562
+ });
563
+ return null;
564
+ }
565
+ return null;
566
+ }
567
+ function formatBindingKey(key) {
568
+ return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key) ? key : formatString(key);
569
+ }
570
+ function isPlainObject(value) {
571
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
572
+ return false;
573
+ }
574
+ const proto = Object.getPrototypeOf(value);
575
+ return proto === Object.prototype || proto === null;
576
+ }
577
+ function isScalarObjectValue(value) {
578
+ return typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number';
579
+ }
580
+ function formatString(value) {
581
+ let out = '';
582
+ for (let i = 0; i < value.length; i++) {
583
+ const ch = value[i];
584
+ switch (ch) {
585
+ case '"':
586
+ out += '\\"';
587
+ break;
588
+ case '\\':
589
+ out += '\\\\';
590
+ break;
591
+ case '\n':
592
+ out += '\\n';
593
+ break;
594
+ case '\r':
595
+ out += '\\r';
596
+ break;
597
+ case '\t':
598
+ out += '\\t';
599
+ break;
600
+ default: {
601
+ const code = ch.charCodeAt(0);
602
+ if (code < 0x20) {
603
+ out += `\\u${code.toString(16).padStart(4, '0')}`;
604
+ }
605
+ else {
606
+ out += ch;
607
+ }
608
+ break;
609
+ }
610
+ }
611
+ }
612
+ return `"${out}"`;
613
+ }
614
+ function formatStringLines(value, indent) {
615
+ if (!value.includes('\n')) {
616
+ return [formatString(value)];
617
+ }
618
+ return formatTrimticks(value, indent);
619
+ }
620
+ function formatTrimticks(value, indent) {
621
+ const prefix = ' '.repeat(indent);
622
+ const bodyPrefix = ' '.repeat(indent + 2);
623
+ return [
624
+ '>`',
625
+ ...value.split('\n').map((line) => `${bodyPrefix}${line}`),
626
+ `${prefix}\``,
627
+ ];
628
+ }
629
+ function formatBoolean(value) {
630
+ return value.raw?.toLowerCase() === 'true' || value.raw?.toLowerCase() === 'false'
631
+ ? value.raw.toLowerCase()
632
+ : value.value ? 'true' : 'false';
633
+ }
634
+ function formatNullLiteral(value) {
635
+ return value.mode === 'reserved' ? `!${value.value}` : `!${formatString(value.value)}`;
636
+ }
637
+ function formatNumber(raw) {
638
+ let value = raw.replace(/_/g, '');
639
+ value = value.replace(/E/g, 'e');
640
+ if (value.startsWith('.'))
641
+ value = `0${value}`;
642
+ if (value.startsWith('-.'))
643
+ value = value.replace('-.', '-0.');
644
+ if (value.startsWith('+.'))
645
+ value = value.replace('+.', '0.');
646
+ if (value.startsWith('+') && /\d/.test(value[1] ?? ''))
647
+ value = value.slice(1);
648
+ const parts = value.split('e');
649
+ let mantissa = parts[0] ?? '';
650
+ let exponent = parts[1];
651
+ if (mantissa.includes('.')) {
652
+ const [intPart, fracPartRaw] = mantissa.split('.');
653
+ let fracPart = trimTrailingZeros(fracPartRaw ?? '');
654
+ if (fracPart.length === 0) {
655
+ fracPart = '0';
656
+ }
657
+ if (exponent !== undefined && fracPart === '0') {
658
+ mantissa = intPart ?? '';
659
+ }
660
+ else {
661
+ mantissa = `${intPart ?? ''}.${fracPart}`;
662
+ }
663
+ }
664
+ if (exponent !== undefined) {
665
+ exponent = exponent.replace(/^\+/, '');
666
+ const negative = exponent.startsWith('-');
667
+ const digits = negative ? exponent.slice(1) : exponent;
668
+ const normalized = digits.replace(/^0+/, '') || '0';
669
+ value = normalized === '0'
670
+ ? `${mantissa}e0`
671
+ : `${mantissa}e${negative ? '-' : ''}${normalized}`;
672
+ }
673
+ else {
674
+ value = mantissa;
675
+ }
676
+ return value;
677
+ }
678
+ function trimTrailingZeros(value) {
679
+ let end = value.length;
680
+ while (end > 0 && value[end - 1] === '0') {
681
+ end -= 1;
682
+ }
683
+ return value.slice(0, end);
684
+ }
685
+ function formatSeparator(raw) {
686
+ return raw.startsWith('^') ? raw.slice(1) : raw;
687
+ }
688
+ function isSimpleValue(value) {
689
+ if (value.type === 'StringLiteral' && value.value.includes('\n')) {
690
+ return false;
691
+ }
692
+ if (value.type === 'TypedValue') {
693
+ return isSimpleValue(value.value);
694
+ }
695
+ switch (value.type) {
696
+ case 'StringLiteral':
697
+ case 'NumberLiteral':
698
+ case 'InfinityLiteral':
699
+ case 'NaNLiteral':
700
+ case 'NullLiteral':
701
+ case 'BooleanLiteral':
702
+ case 'ToggleLiteral':
703
+ case 'HexLiteral':
704
+ case 'RadixLiteral':
705
+ case 'EncodingLiteral':
706
+ case 'SeparatorLiteral':
707
+ case 'DateLiteral':
708
+ case 'DateTimeLiteral':
709
+ case 'CloneReference':
710
+ case 'PointerReference':
711
+ return true;
712
+ default:
713
+ return false;
714
+ }
715
+ }
716
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type ReferencePathPart = string | number | {
2
+ readonly type: 'attr';
3
+ readonly key: string;
4
+ };
5
+ export declare function formatReferencePath(path: readonly ReferencePathPart[]): string;
6
+ //# sourceMappingURL=reference-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-path.d.ts","sourceRoot":"","sources":["../src/reference-path.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAMlG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,GAAG,MAAM,CA4B9E"}
@@ -0,0 +1,36 @@
1
+ function escapeQuotedPathSegment(value) {
2
+ return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
3
+ }
4
+ export function formatReferencePath(path) {
5
+ if (path.length === 0)
6
+ return '';
7
+ let result = '';
8
+ for (let i = 0; i < path.length; i++) {
9
+ const segment = path[i];
10
+ if (typeof segment === 'number') {
11
+ result += `[${segment}]`;
12
+ continue;
13
+ }
14
+ if (typeof segment === 'object' && segment.type === 'attr') {
15
+ if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(segment.key)) {
16
+ result += `@${segment.key}`;
17
+ }
18
+ else {
19
+ result += `@["${escapeQuotedPathSegment(segment.key)}"]`;
20
+ }
21
+ continue;
22
+ }
23
+ const member = segment;
24
+ if (i > 0) {
25
+ result += '.';
26
+ }
27
+ if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(member)) {
28
+ result += member;
29
+ }
30
+ else {
31
+ result += `["${escapeQuotedPathSegment(member)}"]`;
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ //# sourceMappingURL=reference-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-path.js","sourceRoot":"","sources":["../src/reference-path.ts"],"names":[],"mappings":"AAEA,SAAS,uBAAuB,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAkC;IAClE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACzB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,IAAI,OAAO,GAAG,CAAC;YACzB,SAAS;QACb,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzD,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,MAAM,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAC7D,CAAC;YACD,SAAS;QACb,CAAC;QACD,MAAM,MAAM,GAAG,OAAiB,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACR,MAAM,IAAI,GAAG,CAAC;QAClB,CAAC;QACD,IAAI,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,MAAM,CAAC;QACrB,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC;QACvD,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@altopelago/aeon-canonical",
3
+ "version": "0.9.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist",
15
+ "!dist/**/*.test.d.ts",
16
+ "!dist/**/*.test.d.ts.map",
17
+ "!dist/**/*.test.js",
18
+ "!dist/**/*.test.js.map"
19
+ ],
20
+ "dependencies": {
21
+ "@altopelago/aeon-lexer": "0.9.0",
22
+ "@altopelago/aeon-parser": "0.9.0"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json",
26
+ "test": "node --test dist/*.test.js",
27
+ "clean": "rm -rf dist",
28
+ "typecheck": "tsc -p tsconfig.json --noEmit"
29
+ }
30
+ }