@voxgig/sdkgen 1.3.14 → 1.3.17

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 (398) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/action.js.map +1 -1
  3. package/dist/action/feature.js.map +1 -1
  4. package/dist/action/target.js.map +1 -1
  5. package/dist/cmp/AgentGuide.js.map +1 -1
  6. package/dist/cmp/AgentGuideContent.js.map +1 -1
  7. package/dist/cmp/AgentGuideFeature.js.map +1 -1
  8. package/dist/cmp/AgentGuideTop.js.map +1 -1
  9. package/dist/cmp/Changelog.js.map +1 -1
  10. package/dist/cmp/Deploy.js.map +1 -1
  11. package/dist/cmp/Entity.js.map +1 -1
  12. package/dist/cmp/Feature.js.map +1 -1
  13. package/dist/cmp/FeatureHook.js.map +1 -1
  14. package/dist/cmp/License.js.map +1 -1
  15. package/dist/cmp/Main.js.map +1 -1
  16. package/dist/cmp/Readme.js.map +1 -1
  17. package/dist/cmp/ReadmeEntity.js.map +1 -1
  18. package/dist/cmp/ReadmeErrors.js +1 -1
  19. package/dist/cmp/ReadmeErrors.js.map +1 -1
  20. package/dist/cmp/ReadmeExplanation.js +2 -2
  21. package/dist/cmp/ReadmeExplanation.js.map +1 -1
  22. package/dist/cmp/ReadmeHowto.js.map +1 -1
  23. package/dist/cmp/ReadmeInstall.js.map +1 -1
  24. package/dist/cmp/ReadmeIntro.js.map +1 -1
  25. package/dist/cmp/ReadmeModel.js.map +1 -1
  26. package/dist/cmp/ReadmeOptions.js.map +1 -1
  27. package/dist/cmp/ReadmeQuick.js.map +1 -1
  28. package/dist/cmp/ReadmeRef.js.map +1 -1
  29. package/dist/cmp/ReadmeTop.js +1 -1
  30. package/dist/cmp/ReadmeTop.js.map +1 -1
  31. package/dist/cmp/Security.js.map +1 -1
  32. package/dist/cmp/Test.js.map +1 -1
  33. package/dist/helpers/buildIdNames.js.map +1 -1
  34. package/dist/helpers/canonType.d.ts +3 -2
  35. package/dist/helpers/canonType.js +107 -24
  36. package/dist/helpers/canonType.js.map +1 -1
  37. package/dist/helpers/collectDeps.js.map +1 -1
  38. package/dist/helpers/getMatchEntries.js.map +1 -1
  39. package/dist/helpers/naming.d.ts +5 -1
  40. package/dist/helpers/naming.js +37 -0
  41. package/dist/helpers/naming.js.map +1 -1
  42. package/dist/helpers/opExample.d.ts +1 -1
  43. package/dist/helpers/opExample.js +37 -20
  44. package/dist/helpers/opExample.js.map +1 -1
  45. package/dist/helpers/opShape.d.ts +3 -1
  46. package/dist/helpers/opShape.js +91 -3
  47. package/dist/helpers/opShape.js.map +1 -1
  48. package/dist/helpers/packageMeta.js.map +1 -1
  49. package/dist/sdkgen.d.ts +3 -3
  50. package/dist/sdkgen.js +7 -1
  51. package/dist/sdkgen.js.map +1 -1
  52. package/dist/tsconfig.tsbuildinfo +1 -1
  53. package/dist/types.js.map +1 -1
  54. package/dist/utility.js.map +1 -1
  55. package/package.json +7 -6
  56. package/project/.sdk/model/target/haskell.aontu +6 -3
  57. package/project/.sdk/model/target/zig.aontu +12 -2
  58. package/project/.sdk/src/cmp/c/Config_c.ts +16 -4
  59. package/project/.sdk/src/cmp/c/EntityTypes_c.ts +168 -0
  60. package/project/.sdk/src/cmp/c/Main_c.ts +4 -0
  61. package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +192 -0
  62. package/project/.sdk/src/cmp/c/ReadmeExamplesTest_c.ts +152 -0
  63. package/project/.sdk/src/cmp/c/ReadmeExplanation_c.ts +55 -0
  64. package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +168 -0
  65. package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +52 -0
  66. package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +67 -0
  67. package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +151 -0
  68. package/project/.sdk/src/cmp/c/ReadmeOptions_c.ts +65 -0
  69. package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +225 -0
  70. package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +398 -0
  71. package/project/.sdk/src/cmp/c/ReadmeTopHowto_c.ts +24 -0
  72. package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +104 -0
  73. package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +86 -0
  74. package/project/.sdk/src/cmp/c/TestEntity_c.ts +10 -0
  75. package/project/.sdk/src/cmp/c/Test_c.ts +4 -0
  76. package/project/.sdk/src/cmp/c/utility_c.ts +8 -2
  77. package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +182 -0
  78. package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +54 -0
  79. package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +44 -0
  80. package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +144 -0
  81. package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +51 -0
  82. package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +66 -0
  83. package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +156 -0
  84. package/project/.sdk/src/cmp/clojure/ReadmeOptions_clojure.ts +61 -0
  85. package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +210 -0
  86. package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +409 -0
  87. package/project/.sdk/src/cmp/clojure/ReadmeTopHowto_clojure.ts +24 -0
  88. package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +98 -0
  89. package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +78 -0
  90. package/project/.sdk/src/cmp/clojure/TestDirect_clojure.ts +58 -0
  91. package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +79 -0
  92. package/project/.sdk/src/cmp/clojure/Test_clojure.ts +21 -65
  93. package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +174 -0
  94. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +5 -0
  95. package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +170 -0
  96. package/project/.sdk/src/cmp/cpp/ReadmeExplanation_cpp.ts +45 -0
  97. package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +139 -0
  98. package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +42 -0
  99. package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +69 -0
  100. package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +155 -0
  101. package/project/.sdk/src/cmp/cpp/ReadmeOptions_cpp.ts +62 -0
  102. package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +234 -0
  103. package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +387 -0
  104. package/project/.sdk/src/cmp/cpp/ReadmeTopHowto_cpp.ts +24 -0
  105. package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +95 -0
  106. package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +70 -0
  107. package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +5 -1
  108. package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +196 -0
  109. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
  110. package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
  111. package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +198 -0
  112. package/project/.sdk/src/cmp/csharp/ReadmeExplanation_csharp.ts +42 -0
  113. package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +168 -0
  114. package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +41 -0
  115. package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +65 -0
  116. package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +148 -0
  117. package/project/.sdk/src/cmp/csharp/ReadmeOptions_csharp.ts +60 -0
  118. package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +219 -0
  119. package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +390 -0
  120. package/project/.sdk/src/cmp/csharp/ReadmeTopHowto_csharp.ts +25 -0
  121. package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +92 -0
  122. package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +77 -0
  123. package/project/.sdk/src/cmp/csharp/Test_csharp.ts +4 -0
  124. package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -29
  125. package/project/.sdk/src/cmp/dart/Entity_dart.ts +8 -0
  126. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +166 -0
  127. package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +238 -0
  128. package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +53 -0
  129. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +151 -0
  130. package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +59 -0
  131. package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +65 -0
  132. package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +151 -0
  133. package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +63 -0
  134. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +214 -0
  135. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +381 -0
  136. package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +24 -0
  137. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +95 -0
  138. package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +78 -0
  139. package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +52 -0
  140. package/project/.sdk/src/cmp/dart/Test_dart.ts +6 -0
  141. package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +1 -3
  142. package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +1 -40
  143. package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +3 -3
  144. package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +165 -0
  145. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +4 -0
  146. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
  147. package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +163 -0
  148. package/project/.sdk/src/cmp/elixir/ReadmeExamplesTest_elixir.ts +126 -0
  149. package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +55 -0
  150. package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +149 -0
  151. package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +67 -0
  152. package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +66 -0
  153. package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +150 -0
  154. package/project/.sdk/src/cmp/elixir/ReadmeOptions_elixir.ts +62 -0
  155. package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +198 -0
  156. package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +333 -0
  157. package/project/.sdk/src/cmp/elixir/ReadmeTopHowto_elixir.ts +26 -0
  158. package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +79 -0
  159. package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +68 -0
  160. package/project/.sdk/src/cmp/elixir/Test_elixir.ts +4 -0
  161. package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +4 -0
  162. package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +4 -0
  163. package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +4 -0
  164. package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -0
  165. package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +4 -0
  166. package/project/.sdk/src/cmp/elixir/utility_elixir.ts +32 -0
  167. package/project/.sdk/src/cmp/go/EntityTypes_go.ts +12 -3
  168. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
  169. package/project/.sdk/src/cmp/go/TestEntity_go.ts +10 -3
  170. package/project/.sdk/src/cmp/go/utility_go.ts +3 -2
  171. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +240 -43
  172. package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
  173. package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +191 -30
  174. package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
  175. package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +125 -0
  176. package/project/.sdk/src/cmp/haskell/ReadmeExplanation_haskell.ts +48 -0
  177. package/project/.sdk/src/cmp/haskell/ReadmeHowto_haskell.ts +168 -0
  178. package/project/.sdk/src/cmp/haskell/ReadmeInstall_haskell.ts +51 -0
  179. package/project/.sdk/src/cmp/haskell/ReadmeIntro_haskell.ts +67 -0
  180. package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +160 -0
  181. package/project/.sdk/src/cmp/haskell/ReadmeOptions_haskell.ts +74 -0
  182. package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +237 -0
  183. package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +405 -0
  184. package/project/.sdk/src/cmp/haskell/ReadmeTopHowto_haskell.ts +31 -0
  185. package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +104 -0
  186. package/project/.sdk/src/cmp/haskell/ReadmeTopTest_haskell.ts +80 -0
  187. package/project/.sdk/src/cmp/haskell/Test_haskell.ts +27 -2
  188. package/project/.sdk/src/cmp/java/EntityTypes_java.ts +207 -0
  189. package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
  190. package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
  191. package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +186 -0
  192. package/project/.sdk/src/cmp/java/ReadmeExplanation_java.ts +46 -0
  193. package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +156 -0
  194. package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +52 -0
  195. package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +66 -0
  196. package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +150 -0
  197. package/project/.sdk/src/cmp/java/ReadmeOptions_java.ts +61 -0
  198. package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +230 -0
  199. package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +388 -0
  200. package/project/.sdk/src/cmp/java/ReadmeTopHowto_java.ts +23 -0
  201. package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +103 -0
  202. package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +77 -0
  203. package/project/.sdk/src/cmp/java/Test_java.ts +4 -0
  204. package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -8
  205. package/project/.sdk/src/cmp/js/MainEntity_js.ts +4 -2
  206. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +4 -4
  207. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +13 -4
  208. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +4 -4
  209. package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +5 -5
  210. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +4 -4
  211. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +4 -4
  212. package/project/.sdk/src/cmp/js/TestDirect_js.ts +6 -5
  213. package/project/.sdk/src/cmp/js/TestEntity_js.ts +7 -2
  214. package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +0 -31
  215. package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +201 -0
  216. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
  217. package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
  218. package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +173 -0
  219. package/project/.sdk/src/cmp/kotlin/ReadmeExplanation_kotlin.ts +47 -0
  220. package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +154 -0
  221. package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +50 -0
  222. package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +66 -0
  223. package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +150 -0
  224. package/project/.sdk/src/cmp/kotlin/ReadmeOptions_kotlin.ts +61 -0
  225. package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +230 -0
  226. package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +387 -0
  227. package/project/.sdk/src/cmp/kotlin/ReadmeTopHowto_kotlin.ts +23 -0
  228. package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +104 -0
  229. package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +77 -0
  230. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +4 -0
  231. package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
  232. package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -5
  233. package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
  234. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +2 -2
  235. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -1
  236. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +3 -3
  237. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +2 -2
  238. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +2 -2
  239. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +7 -2
  240. package/project/.sdk/src/cmp/lua/Test_lua.ts +1 -1
  241. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +2 -0
  242. package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +180 -0
  243. package/project/.sdk/src/cmp/ocaml/ReadmeExamplesTest_ocaml.ts +111 -0
  244. package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +46 -0
  245. package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +147 -0
  246. package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +44 -0
  247. package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +68 -0
  248. package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +155 -0
  249. package/project/.sdk/src/cmp/ocaml/ReadmeOptions_ocaml.ts +59 -0
  250. package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +205 -0
  251. package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +402 -0
  252. package/project/.sdk/src/cmp/ocaml/ReadmeTopHowto_ocaml.ts +25 -0
  253. package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +86 -0
  254. package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +79 -0
  255. package/project/.sdk/src/cmp/ocaml/Test_ocaml.ts +4 -0
  256. package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +181 -0
  257. package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +354 -0
  258. package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +43 -0
  259. package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +149 -0
  260. package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +47 -0
  261. package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +66 -0
  262. package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +150 -0
  263. package/project/.sdk/src/cmp/perl/ReadmeOptions_perl.ts +59 -0
  264. package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +216 -0
  265. package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +399 -0
  266. package/project/.sdk/src/cmp/perl/ReadmeTopHowto_perl.ts +24 -0
  267. package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +91 -0
  268. package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +83 -0
  269. package/project/.sdk/src/cmp/perl/Test_perl.ts +4 -0
  270. package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -6
  271. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
  272. package/project/.sdk/src/cmp/php/TestEntity_php.ts +7 -2
  273. package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -7
  274. package/project/.sdk/src/cmp/py/Entity_py.ts +2 -10
  275. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +2 -2
  276. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +8 -3
  277. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +3 -3
  278. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +2 -2
  279. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +2 -2
  280. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +2 -2
  281. package/project/.sdk/src/cmp/py/TestEntity_py.ts +7 -2
  282. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +19 -5
  283. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +2 -2
  284. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +8 -3
  285. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +3 -3
  286. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +2 -2
  287. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
  288. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +2 -2
  289. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +7 -2
  290. package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +4 -0
  291. package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +152 -0
  292. package/project/.sdk/src/cmp/rust/Entity_rust.ts +1 -1
  293. package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
  294. package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
  295. package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +132 -0
  296. package/project/.sdk/src/cmp/rust/ReadmeExplanation_rust.ts +44 -0
  297. package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +142 -0
  298. package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +49 -0
  299. package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +66 -0
  300. package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +153 -0
  301. package/project/.sdk/src/cmp/rust/ReadmeOptions_rust.ts +60 -0
  302. package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +212 -0
  303. package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +384 -0
  304. package/project/.sdk/src/cmp/rust/ReadmeTopHowto_rust.ts +24 -0
  305. package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +95 -0
  306. package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +81 -0
  307. package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +10 -0
  308. package/project/.sdk/src/cmp/rust/Test_rust.ts +4 -0
  309. package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +202 -0
  310. package/project/.sdk/src/cmp/scala/Main_scala.ts +6 -0
  311. package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +175 -0
  312. package/project/.sdk/src/cmp/scala/ReadmeExamplesTest_scala.ts +163 -0
  313. package/project/.sdk/src/cmp/scala/ReadmeExplanation_scala.ts +49 -0
  314. package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +155 -0
  315. package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +58 -0
  316. package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +66 -0
  317. package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +150 -0
  318. package/project/.sdk/src/cmp/scala/ReadmeOptions_scala.ts +61 -0
  319. package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +230 -0
  320. package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +388 -0
  321. package/project/.sdk/src/cmp/scala/ReadmeTopHowto_scala.ts +23 -0
  322. package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +104 -0
  323. package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +77 -0
  324. package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +38 -10
  325. package/project/.sdk/src/cmp/scala/Test_scala.ts +8 -0
  326. package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +152 -0
  327. package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
  328. package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
  329. package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +170 -0
  330. package/project/.sdk/src/cmp/swift/ReadmeExplanation_swift.ts +49 -0
  331. package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +159 -0
  332. package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +58 -0
  333. package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +64 -0
  334. package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +149 -0
  335. package/project/.sdk/src/cmp/swift/ReadmeOptions_swift.ts +62 -0
  336. package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +232 -0
  337. package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +387 -0
  338. package/project/.sdk/src/cmp/swift/ReadmeTopHowto_swift.ts +24 -0
  339. package/project/.sdk/src/cmp/swift/ReadmeTopQuick_swift.ts +105 -0
  340. package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +77 -0
  341. package/project/.sdk/src/cmp/swift/Test_swift.ts +4 -0
  342. package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -5
  343. package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +4 -2
  344. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +4 -4
  345. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +14 -4
  346. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +29 -11
  347. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +5 -5
  348. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +4 -4
  349. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +4 -4
  350. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +13 -11
  351. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +18 -2
  352. package/project/.sdk/src/cmp/zig/Config_zig.ts +22 -4
  353. package/project/.sdk/src/cmp/zig/Entity_zig.ts +1 -1
  354. package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
  355. package/project/.sdk/src/cmp/zig/Package_zig.ts +53 -0
  356. package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +188 -0
  357. package/project/.sdk/src/cmp/zig/ReadmeExamplesTest_zig.ts +58 -0
  358. package/project/.sdk/src/cmp/zig/ReadmeExplanation_zig.ts +45 -0
  359. package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +143 -0
  360. package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +54 -0
  361. package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +66 -0
  362. package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +152 -0
  363. package/project/.sdk/src/cmp/zig/ReadmeOptions_zig.ts +60 -0
  364. package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +211 -0
  365. package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +400 -0
  366. package/project/.sdk/src/cmp/zig/ReadmeTopHowto_zig.ts +24 -0
  367. package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +96 -0
  368. package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +82 -0
  369. package/project/.sdk/src/cmp/zig/TestDirect_zig.ts +66 -0
  370. package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +79 -0
  371. package/project/.sdk/src/cmp/zig/Test_zig.ts +17 -61
  372. package/project/.sdk/tm/clojure/src/voxgig/struct.clj +1 -1
  373. package/project/.sdk/tm/cpp/test/feature_test.cpp +19 -0
  374. package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +4 -1
  375. package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +7 -1
  376. package/project/.sdk/tm/elixir/lib/utility/struct/voxgig_struct.ex +1 -1
  377. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +7 -1
  378. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +3 -1
  379. package/project/.sdk/tm/haskell/test/Harness.hs +8 -3
  380. package/project/.sdk/tm/js/Makefile +1 -1
  381. package/project/.sdk/tm/js/jsconfig.json +12 -0
  382. package/project/.sdk/tm/ocaml/Makefile +5 -1
  383. package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
  384. package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
  385. package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
  386. package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
  387. package/project/.sdk/tm/ts/Makefile +1 -1
  388. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
  389. package/src/cmp/ReadmeErrors.ts +2 -2
  390. package/src/cmp/ReadmeExplanation.ts +3 -3
  391. package/src/cmp/ReadmeTop.ts +2 -2
  392. package/src/helpers/canonType.ts +116 -25
  393. package/src/helpers/naming.ts +47 -0
  394. package/src/helpers/opExample.ts +43 -20
  395. package/src/helpers/opShape.ts +102 -3
  396. package/src/sdkgen.ts +8 -2
  397. package/src/tsconfig.json +2 -0
  398. package/project/.sdk/tm/zig/build.zig.zon +0 -11
