@voxgig/sdkgen 0.35.2 → 0.37.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 (498) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/cmp/Main.js +0 -12
  3. package/dist/cmp/Main.js.map +1 -1
  4. package/dist/cmp/Readme.js +5 -5
  5. package/dist/cmp/Readme.js.map +1 -1
  6. package/dist/cmp/ReadmeEntity.js +74 -24
  7. package/dist/cmp/ReadmeEntity.js.map +1 -1
  8. package/dist/cmp/ReadmeExplanation.d.ts +2 -0
  9. package/dist/cmp/ReadmeExplanation.js +308 -0
  10. package/dist/cmp/ReadmeExplanation.js.map +1 -0
  11. package/dist/cmp/ReadmeHowto.d.ts +2 -0
  12. package/dist/cmp/ReadmeHowto.js +18 -0
  13. package/dist/cmp/ReadmeHowto.js.map +1 -0
  14. package/dist/cmp/ReadmeIntro.js +8 -23
  15. package/dist/cmp/ReadmeIntro.js.map +1 -1
  16. package/dist/cmp/ReadmeModel.js +55 -91
  17. package/dist/cmp/ReadmeModel.js.map +1 -1
  18. package/dist/cmp/ReadmeOptions.js +35 -11
  19. package/dist/cmp/ReadmeOptions.js.map +1 -1
  20. package/dist/cmp/ReadmeQuick.js +4 -1
  21. package/dist/cmp/ReadmeQuick.js.map +1 -1
  22. package/dist/cmp/ReadmeRef.js +1042 -40
  23. package/dist/cmp/ReadmeRef.js.map +1 -1
  24. package/dist/cmp/ReadmeTop.d.ts +2 -0
  25. package/dist/cmp/ReadmeTop.js +171 -0
  26. package/dist/cmp/ReadmeTop.js.map +1 -0
  27. package/dist/sdkgen.d.ts +7 -1
  28. package/dist/sdkgen.js +13 -1
  29. package/dist/sdkgen.js.map +1 -1
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +2 -2
  32. package/project/.sdk/model/feature/feature-index.jsonic +5 -0
  33. package/project/.sdk/model/feature/log.jsonic +5 -1
  34. package/project/.sdk/model/feature/test.jsonic +1 -1
  35. package/project/.sdk/model/target/lua.jsonic +23 -0
  36. package/project/.sdk/model/target/php.jsonic +22 -0
  37. package/project/.sdk/model/target/py.jsonic +23 -0
  38. package/project/.sdk/model/target/rb.jsonic +23 -0
  39. package/project/.sdk/src/cmp/go/Config_go.ts +6 -2
  40. package/project/.sdk/src/cmp/go/Main_go.ts +2 -6
  41. package/project/.sdk/src/cmp/go/ReadmeExplanation_go.ts +42 -0
  42. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +112 -0
  43. package/project/.sdk/src/cmp/go/ReadmeInstall_go.ts +29 -0
  44. package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +129 -0
  45. package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +163 -0
  46. package/project/.sdk/src/cmp/go/ReadmeTopHowto_go.ts +24 -0
  47. package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +67 -0
  48. package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +40 -0
  49. package/project/.sdk/src/cmp/go/TestDirect_go.ts +46 -2
  50. package/project/.sdk/src/cmp/go/TestEntity_go.ts +360 -160
  51. package/project/.sdk/src/cmp/go/Test_go.ts +24 -1
  52. package/project/.sdk/src/cmp/js/EntityBase_js.ts +34 -0
  53. package/project/.sdk/src/cmp/js/Main_js.ts +10 -0
  54. package/project/.sdk/src/cmp/js/ReadmeExplanation_js.ts +33 -0
  55. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +123 -0
  56. package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +152 -0
  57. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +1 -1
  58. package/project/.sdk/src/cmp/js/ReadmeTopHowto_js.ts +25 -0
  59. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +65 -0
  60. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +36 -0
  61. package/project/.sdk/src/cmp/js/TestDirect_js.ts +53 -5
  62. package/project/.sdk/src/cmp/js/TestEntity_js.ts +114 -20
  63. package/project/.sdk/src/cmp/js/fragment/Entity.fragment.js +7 -139
  64. package/project/.sdk/src/cmp/js/fragment/EntityBase.fragment.js +149 -0
  65. package/project/.sdk/src/cmp/js/fragment/EntityCreateOp.fragment.js +6 -10
  66. package/project/.sdk/src/cmp/js/fragment/EntityListOp.fragment.js +6 -10
  67. package/project/.sdk/src/cmp/js/fragment/EntityLoadOp.fragment.js +7 -11
  68. package/project/.sdk/src/cmp/js/fragment/EntityRemoveOp.fragment.js +7 -11
  69. package/project/.sdk/src/cmp/js/fragment/EntityUpdateOp.fragment.js +7 -11
  70. package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +2 -0
  71. package/project/.sdk/src/cmp/js/fragment/SdkError.fragment.js +0 -2
  72. package/project/.sdk/src/cmp/lua/Config_lua.ts +116 -0
  73. package/project/.sdk/src/cmp/lua/EntityOperation_lua.ts +44 -0
  74. package/project/.sdk/src/cmp/lua/Entity_lua.ts +62 -0
  75. package/project/.sdk/src/cmp/lua/MainEntity_lua.ts +23 -0
  76. package/project/.sdk/src/cmp/lua/Main_lua.ts +133 -0
  77. package/project/.sdk/src/cmp/lua/Package_lua.ts +80 -0
  78. package/project/.sdk/src/cmp/lua/ReadmeExplanation_lua.ts +42 -0
  79. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +100 -0
  80. package/project/.sdk/src/cmp/lua/ReadmeInstall_lua.ts +26 -0
  81. package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +129 -0
  82. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +99 -0
  83. package/project/.sdk/src/cmp/lua/ReadmeTopHowto_lua.ts +24 -0
  84. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +55 -0
  85. package/project/.sdk/src/cmp/lua/ReadmeTopTest_lua.ts +38 -0
  86. package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +261 -0
  87. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +485 -0
  88. package/project/.sdk/src/cmp/lua/Test_lua.ts +49 -0
  89. package/project/.sdk/src/cmp/lua/fragment/Entity.fragment.lua +147 -0
  90. package/project/.sdk/src/cmp/lua/fragment/EntityCreateOp.fragment.lua +27 -0
  91. package/project/.sdk/src/cmp/lua/fragment/EntityListOp.fragment.lua +24 -0
  92. package/project/.sdk/src/cmp/lua/fragment/EntityLoadOp.fragment.lua +30 -0
  93. package/project/.sdk/src/cmp/lua/fragment/EntityRemoveOp.fragment.lua +30 -0
  94. package/project/.sdk/src/cmp/lua/fragment/EntityUpdateOp.fragment.lua +30 -0
  95. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +256 -0
  96. package/project/.sdk/src/cmp/lua/fragment/SdkError.fragment.lua +26 -0
  97. package/project/.sdk/src/cmp/lua/tsconfig.json +15 -0
  98. package/project/.sdk/src/cmp/lua/utility_lua.ts +84 -0
  99. package/project/.sdk/src/cmp/php/Config_php.ts +111 -0
  100. package/project/.sdk/src/cmp/php/EntityOperation_php.ts +44 -0
  101. package/project/.sdk/src/cmp/php/Entity_php.ts +62 -0
  102. package/project/.sdk/src/cmp/php/MainEntity_php.ts +24 -0
  103. package/project/.sdk/src/cmp/php/Main_php.ts +135 -0
  104. package/project/.sdk/src/cmp/php/Package_php.ts +87 -0
  105. package/project/.sdk/src/cmp/php/ReadmeExplanation_php.ts +42 -0
  106. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +101 -0
  107. package/project/.sdk/src/cmp/php/ReadmeInstall_php.ts +19 -0
  108. package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +129 -0
  109. package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +100 -0
  110. package/project/.sdk/src/cmp/php/ReadmeTopHowto_php.ts +24 -0
  111. package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +56 -0
  112. package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +38 -0
  113. package/project/.sdk/src/cmp/php/TestDirect_php.ts +270 -0
  114. package/project/.sdk/src/cmp/php/TestEntity_php.ts +479 -0
  115. package/project/.sdk/src/cmp/php/Test_php.ts +56 -0
  116. package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +146 -0
  117. package/project/.sdk/src/cmp/php/fragment/EntityCreateOp.fragment.php +26 -0
  118. package/project/.sdk/src/cmp/php/fragment/EntityListOp.fragment.php +23 -0
  119. package/project/.sdk/src/cmp/php/fragment/EntityLoadOp.fragment.php +29 -0
  120. package/project/.sdk/src/cmp/php/fragment/EntityRemoveOp.fragment.php +29 -0
  121. package/project/.sdk/src/cmp/php/fragment/EntityUpdateOp.fragment.php +29 -0
  122. package/project/.sdk/src/cmp/php/fragment/Main.fragment.php +233 -0
  123. package/project/.sdk/src/cmp/php/fragment/SdkError.fragment.php +24 -0
  124. package/project/.sdk/src/cmp/php/tsconfig.json +15 -0
  125. package/project/.sdk/src/cmp/php/utility_php.ts +85 -0
  126. package/project/.sdk/src/cmp/py/Config_py.ts +97 -0
  127. package/project/.sdk/src/cmp/py/EntityOperation_py.ts +44 -0
  128. package/project/.sdk/src/cmp/py/Entity_py.ts +62 -0
  129. package/project/.sdk/src/cmp/py/MainEntity_py.ts +22 -0
  130. package/project/.sdk/src/cmp/py/Main_py.ts +156 -0
  131. package/project/.sdk/src/cmp/py/Package_py.ts +75 -0
  132. package/project/.sdk/src/cmp/py/ReadmeExplanation_py.ts +41 -0
  133. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +98 -0
  134. package/project/.sdk/src/cmp/py/ReadmeInstall_py.ts +25 -0
  135. package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +130 -0
  136. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +100 -0
  137. package/project/.sdk/src/cmp/py/ReadmeTopHowto_py.ts +24 -0
  138. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +56 -0
  139. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +38 -0
  140. package/project/.sdk/src/cmp/py/TestDirect_py.ts +248 -0
  141. package/project/.sdk/src/cmp/py/TestEntity_py.ts +477 -0
  142. package/project/.sdk/src/cmp/py/Test_py.ts +55 -0
  143. package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +112 -0
  144. package/project/.sdk/src/cmp/py/fragment/EntityCreateOp.fragment.py +25 -0
  145. package/project/.sdk/src/cmp/py/fragment/EntityListOp.fragment.py +22 -0
  146. package/project/.sdk/src/cmp/py/fragment/EntityLoadOp.fragment.py +27 -0
  147. package/project/.sdk/src/cmp/py/fragment/EntityRemoveOp.fragment.py +27 -0
  148. package/project/.sdk/src/cmp/py/fragment/EntityUpdateOp.fragment.py +27 -0
  149. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +222 -0
  150. package/project/.sdk/src/cmp/py/fragment/SdkError.fragment.py +16 -0
  151. package/project/.sdk/src/cmp/py/tsconfig.json +15 -0
  152. package/project/.sdk/src/cmp/py/utility_py.ts +84 -0
  153. package/project/.sdk/src/cmp/rb/Config_rb.ts +105 -0
  154. package/project/.sdk/src/cmp/rb/EntityOperation_rb.ts +44 -0
  155. package/project/.sdk/src/cmp/rb/Entity_rb.ts +62 -0
  156. package/project/.sdk/src/cmp/rb/MainEntity_rb.ts +23 -0
  157. package/project/.sdk/src/cmp/rb/Main_rb.ts +130 -0
  158. package/project/.sdk/src/cmp/rb/Package_rb.ts +111 -0
  159. package/project/.sdk/src/cmp/rb/ReadmeExplanation_rb.ts +42 -0
  160. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +98 -0
  161. package/project/.sdk/src/cmp/rb/ReadmeInstall_rb.ts +31 -0
  162. package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +129 -0
  163. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +99 -0
  164. package/project/.sdk/src/cmp/rb/ReadmeTopHowto_rb.ts +24 -0
  165. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +55 -0
  166. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +38 -0
  167. package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +260 -0
  168. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +476 -0
  169. package/project/.sdk/src/cmp/rb/Test_rb.ts +50 -0
  170. package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +116 -0
  171. package/project/.sdk/src/cmp/rb/fragment/EntityCreateOp.fragment.rb +25 -0
  172. package/project/.sdk/src/cmp/rb/fragment/EntityListOp.fragment.rb +20 -0
  173. package/project/.sdk/src/cmp/rb/fragment/EntityLoadOp.fragment.rb +26 -0
  174. package/project/.sdk/src/cmp/rb/fragment/EntityRemoveOp.fragment.rb +26 -0
  175. package/project/.sdk/src/cmp/rb/fragment/EntityUpdateOp.fragment.rb +26 -0
  176. package/project/.sdk/src/cmp/rb/fragment/Main.fragment.rb +203 -0
  177. package/project/.sdk/src/cmp/rb/fragment/SdkError.fragment.rb +16 -0
  178. package/project/.sdk/src/cmp/rb/tsconfig.json +15 -0
  179. package/project/.sdk/src/cmp/rb/utility_rb.ts +84 -0
  180. package/project/.sdk/src/cmp/ts/Main_ts.ts +7 -0
  181. package/project/.sdk/src/cmp/ts/ReadmeExplanation_ts.ts +34 -0
  182. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +123 -0
  183. package/project/.sdk/src/cmp/ts/ReadmeInstall_ts.ts +1 -1
  184. package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +159 -0
  185. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +69 -54
  186. package/project/.sdk/src/cmp/ts/ReadmeTopHowto_ts.ts +25 -0
  187. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +65 -0
  188. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +36 -0
  189. package/project/.sdk/tm/go/feature/log_feature.go +133 -0
  190. package/project/.sdk/tm/go/src/feature/log/.gitkeep +0 -0
  191. package/project/.sdk/tm/go/test/runner_test.go +16 -2
  192. package/project/.sdk/tm/js/src/Context.js +142 -0
  193. package/project/.sdk/tm/js/src/Control.js +16 -0
  194. package/project/.sdk/tm/js/src/Operation.js +19 -0
  195. package/project/.sdk/tm/js/src/Point.js +24 -0
  196. package/project/.sdk/tm/js/src/README.md +1 -0
  197. package/project/.sdk/tm/js/src/Response.js +19 -0
  198. package/project/.sdk/tm/js/src/Result.js +21 -0
  199. package/project/.sdk/tm/js/src/Spec.js +26 -0
  200. package/project/.sdk/tm/js/src/feature/README.md +1 -0
  201. package/project/.sdk/tm/js/src/feature/base/BaseFeature.js +45 -0
  202. package/project/.sdk/tm/js/src/feature/log/LogFeature.js +46 -47
  203. package/project/.sdk/tm/js/src/feature/test/TestFeature.js +207 -0
  204. package/project/.sdk/tm/js/src/types.js +22 -0
  205. package/project/.sdk/tm/js/src/utility/CleanUtility.js +31 -0
  206. package/project/.sdk/tm/js/src/utility/DoneUtility.js +11 -4
  207. package/project/.sdk/tm/js/src/utility/FeatureAddUtility.js +42 -0
  208. package/project/.sdk/tm/js/src/utility/FeatureHookUtility.js +25 -0
  209. package/project/.sdk/tm/js/src/utility/FeatureInitUtility.js +11 -0
  210. package/project/.sdk/tm/js/src/utility/FetcherUtility.js +28 -0
  211. package/project/.sdk/tm/js/src/utility/MakeContextUtility.js +11 -0
  212. package/project/.sdk/tm/js/src/utility/MakeErrorUtility.js +55 -0
  213. package/project/.sdk/tm/js/src/utility/MakeFetchDefUtility.js +44 -0
  214. package/project/.sdk/tm/js/src/utility/MakeOptionsUtility.js +93 -0
  215. package/project/.sdk/tm/js/src/utility/MakePointUtility.js +77 -0
  216. package/project/.sdk/tm/js/src/utility/MakeRequestUtility.js +63 -0
  217. package/project/.sdk/tm/js/src/utility/MakeResponseUtility.js +55 -0
  218. package/project/.sdk/tm/js/src/utility/MakeResultUtility.js +54 -0
  219. package/project/.sdk/tm/js/src/utility/MakeSpecUtility.js +58 -0
  220. package/project/.sdk/tm/js/src/utility/MakeUrlUtility.js +40 -0
  221. package/project/.sdk/tm/js/src/utility/ParamUtility.js +61 -0
  222. package/project/.sdk/tm/js/src/utility/PrepareAuthUtility.js +41 -0
  223. package/project/.sdk/tm/js/src/utility/PrepareBodyUtility.js +25 -0
  224. package/project/.sdk/tm/js/src/utility/PrepareHeadersUtility.js +18 -0
  225. package/project/.sdk/tm/js/src/utility/{MethodUtility.js → PrepareMethodUtility.js} +7 -7
  226. package/project/.sdk/tm/js/src/utility/PrepareParamsUtility.js +25 -0
  227. package/project/.sdk/tm/js/src/utility/PreparePathUtility.js +13 -0
  228. package/project/.sdk/tm/js/src/utility/PrepareQueryUtility.js +26 -0
  229. package/project/.sdk/tm/js/src/utility/README.md +1 -0
  230. package/project/.sdk/tm/js/src/utility/ResultBasicUtility.js +34 -0
  231. package/project/.sdk/tm/js/src/utility/ResultBodyUtility.js +18 -0
  232. package/project/.sdk/tm/js/src/utility/ResultHeadersUtility.js +22 -0
  233. package/project/.sdk/tm/js/src/utility/StructUtility.js +2219 -1078
  234. package/project/.sdk/tm/js/src/utility/TransformRequestUtility.js +28 -0
  235. package/project/.sdk/tm/js/src/utility/TransformResponseUtility.js +31 -0
  236. package/project/.sdk/tm/js/src/utility/Utility.js +61 -61
  237. package/project/.sdk/tm/js/test/README.md +1 -0
  238. package/project/.sdk/tm/js/test/exists.test.js +16 -0
  239. package/project/.sdk/tm/js/test/runner.js +323 -107
  240. package/project/.sdk/tm/js/test/utility/Custom.test.js +41 -63
  241. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +390 -116
  242. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +728 -175
  243. package/project/.sdk/tm/js/test/utility/index.js +9 -0
  244. package/project/.sdk/tm/js/test/utility.js +72 -0
  245. package/project/.sdk/tm/lua/LICENSE +22 -0
  246. package/project/.sdk/tm/lua/Makefile +10 -0
  247. package/project/.sdk/tm/lua/core/context.lua +208 -0
  248. package/project/.sdk/tm/lua/core/control.lua +17 -0
  249. package/project/.sdk/tm/lua/core/error.lua +30 -0
  250. package/project/.sdk/tm/lua/core/helpers.lua +30 -0
  251. package/project/.sdk/tm/lua/core/operation.lua +51 -0
  252. package/project/.sdk/tm/lua/core/response.lua +45 -0
  253. package/project/.sdk/tm/lua/core/result.lua +58 -0
  254. package/project/.sdk/tm/lua/core/spec.lua +29 -0
  255. package/project/.sdk/tm/lua/core/utility_type.lua +90 -0
  256. package/project/.sdk/tm/lua/feature/base_feature.lua +35 -0
  257. package/project/.sdk/tm/lua/feature/log_feature.lua +80 -0
  258. package/project/.sdk/tm/lua/feature/test_feature.lua +202 -0
  259. package/project/.sdk/tm/lua/src/feature/README.md +3 -0
  260. package/project/.sdk/tm/lua/src/feature/base/.gitkeep +0 -0
  261. package/project/.sdk/tm/lua/src/feature/log/.gitkeep +0 -0
  262. package/project/.sdk/tm/lua/src/feature/test/.gitkeep +0 -0
  263. package/project/.sdk/tm/lua/test/primary_utility_test.lua +1213 -0
  264. package/project/.sdk/tm/lua/test/runner.lua +86 -0
  265. package/project/.sdk/tm/lua/test/struct_runner.lua +602 -0
  266. package/project/.sdk/tm/lua/test/struct_utility_test.lua +959 -0
  267. package/project/.sdk/tm/lua/utility/clean.lua +7 -0
  268. package/project/.sdk/tm/lua/utility/done.lua +19 -0
  269. package/project/.sdk/tm/lua/utility/feature_add.lua +8 -0
  270. package/project/.sdk/tm/lua/utility/feature_hook.lua +21 -0
  271. package/project/.sdk/tm/lua/utility/feature_init.lua +24 -0
  272. package/project/.sdk/tm/lua/utility/fetcher.lua +96 -0
  273. package/project/.sdk/tm/lua/utility/make_context.lua +9 -0
  274. package/project/.sdk/tm/lua/utility/make_error.lua +73 -0
  275. package/project/.sdk/tm/lua/utility/make_fetch_def.lua +43 -0
  276. package/project/.sdk/tm/lua/utility/make_options.lua +116 -0
  277. package/project/.sdk/tm/lua/utility/make_point.lua +92 -0
  278. package/project/.sdk/tm/lua/utility/make_request.lua +58 -0
  279. package/project/.sdk/tm/lua/utility/make_response.lua +44 -0
  280. package/project/.sdk/tm/lua/utility/make_result.lua +51 -0
  281. package/project/.sdk/tm/lua/utility/make_spec.lua +72 -0
  282. package/project/.sdk/tm/lua/utility/make_url.lua +46 -0
  283. package/project/.sdk/tm/lua/utility/param.lua +68 -0
  284. package/project/.sdk/tm/lua/utility/prepare_auth.lua +39 -0
  285. package/project/.sdk/tm/lua/utility/prepare_body.lua +14 -0
  286. package/project/.sdk/tm/lua/utility/prepare_headers.lua +20 -0
  287. package/project/.sdk/tm/lua/utility/prepare_method.lua +17 -0
  288. package/project/.sdk/tm/lua/utility/prepare_params.lua +36 -0
  289. package/project/.sdk/tm/lua/utility/prepare_path.lua +19 -0
  290. package/project/.sdk/tm/lua/utility/prepare_query.lua +41 -0
  291. package/project/.sdk/tm/lua/utility/register.lua +71 -0
  292. package/project/.sdk/tm/lua/utility/result_basic.lua +32 -0
  293. package/project/.sdk/tm/lua/utility/result_body.lua +17 -0
  294. package/project/.sdk/tm/lua/utility/result_headers.lua +22 -0
  295. package/project/.sdk/tm/lua/utility/struct/struct.lua +3427 -0
  296. package/project/.sdk/tm/lua/utility/transform_request.lua +31 -0
  297. package/project/.sdk/tm/lua/utility/transform_response.lua +44 -0
  298. package/project/.sdk/tm/php/LICENSE +22 -0
  299. package/project/.sdk/tm/php/Makefile +10 -0
  300. package/project/.sdk/tm/php/core/Context.php +139 -0
  301. package/project/.sdk/tm/php/core/Control.php +18 -0
  302. package/project/.sdk/tm/php/core/Error.php +37 -0
  303. package/project/.sdk/tm/php/core/Helpers.php +25 -0
  304. package/project/.sdk/tm/php/core/Operation.php +36 -0
  305. package/project/.sdk/tm/php/core/Response.php +30 -0
  306. package/project/.sdk/tm/php/core/Result.php +35 -0
  307. package/project/.sdk/tm/php/core/Spec.php +38 -0
  308. package/project/.sdk/tm/php/core/UtilityType.php +89 -0
  309. package/project/.sdk/tm/php/feature/BaseFeature.php +37 -0
  310. package/project/.sdk/tm/php/feature/LogFeature.php +65 -0
  311. package/project/.sdk/tm/php/feature/TestFeature.php +156 -0
  312. package/project/.sdk/tm/php/src/feature/README.md +3 -0
  313. package/project/.sdk/tm/php/src/feature/base/.gitkeep +0 -0
  314. package/project/.sdk/tm/php/src/feature/log/.gitkeep +0 -0
  315. package/project/.sdk/tm/php/src/feature/test/.gitkeep +0 -0
  316. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +1309 -0
  317. package/project/.sdk/tm/php/test/Runner.php +112 -0
  318. package/project/.sdk/tm/php/test/StructRunner.php +275 -0
  319. package/project/.sdk/tm/php/test/StructUtilityTest.php +1336 -0
  320. package/project/.sdk/tm/php/utility/Clean.php +12 -0
  321. package/project/.sdk/tm/php/utility/Done.php +26 -0
  322. package/project/.sdk/tm/php/utility/FeatureAdd.php +12 -0
  323. package/project/.sdk/tm/php/utility/FeatureHook.php +23 -0
  324. package/project/.sdk/tm/php/utility/FeatureInit.php +25 -0
  325. package/project/.sdk/tm/php/utility/Fetcher.php +105 -0
  326. package/project/.sdk/tm/php/utility/MakeContext.php +14 -0
  327. package/project/.sdk/tm/php/utility/MakeError.php +59 -0
  328. package/project/.sdk/tm/php/utility/MakeFetchDef.php +36 -0
  329. package/project/.sdk/tm/php/utility/MakeOptions.php +102 -0
  330. package/project/.sdk/tm/php/utility/MakePoint.php +87 -0
  331. package/project/.sdk/tm/php/utility/MakeRequest.php +57 -0
  332. package/project/.sdk/tm/php/utility/MakeResponse.php +43 -0
  333. package/project/.sdk/tm/php/utility/MakeResult.php +53 -0
  334. package/project/.sdk/tm/php/utility/MakeSpec.php +64 -0
  335. package/project/.sdk/tm/php/utility/MakeUrl.php +41 -0
  336. package/project/.sdk/tm/php/utility/Param.php +68 -0
  337. package/project/.sdk/tm/php/utility/PrepareAuth.php +33 -0
  338. package/project/.sdk/tm/php/utility/PrepareBody.php +15 -0
  339. package/project/.sdk/tm/php/utility/PrepareHeaders.php +18 -0
  340. package/project/.sdk/tm/php/utility/PrepareMethod.php +21 -0
  341. package/project/.sdk/tm/php/utility/PrepareParams.php +34 -0
  342. package/project/.sdk/tm/php/utility/PreparePath.php +20 -0
  343. package/project/.sdk/tm/php/utility/PrepareQuery.php +32 -0
  344. package/project/.sdk/tm/php/utility/Register.php +67 -0
  345. package/project/.sdk/tm/php/utility/ResultBasic.php +29 -0
  346. package/project/.sdk/tm/php/utility/ResultBody.php +17 -0
  347. package/project/.sdk/tm/php/utility/ResultHeaders.php +21 -0
  348. package/project/.sdk/tm/php/utility/TransformRequest.php +27 -0
  349. package/project/.sdk/tm/php/utility/TransformResponse.php +42 -0
  350. package/project/.sdk/tm/php/utility/struct/Struct.php +3535 -0
  351. package/project/.sdk/tm/py/Makefile +10 -0
  352. package/project/.sdk/tm/py/core/__init__.py +0 -0
  353. package/project/.sdk/tm/py/core/context.py +199 -0
  354. package/project/.sdk/tm/py/core/control.py +12 -0
  355. package/project/.sdk/tm/py/core/error.py +18 -0
  356. package/project/.sdk/tm/py/core/helpers.py +15 -0
  357. package/project/.sdk/tm/py/core/operation.py +37 -0
  358. package/project/.sdk/tm/py/core/response.py +34 -0
  359. package/project/.sdk/tm/py/core/result.py +44 -0
  360. package/project/.sdk/tm/py/core/spec.py +23 -0
  361. package/project/.sdk/tm/py/core/utility_type.py +82 -0
  362. package/project/.sdk/tm/py/entity/__init__.py +0 -0
  363. package/project/.sdk/tm/py/feature/__init__.py +0 -0
  364. package/project/.sdk/tm/py/feature/base_feature.py +61 -0
  365. package/project/.sdk/tm/py/feature/log_feature.py +84 -0
  366. package/project/.sdk/tm/py/feature/test_feature.py +164 -0
  367. package/project/.sdk/tm/py/src/feature/README.md +3 -0
  368. package/project/.sdk/tm/py/src/feature/base/.gitkeep +0 -0
  369. package/project/.sdk/tm/py/src/feature/log/.gitkeep +0 -0
  370. package/project/.sdk/tm/py/src/feature/test/.gitkeep +0 -0
  371. package/project/.sdk/tm/py/test/__init__.py +0 -0
  372. package/project/.sdk/tm/py/test/runner.py +90 -0
  373. package/project/.sdk/tm/py/test/struct_runner.py +411 -0
  374. package/project/.sdk/tm/py/test/test_primary_utility.py +1101 -0
  375. package/project/.sdk/tm/py/test/test_struct_utility.py +751 -0
  376. package/project/.sdk/tm/py/utility/__init__.py +0 -0
  377. package/project/.sdk/tm/py/utility/clean.py +5 -0
  378. package/project/.sdk/tm/py/utility/done.py +14 -0
  379. package/project/.sdk/tm/py/utility/feature_add.py +6 -0
  380. package/project/.sdk/tm/py/utility/feature_hook.py +15 -0
  381. package/project/.sdk/tm/py/utility/feature_init.py +18 -0
  382. package/project/.sdk/tm/py/utility/fetcher.py +95 -0
  383. package/project/.sdk/tm/py/utility/make_context.py +7 -0
  384. package/project/.sdk/tm/py/utility/make_error.py +64 -0
  385. package/project/.sdk/tm/py/utility/make_fetch_def.py +37 -0
  386. package/project/.sdk/tm/py/utility/make_options.py +103 -0
  387. package/project/.sdk/tm/py/utility/make_point.py +74 -0
  388. package/project/.sdk/tm/py/utility/make_request.py +52 -0
  389. package/project/.sdk/tm/py/utility/make_response.py +36 -0
  390. package/project/.sdk/tm/py/utility/make_result.py +41 -0
  391. package/project/.sdk/tm/py/utility/make_spec.py +68 -0
  392. package/project/.sdk/tm/py/utility/make_url.py +34 -0
  393. package/project/.sdk/tm/py/utility/param.py +55 -0
  394. package/project/.sdk/tm/py/utility/prepare_auth.py +34 -0
  395. package/project/.sdk/tm/py/utility/prepare_body.py +11 -0
  396. package/project/.sdk/tm/py/utility/prepare_headers.py +17 -0
  397. package/project/.sdk/tm/py/utility/prepare_method.py +15 -0
  398. package/project/.sdk/tm/py/utility/prepare_params.py +28 -0
  399. package/project/.sdk/tm/py/utility/prepare_path.py +16 -0
  400. package/project/.sdk/tm/py/utility/prepare_query.py +33 -0
  401. package/project/.sdk/tm/py/utility/register.py +68 -0
  402. package/project/.sdk/tm/py/utility/result_basic.py +26 -0
  403. package/project/.sdk/tm/py/utility/result_body.py +13 -0
  404. package/project/.sdk/tm/py/utility/result_headers.py +17 -0
  405. package/project/.sdk/tm/py/utility/transform_request.py +27 -0
  406. package/project/.sdk/tm/py/utility/transform_response.py +39 -0
  407. package/project/.sdk/tm/py/utility/voxgig_struct/__init__.py +72 -0
  408. package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +2770 -0
  409. package/project/.sdk/tm/rb/Gemfile +4 -0
  410. package/project/.sdk/tm/rb/LICENSE +22 -0
  411. package/project/.sdk/tm/rb/Makefile +10 -0
  412. package/project/.sdk/tm/rb/core/context.rb +105 -0
  413. package/project/.sdk/tm/rb/core/control.rb +11 -0
  414. package/project/.sdk/tm/rb/core/error.rb +24 -0
  415. package/project/.sdk/tm/rb/core/helpers.rb +16 -0
  416. package/project/.sdk/tm/rb/core/operation.rb +26 -0
  417. package/project/.sdk/tm/rb/core/response.rb +20 -0
  418. package/project/.sdk/tm/rb/core/result.rb +23 -0
  419. package/project/.sdk/tm/rb/core/spec.rb +23 -0
  420. package/project/.sdk/tm/rb/core/utility_type.rb +32 -0
  421. package/project/.sdk/tm/rb/feature/base_feature.rb +30 -0
  422. package/project/.sdk/tm/rb/feature/log_feature.rb +50 -0
  423. package/project/.sdk/tm/rb/feature/test_feature.rb +154 -0
  424. package/project/.sdk/tm/rb/src/feature/README.md +3 -0
  425. package/project/.sdk/tm/rb/src/feature/base/.gitkeep +0 -0
  426. package/project/.sdk/tm/rb/src/feature/log/.gitkeep +0 -0
  427. package/project/.sdk/tm/rb/src/feature/test/.gitkeep +0 -0
  428. package/project/.sdk/tm/rb/test/primary_utility_test.rb +1083 -0
  429. package/project/.sdk/tm/rb/test/runner.rb +70 -0
  430. package/project/.sdk/tm/rb/test/struct_runner.rb +309 -0
  431. package/project/.sdk/tm/rb/test/struct_utility_test.rb +670 -0
  432. package/project/.sdk/tm/rb/utility/clean.rb +4 -0
  433. package/project/.sdk/tm/rb/utility/done.rb +14 -0
  434. package/project/.sdk/tm/rb/utility/feature_add.rb +6 -0
  435. package/project/.sdk/tm/rb/utility/feature_hook.rb +11 -0
  436. package/project/.sdk/tm/rb/utility/feature_init.rb +16 -0
  437. package/project/.sdk/tm/rb/utility/fetcher.rb +67 -0
  438. package/project/.sdk/tm/rb/utility/make_context.rb +7 -0
  439. package/project/.sdk/tm/rb/utility/make_error.rb +44 -0
  440. package/project/.sdk/tm/rb/utility/make_fetch_def.rb +24 -0
  441. package/project/.sdk/tm/rb/utility/make_options.rb +57 -0
  442. package/project/.sdk/tm/rb/utility/make_point.rb +77 -0
  443. package/project/.sdk/tm/rb/utility/make_request.rb +44 -0
  444. package/project/.sdk/tm/rb/utility/make_response.rb +25 -0
  445. package/project/.sdk/tm/rb/utility/make_result.rb +33 -0
  446. package/project/.sdk/tm/rb/utility/make_spec.rb +50 -0
  447. package/project/.sdk/tm/rb/utility/make_url.rb +32 -0
  448. package/project/.sdk/tm/rb/utility/param.rb +48 -0
  449. package/project/.sdk/tm/rb/utility/prepare_auth.rb +26 -0
  450. package/project/.sdk/tm/rb/utility/prepare_body.rb +6 -0
  451. package/project/.sdk/tm/rb/utility/prepare_headers.rb +11 -0
  452. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -0
  453. package/project/.sdk/tm/rb/utility/prepare_params.rb +25 -0
  454. package/project/.sdk/tm/rb/utility/prepare_path.rb +13 -0
  455. package/project/.sdk/tm/rb/utility/prepare_query.rb +22 -0
  456. package/project/.sdk/tm/rb/utility/register.rb +63 -0
  457. package/project/.sdk/tm/rb/utility/result_basic.rb +23 -0
  458. package/project/.sdk/tm/rb/utility/result_body.rb +11 -0
  459. package/project/.sdk/tm/rb/utility/result_headers.rb +15 -0
  460. package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +2256 -0
  461. package/project/.sdk/tm/rb/utility/transform_request.rb +15 -0
  462. package/project/.sdk/tm/rb/utility/transform_response.rb +23 -0
  463. package/src/cmp/Main.ts +1 -16
  464. package/src/cmp/Readme.ts +5 -5
  465. package/src/cmp/ReadmeEntity.ts +77 -25
  466. package/src/cmp/ReadmeExplanation.ts +333 -0
  467. package/src/cmp/ReadmeHowto.ts +28 -0
  468. package/src/cmp/ReadmeIntro.ts +10 -24
  469. package/src/cmp/ReadmeModel.ts +57 -88
  470. package/src/cmp/ReadmeOptions.ts +40 -11
  471. package/src/cmp/ReadmeQuick.ts +4 -1
  472. package/src/cmp/ReadmeRef.ts +1057 -40
  473. package/src/cmp/ReadmeTop.ts +213 -0
  474. package/src/sdkgen.ts +12 -0
  475. package/project/.sdk/src/cmp/js/Quick_js.ts +0 -78
  476. package/project/.sdk/src/cmp/js/TestAcceptEntity_js.ts +0 -13
  477. package/project/.sdk/src/cmp/js/TestAccept_js.ts +0 -18
  478. package/project/.sdk/tm/go/test/exists_test.go +0 -16
  479. package/project/.sdk/tm/js/src/utility/AuthUtility.js +0 -21
  480. package/project/.sdk/tm/js/src/utility/BodyUtility.js +0 -29
  481. package/project/.sdk/tm/js/src/utility/ErrorUtility.js +0 -33
  482. package/project/.sdk/tm/js/src/utility/FindparamUtility.js +0 -31
  483. package/project/.sdk/tm/js/src/utility/FullurlUtility.js +0 -39
  484. package/project/.sdk/tm/js/src/utility/HeadersUtility.js +0 -13
  485. package/project/.sdk/tm/js/src/utility/JoinurlUtility.js +0 -14
  486. package/project/.sdk/tm/js/src/utility/OperatorUtility.js +0 -44
  487. package/project/.sdk/tm/js/src/utility/OptionsUtility.js +0 -54
  488. package/project/.sdk/tm/js/src/utility/ParamsUtility.js +0 -21
  489. package/project/.sdk/tm/js/src/utility/QueryUtility.js +0 -21
  490. package/project/.sdk/tm/js/src/utility/ReqformUtility.js +0 -32
  491. package/project/.sdk/tm/js/src/utility/RequestUtility.js +0 -48
  492. package/project/.sdk/tm/js/src/utility/ResbasicUtility.js +0 -27
  493. package/project/.sdk/tm/js/src/utility/ResbodyUtility.js +0 -15
  494. package/project/.sdk/tm/js/src/utility/ResformUtility.js +0 -34
  495. package/project/.sdk/tm/js/src/utility/ResheadersUtility.js +0 -19
  496. package/project/.sdk/tm/js/src/utility/ResponseUtility.js +0 -37
  497. package/project/.sdk/tm/js/src/utility/ResultUtility.js +0 -28
  498. package/project/.sdk/tm/js/src/utility/SpecUtility.js +0 -35
