aontu 0.3.0 → 0.6.1

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 +47 -30
  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 +1 -1
  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 +33 -22
  16. package/dist/lib/type.js +22 -76
  17. package/dist/lib/type.js.map +1 -1
  18. package/dist/lib/unify.d.ts +4 -1
  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 +25 -0
  44. package/dist/lib/val/ValBase.js.map +1 -0
  45. package/dist/lib/val.d.ts +5 -90
  46. package/dist/lib/val.js +13 -593
  47. package/dist/lib/val.js.map +1 -1
  48. package/lib/lang.ts +77 -59
  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 +104 -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 +76 -0
  63. package/lib/val.ts +15 -802
  64. package/package.json +27 -23
  65. package/lib/common.ts +0 -19
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Nil.js","sourceRoot":"","sources":["../../../lib/val/Nil.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAOzD,kCAEgB;AAOhB,4CAEuB;AAMvB,MAAM,GAAI,SAAQ,iBAAO;IA8CvB,YAAY,GAAS,EAAE,GAAa;QAClC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QA9ClB,QAAG,GAAG,IAAI,CAAA;QA+CR,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QAEd,qCAAqC;QACrC,IAAI,CAAC,IAAI,GAAG,WAAI,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,KAAU,EAAE,IAAa;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,KAAK;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IAED,GAAG,CAAC,IAAc;QAChB,OAAO,SAAS,CAAA;IAClB,CAAC;;AAID,kBAAG;AA9DH,sDAAsD;AAC/C,QAAI,GAAG,CAAC,GAAa,EAAE,GAAS,EAAE,EAAQ,EAAE,EAAQ,EAAE,EAAE;IAC7D,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAE3B,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,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { Val } from '../type';
2
+ import { Context } from '../unify';
3
+ import { ValBase } from '../val/ValBase';
4
+ declare class PrefVal extends ValBase {
5
+ pref: Val;
6
+ constructor(peg: any, pref?: any, ctx?: Context);
7
+ unify(peer: Val, ctx: Context): Val;
8
+ same(peer: Val): boolean;
9
+ get canon(): any;
10
+ gen(ctx?: Context): any;
11
+ }
12
+ export { PrefVal, };
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021-2022 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PrefVal = 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
+ class PrefVal extends ValBase_1.ValBase {
10
+ constructor(peg, pref, ctx) {
11
+ super(peg, ctx);
12
+ this.pref = pref || peg;
13
+ }
14
+ // PrefVal unify always returns a PrefVal
15
+ // PrefVals can only be removed by becoming Nil in a Disjunct
16
+ unify(peer, ctx) {
17
+ let done = true;
18
+ let out;
19
+ if (peer instanceof PrefVal) {
20
+ out = new PrefVal((0, op_1.unite)(ctx, this.peg, peer.peg, 'Pref000'), (0, op_1.unite)(ctx, this.pref, peer.pref, 'Pref010'), ctx);
21
+ }
22
+ else {
23
+ out = new PrefVal(
24
+ // TODO: find a better way to drop Nil non-errors
25
+ (0, op_1.unite)(ctx === null || ctx === void 0 ? void 0 : ctx.clone({ err: [] }), this.peg, peer, 'Pref020'), (0, op_1.unite)(ctx === null || ctx === void 0 ? void 0 : ctx.clone({ err: [] }), this.pref, peer, 'Pref030'), ctx);
26
+ }
27
+ done = done && type_1.DONE === out.peg.done &&
28
+ (null != out.pref ? type_1.DONE === out.pref.done : true);
29
+ if (out.peg instanceof Nil_1.Nil) {
30
+ out = out.pref;
31
+ }
32
+ else if (out.pref instanceof Nil_1.Nil) {
33
+ out = out.peg;
34
+ }
35
+ out.done = done ? type_1.DONE : this.done + 1;
36
+ return out;
37
+ }
38
+ same(peer) {
39
+ if (null == peer) {
40
+ return false;
41
+ }
42
+ let pegsame = (this.peg === peer.peg) ||
43
+ (this.peg instanceof ValBase_1.ValBase && this.peg.same(peer.peg));
44
+ let prefsame = peer instanceof PrefVal &&
45
+ ((this.pref === peer.pref) ||
46
+ (this.pref instanceof ValBase_1.ValBase && this.pref.same(peer.pref)));
47
+ return pegsame && prefsame;
48
+ }
49
+ get canon() {
50
+ return this.pref instanceof Nil_1.Nil ? this.peg.canon : '*' + this.pref.canon;
51
+ }
52
+ gen(ctx) {
53
+ let val = !(this.pref instanceof Nil_1.Nil) ? this.pref :
54
+ !(this.peg instanceof Nil_1.Nil) ? this.peg :
55
+ undefined;
56
+ return undefined === val ? undefined : val.gen(ctx);
57
+ }
58
+ }
59
+ exports.PrefVal = PrefVal;
60
+ //# sourceMappingURL=PrefVal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrefVal.js","sourceRoot":"","sources":["../../../lib/val/PrefVal.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 RefVal extends ValBase {
5
+ parts: string[];
6
+ absolute: boolean;
7
+ sep: string;
8
+ constructor(peg: any[], abs?: boolean);
9
+ append(part: any): void;
10
+ unify(peer: Val, ctx: Context): Val;
11
+ same(peer: Val): boolean;
12
+ get canon(): any;
13
+ gen(_ctx?: Context): undefined;
14
+ }
15
+ export { RefVal, };
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RefVal = 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
+ const val_1 = require("../val");
11
+ class RefVal extends ValBase_1.ValBase {
12
+ constructor(peg, abs) {
13
+ super('');
14
+ this.sep = '.';
15
+ this.absolute = true === abs;
16
+ this.parts = [];
17
+ for (let part of peg) {
18
+ this.append(part);
19
+ }
20
+ }
21
+ append(part) {
22
+ //console.log('APPEND 0', part)
23
+ if ('string' === typeof part) {
24
+ this.parts.push(part);
25
+ }
26
+ else if (part instanceof val_1.StringVal) {
27
+ this.parts.push(part.peg);
28
+ }
29
+ else if (part instanceof RefVal) {
30
+ this.parts.push(...part.parts);
31
+ if (part.absolute) {
32
+ this.absolute = true;
33
+ }
34
+ }
35
+ this.peg = (this.absolute ? this.sep : '') + this.parts.join(this.sep);
36
+ }
37
+ unify(peer, ctx) {
38
+ let resolved = null == ctx ? this : ctx.find(this);
39
+ // TODO: large amount of reruns needed? why?
40
+ resolved = null == resolved && 999 < this.done ?
41
+ Nil_1.Nil.make(ctx, 'no-path', this, peer) : (resolved || this);
42
+ let out;
43
+ if (resolved instanceof RefVal) {
44
+ if (type_1.TOP === peer) {
45
+ out = this;
46
+ }
47
+ else if (peer instanceof Nil_1.Nil) {
48
+ out = Nil_1.Nil.make(ctx, 'ref[' + this.peg + ']', this, peer);
49
+ }
50
+ else {
51
+ // Ensure RefVal done is incremented
52
+ this.done = type_1.DONE === this.done ? type_1.DONE : this.done + 1;
53
+ out = new ConjunctVal_1.ConjunctVal([this, peer], ctx);
54
+ }
55
+ }
56
+ else {
57
+ out = (0, op_1.unite)(ctx, resolved, peer);
58
+ }
59
+ out.done = type_1.DONE === out.done ? type_1.DONE : this.done + 1;
60
+ return out;
61
+ }
62
+ same(peer) {
63
+ return null == peer ? false : this.peg === peer.peg;
64
+ }
65
+ get canon() {
66
+ return this.peg;
67
+ }
68
+ gen(_ctx) {
69
+ return undefined;
70
+ }
71
+ }
72
+ exports.RefVal = RefVal;
73
+ //# sourceMappingURL=RefVal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RefVal.js","sourceRoot":"","sources":["../../../lib/val/RefVal.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAUpD,kCAGgB;AAYhB,iCAEiB;AAEjB,oCAAgC;AAEhC,4CAAwC;AACxC,oDAAgD;AAEhD,gCAAkC;AAIlC,MAAM,MAAO,SAAQ,iBAAO;IAK1B,YAAY,GAAU,EAAE,GAAa;QACnC,KAAK,CAAC,EAAE,CAAC,CAAA;QAHX,QAAG,GAAG,GAAG,CAAA;QAIP,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,GAAG,CAAA;QAC5B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QAEf,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;SAClB;IACH,CAAC;IAGD,MAAM,CAAC,IAAS;QACd,+BAA+B;QAE/B,IAAI,QAAQ,KAAK,OAAO,IAAI,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SACtB;aAEI,IAAI,IAAI,YAAY,eAAS,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAC1B;aAEI,IAAI,IAAI,YAAY,MAAM,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YAE9B,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;aACrB;SACF;QAED,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxE,CAAC;IAED,KAAK,CAAC,IAAS,EAAE,GAAY;QAC3B,IAAI,QAAQ,GAAoB,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEnE,4CAA4C;QAC5C,QAAQ,GAAG,IAAI,IAAI,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,SAAG,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAA;QAC3D,IAAI,GAAQ,CAAA;QAEZ,IAAI,QAAQ,YAAY,MAAM,EAAE;YAC9B,IAAI,UAAG,KAAK,IAAI,EAAE;gBAChB,GAAG,GAAG,IAAI,CAAA;aACX;iBACI,IAAI,IAAI,YAAY,SAAG,EAAE;gBAC5B,GAAG,GAAG,SAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;aACzD;iBACI;gBACH,oCAAoC;gBACpC,IAAI,CAAC,IAAI,GAAG,WAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;gBACrD,GAAG,GAAG,IAAI,yBAAW,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;aACzC;SACF;aACI;YACH,GAAG,GAAG,IAAA,UAAK,EAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;SACjC;QAED,GAAG,CAAC,IAAI,GAAG,WAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QAEnD,OAAO,GAAG,CAAA;IACZ,CAAC;IAGD,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAA;IACrD,CAAC;IAGD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAGD,GAAG,CAAC,IAAc;QAChB,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AAIC,wBAAM"}
@@ -0,0 +1,22 @@
1
+ import type { Val } from '../type';
2
+ import { Context } from '../unify';
3
+ import { Site } from '../lang';
4
+ declare abstract class ValBase implements Val {
5
+ id: number;
6
+ done: number;
7
+ path: string[];
8
+ row: number;
9
+ col: number;
10
+ url: string;
11
+ top?: boolean;
12
+ peg?: any;
13
+ err?: any[];
14
+ deps?: any;
15
+ constructor(peg?: any, ctx?: Context);
16
+ same(peer: Val): boolean;
17
+ get site(): Site;
18
+ abstract unify(peer: Val, ctx?: Context): Val;
19
+ abstract get canon(): string;
20
+ abstract gen(ctx?: Context): any;
21
+ }
22
+ export { ValBase, };