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