@@ -0,0 +1,164 @@
1
+ # ProjectName SDK test feature
2
+
3
+ from __future__ import annotations
4
+ import random
5
+
6
+ from utility.voxgig_struct import voxgig_struct as vs
7
+ from feature.base_feature import ProjectNameBaseFeature
8
+
9
+
10
+ class ProjectNameTestFeature(ProjectNameBaseFeature):
11
+ def __init__(self):
12
+ super().__init__()
13
+ self.version = "0.0.1"
14
+ self.name = "test"
15
+ self.active = True
16
+ self.client = None
17
+ self.options = None
18
+
19
+ def init(self, ctx, options):
20
+ self.client = ctx.client
21
+ self.options = options
22
+
23
+ entity = vs.getprop(options, "entity")
24
+ if not isinstance(entity, dict):
25
+ entity = {}
26
+
27
+ self.client.mode = "test"
28
+
29
+ # Ensure entity ids are correct.
30
+ vs.walk(entity, lambda key, val, parent, path: (
31
+ val.__setitem__("id", key) if len(path) == 2 and isinstance(val, dict) and key is not None else None,
32
+ val
33
+ )[-1])
34
+
35
+ test_self = self
36
+
37
+ def test_fetcher(fctx, _fullurl, _fetchdef):
38
+ def respond(status, data, extra=None):
39
+ out = {
40
+ "status": status,
41
+ "statusText": "OK",
42
+ "json": lambda: data,
43
+ "body": "not-used",
44
+ }
45
+ if isinstance(extra, dict):
46
+ for k, v in extra.items():
47
+ out[k] = v
48
+ return out, None
49
+
50
+ op = fctx.op
51
+ entmap = vs.getprop(entity, op.entity)
52
+ if not isinstance(entmap, dict):
53
+ entmap = {}
54
+
55
+ if op.name == "load":
56
+ args = test_self.build_args(fctx, op, fctx.reqmatch)
57
+ found = vs.select(entmap, args)
58
+ ent = vs.getelem(found, 0)
59
+ if ent is None:
60
+ return respond(404, None, {"statusText": "Not found"})
61
+ vs.delprop(ent, "$KEY")
62
+ out = vs.clone(ent)
63
+ return respond(200, out)
64
+
65
+ elif op.name == "list":
66
+ args = test_self.build_args(fctx, op, fctx.reqmatch)
67
+ found = vs.select(entmap, args)
68
+ if found is None:
69
+ return respond(404, None, {"statusText": "Not found"})
70
+ if isinstance(found, list):
71
+ for item in found:
72
+ vs.delprop(item, "$KEY")
73
+ out = vs.clone(found)
74
+ return respond(200, out)
75
+
76
+ elif op.name == "update":
77
+ args = test_self.build_args(fctx, op, fctx.reqdata)
78
+ found = vs.select(entmap, args)
79
+ ent = vs.getelem(found, 0)
80
+ if ent is None:
81
+ return respond(404, None, {"statusText": "Not found"})
82
+ if isinstance(ent, dict):
83
+ reqdata = fctx.reqdata
84
+ if reqdata is not None:
85
+ for k, v in reqdata.items():
86
+ ent[k] = v
87
+ vs.delprop(ent, "$KEY")
88
+ out = vs.clone(ent)
89
+ return respond(200, out)
90
+
91
+ elif op.name == "remove":
92
+ args = test_self.build_args(fctx, op, fctx.reqmatch)
93
+ found = vs.select(entmap, args)
94
+ ent = vs.getelem(found, 0)
95
+ if ent is None:
96
+ return respond(404, None, {"statusText": "Not found"})
97
+ if isinstance(ent, dict):
98
+ eid = vs.getprop(ent, "id")
99
+ vs.delprop(entmap, eid)
100
+ return respond(200, None)
101
+
102
+ elif op.name == "create":
103
+ test_self.build_args(fctx, op, fctx.reqdata)
104
+ eid = fctx.utility.param(fctx, "id")
105
+ if eid is None:
106
+ eid = "%04x%04x%04x%04x" % (
107
+ random.randint(0, 0xFFFF), random.randint(0, 0xFFFF),
108
+ random.randint(0, 0xFFFF), random.randint(0, 0xFFFF))
109
+
110
+ ent = vs.clone(fctx.reqdata)
111
+ if isinstance(ent, dict):
112
+ ent["id"] = eid
113
+ if isinstance(eid, str):
114
+ entmap[eid] = ent
115
+ vs.delprop(ent, "$KEY")
116
+ out = vs.clone(ent)
117
+ return respond(200, out)
118
+ return respond(200, ent)
119
+
120
+ return respond(404, None, {"statusText": "Unknown operation"})
121
+
122
+ ctx.utility.fetcher = test_fetcher
123
+
124
+ def build_args(self, ctx, op, args):
125
+ opname = op.name
126
+
127
+ # Get last point from config.
128
+ points = vs.getpath(ctx.config, "entity." + ctx.entity.get_name() + ".op." + opname + ".points")
129
+ point = vs.getelem(points, -1)
130
+
131
+ # Get required params.
132
+ params_path = vs.getpath(point, "args.params")
133
+ reqd_params = vs.select(params_path, {"reqd": True})
134
+ reqd = vs.transform(reqd_params, ["`$EACH`", "", "`$KEY.name`"])
135
+
136
+ qand = []
137
+ q = {"`$AND`": qand}
138
+
139
+ if args is not None:
140
+ keys = vs.keysof(args)
141
+ if keys is not None:
142
+ for key in keys:
143
+ is_id = (key == "id")
144
+ selected = vs.select(reqd, key)
145
+ is_reqd = not vs.isempty(selected)
146
+
147
+ if is_id or is_reqd:
148
+ v = ctx.utility.param(ctx, key)
149
+ ka = None
150
+ if op.alias is not None:
151
+ ka = vs.getprop(op.alias, key)
152
+
153
+ qor = [{key: v}]
154
+ if ka is not None and isinstance(ka, str):
155
+ qor.append({ka: v})
156
+
157
+ qand.append({"`$OR`": qor})
158
+
159
+ q["`$AND`"] = qand
160
+
161
+ if ctx.ctrl.explain is not None:
162
+ ctx.ctrl.explain["test"] = {"query": q}
163
+
164
+ return q
@@ -0,0 +1,3 @@
1
+ # Features
2
+
3
+ This folder contains the feature source templates.
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,90 @@
1
+ # ProjectName SDK test runner
2
+
3
+ from __future__ import annotations
4
+ import os
5
+ import json
6
+
7
+ from utility.voxgig_struct import voxgig_struct as vs
8
+
9
+
10
+ class ProjectNameTestRunner:
11
+ _env = {}
12
+
13
+ @staticmethod
14
+ def load_env_local():
15
+ try:
16
+ with open("../../.env.local", "r") as f:
17
+ content = f.read()
18
+ except (FileNotFoundError, IOError):
19
+ return
20
+
21
+ for line in content.splitlines():
22
+ line = line.strip()
23
+ if line == "" or line.startswith("#"):
24
+ continue
25
+ eq_idx = line.find("=")
26
+ if eq_idx < 0:
27
+ continue
28
+ key = line[:eq_idx].strip()
29
+ val = line[eq_idx + 1:].strip()
30
+ ProjectNameTestRunner._env[key] = val
31
+
32
+ @staticmethod
33
+ def getenv(key):
34
+ val = ProjectNameTestRunner._env.get(key)
35
+ if val is not None:
36
+ return val
37
+ return os.environ.get(key)
38
+
39
+ @staticmethod
40
+ def env_override(m):
41
+ live = ProjectNameTestRunner.getenv("PROJECTNAME_TEST_LIVE")
42
+ override = ProjectNameTestRunner.getenv("PROJECTNAME_TEST_OVERRIDE")
43
+
44
+ if live == "TRUE" or override == "TRUE":
45
+ for key in list(m.keys()):
46
+ envval = ProjectNameTestRunner.getenv(key)
47
+ if envval is not None and envval != "":
48
+ envval = envval.strip()
49
+ if envval.startswith("{"):
50
+ try:
51
+ parsed = json.loads(envval)
52
+ if parsed is not None:
53
+ m[key] = parsed
54
+ continue
55
+ except Exception:
56
+ pass
57
+ m[key] = envval
58
+
59
+ explain = ProjectNameTestRunner.getenv("PROJECTNAME_TEST_EXPLAIN")
60
+ if explain is not None and explain != "":
61
+ m["PROJECTNAME_TEST_EXPLAIN"] = explain
62
+
63
+ return m
64
+
65
+ @staticmethod
66
+ def entity_list_to_data(lst):
67
+ out = []
68
+ for item in lst:
69
+ if isinstance(item, dict):
70
+ out.append(item)
71
+ elif hasattr(item, "data_get") and callable(item.data_get):
72
+ d = item.data_get()
73
+ if isinstance(d, dict):
74
+ out.append(d)
75
+ else:
76
+ out.append(item)
77
+ return out
78
+
79
+
80
+ # Module-level convenience functions.
81
+ def load_env_local():
82
+ ProjectNameTestRunner.load_env_local()
83
+
84
+
85
+ def env_override(m):
86
+ return ProjectNameTestRunner.env_override(m)
87
+
88
+
89
+ def entity_list_to_data(lst):
90
+ return ProjectNameTestRunner.entity_list_to_data(lst)
@@ -0,0 +1,411 @@
1
+ # Vendored from voxgig/struct/py
2
+ # Test runner that uses the test model in build/test.
3
+
4
+ import os
5
+ import json
6
+ import re
7
+ from typing import Any, Dict, List, Callable, TypedDict, Optional, Union
8
+
9
+ from utility.voxgig_struct import voxgig_struct as vs
10
+
11
+
12
+ NULLMARK = '__NULL__' # Value is JSON null
13
+ UNDEFMARK = '__UNDEF__' # Value is not present (thus, undefined)
14
+ EXISTSMARK = '__EXISTS__' # Value exists (not undefined).
15
+
16
+
17
+ class RunPack(TypedDict):
18
+ spec: Dict[str, Any]
19
+ runset: Callable
20
+ runsetflags: Callable
21
+ subject: Callable
22
+ client: Optional[Any]
23
+
24
+
25
+ def makeRunner(testfile: str, client: Any):
26
+
27
+ def runner(
28
+ name: str,
29
+ store: Any = None,
30
+ ) -> RunPack:
31
+ store = store or {}
32
+
33
+ utility = client.utility()
34
+ structUtils = utility.struct
35
+
36
+ spec = resolve_spec(name, testfile)
37
+ clients = resolve_clients(client, spec, store, structUtils)
38
+ subject = resolve_subject(name, utility)
39
+
40
+ def runsetflags(testspec, flags, testsubject):
41
+ nonlocal subject, clients
42
+
43
+ subject = testsubject or subject
44
+ flags = resolve_flags(flags)
45
+ testspecmap = fixJSON(testspec, flags)
46
+ testset = testspecmap['set']
47
+
48
+ for entry in testset:
49
+ try:
50
+ entry = resolve_entry(entry, flags)
51
+
52
+ testpack = resolve_testpack(name, entry, subject, client, clients)
53
+ args = resolve_args(entry, testpack, utility, structUtils)
54
+
55
+ # Execute the test function
56
+ res = testpack["subject"](*args)
57
+ res = fixJSON(res, flags)
58
+ entry['res'] = res
59
+ check_result(entry, args, res, structUtils)
60
+
61
+ except Exception as err:
62
+ handle_error(entry, err, structUtils)
63
+
64
+ def runset(testspec, testsubject):
65
+ return runsetflags(testspec, {}, testsubject)
66
+
67
+ runpack = {
68
+ "spec": spec,
69
+ "runset": runset,
70
+ "runsetflags": runsetflags,
71
+ "subject": subject,
72
+ "client": client
73
+ }
74
+
75
+ return runpack
76
+
77
+ return runner
78
+
79
+
80
+ def resolve_spec(name: str, testfile: str) -> Dict[str, Any]:
81
+ with open(testfile, 'r', encoding='utf-8') as f:
82
+ alltests = json.load(f)
83
+
84
+ if 'primary' in alltests and name in alltests['primary']:
85
+ spec = alltests['primary'][name]
86
+ elif name in alltests:
87
+ spec = alltests[name]
88
+ else:
89
+ spec = alltests
90
+
91
+ return spec
92
+
93
+
94
+ def resolve_clients(client: Any, spec: Dict[str, Any], store: Any, structUtils: Any) -> Dict[str, Any]:
95
+ clients = {}
96
+ if 'DEF' in spec and 'client' in spec['DEF']:
97
+ for client_name, client_val in structUtils.items(spec['DEF']['client']):
98
+ # Get client options
99
+ client_opts = client_val.get('test', {}).get('options', {})
100
+
101
+ # Apply store injections if needed
102
+ if isinstance(store, dict) and structUtils.inject:
103
+ structUtils.inject(client_opts, store)
104
+
105
+ # Create and store the client using the passed client object
106
+ clients[client_name] = client.tester(client_opts)
107
+
108
+ return clients
109
+
110
+
111
+ def resolve_subject(name: str, container: Any):
112
+ return getattr(container, name, getattr(container.struct, name, None))
113
+
114
+
115
+ def check_result(entry, args, res, structUtils):
116
+ matched = False
117
+
118
+ if 'match' in entry:
119
+ result = {'in': entry.get('in'), 'args': args, 'out': entry.get('res'), 'ctx': entry.get('ctx')}
120
+ match(
121
+ entry['match'],
122
+ result,
123
+ structUtils
124
+ )
125
+ matched = True
126
+
127
+ out = entry.get('out')
128
+
129
+ if out == res:
130
+ return
131
+
132
+ # NOTE: allow match with no out
133
+ if matched and (NULLMARK == out or out is None):
134
+ return
135
+
136
+ try:
137
+ cleaned_res = json.loads(json.dumps(res, default=str))
138
+ except:
139
+ # If can't be serialized just use the original
140
+ cleaned_res = res
141
+
142
+ # Compare result with expected output using deep equality
143
+ if cleaned_res != out:
144
+ raise AssertionError(
145
+ f"Expected: {out}, got: {cleaned_res}\n"
146
+ f"Test: {entry.get('name', 'unknown')}"
147
+ )
148
+
149
+
150
+ def handle_error(entry, err, structUtils):
151
+ # Record the error in the entry
152
+ entry['thrown'] = err
153
+ entry_err = entry.get('err')
154
+
155
+ # If the test expects an error
156
+ if entry_err is not None:
157
+ # If it's any error or matches expected pattern
158
+ if entry_err is True or matchval(entry_err, str(err), structUtils):
159
+ # If we also need to match error details
160
+ if 'match' in entry:
161
+ match(
162
+ entry['match'],
163
+ {
164
+ 'in': entry.get('in'),
165
+ 'out': entry.get('res'),
166
+ 'ctx': entry.get('ctx'),
167
+ 'err': fixJSON(err)
168
+ },
169
+ structUtils
170
+ )
171
+ # Error was expected, continue
172
+ return True
173
+
174
+ # Expected error didn't match the actual error
175
+ raise AssertionError(
176
+ f"ERROR MATCH: [{structUtils.stringify(entry_err)}] <=> [{str(err)}]"
177
+ )
178
+ # If the test doesn't expect an error
179
+ elif isinstance(err, AssertionError):
180
+ # Propagate assertion errors with added context
181
+ raise AssertionError(
182
+ f"{str(err)}\nTest: {entry.get('name', 'unknown')}"
183
+ )
184
+ else:
185
+ # For other errors, include the full error stack
186
+ import traceback
187
+ raise AssertionError(
188
+ f"{traceback.format_exc()}\nTest: {entry.get('name', 'unknown')}"
189
+ )
190
+
191
+
192
+ def resolve_testpack(
193
+ name,
194
+ entry,
195
+ subject,
196
+ client,
197
+ clients,
198
+ ):
199
+ testpack = {
200
+ "client": client,
201
+ "subject": subject,
202
+ "utility": client.utility(),
203
+ }
204
+
205
+ if 'client' in entry:
206
+ testpack["client"] = clients[entry['client']]
207
+ testpack["utility"] = testpack["client"].utility()
208
+ testpack["subject"] = resolve_subject(name, testpack["utility"])
209
+
210
+ return testpack
211
+
212
+
213
+ def resolve_args(entry, testpack, utility, structUtils):
214
+ args = []
215
+
216
+ if 'ctx' in entry:
217
+ args = [entry['ctx']]
218
+ elif 'args' in entry:
219
+ args = entry['args']
220
+ elif 'in' in entry:
221
+ args = [structUtils.clone(entry['in'])]
222
+
223
+ # If we have context or arguments, we might need to patch them
224
+ if ('ctx' in entry or 'args' in entry) and len(args) > 0:
225
+ first = args[0]
226
+ if structUtils.ismap(first):
227
+ # Clone the argument
228
+ first = structUtils.clone(first)
229
+ first = utility.contextify(first)
230
+ args[0] = first
231
+ entry['ctx'] = first
232
+ first.client = testpack["client"]
233
+ first.utility = testpack["utility"]
234
+
235
+ return args
236
+
237
+
238
+ def resolve_flags(flags: Dict[str, Any] = None) -> Dict[str, bool]:
239
+ if flags is None:
240
+ flags = {}
241
+
242
+ flags["null"] = flags.get("null", True)
243
+
244
+ return flags
245
+
246
+
247
+ def resolve_entry(entry: Dict[str, Any], flags: Dict[str, bool]) -> Dict[str, Any]:
248
+ # Set default output value for missing 'out' field
249
+ if 'out' not in entry and flags.get("null", True):
250
+ entry["out"] = NULLMARK
251
+
252
+ return entry
253
+
254
+
255
+ def fixJSON(obj, flags={}):
256
+ # Handle nulls
257
+ if obj is None:
258
+ return NULLMARK if flags.get("null", True) else None
259
+
260
+ # Handle errors
261
+ if isinstance(obj, Exception):
262
+ return {
263
+ **vars(obj),
264
+ 'name': type(obj).__name__,
265
+ 'message': str(obj)
266
+ }
267
+
268
+ # Handle collections recursively
269
+ elif isinstance(obj, list):
270
+ return [fixJSON(item, flags) for item in obj]
271
+ elif isinstance(obj, dict):
272
+ return {k: fixJSON(v, flags) for k, v in obj.items()}
273
+
274
+ # Return everything else unchanged
275
+ return obj
276
+
277
+
278
+ def jsonfallback(obj):
279
+ return f"<non-serializable: {type(obj).__name__}>"
280
+
281
+
282
+ def match(check, base, structUtils):
283
+ base = structUtils.clone(base)
284
+
285
+ # Use walk function to iterate through the check structure
286
+ def walk_apply(_key, val, _parent, path):
287
+ if not structUtils.isnode(val):
288
+ baseval = structUtils.getpath(base, path)
289
+
290
+ if baseval == val:
291
+ return val
292
+
293
+ # Explicit undefined expected
294
+ if UNDEFMARK == val and baseval is None:
295
+ return val
296
+
297
+ # Explicit defined expected
298
+ if EXISTSMARK == val and baseval is not None:
299
+ return val
300
+
301
+ if not matchval(val, baseval, structUtils):
302
+ raise AssertionError(
303
+ f"MATCH: {'.'.join(map(str, path))}: "
304
+ f"[{structUtils.stringify(val)}] <=> [{structUtils.stringify(baseval)}]"
305
+ )
306
+ return val
307
+
308
+ # Use walk to apply the check function to each node
309
+ structUtils.walk(check, walk_apply)
310
+
311
+
312
+ def matchval(check, base, structUtils):
313
+ # Handle undefined special case
314
+ if check == '__UNDEF__' or check == NULLMARK:
315
+ check = None
316
+
317
+ if check == base:
318
+ return True
319
+
320
+ # String-based pattern matching
321
+ if isinstance(check, str):
322
+ # Convert base to string for comparison
323
+ base_str = structUtils.stringify(base)
324
+
325
+ # Check for regex pattern with /pattern/ syntax
326
+ regex_match = re.match(r'^/(.+)/$', check)
327
+
328
+ if regex_match:
329
+ pattern = regex_match.group(1)
330
+ return re.search(pattern, base_str) is not None
331
+ else:
332
+ # Case-insensitive substring check
333
+ return structUtils.stringify(check).lower() in base_str.lower()
334
+
335
+ # Functions automatically pass
336
+ elif callable(check):
337
+ return True
338
+
339
+ # No match
340
+ return False
341
+
342
+
343
+ def nullModifier(val, key, parent, _state=None, _current=None, _store=None):
344
+ if NULLMARK == val:
345
+ parent[key] = None
346
+ elif isinstance(val, str):
347
+ parent[key] = val.replace(NULLMARK, "null")
348
+
349
+
350
+ # StructTestClient shim for running struct tests in the SDK context.
351
+ # Wraps voxgig_struct as the struct utility, providing the client
352
+ # interface expected by the runner.
353
+
354
+ class StructContext:
355
+ def __init__(self):
356
+ self.client = None
357
+ self.utility = None
358
+ self.meta = {}
359
+
360
+
361
+ class StructTestUtility:
362
+ def __init__(self, opts=None):
363
+ self._opts = opts
364
+ self.struct = vs.StructUtility()
365
+
366
+ def contextify(self, ctxmap):
367
+ ctx = StructContext()
368
+ meta = ctxmap.get('meta', {})
369
+ for k, v in meta.items():
370
+ ctx.meta[k] = v
371
+ return ctx
372
+
373
+ def check(self, ctx):
374
+ zed = "ZED"
375
+
376
+ if self._opts is None:
377
+ zed += ""
378
+ else:
379
+ foo = self._opts.get("foo")
380
+ zed += "0" if foo is None else str(foo)
381
+
382
+ zed += "_"
383
+ zed += str(ctx.meta.get("bar"))
384
+
385
+ return {"zed": zed}
386
+
387
+
388
+ class StructTestClient:
389
+ def __init__(self, opts=None):
390
+ self._opts = opts or {}
391
+ self._utility = StructTestUtility(opts)
392
+
393
+ @staticmethod
394
+ def test(opts=None):
395
+ return StructTestClient(opts)
396
+
397
+ def tester(self, opts=None):
398
+ return StructTestClient(self._opts if opts is None else opts)
399
+
400
+ def utility(self):
401
+ return self._utility
402
+
403
+
404
+ # Export the necessary components similar to TypeScript
405
+ __all__ = [
406
+ 'NULLMARK',
407
+ 'UNDEFMARK',
408
+ 'nullModifier',
409
+ 'makeRunner',
410
+ 'StructTestClient',
411
+ ]