aontu 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/aontu.ts +3 -2
  2. package/dist/aontu.d.ts +2 -2
  3. package/dist/aontu.js +3 -4
  4. package/dist/aontu.js.map +1 -1
  5. package/dist/aontu.min.js +1 -63
  6. package/dist/lib/lang.d.ts +1 -3
  7. package/dist/lib/lang.js +53 -25
  8. package/dist/lib/lang.js.map +1 -1
  9. package/dist/lib/op/disjunct.js +10 -10
  10. package/dist/lib/op/disjunct.js.map +1 -1
  11. package/dist/lib/op/op.d.ts +2 -2
  12. package/dist/lib/op/op.js.map +1 -1
  13. package/dist/lib/op/unite.js +19 -14
  14. package/dist/lib/op/unite.js.map +1 -1
  15. package/dist/lib/type.d.ts +34 -22
  16. package/dist/lib/type.js +23 -76
  17. package/dist/lib/type.js.map +1 -1
  18. package/dist/lib/unify.d.ts +5 -2
  19. package/dist/lib/unify.js +7 -5
  20. package/dist/lib/unify.js.map +1 -1
  21. package/dist/lib/val/ConjunctVal.d.ts +12 -0
  22. package/dist/lib/val/ConjunctVal.js +191 -0
  23. package/dist/lib/val/ConjunctVal.js.map +1 -0
  24. package/dist/lib/val/DisjunctVal.d.ts +12 -0
  25. package/dist/lib/val/DisjunctVal.js +85 -0
  26. package/dist/lib/val/DisjunctVal.js.map +1 -0
  27. package/dist/lib/val/ListVal.d.ts +14 -0
  28. package/dist/lib/val/ListVal.js +91 -0
  29. package/dist/lib/val/ListVal.js.map +1 -0
  30. package/dist/lib/val/MapVal.d.ts +14 -0
  31. package/dist/lib/val/MapVal.js +141 -0
  32. package/dist/lib/val/MapVal.js.map +1 -0
  33. package/dist/lib/val/Nil.d.ts +15 -0
  34. package/dist/lib/val/Nil.js +54 -0
  35. package/dist/lib/val/Nil.js.map +1 -0
  36. package/dist/lib/val/PrefVal.d.ts +12 -0
  37. package/dist/lib/val/PrefVal.js +60 -0
  38. package/dist/lib/val/PrefVal.js.map +1 -0
  39. package/dist/lib/val/RefVal.d.ts +15 -0
  40. package/dist/lib/val/RefVal.js +73 -0
  41. package/dist/lib/val/RefVal.js.map +1 -0
  42. package/dist/lib/val/ValBase.d.ts +22 -0
  43. package/dist/lib/val/ValBase.js +27 -0
  44. package/dist/lib/val/ValBase.js.map +1 -0
  45. package/dist/lib/val.d.ts +6 -93
  46. package/dist/lib/val.js +13 -609
  47. package/dist/lib/val.js.map +1 -1
  48. package/lib/lang.ts +79 -49
  49. package/lib/op/disjunct.ts +14 -8
  50. package/lib/op/op.ts +2 -1
  51. package/lib/op/unite.ts +14 -12
  52. package/lib/type.ts +108 -0
  53. package/lib/unify.ts +10 -8
  54. package/lib/val/ConjunctVal.ts +284 -0
  55. package/lib/val/DisjunctVal.ts +145 -0
  56. package/lib/val/ListVal.ts +154 -0
  57. package/lib/val/MapVal.ts +226 -0
  58. package/lib/val/Nil.ts +94 -0
  59. package/lib/val/PrefVal.ts +113 -0
  60. package/lib/val/RefVal.ts +126 -0
  61. package/lib/val/RefVal.ts~ +319 -0
  62. package/lib/val/ValBase.ts +78 -0
  63. package/lib/val.ts +15 -825
  64. package/package.json +27 -24
  65. package/lib/common.ts +0 -19
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021-2022 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ConjunctVal = exports.norm = void 0;
5
+ const type_1 = require("../type");
6
+ const ValBase_1 = require("../val/ValBase");
7
+ const Nil_1 = require("../val/Nil");
8
+ // import { RefVal } from '../val/RefVal'
9
+ const MapVal_1 = require("../val/MapVal");
10
+ const op_1 = require("../op/op");
11
+ // TODO: move main logic to op/conjunct
12
+ class ConjunctVal extends ValBase_1.ValBase {
13
+ constructor(peg, ctx) {
14
+ super(peg, ctx);
15
+ }
16
+ // NOTE: mutation!
17
+ append(peer) {
18
+ this.peg.push(peer);
19
+ return this;
20
+ }
21
+ unify(peer, ctx) {
22
+ let done = true;
23
+ // Unify each term of conjunct against peer
24
+ let upeer = [];
25
+ for (let vI = 0; vI < this.peg.length; vI++) {
26
+ // upeer[vI] = this.peg[vI].unify(peer, ctx)
27
+ upeer[vI] = (0, op_1.unite)(ctx, this.peg[vI], peer);
28
+ done = done && type_1.DONE === upeer[vI].done;
29
+ // // console.log('Ca', vI, this.peg[vI].canon, peer.canon, upeer[vI].canon)
30
+ if (upeer[vI] instanceof Nil_1.Nil) {
31
+ return Nil_1.Nil.make(ctx, '&peer[' + upeer[vI].canon + ',' + peer.canon + ']', this.peg[vI], peer);
32
+ }
33
+ }
34
+ // // console.log('Cb', upeer.map(x => x.canon))
35
+ upeer = norm(upeer);
36
+ // console.log('CJ AA', upeer.map(x => x.canon))
37
+ let outvals = [];
38
+ let val;
39
+ next_term: for (let pI = 0; pI < upeer.length; pI++) {
40
+ let t0 = upeer[pI];
41
+ // console.log('CJ unify QQ', mark, uc, 't0', pI, t0.canon)
42
+ if (type_1.DONE !== t0.done) {
43
+ let u0 = (0, op_1.unite)(ctx, t0, type_1.TOP);
44
+ if (type_1.DONE !== u0.done
45
+ // Maps and Lists are still unified so that path refs will work
46
+ && !(u0 instanceof MapVal_1.MapVal) // TODO: || ListVal - test!
47
+ ) {
48
+ outvals.push(u0);
49
+ continue next_term;
50
+ }
51
+ else {
52
+ t0 = u0;
53
+ }
54
+ }
55
+ let t1 = upeer[pI + 1];
56
+ // console.log('CJ unify WW', mark, uc, 't1', pI + 1, t1?.canon)
57
+ // if (
58
+ // null == t1 ||
59
+ // t0.id === t1.id ||
60
+ // t0 instanceof RefVal
61
+ // ) {
62
+ // if (DONE !== t0.done) {
63
+ // let u0 = unite(ctx, t0, TOP)
64
+ // // console.log('CJ unify EE', mark, uc, 't0', t0.canon, 'u0', u0.canon)
65
+ // outvals.push(u0)
66
+ // }
67
+ // else {
68
+ // outvals.push(t0)
69
+ // }
70
+ // pI++
71
+ // }
72
+ // else if (DONE !== t0.done || DONE != t1.done) {
73
+ // if (DONE !== t0.done) {
74
+ // let u0 = unite(ctx, t0, TOP)
75
+ // // console.log('CJ unify FF', mark, uc, 't0', t0.canon, 'u0', u0.canon)
76
+ // outvals.push(u0)
77
+ // }
78
+ // else {
79
+ // outvals.push(t0)
80
+ // }
81
+ // }
82
+ if (null == t1) {
83
+ outvals.push(t0);
84
+ }
85
+ else {
86
+ // console.log('CJS unify0', t0?.canon, t1?.canon)
87
+ val = (0, op_1.unite)(ctx, t0, t1);
88
+ done = done && type_1.DONE === val.done;
89
+ if (val instanceof ConjunctVal) {
90
+ if (t0.id === val.peg[0].id) {
91
+ val = t0;
92
+ }
93
+ }
94
+ else if (val instanceof Nil_1.Nil) {
95
+ return val;
96
+ }
97
+ // TODO: t0 should become this to avoid unnecessary repasses
98
+ outvals.push(val);
99
+ pI++;
100
+ }
101
+ }
102
+ // console.log('CJ BB', outvals.map(x => x.canon))
103
+ // // TODO: FIX: conjuncts get replicated inside each other
104
+ // // 1&/x => CV[CV[1&/x]]
105
+ // // Unify each term of conjunct against following sibling,
106
+ // // reducing to smallest conjunct or single val
107
+ // let outvals: Val[] = 0 < upeer.length ? [upeer[0]] : []
108
+ // let oI = 0
109
+ // for (let uI = 1; uI < upeer.length; uI++) {
110
+ // // // console.log('Cu', oI, uI, outvals.map(x => x.canon))
111
+ // if (outvals[oI] instanceof ConjunctVal) {
112
+ // outvals.splice(oI, 0, ...outvals[oI].peg)
113
+ // oI += outvals[oI].peg.length
114
+ // done = false
115
+ // }
116
+ // else {
117
+ // outvals[oI] = null == outvals[oI] ? upeer[uI] :
118
+ // //outvals[oI].unify(upeer[uI], ctx)
119
+ // unite(ctx, outvals[oI], upeer[uI])
120
+ // done = done && DONE === outvals[oI].done
121
+ // // Conjuct fails
122
+ // if (outvals[oI] instanceof Nil) {
123
+ // return outvals[oI]
124
+ // /*
125
+ // return Nil.make(
126
+ // ctx,
127
+ // '&reduce[' + outvals[oI].canon + ',' + upeer[uI].canon + ']',
128
+ // outvals[oI],
129
+ // upeer[uI]
130
+ // )
131
+ // */
132
+ // }
133
+ // }
134
+ // }
135
+ // // console.log('Cc', outvals.map(x => x.canon), outvals)
136
+ let out;
137
+ //let why = ''
138
+ if (0 === outvals.length) {
139
+ //out = Nil.make(ctx, '&empty', this)
140
+ // Empty conjuncts evaporate.
141
+ out = type_1.TOP;
142
+ //why += 'A'
143
+ }
144
+ // TODO: corrects CV[CV[1&/x]] issue above, but swaps term order!
145
+ else if (1 === outvals.length) {
146
+ out = outvals[0];
147
+ //why += 'B'
148
+ }
149
+ else {
150
+ out = new ConjunctVal(outvals, ctx);
151
+ //why += 'C'
152
+ }
153
+ // // console.log('Cd', why, out.peg)
154
+ out.done = done ? type_1.DONE : this.done + 1;
155
+ return out;
156
+ }
157
+ // TODO: need a well-defined val order so conjunt canon is always the same
158
+ get canon() {
159
+ return this.peg.map((v) => v.canon).join('&');
160
+ }
161
+ gen(ctx) {
162
+ if (0 < this.peg.length) {
163
+ // Default is just the first term - does this work?
164
+ // TODO: maybe use a PrefVal() ?
165
+ let v = this.peg[0];
166
+ let out = undefined;
167
+ if (undefined !== v && !(v instanceof Nil_1.Nil)) {
168
+ out = v.gen(ctx);
169
+ }
170
+ return out;
171
+ }
172
+ return undefined;
173
+ }
174
+ }
175
+ exports.ConjunctVal = ConjunctVal;
176
+ function norm(terms) {
177
+ // console.log('CJ norm', terms.map((t: Val) => t.canon))
178
+ let expand = [];
179
+ for (let tI = 0, pI = 0; tI < terms.length; tI++, pI++) {
180
+ if (terms[tI] instanceof ConjunctVal) {
181
+ expand.push(...terms[tI].peg);
182
+ pI += terms[tI].peg.length - 1;
183
+ }
184
+ else {
185
+ expand[pI] = terms[tI];
186
+ }
187
+ }
188
+ return expand;
189
+ }
190
+ exports.norm = norm;
191
+ //# sourceMappingURL=ConjunctVal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConjunctVal.js","sourceRoot":"","sources":["../../../lib/val/ConjunctVal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Val } from '../type';
2
+ import { Context } from '../unify';
3
+ import { Site } from '../lang';
4
+ import { ValBase } from '../val/ValBase';
5
+ declare class DisjunctVal extends ValBase {
6
+ constructor(peg: Val[], ctx?: Context, _sites?: Site[]);
7
+ append(peer: Val): DisjunctVal;
8
+ unify(peer: Val, ctx: Context): Val;
9
+ get canon(): any;
10
+ gen(ctx?: Context): any;
11
+ }
12
+ export { DisjunctVal, };
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021-2022 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DisjunctVal = void 0;
5
+ const type_1 = require("../type");
6
+ const op_1 = require("../op/op");
7
+ const ValBase_1 = require("../val/ValBase");
8
+ const Nil_1 = require("./Nil");
9
+ const PrefVal_1 = require("./PrefVal");
10
+ // TODO: move main logic to op/disjunct
11
+ class DisjunctVal extends ValBase_1.ValBase {
12
+ // TODO: sites from normalization of orginal Disjuncts, as well as child pegs
13
+ constructor(peg, ctx, _sites) {
14
+ super(peg, ctx);
15
+ }
16
+ // NOTE: mutation!
17
+ append(peer) {
18
+ this.peg.push(peer);
19
+ return this;
20
+ }
21
+ unify(peer, ctx) {
22
+ let done = true;
23
+ let oval = [];
24
+ // console.log('oval', this.canon, peer.canon)
25
+ // Conjunction (&) distributes over disjunction (|)
26
+ for (let vI = 0; vI < this.peg.length; vI++) {
27
+ //oval[vI] = this.peg[vI].unify(peer, ctx)
28
+ oval[vI] = (0, op_1.unite)(ctx, this.peg[vI], peer);
29
+ // console.log('ovalA', vI, this.peg[vI].canon, peer.canon, oval[vI].canon)
30
+ done = done && type_1.DONE === oval[vI].done;
31
+ }
32
+ // console.log('ovalB', oval.map(v => v.canon))
33
+ // Remove duplicates, and normalize
34
+ if (1 < oval.length) {
35
+ for (let vI = 0; vI < oval.length; vI++) {
36
+ if (oval[vI] instanceof DisjunctVal) {
37
+ oval.splice(vI, 1, ...oval[vI].peg);
38
+ }
39
+ }
40
+ //console.log('ovalC', oval.map(v => v.canon))
41
+ // TODO: not an error Nil!
42
+ let remove = new Nil_1.Nil();
43
+ for (let vI = 0; vI < oval.length; vI++) {
44
+ for (let kI = vI + 1; kI < oval.length; kI++) {
45
+ if (oval[kI].same(oval[vI])) {
46
+ oval[kI] = remove;
47
+ }
48
+ }
49
+ }
50
+ //console.log('ovalD', oval.map(v => v.canon))
51
+ oval = oval.filter(v => !(v instanceof Nil_1.Nil));
52
+ }
53
+ let out;
54
+ if (1 == oval.length) {
55
+ out = oval[0];
56
+ }
57
+ else if (0 == oval.length) {
58
+ return Nil_1.Nil.make(ctx, '|:empty', this);
59
+ }
60
+ else {
61
+ out = new DisjunctVal(oval, ctx);
62
+ }
63
+ out.done = done ? type_1.DONE : this.done + 1;
64
+ return out;
65
+ }
66
+ get canon() {
67
+ return this.peg.map((v) => v.canon).join('|');
68
+ }
69
+ gen(ctx) {
70
+ // TODO: this is not right - unresolved Disjuncts eval to undef
71
+ if (0 < this.peg.length) {
72
+ let vals = this.peg.filter((v) => v instanceof PrefVal_1.PrefVal);
73
+ vals = 0 === vals.length ? this.peg : vals;
74
+ // console.log(vals.map((m: any) => m.canon))
75
+ let val = vals[0];
76
+ for (let vI = 1; vI < this.peg.length; vI++) {
77
+ val = val.unify(this.peg[vI], ctx);
78
+ }
79
+ return val.gen(ctx);
80
+ }
81
+ return undefined;
82
+ }
83
+ }
84
+ exports.DisjunctVal = DisjunctVal;
85
+ //# sourceMappingURL=DisjunctVal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisjunctVal.js","sourceRoot":"","sources":["../../../lib/val/DisjunctVal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Val, ValList } from '../type';
2
+ import { Context } from '../unify';
3
+ import { ValBase } from '../val/ValBase';
4
+ declare class ListVal extends ValBase {
5
+ static SPREAD: symbol;
6
+ spread: {
7
+ cj: Val | undefined;
8
+ };
9
+ constructor(peg: ValList, ctx?: Context);
10
+ unify(peer: Val, ctx: Context): Val;
11
+ get canon(): string;
12
+ gen(ctx?: Context): any;
13
+ }
14
+ export { ListVal, };
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021-2022 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ListVal = void 0;
5
+ const type_1 = require("../type");
6
+ const op_1 = require("../op/op");
7
+ const Nil_1 = require("../val/Nil");
8
+ const ValBase_1 = require("../val/ValBase");
9
+ const ConjunctVal_1 = require("../val/ConjunctVal");
10
+ class ListVal extends ValBase_1.ValBase {
11
+ constructor(peg, ctx) {
12
+ super(peg, ctx);
13
+ this.spread = {
14
+ cj: undefined,
15
+ };
16
+ let spread = this.peg[ListVal.SPREAD];
17
+ delete this.peg[ListVal.SPREAD];
18
+ if (spread) {
19
+ if ('&' === spread.o) {
20
+ // TODO: handle existing spread!
21
+ this.spread.cj =
22
+ new ConjunctVal_1.ConjunctVal(Array.isArray(spread.v) ? spread.v : [spread.v], ctx);
23
+ }
24
+ }
25
+ }
26
+ // NOTE: order of keys is not preserved!
27
+ // not possible in any case - consider {a,b} unify {b,a}
28
+ unify(peer, ctx) {
29
+ let done = true;
30
+ let out = type_1.TOP === peer ? this : new ListVal([], ctx);
31
+ out.spread.cj = this.spread.cj;
32
+ if (peer instanceof ListVal) {
33
+ out.spread.cj = null == out.spread.cj ? peer.spread.cj : (null == peer.spread.cj ? out.spread.cj : (out.spread.cj = new ConjunctVal_1.ConjunctVal([out.spread.cj, peer.spread.cj], ctx)));
34
+ }
35
+ out.done = this.done + 1;
36
+ if (this.spread.cj) {
37
+ out.spread.cj =
38
+ type_1.DONE !== this.spread.cj.done ? (0, op_1.unite)(ctx, this.spread.cj) :
39
+ this.spread.cj;
40
+ }
41
+ let spread_cj = out.spread.cj || type_1.TOP;
42
+ // Always unify children first
43
+ for (let key in this.peg) {
44
+ out.peg[key] =
45
+ (0, op_1.unite)(ctx.descend(key), this.peg[key], spread_cj);
46
+ done = (done && type_1.DONE === out.peg[key].done);
47
+ }
48
+ if (peer instanceof ListVal) {
49
+ let upeer = (0, op_1.unite)(ctx, peer);
50
+ for (let peerkey in upeer.peg) {
51
+ let peerchild = upeer.peg[peerkey];
52
+ let child = out.peg[peerkey];
53
+ let oval = out.peg[peerkey] =
54
+ undefined === child ? peerchild :
55
+ child instanceof Nil_1.Nil ? child :
56
+ peerchild instanceof Nil_1.Nil ? peerchild :
57
+ (0, op_1.unite)(ctx.descend(peerkey), child, peerchild);
58
+ if (this.spread.cj) {
59
+ out.peg[peerkey] = (0, op_1.unite)(ctx, out.peg[peerkey], spread_cj);
60
+ }
61
+ done = (done && type_1.DONE === oval.done);
62
+ }
63
+ }
64
+ else if (type_1.TOP !== peer) {
65
+ return Nil_1.Nil.make(ctx, 'map', this, peer);
66
+ }
67
+ out.done = done ? type_1.DONE : out.done;
68
+ return out;
69
+ }
70
+ get canon() {
71
+ let keys = Object.keys(this.peg);
72
+ return '[' +
73
+ (this.spread.cj ? '&:' + this.spread.cj.canon +
74
+ (0 < keys.length ? ',' : '') : '') +
75
+ keys
76
+ // NOTE: handle array non-index key vals
77
+ // .map(k => [JSON.stringify(k) + ':' + this.peg[k].canon]).join(',') +
78
+ .map(k => [this.peg[k].canon]).join(',') +
79
+ ']';
80
+ }
81
+ gen(ctx) {
82
+ let out = this.peg.map((v) => v.gen(ctx));
83
+ // for (let p in this.peg) {
84
+ // out[p] = this.peg[p].gen(ctx)
85
+ // }
86
+ return out;
87
+ }
88
+ }
89
+ exports.ListVal = ListVal;
90
+ ListVal.SPREAD = Symbol('spread');
91
+ //# sourceMappingURL=ListVal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListVal.js","sourceRoot":"","sources":["../../../lib/val/ListVal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Val, ValMap } from '../type';
2
+ import { Context } from '../unify';
3
+ import { ValBase } from '../val/ValBase';
4
+ declare class MapVal extends ValBase {
5
+ static SPREAD: symbol;
6
+ spread: {
7
+ cj: Val | undefined;
8
+ };
9
+ constructor(peg: ValMap, ctx?: Context);
10
+ unify(peer: Val, ctx: Context): Val;
11
+ get canon(): string;
12
+ gen(ctx: Context): any;
13
+ }
14
+ export { MapVal };
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.MapVal = void 0;
5
+ const type_1 = require("../type");
6
+ const op_1 = require("../op/op");
7
+ const ValBase_1 = require("../val/ValBase");
8
+ const Nil_1 = require("./Nil");
9
+ const ConjunctVal_1 = require("./ConjunctVal");
10
+ class MapVal extends ValBase_1.ValBase {
11
+ constructor(peg, ctx) {
12
+ super(peg, ctx);
13
+ this.spread = {
14
+ cj: undefined,
15
+ };
16
+ let spread = this.peg[MapVal.SPREAD];
17
+ delete this.peg[MapVal.SPREAD];
18
+ if (spread) {
19
+ if ('&' === spread.o) {
20
+ // TODO: handle existing spread!
21
+ this.spread.cj =
22
+ new ConjunctVal_1.ConjunctVal(Array.isArray(spread.v) ? spread.v : [spread.v], ctx);
23
+ }
24
+ }
25
+ }
26
+ // NOTE: order of keys is not preserved!
27
+ // not possible in any case - consider {a,b} unify {b,a}
28
+ unify(peer, ctx) {
29
+ // console.log('QQQ ctx', !!ctx)
30
+ if (null == ctx) {
31
+ console.trace();
32
+ }
33
+ let done = true;
34
+ let out = type_1.TOP === peer ? this : new MapVal({}, ctx);
35
+ out.spread.cj = this.spread.cj;
36
+ if (peer instanceof MapVal) {
37
+ out.spread.cj = null == out.spread.cj ? peer.spread.cj : (null == peer.spread.cj ? out.spread.cj : (out.spread.cj = new ConjunctVal_1.ConjunctVal([out.spread.cj, peer.spread.cj], ctx)));
38
+ }
39
+ out.done = this.done + 1;
40
+ if (this.spread.cj) {
41
+ //out.spread.cj =
42
+ // DONE !== this.spread.cj.done ? this.spread.cj.unify(TOP, ctx) :
43
+ // this.spread.cj
44
+ out.spread.cj =
45
+ type_1.DONE !== this.spread.cj.done ? (0, op_1.unite)(ctx, this.spread.cj) :
46
+ this.spread.cj;
47
+ }
48
+ // console.log(
49
+ // (' '.repeat(ctx.path.length)),
50
+ // 'MV spread', this.id, peer.id, out.id, '|',
51
+ // this.canon, peer.canon, out.canon, '|',
52
+ // (this.spread.cj || {}).done,
53
+ // (this.spread.cj || {}).canon, (out.spread.cj || {}).canon)
54
+ let spread_cj = out.spread.cj || type_1.TOP;
55
+ // Always unify children first
56
+ for (let key in this.peg) {
57
+ //let oval = out.peg[key] = this.peg[key].unify(spread_cj, ctx.descend(key))
58
+ //let oval =
59
+ out.peg[key] =
60
+ (0, op_1.unite)(ctx.descend(key), this.peg[key], spread_cj);
61
+ done = (done && type_1.DONE === out.peg[key].done);
62
+ //if (oval instanceof Nil) {
63
+ // ctx.err.push(oval)
64
+ //}
65
+ }
66
+ // console.log(
67
+ // (' '.repeat(ctx.path.length)),
68
+ // 'MV child ', this.id, peer.id, out.id, '|',
69
+ // this.canon, peer.canon, out.canon, '|',
70
+ // this.constructor.name,
71
+ // peer.constructor.name,
72
+ // out.constructor.name,
73
+ // )
74
+ if (peer instanceof MapVal) {
75
+ //let upeer: MapVal = (peer.unify(TOP, ctx) as MapVal)
76
+ let upeer = (0, op_1.unite)(ctx, peer);
77
+ // console.log(
78
+ // (' '.repeat(ctx.path.length)),
79
+ // 'MV peer A', this.id, peer.id, out.id, '|',
80
+ // Object.keys(this.peg), Object.keys(upeer.peg), Object.keys(out.peg))
81
+ for (let peerkey in upeer.peg) {
82
+ let peerchild = upeer.peg[peerkey];
83
+ let child = out.peg[peerkey];
84
+ let oval = out.peg[peerkey] =
85
+ undefined === child ? peerchild :
86
+ child instanceof Nil_1.Nil ? child :
87
+ peerchild instanceof Nil_1.Nil ? peerchild :
88
+ //child.unify(peerchild, ctx.descend(peerkey))
89
+ (0, op_1.unite)(ctx.descend(peerkey), child, peerchild);
90
+ if (this.spread.cj) {
91
+ //out.peg[peerkey] = out.peg[peerkey].unify(spread_cj, ctx)
92
+ out.peg[peerkey] = (0, op_1.unite)(ctx, out.peg[peerkey], spread_cj);
93
+ }
94
+ done = (done && type_1.DONE === oval.done);
95
+ if (oval instanceof Nil_1.Nil) {
96
+ // ctx.err.push(oval)
97
+ }
98
+ }
99
+ // console.log(
100
+ // (' '.repeat(ctx.path.length)),
101
+ // 'MV peer B', this.id, peer.id, out.id, '|',
102
+ // Object.keys(this.peg), Object.keys(upeer.peg), Object.keys(out.peg))
103
+ //out.done = done ? DONE : out.done
104
+ // console.log(' '.repeat(W) + 'MV OUT A', this.id, out.done, out.id, out.canon)//this.spread.cj, out.spread.cj)
105
+ // console.log(
106
+ // (' '.repeat(ctx.path.length)),
107
+ // 'MV out ', this.id, peer.id, out.id, '|',
108
+ // this.canon, peer.canon, out.canon, '|',
109
+ // this.constructor.name,
110
+ // peer.constructor.name,
111
+ // out.constructor.name,
112
+ // )
113
+ }
114
+ else if (type_1.TOP !== peer) {
115
+ //out.done = done ? DONE : out.done
116
+ //return (UNIFIER(out, peer, ctx) as MapVal)
117
+ return Nil_1.Nil.make(ctx, 'map', this, peer);
118
+ }
119
+ out.done = done ? type_1.DONE : out.done;
120
+ return out;
121
+ }
122
+ get canon() {
123
+ let keys = Object.keys(this.peg);
124
+ return '{' +
125
+ (this.spread.cj ? '&:' + this.spread.cj.canon +
126
+ (0 < keys.length ? ',' : '') : '') +
127
+ keys
128
+ .map(k => [JSON.stringify(k) + ':' + this.peg[k].canon]).join(',') +
129
+ '}';
130
+ }
131
+ gen(ctx) {
132
+ let out = {};
133
+ for (let p in this.peg) {
134
+ out[p] = this.peg[p].gen(ctx);
135
+ }
136
+ return out;
137
+ }
138
+ }
139
+ exports.MapVal = MapVal;
140
+ MapVal.SPREAD = Symbol('spread');
141
+ //# sourceMappingURL=MapVal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapVal.js","sourceRoot":"","sources":["../../../lib/val/MapVal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Val } from '../type';
2
+ import { Context } from '../unify';
3
+ import { ValBase } from '../val/ValBase';
4
+ declare class Nil extends ValBase {
5
+ nil: boolean;
6
+ why: any;
7
+ primary?: Val;
8
+ secondary?: Val;
9
+ static make: (ctx?: Context, why?: any, av?: Val, bv?: Val) => Nil;
10
+ constructor(why?: any, ctx?: Context);
11
+ unify(_peer: Val, _ctx: Context): this;
12
+ get canon(): string;
13
+ gen(_ctx?: Context): undefined;
14
+ }
15
+ export { Nil, };
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021-2022 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Nil = void 0;
5
+ const type_1 = require("../type");
6
+ const ValBase_1 = require("../val/ValBase");
7
+ class Nil extends ValBase_1.ValBase {
8
+ constructor(why, ctx) {
9
+ super(null, ctx);
10
+ this.nil = true;
11
+ this.why = why;
12
+ // Nil is always DONE, by definition.
13
+ this.done = type_1.DONE;
14
+ }
15
+ unify(_peer, _ctx) {
16
+ return this;
17
+ }
18
+ get canon() {
19
+ return 'nil';
20
+ }
21
+ gen(_ctx) {
22
+ return undefined;
23
+ }
24
+ }
25
+ exports.Nil = Nil;
26
+ // TODO: include Val generating nil, thus capture type
27
+ Nil.make = (ctx, why, av, bv) => {
28
+ let nil = new Nil(why, ctx);
29
+ // TODO: this should be done lazily, for multiple terms
30
+ // Terms later in same file are considered the primary error location.
31
+ if (null != av) {
32
+ nil.row = av.row;
33
+ nil.col = av.col;
34
+ nil.url = av.url;
35
+ nil.primary = av;
36
+ if (null != bv) {
37
+ nil.secondary = bv;
38
+ let bv_loc_wins = (nil.url === bv.url) && ((nil.row < bv.row) ||
39
+ (nil.row === bv.row && nil.col < bv.col));
40
+ if (bv_loc_wins) {
41
+ nil.row = bv.row;
42
+ nil.col = bv.col;
43
+ nil.url = bv.url;
44
+ nil.primary = bv;
45
+ nil.secondary = av;
46
+ }
47
+ }
48
+ }
49
+ if (ctx) {
50
+ ctx.err.push(nil);
51
+ }
52
+ return nil;
53
+ };
54
+ //# sourceMappingURL=Nil.js.map