aontu 0.41.0 → 0.43.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 (79) hide show
  1. package/dist/ctx.d.ts +5 -2
  2. package/dist/ctx.js +2 -1
  3. package/dist/ctx.js.map +1 -1
  4. package/dist/lang.d.ts +5 -1
  5. package/dist/lang.js +100 -24
  6. package/dist/lang.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/dist/type.d.ts +5 -0
  9. package/dist/type.js.map +1 -1
  10. package/dist/unify.js +292 -13
  11. package/dist/unify.js.map +1 -1
  12. package/dist/utility.js +6 -2
  13. package/dist/utility.js.map +1 -1
  14. package/dist/val/BagVal.d.ts +0 -3
  15. package/dist/val/BagVal.js +6 -6
  16. package/dist/val/BagVal.js.map +1 -1
  17. package/dist/val/ConjunctVal.d.ts +1 -1
  18. package/dist/val/ConjunctVal.js +137 -14
  19. package/dist/val/ConjunctVal.js.map +1 -1
  20. package/dist/val/CopyFuncVal.js +3 -2
  21. package/dist/val/CopyFuncVal.js.map +1 -1
  22. package/dist/val/DisjunctVal.js +4 -0
  23. package/dist/val/DisjunctVal.js.map +1 -1
  24. package/dist/val/ExpectVal.js +16 -3
  25. package/dist/val/ExpectVal.js.map +1 -1
  26. package/dist/val/JunctionVal.d.ts +1 -0
  27. package/dist/val/JunctionVal.js +6 -1
  28. package/dist/val/JunctionVal.js.map +1 -1
  29. package/dist/val/KeyFuncVal.js +0 -2
  30. package/dist/val/KeyFuncVal.js.map +1 -1
  31. package/dist/val/ListVal.d.ts +1 -0
  32. package/dist/val/ListVal.js +33 -66
  33. package/dist/val/ListVal.js.map +1 -1
  34. package/dist/val/MapVal.d.ts +3 -2
  35. package/dist/val/MapVal.js +67 -95
  36. package/dist/val/MapVal.js.map +1 -1
  37. package/dist/val/MoveFuncVal.d.ts +2 -1
  38. package/dist/val/MoveFuncVal.js +78 -13
  39. package/dist/val/MoveFuncVal.js.map +1 -1
  40. package/dist/val/PathFuncVal.js +25 -4
  41. package/dist/val/PathFuncVal.js.map +1 -1
  42. package/dist/val/{RefVal.d.ts → PathVal.d.ts} +4 -3
  43. package/dist/val/{RefVal.js → PathVal.js} +75 -77
  44. package/dist/val/PathVal.js.map +1 -0
  45. package/dist/val/PlusOpVal.d.ts +1 -1
  46. package/dist/val/PrefVal.js +18 -5
  47. package/dist/val/PrefVal.js.map +1 -1
  48. package/dist/val/SpreadVal.d.ts +20 -0
  49. package/dist/val/SpreadVal.js +194 -0
  50. package/dist/val/SpreadVal.js.map +1 -0
  51. package/dist/val/Val.d.ts +2 -1
  52. package/dist/val/Val.js +7 -8
  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 +5 -6
  57. package/src/ctx.ts +16 -3
  58. package/src/lang.ts +113 -23
  59. package/src/type.ts +5 -0
  60. package/src/unify.ts +310 -13
  61. package/src/utility.ts +5 -2
  62. package/src/val/BagVal.ts +6 -7
  63. package/src/val/ConjunctVal.ts +131 -13
  64. package/src/val/CopyFuncVal.ts +3 -2
  65. package/src/val/DisjunctVal.ts +6 -0
  66. package/src/val/ExpectVal.ts +18 -4
  67. package/src/val/JunctionVal.ts +5 -1
  68. package/src/val/KeyFuncVal.ts +0 -3
  69. package/src/val/ListVal.ts +38 -88
  70. package/src/val/MapVal.ts +75 -124
  71. package/src/val/MoveFuncVal.ts +79 -14
  72. package/src/val/PathFuncVal.ts +29 -4
  73. package/src/val/PathVal.ts +435 -0
  74. package/src/val/PrefVal.ts +19 -6
  75. package/src/val/{RefVal.ts → RefVal.ts.old} +30 -19
  76. package/src/val/SpreadVal.ts +275 -0
  77. package/src/val/Val.ts +9 -9
  78. package/src/val/VarVal.ts +2 -2
  79. package/dist/val/RefVal.js.map +0 -1
