aontu 0.0.7 → 0.1.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.
- package/aontu.ts +33 -13
- package/dist/aontu.d.ts +4 -6
- package/dist/aontu.js +30 -5
- package/dist/aontu.js.map +1 -1
- package/dist/aontu.min.js +63 -1
- package/dist/lib/common.d.ts +4 -4
- package/dist/lib/lang.d.ts +11 -2
- package/dist/lib/lang.js +306 -199
- package/dist/lib/lang.js.map +1 -1
- package/dist/lib/op/disjunct.d.ts +3 -0
- package/dist/lib/op/disjunct.js +28 -0
- package/dist/lib/op/disjunct.js.map +1 -0
- package/dist/lib/op/op.d.ts +6 -0
- package/dist/lib/op/op.js +9 -0
- package/dist/lib/op/op.js.map +1 -0
- package/dist/lib/op/unite.d.ts +3 -0
- package/dist/lib/op/unite.js +53 -0
- package/dist/lib/op/unite.js.map +1 -0
- package/dist/lib/unify.d.ts +18 -4
- package/dist/lib/unify.js +32 -8
- package/dist/lib/unify.js.map +1 -1
- package/dist/lib/val.d.ts +59 -44
- package/dist/lib/val.js +377 -220
- package/dist/lib/val.js.map +1 -1
- package/lib/common.ts +7 -5
- package/lib/lang.ts +360 -211
- package/lib/op/disjunct.ts +39 -0
- package/lib/op/op.ts +17 -0
- package/lib/op/unite.ts +82 -0
- package/lib/unify.ts +70 -10
- package/lib/val.ts +488 -244
- package/package.json +16 -13
package/dist/lib/lang.js
CHANGED
|
@@ -1,31 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/* Copyright (c) 2021 Richard Rodger, MIT License */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.Lang = void 0;
|
|
4
|
+
exports.includeFileResolver = exports.Site = exports.Lang = void 0;
|
|
5
5
|
const jsonic_1 = require("jsonic");
|
|
6
6
|
const multisource_1 = require("@jsonic/multisource");
|
|
7
|
+
const file_1 = require("@jsonic/multisource/dist/resolver/file");
|
|
8
|
+
const expr_1 = require("@jsonic/expr");
|
|
7
9
|
const val_1 = require("./val");
|
|
10
|
+
class Site {
|
|
11
|
+
constructor(val) {
|
|
12
|
+
this.row = -1;
|
|
13
|
+
this.col = -1;
|
|
14
|
+
this.url = '';
|
|
15
|
+
// TODO: logic to select most meaningful site if val has no site,
|
|
16
|
+
// but has peg children that do.
|
|
17
|
+
this.row = val.row;
|
|
18
|
+
this.col = val.col;
|
|
19
|
+
this.url = val.url;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.Site = Site;
|
|
23
|
+
Site.NONE = new Site(val_1.TOP);
|
|
8
24
|
let AontuJsonic = function aontu(jsonic) {
|
|
9
25
|
jsonic.options({
|
|
10
26
|
value: {
|
|
11
|
-
|
|
27
|
+
// JSONIC-UPDATE: map: { val: ... }
|
|
28
|
+
map: {
|
|
12
29
|
// NOTE: specify with functions as jsonic/deep will
|
|
13
30
|
// remove class prototype as options are assumed plain
|
|
14
31
|
// (except for functions).
|
|
15
|
-
|
|
16
|
-
'
|
|
17
|
-
'
|
|
18
|
-
'
|
|
19
|
-
'
|
|
20
|
-
'
|
|
32
|
+
// TODO: jsonic should be able to pass context into these
|
|
33
|
+
'string': { val: () => new val_1.ScalarTypeVal(String) },
|
|
34
|
+
'number': { val: () => new val_1.ScalarTypeVal(Number) },
|
|
35
|
+
'integer': { val: () => new val_1.ScalarTypeVal(val_1.Integer) },
|
|
36
|
+
'boolean': { val: () => new val_1.ScalarTypeVal(Boolean) },
|
|
37
|
+
'nil': { val: () => new val_1.Nil('literal') },
|
|
38
|
+
'top': { val: () => val_1.TOP },
|
|
21
39
|
}
|
|
22
40
|
},
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
// // JSONIC-UPDATE: fixed: { token }
|
|
42
|
+
// fixed: {
|
|
43
|
+
// token: {
|
|
44
|
+
// '#A&': '&',
|
|
45
|
+
// '#A|': '|',
|
|
46
|
+
// '#A/': '/',
|
|
47
|
+
// '#A*': '*', // TODO: REVIEW char as * is a bit overloaded
|
|
48
|
+
// '#A=': '=',
|
|
49
|
+
// }
|
|
50
|
+
// },
|
|
51
|
+
// JSONIC-UPDATE: check impl
|
|
29
52
|
map: {
|
|
30
53
|
merge: (prev, curr) => {
|
|
31
54
|
let pval = prev;
|
|
@@ -34,186 +57,237 @@ let AontuJsonic = function aontu(jsonic) {
|
|
|
34
57
|
}
|
|
35
58
|
}
|
|
36
59
|
});
|
|
37
|
-
let
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
open: [
|
|
50
|
-
{ s: [[CJ, DJ, AK]], p: 'disjunct', b: 1, n: { expr: 1 } },
|
|
51
|
-
],
|
|
52
|
-
close: [
|
|
53
|
-
{ s: [] }
|
|
54
|
-
],
|
|
55
|
-
// NOTE: expr node are meta structures, not Vals
|
|
56
|
-
// t=most recent term on the left, o=Val
|
|
57
|
-
bo: (r) => r.node = { t: r.node },
|
|
58
|
-
ac: (r) => {
|
|
59
|
-
let cn = r.child.node.o;
|
|
60
|
-
if (cn instanceof val_1.PrefVal) {
|
|
61
|
-
return { err: 'single-pref' };
|
|
62
|
-
}
|
|
63
|
-
// replace first val with expr val
|
|
64
|
-
r.node = cn;
|
|
60
|
+
let opmap = {
|
|
61
|
+
'conjunct-infix': (_op, terms) => new val_1.ConjunctVal(terms),
|
|
62
|
+
'disjunct-infix': (_op, terms) => new val_1.DisjunctVal(terms),
|
|
63
|
+
'dot-prefix': (_op, terms) => new val_1.RefVal(terms, true),
|
|
64
|
+
'dot-infix': (_op, terms) => new val_1.RefVal(terms),
|
|
65
|
+
'star-prefix': (_op, terms) => new val_1.PrefVal(terms[0]),
|
|
66
|
+
};
|
|
67
|
+
jsonic
|
|
68
|
+
.use(expr_1.Expr, {
|
|
69
|
+
op: {
|
|
70
|
+
'conjunct': {
|
|
71
|
+
infix: true, src: '&', left: 14000, right: 15000
|
|
65
72
|
},
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
r.node.o = r.node.o instanceof val_1.DisjunctVal ?
|
|
91
|
-
r.node.o : new val_1.DisjunctVal([r.node.t]);
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
],
|
|
95
|
-
close: [
|
|
96
|
-
{
|
|
97
|
-
s: [DJ], r: 'disjunct', b: 1,
|
|
98
|
-
a: (r) => {
|
|
99
|
-
var _a;
|
|
100
|
-
// higher precedence term (e.g &) was on the left
|
|
101
|
-
let cn = ((_a = r.child.node) === null || _a === void 0 ? void 0 : _a.o) || r.child.node;
|
|
102
|
-
r.node.t = cn;
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
s: [CJ], r: 'disjunct', b: 1,
|
|
107
|
-
a: (r) => {
|
|
108
|
-
var _a;
|
|
109
|
-
// & with higher precedence to the right
|
|
110
|
-
let cn = ((_a = r.child.node) === null || _a === void 0 ? void 0 : _a.o) || r.child.node;
|
|
111
|
-
r.node.t = cn;
|
|
112
|
-
r.child.node = null;
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
{}
|
|
116
|
-
],
|
|
117
|
-
ac: (r) => {
|
|
118
|
-
var _a;
|
|
119
|
-
// child values may be normal or expr metas
|
|
120
|
-
let cn = ((_a = r.child.node) === null || _a === void 0 ? void 0 : _a.o) || r.child.node;
|
|
121
|
-
if (cn) {
|
|
122
|
-
if (r.node.o instanceof val_1.DisjunctVal) {
|
|
123
|
-
r.node.o.val.push(cn);
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
// this rule was just a pass-through
|
|
127
|
-
r.node.o = cn;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
jsonic.rule('conjunct', () => {
|
|
134
|
-
return new jsonic_1.RuleSpec({
|
|
135
|
-
open: [
|
|
136
|
-
{
|
|
137
|
-
s: [CJ, [NR, TX, ST, VL, OB, OS, FS]], b: 1,
|
|
138
|
-
p: 'val',
|
|
139
|
-
a: (r) => {
|
|
140
|
-
r.node = {
|
|
141
|
-
o: r.node.o instanceof val_1.ConjunctVal ?
|
|
142
|
-
r.node.o : new val_1.ConjunctVal([r.node.t])
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
],
|
|
147
|
-
close: [
|
|
148
|
-
{
|
|
149
|
-
s: [CJ], r: 'conjunct', b: 1
|
|
150
|
-
},
|
|
151
|
-
{}
|
|
152
|
-
],
|
|
153
|
-
ac: (r) => {
|
|
154
|
-
var _a;
|
|
155
|
-
let cn = ((_a = r.child.node) === null || _a === void 0 ? void 0 : _a.o) || r.child.node;
|
|
156
|
-
if (cn) {
|
|
157
|
-
if (r.node.o instanceof val_1.ConjunctVal) {
|
|
158
|
-
r.node.o.val.push(cn);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
r.node.o = cn;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
jsonic.rule('path', () => {
|
|
168
|
-
return new jsonic_1.RuleSpec({
|
|
169
|
-
open: [
|
|
170
|
-
{ s: [FS, [TX, ST, NR, VL]], p: 'part', b: 2 }
|
|
171
|
-
],
|
|
172
|
-
bo: (r) => r.node = new val_1.RefVal('/')
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
jsonic.rule('part', () => {
|
|
176
|
-
return new jsonic_1.RuleSpec({
|
|
177
|
-
open: [
|
|
178
|
-
{
|
|
179
|
-
s: [FS, [TX, ST, NR, VL]], r: 'part',
|
|
180
|
-
a: (r) => {
|
|
181
|
-
r.node.append(r.open[1].src);
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
{}, // no more parts
|
|
185
|
-
],
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
// pref is a unary operator: *1
|
|
189
|
-
jsonic.rule('pref', () => {
|
|
190
|
-
return new jsonic_1.RuleSpec({
|
|
191
|
-
open: [
|
|
192
|
-
{
|
|
193
|
-
s: [AK, [NR, TX, ST, VL, OB, OS, FS]], b: 1,
|
|
194
|
-
p: 'val',
|
|
195
|
-
},
|
|
196
|
-
],
|
|
197
|
-
close: [
|
|
198
|
-
// Can't be in a conjunct
|
|
199
|
-
{ s: [CJ], e: (r) => r.open[1] },
|
|
200
|
-
{}
|
|
201
|
-
],
|
|
202
|
-
ac: (r) => {
|
|
203
|
-
r.node = new val_1.PrefVal(r.child.node);
|
|
204
|
-
}
|
|
205
|
-
});
|
|
73
|
+
'disjunct': {
|
|
74
|
+
infix: true, src: '|', left: 14000, right: 15000
|
|
75
|
+
},
|
|
76
|
+
'dot-infix': {
|
|
77
|
+
src: '.',
|
|
78
|
+
infix: true,
|
|
79
|
+
left: 15000000,
|
|
80
|
+
right: 14000000,
|
|
81
|
+
},
|
|
82
|
+
'dot-prefix': {
|
|
83
|
+
src: '.',
|
|
84
|
+
prefix: true,
|
|
85
|
+
right: 14000000,
|
|
86
|
+
},
|
|
87
|
+
'star': {
|
|
88
|
+
src: '*',
|
|
89
|
+
prefix: true,
|
|
90
|
+
right: 14000000,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
evaluate: (op, terms) => {
|
|
94
|
+
// console.log('LANG EVAL', op, terms)
|
|
95
|
+
return opmap[op.name](op, terms);
|
|
96
|
+
}
|
|
206
97
|
});
|
|
98
|
+
// console.log(jsonic.token)
|
|
99
|
+
let CJ = jsonic.token['#E&'];
|
|
100
|
+
let CL = jsonic.token.CL;
|
|
101
|
+
// let NR = jsonic.token.NR
|
|
102
|
+
// let TX = jsonic.token.TX
|
|
103
|
+
// let ST = jsonic.token.ST
|
|
104
|
+
// let VL = jsonic.token.VL
|
|
105
|
+
// let OB = jsonic.token.OB
|
|
106
|
+
// let OS = jsonic.token.OS
|
|
107
|
+
// let DJ = jsonic.token['#A|']
|
|
108
|
+
// let FS = jsonic.token['#A/']
|
|
109
|
+
// let AK = jsonic.token['#A*']
|
|
110
|
+
// let EQ = jsonic.token['#A=']
|
|
111
|
+
// JSONIC-UPDATE: rule.open[], rule.close[] - replace with rule.oN|cN
|
|
112
|
+
// jsonic.rule('expr', (rs: RuleSpec) => {
|
|
113
|
+
// rs
|
|
114
|
+
// .open([
|
|
115
|
+
// { s: [[CJ, DJ, AK]], p: 'disjunct', b: 1, n: { expr: 1 } },
|
|
116
|
+
// ])
|
|
117
|
+
// .close([
|
|
118
|
+
// { s: [] }
|
|
119
|
+
// ])
|
|
120
|
+
// // NOTE: expr node are meta structures, not Vals
|
|
121
|
+
// // t=most recent term on the left, o=Val
|
|
122
|
+
// .bo((r: Rule) => r.node = { t: r.node })
|
|
123
|
+
// .ac((r: Rule) => {
|
|
124
|
+
// let cn = r.child.node.o
|
|
125
|
+
// if (cn instanceof PrefVal) {
|
|
126
|
+
// return r.o0.bad('single-pref')
|
|
127
|
+
// }
|
|
128
|
+
// // replace first val with expr val
|
|
129
|
+
// r.node = cn
|
|
130
|
+
// if ('val' === r.parent?.name) {
|
|
131
|
+
// r.parent.node = r.node
|
|
132
|
+
// }
|
|
133
|
+
// })
|
|
134
|
+
// })
|
|
135
|
+
// jsonic.rule('disjunct', (rs: RuleSpec) => {
|
|
136
|
+
// rs
|
|
137
|
+
// .open([
|
|
138
|
+
// {
|
|
139
|
+
// s: [CJ], p: 'conjunct', b: 1
|
|
140
|
+
// },
|
|
141
|
+
// {
|
|
142
|
+
// s: [AK], p: 'pref', b: 1
|
|
143
|
+
// },
|
|
144
|
+
// {
|
|
145
|
+
// s: [DJ, AK], p: 'pref', b: 1,
|
|
146
|
+
// a: (r: Rule) => {
|
|
147
|
+
// // Append to existing or start new
|
|
148
|
+
// r.node.o = r.node.o instanceof DisjunctVal ?
|
|
149
|
+
// r.node.o : new DisjunctVal([r.node.t])
|
|
150
|
+
// }
|
|
151
|
+
// },
|
|
152
|
+
// {
|
|
153
|
+
// s: [DJ, [NR, TX, ST, VL, OB, OS]], b: 1,
|
|
154
|
+
// p: 'val',
|
|
155
|
+
// a: (r: Rule) => {
|
|
156
|
+
// // Append to existing or start new
|
|
157
|
+
// r.node.o = r.node.o instanceof DisjunctVal ?
|
|
158
|
+
// r.node.o : new DisjunctVal([r.node.t])
|
|
159
|
+
// }
|
|
160
|
+
// },
|
|
161
|
+
// ])
|
|
162
|
+
// .close([
|
|
163
|
+
// {
|
|
164
|
+
// s: [DJ], r: 'disjunct', b: 1, a: (r: Rule) => {
|
|
165
|
+
// // higher precedence term (e.g &) was on the left
|
|
166
|
+
// let cn = r.child.node?.o || r.child.node
|
|
167
|
+
// r.node.t = cn
|
|
168
|
+
// }
|
|
169
|
+
// },
|
|
170
|
+
// {
|
|
171
|
+
// s: [CJ], r: 'disjunct', b: 1, a: (r: Rule) => {
|
|
172
|
+
// // & with higher precedence to the right
|
|
173
|
+
// let cn = r.child.node?.o || r.child.node
|
|
174
|
+
// r.node.t = cn
|
|
175
|
+
// r.child.node = null
|
|
176
|
+
// }
|
|
177
|
+
// },
|
|
178
|
+
// {}
|
|
179
|
+
// ])
|
|
180
|
+
// .ac((r: Rule) => {
|
|
181
|
+
// // child values may be normal or expr metas
|
|
182
|
+
// let cn = r.child.node?.o || r.child.node
|
|
183
|
+
// if (cn) {
|
|
184
|
+
// if (r.node.o instanceof DisjunctVal) {
|
|
185
|
+
// r.node.o.append(cn)
|
|
186
|
+
// }
|
|
187
|
+
// else {
|
|
188
|
+
// // this rule was just a pass-through
|
|
189
|
+
// r.node.o = cn
|
|
190
|
+
// }
|
|
191
|
+
// }
|
|
192
|
+
// })
|
|
193
|
+
// })
|
|
194
|
+
// jsonic.rule('conjunct', (rs: RuleSpec) => {
|
|
195
|
+
// rs
|
|
196
|
+
// .open([
|
|
197
|
+
// {
|
|
198
|
+
// s: [CJ, [NR, TX, ST, VL, OB, OS, FS]], b: 1,
|
|
199
|
+
// p: 'val',
|
|
200
|
+
// a: (r: Rule) => {
|
|
201
|
+
// r.node = {
|
|
202
|
+
// o: r.node.o instanceof ConjunctVal ?
|
|
203
|
+
// r.node.o : new ConjunctVal([r.node.t])
|
|
204
|
+
// }
|
|
205
|
+
// }
|
|
206
|
+
// },
|
|
207
|
+
// ])
|
|
208
|
+
// .close([
|
|
209
|
+
// {
|
|
210
|
+
// s: [CJ], r: 'conjunct', b: 1
|
|
211
|
+
// },
|
|
212
|
+
// {}
|
|
213
|
+
// ])
|
|
214
|
+
// .ac((r: Rule) => {
|
|
215
|
+
// let cn = r.child.node?.o || r.child.node
|
|
216
|
+
// if (cn) {
|
|
217
|
+
// if (r.node.o instanceof ConjunctVal) {
|
|
218
|
+
// r.node.o.append(cn)
|
|
219
|
+
// }
|
|
220
|
+
// else {
|
|
221
|
+
// r.node.o = cn
|
|
222
|
+
// }
|
|
223
|
+
// }
|
|
224
|
+
// })
|
|
225
|
+
// })
|
|
226
|
+
// jsonic.rule('path', (rs: RuleSpec) => {
|
|
227
|
+
// rs
|
|
228
|
+
// .open([
|
|
229
|
+
// { s: [FS, [TX, ST, NR, VL]], p: 'part', b: 2 }
|
|
230
|
+
// ])
|
|
231
|
+
// .bo((r: Rule) => r.node = new RefVal('/'))
|
|
232
|
+
// })
|
|
233
|
+
// jsonic.rule('part', (rs: RuleSpec) => {
|
|
234
|
+
// rs.
|
|
235
|
+
// open([
|
|
236
|
+
// {
|
|
237
|
+
// s: [FS, [TX, ST, NR, VL]], r: 'part', a: (r: Rule) => {
|
|
238
|
+
// r.node.append(r.o1.src)
|
|
239
|
+
// }
|
|
240
|
+
// },
|
|
241
|
+
// {}, // no more parts
|
|
242
|
+
// ])
|
|
243
|
+
// })
|
|
244
|
+
// // rs.def.open.unshift({
|
|
245
|
+
// // s: [[CJ, DJ], EQ], p: 'val', u: { spread: true }
|
|
246
|
+
// // })
|
|
247
|
+
// // // TODO: make before/after function[]
|
|
248
|
+
// // let orig_bc: any = rs.def.bc
|
|
249
|
+
// // rs.def.bc = function(rule: Rule, ctx: Context) {
|
|
250
|
+
// // let out = orig_bc.call(this, rule, ctx)
|
|
251
|
+
// // if (rule.use.spread) {
|
|
252
|
+
// // rule.node[MapVal.SPREAD] =
|
|
253
|
+
// // (rule.node[MapVal.SPREAD] || { o: rule.o0.src, v: [] })
|
|
254
|
+
// // rule.node[MapVal.SPREAD].v.push(rule.child.node)
|
|
255
|
+
// // }
|
|
256
|
+
// // return out
|
|
257
|
+
// // }
|
|
258
|
+
// return rs
|
|
259
|
+
// })
|
|
260
|
+
// jsonic.rule('pref', (rs: RuleSpec) => {
|
|
261
|
+
// rs
|
|
262
|
+
// .open([
|
|
263
|
+
// {
|
|
264
|
+
// s: [AK, [NR, TX, ST, VL, OB, OS, FS]], b: 1,
|
|
265
|
+
// p: 'val',
|
|
266
|
+
// },
|
|
267
|
+
// ])
|
|
268
|
+
// .close([
|
|
269
|
+
// // Can't be in a conjunct
|
|
270
|
+
// { s: [CJ], e: (r: Rule) => r.o1 },
|
|
271
|
+
// {}
|
|
272
|
+
// ])
|
|
273
|
+
// .ac((r: Rule) => {
|
|
274
|
+
// r.node = new PrefVal(r.child.node)
|
|
275
|
+
// })
|
|
276
|
+
// })
|
|
207
277
|
jsonic.rule('val', (rs) => {
|
|
208
|
-
rs.def.open.unshift(
|
|
209
|
-
// Prefs are always within an expression
|
|
210
|
-
{ s: [AK, [NR, TX, ST, VL, OB, OS, FS]], p: 'expr', b: 2 },
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
278
|
+
// rs.def.open.unshift(
|
|
279
|
+
// // Prefs are always within an expression
|
|
280
|
+
// { s: [AK, [NR, TX, ST, VL, OB, OS, FS]], p: 'expr', b: 2 },
|
|
281
|
+
// { s: [FS, [TX, ST, NR, VL]], p: 'path', b: 2 },
|
|
282
|
+
// )
|
|
283
|
+
// rs.def.close.unshift(
|
|
284
|
+
// {
|
|
285
|
+
// s: [[CJ, DJ]], p: 'expr', b: 1, c: (r: Rule) => {
|
|
286
|
+
// return null == r.n.expr || 0 === r.n.expr
|
|
287
|
+
// }
|
|
288
|
+
// },
|
|
289
|
+
// )
|
|
290
|
+
// TODO: wrap utility needed for jsonic to do this?
|
|
217
291
|
let orig_bc = rs.def.bc;
|
|
218
292
|
rs.def.bc = function (rule, ctx) {
|
|
219
293
|
let out = orig_bc.call(this, rule, ctx);
|
|
@@ -233,6 +307,11 @@ let AontuJsonic = function aontu(jsonic) {
|
|
|
233
307
|
else if ('boolean' === valtype) {
|
|
234
308
|
valnode = new val_1.BooleanVal(rule.node);
|
|
235
309
|
}
|
|
310
|
+
let st = rule.o0;
|
|
311
|
+
valnode.row = st.rI;
|
|
312
|
+
valnode.col = st.cI;
|
|
313
|
+
// JSONIC-UPDATE: still valid? check multisource
|
|
314
|
+
valnode.url = ctx.meta.multisource && ctx.meta.multisource.path;
|
|
236
315
|
rule.node = valnode;
|
|
237
316
|
return out;
|
|
238
317
|
};
|
|
@@ -247,26 +326,54 @@ let AontuJsonic = function aontu(jsonic) {
|
|
|
247
326
|
};
|
|
248
327
|
return rs;
|
|
249
328
|
});
|
|
329
|
+
jsonic.rule('pair', (rs) => {
|
|
330
|
+
let orig_bc = rs.def.bc;
|
|
331
|
+
rs
|
|
332
|
+
.open([{ s: [CJ, CL], p: 'val', u: { spread: true }, g: 'spread' }])
|
|
333
|
+
.bc((...rest) => {
|
|
334
|
+
orig_bc(...rest);
|
|
335
|
+
let rule = rest[0];
|
|
336
|
+
if (rule.use.spread) {
|
|
337
|
+
rule.node[val_1.MapVal.SPREAD] =
|
|
338
|
+
(rule.node[val_1.MapVal.SPREAD] || { o: rule.o0.src, v: [] });
|
|
339
|
+
rule.node[val_1.MapVal.SPREAD].v.push(rule.child.node);
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
return rs;
|
|
343
|
+
});
|
|
250
344
|
};
|
|
345
|
+
const includeFileResolver = (0, file_1.makeFileResolver)((spec) => {
|
|
346
|
+
return 'string' === typeof spec ? spec : spec === null || spec === void 0 ? void 0 : spec.peg;
|
|
347
|
+
});
|
|
348
|
+
exports.includeFileResolver = includeFileResolver;
|
|
251
349
|
class Lang {
|
|
252
350
|
constructor(options) {
|
|
351
|
+
this.options = {
|
|
352
|
+
src: '',
|
|
353
|
+
print: -1,
|
|
354
|
+
};
|
|
355
|
+
this.options = Object.assign({}, this.options, options);
|
|
253
356
|
this.jsonic = jsonic_1.Jsonic.make()
|
|
254
357
|
.use(AontuJsonic)
|
|
255
358
|
.use(multisource_1.MultiSource, {
|
|
256
|
-
resolver: options ? options.resolver
|
|
359
|
+
resolver: (options === null || options === void 0 ? void 0 : options.resolver) || includeFileResolver
|
|
257
360
|
});
|
|
258
361
|
}
|
|
259
362
|
parse(src, opts) {
|
|
260
|
-
|
|
363
|
+
// JSONIC-UPDATE - check meta
|
|
364
|
+
let jm = {
|
|
365
|
+
multisource: {
|
|
366
|
+
// NOTE: multisource has property `path` NOT `base`
|
|
367
|
+
path: this.options.base,
|
|
368
|
+
deps: (opts && opts.deps) || undefined
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
// Pass through Jsonic debug log value
|
|
261
372
|
if (opts && null != opts.log && Number.isInteger(opts.log)) {
|
|
262
373
|
jm.log = opts.log;
|
|
263
374
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
return this.jsonic(src, jm);
|
|
269
|
-
}
|
|
375
|
+
let val = this.jsonic(src, jm);
|
|
376
|
+
return val;
|
|
270
377
|
}
|
|
271
378
|
}
|
|
272
379
|
exports.Lang = Lang;
|
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,mCAMe;AAEf,qDAE4B;
|
|
1
|
+
{"version":3,"file":"lang.js","sourceRoot":"","sources":["../../lib/lang.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAEpD,mCAMe;AAEf,qDAE4B;AAE5B,iEAE+C;AAE/C,uCAGqB;AAQrB,+BAec;AAId,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;;AAsbD,oBAAI;AA9bG,SAAI,GAAG,IAAI,IAAI,CAAC,SAAG,CAAC,CAAA;AAc7B,IAAI,WAAW,GAAW,SAAS,KAAK,CAAC,MAAc;IAErD,MAAM,CAAC,OAAO,CAAC;QACb,KAAK,EAAE;YACL,mCAAmC;YACnC,GAAG,EAAE;gBACH,mDAAmD;gBACnD,sDAAsD;gBACtD,0BAA0B;gBAC1B,yDAAyD;gBACzD,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAa,CAAC,MAAM,CAAC,EAAE;gBAClD,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAa,CAAC,MAAM,CAAC,EAAE;gBAClD,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAa,CAAC,aAAO,CAAC,EAAE;gBACpD,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAa,CAAC,OAAO,CAAC,EAAE;gBACpD,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,SAAG,CAAC,SAAS,CAAC,EAAE;gBACxC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,SAAG,EAAE;aAC1B;SACF;QAED,qCAAqC;QACrC,WAAW;QACX,aAAa;QACb,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,gEAAgE;QAChE,kBAAkB;QAClB,MAAM;QACN,KAAK;QAEL,4BAA4B;QAC5B,GAAG,EAAE;YACH,KAAK,EAAE,CAAC,IAAS,EAAE,IAAS,EAAE,EAAE;gBAC9B,IAAI,IAAI,GAAI,IAAY,CAAA;gBACxB,IAAI,IAAI,GAAI,IAAY,CAAA;gBACxB,OAAO,IAAI,iBAAW,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;YACtC,CAAC;SACF;KACF,CAAC,CAAA;IAGF,IAAI,KAAK,GAAQ;QACf,gBAAgB,EAAE,CAAC,GAAO,EAAE,KAAU,EAAE,EAAE,CAAC,IAAI,iBAAW,CAAC,KAAK,CAAC;QACjE,gBAAgB,EAAE,CAAC,GAAO,EAAE,KAAU,EAAE,EAAE,CAAC,IAAI,iBAAW,CAAC,KAAK,CAAC;QAEjE,YAAY,EAAE,CAAC,GAAO,EAAE,KAAU,EAAE,EAAE,CAAC,IAAI,YAAM,CAAC,KAAK,EAAE,IAAI,CAAC;QAC9D,WAAW,EAAE,CAAC,GAAO,EAAE,KAAU,EAAE,EAAE,CAAC,IAAI,YAAM,CAAC,KAAK,CAAC;QAEvD,aAAa,EAAE,CAAC,GAAO,EAAE,KAAU,EAAE,EAAE,CAAC,IAAI,aAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC9D,CAAA;IAGD,MAAM;SACH,GAAG,CAAC,WAAI,EAAE;QACT,EAAE,EAAE;YACF,UAAU,EAAE;gBACV,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;aACjD;YACD,UAAU,EAAE;gBACV,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;aACjD;YAED,WAAW,EAAE;gBACX,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,QAAU;gBAChB,KAAK,EAAE,QAAU;aAClB;YACD,YAAY,EAAE;gBACZ,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,QAAU;aAClB;YAED,MAAM,EAAE;gBACN,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,QAAU;aAClB;SACF;QACD,QAAQ,EAAE,CAAC,EAAM,EAAE,KAAU,EAAE,EAAE;YAC/B,sCAAsC;YACtC,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAClC,CAAC;KACF,CAAC,CAAA;IAEJ,4BAA4B;IAC5B,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5B,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;IAExB,2BAA2B;IAC3B,2BAA2B;IAC3B,2BAA2B;IAC3B,2BAA2B;IAC3B,2BAA2B;IAC3B,2BAA2B;IAG3B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAG/B,qEAAqE;IAErE,0CAA0C;IAC1C,OAAO;IACP,cAAc;IACd,oEAAoE;IACpE,SAAS;IAET,eAAe;IACf,kBAAkB;IAClB,SAAS;IAET,uDAAuD;IACvD,+CAA+C;IAC/C,+CAA+C;IAE/C,yBAAyB;IACzB,gCAAgC;IAEhC,qCAAqC;IACrC,yCAAyC;IACzC,UAAU;IAEV,2CAA2C;IAC3C,oBAAoB;IAEpB,wCAAwC;IACxC,iCAAiC;IACjC,UAAU;IACV,SAAS;IAET,KAAK;IAGL,8CAA8C;IAC9C,OAAO;IACP,cAAc;IACd,UAAU;IACV,uCAAuC;IACvC,WAAW;IACX,UAAU;IACV,mCAAmC;IACnC,WAAW;IACX,UAAU;IACV,wCAAwC;IACxC,4BAA4B;IAC5B,+CAA+C;IAC/C,yDAAyD;IACzD,qDAAqD;IACrD,YAAY;IACZ,WAAW;IACX,UAAU;IACV,mDAAmD;IACnD,oBAAoB;IACpB,4BAA4B;IAC5B,+CAA+C;IAC/C,yDAAyD;IACzD,qDAAqD;IACrD,YAAY;IACZ,WAAW;IACX,SAAS;IAET,eAAe;IACf,UAAU;IACV,0DAA0D;IAC1D,8DAA8D;IAC9D,qDAAqD;IACrD,0BAA0B;IAC1B,YAAY;IACZ,WAAW;IACX,UAAU;IACV,0DAA0D;IAC1D,qDAAqD;IACrD,qDAAqD;IACrD,0BAA0B;IAC1B,gCAAgC;IAChC,YAAY;IACZ,WAAW;IACX,WAAW;IACX,SAAS;IACT,yBAAyB;IACzB,oDAAoD;IACpD,iDAAiD;IACjD,kBAAkB;IAClB,iDAAiD;IACjD,gCAAgC;IAChC,YAAY;IACZ,iBAAiB;IACjB,iDAAiD;IACjD,0BAA0B;IAC1B,YAAY;IACZ,UAAU;IACV,SAAS;IACT,KAAK;IAIL,8CAA8C;IAC9C,OAAO;IACP,cAAc;IACd,UAAU;IACV,uDAAuD;IACvD,oBAAoB;IACpB,4BAA4B;IAC5B,uBAAuB;IACvB,mDAAmD;IACnD,uDAAuD;IACvD,cAAc;IACd,YAAY;IACZ,WAAW;IACX,SAAS;IACT,eAAe;IACf,UAAU;IACV,uCAAuC;IACvC,WAAW;IACX,WAAW;IACX,SAAS;IACT,yBAAyB;IACzB,iDAAiD;IACjD,kBAAkB;IAClB,iDAAiD;IACjD,gCAAgC;IAChC,YAAY;IACZ,iBAAiB;IACjB,0BAA0B;IAC1B,YAAY;IACZ,UAAU;IACV,SAAS;IACT,KAAK;IAGL,0CAA0C;IAC1C,OAAO;IACP,cAAc;IACd,uDAAuD;IACvD,SAAS;IACT,iDAAiD;IACjD,KAAK;IAGL,0CAA0C;IAC1C,QAAQ;IACR,aAAa;IACb,UAAU;IACV,kEAAkE;IAClE,oCAAoC;IACpC,YAAY;IACZ,WAAW;IACX,6BAA6B;IAC7B,SAAS;IACT,KAAK;IAIL,6BAA6B;IAC7B,0DAA0D;IAC1D,UAAU;IAEV,6CAA6C;IAC7C,oCAAoC;IACpC,wDAAwD;IACxD,iDAAiD;IAEjD,gCAAgC;IAChC,sCAAsC;IACtC,qEAAqE;IACrE,4DAA4D;IAC5D,WAAW;IAEX,oBAAoB;IACpB,SAAS;IAET,cAAc;IACd,KAAK;IAGL,0CAA0C;IAC1C,OAAO;IACP,cAAc;IACd,UAAU;IACV,uDAAuD;IACvD,oBAAoB;IACpB,WAAW;IACX,SAAS;IACT,eAAe;IACf,kCAAkC;IAClC,2CAA2C;IAC3C,WAAW;IACX,SAAS;IACT,yBAAyB;IACzB,2CAA2C;IAC3C,SAAS;IACT,KAAK;IAIL,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAY,EAAE,EAAE;QAClC,uBAAuB;QACvB,6CAA6C;QAC7C,gEAAgE;QAChE,oDAAoD;QACpD,IAAI;QACJ,wBAAwB;QACxB,MAAM;QACN,wDAAwD;QACxD,kDAAkD;QAClD,QAAQ;QACR,OAAO;QACP,IAAI;QAGJ,mDAAmD;QACnD,IAAI,OAAO,GAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAA;QAC5B,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,UAAS,IAAU,EAAE,GAAY;YAC3C,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;YAEvC,IAAI,OAAO,GAAQ,IAAI,CAAC,IAAI,CAAA;YAC5B,IAAI,OAAO,GAAG,OAAO,OAAO,CAAA;YAE5B,IAAI,QAAQ,KAAK,OAAO,EAAE;gBACxB,OAAO,GAAG,IAAI,eAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACnC;iBACI,IAAI,QAAQ,KAAK,OAAO,EAAE;gBAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC/B,OAAO,GAAG,IAAI,gBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;iBACpC;qBACI;oBACH,OAAO,GAAG,IAAI,eAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;iBACnC;aACF;iBACI,IAAI,SAAS,KAAK,OAAO,EAAE;gBAC9B,OAAO,GAAG,IAAI,gBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACpC;YAED,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;YAChB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAA;YACnB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAA;YAEnB,gDAAgD;YAChD,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;YAE/D,IAAI,CAAC,IAAI,GAAG,OAAO,CAAA;YAEnB,OAAO,GAAG,CAAA;QACZ,CAAC,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAIF,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAY,EAAE,EAAE;QAClC,IAAI,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAA;QACvB,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,UAAS,IAAU,EAAE,GAAY;YAC3C,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAE7D,IAAI,CAAC,IAAI,GAAG,IAAI,YAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEjC,OAAO,GAAG,CAAA;QACZ,CAAC,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAGF,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAY,EAAE,EAAE;QACnC,IAAI,OAAO,GAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAA;QAC5B,EAAE;aACC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;aACnE,EAAE,CAAC,CAAC,GAAG,IAAS,EAAE,EAAE;YACnB,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;YAEhB,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YAClB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,YAAM,CAAC,MAAM,CAAC;oBACtB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;gBACzD,IAAI,CAAC,IAAI,CAAC,YAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;aACjD;QACH,CAAC,CAAC,CAAA;QACJ,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;AAEJ,CAAC,CAAA;AAGD,MAAM,mBAAmB,GAAG,IAAA,uBAAgB,EAAC,CAAC,IAAS,EAAE,EAAE;IACzD,OAAO,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAA;AACpD,CAAC,CAAC,CAAA;AA4CA,kDAAmB;AAzCrB,MAAM,IAAI;IAOR,YAAY,OAA0B;QALtC,YAAO,GAAY;YACjB,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,CAAC,CAAC;SACV,CAAA;QAGC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvD,IAAI,CAAC,MAAM,GAAG,eAAM,CAAC,IAAI,EAAE;aACxB,GAAG,CAAC,WAAW,CAAC;aAChB,GAAG,CAAC,yBAAW,EAAE;YAChB,QAAQ,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,KAAI,mBAAmB;SACnD,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,IAAU;QAE3B,6BAA6B;QAC7B,IAAI,EAAE,GAAQ;YACZ,WAAW,EAAE;gBACX,mDAAmD;gBACnD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS;aACvC;SACF,CAAA;QAED,sCAAsC;QACtC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC1D,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;SAClB;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAE9B,OAAO,GAAG,CAAA;IACZ,CAAC;CACF;AAGC,oBAAI"}
|