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,158 @@
1
+ /* Copyright (c) 2025 Richard Rodger, MIT License */
2
+
3
+ // CONTAINER KINDS (docs/design/PATHS.0.md). `{}` and `[]` are the
4
+ // container UNITS: they admit any map (or list) AND generate empty
5
+ // when nothing arrives. `map()` and `list()` are the container KINDS
6
+ // proper: they admit exactly the same values and default to NOTHING,
7
+ // as `string` does -- the spelling of "this must be a map, and it
8
+ // must be supplied", which the unit cannot say because an unmet unit
9
+ // silently manufactures its empty value.
10
+ //
11
+ // The vacuous call is the kind; the literal is the unit. That is the
12
+ // whole convention, and it is why neither function takes arguments:
13
+ // element constraints already belong to the spreads (`{&: V}`,
14
+ // `[&: V]`), and a second spelling of them here would drift.
15
+ //
16
+ // No null/top/nil arms, as RelVal records: unite's dispatch ladder
17
+ // absorbs those peers before any Val's own unify is consulted, and
18
+ // FuncBaseVal returns a done resolution directly against a top peer.
19
+
20
+ import type {
21
+ Val,
22
+ ValSpec,
23
+ } from '../type'
24
+
25
+ import {
26
+ DONE,
27
+ } from '../type'
28
+
29
+ import {
30
+ AontuContext,
31
+ } from '../ctx'
32
+
33
+ import { makeNilErr } from '../err'
34
+
35
+ import { FeatureVal } from './FeatureVal'
36
+ import { FuncBaseVal } from './FuncBaseVal'
37
+
38
+
39
+ class MapKindVal extends FeatureVal {
40
+ isContainerKind = true
41
+ isMapKind = true
42
+
43
+ constructor(spec: ValSpec, ctx?: AontuContext) {
44
+ super(spec, ctx)
45
+ this.dc = DONE
46
+ }
47
+
48
+ unify(peer: Val, ctx: AontuContext): Val {
49
+ const p: any = peer
50
+ if (true === p.isMap) {
51
+ return peer
52
+ }
53
+ if (true === p.isMapKind) {
54
+ return this
55
+ }
56
+ // The unit's own refusal code: a kind mismatch here is the same
57
+ // fact `{} & 1` reports, and two codes for one fact would drift.
58
+ return makeNilErr(ctx, 'map', this, peer)
59
+ }
60
+
61
+ get canon() {
62
+ return 'map()'
63
+ }
64
+
65
+ same(peer: any): boolean {
66
+ return true === peer?.isMapKind
67
+ }
68
+
69
+ } /* node:coverage ignore next 4 */
70
+
71
+
72
+ class ListKindVal extends FeatureVal {
73
+ isContainerKind = true
74
+ isListKind = true
75
+
76
+ constructor(spec: ValSpec, ctx?: AontuContext) {
77
+ super(spec, ctx)
78
+ this.dc = DONE
79
+ }
80
+
81
+ unify(peer: Val, ctx: AontuContext): Val {
82
+ const p: any = peer
83
+ if (true === p.isList) {
84
+ return peer
85
+ }
86
+ if (true === p.isListKind) {
87
+ return this
88
+ }
89
+ return makeNilErr(ctx, 'list', this, peer)
90
+ }
91
+
92
+ get canon() {
93
+ return 'list()'
94
+ }
95
+
96
+ same(peer: any): boolean {
97
+ return true === peer?.isListKind
98
+ }
99
+
100
+ } /* node:coverage ignore next 4 */
101
+
102
+
103
+ class MapFuncVal extends FuncBaseVal {
104
+ isMapFunc = true
105
+
106
+ constructor(spec: ValSpec, ctx?: AontuContext) {
107
+ super(spec, ctx)
108
+ }
109
+
110
+ make(_ctx: AontuContext, spec: ValSpec): Val {
111
+ return new MapFuncVal(spec)
112
+ }
113
+
114
+ funcname() {
115
+ return 'map'
116
+ }
117
+
118
+ resolve(ctx: AontuContext, _args: Val[]) {
119
+ const out = new MapKindVal({}, ctx)
120
+ out.site = this.site
121
+ out.path = this.path
122
+ return out
123
+ }
124
+
125
+ } /* node:coverage ignore next 4 */
126
+
127
+
128
+ class ListFuncVal extends FuncBaseVal {
129
+ isListFunc = true
130
+
131
+ constructor(spec: ValSpec, ctx?: AontuContext) {
132
+ super(spec, ctx)
133
+ }
134
+
135
+ make(_ctx: AontuContext, spec: ValSpec): Val {
136
+ return new ListFuncVal(spec)
137
+ }
138
+
139
+ funcname() {
140
+ return 'list'
141
+ }
142
+
143
+ resolve(ctx: AontuContext, _args: Val[]) {
144
+ const out = new ListKindVal({}, ctx)
145
+ out.site = this.site
146
+ out.path = this.path
147
+ return out
148
+ }
149
+
150
+ } /* node:coverage ignore next 8 */
151
+
152
+
153
+ export {
154
+ MapKindVal,
155
+ ListKindVal,
156
+ MapFuncVal,
157
+ ListFuncVal,
158
+ }
@@ -13,7 +13,6 @@ import {
13
13
 
14
14
  import { makeNilErr } from '../err'
15
15
 
16
- import { NilVal } from '../val/NilVal'
17
16
 
18
17
 
19
18
  import {
@@ -176,6 +176,21 @@ class Decimal {
176
176
  }
177
177
 
178
178
 
179
+ // D6 -- EXACT MULTIPLICATION. Multiply the coefficients, ADD the
180
+ // scales: (a/10^s)(b/10^t) is ab/10^(s+t), with no alignment step and
181
+ // no rounding mode, exactly as add() has none.
182
+ //
183
+ // The result leaves the budget far more readily than a sum does --
184
+ // scales add rather than taking the maximum, and coefficient digits
185
+ // add too -- so squaring a value at half the budget is already over
186
+ // it. Every caller must test with decimalOverBudget() and report
187
+ // `decimal_budget`, for the same reason add()'s callers must: at the
188
+ // limit, refusing is the only answer that is not a rounded one.
189
+ multiply(peer: Decimal): Decimal {
190
+ return new Decimal(this.unscaled * peer.unscaled, this.scale + peer.scale)
191
+ }
192
+
193
+
179
194
  // Exact ceiling and floor, for `upper()`/`lower()`. Coefficient
180
195
  // arithmetic only -- Math.ceil of this value would mean rounding it to
181
196
  // binary64 first, which for a leaf that exists to escape binary64 is
@@ -0,0 +1,84 @@
1
+ /* Copyright (c) 2025 Richard Rodger, MIT License */
2
+
3
+ // The deprecation mark (G3 phase 4,
4
+ // docs/capability-review/g3-subsumption-evolution.md): a function-form
5
+ // builtin, `deprecate(x, m)`, that unifies EXACTLY as `x` while the
6
+ // record `m` rides the result through meets. The record's keys are
7
+ // msg, use and since — all optional, all strings; `use` is a path
8
+ // spelled as a STRING, because a live reference would resolve and
9
+ // unify, which is not wanted. Boolean ValMarks cannot hold a record,
10
+ // so the Val carries one optional field (Val.deprecation), propagated
11
+ // by the same channel as the marks (propagateMarks) and rendered back
12
+ // reparseably by canon (canonRiders).
13
+
14
+ import type {
15
+ Val,
16
+ ValSpec,
17
+ } from '../type'
18
+
19
+ import {
20
+ AontuContext,
21
+ } from '../ctx'
22
+
23
+ import { makeNilErr } from '../err'
24
+
25
+ import { FuncBaseVal } from './FuncBaseVal'
26
+
27
+
28
+ // The record's whole vocabulary. Other keys are DROPPED, not carried:
29
+ // the record is a contract the tooling reads (vet, the LSP tag, the
30
+ // breaking downgrade), and a bag of free-form keys would be a second,
31
+ // unspecified metadata channel.
32
+ const DEPRECATION_KEYS = ['msg', 'use', 'since']
33
+
34
+
35
+ class DeprecateFuncVal extends FuncBaseVal {
36
+ isDeprecateFunc = true
37
+
38
+ constructor(
39
+ spec: ValSpec,
40
+ ctx?: AontuContext
41
+ ) {
42
+ super(spec, ctx)
43
+ }
44
+
45
+ make(_ctx: AontuContext, spec: ValSpec): Val {
46
+ return new DeprecateFuncVal(spec)
47
+ }
48
+
49
+ funcname() {
50
+ return 'deprecate'
51
+ }
52
+
53
+ resolve(ctx: AontuContext, args: Val[]) {
54
+ let out = args[0] ?? makeNilErr(ctx, 'arg', this)
55
+
56
+ // A nil ARGUMENT is returned unchanged, never marked: marking it
57
+ // makes the bag's marked-child skip drop it (the type()/hide()
58
+ // lesson — refusal over corruption, D7).
59
+ if (out.isNil) {
60
+ return out
61
+ }
62
+
63
+ out = out.clone(ctx)
64
+
65
+ const record: Record<string, string> = {}
66
+ const m: any = args[1]
67
+ if (true === m?.isMap && null != m.peg) {
68
+ for (const key of DEPRECATION_KEYS) {
69
+ const v = m.peg[key]
70
+ if (true === v?.isScalar && 'string' === typeof v.peg) {
71
+ record[key] = v.peg
72
+ }
73
+ }
74
+ }
75
+ out.deprecation = record
76
+
77
+ return out
78
+ }
79
+ } /* node:coverage ignore next 6 */
80
+
81
+
82
+ export {
83
+ DeprecateFuncVal,
84
+ }