aontu 0.29.0 → 0.30.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.
Files changed (270) hide show
  1. package/dist/aontu.d.ts +17 -13
  2. package/dist/aontu.js +145 -60
  3. package/dist/aontu.js.map +1 -1
  4. package/dist/ctx.d.ts +51 -0
  5. package/dist/ctx.js +105 -0
  6. package/dist/ctx.js.map +1 -0
  7. package/dist/err.d.ts +12 -0
  8. package/dist/err.js +123 -0
  9. package/dist/err.js.map +1 -0
  10. package/dist/hints.d.ts +8 -0
  11. package/dist/hints.js +84 -0
  12. package/dist/hints.js.map +1 -0
  13. package/dist/lang.d.ts +11 -0
  14. package/dist/lang.js +569 -0
  15. package/dist/lang.js.map +1 -0
  16. package/dist/site.d.ts +12 -0
  17. package/dist/site.js +27 -0
  18. package/dist/site.js.map +1 -0
  19. package/dist/tsconfig.tsbuildinfo +1 -0
  20. package/dist/type.d.ts +32 -0
  21. package/dist/type.js +16 -0
  22. package/dist/type.js.map +1 -0
  23. package/dist/unify.d.ts +14 -0
  24. package/dist/unify.js +156 -0
  25. package/dist/unify.js.map +1 -0
  26. package/dist/utility.d.ts +14 -0
  27. package/dist/utility.js +122 -0
  28. package/dist/utility.js.map +1 -0
  29. package/dist/val/BagVal.d.ts +10 -0
  30. package/dist/val/BagVal.js +15 -0
  31. package/dist/val/BagVal.js.map +1 -0
  32. package/dist/val/BooleanVal.d.ts +9 -0
  33. package/dist/val/BooleanVal.js +16 -0
  34. package/dist/val/BooleanVal.js.map +1 -0
  35. package/dist/val/CloseFuncVal.d.ts +11 -0
  36. package/dist/val/CloseFuncVal.js +32 -0
  37. package/dist/val/CloseFuncVal.js.map +1 -0
  38. package/dist/val/ConjunctVal.d.ts +14 -0
  39. package/dist/val/ConjunctVal.js +187 -0
  40. package/dist/val/ConjunctVal.js.map +1 -0
  41. package/dist/val/CopyFuncVal.d.ts +13 -0
  42. package/dist/val/CopyFuncVal.js +35 -0
  43. package/dist/val/CopyFuncVal.js.map +1 -0
  44. package/dist/val/DisjunctVal.d.ts +19 -0
  45. package/dist/val/DisjunctVal.js +194 -0
  46. package/dist/val/DisjunctVal.js.map +1 -0
  47. package/dist/val/FeatureVal.d.ts +10 -0
  48. package/dist/val/FeatureVal.js +29 -0
  49. package/dist/val/FeatureVal.js.map +1 -0
  50. package/dist/val/FuncBaseVal.d.ts +15 -0
  51. package/dist/val/FuncBaseVal.js +127 -0
  52. package/dist/val/FuncBaseVal.js.map +1 -0
  53. package/dist/val/HideFuncVal.d.ts +12 -0
  54. package/dist/val/HideFuncVal.js +48 -0
  55. package/dist/val/HideFuncVal.js.map +1 -0
  56. package/dist/val/IntegerVal.d.ts +9 -0
  57. package/dist/val/IntegerVal.js +46 -0
  58. package/dist/val/IntegerVal.js.map +1 -0
  59. package/dist/val/JunctionVal.d.ts +12 -0
  60. package/dist/val/JunctionVal.js +31 -0
  61. package/dist/val/JunctionVal.js.map +1 -0
  62. package/dist/val/KeyFuncVal.d.ts +12 -0
  63. package/dist/val/KeyFuncVal.js +34 -0
  64. package/dist/val/KeyFuncVal.js.map +1 -0
  65. package/dist/val/ListVal.d.ts +17 -0
  66. package/dist/val/ListVal.js +186 -0
  67. package/dist/val/ListVal.js.map +1 -0
  68. package/dist/val/LowerFuncVal.d.ts +12 -0
  69. package/dist/val/LowerFuncVal.js +40 -0
  70. package/dist/val/LowerFuncVal.js.map +1 -0
  71. package/dist/val/MapVal.d.ts +16 -0
  72. package/dist/val/MapVal.js +211 -0
  73. package/dist/val/MapVal.js.map +1 -0
  74. package/dist/val/MoveFuncVal.d.ts +11 -0
  75. package/dist/val/MoveFuncVal.js +41 -0
  76. package/dist/val/MoveFuncVal.js.map +1 -0
  77. package/dist/val/NilVal.d.ts +25 -0
  78. package/dist/{lib/val/Nil.js → val/NilVal.js} +38 -30
  79. package/dist/val/NilVal.js.map +1 -0
  80. package/dist/val/NullVal.d.ts +9 -0
  81. package/dist/val/NullVal.js +18 -0
  82. package/dist/val/NullVal.js.map +1 -0
  83. package/dist/val/NumberVal.d.ts +9 -0
  84. package/dist/val/NumberVal.js +44 -0
  85. package/dist/val/NumberVal.js.map +1 -0
  86. package/dist/val/OpBaseVal.d.ts +18 -0
  87. package/dist/val/OpBaseVal.js +152 -0
  88. package/dist/val/OpBaseVal.js.map +1 -0
  89. package/dist/val/OpenFuncVal.d.ts +11 -0
  90. package/dist/val/OpenFuncVal.js +30 -0
  91. package/dist/val/OpenFuncVal.js.map +1 -0
  92. package/dist/val/PathFuncVal.d.ts +13 -0
  93. package/dist/val/PathFuncVal.js +42 -0
  94. package/dist/val/PathFuncVal.js.map +1 -0
  95. package/dist/val/PlusOpVal.d.ts +16 -0
  96. package/dist/val/PlusOpVal.js +59 -0
  97. package/dist/val/PlusOpVal.js.map +1 -0
  98. package/dist/val/PrefFuncVal.d.ts +11 -0
  99. package/dist/val/PrefFuncVal.js +39 -0
  100. package/dist/val/PrefFuncVal.js.map +1 -0
  101. package/dist/val/PrefVal.d.ts +15 -0
  102. package/dist/val/PrefVal.js +104 -0
  103. package/dist/val/PrefVal.js.map +1 -0
  104. package/dist/val/RefVal.d.ts +22 -0
  105. package/dist/val/RefVal.js +276 -0
  106. package/dist/val/RefVal.js.map +1 -0
  107. package/dist/val/ScalarKindVal.d.ts +16 -0
  108. package/dist/val/ScalarKindVal.js +76 -0
  109. package/dist/val/ScalarKindVal.js.map +1 -0
  110. package/dist/val/ScalarVal.d.ts +16 -0
  111. package/dist/val/ScalarVal.js +61 -0
  112. package/dist/val/ScalarVal.js.map +1 -0
  113. package/dist/val/StringVal.d.ts +10 -0
  114. package/dist/val/StringVal.js +19 -0
  115. package/dist/val/StringVal.js.map +1 -0
  116. package/dist/val/SuperFuncVal.d.ts +11 -0
  117. package/dist/val/SuperFuncVal.js +22 -0
  118. package/dist/val/SuperFuncVal.js.map +1 -0
  119. package/dist/val/TopVal.d.ts +16 -0
  120. package/dist/val/TopVal.js +38 -0
  121. package/dist/val/TopVal.js.map +1 -0
  122. package/dist/val/TypeFuncVal.d.ts +12 -0
  123. package/dist/val/TypeFuncVal.js +35 -0
  124. package/dist/val/TypeFuncVal.js.map +1 -0
  125. package/dist/val/UpperFuncVal.d.ts +12 -0
  126. package/dist/val/UpperFuncVal.js +40 -0
  127. package/dist/val/UpperFuncVal.js.map +1 -0
  128. package/dist/val/Val.d.ts +89 -0
  129. package/dist/val/Val.js +186 -0
  130. package/dist/val/Val.js.map +1 -0
  131. package/dist/val/VarVal.d.ts +13 -0
  132. package/dist/val/VarVal.js +109 -0
  133. package/dist/val/VarVal.js.map +1 -0
  134. package/dist/val/top.d.ts +2 -0
  135. package/dist/val/top.js +10 -0
  136. package/dist/val/top.js.map +1 -0
  137. package/dist/val/valutil.d.ts +2 -0
  138. package/dist/val/valutil.js +30 -0
  139. package/dist/val/valutil.js.map +1 -0
  140. package/package.json +20 -38
  141. package/src/aontu.ts +218 -0
  142. package/src/ctx.ts +201 -0
  143. package/src/err.ts +172 -0
  144. package/src/hints.ts +119 -0
  145. package/src/lang.ts +782 -0
  146. package/src/site.ts +34 -0
  147. package/src/tsconfig.json +16 -0
  148. package/src/type.ts +72 -0
  149. package/src/unify.ts +225 -0
  150. package/src/utility.ts +179 -0
  151. package/src/val/BagVal.ts +33 -0
  152. package/src/val/BooleanVal.ts +32 -0
  153. package/src/val/CloseFuncVal.ts +61 -0
  154. package/src/val/ConjunctVal.ts +285 -0
  155. package/src/val/CopyFuncVal.ts +69 -0
  156. package/src/val/DisjunctVal.ts +288 -0
  157. package/src/val/FeatureVal.ts +56 -0
  158. package/src/val/FuncBaseVal.ts +198 -0
  159. package/src/val/HideFuncVal.ts +85 -0
  160. package/src/val/IntegerVal.ts +75 -0
  161. package/src/val/JunctionVal.ts +54 -0
  162. package/src/val/KeyFuncVal.ts +67 -0
  163. package/src/val/ListVal.ts +286 -0
  164. package/src/val/LowerFuncVal.ts +73 -0
  165. package/src/val/MapVal.ts +316 -0
  166. package/src/val/MoveFuncVal.ts +79 -0
  167. package/{lib/val/Nil.ts → src/val/NilVal.ts} +49 -37
  168. package/src/val/NullVal.ts +38 -0
  169. package/src/val/NumberVal.ts +75 -0
  170. package/src/val/OpBaseVal.ts +231 -0
  171. package/src/val/OpenFuncVal.ts +60 -0
  172. package/src/val/PathFuncVal.ts +75 -0
  173. package/src/val/PlusOpVal.ts +92 -0
  174. package/src/val/PrefFuncVal.ts +73 -0
  175. package/src/val/PrefVal.ts +159 -0
  176. package/src/val/RefVal.ts +384 -0
  177. package/src/val/ScalarKindVal.ts +125 -0
  178. package/src/val/ScalarVal.ts +105 -0
  179. package/src/val/StringVal.ts +37 -0
  180. package/src/val/SuperFuncVal.ts +46 -0
  181. package/src/val/TopVal.ts +69 -0
  182. package/src/val/TypeFuncVal.ts +69 -0
  183. package/src/val/UpperFuncVal.ts +72 -0
  184. package/src/val/Val.ts +294 -0
  185. package/src/val/VarVal.ts +171 -0
  186. package/src/val/top.ts +12 -0
  187. package/src/val/valutil.ts +31 -0
  188. package/aontu.ts +0 -92
  189. package/dist/lib/err.d.ts +0 -4
  190. package/dist/lib/err.js +0 -61
  191. package/dist/lib/err.js.map +0 -1
  192. package/dist/lib/lang.d.ts +0 -15
  193. package/dist/lib/lang.js +0 -409
  194. package/dist/lib/lang.js.map +0 -1
  195. package/dist/lib/op/disjunct.d.ts +0 -3
  196. package/dist/lib/op/disjunct.js +0 -28
  197. package/dist/lib/op/disjunct.js.map +0 -1
  198. package/dist/lib/op/op.d.ts +0 -6
  199. package/dist/lib/op/op.js +0 -9
  200. package/dist/lib/op/op.js.map +0 -1
  201. package/dist/lib/op/unite.d.ts +0 -3
  202. package/dist/lib/op/unite.js +0 -100
  203. package/dist/lib/op/unite.js.map +0 -1
  204. package/dist/lib/type.d.ts +0 -49
  205. package/dist/lib/type.js +0 -7
  206. package/dist/lib/type.js.map +0 -1
  207. package/dist/lib/unify.d.ts +0 -38
  208. package/dist/lib/unify.js +0 -67
  209. package/dist/lib/unify.js.map +0 -1
  210. package/dist/lib/utility.d.ts +0 -3
  211. package/dist/lib/utility.js +0 -16
  212. package/dist/lib/utility.js.map +0 -1
  213. package/dist/lib/val/ConjunctVal.d.ts +0 -17
  214. package/dist/lib/val/ConjunctVal.js +0 -171
  215. package/dist/lib/val/ConjunctVal.js.map +0 -1
  216. package/dist/lib/val/DisjunctVal.d.ts +0 -17
  217. package/dist/lib/val/DisjunctVal.js +0 -95
  218. package/dist/lib/val/DisjunctVal.js.map +0 -1
  219. package/dist/lib/val/ListVal.d.ts +0 -18
  220. package/dist/lib/val/ListVal.js +0 -120
  221. package/dist/lib/val/ListVal.js.map +0 -1
  222. package/dist/lib/val/MapVal.d.ts +0 -18
  223. package/dist/lib/val/MapVal.js +0 -117
  224. package/dist/lib/val/MapVal.js.map +0 -1
  225. package/dist/lib/val/Nil.d.ts +0 -22
  226. package/dist/lib/val/Nil.js.map +0 -1
  227. package/dist/lib/val/NullVal.d.ts +0 -15
  228. package/dist/lib/val/NullVal.js +0 -38
  229. package/dist/lib/val/NullVal.js.map +0 -1
  230. package/dist/lib/val/OpVal.d.ts +0 -17
  231. package/dist/lib/val/OpVal.js +0 -89
  232. package/dist/lib/val/OpVal.js.map +0 -1
  233. package/dist/lib/val/PlusVal.d.ts +0 -12
  234. package/dist/lib/val/PlusVal.js +0 -32
  235. package/dist/lib/val/PlusVal.js.map +0 -1
  236. package/dist/lib/val/PrefVal.d.ts +0 -17
  237. package/dist/lib/val/PrefVal.js +0 -87
  238. package/dist/lib/val/PrefVal.js.map +0 -1
  239. package/dist/lib/val/RefVal.d.ts +0 -22
  240. package/dist/lib/val/RefVal.js +0 -247
  241. package/dist/lib/val/RefVal.js.map +0 -1
  242. package/dist/lib/val/ValBase.d.ts +0 -26
  243. package/dist/lib/val/ValBase.js +0 -77
  244. package/dist/lib/val/ValBase.js.map +0 -1
  245. package/dist/lib/val/VarVal.d.ts +0 -15
  246. package/dist/lib/val/VarVal.js +0 -84
  247. package/dist/lib/val/VarVal.js.map +0 -1
  248. package/dist/lib/val.d.ts +0 -81
  249. package/dist/lib/val.js +0 -191
  250. package/dist/lib/val.js.map +0 -1
  251. package/lib/err.ts +0 -83
  252. package/lib/lang.ts +0 -585
  253. package/lib/op/disjunct.ts +0 -51
  254. package/lib/op/op.ts +0 -18
  255. package/lib/op/unite.ts +0 -143
  256. package/lib/type.ts +0 -95
  257. package/lib/unify.ts +0 -128
  258. package/lib/utility.ts +0 -24
  259. package/lib/val/ConjunctVal.ts +0 -265
  260. package/lib/val/DisjunctVal.ts +0 -160
  261. package/lib/val/ListVal.ts +0 -196
  262. package/lib/val/MapVal.ts +0 -181
  263. package/lib/val/NullVal.ts +0 -72
  264. package/lib/val/OpVal.ts +0 -159
  265. package/lib/val/PlusVal.ts +0 -76
  266. package/lib/val/PrefVal.ts +0 -154
  267. package/lib/val/RefVal.ts +0 -362
  268. package/lib/val/ValBase.ts +0 -109
  269. package/lib/val/VarVal.ts +0 -157
  270. package/lib/val.ts +0 -327
