aontu 0.11.0 → 0.13.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/aontu.ts +13 -6
- package/dist/aontu.d.ts +3 -0
- package/dist/aontu.js +10 -4
- package/dist/aontu.js.map +1 -1
- package/dist/aontu.min.js +1 -1
- package/dist/lib/err.js +1 -1
- package/dist/lib/err.js.map +1 -1
- package/dist/lib/lang.d.ts +1 -2
- package/dist/lib/lang.js +130 -38
- package/dist/lib/lang.js.map +1 -1
- package/dist/lib/op/disjunct.js +2 -2
- package/dist/lib/op/disjunct.js.map +1 -1
- package/dist/lib/op/op.js +1 -1
- package/dist/lib/op/op.js.map +1 -1
- package/dist/lib/op/unite.js +36 -6
- package/dist/lib/op/unite.js.map +1 -1
- package/dist/lib/type.d.ts +10 -8
- package/dist/lib/type.js +2 -27
- package/dist/lib/type.js.map +1 -1
- package/dist/lib/unify.d.ts +7 -4
- package/dist/lib/unify.js +17 -29
- package/dist/lib/unify.js.map +1 -1
- package/dist/lib/val/ConjunctVal.d.ts +7 -4
- package/dist/lib/val/ConjunctVal.js +62 -31
- package/dist/lib/val/ConjunctVal.js.map +1 -1
- package/dist/lib/val/DisjunctVal.d.ts +5 -2
- package/dist/lib/val/DisjunctVal.js +15 -7
- package/dist/lib/val/DisjunctVal.js.map +1 -1
- package/dist/lib/val/ListVal.d.ts +5 -2
- package/dist/lib/val/ListVal.js +39 -19
- package/dist/lib/val/ListVal.js.map +1 -1
- package/dist/lib/val/MapVal.d.ts +5 -2
- package/dist/lib/val/MapVal.js +59 -30
- package/dist/lib/val/MapVal.js.map +1 -1
- package/dist/lib/val/Nil.d.ts +3 -2
- package/dist/lib/val/Nil.js +19 -5
- package/dist/lib/val/Nil.js.map +1 -1
- package/dist/lib/val/PrefVal.d.ts +6 -2
- package/dist/lib/val/PrefVal.js +18 -8
- package/dist/lib/val/PrefVal.js.map +1 -1
- package/dist/lib/val/RefVal.d.ts +11 -5
- package/dist/lib/val/RefVal.js +187 -39
- package/dist/lib/val/RefVal.js.map +1 -1
- package/dist/lib/val/ValBase.d.ts +10 -9
- package/dist/lib/val/ValBase.js +25 -6
- package/dist/lib/val/ValBase.js.map +1 -1
- package/dist/lib/val/VarVal.d.ts +14 -0
- package/dist/lib/val/VarVal.js +68 -0
- package/dist/lib/val/VarVal.js.map +1 -0
- package/dist/lib/val.d.ts +42 -8
- package/dist/lib/val.js +64 -18
- package/dist/lib/val.js.map +1 -1
- package/lib/err.ts +1 -1
- package/lib/lang.ts +168 -43
- package/lib/op/disjunct.ts +10 -3
- package/lib/op/op.ts +1 -1
- package/lib/op/unite.ts +44 -4
- package/lib/type.ts +12 -40
- package/lib/unify.ts +70 -29
- package/lib/val/ConjunctVal.ts +83 -46
- package/lib/val/DisjunctVal.ts +35 -12
- package/lib/val/ListVal.ts +57 -22
- package/lib/val/MapVal.ts +82 -51
- package/lib/val/Nil.ts +29 -9
- package/lib/val/PrefVal.ts +38 -14
- package/lib/val/RefVal.ts +254 -55
- package/lib/val/ValBase.ts +33 -28
- package/lib/val/VarVal.ts +139 -0
- package/lib/val.ts +116 -25
- package/package.json +8 -8
- package/dist/lib/common.d.ts +0 -8
- package/dist/lib/common.js +0 -3
- package/dist/lib/common.js.map +0 -1
package/dist/lib/val/MapVal.js
CHANGED
|
@@ -1,78 +1,104 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Copyright (c) 2021 Richard Rodger, MIT License */
|
|
2
|
+
/* Copyright (c) 2021-2023 Richard Rodger, MIT License */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.MapVal = void 0;
|
|
5
5
|
const type_1 = require("../type");
|
|
6
6
|
const op_1 = require("../op/op");
|
|
7
|
+
const val_1 = require("../val");
|
|
8
|
+
const ConjunctVal_1 = require("../val/ConjunctVal");
|
|
9
|
+
const Nil_1 = require("../val/Nil");
|
|
7
10
|
const ValBase_1 = require("../val/ValBase");
|
|
8
|
-
const Nil_1 = require("./Nil");
|
|
9
|
-
const ConjunctVal_1 = require("./ConjunctVal");
|
|
10
11
|
class MapVal extends ValBase_1.ValBase {
|
|
11
|
-
constructor(
|
|
12
|
-
super(
|
|
12
|
+
constructor(spec, ctx) {
|
|
13
|
+
super(spec, ctx);
|
|
13
14
|
this.spread = {
|
|
14
15
|
cj: undefined,
|
|
15
16
|
};
|
|
17
|
+
if (null == this.peg) {
|
|
18
|
+
throw new Error('MapVal spec.peg undefined');
|
|
19
|
+
}
|
|
16
20
|
let spread = this.peg[MapVal.SPREAD];
|
|
17
21
|
delete this.peg[MapVal.SPREAD];
|
|
22
|
+
// console.log('MC', this.id, peg, spread)
|
|
18
23
|
if (spread) {
|
|
19
24
|
if ('&' === spread.o) {
|
|
20
|
-
|
|
21
|
-
this.spread.cj =
|
|
22
|
-
new ConjunctVal_1.ConjunctVal(Array.isArray(spread.v) ? spread.v : [spread.v], ctx);
|
|
25
|
+
let tmv = Array.isArray(spread.v) ? spread.v : [spread.v];
|
|
26
|
+
this.spread.cj = new ConjunctVal_1.ConjunctVal({ peg: tmv }, ctx);
|
|
23
27
|
}
|
|
24
28
|
}
|
|
25
29
|
}
|
|
26
30
|
// NOTE: order of keys is not preserved!
|
|
27
31
|
// not possible in any case - consider {a,b} unify {b,a}
|
|
28
32
|
unify(peer, ctx) {
|
|
29
|
-
//
|
|
30
|
-
// console.trace()
|
|
31
|
-
// }
|
|
33
|
+
// let mark = Math.random()
|
|
32
34
|
let done = true;
|
|
33
|
-
let out =
|
|
35
|
+
let out = val_1.TOP === peer ? this : new MapVal({ peg: {} }, ctx);
|
|
34
36
|
out.spread.cj = this.spread.cj;
|
|
35
37
|
if (peer instanceof MapVal) {
|
|
36
|
-
out.spread.cj = null == out.spread.cj ? peer.spread.cj : (null == peer.spread.cj ? out.spread.cj : (out.spread.cj =
|
|
38
|
+
out.spread.cj = null == out.spread.cj ? peer.spread.cj : (null == peer.spread.cj ? out.spread.cj : (out.spread.cj =
|
|
39
|
+
new ConjunctVal_1.ConjunctVal({ peg: [out.spread.cj, peer.spread.cj] }, ctx)));
|
|
37
40
|
}
|
|
38
41
|
out.done = this.done + 1;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
type_1.DONE !== this.spread.cj.done ? (0, op_1.unite)(ctx, this.spread.cj) :
|
|
42
|
-
this.spread.cj;
|
|
43
|
-
done = (done && type_1.DONE === out.spread.cj.done);
|
|
44
|
-
}
|
|
45
|
-
let spread_cj = out.spread.cj || type_1.TOP;
|
|
46
|
-
// Always unify children first
|
|
42
|
+
let spread_cj = out.spread.cj || val_1.TOP;
|
|
43
|
+
// Always unify own children first
|
|
47
44
|
for (let key in this.peg) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
//
|
|
45
|
+
let keyctx = ctx.descend(key);
|
|
46
|
+
let key_spread_cj = spread_cj.clone(null, keyctx);
|
|
47
|
+
// console.log('M0', this.id, mark, Object.keys(this.peg).join('~'),
|
|
48
|
+
// 'p=', this.path.join('.'),
|
|
49
|
+
// 'k=', key, peer.top || peer.constructor.name,
|
|
50
|
+
// 'pp=', this.peg[key].path.join('.'),
|
|
51
|
+
// this.peg[key].canon,
|
|
52
|
+
// 'sp=', key_spread_cj.path.join('.'),
|
|
53
|
+
// key_spread_cj.canon)
|
|
54
|
+
// if (1000000000 === this.id) {
|
|
55
|
+
// console.dir(key_spread_cj, { depth: null })
|
|
56
|
+
// }
|
|
57
|
+
out.peg[key] = (0, op_1.unite)(keyctx, this.peg[key], key_spread_cj, 'map-own');
|
|
52
58
|
done = (done && type_1.DONE === out.peg[key].done);
|
|
53
59
|
}
|
|
54
60
|
if (peer instanceof MapVal) {
|
|
55
|
-
let upeer = (0, op_1.unite)(ctx, peer);
|
|
61
|
+
let upeer = (0, op_1.unite)(ctx, peer, undefined, 'map-peer-map');
|
|
56
62
|
for (let peerkey in upeer.peg) {
|
|
63
|
+
// console.log('M1', this.id, mark, Object.keys(this.peg).join('~'),
|
|
64
|
+
// 'pk=', peerkey)
|
|
57
65
|
let peerchild = upeer.peg[peerkey];
|
|
58
66
|
let child = out.peg[peerkey];
|
|
59
67
|
let oval = out.peg[peerkey] =
|
|
60
68
|
undefined === child ? peerchild :
|
|
61
69
|
child instanceof Nil_1.Nil ? child :
|
|
62
70
|
peerchild instanceof Nil_1.Nil ? peerchild :
|
|
63
|
-
(0, op_1.unite)(ctx.descend(peerkey), child, peerchild);
|
|
71
|
+
(0, op_1.unite)(ctx.descend(peerkey), child, peerchild, 'map-peer');
|
|
64
72
|
if (this.spread.cj) {
|
|
65
|
-
|
|
73
|
+
let key_ctx = ctx.descend(peerkey);
|
|
74
|
+
let key_spread_cj = spread_cj.clone(null, key_ctx);
|
|
75
|
+
out.peg[peerkey] =
|
|
76
|
+
new ConjunctVal_1.ConjunctVal({ peg: [out.peg[peerkey], key_spread_cj] }, key_ctx);
|
|
77
|
+
done = false;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
done = (done && type_1.DONE === oval.done);
|
|
66
81
|
}
|
|
67
|
-
done = (done && type_1.DONE === oval.done);
|
|
68
82
|
}
|
|
69
83
|
}
|
|
70
|
-
else if (
|
|
84
|
+
else if (val_1.TOP !== peer) {
|
|
71
85
|
return Nil_1.Nil.make(ctx, 'map', this, peer);
|
|
72
86
|
}
|
|
73
87
|
out.done = done ? type_1.DONE : out.done;
|
|
74
88
|
return out;
|
|
75
89
|
}
|
|
90
|
+
clone(spec, ctx) {
|
|
91
|
+
let out = super.clone(spec, ctx);
|
|
92
|
+
out.peg = {};
|
|
93
|
+
for (let entry of Object.entries(this.peg)) {
|
|
94
|
+
out.peg[entry[0]] =
|
|
95
|
+
entry[1] instanceof ValBase_1.ValBase ? entry[1].clone(null, ctx) : entry[1];
|
|
96
|
+
}
|
|
97
|
+
if (this.spread.cj) {
|
|
98
|
+
out.spread.cj = this.spread.cj.clone(null, ctx);
|
|
99
|
+
}
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
76
102
|
get canon() {
|
|
77
103
|
let keys = Object.keys(this.peg);
|
|
78
104
|
return '{' +
|
|
@@ -87,6 +113,9 @@ class MapVal extends ValBase_1.ValBase {
|
|
|
87
113
|
for (let p in this.peg) {
|
|
88
114
|
out[p] = this.peg[p].gen(ctx);
|
|
89
115
|
}
|
|
116
|
+
// if (0 === Object.keys(out).length) {
|
|
117
|
+
// console.log('MapVal-gen 0', this.path, this.done)
|
|
118
|
+
// }
|
|
90
119
|
return out;
|
|
91
120
|
}
|
|
92
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapVal.js","sourceRoot":"","sources":["../../../lib/val/MapVal.ts"],"names":[],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"MapVal.js","sourceRoot":"","sources":["../../../lib/val/MapVal.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/val/Nil.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Val } from '../type';
|
|
1
|
+
import type { Val, ValSpec } from '../type';
|
|
2
2
|
import { Context } from '../unify';
|
|
3
3
|
import { ValBase } from '../val/ValBase';
|
|
4
4
|
declare class Nil extends ValBase {
|
|
@@ -8,8 +8,9 @@ declare class Nil extends ValBase {
|
|
|
8
8
|
secondary?: Val;
|
|
9
9
|
msg: string;
|
|
10
10
|
static make: (ctx?: Context, why?: any, av?: Val, bv?: Val) => Nil;
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(spec?: any, ctx?: Context);
|
|
12
12
|
unify(_peer: Val, _ctx: Context): this;
|
|
13
|
+
clone(spec?: ValSpec, ctx?: Context): Val;
|
|
13
14
|
get canon(): string;
|
|
14
15
|
gen(_ctx?: Context): undefined;
|
|
15
16
|
}
|
package/dist/lib/val/Nil.js
CHANGED
|
@@ -1,33 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Copyright (c) 2021-
|
|
2
|
+
/* Copyright (c) 2021-2023 Richard Rodger, MIT License */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.Nil = void 0;
|
|
5
5
|
const type_1 = require("../type");
|
|
6
6
|
const ValBase_1 = require("../val/ValBase");
|
|
7
7
|
class Nil extends ValBase_1.ValBase {
|
|
8
|
-
constructor(
|
|
9
|
-
super(
|
|
8
|
+
constructor(spec, ctx) {
|
|
9
|
+
super(spec, ctx);
|
|
10
10
|
this.nil = true;
|
|
11
11
|
this.msg = '';
|
|
12
|
-
this.why = why;
|
|
12
|
+
this.why = spec === null || spec === void 0 ? void 0 : spec.why;
|
|
13
13
|
// Nil is always DONE, by definition.
|
|
14
14
|
this.done = type_1.DONE;
|
|
15
15
|
}
|
|
16
16
|
unify(_peer, _ctx) {
|
|
17
17
|
return this;
|
|
18
18
|
}
|
|
19
|
+
clone(spec, ctx) {
|
|
20
|
+
let out = super.clone(spec, ctx);
|
|
21
|
+
out.why = this.why;
|
|
22
|
+
// Should these clone?
|
|
23
|
+
// out.primary = this.primary?.clone()
|
|
24
|
+
// out.secondary = this.secondary?.clone()
|
|
25
|
+
out.primary = this.primary;
|
|
26
|
+
out.secondary = this.secondary;
|
|
27
|
+
out.msg = this.msg;
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
19
30
|
get canon() {
|
|
20
31
|
return 'nil';
|
|
21
32
|
}
|
|
22
33
|
gen(_ctx) {
|
|
34
|
+
// TODO: proper gen error
|
|
35
|
+
throw new Error('Nil-gen: ' + this.why);
|
|
23
36
|
return undefined;
|
|
24
37
|
}
|
|
25
38
|
}
|
|
26
39
|
exports.Nil = Nil;
|
|
27
40
|
// TODO: include Val generating nil, thus capture type
|
|
28
41
|
// A Nil is an error - should not happen - unify failed
|
|
42
|
+
// refactor ,make(spec,ctx)
|
|
29
43
|
Nil.make = (ctx, why, av, bv) => {
|
|
30
|
-
let nil = new Nil(why, ctx);
|
|
44
|
+
let nil = new Nil({ why }, ctx);
|
|
31
45
|
// TODO: this should be done lazily, for multiple terms
|
|
32
46
|
// Terms later in same file are considered the primary error location.
|
|
33
47
|
if (null != av) {
|
package/dist/lib/val/Nil.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Nil.js","sourceRoot":"","sources":["../../../lib/val/Nil.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;
|
|
1
|
+
{"version":3,"file":"Nil.js","sourceRoot":"","sources":["../../../lib/val/Nil.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAQzD,kCAEgB;AAOhB,4CAAwC;AAKxC,MAAM,GAAI,SAAQ,iBAAO;IAmDvB,YAAY,IAAU,EAAE,GAAa;QACnC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAnDlB,QAAG,GAAG,IAAI,CAAA;QAIV,QAAG,GAAW,EAAE,CAAA;QAgDd,IAAI,CAAC,GAAG,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAA;QAEpB,qCAAqC;QACrC,IAAI,CAAC,IAAI,GAAG,WAAI,CAAA;IAClB,CAAC;IAGD,KAAK,CAAC,KAAU,EAAE,IAAa;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IAGD,KAAK,CAAC,IAAc,EAAE,GAAa;QACjC,IAAI,GAAG,GAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAS,CAAA;QACzC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QAElB,sBAAsB;QACtB,sCAAsC;QACtC,0CAA0C;QAC1C,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC1B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAE9B,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QAClB,OAAO,GAAG,CAAA;IACZ,CAAC;IAGD,IAAI,KAAK;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IAED,GAAG,CAAC,IAAc;QAChB,yBAAyB;QACzB,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,OAAO,SAAS,CAAA;IAClB,CAAC;;AAKD,kBAAG;AAtFH,sDAAsD;AAEtD,uDAAuD;AACvD,2BAA2B;AACpB,QAAI,GAAG,CAAC,GAAa,EAAE,GAAS,EAAE,EAAQ,EAAE,EAAQ,EAAE,EAAE;IAC7D,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;IAE/B,uDAAuD;IAEvD,sEAAsE;IACtE,IAAI,IAAI,IAAI,EAAE,EAAE;QACd,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;QAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;QAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;QAEhB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAA;QAEhB,IAAI,IAAI,IAAI,EAAE,EAAE;YACd,GAAG,CAAC,SAAS,GAAG,EAAE,CAAA;YAElB,IAAI,WAAW,GACb,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CACtB,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAClB,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CACzC,CAAA;YAEH,IAAI,WAAW,EAAE;gBACf,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;gBAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;gBAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;gBAChB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAA;gBAChB,GAAG,CAAC,SAAS,GAAG,EAAE,CAAA;aACnB;SACF;KACF;IAED,IAAI,GAAG,EAAE;QACP,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KAClB;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,AArCU,CAqCV"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import type { Val } from '../type';
|
|
1
|
+
import type { Val, ValSpec } from '../type';
|
|
2
2
|
import { Context } from '../unify';
|
|
3
3
|
import { ValBase } from '../val/ValBase';
|
|
4
4
|
declare class PrefVal extends ValBase {
|
|
5
5
|
pref: Val;
|
|
6
|
-
constructor(
|
|
6
|
+
constructor(spec: {
|
|
7
|
+
peg: any;
|
|
8
|
+
pref?: any;
|
|
9
|
+
}, ctx?: Context);
|
|
7
10
|
unify(peer: Val, ctx: Context): Val;
|
|
8
11
|
same(peer: Val): boolean;
|
|
12
|
+
clone(spec?: ValSpec, ctx?: Context): Val;
|
|
9
13
|
get canon(): any;
|
|
10
14
|
gen(ctx?: Context): any;
|
|
11
15
|
}
|
package/dist/lib/val/PrefVal.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Copyright (c) 2021-
|
|
2
|
+
/* Copyright (c) 2021-2023 Richard Rodger, MIT License */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.PrefVal = void 0;
|
|
5
5
|
const type_1 = require("../type");
|
|
@@ -7,9 +7,9 @@ const op_1 = require("../op/op");
|
|
|
7
7
|
const Nil_1 = require("../val/Nil");
|
|
8
8
|
const ValBase_1 = require("../val/ValBase");
|
|
9
9
|
class PrefVal extends ValBase_1.ValBase {
|
|
10
|
-
constructor(
|
|
11
|
-
super(
|
|
12
|
-
this.pref = pref || peg;
|
|
10
|
+
constructor(spec, ctx) {
|
|
11
|
+
super(spec, ctx);
|
|
12
|
+
this.pref = spec.pref || spec.peg;
|
|
13
13
|
}
|
|
14
14
|
// PrefVal unify always returns a PrefVal
|
|
15
15
|
// PrefVals can only be removed by becoming Nil in a Disjunct
|
|
@@ -17,12 +17,17 @@ class PrefVal extends ValBase_1.ValBase {
|
|
|
17
17
|
let done = true;
|
|
18
18
|
let out;
|
|
19
19
|
if (peer instanceof PrefVal) {
|
|
20
|
-
out = new PrefVal(
|
|
20
|
+
out = new PrefVal({
|
|
21
|
+
peg: (0, op_1.unite)(ctx, this.peg, peer.peg, 'Pref000'),
|
|
22
|
+
pref: (0, op_1.unite)(ctx, this.pref, peer.pref, 'Pref010'),
|
|
23
|
+
}, ctx);
|
|
21
24
|
}
|
|
22
25
|
else {
|
|
23
|
-
out = new PrefVal(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
out = new PrefVal({
|
|
27
|
+
// TODO: find a better way to drop Nil non-errors
|
|
28
|
+
peg: (0, op_1.unite)(ctx === null || ctx === void 0 ? void 0 : ctx.clone({ err: [] }), this.peg, peer, 'Pref020'),
|
|
29
|
+
pref: (0, op_1.unite)(ctx === null || ctx === void 0 ? void 0 : ctx.clone({ err: [] }), this.pref, peer, 'Pref030'),
|
|
30
|
+
}, ctx);
|
|
26
31
|
}
|
|
27
32
|
done = done && type_1.DONE === out.peg.done &&
|
|
28
33
|
(null != out.pref ? type_1.DONE === out.pref.done : true);
|
|
@@ -46,6 +51,11 @@ class PrefVal extends ValBase_1.ValBase {
|
|
|
46
51
|
(this.pref instanceof ValBase_1.ValBase && this.pref.same(peer.pref)));
|
|
47
52
|
return pegsame && prefsame;
|
|
48
53
|
}
|
|
54
|
+
clone(spec, ctx) {
|
|
55
|
+
let out = super.clone(spec, ctx);
|
|
56
|
+
out.pref = this.pref.clone(null, ctx);
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
49
59
|
get canon() {
|
|
50
60
|
return this.pref instanceof Nil_1.Nil ? this.peg.canon : '*' + this.pref.canon;
|
|
51
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrefVal.js","sourceRoot":"","sources":["../../../lib/val/PrefVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;
|
|
1
|
+
{"version":3,"file":"PrefVal.js","sourceRoot":"","sources":["../../../lib/val/PrefVal.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/val/RefVal.d.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
import type { Val } from '../type';
|
|
1
|
+
import type { Val, ValSpec } from '../type';
|
|
2
2
|
import { Context } from '../unify';
|
|
3
|
+
import { StringVal } from '../val';
|
|
3
4
|
import { ValBase } from '../val/ValBase';
|
|
4
5
|
declare class RefVal extends ValBase {
|
|
5
|
-
parts: string[];
|
|
6
6
|
absolute: boolean;
|
|
7
|
-
|
|
8
|
-
constructor(
|
|
7
|
+
prefix: boolean;
|
|
8
|
+
constructor(spec: {
|
|
9
|
+
peg: any[];
|
|
10
|
+
absolute?: boolean;
|
|
11
|
+
prefix?: boolean;
|
|
12
|
+
}, ctx?: Context);
|
|
9
13
|
append(part: any): void;
|
|
10
14
|
unify(peer: Val, ctx: Context): Val;
|
|
15
|
+
find(ctx: Context): Val | StringVal | undefined;
|
|
11
16
|
same(peer: Val): boolean;
|
|
12
|
-
|
|
17
|
+
clone(spec?: ValSpec, ctx?: Context): Val;
|
|
18
|
+
get canon(): string;
|
|
13
19
|
gen(ctx?: Context): undefined;
|
|
14
20
|
}
|
|
15
21
|
export { RefVal, };
|
package/dist/lib/val/RefVal.js
CHANGED
|
@@ -1,83 +1,231 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Copyright (c) 2021 Richard Rodger, MIT License */
|
|
2
|
+
/* Copyright (c) 2021-2023 Richard Rodger, MIT License */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.RefVal = void 0;
|
|
5
5
|
const type_1 = require("../type");
|
|
6
6
|
const op_1 = require("../op/op");
|
|
7
|
+
const val_1 = require("../val");
|
|
8
|
+
const ConjunctVal_1 = require("../val/ConjunctVal");
|
|
9
|
+
const MapVal_1 = require("../val/MapVal");
|
|
7
10
|
const Nil_1 = require("../val/Nil");
|
|
11
|
+
const VarVal_1 = require("../val/VarVal");
|
|
8
12
|
const ValBase_1 = require("../val/ValBase");
|
|
9
|
-
const ConjunctVal_1 = require("../val/ConjunctVal");
|
|
10
|
-
const val_1 = require("../val");
|
|
11
13
|
class RefVal extends ValBase_1.ValBase {
|
|
12
|
-
constructor(
|
|
13
|
-
super(
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
for (let
|
|
21
|
-
this.append(
|
|
14
|
+
constructor(spec, ctx) {
|
|
15
|
+
super(spec, ctx);
|
|
16
|
+
this.absolute = false;
|
|
17
|
+
this.prefix = false;
|
|
18
|
+
this.peg = [];
|
|
19
|
+
this.absolute = true === this.absolute ? true : // absolute sticks
|
|
20
|
+
true === spec.absolute ? true : false;
|
|
21
|
+
this.prefix = true === spec.prefix;
|
|
22
|
+
for (let pI = 0; pI < spec.peg.length; pI++) {
|
|
23
|
+
this.append(spec.peg[pI]);
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
26
|
append(part) {
|
|
25
|
-
//console.log('APPEND
|
|
27
|
+
// console.log('APPEND', part, this)
|
|
28
|
+
let partval;
|
|
26
29
|
if ('string' === typeof part) {
|
|
27
|
-
|
|
30
|
+
partval = part;
|
|
31
|
+
this.peg.push(partval);
|
|
28
32
|
}
|
|
29
33
|
else if (part instanceof val_1.StringVal) {
|
|
30
|
-
|
|
34
|
+
partval = part.peg;
|
|
35
|
+
this.peg.push(partval);
|
|
36
|
+
}
|
|
37
|
+
else if (part instanceof VarVal_1.VarVal) {
|
|
38
|
+
partval = part;
|
|
39
|
+
this.peg.push(partval);
|
|
31
40
|
}
|
|
32
41
|
else if (part instanceof RefVal) {
|
|
33
|
-
this.parts.push(...part.parts);
|
|
34
42
|
if (part.absolute) {
|
|
35
43
|
this.absolute = true;
|
|
36
44
|
}
|
|
45
|
+
if (this.prefix) {
|
|
46
|
+
if (part.prefix) {
|
|
47
|
+
this.peg.push('.');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
if (part.prefix) {
|
|
52
|
+
if (0 === this.peg.length) {
|
|
53
|
+
this.prefix = true;
|
|
54
|
+
}
|
|
55
|
+
else if (0 < this.peg.length) {
|
|
56
|
+
this.peg.push('.');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
this.peg.push(...part.peg);
|
|
37
61
|
}
|
|
38
|
-
this.peg = (this.absolute ? this.sep : '') + this.parts.join(this.sep);
|
|
39
62
|
}
|
|
40
63
|
unify(peer, ctx) {
|
|
41
|
-
let
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
64
|
+
let out = this;
|
|
65
|
+
// let why = 'id'
|
|
66
|
+
if (this.id !== peer.id) {
|
|
67
|
+
// TODO: not resolved when all Vals in path are done is an error
|
|
68
|
+
// as path cannot be found
|
|
69
|
+
// let resolved: Val | undefined = null == ctx ? this : ctx.find(this)
|
|
70
|
+
let resolved = null == ctx ? this : this.find(ctx);
|
|
71
|
+
// console.log('UR', this.peg, resolved)
|
|
72
|
+
resolved = resolved || this;
|
|
73
|
+
if (null == resolved && this.canon === peer.canon) {
|
|
49
74
|
out = this;
|
|
50
75
|
}
|
|
51
|
-
else if (
|
|
52
|
-
|
|
76
|
+
else if (resolved instanceof RefVal) {
|
|
77
|
+
if (val_1.TOP === peer) {
|
|
78
|
+
out = this;
|
|
79
|
+
// why = 'pt'
|
|
80
|
+
}
|
|
81
|
+
else if (peer instanceof Nil_1.Nil) {
|
|
82
|
+
out = Nil_1.Nil.make(ctx, 'ref[' + this.peg + ']', this, peer);
|
|
83
|
+
// why = 'pn'
|
|
84
|
+
}
|
|
85
|
+
// same path
|
|
86
|
+
// else if (this.peg === peer.peg) {
|
|
87
|
+
else if (this.canon === peer.canon) {
|
|
88
|
+
out = this;
|
|
89
|
+
// why = 'pp'
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// Ensure RefVal done is incremented
|
|
93
|
+
this.done = type_1.DONE === this.done ? type_1.DONE : this.done + 1;
|
|
94
|
+
out = new ConjunctVal_1.ConjunctVal({ peg: [this, peer] }, ctx);
|
|
95
|
+
// why = 'cj'
|
|
96
|
+
}
|
|
53
97
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
98
|
+
else {
|
|
99
|
+
out = (0, op_1.unite)(ctx, resolved, peer, 'ref');
|
|
100
|
+
// why = 'u'
|
|
101
|
+
}
|
|
102
|
+
out.done = type_1.DONE === out.done ? type_1.DONE : this.done + 1;
|
|
103
|
+
}
|
|
104
|
+
// console.log('RV', why, this.id, this.canon, '&', peer.canon, '->', out.canon)
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
find(ctx) {
|
|
108
|
+
// TODO: relative paths
|
|
109
|
+
// if (this.root instanceof MapVal && ref.absolute) {
|
|
110
|
+
// NOTE: path *to* the ref, not the ref itself!
|
|
111
|
+
let fullpath = this.path;
|
|
112
|
+
let parts = [];
|
|
113
|
+
let modes = [];
|
|
114
|
+
// console.log('PARTS', this.peg)
|
|
115
|
+
for (let pI = 0; pI < this.peg.length; pI++) {
|
|
116
|
+
let part = this.peg[pI];
|
|
117
|
+
if (part instanceof VarVal_1.VarVal) {
|
|
118
|
+
let strval = part.peg;
|
|
119
|
+
let name = strval ? '' + strval.peg : '';
|
|
120
|
+
if ('KEY' === name) {
|
|
121
|
+
if (pI === this.peg.length - 1) {
|
|
122
|
+
modes.push(name);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// TODO: return a Nil explaining error
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if ('SELF' === name) {
|
|
130
|
+
if (pI === 0) {
|
|
131
|
+
modes.push(name);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// TODO: return a Nil explaining error
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else if ('PARENT' === name) {
|
|
139
|
+
if (pI === 0) {
|
|
140
|
+
modes.push(name);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// TODO: return a Nil explaining error
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else if (0 === modes.length) {
|
|
148
|
+
part = part.unify(val_1.TOP, ctx);
|
|
149
|
+
if (part instanceof Nil_1.Nil) {
|
|
150
|
+
// TODO: var not found, so can't find path
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
part = '' + part.peg;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
57
157
|
}
|
|
58
158
|
else {
|
|
59
|
-
|
|
60
|
-
this.done = type_1.DONE === this.done ? type_1.DONE : this.done + 1;
|
|
61
|
-
out = new ConjunctVal_1.ConjunctVal([this, peer], ctx);
|
|
159
|
+
parts.push(part);
|
|
62
160
|
}
|
|
63
161
|
}
|
|
162
|
+
// console.log('modes', modes)
|
|
163
|
+
if (this.absolute) {
|
|
164
|
+
fullpath = parts;
|
|
165
|
+
}
|
|
64
166
|
else {
|
|
65
|
-
|
|
167
|
+
fullpath = fullpath.slice(0, (modes.includes('SELF') ? 0 :
|
|
168
|
+
modes.includes('PARENT') ? -1 :
|
|
169
|
+
-1 // siblings
|
|
170
|
+
)).concat(parts);
|
|
171
|
+
}
|
|
172
|
+
let sep = '.';
|
|
173
|
+
fullpath = fullpath
|
|
174
|
+
.reduce(((a, p) => (p === sep ? a.length = a.length - 1 : a.push(p), a)), []);
|
|
175
|
+
let node = ctx.root;
|
|
176
|
+
let pI = 0;
|
|
177
|
+
for (; pI < fullpath.length; pI++) {
|
|
178
|
+
let part = fullpath[pI];
|
|
179
|
+
if (node instanceof MapVal_1.MapVal) {
|
|
180
|
+
node = node.peg[part];
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (pI === fullpath.length) {
|
|
187
|
+
// if (this.attr && 'KEY' === this.attr.kind) {
|
|
188
|
+
if (modes.includes('KEY')) {
|
|
189
|
+
// let key = fullpath[fullpath.length - ('' === this.attr.part ? 1 : 2)]
|
|
190
|
+
let key = fullpath[fullpath.length - 1];
|
|
191
|
+
let sv = new val_1.StringVal({ peg: null == key ? '' : key }, ctx);
|
|
192
|
+
// TODO: other props?
|
|
193
|
+
sv.done = type_1.DONE;
|
|
194
|
+
sv.path = this.path;
|
|
195
|
+
return sv;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
return node;
|
|
199
|
+
}
|
|
66
200
|
}
|
|
67
|
-
out.done = type_1.DONE === out.done ? type_1.DONE : this.done + 1;
|
|
68
|
-
return out;
|
|
69
201
|
}
|
|
70
202
|
same(peer) {
|
|
71
203
|
return null == peer ? false : this.peg === peer.peg;
|
|
72
204
|
}
|
|
205
|
+
clone(spec, ctx) {
|
|
206
|
+
let out = super.clone({
|
|
207
|
+
peg: this.peg,
|
|
208
|
+
absolute: this.absolute,
|
|
209
|
+
...(spec || {})
|
|
210
|
+
}, ctx);
|
|
211
|
+
// out.absolute = this.absolute
|
|
212
|
+
// out.peg = this.peg
|
|
213
|
+
return out;
|
|
214
|
+
}
|
|
73
215
|
get canon() {
|
|
74
|
-
|
|
216
|
+
let str = (this.absolute ? '$' : '') +
|
|
217
|
+
(0 < this.peg.length ? '.' : '') +
|
|
218
|
+
// this.peg.join(this.sep)
|
|
219
|
+
this.peg.map((p) => '.' === p ? '' :
|
|
220
|
+
(p.isVal ? p.canon : '' + p))
|
|
221
|
+
.join('.');
|
|
222
|
+
return str;
|
|
75
223
|
}
|
|
76
224
|
gen(ctx) {
|
|
77
|
-
// throw new Error('REF ' + this.peg)
|
|
78
225
|
if (ctx) {
|
|
79
226
|
ctx.err.push(Nil_1.Nil.make(ctx, 'ref', this.peg, undefined));
|
|
80
227
|
}
|
|
228
|
+
throw new Error('REF-gen ' + this.peg);
|
|
81
229
|
return undefined;
|
|
82
230
|
}
|
|
83
231
|
}
|