@@ -0,0 +1,103 @@
1
+
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ nom,
8
+ } from '@voxgig/apidef'
9
+
10
+ import { javaVarName, javaPackage } from './utility_java'
11
+
12
+
13
+ // A type-correct Java literal for a param: numeric/boolean/array/object params
14
+ // render a typed literal; strings render the quoted placeholder. The SDK's
15
+ // loose object model means all values live in Map<String, Object>.
16
+ function javaLit(type: any, placeholder: string = 'example'): string {
17
+ const k = canonKey(type)
18
+ if ('INTEGER' === k) return '1L'
19
+ if ('NUMBER' === k) return '1.0'
20
+ if ('BOOLEAN' === k) return 'true'
21
+ if ('ARRAY' === k) return 'List.of()'
22
+ if ('OBJECT' === k) return 'Map.of()'
23
+ return `"${placeholder}"`
24
+ }
25
+
26
+
27
+ const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
28
+ const { target, ctx$: { model } } = props
29
+
30
+ const SDK = model.const.Name + 'SDK'
31
+
32
+ const entity = getModelPath(model, `main.${KIT}.entity`)
33
+
34
+ const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
35
+
36
+ const authActive = isAuthActive(model)
37
+
38
+ Content(`\`\`\`java
39
+ import ${javaPackage(model)}.core.${SDK};
40
+
41
+ `)
42
+
43
+ if (authActive) {
44
+ Content(`Map<String, Object> options = new java.util.LinkedHashMap<>();
45
+ options.put("apikey", System.getenv("${envName(model)}_APIKEY"));
46
+ ${SDK} client = new ${SDK}(options);
47
+
48
+ `)
49
+ }
50
+ else {
51
+ Content(`${SDK} client = new ${SDK}();
52
+
53
+ `)
54
+ }
55
+
56
+ if (exampleEntity) {
57
+ // Sanitise the local variable name — an entity whose camelCased name is a
58
+ // Java keyword gets a trailing underscore (javaVarName) so the snippet compiles.
59
+ const eVar = javaVarName(exampleEntity.name)
60
+ const accessor = javaVarName(exampleEntity.name)
61
+ const eNameLower = nom(exampleEntity, 'Name').toLowerCase()
62
+ const opnames = Object.keys(exampleEntity.op || {})
63
+ // Model-driven id key: null when the entity has no id-like field, in which
64
+ // case the load example takes an empty match.
65
+ const idF = entityIdField(exampleEntity)
66
+
67
+ if (opnames.includes('list')) {
68
+ Content(`// List all ${eNameLower}s (returns Object, an aggregate list; raises on error)
69
+ Object ${eVar}List = client.${accessor}(null).list(null, null);
70
+ System.out.println(${eVar}List);
71
+ `)
72
+ }
73
+
74
+ if (opnames.includes('load')) {
75
+ // Every REQUIRED load-match key (id first, then parent path params like
76
+ // page_id) — the same shape the runtime resolves path params from, so
77
+ // the example always works.
78
+ const loadItems = opRequestShape(exampleEntity, 'load').items
79
+ .filter((it: any) => !it.optional || it.name === idF)
80
+ .sort((a: any, b: any) =>
81
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
82
+ const loadArg = 0 < loadItems.length
83
+ ? `Map.of(${loadItems.map((it: any) =>
84
+ `"${it.name}", ${javaLit(it.type,
85
+ it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')})`
86
+ : 'null'
87
+ Content(`
88
+ // Load a specific ${eNameLower} (returns the record, raises on error)
89
+ Object ${eVar} = client.${accessor}(null).load(${loadArg}, null);
90
+ System.out.println(${eVar});
91
+ `)
92
+ }
93
+ }
94
+
95
+ Content(`\`\`\`
96
+ `)
97
+
98
+ })
99
+
100
+
101
+ export {
102
+ ReadmeTopQuick
103
+ }
@@ -0,0 +1,77 @@
1
+
2
+ import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+ import { javaVarName } from './utility_java'
10
+
11
+
12
+ // A type-correct Java literal for a field's canonical type.
13
+ function javaLit(type: any): string {
14
+ const k = canonKey(type)
15
+ if ('INTEGER' === k) return '1L'
16
+ if ('NUMBER' === k) return '1.0'
17
+ if ('BOOLEAN' === k) return 'true'
18
+ if ('ARRAY' === k) return 'List.of()'
19
+ if ('OBJECT' === k) return 'Map.of()'
20
+ return '"example"'
21
+ }
22
+
23
+
24
+ const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
25
+ const { target, ctx$: { model } } = props
26
+
27
+ const SDK = model.const.Name + 'SDK'
28
+
29
+ const entity = getModelPath(model, `main.${KIT}.entity`)
30
+
31
+ // Pick an entity with a real op (prefer a read op) — never fabricate a
32
+ // `load` on an op-less entity.
33
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
34
+
35
+ Content(`\`\`\`java
36
+ ${SDK} client = ${SDK}.testSDK(null, null);
37
+ `)
38
+
39
+ if (exampleEntity && primaryOp) {
40
+ const idF = entityIdField(exampleEntity)
41
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
42
+ let arg = 'null'
43
+ if (isMatchOp) {
44
+ // Every REQUIRED match key (id first) — the same shape that generates
45
+ // the op's request type, so the block stays honest.
46
+ const items = opRequestShape(exampleEntity, primaryOp).items
47
+ .filter((it: any) => !it.optional || it.name === idF)
48
+ .sort((a: any, b: any) =>
49
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
50
+ arg = 0 < items.length
51
+ ? `Map.of(${items.map((it: any) =>
52
+ `"${it.name}", ${it.name === idF ? '"test01"' : javaLit(it.type)}`).join(', ')})`
53
+ : 'null'
54
+ } else if ('create' === primaryOp || 'update' === primaryOp) {
55
+ const items = opRequestShape(exampleEntity, primaryOp).items
56
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
57
+ const required = items.filter((it: any) => !it.optional)
58
+ const chosen = required.length ? required : items.slice(0, 3)
59
+ arg = `Map.of(${chosen.map((it: any) =>
60
+ `"${it.name}", ${javaLit(it.type)}`).join(', ')})`
61
+ }
62
+ const eVar = javaVarName(exampleEntity.name) + ('list' === primaryOp ? 'List' : '')
63
+ const accessor = javaVarName(exampleEntity.name)
64
+ Content(`Object ${eVar} = client.${accessor}(null).${primaryOp}(${arg}, null);
65
+ System.out.println(${eVar});
66
+ `)
67
+ }
68
+
69
+ Content(`\`\`\`
70
+ `)
71
+
72
+ })
73
+
74
+
75
+ export {
76
+ ReadmeTopTest
77
+ }
@@ -13,6 +13,7 @@ import { cmp, each, Folder } from '@voxgig/sdkgen'
13
13
 
