aontu 0.61.0 → 0.63.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 (371) hide show
  1. package/README.md +4 -4
  2. package/dist/agentsmd.d.ts +1 -0
  3. package/dist/agentsmd.js +7 -28
  4. package/dist/agentsmd.js.map +1 -1
  5. package/dist/alias.js.map +1 -1
  6. package/dist/allow.d.ts +23 -0
  7. package/dist/allow.js +138 -0
  8. package/dist/allow.js.map +1 -0
  9. package/dist/aontu.d.ts +4 -2
  10. package/dist/aontu.js +4 -80
  11. package/dist/aontu.js.map +1 -1
  12. package/dist/aontumodel.d.ts +4 -0
  13. package/dist/aontumodel.js +33 -0
  14. package/dist/aontumodel.js.map +1 -0
  15. package/dist/cli.d.ts +10 -1
  16. package/dist/cli.js +877 -479
  17. package/dist/cli.js.map +1 -1
  18. package/dist/ctx.js +0 -48
  19. package/dist/ctx.js.map +1 -1
  20. package/dist/diff.js +0 -32
  21. package/dist/diff.js.map +1 -1
  22. package/dist/err.js +0 -40
  23. package/dist/err.js.map +1 -1
  24. package/dist/escape.js +0 -45
  25. package/dist/escape.js.map +1 -1
  26. package/dist/exactjson.d.ts +0 -35
  27. package/dist/exactjson.js +0 -131
  28. package/dist/exactjson.js.map +1 -1
  29. package/dist/format.js +55 -189
  30. package/dist/format.js.map +1 -1
  31. package/dist/grammar.d.ts +9 -0
  32. package/dist/grammar.js +54 -0
  33. package/dist/grammar.js.map +1 -0
  34. package/dist/graph.js +0 -26
  35. package/dist/graph.js.map +1 -1
  36. package/dist/hcanon.js +0 -82
  37. package/dist/hcanon.js.map +1 -1
  38. package/dist/helpdoc.d.ts +16 -0
  39. package/dist/helpdoc.js +59 -0
  40. package/dist/helpdoc.js.map +1 -0
  41. package/dist/hints.d.ts +0 -6
  42. package/dist/hints.js +59 -47
  43. package/dist/hints.js.map +1 -1
  44. package/dist/jsonschema.js +0 -114
  45. package/dist/jsonschema.js.map +1 -1
  46. package/dist/keyorder.d.ts +0 -7
  47. package/dist/keyorder.js +0 -41
  48. package/dist/keyorder.js.map +1 -1
  49. package/dist/lang.js +32 -877
  50. package/dist/lang.js.map +1 -1
  51. package/dist/lower.d.ts +3 -0
  52. package/dist/lower.js +14 -61
  53. package/dist/lower.js.map +1 -1
  54. package/dist/lsp-server.js +0 -16
  55. package/dist/lsp-server.js.map +1 -1
  56. package/dist/lsp.d.ts +1 -1
  57. package/dist/lsp.js +12 -159
  58. package/dist/lsp.js.map +1 -1
  59. package/dist/mcp-server.js +0 -26
  60. package/dist/mcp-server.js.map +1 -1
  61. package/dist/mcp.js +0 -113
  62. package/dist/mcp.js.map +1 -1
  63. package/dist/mod-tool.js +0 -130
  64. package/dist/mod-tool.js.map +1 -1
  65. package/dist/mod.js +0 -162
  66. package/dist/mod.js.map +1 -1
  67. package/dist/patch.js +0 -217
  68. package/dist/patch.js.map +1 -1
  69. package/dist/provenance.js +0 -140
  70. package/dist/provenance.js.map +1 -1
  71. package/dist/query.js +0 -75
  72. package/dist/query.js.map +1 -1
  73. package/dist/reach.js +0 -43
  74. package/dist/reach.js.map +1 -1
  75. package/dist/relation.d.ts +2 -0
  76. package/dist/relation.js +3 -58
  77. package/dist/relation.js.map +1 -1
  78. package/dist/render.js +33 -143
  79. package/dist/render.js.map +1 -1
  80. package/dist/report-sarif.d.ts +0 -11
  81. package/dist/report-sarif.js +0 -28
  82. package/dist/report-sarif.js.map +1 -1
  83. package/dist/sig.js +0 -35
  84. package/dist/sig.js.map +1 -1
  85. package/dist/sigdecl.js +1 -1
  86. package/dist/sigdecl.js.map +1 -1
  87. package/dist/siggate.js +0 -4
  88. package/dist/siggate.js.map +1 -1
  89. package/dist/site.js +3 -29
  90. package/dist/site.js.map +1 -1
  91. package/dist/subsume.d.ts +0 -10
  92. package/dist/subsume.js +0 -137
  93. package/dist/subsume.js.map +1 -1
  94. package/dist/template.d.ts +2 -1
  95. package/dist/template.js +58 -138
  96. package/dist/template.js.map +1 -1
  97. package/dist/trim.js +0 -41
  98. package/dist/trim.js.map +1 -1
  99. package/dist/tsconfig.tsbuildinfo +1 -1
  100. package/dist/type.js.map +1 -1
  101. package/dist/unify.js +12 -242
  102. package/dist/unify.js.map +1 -1
  103. package/dist/utility.js +0 -22
  104. package/dist/utility.js.map +1 -1
  105. package/dist/val/AbnfFuncVal.d.ts +18 -0
  106. package/dist/val/AbnfFuncVal.js +132 -0
  107. package/dist/val/AbnfFuncVal.js.map +1 -0
  108. package/dist/val/AbsentVal.d.ts +11 -0
  109. package/dist/val/AbsentVal.js +30 -0
  110. package/dist/val/AbsentVal.js.map +1 -0
  111. package/dist/val/AggFuncVal.d.ts +10 -1
  112. package/dist/val/AggFuncVal.js +104 -116
  113. package/dist/val/AggFuncVal.js.map +1 -1
  114. package/dist/val/ArithFuncVal.js +0 -12
  115. package/dist/val/ArithFuncVal.js.map +1 -1
  116. package/dist/val/BagVal.js +1 -78
  117. package/dist/val/BagVal.js.map +1 -1
  118. package/dist/val/BigDecimalVal.js +0 -16
  119. package/dist/val/BigDecimalVal.js.map +1 -1
  120. package/dist/val/BigIntegerVal.js +0 -16
  121. package/dist/val/BigIntegerVal.js.map +1 -1
  122. package/dist/val/CloseFuncVal.js +0 -9
  123. package/dist/val/CloseFuncVal.js.map +1 -1
  124. package/dist/val/CmpFuncVal.d.ts +20 -0
  125. package/dist/val/CmpFuncVal.js +188 -0
  126. package/dist/val/CmpFuncVal.js.map +1 -0
  127. package/dist/val/ConjunctVal.js +0 -29
  128. package/dist/val/ConjunctVal.js.map +1 -1
  129. package/dist/val/ConstraintVal.js +0 -500
  130. package/dist/val/ConstraintVal.js.map +1 -1
  131. package/dist/val/ContainerKindVal.js +0 -2
  132. package/dist/val/ContainerKindVal.js.map +1 -1
  133. package/dist/val/CopyFuncVal.js +0 -3
  134. package/dist/val/CopyFuncVal.js.map +1 -1
  135. package/dist/val/Decimal.js +0 -179
  136. package/dist/val/Decimal.js.map +1 -1
  137. package/dist/val/DeprecateFuncVal.js.map +1 -1
  138. package/dist/val/DisjunctVal.js +0 -152
  139. package/dist/val/DisjunctVal.js.map +1 -1
  140. package/dist/val/EachFuncVal.d.ts +1 -2
  141. package/dist/val/EachFuncVal.js +12 -29
  142. package/dist/val/EachFuncVal.js.map +1 -1
  143. package/dist/val/EmitFuncVal.d.ts +1 -1
  144. package/dist/val/EmitFuncVal.js +6 -119
  145. package/dist/val/EmitFuncVal.js.map +1 -1
  146. package/dist/val/ExpectVal.js +0 -62
  147. package/dist/val/ExpectVal.js.map +1 -1
  148. package/dist/val/FilterFuncVal.js +0 -25
  149. package/dist/val/FilterFuncVal.js.map +1 -1
  150. package/dist/val/FuncBaseVal.d.ts +1 -0
  151. package/dist/val/FuncBaseVal.js +7 -127
  152. package/dist/val/FuncBaseVal.js.map +1 -1
  153. package/dist/val/GraphAtomVal.js +0 -15
  154. package/dist/val/GraphAtomVal.js.map +1 -1
  155. package/dist/val/HideFuncVal.js +0 -13
  156. package/dist/val/HideFuncVal.js.map +1 -1
  157. package/dist/val/IntegerVal.js +0 -61
  158. package/dist/val/IntegerVal.js.map +1 -1
  159. package/dist/val/JunctionVal.js +0 -20
  160. package/dist/val/JunctionVal.js.map +1 -1
  161. package/dist/val/KeyFuncVal.js +0 -46
  162. package/dist/val/KeyFuncVal.js.map +1 -1
  163. package/dist/val/ListVal.js +0 -57
  164. package/dist/val/ListVal.js.map +1 -1
  165. package/dist/val/LowerFuncVal.js +11 -6
  166. package/dist/val/LowerFuncVal.js.map +1 -1
  167. package/dist/val/MapVal.js +0 -151
  168. package/dist/val/MapVal.js.map +1 -1
  169. package/dist/val/MatchFuncVal.js +0 -27
  170. package/dist/val/MatchFuncVal.js.map +1 -1
  171. package/dist/val/{FormFuncVal.d.ts → MaybeFuncVal.d.ts} +5 -5
  172. package/dist/val/MaybeFuncVal.js +50 -0
  173. package/dist/val/MaybeFuncVal.js.map +1 -0
  174. package/dist/val/MoveFuncVal.js +0 -18
  175. package/dist/val/MoveFuncVal.js.map +1 -1
  176. package/dist/val/NilVal.js +2 -36
  177. package/dist/val/NilVal.js.map +1 -1
  178. package/dist/val/NomFuncVal.d.ts +12 -0
  179. package/dist/val/NomFuncVal.js +153 -0
  180. package/dist/val/NomFuncVal.js.map +1 -0
  181. package/dist/val/NumberVal.js +0 -15
  182. package/dist/val/NumberVal.js.map +1 -1
  183. package/dist/val/OpBaseVal.d.ts +1 -0
  184. package/dist/val/OpBaseVal.js +3 -15
  185. package/dist/val/OpBaseVal.js.map +1 -1
  186. package/dist/val/PackFuncVal.js +0 -34
  187. package/dist/val/PackFuncVal.js.map +1 -1
  188. package/dist/val/PathFuncVal.js +0 -6
  189. package/dist/val/PathFuncVal.js.map +1 -1
  190. package/dist/val/PathVal.js +0 -41
  191. package/dist/val/PathVal.js.map +1 -1
  192. package/dist/val/PlaceVal.js +0 -25
  193. package/dist/val/PlaceVal.js.map +1 -1
  194. package/dist/val/PlusOpVal.d.ts +1 -7
  195. package/dist/val/PlusOpVal.js +13 -74
  196. package/dist/val/PlusOpVal.js.map +1 -1
  197. package/dist/val/PrefFuncVal.js +0 -1
  198. package/dist/val/PrefFuncVal.js.map +1 -1
  199. package/dist/val/PrefVal.js +0 -167
  200. package/dist/val/PrefVal.js.map +1 -1
  201. package/dist/val/RecurseVal.js +0 -55
  202. package/dist/val/RecurseVal.js.map +1 -1
  203. package/dist/val/RefVal.js +0 -282
  204. package/dist/val/RefVal.js.map +1 -1
  205. package/dist/val/ReferFuncVal.js +0 -232
  206. package/dist/val/ReferFuncVal.js.map +1 -1
  207. package/dist/val/ScalarKindVal.js +0 -49
  208. package/dist/val/ScalarKindVal.js.map +1 -1
  209. package/dist/val/ScalarVal.js +0 -11
  210. package/dist/val/ScalarVal.js.map +1 -1
  211. package/dist/val/StrFuncVal.js +0 -18
  212. package/dist/val/StrFuncVal.js.map +1 -1
  213. package/dist/val/SuperFuncVal.js +0 -32
  214. package/dist/val/SuperFuncVal.js.map +1 -1
  215. package/dist/val/TopVal.js +0 -1
  216. package/dist/val/TopVal.js.map +1 -1
  217. package/dist/val/TranslateFuncVal.d.ts +12 -0
  218. package/dist/val/TranslateFuncVal.js +99 -0
  219. package/dist/val/TranslateFuncVal.js.map +1 -0
  220. package/dist/val/UpperFuncVal.js +11 -6
  221. package/dist/val/UpperFuncVal.js.map +1 -1
  222. package/dist/val/Val.d.ts +1 -0
  223. package/dist/val/Val.js +2 -133
  224. package/dist/val/Val.js.map +1 -1
  225. package/dist/val/VarVal.js +0 -12
  226. package/dist/val/VarVal.js.map +1 -1
  227. package/dist/val/arith.js +0 -37
  228. package/dist/val/arith.js.map +1 -1
  229. package/dist/val/caserange.d.ts +3 -0
  230. package/dist/val/caserange.js +49 -0
  231. package/dist/val/caserange.js.map +1 -0
  232. package/dist/val/members.js +0 -6
  233. package/dist/val/members.js.map +1 -1
  234. package/dist/val/numcmp.js +0 -11
  235. package/dist/val/numcmp.js.map +1 -1
  236. package/dist/val/numkind.js +0 -145
  237. package/dist/val/numkind.js.map +1 -1
  238. package/dist/val/valutil.js +0 -16
  239. package/dist/val/valutil.js.map +1 -1
  240. package/dist/vet.d.ts +12 -0
  241. package/dist/vet.js +159 -412
  242. package/dist/vet.js.map +1 -1
  243. package/dist/view.js +0 -414
  244. package/dist/view.js.map +1 -1
  245. package/dist/walk.js +0 -41
  246. package/dist/walk.js.map +1 -1
  247. package/grammar/aontu.abnf +9 -7
  248. package/grammar/aontu.gbnf +5 -5
  249. package/grammar/aontu.lark +5 -5
  250. package/grammar/aontu.tmLanguage.json +1 -1
  251. package/package.json +4 -2
  252. package/skill/SKILL.md +8 -0
  253. package/skill/init/check.sh +28 -0
  254. package/skill/init/data.aon +12 -0
  255. package/skill/init/model.aon +19 -0
  256. package/skill/tasks.md +151 -0
  257. package/src/agentsmd.ts +8 -32
  258. package/src/alias.ts +0 -39
  259. package/src/allow.ts +221 -0
  260. package/src/aontu.ts +10 -108
  261. package/src/aontumodel.ts +32 -0
  262. package/src/cli.ts +1009 -540
  263. package/src/ctx.ts +0 -103
  264. package/src/diff.ts +0 -40
  265. package/src/err.ts +0 -40
  266. package/src/escape.ts +0 -46
  267. package/src/exactjson.ts +0 -131
  268. package/src/format.ts +63 -234
  269. package/src/grammar.ts +72 -0
  270. package/src/graph.ts +0 -61
  271. package/src/hcanon.ts +0 -82
  272. package/src/helpdoc.ts +77 -0
  273. package/src/hints.ts +72 -49
  274. package/src/jsonschema.ts +0 -123
  275. package/src/keyorder.ts +0 -42
  276. package/src/lang.ts +39 -895
  277. package/src/lower.ts +15 -65
  278. package/src/lsp-server.ts +0 -16
  279. package/src/lsp.ts +12 -180
  280. package/src/mcp-server.ts +0 -31
  281. package/src/mcp.ts +0 -130
  282. package/src/mod-tool.ts +0 -158
  283. package/src/mod.ts +0 -178
  284. package/src/patch.ts +0 -232
  285. package/src/provenance.ts +0 -183
  286. package/src/query.ts +0 -84
  287. package/src/reach.ts +0 -53
  288. package/src/relation.ts +7 -71
  289. package/src/render.ts +33 -180
  290. package/src/report-sarif.ts +0 -48
  291. package/src/sig.ts +0 -35
  292. package/src/sigdecl.ts +1 -1
  293. package/src/siggate.ts +0 -30
  294. package/src/site.ts +3 -29
  295. package/src/subsume.ts +1 -161
  296. package/src/template.ts +69 -140
  297. package/src/trim.ts +0 -53
  298. package/src/type.ts +2 -45
  299. package/src/unify.ts +13 -251
  300. package/src/utility.ts +0 -31
  301. package/src/val/AbnfFuncVal.ts +181 -0
  302. package/src/val/AbsentVal.ts +54 -0
  303. package/src/val/AggFuncVal.ts +152 -188
  304. package/src/val/ArithFuncVal.ts +0 -20
  305. package/src/val/BagVal.ts +1 -78
  306. package/src/val/BigDecimalVal.ts +0 -16
  307. package/src/val/BigIntegerVal.ts +0 -16
  308. package/src/val/CloseFuncVal.ts +0 -9
  309. package/src/val/CmpFuncVal.ts +249 -0
  310. package/src/val/ConjunctVal.ts +0 -33
  311. package/src/val/ConstraintVal.ts +2 -537
  312. package/src/val/ContainerKindVal.ts +0 -18
  313. package/src/val/CopyFuncVal.ts +0 -5
  314. package/src/val/Decimal.ts +1 -185
  315. package/src/val/DeprecateFuncVal.ts +0 -10
  316. package/src/val/DisjunctVal.ts +0 -157
  317. package/src/val/EachFuncVal.ts +12 -53
  318. package/src/val/EmitFuncVal.ts +8 -208
  319. package/src/val/ExpectVal.ts +0 -62
  320. package/src/val/FilterFuncVal.ts +0 -55
  321. package/src/val/FuncBaseVal.ts +9 -130
  322. package/src/val/GraphAtomVal.ts +0 -42
  323. package/src/val/HideFuncVal.ts +0 -15
  324. package/src/val/IntegerVal.ts +0 -61
  325. package/src/val/JunctionVal.ts +0 -20
  326. package/src/val/KeyFuncVal.ts +0 -48
  327. package/src/val/ListVal.ts +0 -59
  328. package/src/val/LowerFuncVal.ts +12 -7
  329. package/src/val/MapVal.ts +0 -151
  330. package/src/val/MatchFuncVal.ts +0 -59
  331. package/src/val/MaybeFuncVal.ts +86 -0
  332. package/src/val/MoveFuncVal.ts +0 -20
  333. package/src/val/NilVal.ts +2 -36
  334. package/src/val/NomFuncVal.ts +200 -0
  335. package/src/val/NumberVal.ts +0 -16
  336. package/src/val/OpBaseVal.ts +4 -17
  337. package/src/val/PackFuncVal.ts +0 -63
  338. package/src/val/PathFuncVal.ts +0 -32
  339. package/src/val/PathVal.ts +0 -66
  340. package/src/val/PlaceVal.ts +0 -45
  341. package/src/val/PlusOpVal.ts +18 -75
  342. package/src/val/PrefFuncVal.ts +0 -1
  343. package/src/val/PrefVal.ts +0 -179
  344. package/src/val/RecurseVal.ts +0 -81
  345. package/src/val/RefVal.ts +1 -285
  346. package/src/val/ReferFuncVal.ts +0 -255
  347. package/src/val/ScalarKindVal.ts +0 -50
  348. package/src/val/ScalarVal.ts +0 -12
  349. package/src/val/StrFuncVal.ts +0 -44
  350. package/src/val/SuperFuncVal.ts +0 -42
  351. package/src/val/TopVal.ts +0 -1
  352. package/src/val/TranslateFuncVal.ts +132 -0
  353. package/src/val/UpperFuncVal.ts +12 -7
  354. package/src/val/Val.ts +3 -192
  355. package/src/val/VarVal.ts +0 -15
  356. package/src/val/arith.ts +0 -92
  357. package/src/val/caserange.ts +53 -0
  358. package/src/val/members.ts +0 -23
  359. package/src/val/numcmp.ts +1 -27
  360. package/src/val/numkind.ts +0 -149
  361. package/src/val/valutil.ts +0 -16
  362. package/src/vet.ts +209 -504
  363. package/src/view.ts +0 -507
  364. package/src/walk.ts +0 -41
  365. package/dist/std.d.ts +0 -3
  366. package/dist/std.js +0 -637
  367. package/dist/std.js.map +0 -1
  368. package/dist/val/FormFuncVal.js +0 -55
  369. package/dist/val/FormFuncVal.js.map +0 -1
  370. package/src/std.ts +0 -648
  371. package/src/val/FormFuncVal.ts +0 -119
