aontu 0.52.1 → 0.54.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 (310) hide show
  1. package/README.md +88 -0
  2. package/bin/aontu-mcp.js +4 -0
  3. package/dist/agentsmd.d.ts +16 -0
  4. package/dist/agentsmd.js +107 -0
  5. package/dist/agentsmd.js.map +1 -0
  6. package/dist/aontu.d.ts +15 -3
  7. package/dist/aontu.js +126 -5
  8. package/dist/aontu.js.map +1 -1
  9. package/dist/cli.d.ts +45 -1
  10. package/dist/cli.js +2845 -69
  11. package/dist/cli.js.map +1 -1
  12. package/dist/ctx.d.ts +18 -0
  13. package/dist/ctx.js +44 -0
  14. package/dist/ctx.js.map +1 -1
  15. package/dist/diff.d.ts +22 -0
  16. package/dist/diff.js +141 -0
  17. package/dist/diff.js.map +1 -0
  18. package/dist/err.d.ts +3 -1
  19. package/dist/err.js +45 -8
  20. package/dist/err.js.map +1 -1
  21. package/dist/graph.d.ts +13 -0
  22. package/dist/graph.js +110 -0
  23. package/dist/graph.js.map +1 -0
  24. package/dist/hcanon.d.ts +3 -0
  25. package/dist/hcanon.js +145 -0
  26. package/dist/hcanon.js.map +1 -0
  27. package/dist/hints.js +235 -8
  28. package/dist/hints.js.map +1 -1
  29. package/dist/jsonschema.d.ts +20 -0
  30. package/dist/jsonschema.js +425 -0
  31. package/dist/jsonschema.js.map +1 -0
  32. package/dist/lang.js +955 -110
  33. package/dist/lang.js.map +1 -1
  34. package/dist/lsp.d.ts +9 -2
  35. package/dist/lsp.js +343 -48
  36. package/dist/lsp.js.map +1 -1
  37. package/dist/mcp-server.d.ts +20 -0
  38. package/dist/mcp-server.js +147 -0
  39. package/dist/mcp-server.js.map +1 -0
  40. package/dist/mcp.d.ts +42 -0
  41. package/dist/mcp.js +941 -0
  42. package/dist/mcp.js.map +1 -0
  43. package/dist/mod-tool.d.ts +58 -0
  44. package/dist/mod-tool.js +532 -0
  45. package/dist/mod-tool.js.map +1 -0
  46. package/dist/mod.d.ts +35 -0
  47. package/dist/mod.js +345 -0
  48. package/dist/mod.js.map +1 -0
  49. package/dist/patch.d.ts +49 -0
  50. package/dist/patch.js +506 -0
  51. package/dist/patch.js.map +1 -0
  52. package/dist/provenance.d.ts +41 -0
  53. package/dist/provenance.js +336 -0
  54. package/dist/provenance.js.map +1 -0
  55. package/dist/query.d.ts +27 -0
  56. package/dist/query.js +294 -0
  57. package/dist/query.js.map +1 -0
  58. package/dist/reach.d.ts +15 -0
  59. package/dist/reach.js +168 -0
  60. package/dist/reach.js.map +1 -0
  61. package/dist/relation.d.ts +23 -0
  62. package/dist/relation.js +230 -0
  63. package/dist/relation.js.map +1 -0
  64. package/dist/report-sarif.d.ts +14 -0
  65. package/dist/report-sarif.js +102 -0
  66. package/dist/report-sarif.js.map +1 -0
  67. package/dist/sig.d.ts +25 -0
  68. package/dist/sig.js +277 -0
  69. package/dist/sig.js.map +1 -0
  70. package/dist/sigdecl.d.ts +2 -0
  71. package/dist/sigdecl.js +11 -0
  72. package/dist/sigdecl.js.map +1 -0
  73. package/dist/siggate.d.ts +4 -0
  74. package/dist/siggate.js +90 -0
  75. package/dist/siggate.js.map +1 -0
  76. package/dist/site.d.ts +4 -0
  77. package/dist/site.js +31 -0
  78. package/dist/site.js.map +1 -1
  79. package/dist/std.d.ts +1 -0
  80. package/dist/std.js +129 -0
  81. package/dist/std.js.map +1 -0
  82. package/dist/subsume.d.ts +39 -0
  83. package/dist/subsume.js +573 -0
  84. package/dist/subsume.js.map +1 -0
  85. package/dist/trim.d.ts +19 -0
  86. package/dist/trim.js +155 -0
  87. package/dist/trim.js.map +1 -0
  88. package/dist/tsconfig.tsbuildinfo +1 -1
  89. package/dist/type.d.ts +17 -1
  90. package/dist/type.js.map +1 -1
  91. package/dist/unify.d.ts +2 -1
  92. package/dist/unify.js +234 -38
  93. package/dist/unify.js.map +1 -1
  94. package/dist/utility.d.ts +8 -1
  95. package/dist/utility.js +68 -1
  96. package/dist/utility.js.map +1 -1
  97. package/dist/val/AggFuncVal.d.ts +44 -0
  98. package/dist/val/AggFuncVal.js +364 -0
  99. package/dist/val/AggFuncVal.js.map +1 -0
  100. package/dist/val/ArithFuncVal.d.ts +31 -0
  101. package/dist/val/ArithFuncVal.js +62 -0
  102. package/dist/val/ArithFuncVal.js.map +1 -0
  103. package/dist/val/BagVal.d.ts +7 -0
  104. package/dist/val/BagVal.js +150 -11
  105. package/dist/val/BagVal.js.map +1 -1
  106. package/dist/val/CloseFuncVal.js +9 -1
  107. package/dist/val/CloseFuncVal.js.map +1 -1
  108. package/dist/val/ConjunctVal.d.ts +1 -1
  109. package/dist/val/ConjunctVal.js +19 -0
  110. package/dist/val/ConjunctVal.js.map +1 -1
  111. package/dist/val/ConstraintVal.d.ts +7 -1
  112. package/dist/val/ConstraintVal.js +523 -45
  113. package/dist/val/ConstraintVal.js.map +1 -1
  114. package/dist/val/ContainerKindVal.d.ts +35 -0
  115. package/dist/val/ContainerKindVal.js +99 -0
  116. package/dist/val/ContainerKindVal.js.map +1 -0
  117. package/dist/val/CopyFuncVal.d.ts +1 -2
  118. package/dist/val/CopyFuncVal.js.map +1 -1
  119. package/dist/val/Decimal.d.ts +1 -0
  120. package/dist/val/Decimal.js +13 -0
  121. package/dist/val/Decimal.js.map +1 -1
  122. package/dist/val/DeprecateFuncVal.d.ts +11 -0
  123. package/dist/val/DeprecateFuncVal.js +47 -0
  124. package/dist/val/DeprecateFuncVal.js.map +1 -0
  125. package/dist/val/DisjunctVal.d.ts +1 -2
  126. package/dist/val/DisjunctVal.js +269 -53
  127. package/dist/val/DisjunctVal.js.map +1 -1
  128. package/dist/val/EachFuncVal.d.ts +15 -0
  129. package/dist/val/EachFuncVal.js +75 -0
  130. package/dist/val/EachFuncVal.js.map +1 -0
  131. package/dist/val/ExpectVal.js +62 -4
  132. package/dist/val/ExpectVal.js.map +1 -1
  133. package/dist/val/FeatureVal.js +1 -1
  134. package/dist/val/FeatureVal.js.map +1 -1
  135. package/dist/val/FilterFuncVal.d.ts +15 -0
  136. package/dist/val/FilterFuncVal.js +91 -0
  137. package/dist/val/FilterFuncVal.js.map +1 -0
  138. package/dist/val/FuncBaseVal.d.ts +7 -1
  139. package/dist/val/FuncBaseVal.js +183 -2
  140. package/dist/val/FuncBaseVal.js.map +1 -1
  141. package/dist/val/GraphAtomVal.d.ts +39 -0
  142. package/dist/val/GraphAtomVal.js +184 -0
  143. package/dist/val/GraphAtomVal.js.map +1 -0
  144. package/dist/val/HideFuncVal.js.map +1 -1
  145. package/dist/val/JunctionVal.js +24 -1
  146. package/dist/val/JunctionVal.js.map +1 -1
  147. package/dist/val/KeyFuncVal.d.ts +1 -1
  148. package/dist/val/KeyFuncVal.js +38 -30
  149. package/dist/val/KeyFuncVal.js.map +1 -1
  150. package/dist/val/ListVal.js +94 -14
  151. package/dist/val/ListVal.js.map +1 -1
  152. package/dist/val/LowerFuncVal.js.map +1 -1
  153. package/dist/val/MapVal.d.ts +1 -0
  154. package/dist/val/MapVal.js +146 -14
  155. package/dist/val/MapVal.js.map +1 -1
  156. package/dist/val/MatchFuncVal.d.ts +15 -0
  157. package/dist/val/MatchFuncVal.js +107 -0
  158. package/dist/val/MatchFuncVal.js.map +1 -0
  159. package/dist/val/MoveFuncVal.js.map +1 -1
  160. package/dist/val/NilVal.js +24 -0
  161. package/dist/val/NilVal.js.map +1 -1
  162. package/dist/val/OpBaseVal.d.ts +1 -1
  163. package/dist/val/OpBaseVal.js +19 -1
  164. package/dist/val/OpBaseVal.js.map +1 -1
  165. package/dist/val/OpenFuncVal.js +4 -1
  166. package/dist/val/OpenFuncVal.js.map +1 -1
  167. package/dist/val/PackFuncVal.d.ts +15 -0
  168. package/dist/val/PackFuncVal.js +108 -0
  169. package/dist/val/PackFuncVal.js.map +1 -0
  170. package/dist/val/PathFuncVal.d.ts +2 -2
  171. package/dist/val/PathFuncVal.js +75 -16
  172. package/dist/val/PathFuncVal.js.map +1 -1
  173. package/dist/val/PathVal.d.ts +25 -0
  174. package/dist/val/PathVal.js +150 -0
  175. package/dist/val/PathVal.js.map +1 -0
  176. package/dist/val/PlaceVal.d.ts +13 -0
  177. package/dist/val/PlaceVal.js +131 -0
  178. package/dist/val/PlaceVal.js.map +1 -0
  179. package/dist/val/PlusOpVal.d.ts +2 -1
  180. package/dist/val/PlusOpVal.js +61 -37
  181. package/dist/val/PlusOpVal.js.map +1 -1
  182. package/dist/val/PrefFuncVal.js.map +1 -1
  183. package/dist/val/PrefVal.d.ts +4 -2
  184. package/dist/val/PrefVal.js +223 -41
  185. package/dist/val/PrefVal.js.map +1 -1
  186. package/dist/val/RecurseVal.d.ts +19 -0
  187. package/dist/val/RecurseVal.js +217 -0
  188. package/dist/val/RecurseVal.js.map +1 -0
  189. package/dist/val/RefVal.d.ts +3 -2
  190. package/dist/val/RefVal.js +181 -66
  191. package/dist/val/RefVal.js.map +1 -1
  192. package/dist/val/ReferFuncVal.d.ts +59 -0
  193. package/dist/val/ReferFuncVal.js +604 -0
  194. package/dist/val/ReferFuncVal.js.map +1 -0
  195. package/dist/val/ScalarKindVal.d.ts +4 -3
  196. package/dist/val/ScalarKindVal.js +12 -12
  197. package/dist/val/ScalarKindVal.js.map +1 -1
  198. package/dist/val/SuperFuncVal.d.ts +4 -2
  199. package/dist/val/SuperFuncVal.js +118 -14
  200. package/dist/val/SuperFuncVal.js.map +1 -1
  201. package/dist/val/TopVal.d.ts +1 -1
  202. package/dist/val/TopVal.js.map +1 -1
  203. package/dist/val/TypeFuncVal.js.map +1 -1
  204. package/dist/val/UpperFuncVal.js.map +1 -1
  205. package/dist/val/Val.d.ts +7 -1
  206. package/dist/val/Val.js +170 -2
  207. package/dist/val/Val.js.map +1 -1
  208. package/dist/val/VarVal.js.map +1 -1
  209. package/dist/val/arith.d.ts +6 -0
  210. package/dist/val/arith.js +173 -0
  211. package/dist/val/arith.js.map +1 -0
  212. package/dist/vet.d.ts +45 -0
  213. package/dist/vet.js +802 -0
  214. package/dist/vet.js.map +1 -0
  215. package/dist/view.d.ts +85 -0
  216. package/dist/view.js +1948 -0
  217. package/dist/view.js.map +1 -0
  218. package/dist/walk.d.ts +2 -0
  219. package/dist/walk.js +91 -0
  220. package/dist/walk.js.map +1 -0
  221. package/grammar/aontu.gbnf +138 -0
  222. package/grammar/aontu.lark +118 -0
  223. package/grammar/aontu.tmLanguage.json +184 -0
  224. package/package.json +30 -8
  225. package/skill/SKILL.md +37 -0
  226. package/skill/error-codes.md +62 -0
  227. package/skill/examples.md +99 -0
  228. package/skill/grammar-card.md +56 -0
  229. package/src/agentsmd.ts +135 -0
  230. package/src/aontu.ts +166 -5
  231. package/src/cli.ts +3324 -72
  232. package/src/ctx.ts +93 -1
  233. package/src/diff.ts +198 -0
  234. package/src/err.ts +50 -8
  235. package/src/graph.ts +185 -0
  236. package/src/hcanon.ts +167 -0
  237. package/src/hints.ts +291 -8
  238. package/src/jsonschema.ts +552 -0
  239. package/src/lang.ts +1049 -110
  240. package/src/lsp.ts +351 -49
  241. package/src/mcp-server.ts +187 -0
  242. package/src/mcp.ts +1130 -0
  243. package/src/mod-tool.ts +718 -0
  244. package/src/mod.ts +453 -0
  245. package/src/patch.ts +628 -0
  246. package/src/provenance.ts +437 -0
  247. package/src/query.ts +381 -0
  248. package/src/reach.ts +213 -0
  249. package/src/relation.ts +298 -0
  250. package/src/report-sarif.ts +137 -0
  251. package/src/sig.ts +345 -0
  252. package/src/sigdecl.ts +11 -0
  253. package/src/siggate.ts +144 -0
  254. package/src/site.ts +36 -1
  255. package/src/std.ts +131 -0
  256. package/src/subsume.ts +739 -0
  257. package/src/trim.ts +195 -0
  258. package/src/tsconfig.json +10 -4
  259. package/src/type.ts +51 -2
  260. package/src/unify.ts +253 -38
  261. package/src/utility.ts +79 -1
  262. package/src/val/AggFuncVal.ts +546 -0
  263. package/src/val/ArithFuncVal.ts +108 -0
  264. package/src/val/BagVal.ts +158 -12
  265. package/src/val/CloseFuncVal.ts +9 -1
  266. package/src/val/ConjunctVal.ts +20 -0
  267. package/src/val/ConstraintVal.ts +576 -48
  268. package/src/val/ContainerKindVal.ts +158 -0
  269. package/src/val/CopyFuncVal.ts +0 -1
  270. package/src/val/Decimal.ts +15 -0
  271. package/src/val/DeprecateFuncVal.ts +84 -0
  272. package/src/val/DisjunctVal.ts +282 -59
  273. package/src/val/EachFuncVal.ts +133 -0
  274. package/src/val/ExpectVal.ts +65 -8
  275. package/src/val/FeatureVal.ts +1 -1
  276. package/src/val/FilterFuncVal.ts +154 -0
  277. package/src/val/FuncBaseVal.ts +206 -2
  278. package/src/val/GraphAtomVal.ts +264 -0
  279. package/src/val/HideFuncVal.ts +0 -2
  280. package/src/val/JunctionVal.ts +24 -1
  281. package/src/val/KeyFuncVal.ts +39 -35
  282. package/src/val/ListVal.ts +101 -15
  283. package/src/val/LowerFuncVal.ts +0 -1
  284. package/src/val/MapVal.ts +153 -14
  285. package/src/val/MatchFuncVal.ts +176 -0
  286. package/src/val/MoveFuncVal.ts +0 -2
  287. package/src/val/NilVal.ts +25 -0
  288. package/src/val/OpBaseVal.ts +20 -1
  289. package/src/val/OpenFuncVal.ts +4 -2
  290. package/src/val/PackFuncVal.ts +175 -0
  291. package/src/val/PathFuncVal.ts +107 -20
  292. package/src/val/PathVal.ts +221 -0
  293. package/src/val/PlaceVal.ts +193 -0
  294. package/src/val/PlusOpVal.ts +67 -39
  295. package/src/val/PrefFuncVal.ts +0 -1
  296. package/src/val/PrefVal.ts +251 -60
  297. package/src/val/RecurseVal.ts +285 -0
  298. package/src/val/RefVal.ts +183 -78
  299. package/src/val/ReferFuncVal.ts +732 -0
  300. package/src/val/ScalarKindVal.ts +12 -13
  301. package/src/val/SuperFuncVal.ts +137 -13
  302. package/src/val/TopVal.ts +1 -2
  303. package/src/val/TypeFuncVal.ts +0 -2
  304. package/src/val/UpperFuncVal.ts +0 -1
  305. package/src/val/Val.ts +216 -4
  306. package/src/val/VarVal.ts +0 -1
  307. package/src/val/arith.ts +319 -0
  308. package/src/vet.ts +1025 -0
  309. package/src/view.ts +2563 -0
  310. package/src/walk.ts +99 -0
