aontu 0.44.0 → 0.46.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.
- package/dist/cli.d.ts +9 -0
- package/dist/cli.js +203 -0
- package/dist/cli.js.map +1 -0
- package/dist/ctx.d.ts +2 -5
- package/dist/ctx.js +1 -2
- package/dist/ctx.js.map +1 -1
- package/dist/lang.d.ts +1 -5
- package/dist/lang.js +24 -100
- package/dist/lang.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.d.ts +0 -5
- package/dist/type.js.map +1 -1
- package/dist/unify.js +13 -292
- package/dist/unify.js.map +1 -1
- package/dist/utility.js +2 -6
- package/dist/utility.js.map +1 -1
- package/dist/val/BagVal.d.ts +3 -0
- package/dist/val/BagVal.js +6 -6
- package/dist/val/BagVal.js.map +1 -1
- package/dist/val/ConjunctVal.d.ts +1 -1
- package/dist/val/ConjunctVal.js +14 -137
- package/dist/val/ConjunctVal.js.map +1 -1
- package/dist/val/CopyFuncVal.js +2 -3
- package/dist/val/CopyFuncVal.js.map +1 -1
- package/dist/val/DisjunctVal.js +0 -4
- package/dist/val/DisjunctVal.js.map +1 -1
- package/dist/val/ExpectVal.js +3 -16
- package/dist/val/ExpectVal.js.map +1 -1
- package/dist/val/JunctionVal.d.ts +0 -1
- package/dist/val/JunctionVal.js +1 -6
- package/dist/val/JunctionVal.js.map +1 -1
- package/dist/val/KeyFuncVal.js +2 -0
- package/dist/val/KeyFuncVal.js.map +1 -1
- package/dist/val/ListVal.d.ts +0 -1
- package/dist/val/ListVal.js +66 -33
- package/dist/val/ListVal.js.map +1 -1
- package/dist/val/MapVal.d.ts +2 -3
- package/dist/val/MapVal.js +95 -67
- package/dist/val/MapVal.js.map +1 -1
- package/dist/val/MoveFuncVal.d.ts +1 -2
- package/dist/val/MoveFuncVal.js +13 -78
- package/dist/val/MoveFuncVal.js.map +1 -1
- package/dist/val/PathFuncVal.js +4 -25
- package/dist/val/PathFuncVal.js.map +1 -1
- package/dist/val/PlusOpVal.d.ts +1 -1
- package/dist/val/PrefVal.js +5 -18
- package/dist/val/PrefVal.js.map +1 -1
- package/dist/val/{PathVal.d.ts → RefVal.d.ts} +3 -4
- package/dist/val/{PathVal.js → RefVal.js} +77 -75
- package/dist/val/RefVal.js.map +1 -0
- package/dist/val/Val.d.ts +1 -2
- package/dist/val/Val.js +8 -7
- package/dist/val/Val.js.map +1 -1
- package/dist/val/VarVal.js +2 -2
- package/dist/val/VarVal.js.map +1 -1
- package/package.json +9 -4
- package/src/cli.ts +193 -0
- package/src/ctx.ts +3 -16
- package/src/lang.ts +23 -113
- package/src/type.ts +0 -5
- package/src/unify.ts +13 -310
- package/src/utility.ts +2 -5
- package/src/val/BagVal.ts +7 -6
- package/src/val/ConjunctVal.ts +13 -131
- package/src/val/CopyFuncVal.ts +2 -3
- package/src/val/DisjunctVal.ts +0 -6
- package/src/val/ExpectVal.ts +4 -18
- package/src/val/JunctionVal.ts +1 -5
- package/src/val/KeyFuncVal.ts +3 -0
- package/src/val/ListVal.ts +88 -38
- package/src/val/MapVal.ts +124 -75
- package/src/val/MoveFuncVal.ts +14 -79
- package/src/val/PathFuncVal.ts +4 -29
- package/src/val/PrefVal.ts +6 -19
- package/src/val/{RefVal.ts.old → RefVal.ts} +19 -30
- package/src/val/Val.ts +9 -9
- package/src/val/VarVal.ts +2 -2
- package/README.md +0 -18
- package/dist/val/PathVal.js.map +0 -1
- package/dist/val/SpreadVal.d.ts +0 -20
- package/dist/val/SpreadVal.js +0 -194
- package/dist/val/SpreadVal.js.map +0 -1
- package/src/val/PathVal.ts +0 -435
- package/src/val/SpreadVal.ts +0 -275
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SpreadVal.js","sourceRoot":"","sources":["../../src/val/SpreadVal.ts"],"names":[],"mappings":"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"}
|
package/src/val/PathVal.ts
DELETED
|
@@ -1,435 +0,0 @@
|
|
|
1
|
-
/* Copyright (c) 2025 Richard Rodger, MIT License */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import type {
|
|
5
|
-
Val,
|
|
6
|
-
ValSpec,
|
|
7
|
-
} from '../type'
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
DONE,
|
|
11
|
-
} from '../type'
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
walk,
|
|
15
|
-
} from '../utility'
|
|
16
|
-
|
|
17
|
-
import { AontuContext } from '../ctx'
|
|
18
|
-
import { unite } from '../unify'
|
|
19
|
-
|
|
20
|
-
import { makeNilErr } from '../err'
|
|
21
|
-
|
|
22
|
-
import {
|
|
23
|
-
top
|
|
24
|
-
} from './top'
|
|
25
|
-
|
|
26
|
-
import { StringVal } from './StringVal'
|
|
27
|
-
import { IntegerVal } from './IntegerVal'
|
|
28
|
-
import { NumberVal } from './NumberVal'
|
|
29
|
-
import { VarVal } from './VarVal'
|
|
30
|
-
import { ConjunctVal } from './ConjunctVal'
|
|
31
|
-
import { DisjunctVal } from './DisjunctVal'
|
|
32
|
-
import { FeatureVal } from './FeatureVal'
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class PathVal extends FeatureVal {
|
|
36
|
-
isPath = true
|
|
37
|
-
isGenable = true
|
|
38
|
-
cjo = 32500
|
|
39
|
-
|
|
40
|
-
absolute: boolean = false
|
|
41
|
-
prefix: boolean = false
|
|
42
|
-
_resolved: Val | undefined = undefined
|
|
43
|
-
|
|
44
|
-
constructor(
|
|
45
|
-
spec: {
|
|
46
|
-
peg: any[],
|
|
47
|
-
absolute?: boolean,
|
|
48
|
-
prefix?: boolean
|
|
49
|
-
},
|
|
50
|
-
ctx?: AontuContext
|
|
51
|
-
) {
|
|
52
|
-
super(spec, ctx)
|
|
53
|
-
this.peg = []
|
|
54
|
-
|
|
55
|
-
this.absolute = true === this.absolute ? true : // absolute sticks
|
|
56
|
-
true === spec.absolute ? true : false
|
|
57
|
-
|
|
58
|
-
this.prefix = true === spec.prefix
|
|
59
|
-
|
|
60
|
-
for (let pI = 0; pI < spec.peg.length; pI++) {
|
|
61
|
-
this.append(spec.peg[pI])
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
append(part: any) {
|
|
67
|
-
let partval
|
|
68
|
-
|
|
69
|
-
if ('string' === typeof part) {
|
|
70
|
-
partval = part
|
|
71
|
-
this.peg.push(partval)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
else if (part instanceof StringVal) {
|
|
75
|
-
partval = part.peg
|
|
76
|
-
this.peg.push(partval)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
else if (part instanceof IntegerVal) {
|
|
80
|
-
partval = part.src
|
|
81
|
-
this.peg.push(partval)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
else if (part instanceof NumberVal) {
|
|
85
|
-
let partvals: string[] = part.src.split('.')
|
|
86
|
-
this.peg.push(...partvals)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
else if (part instanceof VarVal) {
|
|
90
|
-
partval = part
|
|
91
|
-
this.peg.push(partval)
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
else if (part instanceof PathVal) {
|
|
95
|
-
if (part.absolute) {
|
|
96
|
-
this.absolute = true
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
if (this.prefix) {
|
|
100
|
-
if (part.prefix) {
|
|
101
|
-
this.peg.push('.')
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
if (part.prefix) {
|
|
106
|
-
if (0 === this.peg.length) {
|
|
107
|
-
this.prefix = true
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
else if (0 < this.peg.length) {
|
|
111
|
-
this.peg.push('.')
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
this.peg.push(...part.peg)
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
unify(peer: Val, ctx: AontuContext): Val {
|
|
122
|
-
peer = peer ?? top()
|
|
123
|
-
|
|
124
|
-
// Already resolved (e.g. path value from path() function) — skip find
|
|
125
|
-
if (this.done) return this
|
|
126
|
-
|
|
127
|
-
let out: Val = this
|
|
128
|
-
const found = this.find(ctx)
|
|
129
|
-
|
|
130
|
-
if (found != null && !found.isNil) {
|
|
131
|
-
out = unite(ctx, found, peer, 'path')
|
|
132
|
-
}
|
|
133
|
-
else if (found?.isNil) {
|
|
134
|
-
out = found
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
// Not yet resolvable — increment dc to signal not done
|
|
138
|
-
this.dc = DONE === this.dc ? DONE : this.dc + 1
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return out
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
find(ctx: AontuContext) {
|
|
146
|
-
let out: Val | undefined = undefined
|
|
147
|
-
|
|
148
|
-
// Check if self.path starts with peg (cycle detection).
|
|
149
|
-
// Element-by-element comparison avoids string join+startsWith allocations.
|
|
150
|
-
let isprefixpath = this.peg.length <= this.path.length
|
|
151
|
-
if (isprefixpath) {
|
|
152
|
-
for (let i = 0; i < this.peg.length; i++) {
|
|
153
|
-
if (this.peg[i] !== this.path[i]) {
|
|
154
|
-
isprefixpath = false
|
|
155
|
-
break
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// Degenerate case: peg is all empty strings (e.g. path("")) and path is empty.
|
|
160
|
-
if (!isprefixpath && this.peg.length > 0 && this.path.length === 0) {
|
|
161
|
-
let allEmpty = true
|
|
162
|
-
for (let i = 0; i < this.peg.length; i++) {
|
|
163
|
-
if ('' !== this.peg[i]) { allEmpty = false; break }
|
|
164
|
-
}
|
|
165
|
-
isprefixpath = allEmpty
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
let refpath: string[] = []
|
|
169
|
-
let pI = 0
|
|
170
|
-
// let descent = ''
|
|
171
|
-
|
|
172
|
-
if (isprefixpath) {
|
|
173
|
-
// console.log('SELFPATH', selfpath, 'PEGPATH', pegpath)
|
|
174
|
-
out = makeNilErr(ctx, 'path_cycle', this)
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
|
|
178
|
-
let parts: string[] = []
|
|
179
|
-
|
|
180
|
-
let modes: string[] = []
|
|
181
|
-
|
|
182
|
-
for (let pI = 0; pI < this.peg.length; pI++) {
|
|
183
|
-
let part = this.peg[pI]
|
|
184
|
-
if (part instanceof VarVal) {
|
|
185
|
-
let strval = (part as VarVal).peg
|
|
186
|
-
let name = strval ? '' + strval.peg : ''
|
|
187
|
-
|
|
188
|
-
if ('KEY' === name) {
|
|
189
|
-
if (pI === this.peg.length - 1) {
|
|
190
|
-
modes.push(name)
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
// TODO: return a Nil explaining error
|
|
194
|
-
return
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
if ('SELF' === name) {
|
|
199
|
-
if (pI === 0) {
|
|
200
|
-
modes.push(name)
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
// TODO: return a Nil explaining error
|
|
204
|
-
return
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
else if ('PARENT' === name) {
|
|
208
|
-
if (pI === 0) {
|
|
209
|
-
modes.push(name)
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
// TODO: return a Nil explaining error
|
|
213
|
-
return
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
else if (0 === modes.length) {
|
|
217
|
-
part = (part as VarVal).unify(top(), ctx)
|
|
218
|
-
if (part.isNil) {
|
|
219
|
-
// TODO: var not found, so can't find path
|
|
220
|
-
return
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
part = '' + part.peg
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
parts.push(part)
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
if (this.absolute) {
|
|
233
|
-
refpath = parts
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
// TODO: deprecate $KEY, etc
|
|
237
|
-
refpath = this.path.slice(
|
|
238
|
-
0,
|
|
239
|
-
(
|
|
240
|
-
modes.includes('SELF') ? 0 :
|
|
241
|
-
modes.includes('PARENT') ? -1 :
|
|
242
|
-
-1 // siblings
|
|
243
|
-
)
|
|
244
|
-
).concat(parts)
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
let sep = '.'
|
|
248
|
-
refpath = refpath
|
|
249
|
-
.reduce(((a: string[], p: string) =>
|
|
250
|
-
(p === sep ? a.length = a.length - 1 : a.push(p), a)), [])
|
|
251
|
-
|
|
252
|
-
if (modes.includes('KEY')) {
|
|
253
|
-
let key = this.path[this.path.length - 2]
|
|
254
|
-
let sv = new StringVal({ peg: null == key ? '' : key }, ctx)
|
|
255
|
-
|
|
256
|
-
// TODO: other props?
|
|
257
|
-
sv.dc = DONE
|
|
258
|
-
sv.path = this.path
|
|
259
|
-
|
|
260
|
-
return sv
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
let node: Val | null = ctx.root as Val
|
|
264
|
-
|
|
265
|
-
let nopath = false
|
|
266
|
-
|
|
267
|
-
if (null != node) {
|
|
268
|
-
for (; pI < refpath.length; pI++) {
|
|
269
|
-
let part = refpath[pI]
|
|
270
|
-
// console.log('PART', pI, part, node)
|
|
271
|
-
|
|
272
|
-
// descent += (' | ' + pI + '=' + node.canon) // Util.inspect(node))
|
|
273
|
-
|
|
274
|
-
if (node.isMap) {
|
|
275
|
-
node = node.peg[part]
|
|
276
|
-
}
|
|
277
|
-
else if (node.isList) {
|
|
278
|
-
node = node.peg[part]
|
|
279
|
-
}
|
|
280
|
-
else if (node.isConjunct || node.isDisjunct) {
|
|
281
|
-
// Collect matching children from all junction terms,
|
|
282
|
-
// flattening nested conjuncts and disjuncts.
|
|
283
|
-
// Spreads match any key — their peg is always included.
|
|
284
|
-
const matches: Val[] = []
|
|
285
|
-
const stack = [...node.peg]
|
|
286
|
-
while (stack.length > 0) {
|
|
287
|
-
const term = stack.pop()!
|
|
288
|
-
if (term.isConjunct || term.isDisjunct) {
|
|
289
|
-
stack.push(...term.peg)
|
|
290
|
-
}
|
|
291
|
-
else if (term.isSpread) {
|
|
292
|
-
matches.push(term.peg)
|
|
293
|
-
}
|
|
294
|
-
else if ((term.isMap || term.isList) && term.peg[part] != null) {
|
|
295
|
-
matches.push(term.peg[part])
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
if (matches.length === 1) {
|
|
299
|
-
node = matches[0]
|
|
300
|
-
}
|
|
301
|
-
else if (matches.length > 1) {
|
|
302
|
-
node = node.isConjunct
|
|
303
|
-
? new ConjunctVal({ peg: matches })
|
|
304
|
-
: new DisjunctVal({ peg: matches })
|
|
305
|
-
}
|
|
306
|
-
else {
|
|
307
|
-
node = null
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
else if (node.done) {
|
|
311
|
-
nopath = true
|
|
312
|
-
break;
|
|
313
|
-
}
|
|
314
|
-
else {
|
|
315
|
-
break;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
if (null == node) {
|
|
319
|
-
nopath = true
|
|
320
|
-
break
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// console.log('REFPATH', ctx.cc, pI, refpath, nopath, ctx.root, node)
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
if (nopath) {
|
|
330
|
-
out = makeNilErr(ctx, 'no_path', this)
|
|
331
|
-
}
|
|
332
|
-
else if (pI === refpath.length && node != null) {
|
|
333
|
-
out = node
|
|
334
|
-
|
|
335
|
-
// Types and hidden values are cloned and made concrete
|
|
336
|
-
if (null != out) { // && (out.mark.type || out.mark.hide)) {
|
|
337
|
-
|
|
338
|
-
// console.log('FOUND-A', out)
|
|
339
|
-
|
|
340
|
-
if (this.mark.type || this.mark.hide) {
|
|
341
|
-
out.mark.type = this.mark.type
|
|
342
|
-
out.mark.hide = this.mark.hide
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
if (this.mark._hide_found) {
|
|
346
|
-
out.mark.hide = true
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
// Cache clone+walk results per (ref, target) per iteration.
|
|
350
|
-
const cacheKey = this.id + '|' + out.id
|
|
351
|
-
const cache = ctx._refCloneCache
|
|
352
|
-
const cached = cache?.get(cacheKey)
|
|
353
|
-
if (cached !== undefined) {
|
|
354
|
-
out = cached
|
|
355
|
-
}
|
|
356
|
-
else {
|
|
357
|
-
out = out.clone(ctx)
|
|
358
|
-
out.mark.type = false
|
|
359
|
-
out.mark.hide = false
|
|
360
|
-
|
|
361
|
-
walk(out, (_key: string | number | undefined, val: Val) => {
|
|
362
|
-
val.mark.type = false
|
|
363
|
-
val.mark.hide = false
|
|
364
|
-
return val
|
|
365
|
-
})
|
|
366
|
-
|
|
367
|
-
cache?.set(cacheKey, out)
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
// console.log('REF-FIND', ctx.cc, this.id, selfpath, 'PEG=', pegpath, 'RP', pI, refpath.join('.'), descent, 'O=', out?.id, out?.canon, out?.done)
|
|
374
|
-
|
|
375
|
-
return out
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
same(peer: Val): boolean {
|
|
381
|
-
return null == peer ? false : this.peg === peer.peg
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
clone(ctx: AontuContext, spec?: ValSpec): Val {
|
|
386
|
-
let out = (super.clone(ctx, {
|
|
387
|
-
peg: this.peg,
|
|
388
|
-
absolute: this.absolute,
|
|
389
|
-
...(spec || {})
|
|
390
|
-
}) as PathVal)
|
|
391
|
-
return out
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
get canon() {
|
|
396
|
-
let str =
|
|
397
|
-
(this.absolute ? '$' : '') +
|
|
398
|
-
(0 < this.peg.length ? '.' : '') +
|
|
399
|
-
this.peg.map((p: any) => '.' === p ? '' :
|
|
400
|
-
(p.isVal ? p.canon : '' + p))
|
|
401
|
-
.join('.')
|
|
402
|
-
return str
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
gen(ctx: AontuContext) {
|
|
407
|
-
let nil = makeNilErr(
|
|
408
|
-
ctx,
|
|
409
|
-
'ref',
|
|
410
|
-
this,
|
|
411
|
-
undefined,
|
|
412
|
-
)
|
|
413
|
-
|
|
414
|
-
nil.path = this.path
|
|
415
|
-
nil.site.url = this.site.url
|
|
416
|
-
nil.site.row = this.site.row
|
|
417
|
-
nil.site.col = this.site.col
|
|
418
|
-
|
|
419
|
-
return undefined
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
inspection() {
|
|
424
|
-
return [
|
|
425
|
-
this.absolute ? 'absolute' : '',
|
|
426
|
-
this.prefix ? 'prefix' : '',
|
|
427
|
-
].filter(p => '' != p).join(',')
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
export {
|
|
434
|
-
PathVal,
|
|
435
|
-
}
|