aontu 0.30.1 → 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 (184) hide show
  1. package/dist/ctx.d.ts +51 -0
  2. package/dist/ctx.js +105 -0
  3. package/dist/ctx.js.map +1 -0
  4. package/dist/err.d.ts +12 -0
  5. package/dist/err.js +123 -0
  6. package/dist/err.js.map +1 -0
  7. package/dist/hints.d.ts +8 -0
  8. package/dist/hints.js +84 -0
  9. package/dist/hints.js.map +1 -0
  10. package/dist/lang.d.ts +11 -0
  11. package/dist/lang.js +569 -0
  12. package/dist/lang.js.map +1 -0
  13. package/dist/site.d.ts +12 -0
  14. package/dist/site.js +27 -0
  15. package/dist/site.js.map +1 -0
  16. package/dist/tsconfig.tsbuildinfo +1 -0
  17. package/dist/type.d.ts +32 -0
  18. package/dist/type.js +16 -0
  19. package/dist/type.js.map +1 -0
  20. package/dist/unify.d.ts +14 -0
  21. package/dist/unify.js +156 -0
  22. package/dist/unify.js.map +1 -0
  23. package/dist/utility.d.ts +14 -0
  24. package/dist/utility.js +122 -0
  25. package/dist/utility.js.map +1 -0
  26. package/dist/val/BagVal.d.ts +10 -0
  27. package/dist/val/BagVal.js +15 -0
  28. package/dist/val/BagVal.js.map +1 -0
  29. package/dist/val/BooleanVal.d.ts +9 -0
  30. package/dist/val/BooleanVal.js +16 -0
  31. package/dist/val/BooleanVal.js.map +1 -0
  32. package/dist/val/CloseFuncVal.d.ts +11 -0
  33. package/dist/val/CloseFuncVal.js +32 -0
  34. package/dist/val/CloseFuncVal.js.map +1 -0
  35. package/dist/val/ConjunctVal.d.ts +14 -0
  36. package/dist/val/ConjunctVal.js +187 -0
  37. package/dist/val/ConjunctVal.js.map +1 -0
  38. package/dist/val/CopyFuncVal.d.ts +13 -0
  39. package/dist/val/CopyFuncVal.js +35 -0
  40. package/dist/val/CopyFuncVal.js.map +1 -0
  41. package/dist/val/DisjunctVal.d.ts +19 -0
  42. package/dist/val/DisjunctVal.js +194 -0
  43. package/dist/val/DisjunctVal.js.map +1 -0
  44. package/dist/val/FeatureVal.d.ts +10 -0
  45. package/dist/val/FeatureVal.js +29 -0
  46. package/dist/val/FeatureVal.js.map +1 -0
  47. package/dist/val/FuncBaseVal.d.ts +15 -0
  48. package/dist/val/FuncBaseVal.js +127 -0
  49. package/dist/val/FuncBaseVal.js.map +1 -0
  50. package/dist/val/HideFuncVal.d.ts +12 -0
  51. package/dist/val/HideFuncVal.js +48 -0
  52. package/dist/val/HideFuncVal.js.map +1 -0
  53. package/dist/val/IntegerVal.d.ts +9 -0
  54. package/dist/val/IntegerVal.js +46 -0
  55. package/dist/val/IntegerVal.js.map +1 -0
  56. package/dist/val/JunctionVal.d.ts +12 -0
  57. package/dist/val/JunctionVal.js +31 -0
  58. package/dist/val/JunctionVal.js.map +1 -0
  59. package/dist/val/KeyFuncVal.d.ts +12 -0
  60. package/dist/val/KeyFuncVal.js +34 -0
  61. package/dist/val/KeyFuncVal.js.map +1 -0
  62. package/dist/val/ListVal.d.ts +17 -0
  63. package/dist/val/ListVal.js +186 -0
  64. package/dist/val/ListVal.js.map +1 -0
  65. package/dist/val/LowerFuncVal.d.ts +12 -0
  66. package/dist/val/LowerFuncVal.js +40 -0
  67. package/dist/val/LowerFuncVal.js.map +1 -0
  68. package/dist/val/MapVal.d.ts +16 -0
  69. package/dist/val/MapVal.js +211 -0
  70. package/dist/val/MapVal.js.map +1 -0
  71. package/dist/val/MoveFuncVal.d.ts +11 -0
  72. package/dist/val/MoveFuncVal.js +41 -0
  73. package/dist/val/MoveFuncVal.js.map +1 -0
  74. package/dist/val/NilVal.d.ts +25 -0
  75. package/dist/val/NilVal.js +92 -0
  76. package/dist/val/NilVal.js.map +1 -0
  77. package/dist/val/NullVal.d.ts +9 -0
  78. package/dist/val/NullVal.js +18 -0
  79. package/dist/val/NullVal.js.map +1 -0
  80. package/dist/val/NumberVal.d.ts +9 -0
  81. package/dist/val/NumberVal.js +44 -0
  82. package/dist/val/NumberVal.js.map +1 -0
  83. package/dist/val/OpBaseVal.d.ts +18 -0
  84. package/dist/val/OpBaseVal.js +152 -0
  85. package/dist/val/OpBaseVal.js.map +1 -0
  86. package/dist/val/OpenFuncVal.d.ts +11 -0
  87. package/dist/val/OpenFuncVal.js +30 -0
  88. package/dist/val/OpenFuncVal.js.map +1 -0
  89. package/dist/val/PathFuncVal.d.ts +13 -0
  90. package/dist/val/PathFuncVal.js +42 -0
  91. package/dist/val/PathFuncVal.js.map +1 -0
  92. package/dist/val/PlusOpVal.d.ts +16 -0
  93. package/dist/val/PlusOpVal.js +59 -0
  94. package/dist/val/PlusOpVal.js.map +1 -0
  95. package/dist/val/PrefFuncVal.d.ts +11 -0
  96. package/dist/val/PrefFuncVal.js +39 -0
  97. package/dist/val/PrefFuncVal.js.map +1 -0
  98. package/dist/val/PrefVal.d.ts +15 -0
  99. package/dist/val/PrefVal.js +104 -0
  100. package/dist/val/PrefVal.js.map +1 -0
  101. package/dist/val/RefVal.d.ts +22 -0
  102. package/dist/val/RefVal.js +276 -0
  103. package/dist/val/RefVal.js.map +1 -0
  104. package/dist/val/ScalarKindVal.d.ts +16 -0
  105. package/dist/val/ScalarKindVal.js +76 -0
  106. package/dist/val/ScalarKindVal.js.map +1 -0
  107. package/dist/val/ScalarVal.d.ts +16 -0
  108. package/dist/val/ScalarVal.js +61 -0
  109. package/dist/val/ScalarVal.js.map +1 -0
  110. package/dist/val/StringVal.d.ts +10 -0
  111. package/dist/val/StringVal.js +19 -0
  112. package/dist/val/StringVal.js.map +1 -0
  113. package/dist/val/SuperFuncVal.d.ts +11 -0
  114. package/dist/val/SuperFuncVal.js +22 -0
  115. package/dist/val/SuperFuncVal.js.map +1 -0
  116. package/dist/val/TopVal.d.ts +16 -0
  117. package/dist/val/TopVal.js +38 -0
  118. package/dist/val/TopVal.js.map +1 -0
  119. package/dist/val/TypeFuncVal.d.ts +12 -0
  120. package/dist/val/TypeFuncVal.js +35 -0
  121. package/dist/val/TypeFuncVal.js.map +1 -0
  122. package/dist/val/UpperFuncVal.d.ts +12 -0
  123. package/dist/val/UpperFuncVal.js +40 -0
  124. package/dist/val/UpperFuncVal.js.map +1 -0
  125. package/dist/val/Val.d.ts +89 -0
  126. package/dist/val/Val.js +186 -0
  127. package/dist/val/Val.js.map +1 -0
  128. package/dist/val/VarVal.d.ts +13 -0
  129. package/dist/val/VarVal.js +109 -0
  130. package/dist/val/VarVal.js.map +1 -0
  131. package/dist/val/top.d.ts +2 -0
  132. package/dist/val/top.js +10 -0
  133. package/dist/val/top.js.map +1 -0
  134. package/dist/val/valutil.d.ts +2 -0
  135. package/dist/val/valutil.js +30 -0
  136. package/dist/val/valutil.js.map +1 -0
  137. package/package.json +3 -5
  138. package/src/aontu.ts +218 -0
  139. package/src/ctx.ts +201 -0
  140. package/src/err.ts +172 -0
  141. package/src/hints.ts +119 -0
  142. package/src/lang.ts +782 -0
  143. package/src/site.ts +34 -0
  144. package/src/tsconfig.json +16 -0
  145. package/src/type.ts +72 -0
  146. package/src/unify.ts +225 -0
  147. package/src/utility.ts +179 -0
  148. package/src/val/BagVal.ts +33 -0
  149. package/src/val/BooleanVal.ts +32 -0
  150. package/src/val/CloseFuncVal.ts +61 -0
  151. package/src/val/ConjunctVal.ts +285 -0
  152. package/src/val/CopyFuncVal.ts +69 -0
  153. package/src/val/DisjunctVal.ts +288 -0
  154. package/src/val/FeatureVal.ts +56 -0
  155. package/src/val/FuncBaseVal.ts +198 -0
  156. package/src/val/HideFuncVal.ts +85 -0
  157. package/src/val/IntegerVal.ts +75 -0
  158. package/src/val/JunctionVal.ts +54 -0
  159. package/src/val/KeyFuncVal.ts +67 -0
  160. package/src/val/ListVal.ts +286 -0
  161. package/src/val/LowerFuncVal.ts +73 -0
  162. package/src/val/MapVal.ts +316 -0
  163. package/src/val/MoveFuncVal.ts +79 -0
  164. package/src/val/NilVal.ts +156 -0
  165. package/src/val/NullVal.ts +38 -0
  166. package/src/val/NumberVal.ts +75 -0
  167. package/src/val/OpBaseVal.ts +231 -0
  168. package/src/val/OpenFuncVal.ts +60 -0
  169. package/src/val/PathFuncVal.ts +75 -0
  170. package/src/val/PlusOpVal.ts +92 -0
  171. package/src/val/PrefFuncVal.ts +73 -0
  172. package/src/val/PrefVal.ts +159 -0
  173. package/src/val/RefVal.ts +384 -0
  174. package/src/val/ScalarKindVal.ts +125 -0
  175. package/src/val/ScalarVal.ts +105 -0
  176. package/src/val/StringVal.ts +37 -0
  177. package/src/val/SuperFuncVal.ts +46 -0
  178. package/src/val/TopVal.ts +69 -0
  179. package/src/val/TypeFuncVal.ts +69 -0
  180. package/src/val/UpperFuncVal.ts +72 -0
  181. package/src/val/Val.ts +294 -0
  182. package/src/val/VarVal.ts +171 -0
  183. package/src/val/top.ts +12 -0
  184. package/src/val/valutil.ts +31 -0