@@ -0,0 +1,364 @@
1
+ "use strict";
2
+ /* Copyright (c) 2025 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.GreatestFuncVal = exports.LeastFuncVal = exports.SumFuncVal = exports.PickFuncVal = exports.JoinFuncVal = exports.AggFuncVal = void 0;
5
+ const err_1 = require("../err");
6
+ const IntegerVal_1 = require("./IntegerVal");
7
+ const ListVal_1 = require("./ListVal");
8
+ const StringVal_1 = require("./StringVal");
9
+ const FuncBaseVal_1 = require("./FuncBaseVal");
10
+ const arith_1 = require("./arith");
11
+ const numcmp_1 = require("./numcmp");
12
+ const keyorder_1 = require("../keyorder");
13
+ const PlusOpVal_1 = require("./PlusOpVal");
14
+ // The children of a bag, in the order the aggregate sees them: source
15
+ // order for a list, sorted-key order for a map -- `each`'s order, and
16
+ // for the same reason (a map has no order of its own, so the language
17
+ // picks one and states it).
18
+ function bagChildren(data) {
19
+ if (true === data?.isList) {
20
+ return data.peg;
21
+ }
22
+ if (true === data?.isMap) {
23
+ // THE ONE MAP-KEY ORDER (../keyorder.ts), not a bare `.sort()`:
24
+ // JavaScript compares by UTF-16 code unit, so an astral key's
25
+ // leading surrogate sorts BELOW U+E000-U+FFFF and `pick` answered
26
+ // in a different order from `each`, from canon, and from Go --
27
+ // which sorts UTF-8 bytes, i.e. code points. `pick` is the
28
+ // order-preserving projection, so that was one model producing two
29
+ // different generated files (BUGS.md 62).
30
+ return Object.keys(data.peg).sort(keyorder_1.cmpCodePoint).map((k) => data.peg[k]);
31
+ }
32
+ return undefined;
33
+ }
34
+ class AggFuncVal extends FuncBaseVal_1.FuncBaseVal {
35
+ constructor(spec, ctx, op) {
36
+ super(spec, ctx);
37
+ this.isAggFunc = true;
38
+ // THE STAGING RULE (G8 phase 0). A total over a bag that is still
39
+ // being merged into is a total of the wrong bag -- the same reason
40
+ // `filter` and `each` wait.
41
+ this.staged = true;
42
+ this.op = op;
43
+ }
44
+ // NO `make` OVERRIDE, matching the other STAGED funcs (pack, each,
45
+ // filter, match): a staged call returns `residuate` before `unify`
46
+ // ever reaches the rebuild branch, so an override there would be
47
+ // unreachable code pretending to be a contract. The base's `make`
48
+ // raises `func:<name>` if that ever stops being true, which is the
49
+ // loud answer rather than a value that silently lost its operation.
50
+ funcname() {
51
+ return this.op;
52
+ }
53
+ // The base does not drive the argument: `unify` drives it by hand,
54
+ // because a staged func must advance what it is waiting on every
55
+ // pass rather than only on the pass it fires.
56
+ prepare(_ctx, _args) {
57
+ return null;
58
+ }
59
+ unify(peer, ctx) {
60
+ const ready = this.driveStagedArgs(ctx, 1);
61
+ if (!ready || !ctx.settle) {
62
+ return this.residuate(peer, ctx);
63
+ }
64
+ return super.unify(peer, ctx);
65
+ }
66
+ resolve(ctx, args) {
67
+ const children = bagChildren(args?.[0]);
68
+ if (undefined === children) {
69
+ return this.place((0, err_1.makeNilErr)(ctx, 'aggregate_data', this, undefined, this.op));
70
+ }
71
+ if ('sum' === this.op) {
72
+ // Zero is addition's identity, so an empty bag has an answer and
73
+ // it is an integer -- the narrowest kind, which the first real
74
+ // operand then widens under R5 exactly as `add(0, x)` would.
75
+ let total = new IntegerVal_1.IntegerVal({ peg: 0 });
76
+ for (const child of children) {
77
+ total = (0, arith_1.arith)(ctx, 'add', this, total, child, this.op);
78
+ // A refusal inside the fold IS the answer: adding on past a
79
+ // non-numeric child or an overflow would report the wrong
80
+ // reason, or none.
81
+ if (true === total.isNil) {
82
+ return this.place(total);
83
+ }
84
+ }
85
+ return this.place(total);
86
+ }
87
+ if (0 === children.length) {
88
+ return this.place((0, err_1.makeNilErr)(ctx, 'aggregate_empty', this, undefined, this.op));
89
+ }
90
+ const want = 'least' === this.op ? -1 : 1;
91
+ let best = undefined;
92
+ for (const child of children) {
93
+ const c = unpref(child);
94
+ if (!(c?.isVal && c.isScalar && 'string' !== typeof c.peg &&
95
+ 'boolean' !== typeof c.peg && !c.isNull)) {
96
+ return this.place((0, err_1.makeNilErr)(ctx, 'invalid-arg', this, undefined, this.op));
97
+ }
98
+ // The EXACT comparator (numcmp), never binary64: a bigdecimal and
99
+ // an integer in one bag must order by their values and not by
100
+ // whatever their float images happen to be.
101
+ if (undefined === best || want === (0, numcmp_1.cmpNumeric)(c, best)) {
102
+ best = c;
103
+ }
104
+ }
105
+ // The winner is returned as itself, so it keeps its own kind: the
106
+ // least of a bag of bigdecimals is a bigdecimal.
107
+ return this.place(best.clone(ctx));
108
+ }
109
+ }
110
+ exports.AggFuncVal = AggFuncVal;
111
+ // A pref child contributes its preferred value, and therefore that
112
+ // value's kind too -- the rule `+` and the arithmetic family apply to
113
+ // operands, applied here to bag members.
114
+ function unpref(v) {
115
+ while (v?.isPref) {
116
+ v = v.peg;
117
+ }
118
+ return v;
119
+ }
120
+ // PROJECTION: `pick(d, k)` -- one element per child of `d`, being that
121
+ // child's `k`.
122
+ //
123
+ // The other half of the review's finding I: "`_.field` is unspellable,
124
+ // `filter` cannot see into lists, `unique()`-by-field is reserved but
125
+ // absent -- so 'no two services share a port' and 'unique event ids'
126
+ // cannot be said." Without it the aggregates above cannot reach the
127
+ // case that motivated them, because `sum` needs a bag of NUMBERS and a
128
+ // model holds a bag of RECORDS:
129
+ //
130
+ // total: sum(pick($.lines, amountCents))
131
+ //
132
+ // IT IS NOT `each` WITH A CLEVER TEMPLATE. `each(d, t)` MEETS each
133
+ // child with `t`, and a meet cannot select: `each($.lines, _.amount)`
134
+ // asks for a child that is simultaneously the whole record and one of
135
+ // its fields, which is why every spelling of it answers `no_path`.
136
+ // Selection is a different operation and gets its own verb.
137
+ //
138
+ // A CHILD MISSING THE KEY IS AN ERROR, not a silently shorter list.
139
+ // Skipping would make `sum(pick(...))` quietly total the wrong set of
140
+ // records -- the failure mode an aggregate exists to prevent -- so the
141
+ // refusal names the child (`pick_key`).
142
+ class PickFuncVal extends FuncBaseVal_1.FuncBaseVal {
143
+ constructor(spec, ctx) {
144
+ super(spec, ctx);
145
+ this.isPickFunc = true;
146
+ // The bag must settle before it is projected, exactly as it must
147
+ // before it is folded.
148
+ this.staged = true;
149
+ }
150
+ funcname() {
151
+ return 'pick';
152
+ }
153
+ // The base drives neither argument: the DATA is driven by hand below
154
+ // (a staged func must advance what it waits on every pass), and the
155
+ // KEY is a bare word, which the parser has already made a string.
156
+ prepare(_ctx, _args) {
157
+ return null;
158
+ }
159
+ unify(peer, ctx) {
160
+ const ready = this.driveStagedArgs(ctx, 1);
161
+ if (!ready || !ctx.settle) {
162
+ return this.residuate(peer, ctx);
163
+ }
164
+ return super.unify(peer, ctx);
165
+ }
166
+ resolve(ctx, args) {
167
+ const children = bagChildren(args?.[0]);
168
+ const key = args?.[1];
169
+ if (undefined === children) {
170
+ return this.place((0, err_1.makeNilErr)(ctx, 'aggregate_data', this, undefined, 'pick'));
171
+ }
172
+ // The key is a STRING for a map child and the decimal spelling of an
173
+ // index for a list child -- the same rule a reference segment
174
+ // follows, so `pick(d, 0)` and `$.d.0.x` agree about what `0` names.
175
+ const name = null == key?.peg ? undefined :
176
+ 'string' === typeof key.peg ? key.peg :
177
+ 'number' === typeof key.peg && key.isInteger ? String(key.peg) :
178
+ undefined;
179
+ if (undefined === name) {
180
+ return this.place((0, err_1.makeNilErr)(ctx, 'invalid-arg', this, undefined, 'pick'));
181
+ }
182
+ const peg = [];
183
+ for (const child of children) {
184
+ const c = child;
185
+ const got = true === c?.isMap ? c.peg[name] :
186
+ true === c?.isList ? c.peg[Number(name)] :
187
+ undefined;
188
+ if (null == got) {
189
+ return this.place((0, err_1.makeNilErr)(ctx, 'pick_key', this, undefined, 'pick', { key: name }));
190
+ }
191
+ peg.push(got.clone(ctx.descend(String(peg.length))));
192
+ }
193
+ return this.place(new ListVal_1.ListVal({ peg }, ctx));
194
+ }
195
+ }
196
+ exports.PickFuncVal = PickFuncVal;
197
+ // Which of the three a value is.
198
+ //
199
+ // `text` -- `+` would take it, so the fold can.
200
+ //
201
+ // `never` -- a SETTLED value that will never become text: a map, a
202
+ // list, a null. This is `join_member`, class `conflict`, and it names
203
+ // the member rather than the call, because "one of these is not a
204
+ // string" is only actionable if you are told which.
205
+ //
206
+ // `notyet` -- an unresolved kind, a top, a stable residue. NOT a join
207
+ // failure at all: the call stays residual and generation reports
208
+ // `mapval_no_gen`, class `incomplete`, exactly as docs/trust.md
209
+ // requires ("a stable residue ... is ordinary incompleteness"). Getting
210
+ // this split wrong in either direction is the defect that matters here:
211
+ // refusing a residue makes `join` unusable inside a schema, and
212
+ // deferring on a map makes a real error arrive as a shrug.
213
+ function memberVerdict(v) {
214
+ const u = unpref(v);
215
+ if (undefined !== (0, PlusOpVal_1.plusText)(u)) {
216
+ return 'text';
217
+ }
218
+ if (true === u?.isMap || true === u?.isList || true === u?.isNull) {
219
+ return 'never';
220
+ }
221
+ return 'notyet';
222
+ }
223
+ // The separator is a STRING or it is nothing.
224
+ //
225
+ // A number would render perfectly well through `+`, and is still
226
+ // refused: the separator is not a member of the fold, it is the
227
+ // parameter naming the text between members, and `join(x, 5)` is far
228
+ // likelier a mistake than an intent to separate with "5". `pick`'s key
229
+ // argument draws the same line for the same reason. This is the
230
+ // direction that can be loosened later without breaking a document;
231
+ // the other direction cannot.
232
+ function sepVerdict(v) {
233
+ const u = unpref(v);
234
+ if (u?.isVal && u.isScalar) {
235
+ return 'string' === typeof u.peg ? 'text' : 'never';
236
+ }
237
+ if (true === u?.isMap || true === u?.isList || true === u?.isNull) {
238
+ return 'never';
239
+ }
240
+ return 'notyet';
241
+ }
242
+ class JoinFuncVal extends FuncBaseVal_1.FuncBaseVal {
243
+ constructor(spec, ctx) {
244
+ super(spec, ctx);
245
+ this.isJoinFunc = true;
246
+ // The bag must settle before it is folded, exactly as it must before
247
+ // it is summed or projected.
248
+ this.staged = true;
249
+ }
250
+ // A `make` OVERRIDE, WHERE ITS AggFuncVal SIBLINGS HAVE NONE, and the
251
+ // difference is worth stating because it is not arbitrary. `sum`,
252
+ // `pick` and the rest are staged and nothing more: they residuate
253
+ // before `unify` reaches the rebuild branch, so a `make` there would
254
+ // be unreachable code pretending to be a contract, and the base's
255
+ // `func:<name>` refusal is the loud answer if that ever changes.
256
+ //
257
+ // `join` is the first builtin that is BOTH staged AND defers its
258
+ // resolution (see `deferResolve`). A deferred call has settled
259
+ // arguments, so it does reach the rebuild branch, and without this it
260
+ // raised `func:join` on the first document with an unresolved member
261
+ // — where the Go port residuated and reported `mapval_no_gen`.
262
+ // Opposite answers on `join($.m, ",")` with `m: [string]`, caught by
263
+ // running both engines rather than by either test suite. `super` and
264
+ // bare `id`, the two other deferring calls, each carry the same
265
+ // override for the same reason.
266
+ make(_ctx, spec) {
267
+ return new JoinFuncVal(spec);
268
+ }
269
+ funcname() {
270
+ return 'join';
271
+ }
272
+ // The base does not drive: `unify` drives by hand, because a staged
273
+ // func must advance what it is waiting on every pass rather than only
274
+ // on the pass it fires.
275
+ prepare(_ctx, _args) {
276
+ return null;
277
+ }
278
+ unify(peer, ctx) {
279
+ // BOTH arguments, unlike `pick`, which drives only its bag: `pick`'s
280
+ // key is a bare word the parser has already made a string, while a
281
+ // separator is an ordinary expression and `join($.rows, $.sep)` has
282
+ // to wait for it.
283
+ const ready = this.driveStagedArgs(ctx, 2);
284
+ if (!ready || !ctx.settle) {
285
+ return this.residuate(peer, ctx);
286
+ }
287
+ return super.unify(peer, ctx);
288
+ }
289
+ // The `notyet` half of the verdict, taken before `resolve` runs: with
290
+ // arguments settled but a member still a kind, the call rides the
291
+ // ordinary args-not-done path and residuates, which is what makes an
292
+ // unresolved member ordinary incompleteness rather than a refusal.
293
+ deferResolve(_ctx, args) {
294
+ const children = bagChildren(args?.[0]);
295
+ if (undefined === children) {
296
+ // Not a bag at all: let `resolve` say so rather than waiting for
297
+ // a settling that has already happened.
298
+ return false;
299
+ }
300
+ const sep = args?.[1];
301
+ if (undefined !== sep && 'notyet' === sepVerdict(sep)) {
302
+ return true;
303
+ }
304
+ return children.some((c) => 'notyet' === memberVerdict(c));
305
+ }
306
+ resolve(ctx, args) {
307
+ const children = bagChildren(args?.[0]);
308
+ if (undefined === children) {
309
+ return this.place((0, err_1.makeNilErr)(ctx, 'aggregate_data', this, undefined, 'join'));
310
+ }
311
+ // Arity is [1,2], so a second argument is present or the separator
312
+ // is the empty string -- which makes `join(coll)` concatenation.
313
+ // The separator's SHAPE is settled before resolve runs: the
314
+ // signature gate refuses every concrete non-string
315
+ // (docs/design/SIGNATURES.0.md; join(d: map|list, sep?: string)),
316
+ // and deferResolve holds the call while sepVerdict answers notyet
317
+ // -- so a present separator here is text.
318
+ let sep = '';
319
+ if (1 < args.length) {
320
+ sep = unpref(args[1]).peg;
321
+ }
322
+ // NO NIL-MEMBER GUARD, WHERE `sum` HAS ONE, and the difference is
323
+ // the fold's shape rather than an oversight. `sum` folds with
324
+ // `arith`, which MINTS a nil part-way through — a non-numeric child
325
+ // or an overflow — so it has to stop and return it. `join` folds
326
+ // already-unified values, and a nil among a list's elements
327
+ // collapses the list before this call resolves: `join([least([])],
328
+ // ",")` reports `aggregate_empty` at the member's own path,
329
+ // `$.o.0`, and never reaches here. A guard was written, the
330
+ // ADR-002 gate found it unexecuted, and probing confirmed no
331
+ // spelling reaches it, so it is removed rather than excused.
332
+ const parts = [];
333
+ for (const child of children) {
334
+ const u = unpref(child);
335
+ const text = (0, PlusOpVal_1.plusText)(u);
336
+ if (undefined === text) {
337
+ return this.place((0, err_1.makeNilErr)(ctx, 'join_member', this, undefined, 'join', { member: String(u?.canon) }));
338
+ }
339
+ parts.push(text);
340
+ }
341
+ // Every part is already a string, so this IS the `+` fold seeded
342
+ // with `""` -- written as one concatenation because a loop of `+`
343
+ // over settled strings cannot differ from it, and because the Go
344
+ // twin's strings.Join must produce the same bytes.
345
+ return this.place(new StringVal_1.StringVal({ peg: parts.join(sep) }));
346
+ }
347
+ }
348
+ exports.JoinFuncVal = JoinFuncVal;
349
+ // The three the registry names. Each is its operation and nothing else.
350
+ class SumFuncVal extends AggFuncVal {
351
+ constructor(spec, ctx) { super(spec, ctx, 'sum'); }
352
+ }
353
+ exports.SumFuncVal = SumFuncVal;
354
+ class LeastFuncVal extends AggFuncVal {
355
+ constructor(spec, ctx) { super(spec, ctx, 'least'); }
356
+ }
357
+ exports.LeastFuncVal = LeastFuncVal;
358
+ class GreatestFuncVal extends AggFuncVal {
359
+ constructor(spec, ctx) {
360
+ super(spec, ctx, 'greatest');
361
+ }
362
+ } /* node:coverage ignore next 10 */
363
+ exports.GreatestFuncVal = GreatestFuncVal;
364
+ //# sourceMappingURL=AggFuncVal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AggFuncVal.js","sourceRoot":"","sources":["../../src/val/AggFuncVal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Val, ValSpec } from '../type';
2
+ import { AontuContext } from '../ctx';
3
+ import { FuncBaseVal } from './FuncBaseVal';
4
+ import type { ArithOp } from './arith';
5
+ declare class ArithFuncVal extends FuncBaseVal {
6
+ isArithFunc: boolean;
7
+ op: ArithOp;
8
+ constructor(spec: ValSpec, ctx: AontuContext | undefined, op: ArithOp);
9
+ make(_ctx: AontuContext, spec: ValSpec): Val;
10
+ funcname(): ArithOp;
11
+ resolve(ctx: AontuContext | undefined, args: Val[]): Val;
12
+ }
13
+ declare class AddFuncVal extends ArithFuncVal {
14
+ constructor(spec: ValSpec, ctx?: AontuContext);
15
+ }
16
+ declare class SubFuncVal extends ArithFuncVal {
17
+ constructor(spec: ValSpec, ctx?: AontuContext);
18
+ }
19
+ declare class MulFuncVal extends ArithFuncVal {
20
+ constructor(spec: ValSpec, ctx?: AontuContext);
21
+ }
22
+ declare class DivFuncVal extends ArithFuncVal {
23
+ constructor(spec: ValSpec, ctx?: AontuContext);
24
+ }
25
+ declare class ModFuncVal extends ArithFuncVal {
26
+ constructor(spec: ValSpec, ctx?: AontuContext);
27
+ }
28
+ declare class RemFuncVal extends ArithFuncVal {
29
+ constructor(spec: ValSpec, ctx?: AontuContext);
30
+ }
31
+ export { ArithFuncVal, AddFuncVal, SubFuncVal, MulFuncVal, DivFuncVal, ModFuncVal, RemFuncVal, };
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /* Copyright (c) 2025 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RemFuncVal = exports.ModFuncVal = exports.DivFuncVal = exports.MulFuncVal = exports.SubFuncVal = exports.AddFuncVal = exports.ArithFuncVal = void 0;
5
+ const FuncBaseVal_1 = require("./FuncBaseVal");
6
+ const arith_1 = require("./arith");
7
+ // ONE CLASS FOR SIX FUNCTIONS, because every rule they obey is a rule
8
+ // about arithmetic rather than about any one operation (see arith.ts).
9
+ // Six near-identical classes would be six places for the exact ladder,
10
+ // the zero divisor and the storage contract to drift apart, and the
11
+ // number tower's whole point is that they cannot.
12
+ //
13
+ // The op is carried on the instance and answered by `funcname()`, which
14
+ // is what canon renders and what an error names. The six one-line
15
+ // subclasses below exist only because the parser's registry constructs
16
+ // with `new funcval({peg: args})` and has nowhere to put a name; every
17
+ // line of behaviour is here.
18
+ class ArithFuncVal extends FuncBaseVal_1.FuncBaseVal {
19
+ constructor(spec, ctx, op) {
20
+ super(spec, ctx);
21
+ this.isArithFunc = true;
22
+ this.op = op;
23
+ }
24
+ // Rebuilt as its own class, carrying its own op: residuation must not
25
+ // turn a `sub` into a bare arithmetic call with no operation.
26
+ make(_ctx, spec) {
27
+ return new this.constructor(spec, undefined, this.op);
28
+ }
29
+ funcname() {
30
+ return this.op;
31
+ }
32
+ resolve(ctx, args) {
33
+ return this.place((0, arith_1.arith)(ctx, this.op, this, args?.[0], args?.[1]));
34
+ }
35
+ }
36
+ exports.ArithFuncVal = ArithFuncVal;
37
+ // The six the registry names. Each is its operation and nothing else.
38
+ class AddFuncVal extends ArithFuncVal {
39
+ constructor(spec, ctx) { super(spec, ctx, 'add'); }
40
+ }
41
+ exports.AddFuncVal = AddFuncVal;
42
+ class SubFuncVal extends ArithFuncVal {
43
+ constructor(spec, ctx) { super(spec, ctx, 'sub'); }
44
+ }
45
+ exports.SubFuncVal = SubFuncVal;
46
+ class MulFuncVal extends ArithFuncVal {
47
+ constructor(spec, ctx) { super(spec, ctx, 'mul'); }
48
+ }
49
+ exports.MulFuncVal = MulFuncVal;
50
+ class DivFuncVal extends ArithFuncVal {
51
+ constructor(spec, ctx) { super(spec, ctx, 'div'); }
52
+ }
53
+ exports.DivFuncVal = DivFuncVal;
54
+ class ModFuncVal extends ArithFuncVal {
55
+ constructor(spec, ctx) { super(spec, ctx, 'mod'); }
56
+ }
57
+ exports.ModFuncVal = ModFuncVal;
58
+ class RemFuncVal extends ArithFuncVal {
59
+ constructor(spec, ctx) { super(spec, ctx, 'rem'); }
60
+ } /* node:coverage ignore next 11 */
61
+ exports.RemFuncVal = RemFuncVal;
62
+ //# sourceMappingURL=ArithFuncVal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArithFuncVal.js","sourceRoot":"","sources":["../../src/val/ArithFuncVal.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAYpD,+CAA2C;AAC3C,mCAA+B;AAI/B,sEAAsE;AACtE,uEAAuE;AACvE,uEAAuE;AACvE,oEAAoE;AACpE,kDAAkD;AAClD,EAAE;AACF,wEAAwE;AACxE,kEAAkE;AAClE,uEAAuE;AACvE,uEAAuE;AACvE,6BAA6B;AAC7B,MAAM,YAAa,SAAQ,yBAAW;IAQpC,YACE,IAAa,EACb,GAA6B,EAC7B,EAAW;QAEX,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAZlB,gBAAW,GAAG,IAAI,CAAA;QAahB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAGD,sEAAsE;IACtE,8DAA8D;IAC9D,IAAI,CAAC,IAAkB,EAAE,IAAa;QACpC,OAAO,IAAK,IAAI,CAAC,WAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IAChE,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IAGD,OAAO,CAAC,GAA6B,EAAE,IAAW;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,aAAK,EAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;CAWF;QA8BC,YAAY;AA3Bd,sEAAsE;AACtE,MAAM,UAAW,SAAQ,YAAY;IACnC,YAAY,IAAa,EAAE,GAAkB,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC;CAC3E;QAyBC,UAAU;AAvBZ,MAAM,UAAW,SAAQ,YAAY;IACnC,YAAY,IAAa,EAAE,GAAkB,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC;CAC3E;QAsBC,UAAU;AApBZ,MAAM,UAAW,SAAQ,YAAY;IACnC,YAAY,IAAa,EAAE,GAAkB,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC;CAC3E;QAmBC,UAAU;AAjBZ,MAAM,UAAW,SAAQ,YAAY;IACnC,YAAY,IAAa,EAAE,GAAkB,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC;CAC3E;QAgBC,UAAU;AAdZ,MAAM,UAAW,SAAQ,YAAY;IACnC,YAAY,IAAa,EAAE,GAAkB,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC;CAC3E;QAaC,UAAU;AAXZ,MAAM,UAAW,SAAQ,YAAY;IACnC,YAAY,IAAa,EAAE,GAAkB,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC;CAC3E,CAAC,kCAAkC;QAUlC,UAAU"}
@@ -7,12 +7,19 @@ declare abstract class BagVal extends FeatureVal {
7
7
  isGenable: boolean;
8
8
  closed: boolean;
9
9
  optionalKeys: string[];
10
+ aliasKeys: string[];
10
11
  spread: {
11
12
  cj: Val | undefined;
12
13
  };
13
14
  constructor(spec: ValSpec, ctx?: AontuContext);
14
15
  clone(ctx: AontuContext, spec?: ValSpec): Val;
15
16
  handleExpectedVal(key: string, val: Val, parent: Val, ctx: AontuContext): Val;
17
+ same(peer: any): boolean;
16
18
  gen(ctx: AontuContext): any;
17
19
  }
18
20
  export { BagVal, };
21
+ export declare function sizingResidue(v: any): {
22
+ con: any;
23
+ bag: any;
24
+ } | undefined;
25
+ export declare function bagGenable(child: any): boolean;