aontu 0.3.0 → 0.4.2
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/dist/lib/common.d.ts +1 -1
- package/dist/lib/lang.js +19 -11
- package/dist/lib/lang.js.map +1 -1
- package/dist/lib/op/op.d.ts +1 -1
- package/dist/lib/unify.d.ts +1 -1
- package/dist/lib/val.d.ts +3 -3
- package/lib/lang.ts +25 -14
- package/lib/val/RefVal.ts~ +319 -0
- package/package.json +10 -10
package/dist/lib/common.d.ts
CHANGED
package/dist/lib/lang.js
CHANGED
|
@@ -109,10 +109,10 @@ let AontuJsonic = function aontu(jsonic) {
|
|
|
109
109
|
// let orig_bc: any = rs.def.bc
|
|
110
110
|
// rs.def.bc = function(rule: Rule, ctx: Context) {
|
|
111
111
|
// let out = orig_bc.call(this, rule, ctx)
|
|
112
|
-
rs.bc(
|
|
112
|
+
rs.bc((r, ctx) => {
|
|
113
113
|
let valnode = r.node;
|
|
114
114
|
let valtype = typeof valnode;
|
|
115
|
-
// console.log('VAL RULE',
|
|
115
|
+
// console.log('VAL RULE', valtype, r.use, r.node)
|
|
116
116
|
if ('string' === valtype) {
|
|
117
117
|
valnode = addpath(new val_1.StringVal(r.node), r.keep.path);
|
|
118
118
|
}
|
|
@@ -142,7 +142,7 @@ let AontuJsonic = function aontu(jsonic) {
|
|
|
142
142
|
// let orig_bc = rs.def.bc
|
|
143
143
|
// rs.def.bc = function(rule: Rule, ctx: Context) {
|
|
144
144
|
// let out = orig_bc ? orig_bc.call(this, rule, ctx) : undefined
|
|
145
|
-
rs.bc(
|
|
145
|
+
rs.bc((r) => {
|
|
146
146
|
// console.log('MAP RULE', rule.use, rule.node)
|
|
147
147
|
r.node = addpath(new val_1.MapVal(r.node), r.keep.path);
|
|
148
148
|
// return out
|
|
@@ -154,7 +154,7 @@ let AontuJsonic = function aontu(jsonic) {
|
|
|
154
154
|
// let orig_bc = rs.def.bc
|
|
155
155
|
// rs.def.bc = function(rule: Rule, ctx: Context) {
|
|
156
156
|
// let out = orig_bc ? orig_bc.call(this, rule, ctx) : undefined
|
|
157
|
-
rs.bc(
|
|
157
|
+
rs.bc((r) => {
|
|
158
158
|
r.node = addpath(new val_1.ListVal(r.node), r.keep.path);
|
|
159
159
|
// return out
|
|
160
160
|
return undefined;
|
|
@@ -162,15 +162,9 @@ let AontuJsonic = function aontu(jsonic) {
|
|
|
162
162
|
return rs;
|
|
163
163
|
});
|
|
164
164
|
jsonic.rule('pair', (rs) => {
|
|
165
|
-
// let orig_bc: any = rs.def.bc
|
|
166
165
|
rs
|
|
167
166
|
.open([{ s: [CJ, CL], p: 'val', u: { spread: true }, g: 'spread' }])
|
|
168
|
-
|
|
169
|
-
// orig_bc(...rest)
|
|
170
|
-
.bc(false, (rule) => {
|
|
171
|
-
// let rule = rest[0]
|
|
172
|
-
// console.log('PAIR RULE', rule.use, rule.node,
|
|
173
|
-
// rule.parent.name, rule.parent.use)
|
|
167
|
+
.bc((rule) => {
|
|
174
168
|
// TRAVERSE PARENTS TO GET PATH
|
|
175
169
|
if (rule.use.spread) {
|
|
176
170
|
rule.node[val_1.MapVal.SPREAD] =
|
|
@@ -181,6 +175,20 @@ let AontuJsonic = function aontu(jsonic) {
|
|
|
181
175
|
});
|
|
182
176
|
return rs;
|
|
183
177
|
});
|
|
178
|
+
jsonic.rule('elem', (rs) => {
|
|
179
|
+
rs
|
|
180
|
+
.open([{ s: [CJ, CL], p: 'val', u: { spread: true }, g: 'spread' }])
|
|
181
|
+
.bc((rule) => {
|
|
182
|
+
// TRAVERSE PARENTS TO GET PATH
|
|
183
|
+
if (rule.use.spread) {
|
|
184
|
+
rule.node[val_1.ListVal.SPREAD] =
|
|
185
|
+
(rule.node[val_1.ListVal.SPREAD] || { o: rule.o0.src, v: [] });
|
|
186
|
+
rule.node[val_1.ListVal.SPREAD].v.push(rule.child.node);
|
|
187
|
+
}
|
|
188
|
+
return undefined;
|
|
189
|
+
});
|
|
190
|
+
return rs;
|
|
191
|
+
});
|
|
184
192
|
};
|
|
185
193
|
const includeFileResolver = (0, file_1.makeFileResolver)((spec) => {
|
|
186
194
|
return 'string' === typeof spec ? spec : spec === null || spec === void 0 ? void 0 : spec.peg;
|
package/dist/lib/lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lang.js","sourceRoot":"","sources":["../../lib/lang.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAEpD,qDAM4B;AAE5B,qDAE4B;AAE5B,iEAE+C;AAE/C,uCAGqB;AAErB,uCAEqB;AAQrB,+BAgBc;AAGd,MAAM,IAAI;IAOR,YAAY,GAAQ;QANpB,QAAG,GAAW,CAAC,CAAC,CAAA;QAChB,QAAG,GAAW,CAAC,CAAC,CAAA;QAChB,QAAG,GAAW,EAAE,CAAA;QAKd,iEAAiE;QACjE,gCAAgC;QAChC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAA;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAA;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAA;IACpB,CAAC;;
|
|
1
|
+
{"version":3,"file":"lang.js","sourceRoot":"","sources":["../../lib/lang.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/op/op.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ import { Context } from '../unify';
|
|
|
2
2
|
import { Val } from '../val';
|
|
3
3
|
import { disjunct } from './disjunct';
|
|
4
4
|
import { unite } from './unite';
|
|
5
|
-
|
|
5
|
+
type Operation = (ctx: Context, a?: Val, b?: Val, whence?: string) => Val;
|
|
6
6
|
export { Operation, disjunct, unite, };
|
package/dist/lib/unify.d.ts
CHANGED
package/dist/lib/val.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Context } from './unify';
|
|
2
2
|
import { Site } from './lang';
|
|
3
|
-
|
|
3
|
+
type ValMap = {
|
|
4
4
|
[key: string]: Val;
|
|
5
5
|
};
|
|
6
|
-
|
|
6
|
+
type ValList = Val[];
|
|
7
7
|
declare const DONE = -1;
|
|
8
8
|
declare const TOP: Val;
|
|
9
9
|
declare abstract class Val {
|
|
@@ -37,7 +37,7 @@ declare class Nil extends Val {
|
|
|
37
37
|
}
|
|
38
38
|
declare class Integer {
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
type ScalarConstructor = StringConstructor | NumberConstructor | BooleanConstructor | (typeof Integer.constructor);
|
|
41
41
|
declare class ScalarTypeVal extends Val {
|
|
42
42
|
constructor(peg: ScalarConstructor, ctx?: Context);
|
|
43
43
|
unify(peer: Val, ctx: Context): Val;
|
package/lib/lang.ts
CHANGED
|
@@ -187,12 +187,12 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
187
187
|
// rs.def.bc = function(rule: Rule, ctx: Context) {
|
|
188
188
|
// let out = orig_bc.call(this, rule, ctx)
|
|
189
189
|
|
|
190
|
-
rs.bc(
|
|
190
|
+
rs.bc((r: Rule, ctx: Context) => {
|
|
191
191
|
|
|
192
192
|
let valnode: Val = r.node
|
|
193
193
|
let valtype = typeof valnode
|
|
194
194
|
|
|
195
|
-
// console.log('VAL RULE',
|
|
195
|
+
// console.log('VAL RULE', valtype, r.use, r.node)
|
|
196
196
|
|
|
197
197
|
if ('string' === valtype) {
|
|
198
198
|
valnode = addpath(new StringVal(r.node), r.keep.path)
|
|
@@ -232,7 +232,7 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
232
232
|
// rs.def.bc = function(rule: Rule, ctx: Context) {
|
|
233
233
|
// let out = orig_bc ? orig_bc.call(this, rule, ctx) : undefined
|
|
234
234
|
|
|
235
|
-
rs.bc(
|
|
235
|
+
rs.bc((r: Rule) => {
|
|
236
236
|
|
|
237
237
|
// console.log('MAP RULE', rule.use, rule.node)
|
|
238
238
|
r.node = addpath(new MapVal(r.node), r.keep.path)
|
|
@@ -250,7 +250,7 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
250
250
|
// rs.def.bc = function(rule: Rule, ctx: Context) {
|
|
251
251
|
// let out = orig_bc ? orig_bc.call(this, rule, ctx) : undefined
|
|
252
252
|
|
|
253
|
-
rs.bc(
|
|
253
|
+
rs.bc((r: Rule) => {
|
|
254
254
|
r.node = addpath(new ListVal(r.node), r.keep.path)
|
|
255
255
|
|
|
256
256
|
// return out
|
|
@@ -263,19 +263,10 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
263
263
|
|
|
264
264
|
|
|
265
265
|
jsonic.rule('pair', (rs: RuleSpec) => {
|
|
266
|
-
// let orig_bc: any = rs.def.bc
|
|
267
266
|
rs
|
|
268
267
|
.open([{ s: [CJ, CL], p: 'val', u: { spread: true }, g: 'spread' }])
|
|
269
268
|
|
|
270
|
-
|
|
271
|
-
// orig_bc(...rest)
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
.bc(false, (rule: Rule) => {
|
|
275
|
-
// let rule = rest[0]
|
|
276
|
-
// console.log('PAIR RULE', rule.use, rule.node,
|
|
277
|
-
// rule.parent.name, rule.parent.use)
|
|
278
|
-
|
|
269
|
+
.bc((rule: Rule) => {
|
|
279
270
|
// TRAVERSE PARENTS TO GET PATH
|
|
280
271
|
|
|
281
272
|
if (rule.use.spread) {
|
|
@@ -290,6 +281,26 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
290
281
|
return rs
|
|
291
282
|
})
|
|
292
283
|
|
|
284
|
+
|
|
285
|
+
jsonic.rule('elem', (rs: RuleSpec) => {
|
|
286
|
+
rs
|
|
287
|
+
.open([{ s: [CJ, CL], p: 'val', u: { spread: true }, g: 'spread' }])
|
|
288
|
+
|
|
289
|
+
.bc((rule: Rule) => {
|
|
290
|
+
// TRAVERSE PARENTS TO GET PATH
|
|
291
|
+
|
|
292
|
+
if (rule.use.spread) {
|
|
293
|
+
rule.node[ListVal.SPREAD] =
|
|
294
|
+
(rule.node[ListVal.SPREAD] || { o: rule.o0.src, v: [] })
|
|
295
|
+
rule.node[ListVal.SPREAD].v.push(rule.child.node)
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return undefined
|
|
299
|
+
})
|
|
300
|
+
|
|
301
|
+
return rs
|
|
302
|
+
})
|
|
303
|
+
|
|
293
304
|
}
|
|
294
305
|
|
|
295
306
|
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/* Copyright (c) 2021 Richard Rodger, MIT License */
|
|
2
|
+
|
|
3
|
+
// TODO: infinite recursion protection
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
// NOTES
|
|
7
|
+
// - Vals are immutable
|
|
8
|
+
// - each Val must handle all parent and child unifications explicitly
|
|
9
|
+
// - performance is not considered yet
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
|
|
15
|
+
TOP -> Scalar/Boolean -> BooleanVal
|
|
16
|
+
-> Scalar/String -> StringVal
|
|
17
|
+
-> Scalar/Number -> NumberVal -> IntegerVal
|
|
18
|
+
-> Scalar/Integer
|
|
19
|
+
-> Scalar/Integer -> IntegerVal
|
|
20
|
+
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
import type {
|
|
25
|
+
Val,
|
|
26
|
+
ValMap,
|
|
27
|
+
ValList,
|
|
28
|
+
} from './type'
|
|
29
|
+
|
|
30
|
+
import {
|
|
31
|
+
DONE,
|
|
32
|
+
TOP,
|
|
33
|
+
} from './type'
|
|
34
|
+
|
|
35
|
+
import {
|
|
36
|
+
Context,
|
|
37
|
+
} from './unify'
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
import {
|
|
41
|
+
Site
|
|
42
|
+
} from './lang'
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
import {
|
|
46
|
+
unite
|
|
47
|
+
} from './op/op'
|
|
48
|
+
|
|
49
|
+
import { Nil } from './val/Nil'
|
|
50
|
+
|
|
51
|
+
import {
|
|
52
|
+
ValBase,
|
|
53
|
+
} from './val/ValBase'
|
|
54
|
+
|
|
55
|
+
import { ConjunctVal } from './val/ConjunctVal'
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
// A ScalarType for integers. Number includes floats.
|
|
63
|
+
class Integer { }
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
type ScalarConstructor =
|
|
68
|
+
StringConstructor |
|
|
69
|
+
NumberConstructor |
|
|
70
|
+
BooleanConstructor |
|
|
71
|
+
(typeof Integer.constructor)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class ScalarTypeVal extends ValBase {
|
|
75
|
+
constructor(peg: ScalarConstructor, ctx?: Context) {
|
|
76
|
+
super(peg, ctx)
|
|
77
|
+
this.done = DONE
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
unify(peer: Val, ctx: Context): Val {
|
|
81
|
+
if (peer instanceof ScalarVal) {
|
|
82
|
+
if (peer.type === this.peg) {
|
|
83
|
+
return peer
|
|
84
|
+
}
|
|
85
|
+
else if (Number === this.peg && Integer === peer.type) {
|
|
86
|
+
return peer
|
|
87
|
+
}
|
|
88
|
+
return Nil.make(ctx, 'no-scalar-unify', this, peer)
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
if (peer instanceof ScalarTypeVal) {
|
|
92
|
+
if (Number === this.peg && Integer === peer.peg) {
|
|
93
|
+
return peer
|
|
94
|
+
}
|
|
95
|
+
else if (Number === peer.peg && Integer === this.peg) {
|
|
96
|
+
return this
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return Nil.make(ctx, 'scalar-type', this, peer)
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
get canon() {
|
|
104
|
+
let ctor = (this.peg as any)
|
|
105
|
+
return ctor.name.toLowerCase()
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
same(peer: Val): boolean {
|
|
109
|
+
return peer instanceof ScalarTypeVal ? this.peg === peer.peg : super.same(peer)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
gen(_ctx?: Context) {
|
|
113
|
+
return undefined
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class ScalarVal<T> extends ValBase {
|
|
120
|
+
type: any
|
|
121
|
+
constructor(peg: T, type: ScalarConstructor, ctx?: Context) {
|
|
122
|
+
super(peg, ctx)
|
|
123
|
+
this.type = type
|
|
124
|
+
this.done = DONE
|
|
125
|
+
}
|
|
126
|
+
unify(peer: Val, ctx: Context): Val {
|
|
127
|
+
// Exactly equal scalars are handled in op/unite
|
|
128
|
+
if (peer instanceof ScalarTypeVal) {
|
|
129
|
+
return peer.unify(this, ctx)
|
|
130
|
+
}
|
|
131
|
+
return Nil.make(ctx, 'scalar', this, peer)
|
|
132
|
+
}
|
|
133
|
+
get canon() {
|
|
134
|
+
return (this.peg as any).toString()
|
|
135
|
+
}
|
|
136
|
+
same(peer: Val): boolean {
|
|
137
|
+
return peer instanceof ScalarVal ? peer.peg === this.peg : super.same(peer)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
gen(_ctx?: Context) {
|
|
141
|
+
return this.peg
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class NumberVal extends ScalarVal<number> {
|
|
147
|
+
constructor(peg: number, ctx?: Context) {
|
|
148
|
+
super(peg, Number, ctx)
|
|
149
|
+
}
|
|
150
|
+
unify(peer: Val, ctx: Context): Val {
|
|
151
|
+
if (peer instanceof ScalarVal && peer.type === Integer) {
|
|
152
|
+
return peer
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return super.unify(peer, ctx)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class IntegerVal extends ScalarVal<number> {
|
|
162
|
+
constructor(peg: number, ctx?: Context) {
|
|
163
|
+
if (!Number.isInteger(peg)) {
|
|
164
|
+
// TODO: use Nil?
|
|
165
|
+
throw new Error('not-integer')
|
|
166
|
+
}
|
|
167
|
+
super(peg, Integer, ctx)
|
|
168
|
+
}
|
|
169
|
+
unify(peer: Val, ctx: Context): Val {
|
|
170
|
+
if (peer instanceof ScalarTypeVal && peer.peg === Number) {
|
|
171
|
+
return this
|
|
172
|
+
}
|
|
173
|
+
else if (peer instanceof ScalarVal &&
|
|
174
|
+
peer.type === Number &&
|
|
175
|
+
this.peg === peer.peg) {
|
|
176
|
+
return this
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
return super.unify(peer, ctx)
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
class StringVal extends ScalarVal<string> {
|
|
186
|
+
constructor(peg: string, ctx?: Context) {
|
|
187
|
+
super(peg, String, ctx)
|
|
188
|
+
}
|
|
189
|
+
unify(peer: Val, ctx: Context): Val {
|
|
190
|
+
return super.unify(peer, ctx)
|
|
191
|
+
}
|
|
192
|
+
get canon() {
|
|
193
|
+
return JSON.stringify(this.peg)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
class BooleanVal extends ScalarVal<boolean> {
|
|
200
|
+
constructor(peg: boolean, ctx?: Context) {
|
|
201
|
+
super(peg, Boolean, ctx)
|
|
202
|
+
}
|
|
203
|
+
unify(peer: Val, ctx: Context): Val {
|
|
204
|
+
return super.unify(peer, ctx)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
static TRUE = new BooleanVal(true, new Context({ vc: 1, root: TOP }))
|
|
208
|
+
static FALSE = new BooleanVal(false, new Context({ vc: 2, root: TOP }))
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
class RefVal extends ValBase {
|
|
226
|
+
parts: string[]
|
|
227
|
+
absolute: boolean
|
|
228
|
+
sep = '.'
|
|
229
|
+
|
|
230
|
+
constructor(peg: any[], abs?: boolean) {
|
|
231
|
+
super('')
|
|
232
|
+
this.absolute = true === abs
|
|
233
|
+
this.parts = []
|
|
234
|
+
|
|
235
|
+
for (let part of peg) {
|
|
236
|
+
this.append(part)
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
append(part: any) {
|
|
242
|
+
//console.log('APPEND 0', part)
|
|
243
|
+
|
|
244
|
+
if ('string' === typeof part) {
|
|
245
|
+
this.parts.push(part)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
else if (part instanceof StringVal) {
|
|
249
|
+
this.parts.push(part.peg)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
else if (part instanceof RefVal) {
|
|
253
|
+
this.parts.push(...part.parts)
|
|
254
|
+
|
|
255
|
+
if (part.absolute) {
|
|
256
|
+
this.absolute = true
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
this.peg = (this.absolute ? this.sep : '') + this.parts.join(this.sep)
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
unify(peer: Val, ctx: Context): Val {
|
|
264
|
+
let resolved: Val | undefined = null == ctx ? this : ctx.find(this)
|
|
265
|
+
|
|
266
|
+
// TODO: large amount of reruns needed? why?
|
|
267
|
+
resolved = null == resolved && 999 < this.done ?
|
|
268
|
+
Nil.make(ctx, 'no-path', this, peer) : (resolved || this)
|
|
269
|
+
let out: Val
|
|
270
|
+
|
|
271
|
+
if (resolved instanceof RefVal) {
|
|
272
|
+
if (TOP === peer) {
|
|
273
|
+
out = this
|
|
274
|
+
}
|
|
275
|
+
else if (peer instanceof Nil) {
|
|
276
|
+
out = Nil.make(ctx, 'ref[' + this.peg + ']', this, peer)
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
// Ensure RefVal done is incremented
|
|
280
|
+
this.done = DONE === this.done ? DONE : this.done + 1
|
|
281
|
+
out = new ConjunctVal([this, peer], ctx)
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
out = unite(ctx, resolved, peer)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
out.done = DONE === out.done ? DONE : this.done + 1
|
|
289
|
+
|
|
290
|
+
return out
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
same(peer: Val): boolean {
|
|
295
|
+
return null == peer ? false : this.peg === peer.peg
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
get canon() {
|
|
300
|
+
return this.peg
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
gen(_ctx?: Context) {
|
|
305
|
+
return undefined
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
export {
|
|
311
|
+
Integer,
|
|
312
|
+
TOP,
|
|
313
|
+
ScalarTypeVal,
|
|
314
|
+
NumberVal,
|
|
315
|
+
StringVal,
|
|
316
|
+
BooleanVal,
|
|
317
|
+
IntegerVal,
|
|
318
|
+
RefVal,
|
|
319
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aontu",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"main": "dist/aontu.js",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"browser": "dist/aontu.min.js",
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
"LICENSE"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@jsonic/directive": "
|
|
43
|
-
"@jsonic/expr": "
|
|
44
|
-
"@jsonic/jsonic-next": "2.
|
|
45
|
-
"@jsonic/multisource": "0.
|
|
46
|
-
"@jsonic/path": "
|
|
47
|
-
"@types/node": "^18.0.
|
|
42
|
+
"@jsonic/directive": "0.8.0",
|
|
43
|
+
"@jsonic/expr": "0.5.0",
|
|
44
|
+
"@jsonic/jsonic-next": "2.3.0",
|
|
45
|
+
"@jsonic/multisource": "0.7.0",
|
|
46
|
+
"@jsonic/path": "0.2.0",
|
|
47
|
+
"@types/node": "^18.0.3"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@hapi/code": "^9.0.1",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"hapi-lab-shim": "0.0.2",
|
|
55
55
|
"lab-transform-typescript": "^3.0.1",
|
|
56
56
|
"prettier": "^2.7.1",
|
|
57
|
-
"serve": "^
|
|
58
|
-
"tinyify": "^3.
|
|
59
|
-
"typescript": "^4.7.
|
|
57
|
+
"serve": "^14.0.0",
|
|
58
|
+
"tinyify": "^3.1.0",
|
|
59
|
+
"typescript": "^4.7.4"
|
|
60
60
|
}
|
|
61
61
|
}
|