14
14
  import { TestEntity } from './TestEntity_java'
15
15
  import { TestDirect } from './TestDirect_java'
16
+ import { ReadmeExamplesTest } from './ReadmeExamplesTest_java'
16
17
  import { javaPackage } from './utility_java'
17
18
 
18
19
 
@@ -33,6 +34,9 @@ const Test = cmp(function Test(props: any) {
33
34
  TestEntity({ target, entity, javapackage })
34
35
  TestDirect({ target, entity, javapackage })
35
36
  })
37
+
38
+ // Validate the documented java examples in the root + per-language docs.
39
+ ReadmeExamplesTest({ target, javapackage })
36
40
  })
37
41
  })
38
42
 
@@ -14,16 +14,19 @@
14
14
  //
15
15
  // The typedefs are emitted at file (script) scope so they are GLOBAL across
16
16
  // the SDK's JS program — the op fragments reference them by bare name
17
- // (@param {AdviceLoadMatch} / @returns {Promise<Advice>}). Keeps the SAME
18
- // type-name scheme as the TS reference (<Name>, <Name>LoadMatch,
19
- // <Name>ListMatch, <Name>CreateData, <Name>UpdateData, <Name>RemoveMatch).
17
+ // (@param {AdviceLoadMatch} / @returns {Promise<Advice>}). The program itself
18
+ // is established by the tm/js/jsconfig.json template shipped at the SDK root
19
+ // (one project spanning src/ + test/), so resolution does not depend on
20
+ // editor workspace inference. Keeps the SAME type-name scheme as the TS
21
+ // reference (<Name>, <Name>LoadMatch, <Name>ListMatch, <Name>CreateData,
22
+ // <Name>UpdateData, <Name>RemoveMatch).
20
23
 