@@ -21,18 +21,6 @@ import {
21
21
  } from '../utility'
22
22
 
23
23
 
24
- // The unbounded exact integer leaf of the number tower, reached only by
25
- // a `0d` literal with no fraction and no exponent (`0d5`, `-0d5`,
26
- // `0d123456789012345678901234567890`) or by direct construction.
27
- //
28
- // Its peg is a native bigint: exact at any magnitude, immutable, and
29
- // compared by VALUE with `===` (D2 -- two separately built bigints
30
- // holding the same number are `===`, which is exactly the property the
31
- // Go port has to reproduce by hand for `*big.Int`).
32
- //
33
- // `biginteger` is DISJOINT from `integer`: `5 & 0d5` is an error, since
34
- // a successful meet would have to pick one of the two kinds and either
35
- // choice makes `&` asymmetric in kind.
36
24
  class BigIntegerVal extends ScalarVal {
37
25
  isBigInteger = true
38
26
 
@@ -42,10 +30,6 @@ class BigIntegerVal extends ScalarVal {
42
30
  spec: ValSpec,
43
31
  ctx?: AontuContext
44
32
  ) {
45
- // Exact-input construction (D8): a bigint, or the digits as text. A
46
- // JS `number` is deliberately NOT accepted -- it has already been
47
- // rounded before this library could inspect it, so an exact value
48
- // above 2^53 could never arrive that way intact.
49
33
  let peg = spec.peg
50
34
  if ('string' === typeof peg) {
51
35
  if (!/^[-+]?[0-9]+$/.test(peg)) {
@@ -46,16 +46,7 @@ class CloseFuncVal extends FuncBaseVal {
46
46
  }
47
47
 
48
48
  if (argval.isMap || argval.isList) {
49
- // The in-place write is safe BECAUSE of the per-destination
50
- // instantiation rule (ADR-005): everywhere a close() call is
51
- // multiplied — a pack/each template, a spread constraint — the
52
- // clone now owns its argument (`dup`), so `closed` lands on that
53
- // instance alone. Cloning the bag here instead was tried and
54
- // rejected: the re-path it implies corrupts the source
55
- // attribution of children inside nested spread templates (the
56
- // 06-k8s use case's env findings named the wrong path).
57
49
  (argval as BagVal).closed = true
58
- // console.log('CLOSED', argval.canon)
59
50
  }
60
51
 
61
52
  return argval
@@ -0,0 +1,249 @@
1
+ /* Copyright (c) 2026 Richard Rodger, MIT License */
2
+
3
+
4
+ import type {
5
+ Val,
6
+ ValSpec,
7
+ } from '../type'
8
+
9
+ import {
10
+ AontuContext,
11
+ } from '../ctx'
12
+
13
+ import { makeNilErr } from '../err'
14
+
15
+ import { MapVal } from './MapVal'
16
+ import { ListVal } from './ListVal'
17
+ import { StringVal } from './StringVal'
18
+ import { FuncBaseVal } from './FuncBaseVal'
19
+
20
+
21
+ type CmpDef = {
22
+ cmp: string
23
+ // The children this component admits, by aontu function name. Empty
24
+ // means a leaf: any child at all is a mistake.
25
+ children: string[]
26
+ text?: string
27
+ // Whether that prop is required. `project`'s folder is the one that
28
+ // is not: Jostraca defaults it to `.`, and the data path must not be
29
+ // stricter than the component it drives.
30
+ req: boolean
31
+ // A prop that must be present and must be a list.
32
+ bag?: string
33
+ }
34
+
35
+ const CMP_DEF: Record<string, CmpDef> = {
36
+ // The output root. Its `folder` is refused an absolute path or a
37
+ // `..` segment on the Jostraca side, where the tree is data.
38
+ project: {
39
+ cmp: 'Project', text: 'folder', req: false,
40
+ children: ['project', 'folder', 'file', 'copyfiles'],
41
+ },
42
+ folder: {
43
+ cmp: 'Folder', text: 'name', req: true,
44
+ children: ['folder', 'file', 'copyfiles'],
45
+ },
46
+ file: {
47
+ cmp: 'File', text: 'name', req: true,
48
+ children: ['content', 'line', 'fragment', 'inject', 'listitems', 'copyfiles'],
49
+ },
50
+ content: {
51
+ cmp: 'Content', text: 'src', req: true,
52
+ children: [],
53
+ },
54
+ // A span with a newline added, which is the whole difference.
55
+ line: {
56
+ cmp: 'Line', text: 'src', req: true,
57
+ children: [],
58
+ },
59
+ // A file read from disk with its `<[SLOT]>` markers filled.
60
+ fragment: {
61
+ cmp: 'Fragment', text: 'from', req: true,
62
+ children: ['slot', 'content', 'line', 'listitems'],
63
+ },
64
+ slot: {
65
+ cmp: 'Slot', text: 'name', req: true,
66
+ children: ['content', 'line', 'fragment', 'listitems'],
67
+ },
68
+ // A body written between markers in a file that already exists.
69
+ inject: {
70
+ cmp: 'Inject', text: 'name', req: true,
71
+ children: ['content', 'line', 'listitems'],
72
+ },
73
+ // `Copy` under a name aontu has free: `copy` is taken by the builtin
74
+ // that copies a VALUE, and a file copy is a different verb.
75
+ copyfiles: {
76
+ cmp: 'CopyFiles', text: 'from', req: true,
77
+ children: [],
78
+ },
79
+ listitems: {
80
+ cmp: 'ListItems', req: true, bag: 'item',
81
+ children: ['content', 'line', 'fragment'],
82
+ },
83
+ }
84
+
85
+ const BY_CMP: Record<string, string> = {}
86
+ for (const fname of Object.keys(CMP_DEF)) {
87
+ BY_CMP[CMP_DEF[fname].cmp] = fname
88
+ }
89
+
90
+ function nodeCmp(v: any): string | undefined {
91
+ if (true !== v?.isMap) {
92
+ return undefined
93
+ }
94
+ const cmp: any = v.peg?.cmp
95
+ const name = (true === cmp?.isScalar && 'string' === typeof cmp.peg) ?
96
+ cmp.peg : undefined
97
+ // The node carries the JOSTRACA name; the grammar is written in aontu
98
+ // names, so read it back through the one table.
99
+ return (undefined === name) ? undefined : BY_CMP[name]
100
+ }
101
+
102
+
103
+ function propText(props: any, key: string): string | undefined {
104
+ const v: any = props?.peg?.[key]
105
+ return (true === v?.isScalar && 'string' === typeof v.peg) ? v.peg : undefined
106
+ }
107
+
108
+
109
+ class CmpFuncVal extends FuncBaseVal {
110
+ isCmpFunc = true
111
+
112
+ // The component this call builds: the function's own name, which is
113
+ // also the `cmp` key of the node and the Jostraca component the
114
+ // bridge looks up.
115
+ cmp: string
116
+
117
+ constructor(
118
+ cmp: string,
119
+ spec: ValSpec,
120
+ ctx?: AontuContext
121
+ ) {
122
+ super(spec, ctx)
123
+ this.cmp = cmp
124
+ }
125
+
126
+
127
+ funcname() {
128
+ return this.cmp
129
+ }
130
+
131
+
132
+ resolve(ctx: AontuContext, args: Val[]): Val {
133
+ const def: CmpDef = CMP_DEF[this.cmp]
134
+
135
+ // Arity is checked at parse (funcArity); args[0] can be undefined.
136
+ const spec: any = args[0]
137
+ let props: Val
138
+ if (undefined === spec) {
139
+ props = new MapVal({ peg: {} }, ctx)
140
+ }
141
+ else if (true === spec?.isScalar && 'string' === typeof spec.peg) {
142
+ if (undefined === def.text) {
143
+ return makeNilErr(ctx, 'invalid-arg', this, spec, 'spec')
144
+ }
145
+ props = new MapVal({ peg: { [def.text]: spec } }, ctx)
146
+ }
147
+ else if (true === spec?.isMap) {
148
+ props = spec
149
+ }
150
+ else {
151
+ return makeNilErr(ctx, 'invalid-arg', this, spec, 'spec')
152
+ }
153
+
154
+ if (undefined !== def.text) {
155
+ const text = propText(props, def.text)
156
+ if (def.req && (undefined === text || '' === text)) {
157
+ return makeNilErr(ctx, 'invalid-arg', this, props, def.text)
158
+ }
159
+ if (!def.req && undefined !== (props as any).peg?.[def.text] &&
160
+ undefined === text) {
161
+ return makeNilErr(ctx, 'invalid-arg', this, props, def.text)
162
+ }
163
+ }
164
+
165
+ // A bag prop is required and must be a list: `listitems` with no
166
+ // `item` renders nothing, silently, which is the failure a data
167
+ // path must not have.
168
+ if (undefined !== def.bag) {
169
+ const bag: any = (props as any).peg?.[def.bag]
170
+ if (true !== bag?.isList) {
171
+ return makeNilErr(ctx, 'invalid-arg', this, props, def.bag)
172
+ }
173
+ }
174
+
175
+ const kids: any = args[1]
176
+ let children: Val
177
+ if (undefined === kids) {
178
+ children = new ListVal({ peg: [] }, ctx)
179
+ }
180
+ else if (true === kids?.isList) {
181
+ const flat: Val[] = []
182
+ const splice = (list: Val[]): Val | undefined => {
183
+ for (const kid of list) {
184
+ if (true === (kid as any)?.isList) {
185
+ const bad = splice((kid as any).peg as Val[])
186
+ if (undefined !== bad) {
187
+ return bad
188
+ }
189
+ continue
190
+ }
191
+ const kcmp = nodeCmp(kid)
192
+ if (undefined === kcmp || !def.children.includes(kcmp)) {
193
+ return kid
194
+ }
195
+ flat.push(kid)
196
+ }
197
+ return undefined
198
+ }
199
+ const bad = splice(kids.peg as Val[])
200
+ if (undefined !== bad) {
201
+ return makeNilErr(ctx, 'invalid-arg', this, bad, 'children')
202
+ }
203
+ children = new ListVal({ peg: flat }, ctx)
204
+ }
205
+ else {
206
+ return makeNilErr(ctx, 'invalid-arg', this, kids, 'children')
207
+ }
208
+
209
+ const node = new MapVal({
210
+ peg: {
211
+ cmp: new StringVal({ peg: def.cmp }, ctx),
212
+ props,
213
+ children,
214
+ }
215
+ }, ctx)
216
+
217
+ node.closed = true
218
+
219
+ return this.place(node)
220
+ }
221
+
222
+ } /* node:coverage ignore next 3 */
223
+
224
+
225
+ function cmpFuncClass(fname: string): any {
226
+ class Cmp extends CmpFuncVal {
227
+ constructor(spec: ValSpec, ctx?: AontuContext) {
228
+ super(fname, spec, ctx)
229
+ }
230
+
231
+ make(_ctx: AontuContext, spec: ValSpec): Val {
232
+ return new Cmp(spec)
233
+ }
234
+ }
235
+ return Cmp
236
+ }
237
+
238
+
239
+ const CMP_FUNCS: Record<string, any> = {}
240
+ for (const fname of Object.keys(CMP_DEF)) {
241
+ CMP_FUNCS[fname] = cmpFuncClass(fname)
242
+ } /* node:coverage ignore next 7 */
243
+
244
+
245
+ export {
246
+ CMP_DEF,
247
+ CMP_FUNCS,
248
+ CmpFuncVal,
249
+ }
@@ -1,7 +1,6 @@
1
1
  /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
2
 
3
3
 
4
-
5
4
  import type {
6
5
  Val,
7
6
  ValSpec,
@@ -32,14 +31,11 @@ import {
32
31
  } from '../utility'
33
32
 
34
33
 
35
-
36
34
  import {
37
35
  top
38
36
  } from './top'
39
37
 
40
38
 
41
-
42
- // TODO: move main logic to op/conjunct
43
39
  class ConjunctVal extends JunctionVal {
44
40
  isConjunct = true
45
41
  isGenable = true
@@ -78,7 +74,6 @@ class ConjunctVal extends JunctionVal {
78
74
 
79
75
  this.peg = norm(this.peg)
80
76
 
81
- // console.log('\nCONJUNCT', ctx.cc, this.id, this.canon, peer.id, peer.canon)
82
77
 
83
78
  // Unify each term of conjunct against peer
84
79
  let upeer: Val[] = []
@@ -87,7 +82,6 @@ class ConjunctVal extends JunctionVal {
87
82
  let newhide = this.mark.hide || peer.mark.hide
88
83
 
89
84
  for (let vI = 0; vI < this.peg.length; vI++) {
90
- // console.log('CONJUNCT-peg', vI, this.peg[vI].canon, this.peg[vI].mark)
91
85
  newtype = this.peg[vI].mark.type || newtype
92
86
  newhide = this.peg[vI].mark.hide || newhide
93
87
  }
@@ -95,7 +89,6 @@ class ConjunctVal extends JunctionVal {
95
89
  for (let vI = 0; vI < this.peg.length; vI++) {
96
90
  this.peg[vI].mark.type = newtype
97
91
  this.peg[vI].mark.hide = newhide
98
- // console.log('CONJUNCT-TERM', this.id, vI, this.peg[vI].canon)
99
92
 
100
93
  upeer[vI] = (this.peg[vI].done && peer.isTop) ? this.peg[vI] :
101
94
  unite(te ? ctx.clone({ explain: ec(te, 'OWN') }) : ctx, this.peg[vI], peer, 'cj-own')
@@ -103,17 +96,10 @@ class ConjunctVal extends JunctionVal {
103
96
  upeer[vI].mark.type = newtype = newtype || upeer[vI].mark.type
104
97
  upeer[vI].mark.hide = newhide = newhide || upeer[vI].mark.hide
105
98
 
106
- // let prevdone = done
107
99
  done = done && (DONE === upeer[vI].dc)
108
100
 
109
101
  if (upeer[vI].isNil) {
110
102
  return upeer[vI]
111
- // return Nil.make(
112
- // ctx,
113
- // '&peer[' + upeer[vI].canon + ',' + peer.canon + ']',
114
- // this.peg[vI],
115
- // peer
116
- // )
117
103
  }
118
104
  }
119
105
 
@@ -155,7 +141,6 @@ class ConjunctVal extends JunctionVal {
155
141
 
156
142
  else {
157
143
  val = unite(te ? ctx.clone({ explain: ec(te, 'DEF') }) : ctx, t0, t1, 'cj-peer-t0t1')
158
- // console.log('CONJUNCT-T', t0.canon, t1?.canon, '->', val.canon)
159
144
  done = done && DONE === val.dc
160
145
  newtype = this.mark.type || val.mark.type
161
146
  newhide = this.mark.hide || val.mark.hide
@@ -184,7 +169,6 @@ class ConjunctVal extends JunctionVal {
184
169
  out = top()
185
170
  }
186
171
 
187
- // TODO: corrects CV[CV[1&/x]] issue above, but swaps term order!
188
172
  else if (1 === outvals.length) {
189
173
  out = outvals[0]
190
174
  out.mark.type = newtype
@@ -196,7 +180,6 @@ class ConjunctVal extends JunctionVal {
196
180
 
197
181
  out.dc = done ? DONE : this.dc + 1
198
182
 
199
- // console.log('CONJUNCT-unify', this.id, sc, pc, '->', out.canon, 'D=' + out.dc, 'E=', this.err)
200
183
 
201
184
  explainClose(te, out)
202
185
 
@@ -216,19 +199,6 @@ class ConjunctVal extends JunctionVal {
216
199
 
217
200
 
218
201
  gen(ctx?: AontuContext) {
219
- // A RESIDUATED SIZING ATOM DECIDES HERE (the review's finding C,
220
- // use-cases/BUGS.md §16). `length`/`unique` over a container keep
221
- // the readings that MORE MEMBERS COULD STILL CHANGE -- an upper
222
- // bound satisfied, a lower bound violated, distinctness so far --
223
- // rather than deciding against whatever the container held when it
224
- // first settled (ConstraintVal.admitContainer). Generation is where
225
- // no more members can arrive, so it is where the provisional
226
- // reading becomes the verdict: the container generates if the atom
227
- // is satisfied, and the atom's OWN refusal is raised if it is not.
228
- //
229
- // Without this the conjunct would report `conjunct` for a document
230
- // whose only fault is a length -- the constraint's message is the
231
- // one the author needs.
232
202
  const residue = sizingResidue(this)
233
203
  if (undefined !== residue) {
234
204
  const settled: any = residue.con.settleContainer(residue.bag, ctx)
@@ -243,13 +213,11 @@ class ConjunctVal extends JunctionVal {
243
213
  undefined
244
214
  )
245
215
 
246
- // TODO: refactor to use Site
247
216
  nil.path = this.path
248
217
  nil.site.url = this.site.url
249
218
  nil.site.row = this.site.row
250
219
  nil.site.col = this.site.col
251
220
 
252
- // descErr(nil, ctx)
253
221
 
254
222
  if (null == ctx) {
255
223
  throw new AontuError(nil.msg)
@@ -260,7 +228,6 @@ class ConjunctVal extends JunctionVal {
260
228
  }
261
229
 
262
230
 
263
-
264
231
  // Normalize Conjunct:
265
232
  // - flatten child conjuncts
266
233
  // - consistent sorting of terms