@@ -1,8 +1,6 @@
1
1
  /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
2
 
3
3
 
4
- import Util from 'node:util'
5
-
6
4
  import {
7
5
  walk,
8
6
  explainOpen,
@@ -16,6 +14,7 @@ import type {
16
14
  ValSpec,
17
15
  } from '../type'
18
16
 
17
+
19
18
  import {
20
19
  DONE,
21
20
  } from '../type'
@@ -137,10 +136,23 @@ class RefVal extends FeatureVal {
137
136
  unify(peer: Val, ctx: AontuContext): Val {
138
137
  peer = peer ?? top()
139
138
 
139
+ // TEMPORARY: nerf RefVals to verify spread-first resolution
140
+ return makeNilErr(ctx, 'ref_test_block', this, peer)
141
+
140
142
  const te = ctx.explain && explainOpen(ctx, ctx.explain, 'Ref', this, peer)
141
143
  let out: Val = this
142
144
  let why = 'id'
143
145
 
146
+ // Defer ref resolution on first pass and while spreads remain
147
+ if (0 === ctx.cc || 0 < ctx.sc) {
148
+ if (!peer.isTop && this.id !== peer.id) {
149
+ out = new ConjunctVal({ peg: [this, peer] }, ctx)
150
+ }
151
+ out.dc = DONE === out.dc ? DONE : this.dc + 1
152
+ explainClose(te, out)
153
+ return out
154
+ }
155
+
144
156
  if (this.id !== peer.id) {
145
157
 
146
158
  // TODO: not resolved when all Vals in path are done is an error
@@ -359,31 +371,30 @@ class RefVal extends FeatureVal {
359
371
  if (this.mark.type || this.mark.hide) {
360
372
  out.mark.type = this.mark.type
361
373
  out.mark.hide = this.mark.hide
362
-
363
- // walk(out, (_key: string | number | undefined, val: Val) => {
364
- // val.mark.type = this.mark.type
365
- // val.mark.hide = this.mark.hide
366
- // return val
367
- // })
368
374
  }
369
375
 
370
376
  if (this.mark._hide_found) {
371
377
  out.mark.hide = true
372
378
  }
373
379
 
374
- // console.log('FOUND-B', out)
375
-
376
- out = out.clone(ctx)
380
+ // Cache clone+walk results per (ref, target) per iteration.
381
+ const cacheKey = this.id + '|' + out.id
382
+ const cache = ctx._refCloneCache
383
+ const cached = cache?.get(cacheKey)
384
+ if (cached !== undefined) {
385
+ out = cached
386
+ }
387
+ else {
388
+ out = out.clone(ctx)
377
389
 
378
- // if (this.mark.type || this.mark.hide) {
379
- walk(out, (_key: string | number | undefined, val: Val) => {
380
- val.mark.type = false
381
- val.mark.hide = false
382
- return val
383
- })
384
- //}
390
+ walk(out, (_key: string | number | undefined, val: Val) => {
391
+ val.mark.type = false
392
+ val.mark.hide = false
393
+ return val
394
+ })
385
395
 
386
- // onsole.log('FOUND-C', out)
396
+ cache?.set(cacheKey, out)
397
+ }
387
398
  }
388
399
  }
389
400
  }
@@ -0,0 +1,275 @@
1
+ /* Copyright (c) 2025 Richard Rodger, MIT License */
2
+
3
+ // SpreadVal represents a spread constraint (&:{...}).
4
+ // It owns all spread application logic — MapVal and ListVal know
5
+ // nothing about spreads. A parsed `{a:1, &:{x:2}}` becomes
6
+ // `ConjunctVal([MapVal({a:1}), SpreadVal({x:2})])`.
7
+ //
8
+ // SpreadVal.unify applies the constraint to a peer MapVal/ListVal
9
+ // by unifying each of the peer's children with a per-key clone of
10
+ // the spread constraint.
11
+
12
+ import type {
13
+ Val,
14
+ ValSpec,
15
+ } from '../type'
16
+
17
+ import {
18
+ DONE,
19
+ } from '../type'
20
+
21
+ import { AontuContext } from '../ctx'
22
+ import { unite } from '../unify'
23
+
24
+ import {
25
+ propagateMarks,
26
+ walk,
27
+ explainOpen,
28
+ ec,
29
+ explainClose,
30
+ } from '../utility'
31
+
32
+ import { makeNilErr } from '../err'
33
+
34
+ import {
35
+ top
36
+ } from './top'
37
+
38
+ import { FeatureVal } from './FeatureVal'
39
+ import { ConjunctVal } from './ConjunctVal'
40
+ import { NilVal } from './NilVal'
41
+ import { MapVal } from './MapVal'
42
+ import { ListVal } from './ListVal'
43
+
44
+
45
+ class SpreadVal extends FeatureVal {
46
+ isSpread = true
47
+ isGenable = true
48
+ cjo = 110000 // Sorts after MapVal/ListVal in ConjunctVal norm
49
+
50
+ constructor(spec: ValSpec, ctx?: AontuContext) {
51
+ super(spec, ctx)
52
+ }
53
+
54
+
55
+ unify(peer: Val, ctx: AontuContext): Val {
56
+ peer = peer ?? top()
57
+
58
+ const te = ctx.explain && explainOpen(ctx, ctx.explain, 'Spread', this, peer)
59
+
60
+ let out: Val
61
+
62
+ if (peer.isTop) {
63
+ // Self-unify: spread is a constraint, not a value that converges.
64
+ // Mark done to prevent fixpoint cycling.
65
+ out = this
66
+ out.dc = DONE
67
+ }
68
+ else if ((peer as any).isSpread) {
69
+ // SpreadVal + SpreadVal: unify the two constraints
70
+ const merged = unite(
71
+ te ? ctx.clone({ explain: ec(te, 'SPR') }) : ctx,
72
+ this.peg, peer.peg, 'spread-merge')
73
+ out = new SpreadVal({ peg: merged }, ctx)
74
+ out.dc = merged.done ? DONE : this.dc + 1
75
+ }
76
+ else if (peer.isMap) {
77
+ // SpreadVal + MapVal: apply spread to each map key
78
+ out = this.applyToMap(peer as any, ctx, te)
79
+ }
80
+ else if (peer.isList) {
81
+ // SpreadVal + ListVal: apply spread to each list element
82
+ out = this.applyToList(peer as any, ctx, te)
83
+ }
84
+ else if (peer.isConjunct) {
85
+ // SpreadVal + ConjunctVal: unify with the conjunct.
86
+ // The conjunct fold will place us last (high cjo).
87
+ out = peer.unify(this, te ? ctx.clone({ explain: ec(te, 'SCJ') }) : ctx)
88
+ }
89
+ else {
90
+ // SpreadVal + other: defer by wrapping in ConjunctVal
91
+ out = new ConjunctVal({ peg: [peer, this] }, ctx)
92
+ out.dc = this.dc + 1
93
+ }
94
+
95
+ // Track unresolved spread count.
96
+ // cc=0: increment for spreads that don't vanish.
97
+ // cc>0: decrement when a spread vanishes.
98
+ if (0 === ctx.cc) {
99
+ if (out.isSpread && !out.done) {
100
+ ctx.sc++
101
+ }
102
+ }
103
+ else if (ctx.sc > 0) {
104
+ if (!(out.isSpread && !out.done)) {
105
+ ctx.sc--
106
+ }
107
+ }
108
+
109
+ ctx.explain && explainClose(te, out)
110
+ return out
111
+ }
112
+
113
+
114
+ // Apply this spread constraint to each key in a MapVal.
115
+ // Uses unite() per key with the correct descended context.
116
+ applyToMap(map: MapVal, ctx: AontuContext, te: any): Val {
117
+ const spread = this.peg
118
+
119
+ const mapKeys = Object.keys(map.peg)
120
+
121
+ // If map has no keys, preserve the spread for future merges.
122
+ // Mark as DONE to prevent fixpoint cycling.
123
+ if (mapKeys.length === 0) {
124
+ const out = new ConjunctVal({ peg: [map, this] }, ctx)
125
+ out.dc = DONE
126
+ return out
127
+ }
128
+
129
+ const out = new MapVal({ peg: {} }, ctx)
130
+ out.closed = map.closed
131
+ out.optionalKeys = 0 < map.optionalKeys.length
132
+ ? [...map.optionalKeys] : map.optionalKeys
133
+ out.site = map.site
134
+
135
+ let done = true
136
+
137
+ for (const key of mapKeys) {
138
+ const child = map.peg[key]
139
+ const keyctx = ctx.descend(key)
140
+ // Clone the spread for this key's context, then resolve any
141
+ // path-dependent functions (key(), path(), etc.) by unifying
142
+ // with TOP. This ensures the spread values are concrete before
143
+ // being merged as peer keys into the child map.
144
+ let key_spread = spread.spreadClone(keyctx)
145
+ if (!key_spread.done) {
146
+ key_spread = unite(keyctx, key_spread, top(), 'spread-resolve')
147
+ }
148
+
149
+ // Clear type marks on the spread constraint root and its
150
+ // direct children — type() constrains but should not mark
151
+ // children as type-invisible.
152
+ key_spread.mark.type = false
153
+ key_spread.mark.hide = false
154
+ if (key_spread.isMap) {
155
+ for (const k in key_spread.peg) {
156
+ if (key_spread.peg[k]?.isVal) {
157
+ key_spread.peg[k].mark.type = false
158
+ }
159
+ }
160
+ }
161
+
162
+ propagateMarks(map, child)
163
+
164
+ out.peg[key] =
165
+ undefined === child ? key_spread :
166
+ child.isNil ? child :
167
+ key_spread.isNil ? key_spread :
168
+ key_spread.isTop && child.done ? child :
169
+ child.isTop && key_spread.done ? key_spread :
170
+ unite(te ? keyctx.clone({ explain: ec(te, 'SK:' + key) }) : keyctx,
171
+ child, key_spread, 'spread-apply')
172
+
173
+ done = done && (DONE === out.peg[key].dc)
174
+ }
175
+
176
+ out.dc = done ? DONE : map.dc + 1
177
+
178
+ propagateMarks(map, out)
179
+ // NOTE: do not propagate type/hide marks from the spread constraint
180
+ // to the output — a type spread constrains children but doesn't
181
+ // make them type-invisible.
182
+
183
+ return out
184
+ }
185
+
186
+
187
+ // Apply this spread constraint to each element in a ListVal.
188
+ applyToList(list: ListVal, ctx: AontuContext, te: any): Val {
189
+ const spread = this.peg
190
+
191
+ const listKeys = Object.keys(list.peg)
192
+
193
+ if (listKeys.length === 0) {
194
+ const out = new ConjunctVal({ peg: [list, this] }, ctx)
195
+ out.dc = DONE
196
+ return out
197
+ }
198
+
199
+ const out = new ListVal({ peg: [] }, ctx)
200
+ out.closed = list.closed
201
+ out.optionalKeys = 0 < list.optionalKeys.length
202
+ ? [...list.optionalKeys] : list.optionalKeys
203
+ out.site = list.site
204
+
205
+ let done = true
206
+
207
+ for (const key of listKeys) {
208
+ const child = list.peg[key]
209
+ const keyctx = ctx.descend(key)
210
+ const key_spread = spread.spreadClone(keyctx)
211
+
212
+ propagateMarks(list, child)
213
+
214
+ out.peg[key as any] =
215
+ undefined === child ? key_spread :
216
+ child.isNil ? child :
217
+ key_spread.isNil ? key_spread :
218
+ key_spread.isTop && child.done ? child :
219
+ child.isTop && key_spread.done ? key_spread :
220
+ unite(te ? keyctx.clone({ explain: ec(te, 'SL:' + key) }) : keyctx,
221
+ child, key_spread, 'spread-apply-list')
222
+
223
+ done = done && (DONE === out.peg[key as any]?.dc)
224
+ }
225
+
226
+ out.dc = done ? DONE : list.dc + 1
227
+
228
+ propagateMarks(list, out)
229
+
230
+ return out
231
+ }
232
+
233
+
234
+ clone(ctx: AontuContext, spec?: ValSpec): Val {
235
+ const out = new SpreadVal({
236
+ peg: this.peg.clone(ctx, spec),
237
+ ...(spec || {}),
238
+ }, ctx)
239
+ out.dc = this.done ? DONE : out.dc
240
+ out.site = this.site
241
+ return out
242
+ }
243
+
244
+
245
+ spreadClone(ctx: AontuContext): Val {
246
+ if (!this.isPathDependent) return this
247
+ return this.clone(ctx)
248
+ }
249
+
250
+
251
+ get canon(): string {
252
+ // Use {&:...} for map spreads, [&:...] for list spreads, {&:X} for scalars
253
+ const pc = this.peg.canon
254
+ if (this.peg.isMap) return '{&:' + pc.slice(1, -1) + '}' // {&:k:v,...}
255
+ if (this.peg.isList) return '[&:' + pc.slice(1, -1) + ']' // [&:v,...]
256
+ return '{&:' + pc + '}'
257
+ }
258
+
259
+
260
+ gen(_ctx: AontuContext) {
261
+ // Unresolved spread (never applied to a map/list) generates
262
+ // as undefined — the spread is a constraint, not a value.
263
+ return undefined
264
+ }
265
+
266
+
267
+ inspection() {
268
+ return 'spread'
269
+ }
270
+ }
271
+
272
+
273
+ export {
274
+ SpreadVal,
275
+ }
package/src/val/Val.ts CHANGED
@@ -69,10 +69,11 @@ abstract class Val {
69
69
  declare isList: boolean
70
70
  declare isScalar: boolean
71
71
  declare isScalarKind: boolean
72
- declare isRef: boolean
72
+ declare isPath: boolean
73
73
  declare isPref: boolean
74
74
  declare isVar: boolean
75
75
  declare isBag: boolean
76
+ declare isSpread: boolean
76
77
  declare isNumber: boolean
77
78
  declare isInteger: boolean
78
79
  declare isString: boolean
@@ -150,8 +151,10 @@ abstract class Val {
150
151
 
151
152
  if (Array.isArray(this.peg)) {
152
153
  let spread = (this.peg as any)[SPREAD]
153
- this.peg = this.peg.filter(n => undefined !== n)
154
- ; (this.peg as any)[SPREAD] = spread
154
+ if (this.peg.includes(undefined)) {
155
+ this.peg = this.peg.filter(n => undefined !== n)
156
+ }
157
+ ;(this.peg as any)[SPREAD] = spread
155
158
  }
156
159
 
157
160
  // spec.path takes precedence over ctx.path: lets callers (notably
@@ -239,7 +242,7 @@ abstract class Val {
239
242
  get isPathDependent(): boolean {
240
243
  if (this._isPathDependent !== undefined) return this._isPathDependent
241
244
  let dep =
242
- this.isRef || this.isKeyFunc || this.isPathFunc ||
245
+ this.isPath || this.isKeyFunc || this.isPathFunc ||
243
246
  this.isMoveFunc || this.isSuperFunc
244
247
  if (!dep) {
245
248
  const peg = this.peg
@@ -255,10 +258,6 @@ abstract class Val {
255
258
  if (c && c.isVal && c.isPathDependent) { dep = true; break }
256
259
  }
257
260
  }
258
- if (!dep) {
259
- const spreadCj = (this as any).spread?.cj as Val | undefined
260
- if (spreadCj && spreadCj.isPathDependent) dep = true
261
- }
262
261
  }
263
262
  this._isPathDependent = dep
264
263
  return dep
@@ -367,10 +366,11 @@ Object.assign(Val.prototype, {
367
366
  isList: false,
368
367
  isScalar: false,
369
368
  isScalarKind: false,
370
- isRef: false,
369
+ isPath: false,
371
370
  isPref: false,
372
371
  isVar: false,
373
372
  isBag: false,
373
+ isSpread: false,
374
374
  isNumber: false,
375
375
  isInteger: false,
376
376
  isString: false,
package/src/val/VarVal.ts CHANGED
@@ -62,7 +62,7 @@ class VarVal extends FeatureVal {
62
62
  if (this.peg.isVal) {
63
63
  // $.a.b.c - convert path to absolute
64
64
  // if (this.peg instanceof RefVal) {
65
- if (this.peg.isRef) {
65
+ if (this.peg.isPath) {
66
66
  this.peg.absolute = true
67
67
  nameVal = this.peg
68
68
  }
@@ -76,7 +76,7 @@ class VarVal extends FeatureVal {
76
76
  }
77
77
 
78
78
  // if (!(nameVal instanceof RefVal) && DONE === nameVal.dc) {
79
- if (!(nameVal.isRef) && DONE === nameVal.dc) {
79
+ if (!(nameVal.isPath) && DONE === nameVal.dc) {
80
80
  if (nameVal instanceof StringVal) {
81
81
  let found = ctx.vars[nameVal.peg]
82
82
  if (undefined === found) {
@@ -1 +0,0 @@
1
- {"version":3,"file":"RefVal.js","sourceRoot":"","sources":["../../src/val/RefVal.ts"],"names":[],"mappings":"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"}