21
24
  import {
22
25
  cmp, each, names,
23
26
  File, Content,
24
27
  } from '@voxgig/sdkgen'
25
28
 
26
- import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
29
+ import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
27
30
 
28
31
  import {
29
32
  KIT,
@@ -42,15 +45,29 @@ function propKey(name: string): string {
42
45
 
43
46
 
44
47
  const EntityTypes = cmp(function EntityTypes(props: any) {
45
- const { model } = props.ctx$
46
-
47
- const entity = getModelPath(model, `main.${KIT}.entity`)
48
- const entityList = each(entity).filter((e: any) => e.active !== false)
48
+ const { model, log } = props.ctx$
49
+
50
+ // only_active:false getModelPath DROPS active:false entries by default,
51
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
52
+ // collection, so inactive entities still get generated entity code that
53
+ // references these typed names. The typed model must cover them too.
54
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
55
+ // Emit for EVERY entity that gets generated entity code: the consumer
56
+ // scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
57
+ // filter, so inactive entities still get class files referencing these
58
+ // typed names. Filter on `name` (always present), NOT `active` — parity
59
+ // with the go emitter's fix.
60
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
49
61
  // Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
50
62
  // entity not yet named (e.g. a fieldless placeholder) would otherwise read
51
63
  // `Name = undefined` below. Parity with the go emitter's fix.
52
64
  entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
53
65
 
66
+ // Surface duplicate generated type names (two entities with the same
67
+ // PascalCase Name) — they would redeclare a type in statically-typed
68
+ // targets. Detection only; renaming is a model-level decision.
69
+ warnEntityTypeCollisions(entity, log, LANG)
70
+
54
71
  File({ name: model.const.Name + 'Types.' + LANG }, () => {
55
72
 
56
73
  Content(`// Typed models for the ${model.const.Name} SDK (JSDoc typedefs).
@@ -18,9 +18,11 @@ const MainEntity = cmp(async function MainEntity(props: any) {
18
18
 
19
19
  Content(`
20
20
  // Entity access: \`client.${entity.Name}().list()\` / \`client.${entity.Name}().load({ id })\`.
21
- ${entity.Name}(data) {
21
+ // The argument is the entity OPTIONS object (passed to the entity
22
+ // constructor as entopts), not initial entity data.
23
+ ${entity.Name}(entopts) {
22
24
  const self = this
23
- return new ${cls}(self,data)
25
+ return new ${cls}(self, entopts)
24
26
  }
25
27
 
26
28
  `)
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -46,7 +46,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
46
46
  // Model-driven id key: null when this entity has no id-like field.
47
47
  const idF = entityIdField(entity)
48
48
  // Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
49
- const eVar = safeVarName(entity.name, 'js')
49
+ const eVar = exampleVarName(entity.name, 'js')
50
50
 
51
51
  Content(`
52
52
  ### ${entity.Name}
@@ -108,7 +108,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
108
108
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
109
109
  const loadArg = 0 < loadItems.length
110
110
  ? `{ ${loadItems.map((it: any) =>
111
- `${it.name}: ${exampleValue(entity, entity.op && entity.op.load, it.name,
111
+ `${jsKey(it.name)}: ${exampleValue(entity, entity.op && entity.op.load, it.name,
112
112
  it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')} }`
113
113
  : ''
114
114
  Content(`#### Example: Load
@@ -144,7 +144,7 @@ const ${eVar}s = await client.${entity.Name}().list()
144
144
  const ${eVar} = await client.${entity.Name}().create({
145
145
  `)
146
146
  createItems.map((it: any) => {
147
- Content(` ${it.name}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
147
+ Content(` ${jsKey(it.name)}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
148
148
  `)
149
149
  })
150
150
  Content(`})
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, entityIdField, entityDataIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, entityIdField, entityDataIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -19,7 +19,7 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
19
19
  // only when NO entity exposes any op (a direct()-only SDK).
20
20
  const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
21
21
  const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
22
- const eVar = safeVarName(eName.toLowerCase(), 'js')
22
+ const eVar = exampleVarName(eName.toLowerCase(), 'js')
23
23
 
24
24
  const primaryOpDef = exampleEntity && primaryOp && exampleEntity.op && exampleEntity.op[primaryOp]
25
25
  const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
@@ -32,14 +32,23 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
32
32
  if (!exampleEntity || !primaryOp) return ''
33
33
  if ('list' === primaryOp) return ''
34
34
  if (isMatchOp) {
35
- return idF ? `{ ${idF}: ${exampleValue(exampleEntity, primaryOpDef, idF, idPlaceholder)} }` : ''
35
+ // Every REQUIRED match key (id first), not just idF a composite-match
36
+ // entity (database_id + id) needs them all. Mirrors ReadmeTopTest.
37
+ const items = opRequestShape(exampleEntity, primaryOp).items
38
+ .filter((it: any) => !it.optional || it.name === idF)
39
+ .sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
40
+ if (0 === items.length) return ''
41
+ const pairs = items.map((it: any) =>
42
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
43
+ it.name === idF ? idPlaceholder : 'example_' + it.name)}`)
44
+ return `{ ${pairs.join(', ')} }`
36
45
  }
37
46
  const items = opRequestShape(exampleEntity, primaryOp).items
38
47
  .filter((it: any) => it.name !== idF && it.name !== 'id')
39
48
  const required = items.filter((it: any) => !it.optional)
40
49
  const chosen = required.length ? required : items.slice(0, 3)
41
50
  const pairs = chosen.map((it: any) =>
42
- `${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
51
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
43
52
  return `{ ${pairs.join(', ')} }`
44
53
  }
45
54
  const testCallArg = primaryArg('test01')
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityOps, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -47,7 +47,7 @@ const client = ${ctor}
47
47
  // then load/remove match on no argument and update omits the id.
48
48
  const idF = entityIdField(exampleEntity)
49
49
  // Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
50
- const eVar = safeVarName(exampleEntity.name, 'js')
50
+ const eVar = exampleVarName(exampleEntity.name, 'js')
51
51
  const exampleFields = (opname: string): string[] => {
52
52
  // ids are rendered separately as the match key for update/remove; a
53
53
  // REQUIRED id stays for create (dropping it makes the payload
@@ -64,7 +64,7 @@ const client = ${ctor}
64
64
  ? (required.length ? required : items.slice(0, 2))
65
65
  : required.concat(optional).slice(0, Math.max(2, required.length))
66
66
  return chosen.map((it: any) =>
67
- ` ${it.name}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
67
+ ` ${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
68
68
  }
69
69
 
70
70
  // The full REQUIRED match for load/remove (id first, then parent path
@@ -77,7 +77,7 @@ const client = ${ctor}
77
77
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
78
78
  return 0 < matchItems.length
79
79
  ? `{ ${matchItems.map((it: any) =>
80
- `${it.name}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op[opname], it.name,
80
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op[opname], it.name,
81
81
  it.name === idF ? exampleEntity.name + '_id' : 'example_' + it.name)}`).join(', ')} }`
82
82
  : ''
83
83
  }
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -185,7 +185,7 @@ Alias for \`${model.Name}SDK.test()\`.
185
185
  // which case load/remove match on no argument and update omits the id.
186
186
  const idF = entityIdField(ent)
187
187
  // Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
188
- const eVar = safeVarName(ent.name, 'js')
188
+ const eVar = exampleVarName(ent.name, 'js')
189
189
 
190
190
  Content(`
191
191
  ---
@@ -281,7 +281,7 @@ ${info.desc}
281
281
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
282
282
  const arg = 0 < matchItems.length
283
283
  ? `{ ${matchItems.map((it: any) =>
284
- `${it.name}: ${exampleValue(ent, ent.op && ent.op[opname], it.name,
284
+ `${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op[opname], it.name,
285
285
  it.name === idF ? ent.name + '_id' : it.name)}`).join(', ')} }`
286
286
  : ''
287
287
  Content(`\`\`\`ts
@@ -309,7 +309,7 @@ const results = await client.${ent.Name}().${opname}()
309
309
  const result = await client.${ent.Name}().create({
310
310
  `)
311
311
  createItems.map((it: any) => {
312
- Content(` ${it.name}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
312
+ Content(` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
313
313
  `)
314
314
  })
315
315
  Content(`})
@@ -325,7 +325,7 @@ const result = await client.${ent.Name}().create({
325
325
  .sort((a: any, b: any) =>
326
326
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
327
327
  const updateLines = updateItems.map((it: any) =>
328
- ` ${it.name}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
328
+ ` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
329
329
  it.name === idF ? ent.name + '_id' : it.name)},\n`).join('')
330
330
  Content(`\`\`\`ts
331
331
  const result = await client.${ent.Name}().update({
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -29,7 +29,7 @@ const client = ${ctor}
29
29
 
30
30
  if (exampleEntity) {
31
31
  const eName = nom(exampleEntity, 'Name')
32
- const eVar = safeVarName(eName.toLowerCase(), 'js')
32
+ const eVar = exampleVarName(eName.toLowerCase(), 'js')
33
33
  // ACTIVE ops only — an inactive op generates no method, so an example
34
34
  // calling it would be wrong.
35
35
  const opnames = entityOps(exampleEntity)
@@ -57,7 +57,7 @@ for (const ${eVar} of ${eVar}s) {
57
57
 
58
58
  if (nestedEntity) {
59
59
  const neName = nom(nestedEntity, 'Name')
60
- const neVar = safeVarName(neName.toLowerCase(), 'js')
60
+ const neVar = exampleVarName(neName.toLowerCase(), 'js')
61
61
  const loadOp = nestedEntity.op && nestedEntity.op.load
62
62
 
63
63
  // Every REQUIRED load-match key (parent keys like page_id first, the
@@ -69,7 +69,7 @@ for (const ${eVar} of ${eVar}s) {
69
69
  .sort((a: any, b: any) =>
70
70
  (a.name === neIdF ? 1 : 0) - (b.name === neIdF ? 1 : 0))
71
71
  .map((it: any) =>
72
- ` ${it.name}: ${exampleValue(nestedEntity, loadOp, it.name,
72
+ ` ${jsKey(it.name)}: ${exampleValue(nestedEntity, loadOp, it.name,
73
73
  it.name === neIdF ? 'example_id' : 'example_' + it.name)},`)
74
74
 
75
75
  Content(`
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -25,7 +25,7 @@ const client = ${model.const.Name}SDK.test()
25
25
  if (exampleEntity && primaryOp) {
26
26
  const eName = nom(exampleEntity, 'Name')
27
27
  // A list() result is an array — name the variable accordingly.
28
- const eVar = safeVarName(eName.toLowerCase(), 'js') +
28
+ const eVar = exampleVarName(eName.toLowerCase(), 'js') +
29
29
  ('list' === primaryOp ? 's' : '')
30
30
  const primaryOpDef = exampleEntity.op && exampleEntity.op[primaryOp]
31
31
  const idF = entityIdField(exampleEntity)
@@ -39,7 +39,7 @@ const client = ${model.const.Name}SDK.test()
39
39
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
40
40
  arg = 0 < items.length
41
41
  ? `{ ${items.map((it: any) =>
42
- `${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
42
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
43
43
  it.name === idF ? 'test01' : 'example_' + it.name)}`).join(', ')} }`
44
44
  : ''
45
45
  } else if ('create' === primaryOp || 'update' === primaryOp) {
@@ -48,7 +48,7 @@ const client = ${model.const.Name}SDK.test()
48
48
  const required = items.filter((it: any) => !it.optional)
49
49
  const chosen = required.length ? required : items.slice(0, 3)
50
50
  arg = `{ ${chosen.map((it: any) =>
51
- `${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`).join(', ')} }`
51
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`).join(', ')} }`
52
52
  }
53
53
  Content(`const ${eVar} = await client.${eName}().${primaryOp}(${arg})
54
54
  // ${eVar} is ${'list' === primaryOp ? 'an array of bare entities' : 'a bare entity'} populated with mock data
@@ -17,6 +17,7 @@ import {
17
17
  cmp,
18
18
  snakify,
19
19
  isAuthActive,
20
+ jsProp,
20
21
  } from '@voxgig/sdkgen'
21
22
 
22
23
 
@@ -175,7 +176,7 @@ function generateDirectLoad(model: Model, entity: ModelEntity) {
175
176
  const listParamLines = liveListParams.map((lp: any) =>
176
177
  ` ${lp.name}: setup.idmap['${lp.key}'],`).join('\n')
177
178
  const ancestorParamLines = liveAncestorParams.map((lp: any) =>
178
- ` params.${lp.name} = setup.idmap['${lp.key}']`).join('\n')
179
+ ` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n')
179
180
 
180
181
  liveParamsBlock = ` if (setup.live) {
181
182
  const listResult = await client.direct({
@@ -193,11 +194,11 @@ ${listParamLines}
193
194
  params.id = listData[0].id
194
195
  ${ancestorParamLines}
195
196
  } else {
196
- ${loadParams.map((p: any, i: number) => ` params.${p.name} = 'direct0${i + 1}'`).join('\n')}
197
+ ${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
197
198
  }`
198
199
  } else {
199
200
  liveParamsBlock = ` if (!setup.live) {
200
- ${loadParams.map((p: any, i: number) => ` params.${p.name} = 'direct0${i + 1}'`).join('\n')}
201
+ ${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
201
202
  }`
202
203
  }
203
204
 
@@ -254,9 +255,9 @@ function generateDirectList(model: Model, entity: ModelEntity) {
254
255
  let paramsBlock = ''
255
256
  if (listParams.length > 0) {
256
257
  const liveLines = liveParams.map((lp: any) =>
257
- ` params.${lp.name} = setup.idmap['${lp.key}']`).join('\n')
258
+ ` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n')
258
259
  const mockLines = listParams.map((p: any, i: number) =>
259
- ` params.${p.name} = 'direct0${i + 1}'`).join('\n')
260
+ ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')
260
261
 
261
262
  paramsBlock = ` const params = {}
262
263
  if (setup.live) {
@@ -30,6 +30,7 @@ import {
30
30
  cmp,
31
31
  each,
32
32
  isAuthActive,
33
+ entityDataIdField,
33
34
  } from '@voxgig/sdkgen'
34
35
 
35
36
 
@@ -270,6 +271,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
270
271
 
271
272
  const generateList: OpGen = (ctx, step, index) => {
272
273
  const { entity, flow } = ctx
274
+ const hasDataId = null != entityDataIdField(entity)
273
275
  const ref = step.input.ref ?? entity.name + '_ref01'
274
276
  const entvar = step.input.entvar ?? ref + '_ent'
275
277
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -304,12 +306,12 @@ const generateList: OpGen = (ctx, step, index) => {
304
306
  const hasRefData = validRef && allSteps.some(s => 'create' === s.op &&
305
307
  ((s.input.ref ?? entity.name + '_ref01') === validRef))
306
308
 
307
- if ('ItemExists' === validator.apply && hasRefData) {
309
+ if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
308
310
  Content(`
309
311
  assert(!isempty(select(${listvar}, { id: ${validRef}_data.id })))
310
312
  `)
311
313
  }
312
- else if ('ItemNotExists' === validator.apply && hasRefData) {
314
+ else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
313
315
  Content(`
314
316
  assert(isempty(select(${listvar}, { id: ${validRef}_data.id })))
315
317
  `)
@@ -448,6 +450,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
448
450
 
449
451
  const generateRemove: OpGen = (ctx, step, index) => {
450
452
  const { entity, flow } = ctx
453
+ if (null == entityDataIdField(entity)) {
454
+ return
455
+ }
451
456
  const ref = step.input.ref ?? entity.name + '_ref01'
452
457
  const entvar = step.input.entvar ?? ref + '_ent'
453
458
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -30,37 +30,6 @@ describe('EntityNameEntity', async () => {
30
30
  })
31
31
 
32
32
 
33
- // Feature #4: the entity `stream(action, ...)` method runs the op pipeline
34
- // and returns an async iterator over result items. With the streaming
35
- // feature active it yields the feature's incremental output; otherwise it
36
- // falls back to the materialised list so `stream` always yields.
37
- test('stream', async () => {
38
- const seed = {
39
- entity: {
40
- EntityLower: { s1: { id: 's1' }, s2: { id: 's2' }, s3: { id: 's3' } }
41
- }
42
- }
43
-
44
- // Fallback: streaming inactive -> yields the materialised list items.
45
- const base = ProjectNameSDK.test(seed)
46
- const seen = []
47
- for await (const item of base.EntityName().stream('list')) {
48
- seen.push(item)
49
- }
50
- assert.equal(seen.length, 3)
51
-
52
- // Inbound: streaming active -> yields each item from the feature iterator.
53
- if (config.feature && config.feature.streaming) {
54
- const sdk = ProjectNameSDK.test(seed, { feature: { streaming: { active: true } } })
55
- const got = []
56
- for await (const item of sdk.EntityName().stream('list')) {
57
- if (Array.isArray(item)) { got.push(...item) } else { got.push(item) }
58
- }
59
- assert.equal(got.length, 3)
60
- }
61
- })
62
-
63
-
64
33
  test('basic', async () => {
65
34
  // <[SLOT:basic]>
66
35
  })