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.
- package/README.md +88 -0
- package/bin/aontu-mcp.js +4 -0
- package/dist/agentsmd.d.ts +16 -0
- package/dist/agentsmd.js +107 -0
- package/dist/agentsmd.js.map +1 -0
- package/dist/aontu.d.ts +15 -3
- package/dist/aontu.js +126 -5
- package/dist/aontu.js.map +1 -1
- package/dist/cli.d.ts +45 -1
- package/dist/cli.js +2845 -69
- package/dist/cli.js.map +1 -1
- package/dist/ctx.d.ts +18 -0
- package/dist/ctx.js +44 -0
- package/dist/ctx.js.map +1 -1
- package/dist/diff.d.ts +22 -0
- package/dist/diff.js +141 -0
- package/dist/diff.js.map +1 -0
- package/dist/err.d.ts +3 -1
- package/dist/err.js +45 -8
- package/dist/err.js.map +1 -1
- package/dist/graph.d.ts +13 -0
- package/dist/graph.js +110 -0
- package/dist/graph.js.map +1 -0
- package/dist/hcanon.d.ts +3 -0
- package/dist/hcanon.js +145 -0
- package/dist/hcanon.js.map +1 -0
- package/dist/hints.js +235 -8
- package/dist/hints.js.map +1 -1
- package/dist/jsonschema.d.ts +20 -0
- package/dist/jsonschema.js +425 -0
- package/dist/jsonschema.js.map +1 -0
- package/dist/lang.js +955 -110
- package/dist/lang.js.map +1 -1
- package/dist/lsp.d.ts +9 -2
- package/dist/lsp.js +343 -48
- package/dist/lsp.js.map +1 -1
- package/dist/mcp-server.d.ts +20 -0
- package/dist/mcp-server.js +147 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp.d.ts +42 -0
- package/dist/mcp.js +941 -0
- package/dist/mcp.js.map +1 -0
- package/dist/mod-tool.d.ts +58 -0
- package/dist/mod-tool.js +532 -0
- package/dist/mod-tool.js.map +1 -0
- package/dist/mod.d.ts +35 -0
- package/dist/mod.js +345 -0
- package/dist/mod.js.map +1 -0
- package/dist/patch.d.ts +49 -0
- package/dist/patch.js +506 -0
- package/dist/patch.js.map +1 -0
- package/dist/provenance.d.ts +41 -0
- package/dist/provenance.js +336 -0
- package/dist/provenance.js.map +1 -0
- package/dist/query.d.ts +27 -0
- package/dist/query.js +294 -0
- package/dist/query.js.map +1 -0
- package/dist/reach.d.ts +15 -0
- package/dist/reach.js +168 -0
- package/dist/reach.js.map +1 -0
- package/dist/relation.d.ts +23 -0
- package/dist/relation.js +230 -0
- package/dist/relation.js.map +1 -0
- package/dist/report-sarif.d.ts +14 -0
- package/dist/report-sarif.js +102 -0
- package/dist/report-sarif.js.map +1 -0
- package/dist/sig.d.ts +25 -0
- package/dist/sig.js +277 -0
- package/dist/sig.js.map +1 -0
- package/dist/sigdecl.d.ts +2 -0
- package/dist/sigdecl.js +11 -0
- package/dist/sigdecl.js.map +1 -0
- package/dist/siggate.d.ts +4 -0
- package/dist/siggate.js +90 -0
- package/dist/siggate.js.map +1 -0
- package/dist/site.d.ts +4 -0
- package/dist/site.js +31 -0
- package/dist/site.js.map +1 -1
- package/dist/std.d.ts +1 -0
- package/dist/std.js +129 -0
- package/dist/std.js.map +1 -0
- package/dist/subsume.d.ts +39 -0
- package/dist/subsume.js +573 -0
- package/dist/subsume.js.map +1 -0
- package/dist/trim.d.ts +19 -0
- package/dist/trim.js +155 -0
- package/dist/trim.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.d.ts +17 -1
- package/dist/type.js.map +1 -1
- package/dist/unify.d.ts +2 -1
- package/dist/unify.js +234 -38
- package/dist/unify.js.map +1 -1
- package/dist/utility.d.ts +8 -1
- package/dist/utility.js +68 -1
- package/dist/utility.js.map +1 -1
- package/dist/val/AggFuncVal.d.ts +44 -0
- package/dist/val/AggFuncVal.js +364 -0
- package/dist/val/AggFuncVal.js.map +1 -0
- package/dist/val/ArithFuncVal.d.ts +31 -0
- package/dist/val/ArithFuncVal.js +62 -0
- package/dist/val/ArithFuncVal.js.map +1 -0
- package/dist/val/BagVal.d.ts +7 -0
- package/dist/val/BagVal.js +150 -11
- package/dist/val/BagVal.js.map +1 -1
- package/dist/val/CloseFuncVal.js +9 -1
- package/dist/val/CloseFuncVal.js.map +1 -1
- package/dist/val/ConjunctVal.d.ts +1 -1
- package/dist/val/ConjunctVal.js +19 -0
- package/dist/val/ConjunctVal.js.map +1 -1
- package/dist/val/ConstraintVal.d.ts +7 -1
- package/dist/val/ConstraintVal.js +523 -45
- package/dist/val/ConstraintVal.js.map +1 -1
- package/dist/val/ContainerKindVal.d.ts +35 -0
- package/dist/val/ContainerKindVal.js +99 -0
- package/dist/val/ContainerKindVal.js.map +1 -0
- package/dist/val/CopyFuncVal.d.ts +1 -2
- package/dist/val/CopyFuncVal.js.map +1 -1
- package/dist/val/Decimal.d.ts +1 -0
- package/dist/val/Decimal.js +13 -0
- package/dist/val/Decimal.js.map +1 -1
- package/dist/val/DeprecateFuncVal.d.ts +11 -0
- package/dist/val/DeprecateFuncVal.js +47 -0
- package/dist/val/DeprecateFuncVal.js.map +1 -0
- package/dist/val/DisjunctVal.d.ts +1 -2
- package/dist/val/DisjunctVal.js +269 -53
- package/dist/val/DisjunctVal.js.map +1 -1
- package/dist/val/EachFuncVal.d.ts +15 -0
- package/dist/val/EachFuncVal.js +75 -0
- package/dist/val/EachFuncVal.js.map +1 -0
- package/dist/val/ExpectVal.js +62 -4
- package/dist/val/ExpectVal.js.map +1 -1
- package/dist/val/FeatureVal.js +1 -1
- package/dist/val/FeatureVal.js.map +1 -1
- package/dist/val/FilterFuncVal.d.ts +15 -0
- package/dist/val/FilterFuncVal.js +91 -0
- package/dist/val/FilterFuncVal.js.map +1 -0
- package/dist/val/FuncBaseVal.d.ts +7 -1
- package/dist/val/FuncBaseVal.js +183 -2
- package/dist/val/FuncBaseVal.js.map +1 -1
- package/dist/val/GraphAtomVal.d.ts +39 -0
- package/dist/val/GraphAtomVal.js +184 -0
- package/dist/val/GraphAtomVal.js.map +1 -0
- package/dist/val/HideFuncVal.js.map +1 -1
- package/dist/val/JunctionVal.js +24 -1
- package/dist/val/JunctionVal.js.map +1 -1
- package/dist/val/KeyFuncVal.d.ts +1 -1
- package/dist/val/KeyFuncVal.js +38 -30
- package/dist/val/KeyFuncVal.js.map +1 -1
- package/dist/val/ListVal.js +94 -14
- package/dist/val/ListVal.js.map +1 -1
- package/dist/val/LowerFuncVal.js.map +1 -1
- package/dist/val/MapVal.d.ts +1 -0
- package/dist/val/MapVal.js +146 -14
- package/dist/val/MapVal.js.map +1 -1
- package/dist/val/MatchFuncVal.d.ts +15 -0
- package/dist/val/MatchFuncVal.js +107 -0
- package/dist/val/MatchFuncVal.js.map +1 -0
- package/dist/val/MoveFuncVal.js.map +1 -1
- package/dist/val/NilVal.js +24 -0
- package/dist/val/NilVal.js.map +1 -1
- package/dist/val/OpBaseVal.d.ts +1 -1
- package/dist/val/OpBaseVal.js +19 -1
- package/dist/val/OpBaseVal.js.map +1 -1
- package/dist/val/OpenFuncVal.js +4 -1
- package/dist/val/OpenFuncVal.js.map +1 -1
- package/dist/val/PackFuncVal.d.ts +15 -0
- package/dist/val/PackFuncVal.js +108 -0
- package/dist/val/PackFuncVal.js.map +1 -0
- package/dist/val/PathFuncVal.d.ts +2 -2
- package/dist/val/PathFuncVal.js +75 -16
- package/dist/val/PathFuncVal.js.map +1 -1
- package/dist/val/PathVal.d.ts +25 -0
- package/dist/val/PathVal.js +150 -0
- package/dist/val/PathVal.js.map +1 -0
- package/dist/val/PlaceVal.d.ts +13 -0
- package/dist/val/PlaceVal.js +131 -0
- package/dist/val/PlaceVal.js.map +1 -0
- package/dist/val/PlusOpVal.d.ts +2 -1
- package/dist/val/PlusOpVal.js +61 -37
- package/dist/val/PlusOpVal.js.map +1 -1
- package/dist/val/PrefFuncVal.js.map +1 -1
- package/dist/val/PrefVal.d.ts +4 -2
- package/dist/val/PrefVal.js +223 -41
- package/dist/val/PrefVal.js.map +1 -1
- package/dist/val/RecurseVal.d.ts +19 -0
- package/dist/val/RecurseVal.js +217 -0
- package/dist/val/RecurseVal.js.map +1 -0
- package/dist/val/RefVal.d.ts +3 -2
- package/dist/val/RefVal.js +181 -66
- package/dist/val/RefVal.js.map +1 -1
- package/dist/val/ReferFuncVal.d.ts +59 -0
- package/dist/val/ReferFuncVal.js +604 -0
- package/dist/val/ReferFuncVal.js.map +1 -0
- package/dist/val/ScalarKindVal.d.ts +4 -3
- package/dist/val/ScalarKindVal.js +12 -12
- package/dist/val/ScalarKindVal.js.map +1 -1
- package/dist/val/SuperFuncVal.d.ts +4 -2
- package/dist/val/SuperFuncVal.js +118 -14
- package/dist/val/SuperFuncVal.js.map +1 -1
- package/dist/val/TopVal.d.ts +1 -1
- package/dist/val/TopVal.js.map +1 -1
- package/dist/val/TypeFuncVal.js.map +1 -1
- package/dist/val/UpperFuncVal.js.map +1 -1
- package/dist/val/Val.d.ts +7 -1
- package/dist/val/Val.js +170 -2
- package/dist/val/Val.js.map +1 -1
- package/dist/val/VarVal.js.map +1 -1
- package/dist/val/arith.d.ts +6 -0
- package/dist/val/arith.js +173 -0
- package/dist/val/arith.js.map +1 -0
- package/dist/vet.d.ts +45 -0
- package/dist/vet.js +802 -0
- package/dist/vet.js.map +1 -0
- package/dist/view.d.ts +85 -0
- package/dist/view.js +1948 -0
- package/dist/view.js.map +1 -0
- package/dist/walk.d.ts +2 -0
- package/dist/walk.js +91 -0
- package/dist/walk.js.map +1 -0
- package/grammar/aontu.gbnf +138 -0
- package/grammar/aontu.lark +118 -0
- package/grammar/aontu.tmLanguage.json +184 -0
- package/package.json +30 -8
- package/skill/SKILL.md +37 -0
- package/skill/error-codes.md +62 -0
- package/skill/examples.md +99 -0
- package/skill/grammar-card.md +56 -0
- package/src/agentsmd.ts +135 -0
- package/src/aontu.ts +166 -5
- package/src/cli.ts +3324 -72
- package/src/ctx.ts +93 -1
- package/src/diff.ts +198 -0
- package/src/err.ts +50 -8
- package/src/graph.ts +185 -0
- package/src/hcanon.ts +167 -0
- package/src/hints.ts +291 -8
- package/src/jsonschema.ts +552 -0
- package/src/lang.ts +1049 -110
- package/src/lsp.ts +351 -49
- package/src/mcp-server.ts +187 -0
- package/src/mcp.ts +1130 -0
- package/src/mod-tool.ts +718 -0
- package/src/mod.ts +453 -0
- package/src/patch.ts +628 -0
- package/src/provenance.ts +437 -0
- package/src/query.ts +381 -0
- package/src/reach.ts +213 -0
- package/src/relation.ts +298 -0
- package/src/report-sarif.ts +137 -0
- package/src/sig.ts +345 -0
- package/src/sigdecl.ts +11 -0
- package/src/siggate.ts +144 -0
- package/src/site.ts +36 -1
- package/src/std.ts +131 -0
- package/src/subsume.ts +739 -0
- package/src/trim.ts +195 -0
- package/src/tsconfig.json +10 -4
- package/src/type.ts +51 -2
- package/src/unify.ts +253 -38
- package/src/utility.ts +79 -1
- package/src/val/AggFuncVal.ts +546 -0
- package/src/val/ArithFuncVal.ts +108 -0
- package/src/val/BagVal.ts +158 -12
- package/src/val/CloseFuncVal.ts +9 -1
- package/src/val/ConjunctVal.ts +20 -0
- package/src/val/ConstraintVal.ts +576 -48
- package/src/val/ContainerKindVal.ts +158 -0
- package/src/val/CopyFuncVal.ts +0 -1
- package/src/val/Decimal.ts +15 -0
- package/src/val/DeprecateFuncVal.ts +84 -0
- package/src/val/DisjunctVal.ts +282 -59
- package/src/val/EachFuncVal.ts +133 -0
- package/src/val/ExpectVal.ts +65 -8
- package/src/val/FeatureVal.ts +1 -1
- package/src/val/FilterFuncVal.ts +154 -0
- package/src/val/FuncBaseVal.ts +206 -2
- package/src/val/GraphAtomVal.ts +264 -0
- package/src/val/HideFuncVal.ts +0 -2
- package/src/val/JunctionVal.ts +24 -1
- package/src/val/KeyFuncVal.ts +39 -35
- package/src/val/ListVal.ts +101 -15
- package/src/val/LowerFuncVal.ts +0 -1
- package/src/val/MapVal.ts +153 -14
- package/src/val/MatchFuncVal.ts +176 -0
- package/src/val/MoveFuncVal.ts +0 -2
- package/src/val/NilVal.ts +25 -0
- package/src/val/OpBaseVal.ts +20 -1
- package/src/val/OpenFuncVal.ts +4 -2
- package/src/val/PackFuncVal.ts +175 -0
- package/src/val/PathFuncVal.ts +107 -20
- package/src/val/PathVal.ts +221 -0
- package/src/val/PlaceVal.ts +193 -0
- package/src/val/PlusOpVal.ts +67 -39
- package/src/val/PrefFuncVal.ts +0 -1
- package/src/val/PrefVal.ts +251 -60
- package/src/val/RecurseVal.ts +285 -0
- package/src/val/RefVal.ts +183 -78
- package/src/val/ReferFuncVal.ts +732 -0
- package/src/val/ScalarKindVal.ts +12 -13
- package/src/val/SuperFuncVal.ts +137 -13
- package/src/val/TopVal.ts +1 -2
- package/src/val/TypeFuncVal.ts +0 -2
- package/src/val/UpperFuncVal.ts +0 -1
- package/src/val/Val.ts +216 -4
- package/src/val/VarVal.ts +0 -1
- package/src/val/arith.ts +319 -0
- package/src/vet.ts +1025 -0
- package/src/view.ts +2563 -0
- 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
|
+
}
|
package/src/val/CopyFuncVal.ts
CHANGED
package/src/val/Decimal.ts
CHANGED
|
@@ -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
|
+
}
|