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.
Files changed (84) hide show
  1. package/dist/cli.d.ts +9 -0
  2. package/dist/cli.js +203 -0
  3. package/dist/cli.js.map +1 -0
  4. package/dist/ctx.d.ts +2 -5
  5. package/dist/ctx.js +1 -2
  6. package/dist/ctx.js.map +1 -1
  7. package/dist/lang.d.ts +1 -5
  8. package/dist/lang.js +24 -100
  9. package/dist/lang.js.map +1 -1
  10. package/dist/tsconfig.tsbuildinfo +1 -1
  11. package/dist/type.d.ts +0 -5
  12. package/dist/type.js.map +1 -1
  13. package/dist/unify.js +13 -292
  14. package/dist/unify.js.map +1 -1
  15. package/dist/utility.js +2 -6
  16. package/dist/utility.js.map +1 -1
  17. package/dist/val/BagVal.d.ts +3 -0
  18. package/dist/val/BagVal.js +6 -6
  19. package/dist/val/BagVal.js.map +1 -1
  20. package/dist/val/ConjunctVal.d.ts +1 -1
  21. package/dist/val/ConjunctVal.js +14 -137
  22. package/dist/val/ConjunctVal.js.map +1 -1
  23. package/dist/val/CopyFuncVal.js +2 -3
  24. package/dist/val/CopyFuncVal.js.map +1 -1
  25. package/dist/val/DisjunctVal.js +0 -4
  26. package/dist/val/DisjunctVal.js.map +1 -1
  27. package/dist/val/ExpectVal.js +3 -16
  28. package/dist/val/ExpectVal.js.map +1 -1
  29. package/dist/val/JunctionVal.d.ts +0 -1
  30. package/dist/val/JunctionVal.js +1 -6
  31. package/dist/val/JunctionVal.js.map +1 -1
  32. package/dist/val/KeyFuncVal.js +2 -0
  33. package/dist/val/KeyFuncVal.js.map +1 -1
  34. package/dist/val/ListVal.d.ts +0 -1
  35. package/dist/val/ListVal.js +66 -33
  36. package/dist/val/ListVal.js.map +1 -1
  37. package/dist/val/MapVal.d.ts +2 -3
  38. package/dist/val/MapVal.js +95 -67
  39. package/dist/val/MapVal.js.map +1 -1
  40. package/dist/val/MoveFuncVal.d.ts +1 -2
  41. package/dist/val/MoveFuncVal.js +13 -78
  42. package/dist/val/MoveFuncVal.js.map +1 -1
  43. package/dist/val/PathFuncVal.js +4 -25
  44. package/dist/val/PathFuncVal.js.map +1 -1
  45. package/dist/val/PlusOpVal.d.ts +1 -1
  46. package/dist/val/PrefVal.js +5 -18
  47. package/dist/val/PrefVal.js.map +1 -1
  48. package/dist/val/{PathVal.d.ts → RefVal.d.ts} +3 -4
  49. package/dist/val/{PathVal.js → RefVal.js} +77 -75
  50. package/dist/val/RefVal.js.map +1 -0
  51. package/dist/val/Val.d.ts +1 -2
  52. package/dist/val/Val.js +8 -7
  53. package/dist/val/Val.js.map +1 -1
  54. package/dist/val/VarVal.js +2 -2
  55. package/dist/val/VarVal.js.map +1 -1
  56. package/package.json +9 -4
  57. package/src/cli.ts +193 -0
  58. package/src/ctx.ts +3 -16
  59. package/src/lang.ts +23 -113
  60. package/src/type.ts +0 -5
  61. package/src/unify.ts +13 -310
  62. package/src/utility.ts +2 -5
  63. package/src/val/BagVal.ts +7 -6
  64. package/src/val/ConjunctVal.ts +13 -131
  65. package/src/val/CopyFuncVal.ts +2 -3
  66. package/src/val/DisjunctVal.ts +0 -6
  67. package/src/val/ExpectVal.ts +4 -18
  68. package/src/val/JunctionVal.ts +1 -5
  69. package/src/val/KeyFuncVal.ts +3 -0
  70. package/src/val/ListVal.ts +88 -38
  71. package/src/val/MapVal.ts +124 -75
  72. package/src/val/MoveFuncVal.ts +14 -79
  73. package/src/val/PathFuncVal.ts +4 -29
  74. package/src/val/PrefVal.ts +6 -19
  75. package/src/val/{RefVal.ts.old → RefVal.ts} +19 -30
  76. package/src/val/Val.ts +9 -9
  77. package/src/val/VarVal.ts +2 -2
  78. package/README.md +0 -18
  79. package/dist/val/PathVal.js.map +0 -1
  80. package/dist/val/SpreadVal.d.ts +0 -20
  81. package/dist/val/SpreadVal.js +0 -194
  82. package/dist/val/SpreadVal.js.map +0 -1
  83. package/src/val/PathVal.ts +0 -435
  84. 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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"}
@@ -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
- }