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
@@ -13,7 +13,6 @@ import {
13
13
  import { makeNilErr } from '../err'
14
14
 
15
15
  import { NilVal } from '../val/NilVal'
16
- import { PathVal } from '../val/PathVal'
17
16
 
18
17
  import {
19
18
  walk
@@ -27,60 +26,6 @@ import { PrefFuncVal } from './PrefFuncVal'
27
26
 
28
27
 
29
28
 
30
- // Navigate the tree using a PathVal's resolved path and hide the source.
31
- function hideAtPath(root: Val, pv: PathVal) {
32
- // Compute the refpath the same way PathVal.find does
33
- const parts: string[] = []
34
- for (const part of pv.peg) {
35
- if ('string' === typeof part) parts.push(part)
36
- }
37
-
38
- let refpath: string[]
39
- if (pv.absolute) {
40
- refpath = parts
41
- }
42
- else {
43
- refpath = pv.path.slice(0, -1).concat(parts)
44
- }
45
-
46
- // Walk to the source, handling conjuncts/disjuncts
47
- let node: any = root
48
- for (let i = 0; i < refpath.length; i++) {
49
- const part = refpath[i]
50
- if (node?.isMap || node?.isList) {
51
- node = node.peg[part]
52
- }
53
- else if (node?.isConjunct || node?.isDisjunct) {
54
- // Search junction terms for the key
55
- let found = null
56
- const stack = [...node.peg]
57
- while (stack.length > 0) {
58
- const term = stack.pop()
59
- if (term?.isConjunct || term?.isDisjunct) {
60
- stack.push(...term.peg)
61
- }
62
- else if ((term?.isMap || term?.isList) && term.peg[part] != null) {
63
- found = term.peg[part]
64
- break
65
- }
66
- }
67
- node = found
68
- }
69
- else {
70
- return
71
- }
72
- if (node == null) return
73
- }
74
-
75
- // Mark the source value hidden
76
- node.mark.hide = true
77
- walk(node, (_key: string | number | undefined, val: Val) => {
78
- val.mark.hide = true
79
- return val
80
- })
81
- }
82
-
83
-
84
29
  class MoveFuncVal extends FuncBaseVal {
85
30
  isMoveFunc = true
86
31
 
@@ -105,40 +50,30 @@ class MoveFuncVal extends FuncBaseVal {
105
50
  }
106
51
 
107
52
  resolve(ctx: AontuContext, args: Val[]) {
108
- let arg = args[0] ?? makeNilErr(ctx, 'arg', this)
109
- if (arg.isNil) return arg
53
+ let out = args[0] ?? makeNilErr(ctx, 'arg', this)
110
54
 
111
- let src: Val
55
+ const orig = out
112
56
 
113
- if (arg instanceof PathVal) {
114
- // Get clone for the destination
115
- src = arg.find(ctx) as Val
116
- if (src == null || src.isNil) return makeNilErr(ctx, 'arg', this)
57
+ if (!orig.isNil) {
58
+ const src = orig.clone(ctx)
117
59
 
118
- // Hide the source in the tree by navigating to it
119
- hideAtPath(ctx.root as Val, arg)
120
- }
121
- else {
122
- src = arg.clone(ctx)
60
+ if (src.isRef) {
61
+ src.mark._hide_found = true
62
+ }
123
63
 
124
- // Hide the original
125
- arg.mark.hide = true
126
- walk(arg, (_key: string | number | undefined, val: Val) => {
64
+ walk(orig, (_key: string | number | undefined, val: Val) => {
127
65
  val.mark.hide = true
128
66
  return val
129
67
  })
68
+
69
+ // out = new CopyFuncVal({ peg: [src] }, ctx)
70
+ out = new PrefFuncVal({ peg: [src] }, ctx)
71
+ // out = src
130
72
  }
131
73
 
132
- // Clear marks on the clone (like copy)
133
- src.mark.type = false
134
- src.mark.hide = false
135
- walk(src, (_key: string | number | undefined, val: Val) => {
136
- val.mark.type = false
137
- val.mark.hide = false
138
- return val
139
- })
74
+ // console.log('MOVE-resolve', orig, out)
140
75
 
141
- return new PrefFuncVal({ peg: [src] }, ctx)
76
+ return out
142
77
  }
143
78
  }
144
79
 
@@ -6,10 +6,6 @@ import type {
6
6
  ValSpec,
7
7
  } from '../type'
8
8
 
9
- import {
10
- DONE,
11
- } from '../type'
12
-
13
9
  import {
14
10
  AontuContext,
15
11
  } from '../ctx'
@@ -17,7 +13,7 @@ import {
17
13
  import { makeNilErr } from '../err'
18
14
 
19
15
  import { NilVal } from '../val/NilVal'
20
- import { PathVal } from '../val/PathVal'
16
+ import { RefVal } from '../val/RefVal'
21
17
  import { FuncBaseVal } from './FuncBaseVal'
22
18
 
23
19
 
@@ -49,26 +45,12 @@ class PathFuncVal extends FuncBaseVal {
49
45
  let arg = args[0]
50
46
 
51
47
  if (0 === this.prepared) {
52
- if (arg instanceof PathVal) {
53
- // PathVal from dotted arg resolve via find().
54
- const found = arg.find(ctx)
55
- if (found != null && !found.isNil) {
56
- arg = found
57
- }
58
- else {
59
- arg.dc = DONE
60
- }
61
- }
62
- else if (arg.isScalar && arg.peg != null && arg.peg !== ''
63
- && ('string' === typeof arg.peg || arg.isNumber)) {
64
- // String or number arg like path("foo") or path(0.2) — create a path value
65
- arg = this.place(new PathVal({ peg: [arg], absolute: false })) as PathVal
66
- arg.dc = DONE
48
+ if (arg.isScalar) {
49
+ arg = this.place(new RefVal({ peg: [arg], absolute: false }))
67
50
  }
68
- else if (arg.isNil || (arg.isScalar && (arg.peg === '' || arg.peg == null))) {
51
+ else if (!arg.isRef) {
69
52
  arg = makeNilErr(ctx, 'invalid-arg', this)
70
53
  }
71
- // else: already resolved by preprocessing — pass through
72
54
  }
73
55
 
74
56
  args[0] = arg
@@ -82,13 +64,6 @@ class PathFuncVal extends FuncBaseVal {
82
64
  resolve(ctx: AontuContext, args: Val[]) {
83
65
  let out = args[0] ?? makeNilErr(ctx, 'arg', this)
84
66
 
85
- if (out instanceof PathVal) {
86
- const found = out.find(ctx)
87
- if (found != null && !found.isNil) {
88
- out = found
89
- }
90
- }
91
-
92
67
  return out
93
68
  }
94
69
 
@@ -22,7 +22,6 @@ import {
22
22
 
23
23
  import { top } from './top'
24
24
 
25
- import { ConjunctVal } from './ConjunctVal'
26
25
  import { FeatureVal } from './FeatureVal'
27
26
 
28
27
 
@@ -65,13 +64,10 @@ class PrefVal extends FeatureVal {
65
64
  if (!this.peg.done) {
66
65
  const resolved = unite(te ? ctx.clone({ explain: ec(te, 'RES') }) : ctx,
67
66
  this.peg, top(), 'pref/resolve')
67
+ // console.log('PREF-RESOLVED', this.peg.canon, '->', resolved)
68
68
  this.peg = resolved
69
69
  this.superpeg = this.peg.superior()
70
70
  }
71
- else if (this.superpeg.isTop && !this.peg.isTop) {
72
- // Stale superpeg from pre-resolved PathVal — recalculate
73
- this.superpeg = this.peg.superior()
74
- }
75
71
 
76
72
  if (peer instanceof PrefVal) {
77
73
  why += 'pref-'
@@ -110,20 +106,11 @@ class PrefVal extends FeatureVal {
110
106
  else if (!peer.isTop) {
111
107
  why += 'super-'
112
108
 
113
- // If peg is unresolved (e.g. deferred ref), don't decide yet
114
- // preserve both sides so a later pass can resolve.
115
- if (!this.peg.done) {
116
- out = new ConjunctVal({ peg: [this, peer] }, ctx)
117
- done = false
118
- why += 'defer'
119
- }
120
- else {
121
- out = unite(te ? ctx.clone({ explain: ec(te, 'SUPER') }) : ctx,
122
- this.superpeg, peer, 'pref-super/' + this.id)
123
- if (out.same(this.superpeg)) {
124
- out = this.peg
125
- why += 'same'
126
- }
109
+ out = unite(te ? ctx.clone({ explain: ec(te, 'SUPER') }) : ctx,
110
+ this.superpeg, peer, 'pref-super/' + this.id)
111
+ if (out.same(this.superpeg)) {
112
+ out = this.peg
113
+ why += 'same'
127
114
  }
128
115
 
129
116
  // }
@@ -1,6 +1,8 @@
1
1
  /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
2
 
3
3
 
4
+ import Util from 'node:util'
5
+
4
6
  import {
5
7
  walk,
6
8
  explainOpen,
@@ -14,7 +16,6 @@ import type {
14
16
  ValSpec,
15
17
  } from '../type'
16
18
 
17
-
18
19
  import {
19
20
  DONE,
20
21
  } from '../type'
@@ -136,23 +137,10 @@ class RefVal extends FeatureVal {
136
137
  unify(peer: Val, ctx: AontuContext): Val {
137
138
  peer = peer ?? top()
138
139
 
139
- // TEMPORARY: nerf RefVals to verify spread-first resolution
140
- return makeNilErr(ctx, 'ref_test_block', this, peer)
141
-
142
140
  const te = ctx.explain && explainOpen(ctx, ctx.explain, 'Ref', this, peer)
143
141
  let out: Val = this
144
142
  let why = 'id'
145
143
 
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
-
156
144
  if (this.id !== peer.id) {
157
145
 
158
146
  // TODO: not resolved when all Vals in path are done is an error
@@ -371,30 +359,31 @@ class RefVal extends FeatureVal {
371
359
  if (this.mark.type || this.mark.hide) {
372
360
  out.mark.type = this.mark.type
373
361
  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
+ // })
374
368
  }
375
369
 
376
370
  if (this.mark._hide_found) {
377
371
  out.mark.hide = true
378
372
  }
379
373
 
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)
374
+ // console.log('FOUND-B', out)
389
375
 
390
- walk(out, (_key: string | number | undefined, val: Val) => {
391
- val.mark.type = false
392
- val.mark.hide = false
393
- return val
394
- })
376
+ out = out.clone(ctx)
395
377
 
396
- cache?.set(cacheKey, out)
397
- }
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
+ //}
385
+
386
+ // onsole.log('FOUND-C', out)
398
387
  }
399
388
  }
400
389
  }
package/src/val/Val.ts CHANGED
@@ -69,11 +69,10 @@ abstract class Val {
69
69
  declare isList: boolean
70
70
  declare isScalar: boolean
71
71
  declare isScalarKind: boolean
72
- declare isPath: boolean
72
+ declare isRef: boolean
73
73
  declare isPref: boolean
74
74
  declare isVar: boolean
75
75
  declare isBag: boolean
76
- declare isSpread: boolean
77
76
  declare isNumber: boolean
78
77
  declare isInteger: boolean
79
78
  declare isString: boolean
@@ -151,10 +150,8 @@ abstract class Val {
151
150
 
152
151
  if (Array.isArray(this.peg)) {
153
152
  let spread = (this.peg as any)[SPREAD]
154
- if (this.peg.includes(undefined)) {
155
- this.peg = this.peg.filter(n => undefined !== n)
156
- }
157
- ;(this.peg as any)[SPREAD] = spread
153
+ this.peg = this.peg.filter(n => undefined !== n)
154
+ ; (this.peg as any)[SPREAD] = spread
158
155
  }
159
156
 
160
157
  // spec.path takes precedence over ctx.path: lets callers (notably
@@ -242,7 +239,7 @@ abstract class Val {
242
239
  get isPathDependent(): boolean {
243
240
  if (this._isPathDependent !== undefined) return this._isPathDependent
244
241
  let dep =
245
- this.isPath || this.isKeyFunc || this.isPathFunc ||
242
+ this.isRef || this.isKeyFunc || this.isPathFunc ||
246
243
  this.isMoveFunc || this.isSuperFunc
247
244
  if (!dep) {
248
245
  const peg = this.peg
@@ -258,6 +255,10 @@ abstract class Val {
258
255
  if (c && c.isVal && c.isPathDependent) { dep = true; break }
259
256
  }
260
257
  }
258
+ if (!dep) {
259
+ const spreadCj = (this as any).spread?.cj as Val | undefined
260
+ if (spreadCj && spreadCj.isPathDependent) dep = true
261
+ }
261
262
  }
262
263
  this._isPathDependent = dep
263
264
  return dep
@@ -366,11 +367,10 @@ Object.assign(Val.prototype, {
366
367
  isList: false,
367
368
  isScalar: false,
368
369
  isScalarKind: false,
369
- isPath: false,
370
+ isRef: false,
370
371
  isPref: false,
371
372
  isVar: false,
372
373
  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.isPath) {
65
+ if (this.peg.isRef) {
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.isPath) && DONE === nameVal.dc) {
79
+ if (!(nameVal.isRef) && DONE === nameVal.dc) {
80
80
  if (nameVal instanceof StringVal) {
81
81
  let found = ctx.vars[nameVal.peg]
82
82
  if (undefined === found) {
package/README.md DELETED
@@ -1,18 +0,0 @@
1
- <a name="top"></a>
2
-
3
- # Aontu: JSON Structure unifier
4
-
5
- [![npm version](https://img.shields.io/npm/v/aontu.svg)](https://npmjs.com/package/aontu)
6
- [![build](https://github.com/rjrodger/aontu/actions/workflows/build.yml/badge.svg)](https://github.com/rjrodger/aontu/actions/workflows/build.yml)
7
- [![Coverage Status](https://coveralls.io/repos/github/rjrodger/aontu/badge.svg?branch=main)](https://coveralls.io/github/rjrodger/aontu?branch=main)
8
- [![Known Vulnerabilities](https://snyk.io/test/github/rjrodger/aontu/badge.svg)](https://snyk.io/test/github/rjrodger/aontu)
9
- [![DeepScan grade](https://deepscan.io/api/teams/5016/projects/26218/branches/831193/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=5016&pid=26218&bid=831193)
10
- [![Maintainability](https://api.codeclimate.com/v1/badges/2ee16ebd2281bc837d9b/maintainability)](https://codeclimate.com/github/rjrodger/aontu/maintainability)
11
-
12
- | ![Voxgig](https://www.voxgig.com/res/img/vgt01r.png) | This open source module is sponsored and supported by [Voxgig](https://www.voxgig.com). |
13
- |---|---|
14
-
15
-
16
- This unifier is heavily inspired by [Cue Lang](https://cuelang.org/)
17
- and may be regarded as a purpose-specific dialect.
18
-
@@ -1 +0,0 @@
1
- {"version":3,"file":"PathVal.js","sourceRoot":"","sources":["../../src/val/PathVal.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { Val, ValSpec } from '../type';
2
- import { AontuContext } from '../ctx';
3
- import { FeatureVal } from './FeatureVal';
4
- import { MapVal } from './MapVal';
5
- import { ListVal } from './ListVal';
6
- declare class SpreadVal extends FeatureVal {
7
- isSpread: boolean;
8
- isGenable: boolean;
9
- cjo: number;
10
- constructor(spec: ValSpec, ctx?: AontuContext);
11
- unify(peer: Val, ctx: AontuContext): Val;
12
- applyToMap(map: MapVal, ctx: AontuContext, te: any): Val;
13
- applyToList(list: ListVal, ctx: AontuContext, te: any): Val;
14
- clone(ctx: AontuContext, spec?: ValSpec): Val;
15
- spreadClone(ctx: AontuContext): Val;
16
- get canon(): string;
17
- gen(_ctx: AontuContext): undefined;
18
- inspection(): string;
19
- }
20
- export { SpreadVal, };
@@ -1,194 +0,0 @@
1
- "use strict";
2
- /* Copyright (c) 2025 Richard Rodger, MIT License */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.SpreadVal = void 0;
5
- const type_1 = require("../type");
6
- const unify_1 = require("../unify");
7
- const utility_1 = require("../utility");
8
- const top_1 = require("./top");
9
- const FeatureVal_1 = require("./FeatureVal");
10
- const ConjunctVal_1 = require("./ConjunctVal");
11
- const MapVal_1 = require("./MapVal");
12
- const ListVal_1 = require("./ListVal");
13
- class SpreadVal extends FeatureVal_1.FeatureVal {
14
- constructor(spec, ctx) {
15
- super(spec, ctx);
16
- this.isSpread = true;
17
- this.isGenable = true;
18
- this.cjo = 110000; // Sorts after MapVal/ListVal in ConjunctVal norm
19
- }
20
- unify(peer, ctx) {
21
- peer = peer ?? (0, top_1.top)();
22
- const te = ctx.explain && (0, utility_1.explainOpen)(ctx, ctx.explain, 'Spread', this, peer);
23
- let out;
24
- if (peer.isTop) {
25
- // Self-unify: spread is a constraint, not a value that converges.
26
- // Mark done to prevent fixpoint cycling.
27
- out = this;
28
- out.dc = type_1.DONE;
29
- }
30
- else if (peer.isSpread) {
31
- // SpreadVal + SpreadVal: unify the two constraints
32
- const merged = (0, unify_1.unite)(te ? ctx.clone({ explain: (0, utility_1.ec)(te, 'SPR') }) : ctx, this.peg, peer.peg, 'spread-merge');
33
- out = new SpreadVal({ peg: merged }, ctx);
34
- out.dc = merged.done ? type_1.DONE : this.dc + 1;
35
- }
36
- else if (peer.isMap) {
37
- // SpreadVal + MapVal: apply spread to each map key
38
- out = this.applyToMap(peer, ctx, te);
39
- }
40
- else if (peer.isList) {
41
- // SpreadVal + ListVal: apply spread to each list element
42
- out = this.applyToList(peer, ctx, te);
43
- }
44
- else if (peer.isConjunct) {
45
- // SpreadVal + ConjunctVal: unify with the conjunct.
46
- // The conjunct fold will place us last (high cjo).
47
- out = peer.unify(this, te ? ctx.clone({ explain: (0, utility_1.ec)(te, 'SCJ') }) : ctx);
48
- }
49
- else {
50
- // SpreadVal + other: defer by wrapping in ConjunctVal
51
- out = new ConjunctVal_1.ConjunctVal({ peg: [peer, this] }, ctx);
52
- out.dc = this.dc + 1;
53
- }
54
- // Track unresolved spread count.
55
- // cc=0: increment for spreads that don't vanish.
56
- // cc>0: decrement when a spread vanishes.
57
- if (0 === ctx.cc) {
58
- if (out.isSpread && !out.done) {
59
- ctx.sc++;
60
- }
61
- }
62
- else if (ctx.sc > 0) {
63
- if (!(out.isSpread && !out.done)) {
64
- ctx.sc--;
65
- }
66
- }
67
- ctx.explain && (0, utility_1.explainClose)(te, out);
68
- return out;
69
- }
70
- // Apply this spread constraint to each key in a MapVal.
71
- // Uses unite() per key with the correct descended context.
72
- applyToMap(map, ctx, te) {
73
- const spread = this.peg;
74
- const mapKeys = Object.keys(map.peg);
75
- // If map has no keys, preserve the spread for future merges.
76
- // Mark as DONE to prevent fixpoint cycling.
77
- if (mapKeys.length === 0) {
78
- const out = new ConjunctVal_1.ConjunctVal({ peg: [map, this] }, ctx);
79
- out.dc = type_1.DONE;
80
- return out;
81
- }
82
- const out = new MapVal_1.MapVal({ peg: {} }, ctx);
83
- out.closed = map.closed;
84
- out.optionalKeys = 0 < map.optionalKeys.length
85
- ? [...map.optionalKeys] : map.optionalKeys;
86
- out.site = map.site;
87
- let done = true;
88
- for (const key of mapKeys) {
89
- const child = map.peg[key];
90
- const keyctx = ctx.descend(key);
91
- // Clone the spread for this key's context, then resolve any
92
- // path-dependent functions (key(), path(), etc.) by unifying
93
- // with TOP. This ensures the spread values are concrete before
94
- // being merged as peer keys into the child map.
95
- let key_spread = spread.spreadClone(keyctx);
96
- if (!key_spread.done) {
97
- key_spread = (0, unify_1.unite)(keyctx, key_spread, (0, top_1.top)(), 'spread-resolve');
98
- }
99
- // Clear type marks on the spread constraint root and its
100
- // direct children — type() constrains but should not mark
101
- // children as type-invisible.
102
- key_spread.mark.type = false;
103
- key_spread.mark.hide = false;
104
- if (key_spread.isMap) {
105
- for (const k in key_spread.peg) {
106
- if (key_spread.peg[k]?.isVal) {
107
- key_spread.peg[k].mark.type = false;
108
- }
109
- }
110
- }
111
- (0, utility_1.propagateMarks)(map, child);
112
- out.peg[key] =
113
- undefined === child ? key_spread :
114
- child.isNil ? child :
115
- key_spread.isNil ? key_spread :
116
- key_spread.isTop && child.done ? child :
117
- child.isTop && key_spread.done ? key_spread :
118
- (0, unify_1.unite)(te ? keyctx.clone({ explain: (0, utility_1.ec)(te, 'SK:' + key) }) : keyctx, child, key_spread, 'spread-apply');
119
- done = done && (type_1.DONE === out.peg[key].dc);
120
- }
121
- out.dc = done ? type_1.DONE : map.dc + 1;
122
- (0, utility_1.propagateMarks)(map, out);
123
- // NOTE: do not propagate type/hide marks from the spread constraint
124
- // to the output — a type spread constrains children but doesn't
125
- // make them type-invisible.
126
- return out;
127
- }
128
- // Apply this spread constraint to each element in a ListVal.
129
- applyToList(list, ctx, te) {
130
- const spread = this.peg;
131
- const listKeys = Object.keys(list.peg);
132
- if (listKeys.length === 0) {
133
- const out = new ConjunctVal_1.ConjunctVal({ peg: [list, this] }, ctx);
134
- out.dc = type_1.DONE;
135
- return out;
136
- }
137
- const out = new ListVal_1.ListVal({ peg: [] }, ctx);
138
- out.closed = list.closed;
139
- out.optionalKeys = 0 < list.optionalKeys.length
140
- ? [...list.optionalKeys] : list.optionalKeys;
141
- out.site = list.site;
142
- let done = true;
143
- for (const key of listKeys) {
144
- const child = list.peg[key];
145
- const keyctx = ctx.descend(key);
146
- const key_spread = spread.spreadClone(keyctx);
147
- (0, utility_1.propagateMarks)(list, child);
148
- out.peg[key] =
149
- undefined === child ? key_spread :
150
- child.isNil ? child :
151
- key_spread.isNil ? key_spread :
152
- key_spread.isTop && child.done ? child :
153
- child.isTop && key_spread.done ? key_spread :
154
- (0, unify_1.unite)(te ? keyctx.clone({ explain: (0, utility_1.ec)(te, 'SL:' + key) }) : keyctx, child, key_spread, 'spread-apply-list');
155
- done = done && (type_1.DONE === out.peg[key]?.dc);
156
- }
157
- out.dc = done ? type_1.DONE : list.dc + 1;
158
- (0, utility_1.propagateMarks)(list, out);
159
- return out;
160
- }
161
- clone(ctx, spec) {
162
- const out = new SpreadVal({
163
- peg: this.peg.clone(ctx, spec),
164
- ...(spec || {}),
165
- }, ctx);
166
- out.dc = this.done ? type_1.DONE : out.dc;
167
- out.site = this.site;
168
- return out;
169
- }
170
- spreadClone(ctx) {
171
- if (!this.isPathDependent)
172
- return this;
173
- return this.clone(ctx);
174
- }
175
- get canon() {
176
- // Use {&:...} for map spreads, [&:...] for list spreads, {&:X} for scalars
177
- const pc = this.peg.canon;
178
- if (this.peg.isMap)
179
- return '{&:' + pc.slice(1, -1) + '}'; // {&:k:v,...}
180
- if (this.peg.isList)
181
- return '[&:' + pc.slice(1, -1) + ']'; // [&:v,...]
182
- return '{&:' + pc + '}';
183
- }
184
- gen(_ctx) {
185
- // Unresolved spread (never applied to a map/list) generates
186
- // as undefined — the spread is a constraint, not a value.
187
- return undefined;
188
- }
189
- inspection() {
190
- return 'spread';
191
- }
192
- }
193
- exports.SpreadVal = SpreadVal;
194
- //# sourceMappingURL=SpreadVal.js.map