@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.
Files changed (119) hide show
  1. package/bin/voxgig-sdkgen +12 -4
  2. package/dist/action/action.d.ts +4 -0
  3. package/dist/action/action.js +35 -0
  4. package/dist/action/action.js.map +1 -0
  5. package/dist/action/feature.d.ts +4 -2
  6. package/dist/action/feature.js +57 -38
  7. package/dist/action/feature.js.map +1 -1
  8. package/dist/action/target.d.ts +4 -2
  9. package/dist/action/target.js +136 -45
  10. package/dist/action/target.js.map +1 -1
  11. package/dist/cmp/Entity.js +5 -0
  12. package/dist/cmp/Entity.js.map +1 -1
  13. package/dist/cmp/Feature.js +5 -0
  14. package/dist/cmp/Feature.js.map +1 -1
  15. package/dist/cmp/Main.js +4 -1
  16. package/dist/cmp/Main.js.map +1 -1
  17. package/dist/cmp/Top.d.ts +2 -0
  18. package/dist/cmp/Top.js +23 -0
  19. package/dist/cmp/Top.js.map +1 -0
  20. package/dist/sdkgen.d.ts +10 -3
  21. package/dist/sdkgen.js +53 -8
  22. package/dist/sdkgen.js.map +1 -1
  23. package/dist/tsconfig.tsbuildinfo +1 -1
  24. package/dist/types.d.ts +16 -0
  25. package/dist/types.js +3 -0
  26. package/dist/types.js.map +1 -0
  27. package/dist/utility.d.ts +3 -3
  28. package/dist/utility.js +7 -8
  29. package/dist/utility.js.map +1 -1
  30. package/package.json +6 -10
  31. package/project/.sdk/model/feature/README.md +2 -0
  32. package/project/.sdk/model/feature/log.jsonic +7 -4
  33. package/project/.sdk/model/feature/test.jsonic +26 -0
  34. package/project/.sdk/model/target/ts.jsonic +1 -0
  35. package/project/.sdk/src/cmp/ts/Config_ts.ts +7 -2
  36. package/project/.sdk/src/cmp/ts/EntityOperation_ts.ts +67 -0
  37. package/project/.sdk/src/cmp/ts/EntityTest_ts.ts +180 -0
  38. package/project/.sdk/src/cmp/ts/Entity_ts.ts +41 -66
  39. package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +22 -0
  40. package/project/.sdk/src/cmp/ts/Main_ts.ts +52 -53
  41. package/project/.sdk/src/cmp/ts/Package_ts.ts +12 -7
  42. package/project/.sdk/src/cmp/ts/ReadmeInstall_ts.ts +19 -0
  43. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +24 -0
  44. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +13 -0
  45. package/project/.sdk/src/cmp/ts/TestMain_ts.ts +19 -0
  46. package/project/.sdk/src/cmp/ts/Test_ts.ts +20 -0
  47. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +8 -1
  48. package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.ts +164 -0
  49. package/project/.sdk/src/cmp/ts/fragment/Entity.test.fragment.ts +37 -0
  50. package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.ts +91 -0
  51. package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.ts +92 -0
  52. package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.ts +96 -0
  53. package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.ts +96 -0
  54. package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.ts +95 -0
  55. package/project/.sdk/src/cmp/ts/fragment/Main.fragment.ts +107 -0
  56. package/project/.sdk/src/cmp/ts/utility_ts.ts +10 -0
  57. package/project/.sdk/tm/ts/src/feature/base/BaseFeature.ts +43 -0
  58. package/project/.sdk/tm/ts/src/feature/log/LogFeature.ts +109 -0
  59. package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +159 -0
  60. package/project/.sdk/tm/ts/src/tsconfig.json +1 -1
  61. package/project/.sdk/tm/ts/src/types.ts +114 -0
  62. package/project/.sdk/tm/ts/src/utility/AddfeatureUtility.ts +47 -0
  63. package/project/.sdk/tm/ts/src/utility/AuthUtility.ts +42 -0
  64. package/project/.sdk/tm/ts/src/utility/BodyUtility.ts +29 -0
  65. package/project/.sdk/tm/ts/src/utility/CleanUtility.ts +50 -0
  66. package/project/.sdk/tm/ts/src/utility/ContextUtility.ts +67 -0
  67. package/project/.sdk/tm/ts/src/utility/DoneUtility.ts +28 -0
  68. package/project/.sdk/tm/ts/src/utility/ErrorUtility.ts +59 -0
  69. package/project/.sdk/tm/ts/src/utility/FeaturehookUtility.ts +26 -0
  70. package/project/.sdk/tm/ts/src/utility/FetcherUtility.ts +17 -0
  71. package/project/.sdk/tm/ts/src/utility/FindparamUtility.ts +54 -0
  72. package/project/.sdk/tm/ts/src/utility/FullurlUtility.ts +46 -0
  73. package/project/.sdk/tm/ts/src/utility/HeadersUtility.ts +24 -0
  74. package/project/.sdk/tm/ts/src/utility/InitfeatureUtility.ts +13 -0
  75. package/project/.sdk/tm/ts/src/utility/JoinurlUtility.ts +15 -0
  76. package/project/.sdk/tm/ts/src/utility/MethodUtility.ts +25 -0
  77. package/project/.sdk/tm/ts/src/utility/OperatorUtility.ts +90 -0
  78. package/project/.sdk/tm/ts/src/utility/OptionsUtility.ts +72 -0
  79. package/project/.sdk/tm/ts/src/utility/ParamsUtility.ts +37 -0
  80. package/project/.sdk/tm/ts/src/utility/QueryUtility.ts +27 -0
  81. package/project/.sdk/tm/ts/src/utility/ReqformUtility.ts +33 -0
  82. package/project/.sdk/tm/ts/src/utility/RequestUtility.ts +66 -0
  83. package/project/.sdk/tm/ts/src/utility/ResbasicUtility.ts +34 -0
  84. package/project/.sdk/tm/ts/src/utility/ResbodyUtility.ts +19 -0
  85. package/project/.sdk/tm/ts/src/utility/ResformUtility.ts +36 -0
  86. package/project/.sdk/tm/ts/src/utility/ResheadersUtility.ts +23 -0
  87. package/project/.sdk/tm/ts/src/utility/ResponseUtility.ts +30 -0
  88. package/project/.sdk/tm/ts/src/utility/ResultUtility.ts +36 -0
  89. package/project/.sdk/tm/ts/src/utility/SpecUtility.ts +61 -0
  90. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2499 -0
  91. package/project/.sdk/tm/ts/src/utility/Utility.ts +88 -0
  92. package/project/.sdk/tm/ts/test/exists.test.ts +17 -0
  93. package/project/.sdk/tm/ts/test/runner.ts +402 -0
  94. package/project/.sdk/tm/ts/test/tsconfig.json +1 -1
  95. package/project/.sdk/tm/ts/test/utility/Custom.test.ts +62 -0
  96. package/project/.sdk/tm/ts/test/utility/PrimaryUtility.test.ts +244 -0
  97. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +678 -0
  98. package/project/.sdk/tm/ts/test/utility/index.ts +9 -0
  99. package/project/.sdk/tm/ts/test/utility.ts +86 -0
  100. package/src/action/action.ts +54 -0
  101. package/src/action/feature.ts +83 -47
  102. package/src/action/target.ts +173 -53
  103. package/src/cmp/Entity.ts +6 -0
  104. package/src/cmp/Feature.ts +6 -3
  105. package/src/cmp/Main.ts +4 -1
  106. package/src/sdkgen.ts +86 -11
  107. package/src/types.ts +33 -0
  108. package/src/utility.ts +5 -3
  109. package/project/.sdk/model/feature/limit.jsonic +0 -12
  110. package/project/.sdk/model/feature/page.jsonic +0 -9
  111. package/project/.sdk/model/feature/telemetry.jsonic +0 -10
  112. package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.js +0 -79
  113. package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.js +0 -61
  114. package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.js +0 -57
  115. package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.js +0 -61
  116. package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.js +0 -61
  117. package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.js +0 -61
  118. package/project/.sdk/src/cmp/ts/fragment/Main.fragment.js +0 -67
  119. 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
+ })
@@ -0,0 +1,9 @@
1
+
2
+ import { SDK } from '../..'
3
+
4
+ const TEST_JSON_FILE = '../../.sdk/test/test.json'
5
+
6
+ export {
7
+ SDK,
8
+ TEST_JSON_FILE,
9
+ }