@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
@@ -1,4 +1,10 @@
1
1
 
2
+ import {
3
+ flatten,
4
+ items,
5
+ join,
6
+ } from '@voxgig/struct'
7
+
2
8
  import {
3
9
  KIT,
4
10
  getModelPath,
@@ -13,6 +19,23 @@ import {
13
19
  } from '@voxgig/sdkgen'
14
20
 
15
21
 
22
+ // Convert snake_case to camelCase for Go variable names.
23
+ function goVar(name: string): string {
24
+ return name.replace(/_([a-z0-9])/g, (_: any, c: string) => c.toUpperCase())
25
+ }
26
+
27
+
28
+ type OpGen = (ctx: GenCtx, step: any, index: any) => void
29
+
30
+ type GenCtx = {
31
+ model: any
32
+ entity: any
33
+ gomodule: string
34
+ flow: any
35
+ PROJUPPER: string
36
+ }
37
+
38
+
16
39
  const TestEntity = cmp(function TestEntity(props: any) {
17
40
  const ctx$ = props.ctx$
18
41
  const model = ctx$.model
@@ -28,20 +51,9 @@ const TestEntity = cmp(function TestEntity(props: any) {
28
51
  return
29
52
  }
30
53
 
31
- const steps = basicflow.step || []
32
- const createStep = steps.find((s: any) => s.op === 'create')
33
- const updateStep = steps.find((s: any) => s.op === 'update')
34
- const listSteps = steps.filter((s: any) => s.op === 'list')
35
- const firstListStep = listSteps[0]
36
- const lastListStep = listSteps[listSteps.length - 1]
54
+ const PROJUPPER = model.const.Name.toUpperCase().replace(/[^A-Z_]/g, '_')
37
55
 
38
- const ref = createStep?.input?.ref || entity.name + '_ref01'
39
- // Convert snake_case ref to camelCase for Go variable names
40
- const refVar = ref.replace(/_([a-z0-9])/g, (_: any, c: string) => c.toUpperCase())
41
56
  const ancestors = (entity.relations?.ancestors || []).flat()
42
- const PROJUPPER = model.const.Name.toUpperCase().replace(/[^A-Z_]/g, '_')
43
- const textfield = updateStep?.input?.textfield || 'kind'
44
- const mark = updateStep?.spec?.[0]?.def?.mark || `Mark01-${ref}`
45
57
 
46
58
  // Build idmap names: entity's own + ancestor ids
47
59
  const idnames: string[] = []
@@ -50,25 +62,17 @@ const TestEntity = cmp(function TestEntity(props: any) {
50
62
  for (let i = 1; i <= 3; i++) idnames.push(`${anc}0${i}`)
51
63
  }
52
64
 
53
- // Get match entries from flow steps (filter out $ keys)
54
- const getMatch = (step: any) => {
55
- if (!step?.match) return []
56
- return Object.entries(step.match).filter(([k]: any) => !k.endsWith('$'))
57
- }
58
-
59
- const createMatch = getMatch(createStep)
60
- const firstListMatch = getMatch(firstListStep)
61
- const lastListMatch = getMatch(lastListStep)
65
+ const idnamesStr = idnames.map(n => `"${n}"`).join(', ')
62
66
 
63
- // Get update data entries (non-id, non-$ keys)
67
+ // Get all update data entries for alias generation
68
+ const allSteps = Object.values(basicflow.step) as any[]
69
+ const updateStep = allSteps.find((s: any) => s.op === 'update')
64
70
  const updateData = updateStep?.data
65
71
  ? Object.entries(updateStep.data).filter(([k]: any) => k !== 'id' && !k.endsWith('$'))
66
72
  : []
67
-
68
- // Aliases needed from update data entries
69
73
  const aliases = updateData.map(([k, v]: any) => [k, v])
70
74
 
71
- const idnamesStr = idnames.map(n => `"${n}"`).join(', ')
75
+ const genCtx: GenCtx = { model, entity, gomodule, flow: basicflow, PROJUPPER }
72
76
 
73
77
  File({ name: entity.name + '_entity_test.' + target.ext }, () => {
74
78
 
@@ -102,150 +106,32 @@ func Test${entity.Name}Entity(t *testing.T) {
102
106
  setup := ${entity.name}BasicSetup(nil)
103
107
  client := setup.client
104
108
 
105
- // CREATE
106
- ${entity.name}Ent := client.${entity.Name}(nil)
107
- ${refVar}Data := core.ToMapAny(vs.GetProp(
108
- vs.GetPath([]any{"new", "${entity.name}"}, setup.data), "${ref}"))
109
- `)
110
-
111
- // Add create match entries
112
- for (const [key, val] of createMatch) {
113
- Content(` ${refVar}Data["${key}"] = setup.idmap["${val}"]
114
- `)
115
- }
116
-
117
- Content(`
118
- createResult, err := ${entity.name}Ent.Create(${refVar}Data, nil)
119
- if err != nil {
120
- t.Fatalf("create failed: %v", err)
121
- }
122
- createData := core.ToMapAny(createResult)
123
- if createData == nil {
124
- t.Fatal("expected create result to be a map")
125
- }
126
- if createData["id"] == nil {
127
- t.Fatal("expected created entity to have an id")
128
- }
129
-
130
- // LIST
131
- `)
132
-
133
- // Generate list match map
134
- if (firstListMatch.length === 0) {
135
- Content(` ${refVar}Match := map[string]any{}
136
- `)
137
- } else {
138
- Content(` ${refVar}Match := map[string]any{
139
- `)
140
- for (const [key, val] of firstListMatch) {
141
- Content(` "${key}": setup.idmap["${val}"],
142
109
  `)
143
- }
144
- Content(` }
145
- `)
146
- }
147
-
148
- Content(` listResult, err := ${entity.name}Ent.List(${refVar}Match, nil)
149
- if err != nil {
150
- t.Fatalf("list failed: %v", err)
151
- }
152
- listData, ok := listResult.([]any)
153
- if !ok {
154
- t.Fatalf("expected list result to be an array, got %T", listResult)
155
- }
156
110
 
157
- found := vs.Select(entityListToData(listData), map[string]any{"id": createData["id"]})
158
- if vs.IsEmpty(found) {
159
- t.Fatal("expected to find created entity in list")
111
+ // Check if the flow has a create step; if not, bootstrap entity data
112
+ const flowHasCreate = allSteps.some((s: any) => s.op === 'create')
113
+ if (!flowHasCreate) {
114
+ const preambleRef = entity.name + '_ref01'
115
+ Content(` // Bootstrap entity data from existing test data (no create step in flow).
116
+ ${goVar(preambleRef)}DataRaw := vs.Items(core.ToMapAny(vs.GetProp(setup.data, "existing.${entity.name}")))
117
+ var ${goVar(preambleRef)}Data map[string]any
118
+ if len(${goVar(preambleRef)}DataRaw) > 0 {
119
+ ${goVar(preambleRef)}Data = core.ToMapAny(${goVar(preambleRef)}DataRaw[0][1])
160
120
  }
161
121
 
162
- // UPDATE
163
- markValue := fmt.Sprintf("${mark}_%d", setup.now)
164
- ${refVar}DataUp := map[string]any{
165
- "id": createData["id"],
166
- `)
167
-
168
- // Add update data entries
169
- for (const [key] of updateData) {
170
- Content(` "${key}": setup.idmap["${key}"],
171
122
  `)
172
123
  }
173
124
 
174
- Content(` "${textfield}": markValue,
175
- }
176
-
177
- updateResult, err := ${entity.name}Ent.Update(${refVar}DataUp, nil)
178
- if err != nil {
179
- t.Fatalf("update failed: %v", err)
180
- }
181
- updateData := core.ToMapAny(updateResult)
182
- if updateData == nil {
183
- t.Fatal("expected update result to be a map")
184
- }
185
- if updateData["id"] != createData["id"] {
186
- t.Fatal("expected update result id to match")
187
- }
188
- if updateData["${textfield}"] != markValue {
189
- t.Fatalf("expected ${textfield} to be updated, got %v", updateData["${textfield}"])
190
- }
191
-
192
- // LOAD
193
- ${refVar}MatchDt := map[string]any{
194
- "id": createData["id"],
195
- }
196
- loadResult, err := ${entity.name}Ent.Load(${refVar}MatchDt, nil)
197
- if err != nil {
198
- t.Fatalf("load failed: %v", err)
199
- }
200
- loadData := core.ToMapAny(loadResult)
201
- if loadData == nil {
202
- t.Fatal("expected load result to be a map")
203
- }
204
- if loadData["id"] != createData["id"] {
205
- t.Fatal("expected load result id to match")
206
- }
207
-
208
- // REMOVE
209
- ${refVar}MatchRm := map[string]any{
210
- "id": createData["id"],
211
- }
212
- _, err = ${entity.name}Ent.Remove(${refVar}MatchRm, nil)
213
- if err != nil {
214
- t.Fatalf("remove failed: %v", err)
215
- }
216
-
217
- // LIST (verify removed)
218
- `)
219
-
220
- // Generate verify list match map
221
- if (lastListMatch.length === 0) {
222
- Content(` ${refVar}MatchRt := map[string]any{}
223
- `)
224
- } else {
225
- Content(` ${refVar}MatchRt := map[string]any{
226
- `)
227
- for (const [key, val] of lastListMatch) {
228
- Content(` "${key}": setup.idmap["${val}"],
229
- `)
125
+ // Model-driven step iteration
126
+ each(basicflow.step, (step: any, index: any) => {
127
+ const opgen: OpGen = GENERATE_OP[step.op]
128
+ if (opgen) {
129
+ opgen(genCtx, step, index)
130
+ Content('\n')
230
131
  }
231
- Content(` }
232
- `)
233
- }
234
-
235
- Content(` listResult2, err := ${entity.name}Ent.List(${refVar}MatchRt, nil)
236
- if err != nil {
237
- t.Fatalf("list after remove failed: %v", err)
238
- }
239
- listData2, ok := listResult2.([]any)
240
- if !ok {
241
- t.Fatalf("expected list result to be an array, got %T", listResult2)
242
- }
132
+ })
243
133
 
244
- found2 := vs.Select(entityListToData(listData2), map[string]any{"id": createData["id"]})
245
- if !vs.IsEmpty(found2) {
246
- t.Fatal("expected removed entity to not be in list")
247
- }
248
- })
134
+ Content(` })
249
135
  }
250
136
 
251
137
  `)
@@ -336,6 +222,320 @@ func Test${entity.Name}Entity(t *testing.T) {
336
222
  })
337
223
 
338
224
 
225
+ // Get match entries from a step, filtering out $ keys.
226
+ function getMatchEntries(step: any): [string, any][] {
227
+ if (!step?.match) return []
228
+ return Object.entries(step.match).filter(([k]: any) => !k.endsWith('$'))
229
+ }
230
+
231
+
232
+ const generateCreate: OpGen = (ctx, step, index) => {
233
+ const { entity, flow } = ctx
234
+ const ref = step.input?.ref ?? entity.name + '_ref01'
235
+ const entvar = goVar(step.input?.entvar ?? ref + '_ent')
236
+ const datavar = goVar(step.input?.datavar ?? (ref + '_data' + (step.input?.suffix ?? '')))
237
+
238
+ const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
239
+ const needsEnt = !priorSteps.some((s: any) =>
240
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
241
+
242
+ const hasDatvar = priorSteps.some((s: any) => {
243
+ if ('create' === s.op) {
244
+ const priorRef = s.input?.ref ?? entity.name + '_ref01'
245
+ const priorDatvar = goVar(s.input?.datavar ?? (priorRef + '_data' + (s.input?.suffix ?? '')))
246
+ return priorDatvar === datavar
247
+ }
248
+ return false
249
+ })
250
+
251
+ Content(` // CREATE
252
+ `)
253
+ if (needsEnt) {
254
+ Content(` ${entvar} := client.${entity.Name}(nil)
255
+ `)
256
+ }
257
+
258
+ // Load data from test data file
259
+ if (hasDatvar) {
260
+ Content(` ${datavar} = core.ToMapAny(vs.GetProp(
261
+ vs.GetPath([]any{"new", "${entity.name}"}, setup.data), "${ref}"))
262
+ `)
263
+ } else {
264
+ Content(` ${datavar} := core.ToMapAny(vs.GetProp(
265
+ vs.GetPath([]any{"new", "${entity.name}"}, setup.data), "${ref}"))
266
+ `)
267
+ }
268
+
269
+ // Add match entries
270
+ const matchEntries = getMatchEntries(step)
271
+ for (const [key, val] of matchEntries) {
272
+ Content(` ${datavar}["${key}"] = setup.idmap["${val}"]
273
+ `)
274
+ }
275
+
276
+ Content(`
277
+ ${datavar}Result, err := ${entvar}.Create(${datavar}, nil)
278
+ if err != nil {
279
+ t.Fatalf("create failed: %v", err)
280
+ }
281
+ ${datavar} = core.ToMapAny(${datavar}Result)
282
+ if ${datavar} == nil {
283
+ t.Fatal("expected create result to be a map")
284
+ }
285
+ if ${datavar}["id"] == nil {
286
+ t.Fatal("expected created entity to have an id")
287
+ }
288
+ `)
289
+ }
290
+
291
+
292
+ const generateList: OpGen = (ctx, step, index) => {
293
+ const { entity, flow } = ctx
294
+ const ref = step.input?.ref ?? entity.name + '_ref01'
295
+ const entvar = goVar(step.input?.entvar ?? ref + '_ent')
296
+ const matchvar = goVar(step.input?.matchvar ?? (ref + '_match' + (step.input?.suffix ?? '')))
297
+ const listvar = goVar(step.input?.listvar ?? (ref + '_list' + (step.input?.suffix ?? '')))
298
+
299
+ const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
300
+ const needsEnt = !priorSteps.some((s: any) =>
301
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
302
+
303
+ Content(` // LIST
304
+ `)
305
+ if (needsEnt) {
306
+ Content(` ${entvar} := client.${entity.Name}(nil)
307
+ `)
308
+ }
309
+
310
+ // Generate match map
311
+ const matchEntries = getMatchEntries(step)
312
+ if (matchEntries.length === 0) {
313
+ Content(` ${matchvar} := map[string]any{}
314
+ `)
315
+ } else {
316
+ Content(` ${matchvar} := map[string]any{
317
+ `)
318
+ for (const [key, val] of matchEntries) {
319
+ Content(` "${key}": setup.idmap["${val}"],
320
+ `)
321
+ }
322
+ Content(` }
323
+ `)
324
+ }
325
+
326
+ Content(`
327
+ ${listvar}Result, err := ${entvar}.List(${matchvar}, nil)
328
+ if err != nil {
329
+ t.Fatalf("list failed: %v", err)
330
+ }
331
+ ${listvar}, ok := ${listvar}Result.([]any)
332
+ if !ok {
333
+ t.Fatalf("expected list result to be an array, got %T", ${listvar}Result)
334
+ }
335
+ `)
336
+
337
+ // Handle validators from step.valid
338
+ const allSteps = Object.values(flow.step) as any[]
339
+ if (step.valid) {
340
+ for (const validator of step.valid) {
341
+ const validRef = validator.def?.ref
342
+ const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
343
+ ((s.input?.ref ?? entity.name + '_ref01') === validRef))
344
+
345
+ if ('ItemExists' === validator.apply && hasRefData) {
346
+ const refDataVar = goVar(validRef + '_data')
347
+ Content(`
348
+ foundItem := vs.Select(entityListToData(${listvar}), map[string]any{"id": ${refDataVar}["id"]})
349
+ if vs.IsEmpty(foundItem) {
350
+ t.Fatal("expected to find created entity in list")
351
+ }
352
+ `)
353
+ } else if ('ItemNotExists' === validator.apply && hasRefData) {
354
+ const refDataVar = goVar(validRef + '_data')
355
+ Content(`
356
+ notFoundItem := vs.Select(entityListToData(${listvar}), map[string]any{"id": ${refDataVar}["id"]})
357
+ if !vs.IsEmpty(notFoundItem) {
358
+ t.Fatal("expected removed entity to not be in list")
359
+ }
360
+ `)
361
+ }
362
+ }
363
+ }
364
+ }
365
+
366
+
367
+ const generateUpdate: OpGen = (ctx, step, index) => {
368
+ const { entity, flow } = ctx
369
+ const ref = step.input?.ref ?? entity.name + '_ref01'
370
+ const entvar = goVar(step.input?.entvar ?? ref + '_ent')
371
+ const datavar = goVar(step.input?.datavar ?? (ref + '_data' + (step.input?.suffix ?? '')))
372
+ const resdatavar = goVar(step.input?.resdatavar ?? (ref + '_resdata' + (step.input?.suffix ?? '')))
373
+ const markdefvar = goVar(step.input?.markdefvar ?? (ref + '_markdef' + (step.input?.suffix ?? '')))
374
+ const srcdatavar = goVar(step.input?.srcdatavar ?? (ref + '_data' + (step.input?.suffix ?? '')))
375
+
376
+ const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
377
+ const needsEnt = !priorSteps.some((s: any) =>
378
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
379
+
380
+ Content(` // UPDATE
381
+ `)
382
+ if (needsEnt) {
383
+ Content(` ${entvar} := client.${entity.Name}(nil)
384
+ `)
385
+ }
386
+ Content(` ${datavar}Up := map[string]any{
387
+ "id": ${srcdatavar}["id"],
388
+ `)
389
+
390
+ // Add data entries from step.data
391
+ if (step.data) {
392
+ const dataEntries = Object.entries(step.data).filter(([k]: any) => k !== 'id' && !k.endsWith('$'))
393
+ for (const [key] of dataEntries) {
394
+ Content(` "${key}": setup.idmap["${key}"],
395
+ `)
396
+ }
397
+ }
398
+
399
+ Content(` }
400
+ `)
401
+
402
+ // Handle TextFieldMark spec
403
+ if (step.spec) {
404
+ for (const spec of step.spec) {
405
+ if ('TextFieldMark' === spec.apply && null != step.input?.textfield) {
406
+ const fieldname = step.input.textfield
407
+ const fieldvalue = spec.def?.mark ?? `Mark01-${ref}`
408
+ Content(`
409
+ ${markdefvar}Name := "${fieldname}"
410
+ ${markdefvar}Value := fmt.Sprintf("${fieldvalue}_%d", setup.now)
411
+ ${datavar}Up[${markdefvar}Name] = ${markdefvar}Value
412
+ `)
413
+ }
414
+ }
415
+ }
416
+
417
+ Content(`
418
+ ${resdatavar}Result, err := ${entvar}.Update(${datavar}Up, nil)
419
+ if err != nil {
420
+ t.Fatalf("update failed: %v", err)
421
+ }
422
+ ${resdatavar} := core.ToMapAny(${resdatavar}Result)
423
+ if ${resdatavar} == nil {
424
+ t.Fatal("expected update result to be a map")
425
+ }
426
+ if ${resdatavar}["id"] != ${datavar}Up["id"] {
427
+ t.Fatal("expected update result id to match")
428
+ }
429
+ `)
430
+
431
+ // Assert TextFieldMark
432
+ if (step.spec) {
433
+ for (const spec of step.spec) {
434
+ if ('TextFieldMark' === spec.apply && null != step.input?.textfield) {
435
+ Content(` if ${resdatavar}[${markdefvar}Name] != ${markdefvar}Value {
436
+ t.Fatalf("expected %s to be updated, got %v", ${markdefvar}Name, ${resdatavar}[${markdefvar}Name])
437
+ }
438
+ `)
439
+ }
440
+ }
441
+ }
442
+ }
443
+
444
+
445
+ const generateLoad: OpGen = (ctx, step, index) => {
446
+ const { entity, flow } = ctx
447
+ const ref = step.input?.ref ?? entity.name + '_ref01'
448
+ const entvar = goVar(step.input?.entvar ?? ref + '_ent')
449
+ const matchvar = goVar(step.input?.matchvar ?? (ref + '_match' + (step.input?.suffix ?? '')))
450
+ const datavar = goVar(step.input?.datavar ?? (ref + '_data' + (step.input?.suffix ?? '')))
451
+ const srcdatavar = goVar(step.input?.srcdatavar ?? (ref + '_data' + (step.input?.suffix ?? '')))
452
+
453
+ const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
454
+ const hasEntVar = priorSteps.some((s: any) =>
455
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
456
+
457
+ // Check if srcdatavar was declared by a prior create step or preamble
458
+ const flowHasCreate = Object.values(flow.step).some((s: any) => (s as any).op === 'create')
459
+ const preambleRef = entity.name + '_ref01'
460
+ const hasSrcData = (!flowHasCreate && srcdatavar === goVar(preambleRef + '_data')) ||
461
+ priorSteps.some((s: any) => {
462
+ if ('create' === s.op) {
463
+ const priorRef = s.input?.ref ?? entity.name + '_ref01'
464
+ const priorDatvar = goVar(s.input?.datavar ?? (priorRef + '_data' + (s.input?.suffix ?? '')))
465
+ return priorDatvar === srcdatavar
466
+ }
467
+ return false
468
+ })
469
+
470
+ Content(` // LOAD
471
+ `)
472
+ if (!hasEntVar) {
473
+ Content(` ${entvar} := client.${entity.Name}(nil)
474
+ `)
475
+ }
476
+ if (!hasSrcData) {
477
+ Content(` ${srcdatavar}Raw := vs.Items(core.ToMapAny(vs.GetProp(setup.data, "existing.${entity.name}")))
478
+ var ${srcdatavar} map[string]any
479
+ if len(${srcdatavar}Raw) > 0 {
480
+ ${srcdatavar} = core.ToMapAny(${srcdatavar}Raw[0][1])
481
+ }
482
+ `)
483
+ }
484
+ Content(` ${matchvar} := map[string]any{
485
+ "id": ${srcdatavar}["id"],
486
+ }
487
+ ${datavar}Loaded, err := ${entvar}.Load(${matchvar}, nil)
488
+ if err != nil {
489
+ t.Fatalf("load failed: %v", err)
490
+ }
491
+ ${datavar}LoadResult := core.ToMapAny(${datavar}Loaded)
492
+ if ${datavar}LoadResult == nil {
493
+ t.Fatal("expected load result to be a map")
494
+ }
495
+ if ${datavar}LoadResult["id"] != ${srcdatavar}["id"] {
496
+ t.Fatal("expected load result id to match")
497
+ }
498
+ `)
499
+ }
500
+
501
+
502
+ const generateRemove: OpGen = (ctx, step, index) => {
503
+ const { entity, flow } = ctx
504
+ const ref = step.input?.ref ?? entity.name + '_ref01'
505
+ const entvar = goVar(step.input?.entvar ?? ref + '_ent')
506
+ const matchvar = goVar(step.input?.matchvar ?? (ref + '_match' + (step.input?.suffix ?? '')))
507
+ const srcdatavar = goVar(step.input?.srcdatavar ?? (ref + '_data'))
508
+
509
+ const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
510
+ const needsEnt = !priorSteps.some((s: any) =>
511
+ ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
512
+
513
+ Content(` // REMOVE
514
+ `)
515
+ if (needsEnt) {
516
+ Content(` ${entvar} := client.${entity.Name}(nil)
517
+ `)
518
+ }
519
+ Content(` ${matchvar} := map[string]any{
520
+ "id": ${srcdatavar}["id"],
521
+ }
522
+ _, err = ${entvar}.Remove(${matchvar}, nil)
523
+ if err != nil {
524
+ t.Fatalf("remove failed: %v", err)
525
+ }
526
+ `)
527
+ }
528
+
529
+
530
+ const GENERATE_OP: Record<string, OpGen> = {
531
+ create: generateCreate,
532
+ list: generateList,
533
+ update: generateUpdate,
534
+ load: generateLoad,
535
+ remove: generateRemove,
536
+ }
537
+
538
+
339
539
  export {
340
540
  TestEntity
341
541
  }
@@ -8,7 +8,7 @@ import type {
8
8
  ModelEntity
9
9
  } from '@voxgig/apidef'
10
10
 
11
- import { cmp, each, Folder } from '@voxgig/sdkgen'
11
+ import { cmp, each, Folder, File, Content } from '@voxgig/sdkgen'
12
12
 
13
13
 
14
14
  import { TestEntity } from './TestEntity_go'
@@ -24,6 +24,29 @@ const Test = cmp(function Test(props: any) {
24
24
  const gomodule = orgPrefix + model.name + 'sdk'
25
25
 
26
26
  Folder({ name: 'test' }, () => {
27
+
28
+ // Generate exists_test.go programmatically to avoid duplication
29
+ // with any scaffolded test file (e.g. projectname_sdk_test.go).
30
+ File({ name: 'exists_test.' + target.ext }, () => {
31
+ Content(`package sdktest
32
+
33
+ import (
34
+ "testing"
35
+
36
+ sdk "${gomodule}"
37
+ )
38
+
39
+ func TestExists(t *testing.T) {
40
+ t.Run("test-mode", func(t *testing.T) {
41
+ testsdk := sdk.TestSDK(nil, nil)
42
+ if testsdk == nil {
43
+ t.Fatal("expected non-nil SDK")
44
+ }
45
+ })
46
+ }
47
+ `)
48
+ })
49
+
27
50
  each(model.main[KIT].entity, (entity: ModelEntity) => {
28
51
  TestEntity({ target, entity, gomodule })
29
52
  TestDirect({ target, entity, gomodule })
@@ -0,0 +1,34 @@
1
+
2
+ import * as Path from 'node:path'
3
+
4
+ import {
5
+ cmp,
6
+ File, Folder, Fragment,
7
+ } from '@voxgig/sdkgen'
8
+
9
+
10
+
11
+ const EntityBase = cmp(async function EntityBase(props: any) {
12
+
13
+ // Needs type: target object
14
+ const { target } = props
15
+ const { model } = props.ctx$
16
+
17
+ File({ name: model.const.Name + 'EntityBase.' + target.name }, () => {
18
+
19
+ Fragment(
20
+ {
21
+ from:
22
+ Path.normalize(__dirname + '/../../../src/cmp/js/fragment/EntityBase.fragment.js'),
23
+
24
+ replace: {
25
+ ...props.ctx$.stdrep,
26
+ }
27
+ })
28
+ })
29
+ })
30
+
31
+
32
+ export {
33
+ EntityBase
34
+ }
@@ -22,6 +22,7 @@ import { Package } from './Package_js'
22
22
  import { Config } from './Config_js'
23
23
  import { MainEntity } from './MainEntity_js'
24
24
  import { SdkError } from './SdkError_js'
25
+ import { EntityBase } from './EntityBase_js'
25
26
 
26
27
 
27
28
  const Main = cmp(async function Main(props: any) {
@@ -35,6 +36,13 @@ const Main = cmp(async function Main(props: any) {
35
36
 
36
37
  Package({ target })
37
38
 
39
+ Copy({
40
+ from: 'tm/' + target.name,
41
+ replace: {
42
+ ...props.ctx$.stdrep,
43
+ }
44
+ })
45
+
38
46
  Folder({ name: 'src' }, () => {
39
47
 
40
48
  SdkError({ target })
@@ -88,6 +96,8 @@ if (fres instanceof Promise) { await fres }
88
96
 
89
97
  Config({ target })
90
98
 
99
+ EntityBase({ target })
100
+
91
101
  })
92
102
  })
93
103