@voxgig/create-sdkgen 0.1.0 → 0.1.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 (63) hide show
  1. package/package.json +3 -3
  2. package/project/standard/.env.local +1 -0
  3. package/project/standard/.sdk/build/apidef.js +8 -0
  4. package/project/standard/.sdk/build/docgen.js +15 -0
  5. package/project/standard/.sdk/build/sdkgen.js +16 -0
  6. package/project/standard/.sdk/def/README.md +4 -0
  7. package/project/standard/.sdk/model/.model-config/model-config.jsonic +17 -0
  8. package/project/standard/.sdk/model/.model-config/model-config.jsonic~ +16 -0
  9. package/project/standard/.sdk/model/README.md +2 -0
  10. package/project/standard/.sdk/model/api/api-def.jsonic +5 -0
  11. package/project/standard/.sdk/model/api/api-entity-index.jsonic +2 -0
  12. package/project/standard/.sdk/model/config.jsonic +13 -0
  13. package/project/standard/.sdk/model/feature/README.md +2 -0
  14. package/project/standard/.sdk/model/feature/feature-index.jsonic +3 -0
  15. package/project/standard/.sdk/model/flow/flow-index.jsonic +2 -0
  16. package/project/standard/.sdk/model/guide.jsonic +5 -0
  17. package/project/standard/.sdk/model/sdk.fragment.jsonic +38 -0
  18. package/project/standard/.sdk/model/target/README.md +2 -0
  19. package/project/standard/.sdk/model/target/target-index.jsonic +2 -0
  20. package/project/standard/.sdk/model/target/target-index.jsonic~ +4 -0
  21. package/project/standard/.sdk/package.json +34 -0
  22. package/project/standard/.sdk/src/DocStaticRoot.ts +45 -0
  23. package/project/standard/.sdk/src/Root.ts +228 -0
  24. package/project/standard/.sdk/src/cmp/README.md +2 -0
  25. package/project/standard/.sdk/src/tsconfig.json +16 -0
  26. package/project/standard/.sdk/test/.model-config/model-config.json +7 -0
  27. package/project/standard/.sdk/test/.model-config/model-config.jsonic +4 -0
  28. package/project/standard/.sdk/test/primary/auth.jsonic +20 -0
  29. package/project/standard/.sdk/test/primary/body.jsonic +27 -0
  30. package/project/standard/.sdk/test/primary/contextify.jsonic +5 -0
  31. package/project/standard/.sdk/test/primary/done.jsonic +7 -0
  32. package/project/standard/.sdk/test/primary/error.jsonic +19 -0
  33. package/project/standard/.sdk/test/primary/findparam.jsonic +22 -0
  34. package/project/standard/.sdk/test/primary/fullurl.jsonic +50 -0
  35. package/project/standard/.sdk/test/primary/headers.jsonic +12 -0
  36. package/project/standard/.sdk/test/primary/inward.jsonic +3 -0
  37. package/project/standard/.sdk/test/primary/method.jsonic +11 -0
  38. package/project/standard/.sdk/test/primary/operator.jsonic +60 -0
  39. package/project/standard/.sdk/test/primary/options.jsonic +60 -0
  40. package/project/standard/.sdk/test/primary/outward.jsonic +3 -0
  41. package/project/standard/.sdk/test/primary/params.jsonic +10 -0
  42. package/project/standard/.sdk/test/primary/query.jsonic +9 -0
  43. package/project/standard/.sdk/test/primary/reqform.jsonic +9 -0
  44. package/project/standard/.sdk/test/primary/request.jsonic +31 -0
  45. package/project/standard/.sdk/test/primary/resbasic.jsonic +15 -0
  46. package/project/standard/.sdk/test/primary/resbody.jsonic +5 -0
  47. package/project/standard/.sdk/test/primary/resform.jsonic +11 -0
  48. package/project/standard/.sdk/test/primary/resheaders.jsonic +9 -0
  49. package/project/standard/.sdk/test/primary/response.jsonic +20 -0
  50. package/project/standard/.sdk/test/primary/spec.jsonic +32 -0
  51. package/project/standard/.sdk/test/struct/getpath.jsonic +143 -0
  52. package/project/standard/.sdk/test/struct/inject.jsonic +76 -0
  53. package/project/standard/.sdk/test/struct/merge.jsonic +161 -0
  54. package/project/standard/.sdk/test/struct/minor.jsonic +693 -0
  55. package/project/standard/.sdk/test/struct/select.jsonic +166 -0
  56. package/project/standard/.sdk/test/struct/transform.jsonic +453 -0
  57. package/project/standard/.sdk/test/struct/validate.jsonic +287 -0
  58. package/project/standard/.sdk/test/struct/walk.jsonic +57 -0
  59. package/project/standard/.sdk/test/test.json +15080 -0
  60. package/project/standard/.sdk/test/test.jsonic +44 -0
  61. package/project/standard/.sdk/tm/LICENSE +22 -0
  62. package/project/standard/.sdk/tm/README.md +2 -0
  63. /package/bin/{voxgig-create-sdkgen → create-sdkgen} +0 -0
