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.
- package/README.md +4 -4
- package/dist/agentsmd.d.ts +1 -0
- package/dist/agentsmd.js +7 -28
- package/dist/agentsmd.js.map +1 -1
- package/dist/alias.js.map +1 -1
- package/dist/allow.d.ts +23 -0
- package/dist/allow.js +138 -0
- package/dist/allow.js.map +1 -0
- package/dist/aontu.d.ts +4 -2
- package/dist/aontu.js +4 -80
- package/dist/aontu.js.map +1 -1
- package/dist/aontumodel.d.ts +4 -0
- package/dist/aontumodel.js +33 -0
- package/dist/aontumodel.js.map +1 -0
- package/dist/cli.d.ts +10 -1
- package/dist/cli.js +877 -479
- package/dist/cli.js.map +1 -1
- package/dist/ctx.js +0 -48
- package/dist/ctx.js.map +1 -1
- package/dist/diff.js +0 -32
- package/dist/diff.js.map +1 -1
- package/dist/err.js +0 -40
- package/dist/err.js.map +1 -1
- package/dist/escape.js +0 -45
- package/dist/escape.js.map +1 -1
- package/dist/exactjson.d.ts +0 -35
- package/dist/exactjson.js +0 -131
- package/dist/exactjson.js.map +1 -1
- package/dist/format.js +55 -189
- package/dist/format.js.map +1 -1
- package/dist/grammar.d.ts +9 -0
- package/dist/grammar.js +54 -0
- package/dist/grammar.js.map +1 -0
- package/dist/graph.js +0 -26
- package/dist/graph.js.map +1 -1
- package/dist/hcanon.js +0 -82
- package/dist/hcanon.js.map +1 -1
- package/dist/helpdoc.d.ts +16 -0
- package/dist/helpdoc.js +59 -0
- package/dist/helpdoc.js.map +1 -0
- package/dist/hints.d.ts +0 -6
- package/dist/hints.js +59 -47
- package/dist/hints.js.map +1 -1
- package/dist/jsonschema.js +0 -114
- package/dist/jsonschema.js.map +1 -1
- package/dist/keyorder.d.ts +0 -7
- package/dist/keyorder.js +0 -41
- package/dist/keyorder.js.map +1 -1
- package/dist/lang.js +32 -877
- package/dist/lang.js.map +1 -1
- package/dist/lower.d.ts +3 -0
- package/dist/lower.js +14 -61
- package/dist/lower.js.map +1 -1
- package/dist/lsp-server.js +0 -16
- package/dist/lsp-server.js.map +1 -1
- package/dist/lsp.d.ts +1 -1
- package/dist/lsp.js +12 -159
- package/dist/lsp.js.map +1 -1
- package/dist/mcp-server.js +0 -26
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp.js +0 -113
- package/dist/mcp.js.map +1 -1
- package/dist/mod-tool.js +0 -130
- package/dist/mod-tool.js.map +1 -1
- package/dist/mod.js +0 -162
- package/dist/mod.js.map +1 -1
- package/dist/patch.js +0 -217
- package/dist/patch.js.map +1 -1
- package/dist/provenance.js +0 -140
- package/dist/provenance.js.map +1 -1
- package/dist/query.js +0 -75
- package/dist/query.js.map +1 -1
- package/dist/reach.js +0 -43
- package/dist/reach.js.map +1 -1
- package/dist/relation.d.ts +2 -0
- package/dist/relation.js +3 -58
- package/dist/relation.js.map +1 -1
- package/dist/render.js +33 -143
- package/dist/render.js.map +1 -1
- package/dist/report-sarif.d.ts +0 -11
- package/dist/report-sarif.js +0 -28
- package/dist/report-sarif.js.map +1 -1
- package/dist/sig.js +0 -35
- package/dist/sig.js.map +1 -1
- package/dist/sigdecl.js +1 -1
- package/dist/sigdecl.js.map +1 -1
- package/dist/siggate.js +0 -4
- package/dist/siggate.js.map +1 -1
- package/dist/site.js +3 -29
- package/dist/site.js.map +1 -1
- package/dist/subsume.d.ts +0 -10
- package/dist/subsume.js +0 -137
- package/dist/subsume.js.map +1 -1
- package/dist/template.d.ts +2 -1
- package/dist/template.js +58 -138
- package/dist/template.js.map +1 -1
- package/dist/trim.js +0 -41
- package/dist/trim.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.js.map +1 -1
- package/dist/unify.js +12 -242
- package/dist/unify.js.map +1 -1
- package/dist/utility.js +0 -22
- package/dist/utility.js.map +1 -1
- package/dist/val/AbnfFuncVal.d.ts +18 -0
- package/dist/val/AbnfFuncVal.js +132 -0
- package/dist/val/AbnfFuncVal.js.map +1 -0
- package/dist/val/AbsentVal.d.ts +11 -0
- package/dist/val/AbsentVal.js +30 -0
- package/dist/val/AbsentVal.js.map +1 -0
- package/dist/val/AggFuncVal.d.ts +10 -1
- package/dist/val/AggFuncVal.js +104 -116
- package/dist/val/AggFuncVal.js.map +1 -1
- package/dist/val/ArithFuncVal.js +0 -12
- package/dist/val/ArithFuncVal.js.map +1 -1
- package/dist/val/BagVal.js +1 -78
- package/dist/val/BagVal.js.map +1 -1
- package/dist/val/BigDecimalVal.js +0 -16
- package/dist/val/BigDecimalVal.js.map +1 -1
- package/dist/val/BigIntegerVal.js +0 -16
- package/dist/val/BigIntegerVal.js.map +1 -1
- package/dist/val/CloseFuncVal.js +0 -9
- package/dist/val/CloseFuncVal.js.map +1 -1
- package/dist/val/CmpFuncVal.d.ts +20 -0
- package/dist/val/CmpFuncVal.js +188 -0
- package/dist/val/CmpFuncVal.js.map +1 -0
- package/dist/val/ConjunctVal.js +0 -29
- package/dist/val/ConjunctVal.js.map +1 -1
- package/dist/val/ConstraintVal.js +0 -500
- package/dist/val/ConstraintVal.js.map +1 -1
- package/dist/val/ContainerKindVal.js +0 -2
- package/dist/val/ContainerKindVal.js.map +1 -1
- package/dist/val/CopyFuncVal.js +0 -3
- package/dist/val/CopyFuncVal.js.map +1 -1
- package/dist/val/Decimal.js +0 -179
- package/dist/val/Decimal.js.map +1 -1
- package/dist/val/DeprecateFuncVal.js.map +1 -1
- package/dist/val/DisjunctVal.js +0 -152
- package/dist/val/DisjunctVal.js.map +1 -1
- package/dist/val/EachFuncVal.d.ts +1 -2
- package/dist/val/EachFuncVal.js +12 -29
- package/dist/val/EachFuncVal.js.map +1 -1
- package/dist/val/EmitFuncVal.d.ts +1 -1
- package/dist/val/EmitFuncVal.js +6 -119
- package/dist/val/EmitFuncVal.js.map +1 -1
- package/dist/val/ExpectVal.js +0 -62
- package/dist/val/ExpectVal.js.map +1 -1
- package/dist/val/FilterFuncVal.js +0 -25
- package/dist/val/FilterFuncVal.js.map +1 -1
- package/dist/val/FuncBaseVal.d.ts +1 -0
- package/dist/val/FuncBaseVal.js +7 -127
- package/dist/val/FuncBaseVal.js.map +1 -1
- package/dist/val/GraphAtomVal.js +0 -15
- package/dist/val/GraphAtomVal.js.map +1 -1
- package/dist/val/HideFuncVal.js +0 -13
- package/dist/val/HideFuncVal.js.map +1 -1
- package/dist/val/IntegerVal.js +0 -61
- package/dist/val/IntegerVal.js.map +1 -1
- package/dist/val/JunctionVal.js +0 -20
- package/dist/val/JunctionVal.js.map +1 -1
- package/dist/val/KeyFuncVal.js +0 -46
- package/dist/val/KeyFuncVal.js.map +1 -1
- package/dist/val/ListVal.js +0 -57
- package/dist/val/ListVal.js.map +1 -1
- package/dist/val/LowerFuncVal.js +11 -6
- package/dist/val/LowerFuncVal.js.map +1 -1
- package/dist/val/MapVal.js +0 -151
- package/dist/val/MapVal.js.map +1 -1
- package/dist/val/MatchFuncVal.js +0 -27
- package/dist/val/MatchFuncVal.js.map +1 -1
- package/dist/val/{FormFuncVal.d.ts → MaybeFuncVal.d.ts} +5 -5
- package/dist/val/MaybeFuncVal.js +50 -0
- package/dist/val/MaybeFuncVal.js.map +1 -0
- package/dist/val/MoveFuncVal.js +0 -18
- package/dist/val/MoveFuncVal.js.map +1 -1
- package/dist/val/NilVal.js +2 -36
- package/dist/val/NilVal.js.map +1 -1
- package/dist/val/NomFuncVal.d.ts +12 -0
- package/dist/val/NomFuncVal.js +153 -0
- package/dist/val/NomFuncVal.js.map +1 -0
- package/dist/val/NumberVal.js +0 -15
- package/dist/val/NumberVal.js.map +1 -1
- package/dist/val/OpBaseVal.d.ts +1 -0
- package/dist/val/OpBaseVal.js +3 -15
- package/dist/val/OpBaseVal.js.map +1 -1
- package/dist/val/PackFuncVal.js +0 -34
- package/dist/val/PackFuncVal.js.map +1 -1
- package/dist/val/PathFuncVal.js +0 -6
- package/dist/val/PathFuncVal.js.map +1 -1
- package/dist/val/PathVal.js +0 -41
- package/dist/val/PathVal.js.map +1 -1
- package/dist/val/PlaceVal.js +0 -25
- package/dist/val/PlaceVal.js.map +1 -1
- package/dist/val/PlusOpVal.d.ts +1 -7
- package/dist/val/PlusOpVal.js +13 -74
- package/dist/val/PlusOpVal.js.map +1 -1
- package/dist/val/PrefFuncVal.js +0 -1
- package/dist/val/PrefFuncVal.js.map +1 -1
- package/dist/val/PrefVal.js +0 -167
- package/dist/val/PrefVal.js.map +1 -1
- package/dist/val/RecurseVal.js +0 -55
- package/dist/val/RecurseVal.js.map +1 -1
- package/dist/val/RefVal.js +0 -282
- package/dist/val/RefVal.js.map +1 -1
- package/dist/val/ReferFuncVal.js +0 -232
- package/dist/val/ReferFuncVal.js.map +1 -1
- package/dist/val/ScalarKindVal.js +0 -49
- package/dist/val/ScalarKindVal.js.map +1 -1
- package/dist/val/ScalarVal.js +0 -11
- package/dist/val/ScalarVal.js.map +1 -1
- package/dist/val/StrFuncVal.js +0 -18
- package/dist/val/StrFuncVal.js.map +1 -1
- package/dist/val/SuperFuncVal.js +0 -32
- package/dist/val/SuperFuncVal.js.map +1 -1
- package/dist/val/TopVal.js +0 -1
- package/dist/val/TopVal.js.map +1 -1
- package/dist/val/TranslateFuncVal.d.ts +12 -0
- package/dist/val/TranslateFuncVal.js +99 -0
- package/dist/val/TranslateFuncVal.js.map +1 -0
- package/dist/val/UpperFuncVal.js +11 -6
- package/dist/val/UpperFuncVal.js.map +1 -1
- package/dist/val/Val.d.ts +1 -0
- package/dist/val/Val.js +2 -133
- package/dist/val/Val.js.map +1 -1
- package/dist/val/VarVal.js +0 -12
- package/dist/val/VarVal.js.map +1 -1
- package/dist/val/arith.js +0 -37
- package/dist/val/arith.js.map +1 -1
- package/dist/val/caserange.d.ts +3 -0
- package/dist/val/caserange.js +49 -0
- package/dist/val/caserange.js.map +1 -0
- package/dist/val/members.js +0 -6
- package/dist/val/members.js.map +1 -1
- package/dist/val/numcmp.js +0 -11
- package/dist/val/numcmp.js.map +1 -1
- package/dist/val/numkind.js +0 -145
- package/dist/val/numkind.js.map +1 -1
- package/dist/val/valutil.js +0 -16
- package/dist/val/valutil.js.map +1 -1
- package/dist/vet.d.ts +12 -0
- package/dist/vet.js +159 -412
- package/dist/vet.js.map +1 -1
- package/dist/view.js +0 -414
- package/dist/view.js.map +1 -1
- package/dist/walk.js +0 -41
- package/dist/walk.js.map +1 -1
- package/grammar/aontu.abnf +9 -7
- package/grammar/aontu.gbnf +5 -5
- package/grammar/aontu.lark +5 -5
- package/grammar/aontu.tmLanguage.json +1 -1
- package/package.json +4 -2
- package/skill/SKILL.md +8 -0
- package/skill/init/check.sh +28 -0
- package/skill/init/data.aon +12 -0
- package/skill/init/model.aon +19 -0
- package/skill/tasks.md +151 -0
- package/src/agentsmd.ts +8 -32
- package/src/alias.ts +0 -39
- package/src/allow.ts +221 -0
- package/src/aontu.ts +10 -108
- package/src/aontumodel.ts +32 -0
- package/src/cli.ts +1009 -540
- package/src/ctx.ts +0 -103
- package/src/diff.ts +0 -40
- package/src/err.ts +0 -40
- package/src/escape.ts +0 -46
- package/src/exactjson.ts +0 -131
- package/src/format.ts +63 -234
- package/src/grammar.ts +72 -0
- package/src/graph.ts +0 -61
- package/src/hcanon.ts +0 -82
- package/src/helpdoc.ts +77 -0
- package/src/hints.ts +72 -49
- package/src/jsonschema.ts +0 -123
- package/src/keyorder.ts +0 -42
- package/src/lang.ts +39 -895
- package/src/lower.ts +15 -65
- package/src/lsp-server.ts +0 -16
- package/src/lsp.ts +12 -180
- package/src/mcp-server.ts +0 -31
- package/src/mcp.ts +0 -130
- package/src/mod-tool.ts +0 -158
- package/src/mod.ts +0 -178
- package/src/patch.ts +0 -232
- package/src/provenance.ts +0 -183
- package/src/query.ts +0 -84
- package/src/reach.ts +0 -53
- package/src/relation.ts +7 -71
- package/src/render.ts +33 -180
- package/src/report-sarif.ts +0 -48
- package/src/sig.ts +0 -35
- package/src/sigdecl.ts +1 -1
- package/src/siggate.ts +0 -30
- package/src/site.ts +3 -29
- package/src/subsume.ts +1 -161
- package/src/template.ts +69 -140
- package/src/trim.ts +0 -53
- package/src/type.ts +2 -45
- package/src/unify.ts +13 -251
- package/src/utility.ts +0 -31
- package/src/val/AbnfFuncVal.ts +181 -0
- package/src/val/AbsentVal.ts +54 -0
- package/src/val/AggFuncVal.ts +152 -188
- package/src/val/ArithFuncVal.ts +0 -20
- package/src/val/BagVal.ts +1 -78
- package/src/val/BigDecimalVal.ts +0 -16
- package/src/val/BigIntegerVal.ts +0 -16
- package/src/val/CloseFuncVal.ts +0 -9
- package/src/val/CmpFuncVal.ts +249 -0
- package/src/val/ConjunctVal.ts +0 -33
- package/src/val/ConstraintVal.ts +2 -537
- package/src/val/ContainerKindVal.ts +0 -18
- package/src/val/CopyFuncVal.ts +0 -5
- package/src/val/Decimal.ts +1 -185
- package/src/val/DeprecateFuncVal.ts +0 -10
- package/src/val/DisjunctVal.ts +0 -157
- package/src/val/EachFuncVal.ts +12 -53
- package/src/val/EmitFuncVal.ts +8 -208
- package/src/val/ExpectVal.ts +0 -62
- package/src/val/FilterFuncVal.ts +0 -55
- package/src/val/FuncBaseVal.ts +9 -130
- package/src/val/GraphAtomVal.ts +0 -42
- package/src/val/HideFuncVal.ts +0 -15
- package/src/val/IntegerVal.ts +0 -61
- package/src/val/JunctionVal.ts +0 -20
- package/src/val/KeyFuncVal.ts +0 -48
- package/src/val/ListVal.ts +0 -59
- package/src/val/LowerFuncVal.ts +12 -7
- package/src/val/MapVal.ts +0 -151
- package/src/val/MatchFuncVal.ts +0 -59
- package/src/val/MaybeFuncVal.ts +86 -0
- package/src/val/MoveFuncVal.ts +0 -20
- package/src/val/NilVal.ts +2 -36
- package/src/val/NomFuncVal.ts +200 -0
- package/src/val/NumberVal.ts +0 -16
- package/src/val/OpBaseVal.ts +4 -17
- package/src/val/PackFuncVal.ts +0 -63
- package/src/val/PathFuncVal.ts +0 -32
- package/src/val/PathVal.ts +0 -66
- package/src/val/PlaceVal.ts +0 -45
- package/src/val/PlusOpVal.ts +18 -75
- package/src/val/PrefFuncVal.ts +0 -1
- package/src/val/PrefVal.ts +0 -179
- package/src/val/RecurseVal.ts +0 -81
- package/src/val/RefVal.ts +1 -285
- package/src/val/ReferFuncVal.ts +0 -255
- package/src/val/ScalarKindVal.ts +0 -50
- package/src/val/ScalarVal.ts +0 -12
- package/src/val/StrFuncVal.ts +0 -44
- package/src/val/SuperFuncVal.ts +0 -42
- package/src/val/TopVal.ts +0 -1
- package/src/val/TranslateFuncVal.ts +132 -0
- package/src/val/UpperFuncVal.ts +12 -7
- package/src/val/Val.ts +3 -192
- package/src/val/VarVal.ts +0 -15
- package/src/val/arith.ts +0 -92
- package/src/val/caserange.ts +53 -0
- package/src/val/members.ts +0 -23
- package/src/val/numcmp.ts +1 -27
- package/src/val/numkind.ts +0 -149
- package/src/val/valutil.ts +0 -16
- package/src/vet.ts +209 -504
- package/src/view.ts +0 -507
- package/src/walk.ts +0 -41
- package/dist/std.d.ts +0 -3
- package/dist/std.js +0 -637
- package/dist/std.js.map +0 -1
- package/dist/val/FormFuncVal.js +0 -55
- package/dist/val/FormFuncVal.js.map +0 -1
- package/src/std.ts +0 -648
- package/src/val/FormFuncVal.ts +0 -119
package/src/val/BigIntegerVal.ts
CHANGED
|
@@ -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)) {
|
package/src/val/CloseFuncVal.ts
CHANGED
|
@@ -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
|
+
}
|
package/src/val/ConjunctVal.ts
CHANGED
|
@@ -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
|