@voxgig/sdkgen 0.22.0 → 0.23.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.
- package/bin/voxgig-sdkgen +12 -4
- package/dist/action/action.d.ts +4 -0
- package/dist/action/action.js +35 -0
- package/dist/action/action.js.map +1 -0
- package/dist/action/feature.d.ts +4 -2
- package/dist/action/feature.js +57 -38
- package/dist/action/feature.js.map +1 -1
- package/dist/action/target.d.ts +4 -2
- package/dist/action/target.js +136 -45
- package/dist/action/target.js.map +1 -1
- package/dist/cmp/Entity.js +5 -0
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/Feature.js +5 -0
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/Main.js +4 -1
- package/dist/cmp/Main.js.map +1 -1
- package/dist/cmp/Top.d.ts +2 -0
- package/dist/cmp/Top.js +23 -0
- package/dist/cmp/Top.js.map +1 -0
- package/dist/sdkgen.d.ts +10 -3
- package/dist/sdkgen.js +53 -8
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utility.d.ts +3 -3
- package/dist/utility.js +7 -8
- package/dist/utility.js.map +1 -1
- package/package.json +6 -10
- package/project/.sdk/model/feature/README.md +2 -0
- package/project/.sdk/model/feature/log.jsonic +7 -4
- package/project/.sdk/model/feature/test.jsonic +26 -0
- package/project/.sdk/model/target/ts.jsonic +1 -0
- package/project/.sdk/src/cmp/ts/Config_ts.ts +7 -2
- package/project/.sdk/src/cmp/ts/EntityOperation_ts.ts +67 -0
- package/project/.sdk/src/cmp/ts/EntityTest_ts.ts +180 -0
- package/project/.sdk/src/cmp/ts/Entity_ts.ts +41 -66
- package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +22 -0
- package/project/.sdk/src/cmp/ts/Main_ts.ts +52 -53
- package/project/.sdk/src/cmp/ts/Package_ts.ts +12 -7
- package/project/.sdk/src/cmp/ts/ReadmeInstall_ts.ts +19 -0
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +24 -0
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +13 -0
- package/project/.sdk/src/cmp/ts/TestMain_ts.ts +19 -0
- package/project/.sdk/src/cmp/ts/Test_ts.ts +20 -0
- package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +8 -1
- package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.ts +164 -0
- package/project/.sdk/src/cmp/ts/fragment/Entity.test.fragment.ts +37 -0
- package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.ts +91 -0
- package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.ts +92 -0
- package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.ts +96 -0
- package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.ts +96 -0
- package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.ts +95 -0
- package/project/.sdk/src/cmp/ts/fragment/Main.fragment.ts +107 -0
- package/project/.sdk/src/cmp/ts/utility_ts.ts +10 -0
- package/project/.sdk/tm/ts/src/feature/base/BaseFeature.ts +43 -0
- package/project/.sdk/tm/ts/src/feature/log/LogFeature.ts +109 -0
- package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +159 -0
- package/project/.sdk/tm/ts/src/tsconfig.json +1 -1
- package/project/.sdk/tm/ts/src/types.ts +114 -0
- package/project/.sdk/tm/ts/src/utility/AddfeatureUtility.ts +47 -0
- package/project/.sdk/tm/ts/src/utility/AuthUtility.ts +42 -0
- package/project/.sdk/tm/ts/src/utility/BodyUtility.ts +29 -0
- package/project/.sdk/tm/ts/src/utility/CleanUtility.ts +50 -0
- package/project/.sdk/tm/ts/src/utility/ContextUtility.ts +67 -0
- package/project/.sdk/tm/ts/src/utility/DoneUtility.ts +28 -0
- package/project/.sdk/tm/ts/src/utility/ErrorUtility.ts +59 -0
- package/project/.sdk/tm/ts/src/utility/FeaturehookUtility.ts +26 -0
- package/project/.sdk/tm/ts/src/utility/FetcherUtility.ts +17 -0
- package/project/.sdk/tm/ts/src/utility/FindparamUtility.ts +54 -0
- package/project/.sdk/tm/ts/src/utility/FullurlUtility.ts +46 -0
- package/project/.sdk/tm/ts/src/utility/HeadersUtility.ts +24 -0
- package/project/.sdk/tm/ts/src/utility/InitfeatureUtility.ts +13 -0
- package/project/.sdk/tm/ts/src/utility/JoinurlUtility.ts +15 -0
- package/project/.sdk/tm/ts/src/utility/MethodUtility.ts +25 -0
- package/project/.sdk/tm/ts/src/utility/OperatorUtility.ts +90 -0
- package/project/.sdk/tm/ts/src/utility/OptionsUtility.ts +72 -0
- package/project/.sdk/tm/ts/src/utility/ParamsUtility.ts +37 -0
- package/project/.sdk/tm/ts/src/utility/QueryUtility.ts +27 -0
- package/project/.sdk/tm/ts/src/utility/ReqformUtility.ts +33 -0
- package/project/.sdk/tm/ts/src/utility/RequestUtility.ts +66 -0
- package/project/.sdk/tm/ts/src/utility/ResbasicUtility.ts +34 -0
- package/project/.sdk/tm/ts/src/utility/ResbodyUtility.ts +19 -0
- package/project/.sdk/tm/ts/src/utility/ResformUtility.ts +36 -0
- package/project/.sdk/tm/ts/src/utility/ResheadersUtility.ts +23 -0
- package/project/.sdk/tm/ts/src/utility/ResponseUtility.ts +30 -0
- package/project/.sdk/tm/ts/src/utility/ResultUtility.ts +36 -0
- package/project/.sdk/tm/ts/src/utility/SpecUtility.ts +61 -0
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2499 -0
- package/project/.sdk/tm/ts/src/utility/Utility.ts +88 -0
- package/project/.sdk/tm/ts/test/exists.test.ts +17 -0
- package/project/.sdk/tm/ts/test/runner.ts +402 -0
- package/project/.sdk/tm/ts/test/tsconfig.json +1 -1
- package/project/.sdk/tm/ts/test/utility/Custom.test.ts +62 -0
- package/project/.sdk/tm/ts/test/utility/PrimaryUtility.test.ts +244 -0
- package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +678 -0
- package/project/.sdk/tm/ts/test/utility/index.ts +9 -0
- package/project/.sdk/tm/ts/test/utility.ts +86 -0
- package/src/action/action.ts +54 -0
- package/src/action/feature.ts +83 -47
- package/src/action/target.ts +173 -53
- package/src/cmp/Entity.ts +6 -0
- package/src/cmp/Feature.ts +6 -3
- package/src/cmp/Main.ts +4 -1
- package/src/sdkgen.ts +86 -11
- package/src/types.ts +33 -0
- package/src/utility.ts +5 -3
- package/project/.sdk/model/feature/limit.jsonic +0 -12
- package/project/.sdk/model/feature/page.jsonic +0 -9
- package/project/.sdk/model/feature/telemetry.jsonic +0 -10
- package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.js +0 -79
- package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.js +0 -61
- package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.js +0 -57
- package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.js +0 -61
- package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.js +0 -61
- package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.js +0 -61
- package/project/.sdk/src/cmp/ts/fragment/Main.fragment.js +0 -67
- package/project/.sdk/tm/ts/test/README.md~ +0 -2
|
@@ -0,0 +1,678 @@
|
|
|
1
|
+
// VERSION: @voxgig/struct 0.0.4
|
|
2
|
+
// RUN: npm test
|
|
3
|
+
// RUN-SOME: npm run test-some --pattern=getpath
|
|
4
|
+
|
|
5
|
+
import { test, describe } from 'node:test'
|
|
6
|
+
import { equal, deepEqual } from 'node:assert'
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
makeRunner,
|
|
10
|
+
nullModifier,
|
|
11
|
+
NULLMARK,
|
|
12
|
+
} from '../runner'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
SDK,
|
|
17
|
+
TEST_JSON_FILE
|
|
18
|
+
} from './index'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
// NOTE: tests are (mostly) in order of increasing dependence.
|
|
22
|
+
describe('struct', async () => {
|
|
23
|
+
|
|
24
|
+
const runner = await makeRunner(TEST_JSON_FILE, await SDK.test())
|
|
25
|
+
|
|
26
|
+
const { spec, runset, runsetflags, client } = await runner('struct')
|
|
27
|
+
|
|
28
|
+
const {
|
|
29
|
+
clone,
|
|
30
|
+
delprop,
|
|
31
|
+
escre,
|
|
32
|
+
escurl,
|
|
33
|
+
getelem,
|
|
34
|
+
getpath,
|
|
35
|
+
|
|
36
|
+
getprop,
|
|
37
|
+
haskey,
|
|
38
|
+
inject,
|
|
39
|
+
isempty,
|
|
40
|
+
isfunc,
|
|
41
|
+
|
|
42
|
+
iskey,
|
|
43
|
+
islist,
|
|
44
|
+
ismap,
|
|
45
|
+
isnode,
|
|
46
|
+
items,
|
|
47
|
+
|
|
48
|
+
joinurl,
|
|
49
|
+
jsonify,
|
|
50
|
+
keysof,
|
|
51
|
+
merge,
|
|
52
|
+
pad,
|
|
53
|
+
pathify,
|
|
54
|
+
|
|
55
|
+
select,
|
|
56
|
+
size,
|
|
57
|
+
slice,
|
|
58
|
+
setprop,
|
|
59
|
+
|
|
60
|
+
strkey,
|
|
61
|
+
stringify,
|
|
62
|
+
transform,
|
|
63
|
+
typify,
|
|
64
|
+
validate,
|
|
65
|
+
|
|
66
|
+
walk,
|
|
67
|
+
|
|
68
|
+
jo,
|
|
69
|
+
ja,
|
|
70
|
+
|
|
71
|
+
} = client.utility().struct
|
|
72
|
+
|
|
73
|
+
const minorSpec = spec.minor
|
|
74
|
+
const walkSpec = spec.walk
|
|
75
|
+
const mergeSpec = spec.merge
|
|
76
|
+
const getpathSpec = spec.getpath
|
|
77
|
+
const injectSpec = spec.inject
|
|
78
|
+
const transformSpec = spec.transform
|
|
79
|
+
const validateSpec = spec.validate
|
|
80
|
+
const selectSpec = spec.select
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
test('exists', () => {
|
|
84
|
+
equal('function', typeof clone)
|
|
85
|
+
equal('function', typeof delprop)
|
|
86
|
+
equal('function', typeof escre)
|
|
87
|
+
equal('function', typeof escurl)
|
|
88
|
+
equal('function', typeof getelem)
|
|
89
|
+
equal('function', typeof getprop)
|
|
90
|
+
|
|
91
|
+
equal('function', typeof getpath)
|
|
92
|
+
equal('function', typeof haskey)
|
|
93
|
+
equal('function', typeof inject)
|
|
94
|
+
equal('function', typeof isempty)
|
|
95
|
+
equal('function', typeof isfunc)
|
|
96
|
+
|
|
97
|
+
equal('function', typeof iskey)
|
|
98
|
+
equal('function', typeof islist)
|
|
99
|
+
equal('function', typeof ismap)
|
|
100
|
+
equal('function', typeof isnode)
|
|
101
|
+
equal('function', typeof items)
|
|
102
|
+
|
|
103
|
+
equal('function', typeof joinurl)
|
|
104
|
+
equal('function', typeof jsonify)
|
|
105
|
+
equal('function', typeof keysof)
|
|
106
|
+
equal('function', typeof merge)
|
|
107
|
+
equal('function', typeof pad)
|
|
108
|
+
equal('function', typeof pathify)
|
|
109
|
+
|
|
110
|
+
equal('function', typeof select)
|
|
111
|
+
equal('function', typeof size)
|
|
112
|
+
equal('function', typeof slice)
|
|
113
|
+
equal('function', typeof setprop)
|
|
114
|
+
|
|
115
|
+
equal('function', typeof strkey)
|
|
116
|
+
equal('function', typeof stringify)
|
|
117
|
+
equal('function', typeof transform)
|
|
118
|
+
equal('function', typeof typify)
|
|
119
|
+
equal('function', typeof validate)
|
|
120
|
+
|
|
121
|
+
equal('function', typeof walk)
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
// minor tests
|
|
126
|
+
// ===========
|
|
127
|
+
|
|
128
|
+
test('minor-isnode', async () => {
|
|
129
|
+
await runset(minorSpec.isnode, isnode)
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
test('minor-ismap', async () => {
|
|
134
|
+
await runset(minorSpec.ismap, ismap)
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
test('minor-islist', async () => {
|
|
139
|
+
await runset(minorSpec.islist, islist)
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
test('minor-iskey', async () => {
|
|
144
|
+
await runsetflags(minorSpec.iskey, { null: false }, iskey)
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
test('minor-strkey', async () => {
|
|
149
|
+
await runsetflags(minorSpec.strkey, { null: false }, strkey)
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
test('minor-isempty', async () => {
|
|
154
|
+
await runsetflags(minorSpec.isempty, { null: false }, isempty)
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
test('minor-isfunc', async () => {
|
|
159
|
+
await runset(minorSpec.isfunc, isfunc)
|
|
160
|
+
function f0() { return null }
|
|
161
|
+
equal(isfunc(f0), true)
|
|
162
|
+
equal(isfunc(() => null), true)
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
test('minor-clone', async () => {
|
|
167
|
+
await runsetflags(minorSpec.clone, { null: false }, clone)
|
|
168
|
+
const f0 = () => null
|
|
169
|
+
deepEqual({ a: f0 }, clone({ a: f0 }))
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
test('minor-escre', async () => {
|
|
174
|
+
await runset(minorSpec.escre, escre)
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
test('minor-escurl', async () => {
|
|
179
|
+
await runset(minorSpec.escurl, escurl)
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
test('minor-stringify', async () => {
|
|
184
|
+
await runset(minorSpec.stringify, (vin: any) =>
|
|
185
|
+
stringify((NULLMARK === vin.val ? "null" : vin.val), vin.max))
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
test('minor-jsonify', async () => {
|
|
190
|
+
await runsetflags(minorSpec.jsonify, { null: false }, jsonify)
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
test('minor-pathify', async () => {
|
|
195
|
+
await runsetflags(
|
|
196
|
+
minorSpec.pathify, { null: true },
|
|
197
|
+
(vin: any) => {
|
|
198
|
+
let path = NULLMARK == vin.path ? undefined : vin.path
|
|
199
|
+
let pathstr = pathify(path, vin.from).replace('__NULL__.', '')
|
|
200
|
+
pathstr = NULLMARK === vin.path ? pathstr.replace('>', ':null>') : pathstr
|
|
201
|
+
return pathstr
|
|
202
|
+
})
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
test('minor-items', async () => {
|
|
207
|
+
await runset(minorSpec.items, items)
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
test('minor-getelem', async () => {
|
|
212
|
+
await runsetflags(minorSpec.getelem, { null: false }, (vin: any) =>
|
|
213
|
+
null == vin.alt ? getelem(vin.val, vin.key) : getelem(vin.val, vin.key, vin.alt))
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
test('minor-getprop', async () => {
|
|
218
|
+
await runsetflags(minorSpec.getprop, { null: false }, (vin: any) =>
|
|
219
|
+
null == vin.alt ? getprop(vin.val, vin.key) : getprop(vin.val, vin.key, vin.alt))
|
|
220
|
+
})
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
test('minor-edge-getprop', async () => {
|
|
224
|
+
let strarr = ['a', 'b', 'c', 'd', 'e']
|
|
225
|
+
deepEqual(getprop(strarr, 2), 'c')
|
|
226
|
+
deepEqual(getprop(strarr, '2'), 'c')
|
|
227
|
+
|
|
228
|
+
let intarr = [2, 3, 5, 7, 11]
|
|
229
|
+
deepEqual(getprop(intarr, 2), 5)
|
|
230
|
+
deepEqual(getprop(intarr, '2'), 5)
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
test('minor-setprop', async () => {
|
|
235
|
+
await runset(minorSpec.setprop, (vin: any) =>
|
|
236
|
+
setprop(vin.parent, vin.key, vin.val))
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
test('minor-edge-setprop', async () => {
|
|
241
|
+
let strarr0 = ['a', 'b', 'c', 'd', 'e']
|
|
242
|
+
let strarr1 = ['a', 'b', 'c', 'd', 'e']
|
|
243
|
+
deepEqual(setprop(strarr0, 2, 'C'), ['a', 'b', 'C', 'd', 'e'])
|
|
244
|
+
deepEqual(setprop(strarr1, '2', 'CC'), ['a', 'b', 'CC', 'd', 'e'])
|
|
245
|
+
|
|
246
|
+
let intarr0 = [2, 3, 5, 7, 11]
|
|
247
|
+
let intarr1 = [2, 3, 5, 7, 11]
|
|
248
|
+
deepEqual(setprop(intarr0, 2, 55), [2, 3, 55, 7, 11])
|
|
249
|
+
deepEqual(setprop(intarr1, '2', 555), [2, 3, 555, 7, 11])
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
test('minor-delprop', async () => {
|
|
254
|
+
await runset(minorSpec.delprop, (vin: any) =>
|
|
255
|
+
delprop(vin.parent, vin.key))
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
test('minor-edge-delprop', async () => {
|
|
260
|
+
let strarr0 = ['a', 'b', 'c', 'd', 'e']
|
|
261
|
+
let strarr1 = ['a', 'b', 'c', 'd', 'e']
|
|
262
|
+
deepEqual(delprop(strarr0, 2), ['a', 'b', 'd', 'e'])
|
|
263
|
+
deepEqual(delprop(strarr1, '2'), ['a', 'b', 'd', 'e'])
|
|
264
|
+
|
|
265
|
+
let intarr0 = [2, 3, 5, 7, 11]
|
|
266
|
+
let intarr1 = [2, 3, 5, 7, 11]
|
|
267
|
+
deepEqual(delprop(intarr0, 2), [2, 3, 7, 11])
|
|
268
|
+
deepEqual(delprop(intarr1, '2'), [2, 3, 7, 11])
|
|
269
|
+
})
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
test('minor-haskey', async () => {
|
|
273
|
+
await runsetflags(minorSpec.haskey, { null: false }, (vin: any) =>
|
|
274
|
+
haskey(vin.src, vin.key))
|
|
275
|
+
})
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
test('minor-keysof', async () => {
|
|
279
|
+
await runset(minorSpec.keysof, keysof)
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
test('minor-joinurl', async () => {
|
|
284
|
+
await runsetflags(minorSpec.joinurl, { null: false }, joinurl)
|
|
285
|
+
})
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
test('minor-typify', async () => {
|
|
289
|
+
await runsetflags(minorSpec.typify, { null: false }, typify)
|
|
290
|
+
})
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
test('minor-size', async () => {
|
|
294
|
+
await runsetflags(minorSpec.size, { null: false }, size)
|
|
295
|
+
})
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
test('minor-slice', async () => {
|
|
299
|
+
await runsetflags(minorSpec.slice, { null: false },
|
|
300
|
+
(vin: any) => slice(vin.val, vin.start, vin.end))
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
test('minor-pad', async () => {
|
|
305
|
+
await runsetflags(minorSpec.pad, { null: false },
|
|
306
|
+
(vin: any) => pad(vin.val, vin.pad, vin.char))
|
|
307
|
+
})
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
// walk tests
|
|
312
|
+
// ==========
|
|
313
|
+
|
|
314
|
+
test('walk-log', async () => {
|
|
315
|
+
const test = clone(walkSpec.log)
|
|
316
|
+
|
|
317
|
+
const log: string[] = []
|
|
318
|
+
|
|
319
|
+
function walklog(key: any, val: any, parent: any, path: any) {
|
|
320
|
+
log.push('k=' + stringify(key) +
|
|
321
|
+
', v=' + stringify(val) +
|
|
322
|
+
', p=' + stringify(parent) +
|
|
323
|
+
', t=' + pathify(path))
|
|
324
|
+
return val
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
walk(test.in, walklog)
|
|
328
|
+
deepEqual(log, test.out)
|
|
329
|
+
})
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
test('walk-basic', async () => {
|
|
333
|
+
function walkpath(_key: any, val: any, _parent: any, path: any) {
|
|
334
|
+
return 'string' === typeof val ? val + '~' + path.join('.') : val
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
await runset(walkSpec.basic, (vin: any) => walk(vin, walkpath))
|
|
338
|
+
})
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
// merge tests
|
|
342
|
+
// ===========
|
|
343
|
+
|
|
344
|
+
test('merge-basic', async () => {
|
|
345
|
+
const test = clone(mergeSpec.basic)
|
|
346
|
+
deepEqual(merge(test.in), test.out)
|
|
347
|
+
})
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
test('merge-cases', async () => {
|
|
351
|
+
await runset(mergeSpec.cases, merge)
|
|
352
|
+
})
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
test('merge-array', async () => {
|
|
356
|
+
await runset(mergeSpec.array, merge)
|
|
357
|
+
})
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
test('merge-integrity', async () => {
|
|
361
|
+
await runset(mergeSpec.integrity, merge)
|
|
362
|
+
})
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
test('merge-special', async () => {
|
|
366
|
+
const f0 = () => null
|
|
367
|
+
deepEqual(merge([f0]), f0)
|
|
368
|
+
deepEqual(merge([null, f0]), f0)
|
|
369
|
+
deepEqual(merge([{ a: f0 }]), { a: f0 })
|
|
370
|
+
deepEqual(merge([[f0]]), [f0])
|
|
371
|
+
deepEqual(merge([{ a: { b: f0 } }]), { a: { b: f0 } })
|
|
372
|
+
|
|
373
|
+
// JavaScript only
|
|
374
|
+
deepEqual(merge([{ a: global.fetch }]), { a: global.fetch })
|
|
375
|
+
deepEqual(merge([[global.fetch]]), [global.fetch])
|
|
376
|
+
deepEqual(merge([{ a: { b: global.fetch } }]), { a: { b: global.fetch } })
|
|
377
|
+
})
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
// getpath tests
|
|
381
|
+
// =============
|
|
382
|
+
|
|
383
|
+
test('getpath-basic', async () => {
|
|
384
|
+
await runset(getpathSpec.basic, (vin: any) => getpath(vin.store, vin.path))
|
|
385
|
+
})
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
test('getpath-relative', async () => {
|
|
389
|
+
await runset(getpathSpec.relative, (vin: any) =>
|
|
390
|
+
getpath(vin.store, vin.path, { dparent: vin.dparent, dpath: vin.dpath?.split('.') }))
|
|
391
|
+
})
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
test('getpath-special', async () => {
|
|
395
|
+
await runset(getpathSpec.special, (vin: any) =>
|
|
396
|
+
getpath(vin.store, vin.path, vin.inj))
|
|
397
|
+
})
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
test('getpath-handler', async () => {
|
|
401
|
+
await runset(getpathSpec.handler, (vin: any) =>
|
|
402
|
+
getpath(
|
|
403
|
+
{
|
|
404
|
+
$TOP: vin.store,
|
|
405
|
+
$FOO: () => 'foo',
|
|
406
|
+
},
|
|
407
|
+
vin.path,
|
|
408
|
+
{
|
|
409
|
+
handler: (_inj: any, val: any, _cur: any, _ref: any) => {
|
|
410
|
+
return val()
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
))
|
|
414
|
+
})
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
// inject tests
|
|
418
|
+
// ============
|
|
419
|
+
|
|
420
|
+
test('inject-basic', async () => {
|
|
421
|
+
const test = clone(injectSpec.basic)
|
|
422
|
+
deepEqual(inject(test.in.val, test.in.store), test.out)
|
|
423
|
+
})
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
test('inject-string', async () => {
|
|
427
|
+
await runset(injectSpec.string, (vin: any) =>
|
|
428
|
+
inject(vin.val, vin.store, { modify: nullModifier }))
|
|
429
|
+
})
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
test('inject-deep', async () => {
|
|
433
|
+
await runset(injectSpec.deep, (vin: any) => inject(vin.val, vin.store))
|
|
434
|
+
})
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
// transform tests
|
|
438
|
+
// ===============
|
|
439
|
+
|
|
440
|
+
test('transform-basic', async () => {
|
|
441
|
+
const test = clone(transformSpec.basic)
|
|
442
|
+
deepEqual(transform(test.in.data, test.in.spec), test.out)
|
|
443
|
+
})
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
test('transform-paths', async () => {
|
|
447
|
+
await runset(transformSpec.paths, (vin: any) =>
|
|
448
|
+
transform(vin.data, vin.spec))
|
|
449
|
+
})
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
test('transform-cmds', async () => {
|
|
453
|
+
await runset(transformSpec.cmds, (vin: any) =>
|
|
454
|
+
transform(vin.data, vin.spec))
|
|
455
|
+
})
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
test('transform-each', async () => {
|
|
459
|
+
await runset(transformSpec.each, (vin: any) =>
|
|
460
|
+
transform(vin.data, vin.spec))
|
|
461
|
+
})
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
test('transform-pack', async () => {
|
|
465
|
+
await runset(transformSpec.pack, (vin: any) =>
|
|
466
|
+
transform(vin.data, vin.spec))
|
|
467
|
+
})
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
test('transform-ref', async () => {
|
|
471
|
+
await runset(transformSpec.ref, (vin: any) =>
|
|
472
|
+
transform(vin.data, vin.spec))
|
|
473
|
+
})
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
test('transform-modify', async () => {
|
|
477
|
+
await runset(transformSpec.modify, (vin: any) =>
|
|
478
|
+
transform(
|
|
479
|
+
vin.data,
|
|
480
|
+
vin.spec,
|
|
481
|
+
{
|
|
482
|
+
modify: (val: any, key: any, parent: any) => {
|
|
483
|
+
if (null != key && null != parent && 'string' === typeof val) {
|
|
484
|
+
val = parent[key] = '@' + val
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
))
|
|
489
|
+
})
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
test('transform-extra', async () => {
|
|
493
|
+
deepEqual(transform(
|
|
494
|
+
{ a: 1 },
|
|
495
|
+
{ x: '`a`', b: '`$COPY`', c: '`$UPPER`' },
|
|
496
|
+
{
|
|
497
|
+
extra: {
|
|
498
|
+
b: 2, $UPPER: (state: any) => {
|
|
499
|
+
const { path } = state
|
|
500
|
+
return ('' + getprop(path, path.length - 1)).toUpperCase()
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
), {
|
|
505
|
+
x: 1,
|
|
506
|
+
b: 2,
|
|
507
|
+
c: 'C'
|
|
508
|
+
})
|
|
509
|
+
})
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
test('transform-funcval', async () => {
|
|
513
|
+
// f0 should never be called (no $ prefix).
|
|
514
|
+
const f0 = () => 99
|
|
515
|
+
deepEqual(transform({}, { x: 1 }), { x: 1 })
|
|
516
|
+
deepEqual(transform({}, { x: f0 }), { x: f0 })
|
|
517
|
+
deepEqual(transform({ a: 1 }, { x: '`a`' }), { x: 1 })
|
|
518
|
+
deepEqual(transform({ f0 }, { x: '`f0`' }), { x: f0 })
|
|
519
|
+
})
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
// validate tests
|
|
523
|
+
// ===============
|
|
524
|
+
|
|
525
|
+
test('validate-basic', async () => {
|
|
526
|
+
await runset(validateSpec.basic, (vin: any) => validate(vin.data, vin.spec))
|
|
527
|
+
})
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
test('validate-child', async () => {
|
|
531
|
+
await runset(validateSpec.child, (vin: any) => validate(vin.data, vin.spec))
|
|
532
|
+
})
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
test('validate-one', async () => {
|
|
536
|
+
await runset(validateSpec.one, (vin: any) => validate(vin.data, vin.spec))
|
|
537
|
+
})
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
test('validate-exact', async () => {
|
|
541
|
+
await runset(validateSpec.exact, (vin: any) => validate(vin.data, vin.spec))
|
|
542
|
+
})
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
test('validate-invalid', async () => {
|
|
546
|
+
await runsetflags(validateSpec.invalid, { null: false },
|
|
547
|
+
(vin: any) => validate(vin.data, vin.spec))
|
|
548
|
+
})
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
test('validate-special', async () => {
|
|
552
|
+
await runset(validateSpec.special, (vin: any) => validate(vin.data, vin.spec, vin.inj))
|
|
553
|
+
})
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
test('validate-custom', async () => {
|
|
557
|
+
const errs: any[] = []
|
|
558
|
+
const extra = {
|
|
559
|
+
$INTEGER: (inj: any) => {
|
|
560
|
+
const { key } = inj
|
|
561
|
+
// let out = getprop(current, key)
|
|
562
|
+
let out = getprop(inj.dparent, key)
|
|
563
|
+
|
|
564
|
+
let t = typeof out
|
|
565
|
+
if ('number' !== t && !Number.isInteger(out)) {
|
|
566
|
+
inj.errs.push('Not an integer at ' + inj.path.slice(1).join('.') + ': ' + out)
|
|
567
|
+
return
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
return out
|
|
571
|
+
},
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
const shape = { a: '`$INTEGER`' }
|
|
575
|
+
|
|
576
|
+
let out = validate({ a: 1 }, shape, { extra, errs })
|
|
577
|
+
deepEqual(out, { a: 1 })
|
|
578
|
+
equal(errs.length, 0)
|
|
579
|
+
|
|
580
|
+
out = validate({ a: 'A' }, shape, { extra, errs })
|
|
581
|
+
deepEqual(out, { a: 'A' })
|
|
582
|
+
deepEqual(errs, ['Not an integer at a: A'])
|
|
583
|
+
})
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
// select tests
|
|
587
|
+
// ============
|
|
588
|
+
|
|
589
|
+
test('select-basic', async () => {
|
|
590
|
+
await runset(selectSpec.basic, (vin: any) => select(vin.obj, vin.query))
|
|
591
|
+
})
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
test('select-operators', async () => {
|
|
595
|
+
await runset(selectSpec.operators, (vin: any) => select(vin.obj, vin.query))
|
|
596
|
+
})
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
test('select-edge', async () => {
|
|
600
|
+
await runset(selectSpec.edge, (vin: any) => select(vin.obj, vin.query))
|
|
601
|
+
})
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
// JSON Builder
|
|
605
|
+
// ============
|
|
606
|
+
|
|
607
|
+
test('json-builder', async () => {
|
|
608
|
+
equal(jsonify(jo(
|
|
609
|
+
'a', 1
|
|
610
|
+
)), `{
|
|
611
|
+
"a": 1
|
|
612
|
+
}`)
|
|
613
|
+
|
|
614
|
+
equal(jsonify(ja(
|
|
615
|
+
'b', 2
|
|
616
|
+
)), `[
|
|
617
|
+
"b",
|
|
618
|
+
2
|
|
619
|
+
]`)
|
|
620
|
+
|
|
621
|
+
equal(jsonify(jo(
|
|
622
|
+
'c', 'C',
|
|
623
|
+
'd', jo('x', true),
|
|
624
|
+
'e', ja(null, false)
|
|
625
|
+
)), `{
|
|
626
|
+
"c": "C",
|
|
627
|
+
"d": {
|
|
628
|
+
"x": true
|
|
629
|
+
},
|
|
630
|
+
"e": [
|
|
631
|
+
null,
|
|
632
|
+
false
|
|
633
|
+
]
|
|
634
|
+
}`)
|
|
635
|
+
|
|
636
|
+
equal(jsonify(ja(
|
|
637
|
+
3.3, jo(
|
|
638
|
+
'f', true,
|
|
639
|
+
'g', false,
|
|
640
|
+
'h', null,
|
|
641
|
+
'i', ja('y', 0),
|
|
642
|
+
'j', jo('z', -1),
|
|
643
|
+
'k')
|
|
644
|
+
)), `[
|
|
645
|
+
3.3,
|
|
646
|
+
{
|
|
647
|
+
"f": true,
|
|
648
|
+
"g": false,
|
|
649
|
+
"h": null,
|
|
650
|
+
"i": [
|
|
651
|
+
"y",
|
|
652
|
+
0
|
|
653
|
+
],
|
|
654
|
+
"j": {
|
|
655
|
+
"z": -1
|
|
656
|
+
},
|
|
657
|
+
"k": null
|
|
658
|
+
}
|
|
659
|
+
]`)
|
|
660
|
+
|
|
661
|
+
equal(jsonify(jo(
|
|
662
|
+
true, 1,
|
|
663
|
+
false, 2,
|
|
664
|
+
null, 3,
|
|
665
|
+
['a'], 4,
|
|
666
|
+
{ 'b': 0 }, 5
|
|
667
|
+
)), `{
|
|
668
|
+
"true": 1,
|
|
669
|
+
"false": 2,
|
|
670
|
+
"null": 3,
|
|
671
|
+
"[a]": 4,
|
|
672
|
+
"{b:0}": 5
|
|
673
|
+
}`)
|
|
674
|
+
|
|
675
|
+
})
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
})
|