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/lang.ts DELETED
@@ -1,585 +0,0 @@
1
- /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
2
-
3
- import {
4
- Jsonic,
5
- Plugin,
6
- Rule,
7
- RuleSpec,
8
- Context,
9
- JsonicError,
10
- } from 'jsonic'
11
-
12
- import { Debug } from 'jsonic/debug'
13
-
14
- import {
15
- MultiSource
16
- } from '@jsonic/multisource'
17
-
18
- import {
19
- makeFileResolver
20
- } from '@jsonic/multisource/resolver/file'
21
-
22
- import {
23
- makePkgResolver
24
- } from '@jsonic/multisource/resolver/pkg'
25
-
26
- import {
27
- makeMemResolver
28
- } from '@jsonic/multisource/resolver/mem'
29
-
30
-
31
- import {
32
- Expr,
33
- Op,
34
- } from '@jsonic/expr'
35
-
36
- import {
37
- Path
38
- } from '@jsonic/path'
39
-
40
-
41
- import type {
42
- Val,
43
- Options,
44
- } from './type'
45
-
46
-
47
-
48
- import { DisjunctVal } from './val/DisjunctVal'
49
- import { ConjunctVal } from './val/ConjunctVal'
50
- import { ListVal } from './val/ListVal'
51
- import { MapVal } from './val/MapVal'
52
- import { Nil } from './val/Nil'
53
- import { PrefVal } from './val/PrefVal'
54
- import { RefVal } from './val/RefVal'
55
- import { VarVal } from './val/VarVal'
56
- import { PlusVal } from './val/PlusVal'
57
- import { NullVal } from './val/NullVal'
58
-
59
-
60
-
61
- import {
62
- TOP,
63
- ScalarTypeVal,
64
- Integer,
65
- StringVal,
66
- NumberVal,
67
- IntegerVal,
68
- BooleanVal,
69
- } from './val'
70
-
71
-
72
-
73
- class Site {
74
- row: number = -1
75
- col: number = -1
76
- url: string = ''
77
-
78
- // static NONE = new Site(TOP)
79
-
80
- constructor(val: Val) {
81
- // TODO: logic to select most meaningful site if val has no site,
82
- // but has peg children that do.
83
- this.row = val.row
84
- this.col = val.col
85
- this.url = val.url
86
- }
87
- }
88
-
89
-
90
-
91
- let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
92
-
93
- jsonic.use(Path)
94
-
95
- // TODO: refactor Val constructor
96
- // let addsite = (v: Val, p: string[]) => (v.path = [...(p || [])], v)
97
- let addsite = (v: Val, r: Rule, ctx: Context) => {
98
-
99
- v.row = null == r.o0 ? -1 : r.o0.rI
100
- v.col = null == r.o0 ? -1 : r.o0.cI
101
- v.url = ctx.meta.multisource ? ctx.meta.multisource.path : ''
102
- v.path = r.k ? [...(r.k.path || [])] : []
103
-
104
- return v
105
- }
106
-
107
-
108
- jsonic.options({
109
- value: {
110
- def: {
111
- // NOTE: specify with functions as jsonic/deep will
112
- // remove class prototype as options are assumed plain
113
- // (except for functions).
114
- // TODO: jsonic should be able to pass context into these
115
- 'string': {
116
- val: (r: Rule, ctx: Context) =>
117
- addsite(new ScalarTypeVal({ peg: String }), r, ctx)
118
- },
119
- 'number': {
120
- val: (r: Rule, ctx: Context) =>
121
- addsite(new ScalarTypeVal({ peg: Number }), r, ctx)
122
- },
123
- 'integer': {
124
- val: (r: Rule, ctx: Context) =>
125
- addsite(new ScalarTypeVal({ peg: Integer }), r, ctx)
126
- },
127
- 'boolean': {
128
- val: (r: Rule, ctx: Context) =>
129
- addsite(new ScalarTypeVal({ peg: Boolean }), r, ctx)
130
- },
131
- 'nil': {
132
- val: (r: Rule, ctx: Context) =>
133
- addsite(new Nil('literal'), r, ctx)
134
- },
135
-
136
- // TODO: FIX: need a TOP instance to hold path
137
- 'top': { val: () => TOP },
138
- }
139
- },
140
-
141
- map: {
142
- merge: (prev: any, curr: any, _r: Rule, ctx: Context) => {
143
- let pval = (prev as Val)
144
- let cval = (curr as Val)
145
-
146
- if (pval?.isVal && cval?.isVal) {
147
-
148
- // TODO: test multi element conjuncts work
149
- if (pval instanceof ConjunctVal && cval instanceof ConjunctVal) {
150
- pval.append(cval)
151
- return pval
152
- }
153
- else if (pval instanceof ConjunctVal) {
154
- pval.append(cval)
155
- return pval
156
- }
157
- // else if (cval instanceof ConjunctVal) {
158
- // cval.append(pval)
159
- // return cval
160
- // }
161
- else {
162
- return addsite(new ConjunctVal({ peg: [pval, cval] }), prev, ctx)
163
- }
164
- }
165
-
166
- // Handle defered conjuncts, where MapVal does not yet
167
- // exist, by creating ConjunctVal later.
168
- else {
169
- prev.___merge = (prev.___merge || [])
170
- prev.___merge.push(curr)
171
- return prev
172
- }
173
- }
174
- }
175
- })
176
-
177
-
178
- let opmap: any = {
179
- 'conjunct-infix': (r: Rule, ctx: Context, _op: Op, terms: any) =>
180
- addsite(new ConjunctVal({ peg: terms }), r, ctx),
181
-
182
- 'disjunct-infix': (r: Rule, ctx: Context, _op: Op, terms: any) =>
183
- addsite(new DisjunctVal({ peg: terms }), r, ctx),
184
-
185
- 'dot-prefix': (r: Rule, ctx: Context, _op: Op, terms: any) => {
186
- return addsite(new RefVal({ peg: terms, prefix: true }), r, ctx)
187
- },
188
-
189
- 'dot-infix': (r: Rule, ctx: Context, _op: Op, terms: any) => {
190
- return addsite(new RefVal({ peg: terms }), r, ctx)
191
- },
192
-
193
- 'star-prefix': (r: Rule, ctx: Context, _op: Op, terms: any) =>
194
- addsite(new PrefVal({ peg: terms[0] }), r, ctx),
195
-
196
- 'dollar-prefix': (r: Rule, ctx: Context, _op: Op, terms: any) => {
197
- // $.a.b absolute path
198
- if (terms[0] instanceof RefVal) {
199
- terms[0].absolute = true
200
- return terms[0]
201
- }
202
- return addsite(new VarVal({ peg: terms[0] }), r, ctx)
203
- },
204
-
205
- 'plus-infix': (r: Rule, ctx: Context, _op: Op, terms: any) => {
206
- return addsite(new PlusVal({ peg: [terms[0], terms[1]] }), r, ctx)
207
- },
208
-
209
- 'negative-prefix': (r: Rule, ctx: Context, _op: Op, terms: any) => {
210
- let val = terms[0]
211
- val.peg = -1 * val.peg
212
- return addsite(val, r, ctx)
213
- },
214
-
215
- 'positive-prefix': (r: Rule, ctx: Context, _op: Op, terms: any) => {
216
- let val = terms[0]
217
- return addsite(val, r, ctx)
218
- },
219
-
220
- 'plain-paren': (r: Rule, ctx: Context, _op: Op, terms: any) => {
221
- let val = terms[0]
222
- return addsite(val, r, ctx)
223
- },
224
-
225
- }
226
-
227
-
228
- jsonic
229
- .use(Expr, {
230
- op: {
231
- // disjunct > conjunct: c & b | a -> c & (b | a)
232
- 'conjunct': {
233
- infix: true, src: '&', left: 14_000_000, right: 15_000_000
234
- },
235
- 'disjunct': {
236
- infix: true, src: '|', left: 16_000_000, right: 17_000_000
237
- },
238
-
239
- 'plus-infix': {
240
- src: '+',
241
- infix: true,
242
- left: 20_000_000,
243
- right: 21_000_000,
244
- },
245
-
246
- 'dollar-prefix': {
247
- src: '$',
248
- prefix: true,
249
- right: 31_000_000,
250
- },
251
-
252
- 'dot-infix': {
253
- src: '.',
254
- infix: true,
255
- left: 25_000_000,
256
- right: 24_000_000,
257
- },
258
-
259
- 'dot-prefix': {
260
- src: '.',
261
- prefix: true,
262
- right: 24_000_000,
263
- },
264
-
265
- 'star': {
266
- src: '*',
267
- prefix: true,
268
- right: 24_000_000,
269
- },
270
-
271
- addition: null,
272
- subtraction: null,
273
- multiplication: null,
274
- division: null,
275
- remainder: null,
276
- },
277
- evaluate: (r: Rule, ctx: Context, op: Op, terms: any) => {
278
- // console.log('EVAL', op.name, terms)
279
-
280
- let val: Val = opmap[op.name](r, ctx, op, terms)
281
- return val
282
- }
283
- })
284
-
285
-
286
- let CJ = jsonic.token['#E&']
287
- let CL = jsonic.token.CL
288
-
289
-
290
- jsonic.rule('val', (rs: RuleSpec) => {
291
-
292
- rs
293
- .open([{ s: [CJ, CL], p: 'map', b: 2, n: { pk: 1 }, g: 'spread' }])
294
-
295
- .bc((r: Rule, ctx: Context) => {
296
-
297
- let valnode: Val = r.node
298
- let valtype = typeof valnode
299
-
300
- if ('string' === valtype) {
301
- valnode = addsite(new StringVal({ peg: r.node }), r, ctx)
302
- }
303
- else if ('number' === valtype) {
304
- if (Number.isInteger(r.node)) {
305
- valnode = addsite(new IntegerVal({ peg: r.node }), r, ctx)
306
- }
307
- else {
308
- valnode = addsite(new NumberVal({ peg: r.node }), r, ctx)
309
- }
310
- }
311
- else if ('boolean' === valtype) {
312
- valnode = addsite(new BooleanVal({ peg: r.node }), r, ctx)
313
- }
314
- else if (null === valnode) {
315
- valnode = addsite(new NullVal({ peg: r.node }), r, ctx)
316
- }
317
-
318
- if (null != valnode && 'object' === typeof valnode) {
319
- let st = r.o0
320
- valnode.row = st.rI
321
- valnode.col = st.cI
322
- valnode.url = ctx.meta.multisource && ctx.meta.multisource.path
323
- }
324
- // else { ERROR? }
325
-
326
- r.node = valnode
327
-
328
- return undefined
329
- })
330
-
331
- .close([{ s: [CJ, CL], b: 2, g: 'spread,json,more' }])
332
-
333
- return rs
334
- })
335
-
336
-
337
- jsonic.rule('map', (rs: RuleSpec) => {
338
- rs
339
- .open([{ s: [CJ, CL], p: 'pair', b: 2, g: 'spread' }])
340
-
341
- .bc((r: Rule, ctx: Context) => {
342
-
343
- let mo = r.node
344
-
345
- // Handle defered conjuncts, e.g. `{x:1 @"foo"}`
346
- if (mo.___merge) {
347
- let mop = { ...mo }
348
- delete mop.___merge
349
-
350
- // TODO: needs addpath?
351
- let mopv = new MapVal({ peg: mop })
352
-
353
- r.node =
354
- addsite(new ConjunctVal({ peg: [mopv, ...mo.___merge] }), r, ctx)
355
- }
356
- else {
357
- r.node = addsite(new MapVal({ peg: mo }), r, ctx)
358
- }
359
-
360
- return undefined
361
- })
362
-
363
- .close([{ s: [CJ, CL], b: 2, g: 'spread,json,more' }])
364
-
365
- return rs
366
- })
367
-
368
-
369
- jsonic.rule('list', (rs: RuleSpec) => {
370
- rs.bc((r: Rule, ctx: Context) => {
371
- r.node = addsite(new ListVal({ peg: r.node }), r, ctx)
372
-
373
- return undefined
374
- })
375
-
376
- return rs
377
- })
378
-
379
-
380
- jsonic.rule('pair', (rs: RuleSpec) => {
381
- rs
382
- .open([{
383
- s: [CJ, CL], p: 'val',
384
- u: { spread: true },
385
- g: 'spread'
386
- }])
387
-
388
- // NOTE: manually adjust path - @jsonic/path ignores as not pair:true
389
- .ao((r) => {
390
- if (0 < r.d && r.u.spread) {
391
- r.child.k.path = [...r.k.path, '&']
392
- r.child.k.key = '&'
393
- }
394
- })
395
-
396
- .bc((rule: Rule) => {
397
- // TRAVERSE PARENTS TO GET PATH
398
-
399
- if (rule.u.spread) {
400
- rule.node[MapVal.SPREAD] =
401
- (rule.node[MapVal.SPREAD] || { o: rule.o0.src, v: [] })
402
-
403
- rule.node[MapVal.SPREAD].v.push(rule.child.node)
404
- }
405
-
406
- return undefined
407
- })
408
-
409
- .close([
410
- { s: [CJ, CL], c: (r) => r.lte('dmap', 1), r: 'pair', b: 2, g: 'spread,json,pair' },
411
- { s: [CJ, CL], b: 2, g: 'spread,json,more' }
412
- ])
413
-
414
-
415
- return rs
416
- })
417
-
418
-
419
- jsonic.rule('elem', (rs: RuleSpec) => {
420
- rs
421
- // PPP
422
- .open([{ s: [CJ, CL], p: 'val', u: { spread: true }, n: { pk: 1 }, g: 'spread' }])
423
-
424
- .bc((rule: Rule) => {
425
- // TRAVERSE PARENTS TO GET PATH
426
-
427
- if (rule.u.spread) {
428
- rule.node[ListVal.SPREAD] =
429
- (rule.node[ListVal.SPREAD] || { o: rule.o0.src, v: [] })
430
- rule.node[ListVal.SPREAD].v.push(rule.child.node)
431
- }
432
-
433
- return undefined
434
- })
435
-
436
- .close([{ s: [CJ, CL], r: 'elem', b: 2, g: 'spread,json,more' }])
437
-
438
- return rs
439
- })
440
-
441
- }
442
-
443
-
444
- // const includeFileResolver = makeFileResolver((spec: any) => {
445
- // return 'string' === typeof spec ? spec : spec?.peg
446
- // })
447
-
448
- function makeModelResolver(options: any) {
449
- const useRequire = options.require || require
450
-
451
- let memResolver = makeMemResolver({
452
- ...(options.resolver?.mem || {})
453
- })
454
-
455
- // let fileResolver = makeFileResolver({
456
- // ...(options.resolver?.file || {})
457
- // })
458
-
459
- // TODO: make this consistent with other resolvers
460
- let fileResolver = makeFileResolver((spec: any) => {
461
- return 'string' === typeof spec ? spec : spec?.peg
462
- })
463
-
464
- let pkgResolver = makePkgResolver({
465
- require: useRequire,
466
- ...(options.resolver?.pkg || {})
467
- })
468
-
469
- return function ModelResolver(
470
- spec: any,
471
- popts: any,
472
- rule: Rule,
473
- ctx: Context,
474
- jsonic: Jsonic
475
- ) {
476
-
477
- let path = 'string' === typeof spec ? spec : spec?.peg
478
- let search: any = []
479
- let res = memResolver(path, popts, rule, ctx, jsonic)
480
- res.path = path
481
- if (res.found) {
482
- return res
483
- }
484
-
485
- search = search.concat(res.search)
486
-
487
- res = fileResolver(path, popts, rule, ctx, jsonic)
488
- res.path = path
489
- if (res.found) {
490
- return res
491
- }
492
-
493
- search = search.concat(res.search)
494
-
495
- res = pkgResolver(path, popts, rule, ctx, jsonic)
496
- res.path = path
497
- if (res.found) {
498
- return res
499
- }
500
-
501
- res.search = search.concat(res.search)
502
- return res
503
- }
504
- }
505
-
506
-
507
- class Lang {
508
- jsonic: Jsonic
509
- options: Options = {
510
- src: '',
511
- print: -1,
512
- debug: false,
513
- trace: false,
514
- }
515
-
516
-
517
- constructor(options?: Partial<Options>) {
518
- this.options = Object.assign({}, this.options, options) as Options
519
-
520
- const modelResolver = makeModelResolver(this.options)
521
-
522
- this.jsonic = Jsonic.make()
523
-
524
- if (this.options.debug) {
525
- this.jsonic.use(Debug, {
526
- trace: this.options.trace
527
- })
528
- }
529
-
530
- this.jsonic
531
- .use(AontuJsonic)
532
- .use(MultiSource, {
533
- // resolver: options?.resolver || includeFileResolver
534
- resolver: options?.resolver || modelResolver
535
- })
536
- }
537
-
538
-
539
- parse(src: string, opts?: Partial<Options>): Val {
540
- // JSONIC-UPDATE - check meta
541
- let jm: any = {
542
- fs: opts?.fs,
543
- fileName: this.options.path,
544
- multisource: {
545
- path: this.options.path,
546
- deps: (opts && opts.deps) || undefined
547
- }
548
- }
549
-
550
- // Pass through Jsonic debug log value
551
- if (opts && null != opts.log && Number.isInteger(opts.log)) {
552
- jm.log = opts.log
553
- }
554
-
555
- // jm.log = -1
556
-
557
- let val: Val
558
-
559
- try {
560
- val = this.jsonic(src, jm)
561
- }
562
- catch (e: any) {
563
- if (e instanceof JsonicError || 'JsonicError' === e.constructor.name) {
564
- val = new Nil({
565
- why: 'parse',
566
- err: new Nil({
567
- why: 'syntax',
568
- msg: e.message,
569
- err: e,
570
- })
571
- })
572
- }
573
- else {
574
- throw e
575
- }
576
- }
577
-
578
- return val
579
- }
580
- }
581
-
582
- export {
583
- Lang,
584
- Site,
585
- }
@@ -1,51 +0,0 @@
1
- /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
2
-
3
-
4
- import type { Val } from '../type'
5
-
6
- import { Site } from '../lang'
7
- import { Context } from '../unify'
8
- import { Operation } from './op'
9
-
10
-
11
-
12
- import { DisjunctVal } from '../val/DisjunctVal'
13
- import { ConjunctVal } from '../val/ConjunctVal'
14
- import { ListVal } from '../val/ListVal'
15
- import { MapVal } from '../val/MapVal'
16
- import { Nil } from '../val/Nil'
17
- import { PrefVal } from '../val/PrefVal'
18
- import { RefVal } from '../val/RefVal'
19
- import { ValBase } from '../val/ValBase'
20
-
21
-
22
-
23
- const disjunct: Operation = (ctx?: Context, a?: Val, b?: Val) => {
24
- let peers: Val[] = []
25
- let origsites: Site[] = []
26
- // origsites.push(append(peers, a))
27
- // origsites.push(append(peers, b))
28
- let out = new DisjunctVal({ peg: peers }, ctx, origsites)
29
- return out
30
- }
31
-
32
-
33
- function append(peers: Val[], v?: any) {
34
- // let origsite: Site = Site.NONE
35
-
36
- if (v.isDisjunctVal) {
37
- peers.push(...v.peg)
38
- // origsite = v.site
39
- }
40
-
41
- // TODO: handle no-error Nil (drop) and error Nil (keep and become)
42
- else if (v instanceof ValBase) {
43
- peers.push(v)
44
- }
45
-
46
- // return origsite
47
- }
48
-
49
- export {
50
- disjunct
51
- }
package/lib/op/op.ts DELETED
@@ -1,18 +0,0 @@
1
- /* Copyright (c) 2021-2023 Richard Rodger, MIT License. */
2
-
3
-
4
- import { Context } from '../unify'
5
- import { Val } from '../type'
6
-
7
- import { disjunct } from './disjunct'
8
- import { unite } from './unite'
9
-
10
-
11
- type Operation = (ctx: Context, a?: Val, b?: Val, whence?: string) => Val
12
-
13
- export {
14
- Operation,
15
- disjunct,
16
- unite,
17
- }
18
-