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.
@@ -1,5 +1,5 @@
1
1
  import { Resolver } from '@jsonic/multisource';
2
- declare type Options = {
2
+ type Options = {
3
3
  src: string;
4
4
  print: number;
5
5
  resolver?: Resolver;
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(false, (r, ctx) => {
112
+ rs.bc((r, ctx) => {
113
113
  let valnode = r.node;
114
114
  let valtype = typeof valnode;
115
- // console.log('VAL RULE', rule.use, rule.node)
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(false, (r) => {
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(false, (r) => {
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
- // .bc((...rest: any) => {
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;
@@ -1 +1 @@
1
- {"version":3,"file":"lang.js","sourceRoot":"","sources":["../../lib/lang.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lang.js","sourceRoot":"","sources":["../../lib/lang.ts"],"names":[],"mappings":"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"}
@@ -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
- declare type Operation = (ctx: Context, a?: Val, b?: Val, whence?: string) => Val;
5
+ type Operation = (ctx: Context, a?: Val, b?: Val, whence?: string) => Val;
6
6
  export { Operation, disjunct, unite, };
@@ -1,6 +1,6 @@
1
1
  import { Val, RefVal, MapVal, Nil } from './val';
2
2
  import { Lang } from './lang';
3
- declare type Path = string[];
3
+ type Path = string[];
4
4
  declare class Context {
5
5
  root: Val;
6
6
  path: Path;
package/dist/lib/val.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { Context } from './unify';
2
2
  import { Site } from './lang';
3
- declare type ValMap = {
3
+ type ValMap = {
4
4
  [key: string]: Val;
5
5
  };
6
- declare type ValList = Val[];
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
- declare type ScalarConstructor = StringConstructor | NumberConstructor | BooleanConstructor | (typeof Integer.constructor);
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(false, (r: Rule, ctx: Context) => {
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', rule.use, rule.node)
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(false, (r: Rule) => {
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(false, (r: Rule) => {
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
- // .bc((...rest: any) => {
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.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": "^0.7.0",
43
- "@jsonic/expr": "^0.4.1",
44
- "@jsonic/jsonic-next": "2.1.0",
45
- "@jsonic/multisource": "0.6.0",
46
- "@jsonic/path": "^0.1.0",
47
- "@types/node": "^18.0.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": "^13.0.2",
58
- "tinyify": "^3.0.0",
59
- "typescript": "^4.7.3"
57
+ "serve": "^14.0.0",
58
+ "tinyify": "^3.1.0",
59
+ "typescript": "^4.7.4"
60
60
  }
61
61
  }