@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,86 @@
1
+ -- ProjectName SDK test runner
2
+
3
+ local json = require("dkjson")
4
+ local vs = require("utility.struct.struct")
5
+
6
+ local runner = {}
7
+
8
+
9
+ function runner.load_env_local()
10
+ local f = io.open("../../.env.local", "r")
11
+ if f == nil then
12
+ return
13
+ end
14
+ local content = f:read("*a")
15
+ f:close()
16
+ for raw_line in content:gmatch("[^\r\n]+") do
17
+ local line = raw_line:match("^%s*(.-)%s*$")
18
+ if line ~= "" and not line:match("^#") then
19
+ local key, val = line:match("^([^=]+)=(.*)$")
20
+ if key and val then
21
+ key = key:match("^%s*(.-)%s*$")
22
+ val = val:match("^%s*(.-)%s*$")
23
+ -- Set as env variable (platform-dependent, stored in table)
24
+ runner._env[key] = val
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ runner._env = {}
31
+
32
+ function runner.getenv(key)
33
+ return runner._env[key] or os.getenv(key)
34
+ end
35
+
36
+
37
+ function runner.env_override(m)
38
+ local live = runner.getenv("PROJECTNAME_TEST_LIVE")
39
+ local override = runner.getenv("PROJECTNAME_TEST_OVERRIDE")
40
+
41
+ if live == "TRUE" or override == "TRUE" then
42
+ for key, _ in pairs(m) do
43
+ local envval = runner.getenv(key)
44
+ if envval ~= nil and envval ~= "" then
45
+ envval = envval:match("^%s*(.-)%s*$")
46
+ if envval:sub(1, 1) == "{" then
47
+ local parsed = json.decode(envval)
48
+ if parsed ~= nil then
49
+ m[key] = parsed
50
+ goto continue
51
+ end
52
+ end
53
+ m[key] = envval
54
+ ::continue::
55
+ end
56
+ end
57
+ end
58
+
59
+ local explain = runner.getenv("PROJECTNAME_TEST_EXPLAIN")
60
+ if explain ~= nil and explain ~= "" then
61
+ m["PROJECTNAME_TEST_EXPLAIN"] = explain
62
+ end
63
+
64
+ return m
65
+ end
66
+
67
+
68
+ function runner.entity_list_to_data(list)
69
+ local out = {}
70
+ for _, item in ipairs(list) do
71
+ if type(item) == "table" then
72
+ if type(item.data_get) == "function" then
73
+ local d = item:data_get()
74
+ if type(d) == "table" then
75
+ table.insert(out, d)
76
+ end
77
+ else
78
+ table.insert(out, item)
79
+ end
80
+ end
81
+ end
82
+ return out
83
+ end
84
+
85
+
86
+ return runner
@@ -0,0 +1,602 @@
1
+ -- Vendored from voxgig/struct/lua
2
+
3
+ local json = require("dkjson")
4
+ local lfs = require("lfs")
5
+ local luassert = require("luassert")
6
+
7
+ local vs = require("utility.struct.struct")
8
+
9
+
10
+ local NULLMARK = "__NULL__" -- Value is JSON null
11
+ local UNDEFMARK = "__UNDEF__" -- Value is not present (thus undefined)
12
+ local EXISTSMARK = "__EXISTS__" -- Value exists (not undefined)
13
+
14
+ -- Unique sentinel for JSON null (distinguishes from the literal string "null")
15
+ local JSON_NULL = setmetatable({}, { __tostring = function() return "null" end })
16
+
17
+
18
+ ----------------------------------------------------------
19
+ -- Utility Functions
20
+ ----------------------------------------------------------
21
+
22
+ -- Read file contents synchronously
23
+ -- @param path (string) The path to the file
24
+ -- @return (string) The contents of the file
25
+ local function readFileSync(path)
26
+ local file = io.open(path, "r")
27
+ if not file then
28
+ error("Cannot open file: " .. path)
29
+ end
30
+ local content = file:read("*a")
31
+ file:close()
32
+ return content
33
+ end
34
+
35
+
36
+ -- Join path segments with forward slashes
37
+ -- @param ... (string) Path segments to join
38
+ -- @return (string) Joined path
39
+ local function join(...)
40
+ return table.concat({ ... }, "/")
41
+ end
42
+
43
+
44
+ -- Assert failure with message
45
+ -- @param msg (string) Failure message
46
+ local function fail(msg)
47
+ luassert(false, msg)
48
+ end
49
+
50
+
51
+ -- Deep equality check between two values
52
+ -- @param actual (any) The actual value
53
+ -- @param expected (any) The expected value
54
+ local function deepEqual(actual, expected)
55
+ luassert.same(expected, actual)
56
+ end
57
+
58
+ ----------------------------------------------------------
59
+ -- forward declarations
60
+ ----------------------------------------------------------
61
+ local resolveSpec
62
+ local resolveClients
63
+ local resolveSubject
64
+ local resolveFlags
65
+ local resolveEntry
66
+ local resolveTestPack
67
+ local resolveArgs
68
+ local fixJSON
69
+ local checkResult
70
+ local handleError
71
+ local match
72
+ local matchval
73
+
74
+
75
+
76
+ -- Creates a runner function that can be used to run tests
77
+ -- @param testfile (string) The path to the test file
78
+ -- @param client (table) The client instance to use
79
+ -- @return (function) A runner function
80
+ local function makeRunner(testfile, client)
81
+ -- Main test runner function
82
+ -- @param name (string) The name of the test
83
+ -- @param store (table) Store with configuration values
84
+ -- @return (table) The runner pack with test functions
85
+ local function runner(name, store)
86
+ store = store or {}
87
+
88
+ local utility = client:utility()
89
+ local structUtils = utility.struct
90
+
91
+ local spec = resolveSpec(name, testfile)
92
+ local clients = resolveClients(client, spec, store, structUtils)
93
+ local subject = resolveSubject(name, utility)
94
+
95
+ -- Run test set with flags
96
+ -- @param testspec (table) The test specification
97
+ -- @param flags (table) Processing flags
98
+ -- @param testsubject (function) Optional test subject override
99
+ local function runsetflags(testspec, flags, testsubject)
100
+ subject = testsubject or subject
101
+ flags = resolveFlags(flags)
102
+
103
+ -- Lua has no undefined value; skip entries where 'in' or 'out' is absent.
104
+ -- Must check before fixJSON since fixJSON may convert JSON_NULL to nil.
105
+ local rawset = testspec.set
106
+ local filteredset = {}
107
+ setmetatable(filteredset, getmetatable(rawset) or { __jsontype = "array" })
108
+ for _, entry in ipairs(rawset) do
109
+ if entry["in"] ~= nil or entry.args ~= nil or entry.ctx ~= nil then
110
+ table.insert(filteredset, entry)
111
+ end
112
+ end
113
+ testspec = { set = filteredset }
114
+
115
+ local testspecmap = fixJSON(testspec, flags)
116
+
117
+ local testset = testspecmap.set
118
+ for _, entry in ipairs(testset) do
119
+ local current_entry = entry
120
+ local success, err = pcall(function()
121
+ current_entry = resolveEntry(current_entry, flags)
122
+
123
+ local testpack = resolveTestPack(name, current_entry, subject, client, clients)
124
+ local args = resolveArgs(current_entry, testpack, utility, structUtils)
125
+
126
+ local res = testpack.subject(table.unpack(args))
127
+ res = fixJSON(res, flags)
128
+ current_entry.res = res
129
+
130
+ checkResult(current_entry, args, res, structUtils)
131
+ end)
132
+
133
+ if not success then
134
+ handleError(current_entry, err, structUtils)
135
+ end
136
+ end
137
+ end
138
+
139
+ -- Run test set with default flags
140
+ -- @param testspec (table) The test specification
141
+ -- @param testsubject (function) Optional test subject override
142
+ local function runset(testspec, testsubject)
143
+ return runsetflags(testspec, {}, testsubject)
144
+ end
145
+
146
+ local runpack = {
147
+ spec = spec,
148
+ runset = runset,
149
+ runsetflags = runsetflags,
150
+ subject = subject,
151
+ client = client
152
+ }
153
+
154
+ return runpack
155
+ end
156
+
157
+ return runner
158
+ end
159
+
160
+
161
+
162
+ -- Resolve the test specification from a file
163
+ -- @param name (string) The name of the test specification
164
+ -- @param testfile (string) The path to the test file
165
+ -- @return (table) The resolved test specification
166
+ resolveSpec = function(name, testfile)
167
+ local alltests = json.decode(readFileSync(join(lfs.currentdir(), testfile)),
168
+ 1, JSON_NULL)
169
+ local spec =
170
+ (alltests.primary and alltests.primary[name]) or (alltests[name]) or
171
+ alltests
172
+ return spec
173
+ end
174
+
175
+
176
+ -- Resolve client instances based on specification
177
+ -- @param spec (table) The test specification
178
+ -- @param store (table) Store with configuration values
179
+ -- @param structUtils (table) Structure utility functions
180
+ -- @param baseClient (table) The base client instance
181
+ -- @return (table) Table of resolved client instances
182
+ resolveClients = function(client, spec, store, structUtils)
183
+ local clients = {}
184
+
185
+ if spec.DEF and spec.DEF.client then
186
+ for cn in pairs(spec.DEF.client) do
187
+ local cdef = spec.DEF.client[cn]
188
+ local copts = cdef.test.options or {}
189
+ if structUtils.ismap(store) and structUtils.inject then
190
+ structUtils.inject(copts, store)
191
+ end
192
+ -- Use the tester method on the base client to create new test clients
193
+ clients[cn] = client:tester(copts)
194
+ end
195
+ end
196
+ return clients
197
+ end
198
+
199
+
200
+ -- Resolve the test subject function
201
+ -- @param name (string) The name of the subject to resolve
202
+ -- @param container (table) The container object (Utility)
203
+ -- @return (function) The resolved subject function
204
+ resolveSubject = function(name, container)
205
+ local subject = container[name] or container.struct[name]
206
+ return subject
207
+ end
208
+
209
+
210
+ -- Resolve test flags with defaults
211
+ -- @param flags (table) Input flags
212
+ -- @return (table) Resolved flags with defaults applied
213
+ resolveFlags = function(flags)
214
+ if flags == nil then
215
+ flags = {}
216
+ end
217
+ if flags.null == nil then
218
+ flags.null = true
219
+ else
220
+ flags.null = not not flags.null -- Convert to boolean
221
+ end
222
+ return flags
223
+ end
224
+
225
+
226
+ -- Prepare a test entry with the given flags
227
+ -- @param entry (table) The test entry
228
+ -- @param flags (table) Processing flags
229
+ -- @return (table) The processed entry
230
+ resolveEntry = function(entry, flags)
231
+ entry.out = (entry.out == nil and flags.null) and NULLMARK or entry.out
232
+ return entry
233
+ end
234
+
235
+
236
+ -- Check the result of a test against expectations
237
+ -- @param entry (table) The test entry
238
+ -- @param args (table) The test arguments
239
+ -- @param res (any) The test result
240
+ -- @param structUtils (table) Structure utility functions
241
+ checkResult = function(entry, args, res, structUtils)
242
+ local matched = false
243
+
244
+ -- If expected error but none thrown, fail
245
+ if entry.err then
246
+ fail('Expected error did not occur: ' .. structUtils.stringify(entry.err))
247
+ return
248
+ end
249
+
250
+ -- If there's a match pattern, verify it first
251
+ if entry.match then
252
+ local result = {
253
+ ["in"] = entry["in"],
254
+ args = args,
255
+ out = entry.res,
256
+ ctx = entry.ctx
257
+ }
258
+ match(entry.match, result, structUtils)
259
+ matched = true
260
+ end
261
+
262
+ local out = entry.out
263
+
264
+ -- If direct equality, we're done
265
+ if out == res then
266
+ return
267
+ end
268
+
269
+ -- If we matched and out is null or nil, we're done
270
+ if matched and (out == NULLMARK or out == nil) then
271
+ return
272
+ end
273
+
274
+ -- Otherwise, verify deep equality.
275
+ -- Round-trip through JSON to normalize (matches TS behavior).
276
+ if res ~= nil then
277
+ local json_str = json.encode(res)
278
+ local decoded = json.decode(json_str, 1, JSON_NULL)
279
+ deepEqual(decoded, out)
280
+ else
281
+ deepEqual(res, out)
282
+ end
283
+ end
284
+
285
+
286
+ -- Handle errors during test execution
287
+ -- @param entry (table) The test entry
288
+ -- @param err (any) The error that occurred
289
+ -- @param structUtils (table) Structure utility functions
290
+ handleError = function(entry, err, structUtils)
291
+ entry.thrown = err
292
+
293
+ local entry_err = entry.err
294
+ local err_message = (type(err) == "table" and err.message) or tostring(err)
295
+
296
+ if entry_err ~= nil then
297
+ if entry_err == true or matchval(entry_err, err_message, structUtils) then
298
+ if entry.match then
299
+ -- Process the error with fixJSON before matching
300
+ local processed_err = fixJSON(err, { null = true })
301
+ match(
302
+ entry.match,
303
+ {
304
+ ["in"] = entry["in"],
305
+ out = entry.res,
306
+ ctx = entry.ctx,
307
+ err = processed_err
308
+ },
309
+ structUtils
310
+ )
311
+ end
312
+ return
313
+ end
314
+
315
+ fail("ERROR MATCH: [" .. structUtils.stringify(entry_err) .. "] <=> [" ..
316
+ err_message .. "]")
317
+ else
318
+ -- fail((err.stack or err_message) .. "\n\nENTRY: " .. inspect(entry))
319
+ fail((err.stack or err_message))
320
+ end
321
+ end
322
+
323
+
324
+ -- Prepare test arguments
325
+ -- @param entry (table) The test entry
326
+ -- @param testpack (table) The test pack with client and utility
327
+ -- @return (table) Array of arguments for the test
328
+ resolveArgs = function(entry, testpack, utility, structUtils)
329
+ local args = {}
330
+
331
+ if entry.ctx then
332
+ args = { entry.ctx }
333
+ elseif entry.args then
334
+ args = entry.args
335
+ else
336
+ args = { structUtils.clone(entry["in"]) }
337
+ end
338
+
339
+ if entry.ctx or entry.args then
340
+ local first = args[1]
341
+ if structUtils.ismap(first) then
342
+ first = structUtils.clone(first)
343
+ first = utility.contextify(first)
344
+ args[1] = first
345
+ entry.ctx = first
346
+
347
+ first.client = testpack.client
348
+ first.utility = testpack.utility
349
+ end
350
+ end
351
+
352
+ return args
353
+ end
354
+
355
+
356
+ -- Resolve the test pack with client and subject
357
+ -- @param name (string) The name of the test
358
+ -- @param entry (table) The test entry
359
+ -- @param subject (function) The test subject function
360
+ -- @param client (table) The default client
361
+ -- @param clients (table) Table of available clients
362
+ -- @return (table) The resolved test pack
363
+ resolveTestPack = function(name, entry, subject, client, clients)
364
+ local testpack = {
365
+ name = name,
366
+ client = client,
367
+ subject = subject,
368
+ utility = client:utility()
369
+ }
370
+
371
+ if entry.client then
372
+ testpack.client = clients[entry.client]
373
+ testpack.utility = testpack.client:utility()
374
+ testpack.subject = resolveSubject(name, testpack.utility)
375
+ end
376
+
377
+ return testpack
378
+ end
379
+
380
+
381
+ -- Match a check structure against a base structure
382
+ -- @param check (table) The check structure with patterns
383
+ -- @param base (table) The base structure to validate against
384
+ -- @param structUtils (table) Structure utility functions
385
+ match = function(check, base, structUtils)
386
+ -- Clone the base to avoid modifying the original
387
+ base = structUtils.clone(base)
388
+
389
+ structUtils.walk(check, function(_key, val, _parent, path)
390
+ if not structUtils.isnode(val) then
391
+ local baseval = structUtils.getpath(base, path)
392
+
393
+ -- Direct match check
394
+ if baseval == val then
395
+ return val
396
+ end
397
+
398
+ -- Explicit undefined expected
399
+ if val == UNDEFMARK and baseval == nil then
400
+ return val
401
+ end
402
+
403
+ -- Explicit defined expected
404
+ if val == EXISTSMARK and baseval ~= nil then
405
+ return val
406
+ end
407
+
408
+ if not matchval(val, baseval, structUtils) then
409
+ fail("MATCH: " .. table.concat(path, ".") .. ": [" ..
410
+ structUtils.stringify(val) .. "] <=> [" ..
411
+ structUtils.stringify(baseval) .. "]")
412
+ end
413
+ end
414
+
415
+ return val
416
+ end)
417
+ end
418
+
419
+
420
+ -- Check if a test value matches a base value according to defined rules
421
+ -- @param check (any) The test pattern or value to check
422
+ -- @param base (any) The base value to check against
423
+ -- @param structUtils (table) Structure utility functions
424
+ -- @return (boolean) Whether the value matches
425
+ matchval = function(check, base, structUtils)
426
+ local pass = check == base
427
+
428
+ if not pass then
429
+ if type(check) == "string" then
430
+ local basestr = structUtils.stringify(base)
431
+
432
+ -- Check if string starts and ends with '/' (RegExp in TypeScript)
433
+ local rem = check:match("^/(.+)/$")
434
+ if rem then
435
+ -- Convert JS RegExp to Lua pattern when possible
436
+ -- This is a simplification and might need adjustments for complex patterns
437
+ local lua_pattern = rem:gsub("%%", "%%%%"):gsub("%.", "%%."):gsub("%+",
438
+ "%%+"):gsub("%-", "%%-"):gsub("%*", "%%*"):gsub("%?", "%%?"):gsub(
439
+ "%[", "%%["):gsub("%]", "%%]"):gsub("%^", "%%^"):gsub("%$", "%%$")
440
+ :gsub("%(", "%%("):gsub("%)", "%%)")
441
+ pass = basestr:match(lua_pattern) ~= nil
442
+ else
443
+ -- Convert both strings to lowercase and check if one contains the other
444
+ pass = basestr:lower():find(structUtils.stringify(check):lower(), 1,
445
+ true) ~= nil
446
+ end
447
+ elseif type(check) == "function" then
448
+ pass = true
449
+ end
450
+ end
451
+
452
+ return pass
453
+ end
454
+
455
+
456
+ -- Transform null values in JSON data according to flags.
457
+ -- dkjson decodes JSON null as the Lua string "null".
458
+ -- When flags.null is true, convert "null" to NULLMARK ("__NULL__").
459
+ -- When flags.null is false, convert "null" to nil (native Lua null).
460
+ -- @param val (any) The value to process
461
+ -- @param flags (table) Processing flags including null handling
462
+ -- @return (any) The processed value
463
+ fixJSON = function(val, flags)
464
+ -- Handle JSON_NULL sentinel and Lua nil.
465
+ if val == JSON_NULL or val == nil then
466
+ if flags.null then
467
+ return NULLMARK
468
+ else
469
+ return nil
470
+ end
471
+ end
472
+
473
+ local function isarray(t)
474
+ if type(t) ~= "table" then return false end
475
+ if t == JSON_NULL then return false end
476
+ local mt = getmetatable(t)
477
+ if mt and mt.__jsontype == "array" then return true end
478
+ local count = 0
479
+ local max = 0
480
+ for k in pairs(t) do
481
+ if type(k) ~= "number" then return false end
482
+ if k > max then max = k end
483
+ count = count + 1
484
+ end
485
+ return count > 0 and max == count
486
+ end
487
+
488
+ -- In arrays, we need to preserve null as a value (not nil which creates holes).
489
+ -- Use "null" string as a stand-in for JS null in arrays when flags.null=false.
490
+ local function replacer(v, in_array)
491
+ if v == JSON_NULL or v == nil then
492
+ if flags.null then
493
+ return NULLMARK
494
+ elseif in_array then
495
+ -- Preserve null in arrays as the string "null" to avoid nil holes.
496
+ -- Matches JS behavior where String(null) === "null".
497
+ return "null"
498
+ else
499
+ return nil
500
+ end
501
+ elseif type(v) == "table" and v ~= JSON_NULL then
502
+ if isarray(v) then
503
+ local result = {}
504
+ local mt = getmetatable(v)
505
+ if mt then
506
+ setmetatable(result, mt)
507
+ elseif #v > 0 then
508
+ setmetatable(result, { __jsontype = "array" })
509
+ end
510
+ for i = 1, #v do
511
+ local newval = replacer(v[i], true)
512
+ if newval ~= nil then
513
+ table.insert(result, newval)
514
+ end
515
+ end
516
+ return result
517
+ else
518
+ -- For maps, process each value
519
+ local result = {}
520
+ for k, value in pairs(v) do
521
+ local newval = replacer(value, false)
522
+ if newval ~= nil then
523
+ result[k] = newval
524
+ end
525
+ end
526
+ local mt = getmetatable(v)
527
+ if mt then
528
+ setmetatable(result, mt)
529
+ end
530
+ return result
531
+ end
532
+ else
533
+ return v
534
+ end
535
+ end
536
+
537
+ return replacer(val)
538
+ end
539
+
540
+
541
+ -- Process null marker values
542
+ -- @param val (any) The value to check
543
+ -- @param key (any) The key in the parent
544
+ -- @param parent (table) The parent table
545
+ local function nullModifier(val, key, parent)
546
+ if val == NULLMARK then
547
+ parent[key] = nil -- In Lua, nil represents null
548
+ elseif type(val) == "string" then
549
+ parent[key] = val:gsub(NULLMARK, "null")
550
+ end
551
+ end
552
+
553
+
554
+ ----------------------------------------------------------
555
+ -- StructTestClient: minimal shim for the struct test runner
556
+ ----------------------------------------------------------
557
+
558
+ local StructTestClient = {}
559
+ StructTestClient.__index = StructTestClient
560
+
561
+ function StructTestClient.new(opts)
562
+ local self = setmetatable({}, StructTestClient)
563
+ self.opts = opts or {}
564
+ return self
565
+ end
566
+
567
+ function StructTestClient:utility()
568
+ return {
569
+ struct = vs,
570
+ contextify = function(ctx) return ctx end,
571
+ check = function(ctx)
572
+ local zed = "ZED"
573
+ if self.opts.foo ~= nil then
574
+ zed = zed .. tostring(self.opts.foo)
575
+ end
576
+ zed = zed .. "_"
577
+ if ctx == nil then
578
+ zed = zed .. "0"
579
+ elseif type(ctx.meta) == "table" and ctx.meta.bar ~= nil then
580
+ zed = zed .. tostring(ctx.meta.bar)
581
+ else
582
+ zed = zed .. "0"
583
+ end
584
+ return { zed = zed }
585
+ end,
586
+ }
587
+ end
588
+
589
+ function StructTestClient:tester(opts)
590
+ return StructTestClient.new(opts)
591
+ end
592
+
593
+
594
+ -- Module exports
595
+ return {
596
+ NULLMARK = NULLMARK,
597
+ EXISTSMARK = EXISTSMARK,
598
+ JSON_NULL = JSON_NULL,
599
+ nullModifier = nullModifier,
600
+ makeRunner = makeRunner,
601
+ StructTestClient = StructTestClient
602
+ }