aontu 0.56.0 → 0.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +2 -2
  2. package/dist/agentsmd.js +1 -1
  3. package/dist/alias.d.ts +3 -0
  4. package/dist/alias.js +59 -0
  5. package/dist/alias.js.map +1 -0
  6. package/dist/aontu.d.ts +5 -2
  7. package/dist/aontu.js +11 -3
  8. package/dist/aontu.js.map +1 -1
  9. package/dist/cli.d.ts +8 -2
  10. package/dist/cli.js +564 -21
  11. package/dist/cli.js.map +1 -1
  12. package/dist/ctx.d.ts +2 -0
  13. package/dist/ctx.js +1 -0
  14. package/dist/ctx.js.map +1 -1
  15. package/dist/escape.d.ts +5 -0
  16. package/dist/escape.js +455 -0
  17. package/dist/escape.js.map +1 -0
  18. package/dist/format.d.ts +9 -0
  19. package/dist/format.js +550 -55
  20. package/dist/format.js.map +1 -1
  21. package/dist/hints.js +74 -9
  22. package/dist/hints.js.map +1 -1
  23. package/dist/lang.js +374 -58
  24. package/dist/lang.js.map +1 -1
  25. package/dist/lower.d.ts +20 -0
  26. package/dist/lower.js +575 -0
  27. package/dist/lower.js.map +1 -0
  28. package/dist/lsp.d.ts +1 -1
  29. package/dist/lsp.js +4 -4
  30. package/dist/lsp.js.map +1 -1
  31. package/dist/mcp-server.js +2 -2
  32. package/dist/mcp-server.js.map +1 -1
  33. package/dist/mcp.d.ts +1 -0
  34. package/dist/mcp.js +40 -3
  35. package/dist/mcp.js.map +1 -1
  36. package/dist/mod-tool.js +8 -7
  37. package/dist/mod-tool.js.map +1 -1
  38. package/dist/mod.js +6 -6
  39. package/dist/mod.js.map +1 -1
  40. package/dist/render.d.ts +53 -0
  41. package/dist/render.js +542 -0
  42. package/dist/render.js.map +1 -0
  43. package/dist/sigdecl.js +1 -1
  44. package/dist/sigdecl.js.map +1 -1
  45. package/dist/std.d.ts +2 -0
  46. package/dist/std.js +498 -2
  47. package/dist/std.js.map +1 -1
  48. package/dist/template.d.ts +5 -0
  49. package/dist/template.js +257 -0
  50. package/dist/template.js.map +1 -0
  51. package/dist/tsconfig.tsbuildinfo +1 -1
  52. package/dist/unify.js +43 -0
  53. package/dist/unify.js.map +1 -1
  54. package/dist/val/AggFuncVal.d.ts +1 -1
  55. package/dist/val/AggFuncVal.js +10 -21
  56. package/dist/val/AggFuncVal.js.map +1 -1
  57. package/dist/val/BagVal.js +1 -1
  58. package/dist/val/BagVal.js.map +1 -1
  59. package/dist/val/ConstraintVal.js +1 -1
  60. package/dist/val/EachFuncVal.d.ts +1 -1
  61. package/dist/val/EachFuncVal.js +9 -15
  62. package/dist/val/EachFuncVal.js.map +1 -1
  63. package/dist/val/EmitFuncVal.d.ts +42 -0
  64. package/dist/val/EmitFuncVal.js +531 -0
  65. package/dist/val/EmitFuncVal.js.map +1 -0
  66. package/dist/val/FilterFuncVal.js +9 -6
  67. package/dist/val/FilterFuncVal.js.map +1 -1
  68. package/dist/val/FormFuncVal.d.ts +14 -0
  69. package/dist/val/FormFuncVal.js +55 -0
  70. package/dist/val/FormFuncVal.js.map +1 -0
  71. package/dist/val/FuncBaseVal.d.ts +1 -0
  72. package/dist/val/FuncBaseVal.js +16 -0
  73. package/dist/val/FuncBaseVal.js.map +1 -1
  74. package/dist/val/MapVal.d.ts +2 -1
  75. package/dist/val/MapVal.js +2 -1
  76. package/dist/val/MapVal.js.map +1 -1
  77. package/dist/val/PackFuncVal.d.ts +1 -1
  78. package/dist/val/PackFuncVal.js +23 -20
  79. package/dist/val/PackFuncVal.js.map +1 -1
  80. package/dist/val/PlaceVal.d.ts +3 -1
  81. package/dist/val/PlaceVal.js +9 -6
  82. package/dist/val/PlaceVal.js.map +1 -1
  83. package/dist/val/RefVal.d.ts +3 -0
  84. package/dist/val/RefVal.js +156 -17
  85. package/dist/val/RefVal.js.map +1 -1
  86. package/dist/val/StrFuncVal.d.ts +32 -0
  87. package/dist/val/StrFuncVal.js +292 -0
  88. package/dist/val/StrFuncVal.js.map +1 -0
  89. package/dist/val/Val.d.ts +7 -1
  90. package/dist/val/Val.js +12 -1
  91. package/dist/val/Val.js.map +1 -1
  92. package/dist/val/members.d.ts +9 -0
  93. package/dist/val/members.js +52 -0
  94. package/dist/val/members.js.map +1 -0
  95. package/grammar/aontu.abnf +4 -3
  96. package/grammar/aontu.gbnf +4 -3
  97. package/grammar/aontu.lark +4 -3
  98. package/grammar/aontu.tmLanguage.json +1 -1
  99. package/package.json +1 -1
  100. package/skill/SKILL.md +4 -4
  101. package/skill/error-codes.md +1 -1
  102. package/skill/examples.md +1 -1
  103. package/skill/grammar-card.md +1 -1
  104. package/src/agentsmd.ts +1 -1
  105. package/src/alias.ts +112 -0
  106. package/src/aontu.ts +20 -2
  107. package/src/cli.ts +630 -23
  108. package/src/ctx.ts +13 -0
  109. package/src/escape.ts +371 -0
  110. package/src/format.ts +648 -56
  111. package/src/hints.ts +94 -9
  112. package/src/lang.ts +430 -63
  113. package/src/lower.ts +636 -0
  114. package/src/lsp.ts +4 -4
  115. package/src/mcp-server.ts +3 -2
  116. package/src/mcp.ts +43 -4
  117. package/src/mod-tool.ts +9 -8
  118. package/src/mod.ts +6 -6
  119. package/src/render.ts +727 -0
  120. package/src/sigdecl.ts +1 -1
  121. package/src/std.ts +506 -1
  122. package/src/template.ts +291 -0
  123. package/src/unify.ts +47 -0
  124. package/src/val/AggFuncVal.ts +10 -21
  125. package/src/val/BagVal.ts +1 -1
  126. package/src/val/ConstraintVal.ts +1 -1
  127. package/src/val/EachFuncVal.ts +9 -19
  128. package/src/val/EmitFuncVal.ts +738 -0
  129. package/src/val/FilterFuncVal.ts +12 -7
  130. package/src/val/FormFuncVal.ts +119 -0
  131. package/src/val/FuncBaseVal.ts +18 -0
  132. package/src/val/MapVal.ts +3 -2
  133. package/src/val/PackFuncVal.ts +24 -22
  134. package/src/val/PlaceVal.ts +9 -6
  135. package/src/val/RefVal.ts +167 -18
  136. package/src/val/StrFuncVal.ts +334 -0
  137. package/src/val/Val.ts +42 -1
  138. package/src/val/members.ts +86 -0
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /* Copyright (c) 2025 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DEFAULT_MARKER = void 0;
5
+ exports.desugarTemplate = desugarTemplate;
6
+ exports.resugarTemplate = resugarTemplate;
7
+ exports.markerFor = markerFor;
8
+ // THE TEMPLATE SURFACE (docs/design/TEMPLATE.0.md; RENDER.0.md P8).
9
+ // A generator written in the TARGET's own syntax: a marked line is
10
+ // aontu source, and every other line is a line of output.
11
+ //
12
+ // //- code: units: [{ path: "hi.ts", lang: "typescript", decls: [{
13
+ // //- k: "frag", of: emit($.svc, { match: { n: string }, body: [
14
+ // export const NAME = "world"
15
+ // //- ]}) }] }]
16
+ //
17
+ // That is the whole desugaring, and it is LINE-ORIENTED: nothing here
18
+ // parses aontu, and nothing here reads the target's syntax beyond its
19
+ // comment token. A marker line contributes its text to the document; an
20
+ // unmarked line contributes one quoted string, which is a body element
21
+ // where the marker lines left a list open.
22
+ //
23
+ // WHY A COMMENT TOKEN PLUS A DASH (D2). The generator file must stay
24
+ // valid in its own language -- so an editor highlights it, a compiler
25
+ // parses it, and a reviewer reads it -- and the one thing every
26
+ // language has that the target's own tools already ignore is a
27
+ // comment. Adding a dash distinguishes a marker from an ordinary
28
+ // comment, and derives for a language this table has never seen: the
29
+ // caller passes the token.
30
+ //
31
+ // A MARKER IS RECOGNISED AFTER LEADING WHITESPACE AND KEEPS ITS OWN
32
+ // INDENTATION (D2). That is what lets a template be written exactly
33
+ // where its output appears (D7): a body line is verbatim, so a line
34
+ // indented two spaces in the template is indented two spaces in the
35
+ // generated file, and the marker lines around it are indented to match
36
+ // the code they sit in rather than to the aontu they carry.
37
+ //
38
+ // THE SUGAR IS THE FIXPOINT OF THE TWO TRANSFORMS (D6), and that is
39
+ // the whole of the resugaring's safety. A canonical line that looks
40
+ // like a body element is rebuilt as a target line, the rebuild is
41
+ // desugared, and the rebuild is taken ONLY if that reproduces the
42
+ // canonical line. A line no target line can carry -- one that would
43
+ // itself read as a marker -- fails that test and stays where it is, so
44
+ // there is no table of escapes to get wrong and no line the round trip
45
+ // can lose.
46
+ //
47
+ // WHITESPACE CONTROL IS ABSENT AND UNNEEDED (D8): a marker line is not
48
+ // an output line at all, so no construct can leak a newline into the
49
+ // output. What IS significant is the template's own trailing
50
+ // whitespace -- a line of two spaces is two spaces of output -- which
51
+ // is why the canonical form quotes every body line explicitly. Note
52
+ // what `template --check` does and does not catch: it holds the FILE
53
+ // to the spelling these two transforms answer, so a marker written
54
+ // without its space or with its aontu indented after it is named; a
55
+ // body line an editor trimmed is still a valid template, and what
56
+ // names that is `render --check` against the committed output.
57
+ // A marker is a comment token plus a dash. These are the tokens the
58
+ // verb derives from a file's extension; any other language passes its
59
+ // own, which is why the surface needs no table of languages.
60
+ const MARKERS = {
61
+ c: '//-',
62
+ cc: '//-',
63
+ cpp: '//-',
64
+ cs: '//-',
65
+ css: '/*-',
66
+ go: '//-',
67
+ h: '//-',
68
+ hs: '---',
69
+ java: '//-',
70
+ js: '//-',
71
+ jsx: '//-',
72
+ kt: '//-',
73
+ lua: '---',
74
+ php: '//-',
75
+ pl: '#-',
76
+ py: '#-',
77
+ rb: '#-',
78
+ rs: '//-',
79
+ scala: '//-',
80
+ sh: '#-',
81
+ sql: '---',
82
+ swift: '//-',
83
+ toml: '#-',
84
+ ts: '//-',
85
+ tsx: '//-',
86
+ yaml: '#-',
87
+ yml: '#-',
88
+ };
89
+ // The default marker, for a file whose extension names no token: the
90
+ // C-family line comment, which is the one the note is written in.
91
+ const DEFAULT_MARKER = '//-';
92
+ exports.DEFAULT_MARKER = DEFAULT_MARKER;
93
+ // A BLOCK MARKER CLOSES ITSELF. A language with no line comment (CSS
94
+ // is the one in the table) marks with `/*- … */`, and the closer is
95
+ // implied by the opener rather than named separately: there is one
96
+ // block form, and a marker that opens `/*-` ends `*/`.
97
+ const BLOCK_CLOSE = '*/';
98
+ // The marker for a file, by its extension, or the C-family default.
99
+ // The extension decides, exactly as it decides what an include is
100
+ // (ADR-012) -- one rule, and no flag to remember for the common case.
101
+ function markerFor(path) {
102
+ const dot = path.lastIndexOf('.');
103
+ const slash = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\'));
104
+ const ext = dot > slash ? path.slice(dot + 1).toLowerCase() : '';
105
+ return MARKERS[ext] ?? DEFAULT_MARKER;
106
+ }
107
+ // Is this marker the block form?
108
+ function isBlock(marker) {
109
+ return marker.startsWith('/*');
110
+ }
111
+ // INDENTATION IS SPACES AND TABS, and nothing else. A host trim is not
112
+ // the same set in the two ports -- JavaScript's trims every Unicode
113
+ // space, Go's `TrimSpace` trims a different list -- and a line of a
114
+ // template file that began with one of the characters they disagree
115
+ // about would be a marker line in one engine and a line of output in
116
+ // the other. Twin of templateIndent in go/template.go.
117
+ function indentOf(line) {
118
+ let i = 0;
119
+ while (i < line.length && (' ' === line[i] || '\t' === line[i])) {
120
+ i++;
121
+ }
122
+ return i;
123
+ }
124
+ // The line without its indentation or its trailing spaces and tabs.
125
+ function trimLine(line) {
126
+ let end = line.length;
127
+ while (0 < end && (' ' === line[end - 1] || '\t' === line[end - 1])) {
128
+ end--;
129
+ }
130
+ return line.slice(indentOf(line), end);
131
+ }
132
+ function readLine(line, marker) {
133
+ const cut = indentOf(line);
134
+ const indent = line.slice(0, cut);
135
+ const rest = line.slice(cut);
136
+ if (!rest.startsWith(marker)) {
137
+ return { marker: false, indent: '', text: line };
138
+ }
139
+ let body = rest.slice(marker.length);
140
+ // The block form's closer is part of the marker, not of the aontu.
141
+ // A block marker line that never closes is not a marker line: the
142
+ // language's own parser would not read it as a comment either.
143
+ if (isBlock(marker)) {
144
+ const end = body.lastIndexOf(BLOCK_CLOSE);
145
+ if (end < 0) {
146
+ return { marker: false, indent: '', text: line };
147
+ }
148
+ body = trimLine(body.slice(0, end));
149
+ }
150
+ // ONE SPACE AFTER THE MARKER IS THE MARKER'S, so `//- x: 1` carries
151
+ // `x: 1` and the resugaring writes the space back. A marker written
152
+ // without it carries the same aontu and is normalised on the round
153
+ // trip, which `--check` reports as the drift it is.
154
+ if (body.startsWith(' ')) {
155
+ body = body.slice(1);
156
+ }
157
+ return { marker: true, indent, text: body };
158
+ }
159
+ // THE CANONICAL QUOTE IS CHOSEN PER LINE (D6). A backtick string
160
+ // carries `"` and `'` unescaped, which is most of what target code
161
+ // holds, so a line takes one unless it holds a backtick itself.
162
+ //
163
+ // A BACKSLASH IS ESCAPED IN EITHER QUOTE, and that is not what the
164
+ // design note assumed: this engine reads the escapes of a backtick
165
+ // string exactly as it reads a quoted one, and an unknown escape drops
166
+ // its backslash (`\p` is `p`), so a target line holding `\n` inside a
167
+ // string of its own would arrive in the output as a newline. Only the
168
+ // delimiter differs between the two forms.
169
+ function quoteLine(text) {
170
+ const escaped = text.replace(/\\/g, '\\\\');
171
+ return text.includes('`') ?
172
+ '"' + escaped.replace(/"/g, '\\"') + '"' :
173
+ '`' + escaped + '`';
174
+ }
175
+ // The line a quoted body element carries, or undefined when the line
176
+ // is not one: anything but a lone string literal, and any escape the
177
+ // quoting above does not write. The fixpoint test below is what makes
178
+ // being conservative here safe -- a line this refuses stays aontu.
179
+ function unquoteLine(text) {
180
+ const t = trimLine(text);
181
+ if (2 > t.length) {
182
+ return undefined;
183
+ }
184
+ const quote = t[0];
185
+ if (('`' !== quote && '"' !== quote) || t[t.length - 1] !== quote) {
186
+ return undefined;
187
+ }
188
+ const inner = t.slice(1, -1);
189
+ let out = '';
190
+ for (let i = 0; i < inner.length; i++) {
191
+ const c = inner[i];
192
+ if (quote === c) {
193
+ return undefined;
194
+ }
195
+ if ('\\' !== c) {
196
+ out += c;
197
+ continue;
198
+ }
199
+ const n = inner[++i];
200
+ if ('\\' === n || (('"' === n) && '"' === quote)) {
201
+ out += n;
202
+ continue;
203
+ }
204
+ return undefined;
205
+ }
206
+ return out;
207
+ }
208
+ // DESUGAR: a template file becomes the canonical aontu document.
209
+ // A marker line is its own text, at its own indentation; every other
210
+ // line is one quoted string, which lands wherever the marker lines
211
+ // left a list open.
212
+ function desugarTemplate(src, marker) {
213
+ const mark = marker ?? DEFAULT_MARKER;
214
+ const lines = src.split('\n');
215
+ // A trailing newline is the file's, not a line of output: a text
216
+ // file ends with one, and the round trip must not grow an empty
217
+ // output line each pass.
218
+ const tail = 1 < lines.length && '' === lines[lines.length - 1];
219
+ if (tail) {
220
+ lines.pop();
221
+ }
222
+ const out = lines.map((line) => {
223
+ const read = readLine(line, mark);
224
+ return read.marker ? read.indent + read.text : quoteLine(read.text);
225
+ });
226
+ return out.join('\n') + (tail ? '\n' : '');
227
+ }
228
+ // RESUGAR: the canonical document becomes a template file. Every line
229
+ // is a marker line unless it is a body element that survives the
230
+ // fixpoint -- rebuild the target line, desugar the rebuild, and take
231
+ // it only if that answers the canonical line back.
232
+ function resugarTemplate(src, marker) {
233
+ const mark = marker ?? DEFAULT_MARKER;
234
+ const lines = src.split('\n');
235
+ const tail = 1 < lines.length && '' === lines[lines.length - 1];
236
+ if (tail) {
237
+ lines.pop();
238
+ }
239
+ const out = lines.map((line) => {
240
+ // THE ELEMENT'S OWN INDENTATION IS NOT PART OF IT: the target line
241
+ // is the string's content, and where the canonical form puts the
242
+ // element on the page is the formatter's business. Comparing the
243
+ // whole line instead would refuse every body element of a document
244
+ // `aontu fmt` had indented, which is every document it has seen.
245
+ const target = unquoteLine(line);
246
+ if (undefined !== target && desugarTemplate(target, mark) === trimLine(line)) {
247
+ return target;
248
+ }
249
+ const cut = indentOf(line);
250
+ const text = line.slice(cut);
251
+ const open = line.slice(0, cut) + mark;
252
+ const close = isBlock(mark) ? ' ' + BLOCK_CLOSE : '';
253
+ return '' === text ? open + close : open + ' ' + text + close;
254
+ });
255
+ return out.join('\n') + (tail ? '\n' : '');
256
+ } /* node:coverage ignore next 8 */
257
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}