package/lib/val/RefVal.ts DELETED
@@ -1,362 +0,0 @@
1
- /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
2
-
3
-
4
- /* TODO
5
- Rename ot PathVal
6
-
7
- $SELF.a - path starting at self
8
- $PARENT.b === .b - sibling
9
-
10
- implement $ as a prefix operator
11
- this allows "$AString" to be used for literal part names
12
- */
13
-
14
-
15
-
16
- import type {
17
- Val,
18
- ValSpec,
19
- } from '../type'
20
-
21
- import {
22
- DONE,
23
- } from '../type'
24
-
25
- import {
26
- descErr
27
- } from '../err'
28
-
29
- import {
30
- Context,
31
- } from '../unify'
32
-
33
- import {
34
- unite
35
- } from '../op/op'
36
-
37
- import {
38
- TOP,
39
- StringVal,
40
- } from '../val'
41
-
42
-
43
- import { ConjunctVal } from '../val/ConjunctVal'
44
- import { MapVal } from '../val/MapVal'
45
- import { Nil } from '../val/Nil'
46
- import { VarVal } from '../val/VarVal'
47
- import { ValBase } from '../val/ValBase'
48
-
49
-
50
-
51
-
52
-
53
- class RefVal extends ValBase {
54
- isRefVal = true
55
-
56
- absolute: boolean = false
57
- prefix: boolean = false
58
-
59
- constructor(
60
- spec: {
61
- peg: any[],
62
- absolute?: boolean,
63
- prefix?: boolean
64
- },
65
- ctx?: Context
66
- ) {
67
- super(spec, ctx)
68
- this.peg = []
69
-
70
- this.absolute = true === this.absolute ? true : // absolute sticks
71
- true === spec.absolute ? true : false
72
-
73
- this.prefix = true === spec.prefix
74
-
75
- for (let pI = 0; pI < spec.peg.length; pI++) {
76
- this.append(spec.peg[pI])
77
- }
78
- }
79
-
80
-
81
- append(part: any) {
82
- let partval
83
-
84
- if ('string' === typeof part) {
85
- partval = part
86
- this.peg.push(partval)
87
- }
88
-
89
- else if (part instanceof StringVal) {
90
- partval = part.peg
91
- this.peg.push(partval)
92
- }
93
-
94
- else if (part instanceof VarVal) {
95
- partval = part
96
- this.peg.push(partval)
97
- }
98
-
99
- else if (part instanceof RefVal) {
100
- if (part.absolute) {
101
- this.absolute = true
102
- }
103
-
104
- if (this.prefix) {
105
- if (part.prefix) {
106
- this.peg.push('.')
107
- }
108
- }
109
- else {
110
- if (part.prefix) {
111
- if (0 === this.peg.length) {
112
- this.prefix = true
113
- }
114
-
115
- else if (0 < this.peg.length) {
116
- this.peg.push('.')
117
- }
118
- }
119
- }
120
-
121
- this.peg.push(...part.peg)
122
- }
123
- }
124
-
125
-
126
- unify(peer: Val, ctx: Context): Val {
127
- let out: Val = this
128
- // let why = 'id'
129
-
130
- if (this.id !== peer.id) {
131
-
132
- // TODO: not resolved when all Vals in path are done is an error
133
- // as path cannot be found
134
- // let resolved: Val | undefined = null == ctx ? this : ctx.find(this)
135
- let resolved: Val | undefined = null == ctx ? this : this.find(ctx)
136
-
137
- resolved = resolved || this
138
-
139
- if (null == resolved && this.canon === peer.canon) {
140
- out = this
141
- }
142
- else if (resolved instanceof RefVal) {
143
- if (TOP === peer) {
144
- out = this
145
- // why = 'pt'
146
- }
147
- else if (peer instanceof Nil) {
148
- out = Nil.make(ctx, 'ref[' + this.peg + ']', this, peer)
149
- // why = 'pn'
150
- }
151
-
152
- // same path
153
- // else if (this.peg === peer.peg) {
154
- else if (this.canon === peer.canon) {
155
- out = this
156
- // why = 'pp'
157
- }
158
-
159
- else {
160
- // Ensure RefVal done is incremented
161
- this.done = DONE === this.done ? DONE : this.done + 1
162
- out = new ConjunctVal({ peg: [this, peer] }, ctx)
163
- // why = 'cj'
164
- }
165
- }
166
- else {
167
- out = unite(ctx, resolved, peer, 'ref')
168
- // why = 'u'
169
- }
170
-
171
- out.done = DONE === out.done ? DONE : this.done + 1
172
- }
173
-
174
- return out
175
- }
176
-
177
-
178
- find(ctx: Context) {
179
- // TODO: relative paths
180
- // if (this.root instanceof MapVal && ref.absolute) {
181
-
182
- // NOTE: path *to* the ref, not the ref itself!
183
- let fullpath = this.path
184
-
185
- let parts: string[] = []
186
-
187
- let modes: string[] = []
188
-
189
- for (let pI = 0; pI < this.peg.length; pI++) {
190
- let part = this.peg[pI]
191
- if (part instanceof VarVal) {
192
- let strval = (part as VarVal).peg
193
- let name = strval ? '' + strval.peg : ''
194
-
195
- if ('KEY' === name) {
196
- if (pI === this.peg.length - 1) {
197
- modes.push(name)
198
- }
199
- else {
200
- // TODO: return a Nil explaining error
201
- return
202
- }
203
- }
204
-
205
- if ('SELF' === name) {
206
- if (pI === 0) {
207
- modes.push(name)
208
- }
209
- else {
210
- // TODO: return a Nil explaining error
211
- return
212
- }
213
- }
214
- else if ('PARENT' === name) {
215
- if (pI === 0) {
216
- modes.push(name)
217
- }
218
- else {
219
- // TODO: return a Nil explaining error
220
- return
221
- }
222
- }
223
- else if (0 === modes.length) {
224
- part = (part as VarVal).unify(TOP, ctx)
225
- if (part instanceof Nil) {
226
- // TODO: var not found, so can't find path
227
- return
228
- }
229
- else {
230
- part = '' + part.peg
231
- }
232
- }
233
- }
234
- else {
235
- parts.push(part)
236
- }
237
- }
238
-
239
- if (this.absolute) {
240
- fullpath = parts
241
- }
242
- else {
243
- fullpath = fullpath.slice(
244
- 0,
245
- (
246
- modes.includes('SELF') ? 0 :
247
- modes.includes('PARENT') ? -1 :
248
- -1 // siblings
249
- )
250
- ).concat(parts)
251
- }
252
-
253
- let sep = '.'
254
- fullpath = fullpath
255
- .reduce(((a: string[], p: string) =>
256
- (p === sep ? a.length = a.length - 1 : a.push(p), a)), [])
257
-
258
- if (modes.includes('KEY')) {
259
- let key = this.path[this.path.length - 2]
260
- let sv = new StringVal({ peg: null == key ? '' : key }, ctx)
261
-
262
- // TODO: other props?
263
- sv.done = DONE
264
- sv.path = this.path
265
-
266
- return sv
267
- }
268
-
269
-
270
-
271
- let node = ctx.root
272
- let pI = 0
273
- for (; pI < fullpath.length; pI++) {
274
- let part = fullpath[pI]
275
-
276
- if (node instanceof MapVal) {
277
- node = node.peg[part]
278
- }
279
- else {
280
- break;
281
- }
282
- }
283
-
284
- if (pI === fullpath.length) {
285
- // if (this.attr && 'KEY' === this.attr.kind) {
286
- // if (modes.includes('KEY')) {
287
- // let key = fullpath[fullpath.length - 1]
288
- // let sv = new StringVal({ peg: null == key ? '' : key }, ctx)
289
-
290
- // // TODO: other props?
291
- // sv.done = DONE
292
- // sv.path = this.path
293
-
294
- // return sv
295
- // }
296
- // else {
297
- // console.log('REF', this.id, this.path, this.done, 'FOUND', node.canon)
298
- return node
299
- // }
300
- }
301
- }
302
-
303
-
304
- same(peer: Val): boolean {
305
- return null == peer ? false : this.peg === peer.peg
306
- }
307
-
308
-
309
- clone(spec?: ValSpec, ctx?: Context): Val {
310
- let out = (super.clone({
311
- peg: this.peg,
312
- absolute: this.absolute,
313
- ...(spec || {})
314
- }, ctx) as RefVal)
315
- return out
316
- }
317
-
318
-
319
- get canon() {
320
- let str =
321
- (this.absolute ? '$' : '') +
322
- (0 < this.peg.length ? '.' : '') +
323
- // this.peg.join(this.sep)
324
- this.peg.map((p: any) => '.' === p ? '' :
325
- (p.isVal ? p.canon : '' + p))
326
- .join('.')
327
- return str
328
- }
329
-
330
-
331
- gen(ctx?: Context) {
332
- // Unresolved ref cannot be generated, so always an error.
333
- let nil = Nil.make(
334
- ctx,
335
- 'ref',
336
- this, // (formatPath(this.peg, this.absolute) as any),
337
- undefined
338
- )
339
-
340
- // TODO: refactor to use Site
341
- nil.path = this.path
342
- nil.url = this.url
343
- nil.row = this.row
344
- nil.col = this.col
345
-
346
- descErr(nil, ctx)
347
-
348
- if (ctx) {
349
- ctx.err.push(nil)
350
- }
351
- else {
352
- throw new Error(nil.msg)
353
- }
354
-
355
- return undefined
356
- }
357
- }
358
-
359
-
360
- export {
361
- RefVal,
362
- }
@@ -1,109 +0,0 @@
1
- /* Copyright (c) 2021-2024 Richard Rodger, MIT License */
2
-
3
-
4
-
5
- import type {
6
- Val,
7
- ValSpec,
8
- } from '../type'
9
-
10
-
11
- import {
12
- Context,
13
- } from '../unify'
14
-
15
-
16
- import {
17
- Site
18
- } from '../lang'
19
-
20
-
21
- let ID = 0
22
-
23
-
24
- class ValBase implements Val {
25
- isVal = true
26
-
27
- id: number
28
- done: number = 0
29
- path: string[] = []
30
- row: number = -1
31
- col: number = -1
32
- url: string = ''
33
-
34
- top: boolean = false
35
-
36
- // Actual native value.
37
- peg: any = undefined
38
-
39
- // TODO: used for top level result - not great
40
- err: any[] = []
41
- // deps?: any
42
-
43
- uh: number[]
44
-
45
- // TODO: implement!
46
- // site: Site
47
-
48
- #ctx: any
49
-
50
- // TODO: Site needed in ctor
51
- constructor(spec: ValSpec, ctx?: Context) {
52
- this.#ctx = ctx
53
-
54
- this.peg = spec?.peg
55
- this.path = ctx?.path || []
56
- // this.id = (9e9 + Math.floor(Math.random() * (1e9)))
57
- this.id = ++ID // (9e9 + Math.floor(Math.random() * (1e5)))
58
- this.uh = []
59
- }
60
-
61
-
62
- ctx() {
63
- return this.#ctx
64
- }
65
-
66
- same(peer: Val): boolean {
67
- return null == peer ? false : this.id === peer.id
68
- }
69
-
70
-
71
- clone(spec?: ValSpec, ctx?: Context): Val {
72
- let cloneCtx
73
-
74
- if (ctx) {
75
- let cut = this.path.indexOf('&')
76
- cut = -1 < cut ? cut + 1 : ctx.path.length
77
- cloneCtx = ctx.clone({
78
- path: ctx.path.concat(this.path.slice(cut))
79
- })
80
- }
81
-
82
- let out = new (this as any)
83
- .constructor(spec || { peg: this.peg }, cloneCtx)
84
-
85
- out.row = spec?.row || this.row || -1
86
- out.col = spec?.col || this.col || -1
87
- out.url = spec?.url || this.url || ''
88
-
89
- if (null == cloneCtx) {
90
- out.path = this.path.slice(0)
91
- }
92
-
93
- return out
94
- }
95
-
96
-
97
- get site(): Site {
98
- return new Site(this)
99
- }
100
-
101
- unify(_peer: Val, _ctx?: Context): Val { return this }
102
- get canon(): string { return '' }
103
- gen(_ctx?: Context): any { return null }
104
-
105
- }
106
-
107
- export {
108
- ValBase,
109
- }
package/lib/val/VarVal.ts DELETED
@@ -1,157 +0,0 @@
1
- /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
2
-
3
-
4
-
5
- /* TODO
6
-
7
- $SELF.a - path starting at self
8
- $PARENT.b === .b - sibling
9
-
10
- implement $ as a prefix operator
11
- this allows "$AString" to be used for literal part names
12
- */
13
-
14
-
15
-
16
- import type {
17
- Val,
18
- ValSpec,
19
- } from '../type'
20
-
21
- import {
22
- DONE,
23
- } from '../type'
24
-
25
- import {
26
- descErr
27
- } from '../err'
28
-
29
- import {
30
- Context,
31
- } from '../unify'
32
-
33
-
34
-
35
- import {
36
- unite
37
- } from '../op/op'
38
-
39
-
40
-
41
- import {
42
- TOP,
43
- StringVal,
44
- } from '../val'
45
-
46
- // import { ConjunctVal } from '../val/ConjunctVal'
47
- // import { DisjunctVal } from '../val/DisjunctVal'
48
- // import { ListVal } from '../val/ListVal'
49
- // import { MapVal } from '../val/MapVal'
50
- import { Nil } from '../val/Nil'
51
- import { RefVal } from '../val/RefVal'
52
- import { ValBase } from '../val/ValBase'
53
-
54
-
55
-
56
- // TODO: KEY, SELF, PARENT are reserved names - error
57
-
58
- class VarVal extends ValBase {
59
- isVarVal = true
60
-
61
- constructor(
62
- spec: {
63
- peg: string | Val
64
- },
65
- ctx?: Context
66
- ) {
67
- super(spec, ctx)
68
- }
69
-
70
-
71
- unify(peer: Val, ctx: Context): Val {
72
- let out: Val
73
-
74
- let nameVal
75
-
76
- if (this.peg.isVal) {
77
- // $.a.b.c - convert path to absolute
78
- if (this.peg instanceof RefVal) {
79
- this.peg.absolute = true
80
- nameVal = this.peg
81
- }
82
- else {
83
- nameVal = this.peg.unify(peer)
84
- }
85
- }
86
- else {
87
- // TODO: how to pass row+col?
88
- nameVal = new StringVal({ peg: '' + this.peg }, ctx)
89
- }
90
-
91
- if (!(nameVal instanceof RefVal) && DONE === nameVal.done) {
92
- if (nameVal instanceof StringVal) {
93
- out = ctx.var[nameVal.peg]
94
- if (null == out) {
95
- out = Nil.make(ctx, 'var[' + nameVal.peg + ']', this, peer)
96
- }
97
- }
98
- else {
99
- out = Nil.make(ctx, 'var[' + typeof nameVal + ']', this, peer)
100
- }
101
- }
102
- else {
103
- out = nameVal
104
- }
105
-
106
- return out
107
- }
108
-
109
-
110
- same(peer: Val): boolean {
111
- return null == peer ? false : peer instanceof VarVal && this.peg === peer.peg
112
- }
113
-
114
-
115
- clone(spec?: ValSpec, ctx?: Context): Val {
116
- let out = (super.clone(spec, ctx) as VarVal)
117
- return out
118
- }
119
-
120
-
121
- get canon() {
122
- return '$' + (this.peg?.isVal ? this.peg.canon : '' + this.peg)
123
- }
124
-
125
-
126
- gen(ctx?: Context) {
127
- // Unresolved var cannot be generated, so always an error.
128
- let nil = Nil.make(
129
- ctx,
130
- 'var',
131
- this,
132
- undefined
133
- )
134
-
135
- // TODO: refactor to use Site
136
- nil.path = this.path
137
- nil.url = this.url
138
- nil.row = this.row
139
- nil.col = this.col
140
-
141
- descErr(nil, ctx)
142
-
143
- if (ctx) {
144
- ctx.err.push(nil)
145
- }
146
- else {
147
- throw new Error(nil.msg)
148
- }
149
-
150
- return undefined
151
- }
152
- }
153
-
154
-
155
- export {
156
- VarVal,
157
- }