package/src/val/Val.ts ADDED
@@ -0,0 +1,294 @@
1
+ /* Copyright (c) 2022-2025 Richard Rodger, MIT License */
2
+
3
+ import { inspect } from 'node:util'
4
+
5
+ import type { AontuContext } from '../ctx'
6
+
7
+ import {
8
+ Site
9
+ } from '../site'
10
+
11
+
12
+ type ValMark = {
13
+ type: boolean,
14
+ hide: boolean,
15
+
16
+ // Custom marks must have _ prefix.
17
+ [name: `_${string}`]: boolean,
18
+ }
19
+
20
+ type ValSpec = {
21
+ peg?: any,
22
+ mark?: Partial<ValMark>,
23
+ kind?: any,
24
+ row?: number,
25
+ col?: number,
26
+ url?: string,
27
+ path?: string[],
28
+ id?: number,
29
+ src?: string,
30
+
31
+ // NilVal specific
32
+ why?: string,
33
+ msg?: string,
34
+ err?: any[] | any,
35
+
36
+ // RefVal specific
37
+ absolute?: boolean,
38
+ prefix?: boolean,
39
+ }
40
+
41
+ // import { AontuError, descErr, makeNilErr } from '../err'
42
+ // import { AontuError } from '../err'
43
+
44
+
45
+ const DONE = -1
46
+
47
+ const SPREAD = Symbol('spread')
48
+
49
+
50
+ let ID = 1000
51
+
52
+
53
+ abstract class Val {
54
+ isVal = true
55
+
56
+ isTop = false
57
+ isNil = false
58
+ isMap = false
59
+ isList = false
60
+ isScalar = false
61
+ isScalarKind = false
62
+ isRef = false
63
+ isPref = false
64
+ isVar = false
65
+ isBag = false
66
+ isNumber = false
67
+ isInteger = false
68
+ isString = false
69
+ isBoolean = false
70
+ isConjunct = false
71
+ isDisjunct = false
72
+ isJunction = false
73
+
74
+ isOp = false
75
+ isPlusOp = false
76
+
77
+ isFunc = false
78
+ isCloseFunc = false
79
+ isCopyFunc = false
80
+ isHideFunc = false
81
+ isMoveFunc = false
82
+ isKeyFunc = false
83
+ isLowerFunc = false
84
+ isOpenFunc = false
85
+ isPathFunc = false
86
+ isPrefFunc = false
87
+ isSuperFunc = false
88
+ isTypeFunc = false
89
+ isUpperFunc = false
90
+
91
+ id: number
92
+ dc: number = 0
93
+ path: string[] = []
94
+ site: Site = new Site()
95
+
96
+ // Map of boolean flags.
97
+ mark: ValMark = { type: false, hide: false }
98
+
99
+ // Actual native value.
100
+ peg: any = undefined
101
+
102
+ // TODO: used for top level result - not great
103
+ // err: Omit<any[], "push"> = []
104
+ err: any[] = []
105
+ explain: any[] | null = null
106
+
107
+ uh: number[]
108
+
109
+ deps?: any
110
+
111
+ #ctx: any
112
+
113
+ // TODO: Site needed in ctor
114
+ constructor(spec: ValSpec, ctx?: AontuContext) {
115
+ this.#ctx = ctx
116
+
117
+ this.peg = spec?.peg
118
+
119
+ if (Array.isArray(this.peg)) {
120
+ let spread = (this.peg as any)[SPREAD]
121
+ this.peg = this.peg.filter(n => undefined !== n)
122
+ ; (this.peg as any)[SPREAD] = spread
123
+ }
124
+
125
+ this.path = ctx?.path || []
126
+
127
+ // TODO: make this work
128
+ // this.id = spec?.id ?? (ctx ? ++ctx.vc : ++ID)
129
+ this.id = ++ID
130
+
131
+ this.uh = []
132
+
133
+ this.mark.type = !!spec.mark?.type
134
+ this.mark.hide = !!spec.mark?.hide
135
+
136
+ // console.log('BV', this.id, this.constructor.name, this.peg?.canon)
137
+ }
138
+
139
+
140
+ ctx() {
141
+ return this.#ctx
142
+ }
143
+
144
+
145
+ get done() {
146
+ return this.dc === DONE
147
+ }
148
+
149
+
150
+ same(peer: Val): boolean {
151
+ return null == peer ? false : this.id === peer.id
152
+ }
153
+
154
+
155
+ clone(ctx: AontuContext, spec?: ValSpec): Val {
156
+ let cloneCtx
157
+
158
+ let cut = this.path.indexOf('&')
159
+ cut = -1 < cut ? cut + 1 : ctx.path.length
160
+ cloneCtx = ctx.clone({
161
+ path: ctx.path.concat(this.path.slice(cut))
162
+ })
163
+
164
+ let fullspec = {
165
+ peg: this.peg,
166
+ mark: { type: this.mark.type, hide: this.mark.hide },
167
+ ...(spec ?? {})
168
+ }
169
+
170
+ let out = new (this as any)
171
+ .constructor(fullspec, cloneCtx)
172
+
173
+ out.site.row = spec?.row ?? this.site.row ?? -1
174
+ out.site.col = spec?.col ?? this.site.col ?? -1
175
+ out.site.url = spec?.url ?? this.site.url ?? ''
176
+
177
+ // TODO: should not be needed - update all VAL ctors to handle spec.mark
178
+ out.mark.type = this.mark.type && (fullspec.mark?.type ?? true)
179
+ out.mark.hide = this.mark.hide && (fullspec.mark?.hide ?? true)
180
+
181
+ return out
182
+ }
183
+
184
+
185
+ place(v: Val) {
186
+ v.site.row = this.site.row
187
+ v.site.col = this.site.col
188
+ v.site.url = this.site.url
189
+ return v
190
+ }
191
+
192
+ // NOTE: MUST not mutate! Val immutability is a critical assumption.
193
+ unify(_peer: Val, _ctx: AontuContext): Val { return this }
194
+
195
+ // TODO: indicate marks in some way that is ignored by reparse.
196
+ // Need an annotation/taggins syntax? a:{}/type ?
197
+ get canon(): string { return '' }
198
+
199
+
200
+ errcanon(): string {
201
+ return 0 === this.err.length ? '' : `<ERRS:${this.err.length}>`
202
+ }
203
+
204
+
205
+ gen(_ctx: AontuContext): any {
206
+ return undefined
207
+ }
208
+
209
+
210
+ notdone() {
211
+ this.dc = DONE === this.dc ? DONE : this.dc + 1
212
+ }
213
+
214
+
215
+ abstract superior(): Val
216
+
217
+
218
+ [inspect.custom](_d: number, _o: any, _inspect: any): string {
219
+ let s = ['<' + this.constructor.name.replace(/Val$/, '') + '/' + this.id]
220
+
221
+ s.push('/' + this.path.join('.') + '/')
222
+
223
+ s.push([
224
+ DONE === this.dc ? 'D' : 'd' + this.dc,
225
+ ...Object.entries(this.mark).filter(n => n[1]).map(n => n[0]).sort()
226
+ ].filter(n => null != n).join(','))
227
+
228
+ let insp = this.inspection(inspect)
229
+ if (null != insp && '' != insp) {
230
+ s.push('/' + insp)
231
+ }
232
+
233
+ s.push('/')
234
+
235
+ if ('object' === typeof this.peg) {
236
+ s.push(inspectpeg(this.peg))
237
+ }
238
+ else if ('function' === typeof this.peg) {
239
+ s.push(this.peg.name)
240
+ }
241
+ else {
242
+ s.push(this.peg)
243
+ }
244
+
245
+ s.push('>')
246
+
247
+ const out = s.join('')
248
+
249
+ return out
250
+ }
251
+
252
+
253
+ inspection(_inspect: Function) {
254
+ return ''
255
+ }
256
+
257
+ }
258
+
259
+
260
+ function inspectpeg(peg: any) {
261
+ return pretty(!Array.isArray(peg) ? inspect(peg) :
262
+ ('[' + peg.map(n => inspect(n)).join(',\n') + ']'))
263
+ }
264
+
265
+ function pretty(s: string) {
266
+ return (
267
+ (String(s))
268
+ .replace(/\[Object: null prototype\]/g, '')
269
+ .replace(/\s+/g, '')
270
+ )
271
+ }
272
+
273
+
274
+ function empty(o: any) {
275
+ return (
276
+ (Array.isArray(o) && 0 === o.length)
277
+ || (null != o && 'object' === typeof o && 0 === Object.keys(o).length)
278
+ || false
279
+ )
280
+ }
281
+
282
+
283
+
284
+ export type {
285
+ ValMark,
286
+ ValSpec,
287
+ }
288
+
289
+ export {
290
+ Val,
291
+ DONE,
292
+ SPREAD,
293
+ empty
294
+ }
@@ -0,0 +1,171 @@
1
+ /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
2
+
3
+
4
+
5
+ import type {
6
+ Val,
7
+ ValSpec,
8
+ } from '../type'
9
+
10
+ import {
11
+ DONE,
12
+ } from '../type'
13
+
14
+ import {
15
+ descErr,
16
+ makeNilErr,
17
+ AontuError
18
+ } from '../err'
19
+
20
+ import {
21
+ AontuContext,
22
+ } from '../ctx'
23
+
24
+
25
+
26
+ import { StringVal } from './StringVal'
27
+ import { NilVal } from './NilVal'
28
+ import { FeatureVal } from './FeatureVal'
29
+ import { NullVal } from './NullVal'
30
+ import { BooleanVal } from './BooleanVal'
31
+ import { NumberVal } from './NumberVal'
32
+ import { IntegerVal } from './IntegerVal'
33
+
34
+
35
+ import {
36
+ explainOpen,
37
+ ec,
38
+ explainClose,
39
+ } from '../utility'
40
+
41
+
42
+ // TODO: KEY, SELF, PARENT are reserved names - error
43
+
44
+ class VarVal extends FeatureVal {
45
+ isVar = true
46
+
47
+ constructor(
48
+ spec: ValSpec,
49
+ ctx?: AontuContext
50
+ ) {
51
+ super(spec, ctx)
52
+ }
53
+
54
+
55
+ unify(peer: Val, ctx: AontuContext): Val {
56
+ const te = ctx.explain && explainOpen(ctx, ctx.explain, 'Var', this, peer)
57
+
58
+ let out: Val
59
+
60
+ let nameVal
61
+
62
+ if (this.peg.isVal) {
63
+ // $.a.b.c - convert path to absolute
64
+ // if (this.peg instanceof RefVal) {
65
+ if (this.peg.isRef) {
66
+ this.peg.absolute = true
67
+ nameVal = this.peg
68
+ }
69
+ else {
70
+ nameVal = this.peg.unify(peer, ctx.clone({ explain: ec(te, 'PEG') }))
71
+ }
72
+ }
73
+ else {
74
+ // TODO: how to pass row+col?
75
+ nameVal = new StringVal({ peg: '' + this.peg }, ctx)
76
+ }
77
+
78
+ // if (!(nameVal instanceof RefVal) && DONE === nameVal.dc) {
79
+ if (!(nameVal.isRef) && DONE === nameVal.dc) {
80
+ if (nameVal instanceof StringVal) {
81
+ let found = ctx.vars[nameVal.peg]
82
+ if (undefined === found) {
83
+ out = makeNilErr(ctx, 'unknown_var', this, peer)
84
+ }
85
+
86
+ // TODO: support complex values
87
+ const ft = typeof found
88
+ if (null === found) {
89
+ out = this.place(new NullVal({ peg: null }))
90
+ }
91
+ else if ('string' === ft) {
92
+ out = new StringVal({ peg: found })
93
+ }
94
+ else if ('boolean' === ft) {
95
+ out = new BooleanVal({ peg: found })
96
+ }
97
+ else if ('number' === ft) {
98
+ out = Number.isInteger(found) ?
99
+ new IntegerVal({ peg: found }) :
100
+ new NumberVal({ peg: found })
101
+ }
102
+ else if ('object' === ft && found.isVal) {
103
+ out = found
104
+ }
105
+ else {
106
+ out = makeNilErr(ctx, 'invalid_var_kind', this, peer)
107
+ }
108
+ }
109
+ else {
110
+ out = makeNilErr(ctx, 'var[' + typeof nameVal + ']', this, peer)
111
+ }
112
+ }
113
+ else {
114
+ out = nameVal
115
+ }
116
+
117
+ explainClose(te, out)
118
+
119
+ return out
120
+ }
121
+
122
+
123
+ same(peer: Val): boolean {
124
+ return null == peer ? false : peer instanceof VarVal && this.peg === peer.peg
125
+ }
126
+
127
+
128
+ clone(ctx: AontuContext, spec?: ValSpec): Val {
129
+ let out = (super.clone(ctx, spec) as VarVal)
130
+ return out
131
+ }
132
+
133
+
134
+ get canon() {
135
+ return '$' + (this.peg?.isVal ? this.peg.canon : '' + this.peg)
136
+ }
137
+
138
+
139
+ gen(ctx?: AontuContext) {
140
+ // Unresolved var cannot be generated, so always an error.
141
+ let nil = makeNilErr(
142
+ ctx,
143
+ 'var',
144
+ this,
145
+ undefined
146
+ )
147
+
148
+ // TODO: refactor to use Site
149
+ nil.path = this.path
150
+ nil.site.url = this.site.url
151
+ nil.site.row = this.site.row
152
+ nil.site.col = this.site.col
153
+
154
+ descErr(nil, ctx)
155
+
156
+ if (ctx) {
157
+ // ctx.err.push(nil)
158
+ ctx.adderr(nil)
159
+ }
160
+ else {
161
+ throw new AontuError(nil.msg)
162
+ }
163
+
164
+ return undefined
165
+ }
166
+ }
167
+
168
+
169
+ export {
170
+ VarVal,
171
+ }
package/src/val/top.ts ADDED
@@ -0,0 +1,12 @@
1
+ /* Copyright (c) 2025 Richard Rodger, MIT License */
2
+
3
+
4
+ import { TopVal } from './TopVal'
5
+
6
+ const TOP = new TopVal({})
7
+
8
+
9
+ export function top(): TopVal {
10
+ return TOP
11
+ }
12
+
@@ -0,0 +1,31 @@
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
+
3
+ import { AontuError } from '../err'
4
+ import { ScalarVal } from './ScalarVal'
5
+ import { NumberVal } from './NumberVal'
6
+ import { StringVal } from './StringVal'
7
+ import { BooleanVal } from './BooleanVal'
8
+ import { NullVal } from './NullVal'
9
+
10
+
11
+ // TODO: move to FuncBaseVal
12
+ export function makeScalar(scalar: any): ScalarVal {
13
+ const st = typeof scalar
14
+ const spec = { peg: scalar }
15
+
16
+ if ('number' === st) {
17
+ return new NumberVal(spec)
18
+ }
19
+ else if ('string' === st) {
20
+ return new StringVal(spec)
21
+ }
22
+ else if ('boolean' === st) {
23
+ return new BooleanVal(spec)
24
+ }
25
+ else if (null === scalar) {
26
+ return new NullVal(spec)
27
+ }
28
+ else {
29
+ throw new AontuError('Not a scalar: ' + scalar)
30
+ }
31
+ }