aontu 0.30.1 → 0.31.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 (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 +90 -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 +162 -0
  22. package/dist/unify.js.map +1 -0
  23. package/dist/utility.d.ts +14 -0
  24. package/dist/utility.js +128 -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 +14 -0
  39. package/dist/val/CopyFuncVal.js +43 -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 +131 -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 +13 -0
  60. package/dist/val/KeyFuncVal.js +64 -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 +233 -0
  70. package/dist/val/MapVal.js.map +1 -0
  71. package/dist/val/MoveFuncVal.d.ts +12 -0
  72. package/dist/val/MoveFuncVal.js +44 -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 +112 -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 +310 -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 +62 -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 +90 -0
  126. package/dist/val/Val.js +205 -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 +129 -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 +233 -0
  147. package/src/utility.ts +185 -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 +82 -0
  153. package/src/val/DisjunctVal.ts +288 -0
  154. package/src/val/FeatureVal.ts +56 -0
  155. package/src/val/FuncBaseVal.ts +204 -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 +103 -0
  160. package/src/val/ListVal.ts +286 -0
  161. package/src/val/LowerFuncVal.ts +73 -0
  162. package/src/val/MapVal.ts +349 -0
  163. package/src/val/MoveFuncVal.ts +83 -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 +170 -0
  173. package/src/val/RefVal.ts +436 -0
  174. package/src/val/ScalarKindVal.ts +125 -0
  175. package/src/val/ScalarVal.ts +107 -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 +318 -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
@@ -0,0 +1,46 @@
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
+
3
+
4
+ import type {
5
+ Val,
6
+ ValSpec,
7
+ } from '../type'
8
+
9
+ import {
10
+ AontuContext,
11
+ } from '../ctx'
12
+
13
+
14
+ import { FuncBaseVal } from './FuncBaseVal'
15
+
16
+
17
+ class SuperFuncVal extends FuncBaseVal {
18
+ isSuperFunc = true
19
+
20
+ constructor(
21
+ spec: ValSpec,
22
+ ctx?: AontuContext
23
+ ) {
24
+ super(spec, ctx)
25
+ }
26
+
27
+
28
+ make(_ctx: AontuContext, spec: ValSpec): Val {
29
+ return new SuperFuncVal(spec)
30
+ }
31
+
32
+ funcname() {
33
+ return 'super'
34
+ }
35
+
36
+
37
+ resolve(_ctx: AontuContext, _args: Val[]) {
38
+ return this.place(this.superior())
39
+ }
40
+
41
+ }
42
+
43
+
44
+ export {
45
+ SuperFuncVal,
46
+ }
@@ -0,0 +1,69 @@
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
+
3
+ import { inspect } from 'node:util'
4
+
5
+ import type {
6
+ ValSpec,
7
+ } from '../type'
8
+
9
+ import {
10
+ DONE,
11
+ } from '../type'
12
+
13
+ import {
14
+ AontuContext,
15
+ } from '../ctx'
16
+
17
+ import {
18
+ Val
19
+ } from './Val'
20
+
21
+
22
+ // There can be only one.
23
+ class TopVal extends Val {
24
+ isTop = true
25
+
26
+ id = 0
27
+ dc = DONE
28
+
29
+ constructor(
30
+ spec: ValSpec,
31
+ ctx?: AontuContext
32
+ ) {
33
+ super(spec, ctx)
34
+
35
+ // TOP is always DONE, by definition.
36
+ this.dc = DONE
37
+ this.mark.type = false
38
+ this.mark.hide = false
39
+ }
40
+
41
+ same(peer: Val): boolean {
42
+ // return this === peer
43
+ return peer.isTop
44
+ }
45
+
46
+ unify(peer: Val, ctx: AontuContext): Val {
47
+ return peer.unify(this, ctx)
48
+ }
49
+
50
+ get canon() { return 'top' }
51
+
52
+ superior(): Val {
53
+ return this
54
+ }
55
+
56
+ clone(_ctx: AontuContext, _spec?: ValSpec) {
57
+ return this
58
+ }
59
+
60
+ gen(_ctx?: AontuContext) {
61
+ return undefined
62
+ }
63
+
64
+ }
65
+
66
+
67
+ export {
68
+ TopVal,
69
+ }
@@ -0,0 +1,69 @@
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
+
3
+
4
+ import type {
5
+ Val,
6
+ ValSpec,
7
+ } from '../type'
8
+
9
+ import {
10
+ AontuContext,
11
+ } from '../ctx'
12
+
13
+ import { makeNilErr } from '../err'
14
+
15
+ import {
16
+ walk,
17
+ explainOpen,
18
+ explainClose,
19
+ } from '../utility'
20
+
21
+
22
+ import { FuncBaseVal } from './FuncBaseVal'
23
+
24
+
25
+ class TypeFuncVal extends FuncBaseVal {
26
+ isTypeFunc = true
27
+
28
+ resolved?: Val
29
+
30
+ constructor(
31
+ spec: ValSpec,
32
+ ctx?: AontuContext
33
+ ) {
34
+ super(spec, ctx)
35
+
36
+ // The function does not mark itself!
37
+ this.mark.type = false
38
+ this.mark.hide = false
39
+ }
40
+
41
+
42
+ make(_ctx: AontuContext, spec: ValSpec): Val {
43
+ return new TypeFuncVal(spec)
44
+ }
45
+
46
+ funcname() {
47
+ return 'type'
48
+ }
49
+
50
+
51
+ resolve(ctx: AontuContext, args: Val[]) {
52
+ let out = args[0] ?? makeNilErr(ctx, 'arg', this)
53
+ if (!out.isNil) {
54
+ out = out.clone(ctx)
55
+
56
+ walk(out, (_key: string | number | undefined, val: Val) => {
57
+ val.mark.type = true
58
+ return val
59
+ })
60
+ }
61
+
62
+ return out
63
+ }
64
+ }
65
+
66
+
67
+ export {
68
+ TypeFuncVal,
69
+ }
@@ -0,0 +1,72 @@
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
+
3
+
4
+ import type {
5
+ Val,
6
+ ValSpec,
7
+ } from '../type'
8
+
9
+ import {
10
+ AontuContext,
11
+ } from '../ctx'
12
+
13
+ import { makeNilErr } from '../err'
14
+
15
+
16
+ import { NilVal } from '../val/NilVal'
17
+ import { ScalarKindVal } from '../val/ScalarKindVal'
18
+ import { makeScalar } from '../val/valutil'
19
+
20
+
21
+
22
+ import { FuncBaseVal } from './FuncBaseVal'
23
+
24
+
25
+ class UpperFuncVal extends FuncBaseVal {
26
+ isUpperFunc = true
27
+
28
+ constructor(
29
+ spec: ValSpec,
30
+ ctx?: AontuContext
31
+ ) {
32
+ super(spec, ctx)
33
+ }
34
+
35
+
36
+ make(_ctx: AontuContext, spec: ValSpec): Val {
37
+ return new UpperFuncVal(spec)
38
+ }
39
+
40
+ funcname() {
41
+ return 'upper'
42
+ }
43
+
44
+
45
+ resolve(ctx: AontuContext | undefined, args: Val[]) {
46
+ const oldpeg = args?.[0].peg
47
+ const peg = 'string' === typeof oldpeg ? oldpeg.toUpperCase() :
48
+ 'number' === typeof oldpeg ? Math.ceil(oldpeg) :
49
+ undefined
50
+ const out = this.place(
51
+ null == peg ?
52
+ makeNilErr(ctx, 'invalid-arg', this) :
53
+ makeScalar(peg)
54
+ )
55
+ return out
56
+ }
57
+
58
+
59
+ superior() {
60
+ const arg = this.peg?.[0]
61
+ return arg?.isScalar ?
62
+ this.place(new ScalarKindVal({
63
+ peg: arg.kind
64
+ })) :
65
+ super.superior()
66
+ }
67
+ }
68
+
69
+
70
+ export {
71
+ UpperFuncVal,
72
+ }
package/src/val/Val.ts ADDED
@@ -0,0 +1,318 @@
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
+
42
+
43
+ const DONE = -1
44
+
45
+ const SPREAD = Symbol('spread')
46
+
47
+
48
+ let ID = 1000
49
+
50
+
51
+ abstract class Val {
52
+ isVal = true
53
+
54
+ isTop = false
55
+ isNil = false
56
+ isMap = false
57
+ isList = false
58
+ isScalar = false
59
+ isScalarKind = false
60
+ isRef = false
61
+ isPref = false
62
+ isVar = false
63
+ isBag = false
64
+ isNumber = false
65
+ isInteger = false
66
+ isString = false
67
+ isBoolean = false
68
+ isConjunct = false
69
+ isDisjunct = false
70
+ isJunction = false
71
+
72
+ isOp = false
73
+ isPlusOp = false
74
+
75
+ isFunc = false
76
+ isCloseFunc = false
77
+ isCopyFunc = false
78
+ isHideFunc = false
79
+ isMoveFunc = false
80
+ isKeyFunc = false
81
+ isLowerFunc = false
82
+ isOpenFunc = false
83
+ isPathFunc = false
84
+ isPrefFunc = false
85
+ isSuperFunc = false
86
+ isTypeFunc = false
87
+ isUpperFunc = false
88
+
89
+ id: number
90
+ dc: number = 0
91
+ path: string[] = []
92
+ site: Site = new Site()
93
+
94
+ // Map of boolean flags.
95
+ mark: ValMark = { type: false, hide: false }
96
+
97
+ // Actual native value.
98
+ peg: any = undefined
99
+
100
+ // TODO: used for top level result - not great
101
+ // err: Omit<any[], "push"> = []
102
+ err: any[] = []
103
+ explain: any[] | null = null
104
+
105
+ uh: number[]
106
+
107
+ deps?: any
108
+
109
+ #ctx: any
110
+
111
+ // TODO: Site needed in ctor
112
+ constructor(spec: ValSpec, ctx?: AontuContext) {
113
+ this.#ctx = ctx
114
+
115
+ this.peg = spec?.peg
116
+
117
+ if (Array.isArray(this.peg)) {
118
+ let spread = (this.peg as any)[SPREAD]
119
+ this.peg = this.peg.filter(n => undefined !== n)
120
+ ; (this.peg as any)[SPREAD] = spread
121
+ }
122
+
123
+ this.path = ctx?.path || []
124
+
125
+ // TODO: make this work
126
+ // this.id = spec?.id ?? (ctx ? ++ctx.vc : ++ID)
127
+ this.id = ++ID
128
+
129
+ this.uh = []
130
+
131
+ this.mark.type = !!spec.mark?.type
132
+ this.mark.hide = !!spec.mark?.hide
133
+
134
+ // console.log('BV', this.id, this.constructor.name, this.peg?.canon)
135
+ }
136
+
137
+
138
+ ctx() {
139
+ return this.#ctx
140
+ }
141
+
142
+
143
+ get done() {
144
+ return this.dc === DONE
145
+ }
146
+
147
+
148
+ same(peer: Val): boolean {
149
+ return null == peer ? false : this.id === peer.id
150
+ }
151
+
152
+
153
+ clone(ctx: AontuContext, spec?: ValSpec): Val {
154
+ let cloneCtx
155
+
156
+ let path = spec?.path
157
+ if (null == path) {
158
+ let cut = this.path.indexOf('&')
159
+ cut = -1 < cut ? cut + 1 : ctx.path.length
160
+ path = ctx.path.concat(this.path.slice(cut))
161
+ }
162
+ // console.log('CLONE', path, this.canon)
163
+ // console.trace()
164
+
165
+ cloneCtx = ctx.clone({ path })
166
+
167
+ let fullspec = {
168
+ peg: this.peg,
169
+ mark: { type: this.mark.type, hide: this.mark.hide },
170
+ ...(spec ?? {})
171
+ }
172
+
173
+ let out = new (this as any)
174
+ .constructor(fullspec, cloneCtx)
175
+
176
+ out.dc = this.done ? DONE : out.dc
177
+
178
+ out.site.row = spec?.row ?? this.site.row ?? -1
179
+ out.site.col = spec?.col ?? this.site.col ?? -1
180
+ out.site.url = spec?.url ?? this.site.url ?? ''
181
+
182
+ out.mark = Object.assign({}, this.mark, fullspec.mark ?? {})
183
+ out.mark.type = this.mark.type && (fullspec.mark?.type ?? true)
184
+ out.mark.hide = this.mark.hide && (fullspec.mark?.hide ?? true)
185
+
186
+ return out
187
+ }
188
+
189
+
190
+ place(v: Val) {
191
+ v.site.row = this.site.row
192
+ v.site.col = this.site.col
193
+ v.site.url = this.site.url
194
+ return v
195
+ }
196
+
197
+ // NOTE: MUST not mutate! Val immutability is a critical assumption.
198
+ unify(_peer: Val, _ctx: AontuContext): Val { return this }
199
+
200
+ // TODO: indicate marks in some way that is ignored by reparse.
201
+ // Need an annotation/taggins syntax? a:{}/type ?
202
+ get canon(): string { return '' }
203
+
204
+
205
+ errcanon(): string {
206
+ return 0 === this.err.length ? '' : `<ERRS:${this.err.length}>`
207
+ }
208
+
209
+
210
+ gen(_ctx: AontuContext): any {
211
+ return undefined
212
+ }
213
+
214
+
215
+ notdone() {
216
+ this.dc = DONE === this.dc ? DONE : this.dc + 1
217
+ }
218
+
219
+
220
+ abstract superior(): Val
221
+
222
+
223
+ [inspect.custom](d: number, _opts: any, _inspect: any) {
224
+ return this.inspect(d)
225
+ }
226
+
227
+ inspect(d?: number): string {
228
+ d = null == d ? -1 : d
229
+ let s = ['<' + this.constructor.name.replace(/Val$/, '') + '/' + this.id]
230
+
231
+ s.push('/' + this.path.join('.') + '/')
232
+
233
+ s.push([
234
+ DONE === this.dc ? 'D' : 'd' + this.dc,
235
+ ...Object.entries(this.mark).filter(n => n[1]).map(n => n[0]).sort()
236
+ ].filter(n => null != n).join(','))
237
+
238
+ // let insp = this.inspection(inspect)
239
+ let insp = this.inspection(1 + d)
240
+ if (null != insp && '' != insp) {
241
+ s.push('/' + insp)
242
+ }
243
+
244
+ s.push('/')
245
+
246
+ if (this.peg?.isVal) {
247
+ s.push(this.peg.inspect(1 + d))
248
+ }
249
+ else if (null != this.peg && 'object' === typeof this.peg &&
250
+ (Object.entries(this.peg)[0]?.[1] as any)?.isVal) {
251
+ s.push(inspectpeg(this.peg, 1 + d))
252
+ }
253
+ else if ('function' === typeof this.peg) {
254
+ s.push(this.peg.name)
255
+ }
256
+ else {
257
+ s.push(this.peg?.toString?.() ?? '')
258
+ }
259
+
260
+ s.push('>')
261
+
262
+ const out = s.join('')
263
+
264
+ return out
265
+ }
266
+
267
+
268
+ inspection(_d?: number) {
269
+ return ''
270
+ }
271
+
272
+ }
273
+
274
+
275
+ function inspectpeg(peg: any, d: number) {
276
+ const indent = ' '.repeat(d)
277
+ return pretty(Array.isArray(peg) ?
278
+ ('[' + peg.map(n => '\n ' + indent + (n.inspect?.(d) ?? n)).join(',') +
279
+ '\n' + indent + ']') :
280
+ ('{' +
281
+ Object.entries(peg).map((n: any) =>
282
+ '\n ' + indent + n[0] + ': ' + // n[1].inspect(d)
283
+ (n[1].inspect(d) ?? '' + n[1])
284
+ ).join(',') +
285
+ '\n' + indent + '}')
286
+ )
287
+ }
288
+
289
+ function pretty(s: string) {
290
+ return (
291
+ (String(s))
292
+ .replace(/\[Object: null prototype\]/g, '')
293
+ // .replace(/([^\n]) +/g, '$1')
294
+ )
295
+ }
296
+
297
+
298
+ function empty(o: any) {
299
+ return (
300
+ (Array.isArray(o) && 0 === o.length)
301
+ || (null != o && 'object' === typeof o && 0 === Object.keys(o).length)
302
+ || false
303
+ )
304
+ }
305
+
306
+
307
+
308
+ export type {
309
+ ValMark,
310
+ ValSpec,
311
+ }
312
+
313
+ export {
314
+ Val,
315
+ DONE,
316
+ SPREAD,
317
+ empty
318
+ }