@@ -0,0 +1,166 @@
1
+
2
+ basic: {
3
+ set: [
4
+ # Basic equality matching
5
+ { in: { query: {age:30}, obj: {a:{name:'Alice',age:30}, b:{name:'Bob',age:25}} },
6
+ out: [{name:'Alice',age:30,'$KEY':'a'}] }
7
+
8
+ { in: { query: {name:'Bob'}, obj: {a:{name:'Alice',age:30}, b:{name:'Bob',age:25}} },
9
+ out: [{name:'Bob',age:25,'$KEY':'b'}] }
10
+
11
+ # Multiple field equality
12
+ { in: { query: {age:30,city:'NYC'}, obj: {a:{age:30,city:'NYC'}, b:{age:30,city:'LA'}} },
13
+ out: [{age:30,city:'NYC','$KEY':'a'}] }
14
+
15
+ # Array children
16
+ { in: { query: {type:'user'}, obj: [{id:1,type:'user'}, {id:2,type:'admin'}, {id:3,type:'user'}] },
17
+ out: [{id:1,type:'user','$KEY':0}, {id:3,type:'user','$KEY':2}] }
18
+
19
+ # No matches
20
+ { in: { query: {age:40}, obj: {a:{age:30}, b:{age:25}} },
21
+ out: [] }
22
+
23
+ # Empty query matches all
24
+ { in: { query: {}, obj: {a:{x:1}, b:{x:2}} },
25
+ out: [{x:1,'$KEY':'a'}, {x:2,'$KEY':'b'}] }
26
+
27
+ # Non-object input
28
+ { in: { query: {x:1}, obj: 'hello' }, out: [] }
29
+ { in: { query: {x:1}, obj: 42 }, out: [] }
30
+ { in: { query: {x:1}, obj: null }, out: [] }
31
+ { in: { query: {x:1}, obj: undefined }, out: [] }
32
+
33
+ # Deep equality for objects
34
+ { in: { query: {data:{x:1,y:2}}, obj: {a:{data:{x:1,y:2}}, b:{data:{x:1,y:3}}} },
35
+ out: [{data:{x:1,y:2},'$KEY':'a'}] }
36
+
37
+ # Deep equality for arrays
38
+ { in: { query: {tags:['a','b']}, obj: {a:{tags:['a','b']}, b:{tags:['a','c']}} },
39
+ out: [{tags:['a','b'],'$KEY':'a'}] }
40
+ ]
41
+ }
42
+
43
+ operators: {
44
+ set: [
45
+ # `$AND` operator
46
+ { in: { query: {'`$AND`':[{age:30}, {city:'NYC'}]},
47
+ obj: {a:{age:30,city:'NYC'}, b:{age:30,city:'LA'}, c:{age:25,city:'NYC'}} },
48
+ out: [{age:30,city:'NYC','$KEY':'a'}] }
49
+
50
+ # `$AND` with no matches
51
+ { in: { query: {'`$AND`':[{age:30}, {city:'Boston'}]},
52
+ obj: {a:{age:30,city:'NYC'}, b:{age:30,city:'LA'}} },
53
+ out: [] }
54
+
55
+ # `$OR` operator
56
+ { in: { query: {'`$OR`':[{age:25}, {age:35}]},
57
+ obj: {a:{age:30}, b:{age:25}, c:{age:35}} },
58
+ out: [{age:25,'$KEY':'b'}, {age:35,'$KEY':'c'}] }
59
+
60
+ # `$OR` with all matches
61
+ { in: { query: {'`$OR`':[{type:'user'}, {type:'admin'}]},
62
+ obj: [{type:'user'}, {type:'admin'}, {type:'guest'}] },
63
+ out: [{type:'user','$KEY':0}, {type:'admin','$KEY':1}] }
64
+
65
+ # Nested `$AND` within `$OR`
66
+ { in: { query: {'`$OR`':[{'`$AND`':[{role:'user'}, {active:true}]}, {'`$AND`':[{role:'admin'}, {age:30}]}]},
67
+ obj: {a:{role:'admin',age:30,active:true}, b:{role:'user',age:25,active:true},
68
+ c:{role:'user',age:30,active:false}, d:{role:'admin',age:30,active:false}} },
69
+ out: [{role:'admin',age:30,active:true,'$KEY':'a'}, {role:'user',age:25,active:true,'$KEY':'b'},
70
+ {role:'admin',age:30,active:false,'$KEY':'d'}] }
71
+
72
+ # Complex nested operators
73
+ { in: { query: {'`$AND`':[{'`$OR`':[{status:'active'}, {status:'pending'}]}, {priority:'high'}]},
74
+ obj: {a:{status:'active',priority:'high'}, b:{status:'active',priority:'low'},
75
+ c:{status:'pending',priority:'high'}, d:{status:'done',priority:'high'}} },
76
+ out: [{status:'active',priority:'high','$KEY':'a'}, {status:'pending',priority:'high','$KEY':'c'}] }
77
+
78
+ # Empty `$AND` array (should match all)
79
+ { in: { query: {'`$AND`':[]}, obj: {a:{x:1}, b:{x:2}} },
80
+ out: [{x:1,'$KEY':'a'}, {x:2,'$KEY':'b'}] }
81
+
82
+ # Empty `$OR` array (should match none)
83
+ { in: { query: {'`$OR`':[]}, obj: {a:{x:1}, b:{x:2}} },
84
+ out: [] }
85
+
86
+
87
+ { in: { query: {a:{'`$GT`':10}}, obj: [{a:9},{a:10},{a:11},{a:12}] },
88
+ out: [{a:11,'$KEY':2},{a:12,'$KEY':3}] }
89
+
90
+ { in: { query: {b:{'`$LT`':10}}, obj: [{b:9},{b:10},{b:11},{b:12}] },
91
+ out: [{b:9,'$KEY':0}] }
92
+
93
+ { in: { query: {a:b:'`$LT`':10}, obj: [{a:b:9},{a:b:10},{a:b:11},{a:b:12}] },
94
+ out: [{a:b:9,'$KEY':0}] }
95
+
96
+
97
+ { in: { query: {x:{y:20}}, obj: [{x:{y:20,z:220}},{x:{y:21,z:221}}] },
98
+ out: [{x:{y:20,z:220},'$KEY':0}] }
99
+
100
+ { in: { query: {s0:'`$LIKE`':'[aA][bB][cC]'}, obj: [{s0:'DEf'},{s0:'ABc'}] },
101
+ out: [{s0:'ABc','$KEY':1}] }
102
+
103
+
104
+ { in: { query: {'`$NOT`':10}, obj: [9,10,11] },
105
+ out: [9,11] }
106
+
107
+ { in: { query: {'`$NOT`':{n0:'x'}}, obj: [{n0:x},{n0:y},{n0:z}] },
108
+ out: [{n0:y,'$KEY':1},{n0:z,'$KEY':2}] }
109
+
110
+ { in: { query: {'`$NOT`':{'`$OR`':[{x:1},{y:2}]}},
111
+ obj: [{x:1,y:3},{x:2,y:2},{x:3,y:1}] },
112
+ out: [{x:3,y:1,'$KEY':2}] }
113
+
114
+ ]
115
+ }
116
+
117
+ edge: {
118
+ set: [
119
+ # Mixed equality and operators
120
+ { in: { query: {type:'user', '`$OR`':[{status:'active'}, {admin:true}]},
121
+ obj: [{type:'user',status:'active'}, {type:'user',status:'inactive',admin:true},
122
+ {type:'guest',status:'active'}] },
123
+ out: [{type:'user',status:'active','$KEY':0}, {type:'user',status:'inactive',admin:true,'$KEY':1}] }
124
+
125
+
126
+ { in: { query: {value:q}, obj: {a:{value:q}, b:{value:p},c:{}} },
127
+ out: [{value:q,'$KEY':'a'}] }
128
+
129
+ { in: { query: {value:null}, obj: {a:{value:null}, b:{value:0}, c:{}} },
130
+ out: [{value:null,'$KEY':'a'}] }
131
+
132
+ { in: { query: {active:true}, obj: {a:{active:true}, b:{active:false}, c:{active:1}} },
133
+ out: [{active:true,'$KEY':'a'}] }
134
+
135
+ # Number comparison (exact match)
136
+ { in: { query: {count:0}, obj: {a:{count:0}, b:{count:false}, c:{count:'0'}} },
137
+ out: [{count:0,'$KEY':'a'}] }
138
+
139
+
140
+ { in: { query: {'`$OR`':[{a:1},{a:2}]}, obj: [{a:0}, {a:1}, {a:2}, {a:3}] },
141
+ out: [{a:1,'$KEY':1}, {a:2,'$KEY':2}] }
142
+
143
+ { in: { query: {a:{'`$OR`':[10,20]}}, obj: [{a:0}, {a:10}, {a:20}, {a:30}] },
144
+ out: [{a:10,'$KEY':1}, {a:20,'$KEY':2}] }
145
+
146
+ { in: { query: {a2:{'`$OR`':[{b2:1},{b2:2}]}},
147
+ obj: [{a2:{b2:0}}, {a2:{b2:1}}, {a2:{b2:2}}, {a2:{b2:3}}] },
148
+ out: [{a2:{b2:1},'$KEY':1}, {a2:{b2:2},'$KEY':2}] }
149
+
150
+ { in: { query: {'`$OR`':[{a3:{'`$OR`':[1]}}]}, obj: [{a3:0}, {a3:1}, {a3:2}] },
151
+ out: [{a3:1,'$KEY':1}] }
152
+
153
+
154
+ { in: { query: {c0:{'`$AND`':[{x:1},{y:2}]}},
155
+ obj: [{c0:{x:1,y:3,z:0}}, {c0:{x:1,y:2,z:1}}] },
156
+ out: [{c0:{x:1,y:2,z:1},'$KEY':1}] }
157
+
158
+ { in: { query: {c0:{'`$AND`':[{x:1},{y:{'`$OR`':[2,3]}}]}},
159
+ obj: [{c0:{x:1,y:3,z:0}}, {c0:{x:1,y:2,z:1}}, {c0:{x:1,y:1,z:2}}] },
160
+ out: [{c0:{x:1,y:3,z:0},'$KEY':0}, {c0:{x:1,y:2,z:1},'$KEY':1}] }
161
+
162
+
163
+
164
+
165
+ ]
166
+ }
@@ -0,0 +1,453 @@
1
+
2
+
3
+ basic: {
4
+ in: { data: {a:1}, spec: {a:'`a`',b:2} }
5
+ out: {a:1,b:2}
6
+ }
7
+
8
+
9
+ paths: {
10
+ set: [
11
+ { in: { } }
12
+ { in: { data: {} } }
13
+ { in: { data: {}, spec: {} }, out: {} }
14
+ { in: { spec: {} }, out: {} }
15
+ { in: { spec: 'A' }, out: 'A' }
16
+ { in: { spec: '`a`' } }
17
+ { in: { data: {}, spec: '`a`' } }
18
+ { in: { data: { x: 1 }, spec: '`a`' } }
19
+ { in: { data: { y: 2 }, spec: { y: '`a`' } }, out: {} }
20
+ { in: { data: { z: 1 }, spec: '``' }, out: {z:1} }
21
+
22
+ { in: { data: {a:1,b:2}, spec: '`a`' }, out: 1 }
23
+ { in: { data: {a:1,b:2}, spec: '`b`' }, out: 2 }
24
+ { in: { data: {a:1,b:2}, spec: '`a``b`' }, out: '12' }
25
+ { in: { data: {a:3,b:4}, spec: 'X`a`Y`b`Z' }, out: 'X3Y4Z' }
26
+
27
+ { in: { data: {a:{b:5}}, spec: '`a.b`' }, out: 5 }
28
+ { in: { data: {a:{b:6}}, spec: 'X`a.b`Y' }, out: 'X6Y' }
29
+ { in: { data: {a:{b:'B'}}, spec: '`a.b`' }, out: 'B' }
30
+ { in: { data: {a:{b:'C'}}, spec: '`a.b``c`' }, out: 'C' }
31
+ { in: { data: {a:{b:'D'}}, spec: '`a.b``a.b`' }, out: 'DD' }
32
+ { in: { data: {a:{b:'E',c:'F'}}, spec: '`a.b``a.c`' }, out: 'EF' }
33
+
34
+ { in: { data: {a:{b:5}}, spec: {q:'`a.b`'} }, out: {q:5} }
35
+ { in: { data: {a:{b:6}}, spec: {q:'X`a.b`Y'} }, out: {q:'X6Y'} }
36
+ { in: { data: {a:{b:'B'}}, spec: {q:'`a.b`'} }, out: {q:'B'} }
37
+ { in: { data: {a:{b:'C'}}, spec: {q:'`a.b``c`'} }, out: {q:'C'} }
38
+ { in: { data: {a:{b:'D'}}, spec: {q:'`a.b``a.b`'} }, out: {q:'DD'} }
39
+ { in: { data: {a:{b:'E',c:'F'}}, spec: {q:'`a.b``a.c`'} }, out: {q:'EF'} }
40
+
41
+ { in: { data: {a:{b:1}}, spec:{} }, out: {} }
42
+ { in: { data: {a:{b:2}}, spec:{x:2} }, out: {x:2} }
43
+ { in: { data: {a:{b:3}}, spec: {x:'`a`'} }, out: {x:{b:3}} }
44
+ { in: { data: {a:{b:4}}, spec: {x:'`a.b`'} }, out: {x:4} }
45
+ { in: { data: {a:{b:5}}, spec: {x:'`b`'} }, out: {} }
46
+ { in: { data: {a:{b:6}}, spec: {x:'`a.c`'} }, out: {} }
47
+
48
+ { in: { data: {a:{b:7,c:'C'}}, spec: {x:'`a.b``a.c`'} }, out: {x:'7C'} }
49
+ { in: { data: {a:{b:8},c:9}, spec: {x:'`a.b`'} }, out: {x:8} }
50
+ { in: { data: {d:10,a:{b:11},c:12}, spec: {x:'`a.b`'} }, out: {x:11} }
51
+ { in: { data: {d:13,a:{b:14}}, spec: {x:'`a.b`'} }, out: {x:14} }
52
+
53
+ { in: { data: {a:{b:'B',c:'C'}}, spec: {a:{d:'`.b`'}} }, out: {a:{d:'B'}} }
54
+ { in: { data: {a:{b:{c:'C'}}}, spec: {a:{d:'`.b.c`'}} }, out: {a:{d:'C'}} }
55
+
56
+ { in: { data: {hold:{'`$COPY`':111, '$TOP':222}},
57
+ spec: {a:'`hold.$BT$COPY$BT`', b:'`hold.$TOP`'} }, out: {a:111,b:222} }
58
+ ]
59
+ }
60
+
61
+
62
+ cmds: {
63
+ set: [
64
+ { in: { data: {}, spec: '`$BT``$DS`ESCAPED`$BT`' }, out: '`$ESCAPED`' }
65
+
66
+ { in: { data: 1, spec: '`$COPY`' }, out: 1 }
67
+ { in: { data: {a:1}, spec: {a:'`$COPY`'} }, out: {a:1} }
68
+ { in: { data: {a:{b:1}}, spec: {a:'`$COPY`'} }, out: {a:{b:1}} }
69
+ { in: { data: {a:{b:{c:11}}}, spec: {a:'`$COPY`'} }, out: {a:{b:{c:11}}} }
70
+ { in: { data: {a:{b:{c:12}}}, spec: {a:{b:'`$COPY`'}} }, out: {a:{b:{c:12}}} }
71
+ { in: { data: {a:{b:{c:13}}}, spec: {a:{b:{c:'`$COPY`'}}} }, out: {a:{b:{c:13}}} }
72
+
73
+ { in: { data: {a:{b:2}}, spec: {a:{b:'`$COPY`'}} }, out: {a:{b:2}} }
74
+ { in: { data: {a:[21,22]}, spec: {a:'`$COPY`'} }, out: {a:[21,22]} }
75
+ { in: { data: {a23:true}, spec: {a23:'`$COPY`', a24:'`$COPY`'} },
76
+ out: {a23:true} }
77
+
78
+ { in: { data: {a:{b:3}}, spec: {a:{'`$MERGE`':'`a`',c:3}} }, out: {a:{b:3,c:3}} }
79
+ { in: { data: {a:{b:4}}, spec: {'`$MERGE`':'``'} }, out: {a:{b:4}} }
80
+ { in: { data: {a:{b:5}}, spec: {a:{'`$MERGE`':'`a`',b:51}} }, out: {a:{b:51}} }
81
+ { in: { data: {a:{b:6}}, spec: {a:{b:61,'`$MERGE`':'`a`'}} }, out: {a:{b:61}} }
82
+
83
+ { in: { data: {a:{b:71},c:{b:81}}, spec: {x:{'`$MERGE`':['`a`']}} }, out: {x:{b:71}} }
84
+ { in: { data: {a:{b:72},c:{b:82}}, spec: {x:{'`$MERGE`':['`a`','`c`']}} }, out: {x:{b:82}} }
85
+ { in: { data: {a:{b:73},c:{b:83}}, spec: {x:{'`$MERGE`':['`c`','`a`']}} }, out: {x:{b:73}} }
86
+
87
+ { in: { data: {a:{b:74},c:{b:84}}, spec: {x:{'`$MERGE`':'`a`'}} }, out: {x:{b:74}} }
88
+
89
+ { in: { data: {a:{b:75},c:{b:85}}, spec: {x:{'`$MERGE1`':'`a`','`$MERGE0`':'`c`'}} },
90
+ out: {x:{b:85}} }
91
+ { in: { data: {a:{b:76},c:{b:86}}, spec: {x:{'`$MERGE0`':'`a`','`$MERGE1`':'`c`'}} },
92
+ out: {x:{b:76}} }
93
+
94
+ { in: { data: {a:{b:8}}, spec: {a:{'`$MERGE`':['`a`',{b:81}]}} }, out: {a:{b:81}} }
95
+
96
+ { in: { data: {a:{b:81}}, spec: {a:['`$MERGE`']}}, out: {a:[]} }
97
+
98
+ { in: { data: {a:{b:72}}, spec: {a:['`$MERGE`',77]}}, out: {a:[77]} }
99
+
100
+ { in: { data: {a:{b:73}}, spec: {x:{'`$MERGE`':'`a`',b:74,c:75}} },
101
+ out: {x:{b:74,c:75}} }
102
+
103
+ { in: { data: {a:{b:76},d:77}, spec: {x:{'`$MERGE`':'`a`',b:'`d`',c:78}} },
104
+ out: {x:{b:77,c:78}} }
105
+
106
+ { in: { data: {a:{b:8}}, spec: {a:{b:'`$DELETE`'}} }, out: {a:{}} }
107
+ { in: { data: {a:{b:8}}, spec: {a:'`$DELETE`'} }, out: {} }
108
+
109
+ { in: { data: {}, spec: {a:'`$BT`$COPY`$BT`'} }, out: {a:'`$COPY`'} }
110
+
111
+
112
+ { in: { spec: {q:1} }, out: {q:1} }
113
+ { in: { spec: {q:'`$COPY`'} }, out: {} }
114
+
115
+ { in: { data: null, spec: {q:1} }, out: {q:1} }
116
+ { in: { data: null, spec: {q:'`$COPY`'} }, out: {} }
117
+
118
+ { in: { data: {q:2}, spec: null }, out: null }
119
+ { in: { data: {q:2} } }
120
+ { in: { } }
121
+ ]
122
+ }
123
+
124
+
125
+ each: {
126
+ set: [
127
+ { in: { data: {x:y:[{q:11},{q:22}]},
128
+ spec: {x:y:[{q:'`$COPY`'},{q:'`$COPY`'}]} },
129
+ out: {x:y:[{q:11},{q:22}]} }
130
+
131
+
132
+ { in: { data: [{q:12},{q:22}],
133
+ spec: {x:y:['`$EACH`','',{q:'`$COPY`',r:'`.q`',p:'`...v`'}]} },
134
+ out: {x:y:[{q:12,r:12},{q:22,r:22}]} }
135
+
136
+ { in: { data: {v:1,a:[{q:13},{q:23}]},
137
+ spec: {x:y:['`$EACH`','a',{q:'`$COPY`',r:'`.q`',p:'`...v`'}]} },
138
+ out: {x:y:[{q:13,r:13,p:1},{q:23,r:23,p:1}]} }
139
+
140
+ { in: { data: {a:b:[{q:14},{q:24}]},
141
+ spec: {x:y:['`$EACH`','a.b',{q:'`$COPY`'}]} },
142
+ out: {x:y:[{q:14},{q:24}]} }
143
+
144
+ { in: { data: {a:b:c:[{q:15},{q:25}]},
145
+ spec: {x:y:['`$EACH`','a.b.c',{q:'`$COPY`'}]} },
146
+ out: {x:y:[{q:15},{q:25}]} }
147
+
148
+ { in: { data: {a:b:c:d:[{q:16},{q:26}]},
149
+ spec: {x:y:['`$EACH`','a.b.c.d',{q:'`$COPY`'}]} },
150
+ out: {x:y:[{q:16},{q:26}]} }
151
+
152
+
153
+ { in: { data: [],
154
+ spec: [{t:'T9',c:'`$COPY`'},{t:'T9',c:'`$COPY`'}] },
155
+ out: [{t:'T9'},{t:'T9'}] }
156
+
157
+ { in: { data: [{w:'W10',c:'C10'},{w:'W11',c:'C11'}],
158
+ spec: [{t:'T10',c:'`$COPY`'},{t:'T10',c:'`$COPY`'}] },
159
+ out: [{t:'T10',c:'C10'},{t:'T10',c:'C11'}] }
160
+
161
+ { in: { data: [{w:'W20',c:'C20'},{w:'W21',c:'C21'}],
162
+ spec: [{t:'T20',c:'`$COPY`',k:'`$KEY`'},{t:'T20',c:'`$COPY`',k:'`$KEY`'}] },
163
+ out: [{t:'T20',c:'C20',k:'0'},{t:'T20',c:'C21',k:'1'}] }
164
+
165
+ { in: { data: [{w:'W20',c:'C20'},{w:'W21',c:'C21'}],
166
+ spec: [{t:'T20',c:'`$COPY`',k:'`$KEY`','`$KEY`':'w'},
167
+ {t:'T20',c:'`$COPY`',k:'`$KEY`','`$KEY`':'w'}] },
168
+ out: [{t:'T20',c:'C20',k:'W20'},{t:'T20',c:'C21',k:'W21'}] }
169
+
170
+ { in: { data: [11,22],
171
+ spec: ['`$COPY`','`$COPY`'] },
172
+ out: [11,22] }
173
+
174
+ { in: { data: ['A',true],
175
+ spec: ['`$COPY`','`$COPY`'] },
176
+ out: ['A',true] }
177
+
178
+
179
+ { in: { data: {}, spec: {z:['`$EACH`','x',{q:'Q01'}]} },
180
+ out: {z:[]} }
181
+
182
+ { in: { data: {}, spec: {z:[['`$EACH`','x',{q:'Q02'}]]} },
183
+ out: {z:[[]]} }
184
+
185
+ { in: { data: {}, spec: {z:[[['`$EACH`','x',{q:'Q02'}]]]} },
186
+ out: {z:[[[]]]} }
187
+
188
+ { in: { data: {}, spec: {z:['`$EACH`','x',{y:'`$COPY`',q:'Q0'}]} },
189
+ out: {z:[]} }
190
+
191
+ { in: { data: {x:{}}, spec: {z:['`$EACH`','x',{y:'`$COPY`',q:'Q1'}]} },
192
+ out: {z:[]} }
193
+
194
+ { in: { data: {x:{a:{y:10}}}, spec: {z:['`$EACH`','x',{y:'`$COPY`',q:'Q2'}]} },
195
+ out: {z:[{y:10,q:'Q2'}]} }
196
+
197
+ { in: { data: {x:{a:{y:10},b:{y:11}}}, spec: {z:['`$EACH`','x',{y:'`$COPY`',q:'Q3'}]} },
198
+ out: {z:[{y:10,q:'Q3'},{y:11,q:'Q3'}]} }
199
+
200
+ { in: { data: {x:{a:{y:10},b:{y:11},c:{y:12}}},
201
+ spec: {z:['`$EACH`','x',{y:'`$COPY`',q:'Q4'}]} },
202
+ out: {z:[{y:10,q:'Q4'},{y:11,q:'Q4'},{y:12,q:'Q4'}]} }
203
+
204
+ { in: { data: {x:{a:{y:10},b:{y:11},c:{y:12},d:{y:13}}},
205
+ spec: {z:['`$EACH`','x',{y:'`$COPY`',q:'Q5'}]} },
206
+ out: {z:[{y:10,q:'Q5'},{y:11,q:'Q5'},{y:12,q:'Q5'},{y:13,q:'Q5'}]} }
207
+
208
+ { in: { data: {x:{a:{y:10},b:{y:11},c:{y:12},d:{y:13},e:{y:14}}},
209
+ spec: {z:['`$EACH`','x',{y:'`$COPY`',q:'Q6'}]} },
210
+ out: {z:[{y:10,q:'Q6'},{y:11,q:'Q6'},{y:12,q:'Q6'},{y:13,q:'Q6'},{y:14,q:'Q6'}]} }
211
+
212
+ { in: { data: {}, spec: ['`$EACH`','x',{y:'`$COPY`',p:'P0'}] },
213
+ out: [] }
214
+
215
+ { in: { data: {x:{}}, spec: ['`$EACH`','x',{y:'`$COPY`',p:'P1'}] },
216
+ out: [] }
217
+
218
+ { in: { data: {x:{a:{y:101}}}, spec: ['`$EACH`','x',{p:'P102'}] },
219
+ out: [{p:'P102'}] }
220
+
221
+ { in: { data: {x:{a:{y:10}}}, spec: ['`$EACH`','x',{y:'`$COPY`',p:'P2'}] },
222
+ out: [{y:10,p:'P2'}] }
223
+
224
+ { in: { data: {x:z:a:{q:10}}, spec: ['`$EACH`','x.z',{q:'`$COPY`',p:'P21'}] },
225
+ out: [{q:10,p:'P21'}] }
226
+
227
+
228
+ { in: { data: {x:{a:{y:10},b:{y:11}}}, spec: ['`$EACH`','x',{y:'`$COPY`',p:'P3'}] },
229
+ out: [{y:10,p:'P3'},{y:11,p:'P3'}] }
230
+
231
+ { in: { data: {x:{a:{y:10},b:{y:11},c:{y:12}}},
232
+ spec: ['`$EACH`','x',{y:'`$COPY`',p:'P4'}] },
233
+ out: [{y:10,p:'P4'},{y:11,p:'P4'},{y:12,p:'P4'}] }
234
+
235
+ { in: { data: {x:{a:{y:10},b:{y:11},c:{y:12},d:{y:13}}},
236
+ spec: ['`$EACH`','x',{y:'`$COPY`',p:'P5'}] },
237
+ out: [{y:10,p:'P5'},{y:11,p:'P5'},{y:12,p:'P5'},{y:13,p:'P5'}] }
238
+
239
+ { in: { data: {x:{a:{y:10},b:{y:11},c:{y:12},d:{y:13},e:{y:14}}},
240
+ spec: ['`$EACH`','x',{y:'`$COPY`',p:'P6'}] },
241
+ out: [{y:10,p:'P6'},{y:11,p:'P6'},{y:12,p:'P6'},{y:13,p:'P6'},{y:14,p:'P6'}] }
242
+
243
+
244
+ { in: { data: {x:{p:{a:{y:10}}}},
245
+ spec: {z:['`$EACH`','x.p',{y:'`$COPY`',w:'w0',k:'`$KEY`'}]} },
246
+ out: {z:[{y:10,w:'w0',k:'a'}]} }
247
+
248
+ { in: { data: {x:{p:{q:{a:{y:10}}}}},
249
+ spec: {z:['`$EACH`','x.p.q',{y:'`$COPY`',w:'w1',k:'`$KEY`'}]} },
250
+ out: {z:[{y:10,w:'w1',k:'a'}]} }
251
+
252
+
253
+ { in: { data: {x:{a0:{y:0}}}, spec: {r0:[['`$EACH`','x',{y:'`$COPY`',q:'T0'}]]} },
254
+ out: {r0:[[{y:0,q:T0}]]} }
255
+
256
+ { in: { data: {x:{a1:{y:0}}}, spec: {r1:[[['`$EACH`','x',{y:'`$COPY`',q:'T1'}]]]} },
257
+ out: {r1:[[[{y:0,q:T1}]]]} }
258
+
259
+ { in: { data: {x:{a2:{y:0}}}, spec: {r2:[[[['`$EACH`','x',{y:'`$COPY`',q:'T2'}]]]]} },
260
+ out: {r2:[[[[{y:0,q:T2}]]]]} }
261
+
262
+
263
+ { in: { data: {a0:[{i:0},{i:1}]},
264
+ spec: {b0:['`$EACH`','a0',{i:'`$COPY`',j:'`.i`'}]} }
265
+ out: {b0:[{i:0,j:0},{i:1,j:1}]} }
266
+
267
+ { in: { data: {zz:99,a0:[{i:0},{i:1}]},
268
+ spec: {b0:['`$EACH`','a0',{i:'`$COPY`',j:'`.i`',k:'`zz`'}]} }
269
+ out: {b0:[{i:0,j:0,k:99},{i:1,j:1,k:99}]} }
270
+
271
+
272
+ { in: { data: {a1:[{i:0},{i:1}]},
273
+ spec: {b1:['`$EACH`','a1',{'`$MERGE`':'`.`',k:'`.i`'}]} }
274
+ out: {b1:[{i:0,k:0},{i:1,k:1}]} }
275
+
276
+ { in: { data: {p2:20, a2:[{i:30},{i:31}]},
277
+ spec: {b2:['`$EACH`','a2',{k:'`.i`',p:'`...p2`'}]} }
278
+ out: {b2:[{k:30,p:20},{k:31,p:20}]} }
279
+
280
+
281
+ {
282
+ in: data: {a0:[{n:0},{n:1}]}
283
+ in: spec: ['`$EACH`','a0',{x0:{y0:'`..n`'}}]
284
+ out: [{x0:y0:0},{x0:y0:1}]
285
+ }
286
+
287
+
288
+ ]
289
+ }
290
+
291
+
292
+ pack: {
293
+ set: [
294
+ { in: { data: {x:[{y:0,k:'K0'},{y:1,k:'K1'}]},
295
+ spec: {z:{'`$PACK`':['x',{'`$KEY`':'k', y:'`$COPY`',q:'Q0'}]}} },
296
+ out: {z:{K0:{y:0,q:'Q0'},K1:{y:1,q:'Q0'}}} }
297
+
298
+ { in: { data: {x:[{y:0,k:'K0'},{y:1,k:'K1'}]},
299
+ spec: {'`$PACK`':['x',{'`$KEY`':'k', y:'`$COPY`',q:'Q1'}]} },
300
+ out: {K0:{y:0,q:'Q1'},K1:{y:1,q:'Q1'}} }
301
+
302
+ { in: { data: [{y:0,k:'K0'},{y:1,k:'K1'}],
303
+ spec: {'`$PACK`':['',{'`$KEY`':'k', y:'`$COPY`',q:'Q2'}]} },
304
+ out: {K0:{y:0,q:'Q2'},K1:{y:1,q:'Q2'}} }
305
+
306
+ { in: { data: [{y:0,k:'K0'},{y:1,k:'K1'}],
307
+ spec: {z:{'`$PACK`':['',{'`$KEY`':'k', y:'`$COPY`',q:'Q3'}]}} },
308
+ out: {z:{K0:{y:0,q:'Q3'},K1:{y:1,q:'Q3'}}} }
309
+
310
+
311
+ { in: { data: [{y:0,k:'K0'}],
312
+ spec: {a:{b:{'`$PACK`':['',{'`$KEY`':'k', y:'`$COPY`',q:'Q4'}]}}} },
313
+ out: {a:{b:{K0:{y:0,q:'Q4'}}}} }
314
+
315
+ { in: { data: [{y:0,k:'K0'}],
316
+ spec: {a:{b:{c:{'`$PACK`':['',{'`$KEY`':'k', y:'`$COPY`',q:'Q5'}]}}}} },
317
+ out: {a:{b:{c:{K0:{y:0,q:'Q5'}}}}} }
318
+
319
+ { in: { data: [{y:0,k:'K0'}],
320
+ spec: {a:{b:{c:{d:{'`$PACK`':['',{'`$KEY`':'k', y:'`$COPY`',q:'Q6'}]}}}}} },
321
+ out: {a:{b:{c:{d:{K0:{y:0,q:'Q6'}}}}}} }
322
+
323
+ { in: { data: [{y:0,k:'K0'}],
324
+ spec: {a:{b:{c:{d:{e:{'`$PACK`':['',{'`$KEY`':'k', y:'`$COPY`',q:'Q7'}]}}}}}} },
325
+ out: {a:{b:{c:{d:{e:{K0:{y:0,q:'Q7'}}}}}}} }
326
+
327
+
328
+ { in: { data: {x:[{y:0,k:'K0'}]},
329
+ spec: {a:{b:{c:{d:{e:{'`$PACK`':['x',{'`$KEY`':'k', y:'`$COPY`',q:'Q8'}]}}}}}} },
330
+ out: {a:{b:{c:{d:{e:{K0:{y:0,q:'Q8'}}}}}}} }
331
+
332
+ { in: { data: {x:{a:{y:0,k:'K0'},b:{y:1,k:'K1'}}},
333
+ spec: {z:{'`$PACK`':['x',{p:'`$KEY`', '`$KEY`':'k', y:'`$COPY`',q:'Q9'}]}} },
334
+ out: {z:{K0:{y:0,q:'Q9',p:'a'},K1:{y:1,q:'Q9',p:'b'}}} }
335
+
336
+ { in: { data: {v100:11,x100:[{y:0,k:'K0'},{y:1,k:'K1'}]},
337
+ spec: {a:{b:{'`$PACK`':['x100',{'`$KEY`':'k', y:'`.y`',p:'`...v100`'}]}}} },
338
+ out: {a:{b:{K0:{y:0,p:11}, K1:{y:1,p:11}}}} }
339
+
340
+ ]
341
+ }
342
+
343
+
344
+ modify: {
345
+ set: [
346
+ { in: { data: {x:'X'}, spec: {z:'`x`'} }, out: { z: '@X' } }
347
+ ]
348
+ }
349
+
350
+
351
+
352
+ ref: {
353
+ set: [
354
+
355
+ { in: { data: {}, spec: {x0:0,r0:0} }, out: {x0:0,r0:0} }
356
+ { in: { data: {}, spec: {r0:['`$REF`','x0']} }, out: {} }
357
+ { in: { data: {}, spec: {x0:0,r0:['`$REF`','x0']} }, out: {x0:0,r0:0} }
358
+
359
+ { in: { data: {r2:2}, spec: {r2:'`$COPY`'} }, out: {r2:2} }
360
+ { in: { data: {r2:2,p2:2}, spec: {r2:['`$REF`','x2'], x2:'`$COPY`'} }, out: {r2:2} }
361
+
362
+ { in: { data: {}, spec: {z:['`$REF`','z']} }, out: {} }
363
+ { in: { data: {}, spec: {z:y:['`$REF`','z']} }, out: {z:{}} }
364
+ { in: { data: {}, spec: {z:y:x:['`$REF`','z']} }, out: {z:{y:{}}} }
365
+
366
+ { in: { data: [], spec: [['`$REF`','z']] }, out:[] }
367
+ { in: { data: [], spec: [[['`$REF`','z']]] }, out:[[]] }
368
+ { in: { data: [], spec: [[[['`$REF`','z']]]] }, out:[[[]]] }
369
+
370
+ { in: { data: {}, spec: {z:['`$REF`','y'],y:['`$REF`','z']} }, out: {} }
371
+ { in: { data: {}, spec: {z:x:['`$REF`','y'],y:q:['`$REF`','z']} }, out: {z:{},y:{}} }
372
+
373
+ { in: { data: {},
374
+ spec: {z:{s:0,n:'`$COPY`',m:'`.n`',p:['`$REF`','z']}} },
375
+ out: {z:{s:0}} }
376
+
377
+ { in: { data: {z:{n:1}},
378
+ spec: {z:{s:0,n:'`$COPY`',m:'`.n`',p:['`$REF`','z']}} },
379
+ out: {z:{s:0,n:1,m:1}} }
380
+
381
+ { in: { data: {z:{n:1,p:{n:2}}},
382
+ spec: {z:{s:0,n:'`$COPY`',m:'`.n`',p:['`$REF`','z']}} },
383
+ out: {z:{s:0,n:1,m:1,p:{s:0,n:2,m:2}}} }
384
+
385
+ { in: { data: {z:{n:1,p:{n:2,p:{n:3}}}},
386
+ spec: {z:{s:0,n:'`$COPY`',m:'`.n`',p:['`$REF`','z']}} },
387
+ out: {z:{s:0,n:1,m:1,p:{s:0,n:2,m:2,p:{s:0,n:3,m:3}}}} }
388
+
389
+
390
+ { in: { data: {zz:{n:1,p:{n:2},q:{n:3}}},
391
+ spec: {zz:{s:0,n:'`$COPY`',m:'`.n`',p:['`$REF`','zz'],q:['`$REF`','zz']}} },
392
+ out: {zz:{s:0,n:1,m:1,p:{s:0,n:2,m:2},q:{s:0,n:3,m:3}}} }
393
+
394
+
395
+
396
+ { in: {
397
+ data: { z0: { y0: 10, p:[{y0:11}] } }
398
+ spec: { z0: { x0: '`.y0`', p:[{x0:'`.y0`'}] } }
399
+ }
400
+ out: {z0:{x0:10,p:[{x0:11}]}}
401
+ }
402
+
403
+ { in: {
404
+ data: { z1: { y1: 20, p:[{y1:21}] } }
405
+ spec: { z1: { x1: '`.y1`', p:[['`$REF`','z1']] } }
406
+ }
407
+ out: {z1:{x1:20,p:[{x1:21,p:[]}]}}
408
+ }
409
+
410
+ { in: {
411
+ data: { z2: { y2: 30, p:[{y2:31},{y2:32}] } }
412
+ spec: { z2: { x2: '`.y2`', p:[['`$REF`','z2'],['`$REF`','z2']] } }
413
+ }
414
+ out: {z2:{x2:30,p:[{x2:31,p:[]},{x2:32,p:[]}]}}
415
+ }
416
+
417
+ { in: {
418
+ data: { z3: { y3: 40, p:[{y3:41},{y3:42,p:[{y3:43}]}] } }
419
+ spec: { z3: { x3: '`.y3`', p:[['`$REF`','z3'],['`$REF`','z3']] } }
420
+ }
421
+ out: {z3:{x3:40,p:[{x3:41,p:[]},{x3:42,p:[{x3:43,p:[]}]}]}}
422
+ }
423
+
424
+
425
+
426
+
427
+ { in: {
428
+ data: { z22: { y22: 90, p:[{y22:91},{y22:92}] } }
429
+ spec: { z22: { x22: '`.y22`', y22:'`$COPY`',
430
+ p:['`$EACH`','.',{y22:'`$COPY`',x22: '`.y22`'}] } }
431
+ }
432
+ out: {z22:{x22:90,y22:90,p:[{x22:91,y22:91},{x22:92,y22:92}]}}
433
+ }
434
+
435
+ { in: {
436
+ data: { z22: { y22: 90, p:[{y22:91},{y22:92}] } }
437
+ spec: { z22: { x22: '`.y22`', y22:'`$COPY`',
438
+ p:['`$EACH`','.',['`$REF`','z22']] } }
439
+ }
440
+ out: {z22:{x22:90,y22:90,p:[{x22:91,y22:91,p:[]},{x22:92,y22:92,p:[]}]}}
441
+ }
442
+
443
+ { in: {
444
+ data: { z33: { y33: 90, p:[{y33:91},{y33:92,p:[{y33:93}]}] } }
445
+ spec: { z33: { x33: '`.y33`', y33:'`$COPY`',
446
+ p:['`$EACH`','.',['`$REF`','z33']] } }
447
+ }
448
+ out: {z33:{x33:90,y33:90,p:[{x33:91,y33:91,p:[]},
449
+ {x33:92,y33:92,p:[{x33:93,y33:93,p:[]}]}]}}
450
+ }
451
+
452
+ ]
453
+ }