@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,104 @@
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 { scalaVarName, scalaPackage } from './utility_scala'
11
+
12
+
13
+ // A type-correct Scala 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 java.util.Map[String, Object].
16
+ function scalaLit(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 'java.util.List.of()'
22
+ if ('OBJECT' === k) return 'java.util.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(`\`\`\`scala
39
+ import ${scalaPackage(model)}.core.${SDK}
40
+
41
+ `)
42
+
43
+ if (authActive) {
44
+ Content(`val options = new java.util.LinkedHashMap[String, Object]()
45
+ options.put("apikey", System.getenv("${envName(model)}_APIKEY"))
46
+ val client = new ${SDK}(options)
47
+
48
+ `)
49
+ }
50
+ else {
51
+ Content(`val client = new ${SDK}()
52
+
53
+ `)
54
+ }
55
+
56
+ if (exampleEntity) {
57
+ // Sanitise the local variable name — an entity whose camelCased name is a
58
+ // Scala keyword gets a trailing underscore (scalaVarName) so the snippet
59
+ // compiles.
60
+ const eVar = scalaVarName(exampleEntity.name)
61
+ const accessor = scalaVarName(exampleEntity.name)
62
+ const eNameLower = nom(exampleEntity, 'Name').toLowerCase()
63
+ const opnames = Object.keys(exampleEntity.op || {})
64
+ // Model-driven id key: null when the entity has no id-like field, in which
65
+ // case the load example takes an empty match.
66
+ const idF = entityIdField(exampleEntity)
67
+
68
+ if (opnames.includes('list')) {
69
+ Content(`// List all ${eNameLower}s (returns Object, an aggregate list; raises on error)
70
+ val ${eVar}List = client.${accessor}(null).list(null, null)
71
+ println(${eVar}List)
72
+ `)
73
+ }
74
+
75
+ if (opnames.includes('load')) {
76
+ // Every REQUIRED load-match key (id first, then parent path params like
77
+ // page_id) — the same shape the runtime resolves path params from, so
78
+ // the example always works.
79
+ const loadItems = opRequestShape(exampleEntity, 'load').items
80
+ .filter((it: any) => !it.optional || it.name === idF)
81
+ .sort((a: any, b: any) =>
82
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
83
+ const loadArg = 0 < loadItems.length
84
+ ? `java.util.Map.of(${loadItems.map((it: any) =>
85
+ `"${it.name}", ${scalaLit(it.type,
86
+ it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')})`
87
+ : 'null'
88
+ Content(`
89
+ // Load a specific ${eNameLower} (returns the record, raises on error)
90
+ val ${eVar} = client.${accessor}(null).load(${loadArg}, null)
91
+ println(${eVar})
92
+ `)
93
+ }
94
+ }
95
+
96
+ Content(`\`\`\`
97
+ `)
98
+
99
+ })
100
+
101
+
102
+ export {
103
+ ReadmeTopQuick
104
+ }
@@ -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 { scalaVarName } from './utility_scala'
10
+
11
+
12
+ // A type-correct Scala literal for a field's canonical type.
13
+ function scalaLit(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 'java.util.List.of()'
19
+ if ('OBJECT' === k) return 'java.util.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(`\`\`\`scala
36
+ val 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
+ ? `java.util.Map.of(${items.map((it: any) =>
52
+ `"${it.name}", ${it.name === idF ? '"test01"' : scalaLit(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 = `java.util.Map.of(${chosen.map((it: any) =>
60
+ `"${it.name}", ${scalaLit(it.type)}`).join(', ')})`
61
+ }
62
+ const eVar = scalaVarName(exampleEntity.name) + ('list' === primaryOp ? 'List' : '')
63
+ const accessor = scalaVarName(exampleEntity.name)
64
+ Content(`val ${eVar} = client.${accessor}(null).${primaryOp}(${arg}, null)
65
+ println(${eVar})
66
+ `)
67
+ }
68
+
69
+ Content(`\`\`\`
70
+ `)
71
+
72
+ })
73
+
74
+
75
+ export {
76
+ ReadmeTopTest
77
+ }
@@ -17,6 +17,7 @@ import {
17
17
  each,
18
18
  buildIdNames,
19
19
  getMatchEntries,
20
+ entityDataIdField,
20
21
  } from '@voxgig/sdkgen'
21
22
 
22
23
 
@@ -119,6 +120,23 @@ object ${EntityName}EntityTest {
119
120
  Content(` val now = System.currentTimeMillis()
120
121
  `)
121
122
 
123
+ // Preamble bootstrap: a flow with no `create` step (e.g. a read-only
124
+ // load/list entity) has nothing to declare the standard `<ref>_data` var
125
+ // that a later load/update/remove reads its id from. Seed it from the
126
+ // shipped "existing" fixtures here, mirroring the ts generator. Guarded on a
127
+ // DATA id field — an entity that carries no id has no `.get("id")` to read.
128
+ const flowHasCreate = allSteps.some((s: any) => s.op === 'create')
129
+ const needsPreambleData = !flowHasCreate &&
130
+ null != entityDataIdField(entity) &&
131
+ allSteps.some((s: any) => ['load', 'update', 'remove'].includes(s.op))
132
+ if (needsPreambleData) {
133
+ const preambleData = scalaVarName(entity.name + '_ref01_data')
134
+ Content(` val ${preambleData}Raw = Struct.items(Helpers.toMapAny(
135
+ Struct.getpath(entityData, "existing.${ENTLOWER}")))
136
+ val ${preambleData} = Helpers.toMapAny(${preambleData}Raw.get(0).get(1))
137
+ `)
138
+ }
139
+
122
140
  // Model-driven step iteration (sorted-key order for byte-stable output).
123
141
  each(basicflow.step, (step: any, index: any) => {
124
142
  const opgen: OpGen = GENERATE_OP[step.op]
@@ -166,7 +184,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
166
184
  ${datavar} = Helpers.toMapAny(${datavar}Result)
167
185
  rep.check("${ENTLOWER}.create.map", ${datavar} != null, "expected create result to be a map")
168
186
  `)
169
- if (null != entity.id) {
187
+ if (null != entityDataIdField(entity)) {
170
188
  Content(` rep.check("${ENTLOWER}.create.id", ${datavar} != null && ${datavar}.get("id") != null, "expected created entity to have an id")
171
189
  `)
172
190
  }
@@ -199,8 +217,12 @@ const generateList: OpGen = (ctx, step, index) => {
199
217
  `)
200
218
  }
201
219
 
220
+ // Select-by-id assertions require the DATA type to carry an id field
221
+ // (entityDataIdField); an entity keyed only on a load-MATCH id it does not
222
+ // return as data has no `.get("id")` to compare, so skip them.
223
+ const hasDataId = null != entityDataIdField(entity)
202
224
  const allSteps = Object.values(flow.step) as any[]
203
- const listvarUsed = !!step.valid?.some((v: any) => {
225
+ const listvarUsed = hasDataId && !!step.valid?.some((v: any) => {
204
226
  if ('ItemExists' !== v.apply && 'ItemNotExists' !== v.apply) return false
205
227
  const validRef = v.def?.ref
206
228
  return validRef && allSteps.some((s: any) => 'create' === s.op &&
@@ -222,12 +244,12 @@ const generateList: OpGen = (ctx, step, index) => {
222
244
  ((s.input.ref ?? entity.name + '_ref01') === validRef))
223
245
  const refDataVar = scalaVarName(validRef + '_data')
224
246
 
225
- if ('ItemExists' === validator.apply && hasRefData) {
247
+ if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
226
248
  Content(` val ${listvar}Found = Struct.select(
227
249
  SdkTestSupport.entityListToData(${listvar}), SdkTestSupport.om("id" -> ${refDataVar}.get("id")))
228
250
  rep.check("${ENTLOWER}.list.exists", !Struct.isempty(${listvar}Found), "expected to find created entity in list")
229
251
  `)
230
- } else if ('ItemNotExists' === validator.apply && hasRefData) {
252
+ } else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
231
253
  Content(` val ${listvar}NotFound = Struct.select(
232
254
  SdkTestSupport.entityListToData(${listvar}), SdkTestSupport.om("id" -> ${refDataVar}.get("id")))
233
255
  rep.check("${ENTLOWER}.list.notexists", Struct.isempty(${listvar}NotFound), "expected removed entity to not be in list")
@@ -251,7 +273,7 @@ const generateUpdate: OpGen = (ctx, step, index) => {
251
273
  const needsEnt = !priorSteps.some((s: any) =>
252
274
  ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
253
275
 
254
- const hasEntId = null != entity.id
276
+ const hasDataId = null != entityDataIdField(entity)
255
277
 
256
278
  Content(` // UPDATE
257
279
  `)
@@ -261,7 +283,7 @@ const generateUpdate: OpGen = (ctx, step, index) => {
261
283
  }
262
284
  Content(` val ${datavar}Up = new LinkedHashMap[String, Object]()
263
285
  `)
264
- if (hasEntId) {
286
+ if (hasDataId) {
265
287
  Content(` ${datavar}Up.put("id", ${srcdatavar}.get("id"))
266
288
  `)
267
289
  }
@@ -293,7 +315,7 @@ const generateUpdate: OpGen = (ctx, step, index) => {
293
315
  val ${resdatavar} = Helpers.toMapAny(${resdatavar}Result)
294
316
  rep.check("${ENTLOWER}.update.map", ${resdatavar} != null, "expected update result to be a map")
295
317
  `)
296
- if (hasEntId) {
318
+ if (hasDataId) {
297
319
  Content(` rep.eq("${ENTLOWER}.update.id", ${datavar}Up.get("id"), ${resdatavar}.get("id"))
298
320
  `)
299
321
  }
@@ -328,7 +350,7 @@ const generateLoad: OpGen = (ctx, step, index) => {
328
350
  return false
329
351
  })
330
352
 
331
- const hasEntId = null != entity.id
353
+ const hasDataId = null != entityDataIdField(entity)
332
354
 
333
355
  Content(` // LOAD
334
356
  `)
@@ -336,7 +358,7 @@ const generateLoad: OpGen = (ctx, step, index) => {
336
358
  Content(` val ${entvar} = client.${accessor}(null)
337
359
  `)
338
360
  }
339
- if (!hasSrcData && hasEntId) {
361
+ if (!hasSrcData && hasDataId) {
340
362
  Content(` val ${srcdatavar}Raw = Struct.items(Helpers.toMapAny(
341
363
  Struct.getpath(entityData, "existing.${ENTLOWER}")))
342
364
  val ${srcdatavar} = Helpers.toMapAny(${srcdatavar}Raw.get(0).get(1))
@@ -344,7 +366,7 @@ const generateLoad: OpGen = (ctx, step, index) => {
344
366
  }
345
367
  Content(` val ${matchvar} = new LinkedHashMap[String, Object]()
346
368
  `)
347
- if (hasEntId) {
369
+ if (hasDataId) {
348
370
  Content(` ${matchvar}.put("id", ${srcdatavar}.get("id"))
349
371
  val ${datavar}Loaded = ${entvar}.load(${matchvar}, null)
350
372
  val ${datavar}LoadResult = Helpers.toMapAny(${datavar}Loaded)
@@ -366,6 +388,12 @@ const generateRemove: OpGen = (ctx, step, index) => {
366
388
  const matchvar = scalaVarName(step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? '')))
367
389
  const srcdatavar = scalaVarName(step.input.srcdatavar ?? (ref + '_data'))
368
390
 
391
+ // The remove-by-id match reads ${srcdatavar}.get("id"); skip the whole step
392
+ // when the DATA type has no id field (there is no created id to remove by).
393
+ if (null == entityDataIdField(entity)) {
394
+ return
395
+ }
396
+
369
397
  const priorSteps = Object.values(flow.step).slice(0, Number(index)) as any[]
370
398
  const needsEnt = !priorSteps.some((s: any) =>
371
399
  ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
@@ -14,6 +14,7 @@ import { cmp, each, Folder, File, Content } from '@voxgig/sdkgen'
14
14
 
15
15
  import { TestEntity } from './TestEntity_scala'
16
16
  import { TestDirect } from './TestDirect_scala'
17
+ import { ReadmeExamplesTest } from './ReadmeExamplesTest_scala'
17
18
  import { scalaPackage } from './utility_scala'
18
19
 
19
20
 
@@ -54,6 +55,11 @@ const Test = cmp(function Test(props: any) {
54
55
  }
55
56
  })
56
57
 
58
+ // Documentation scala-examples presence + structure gate over the root
59
+ // README, scala/README.md and scala/REFERENCE.md. Driven through the same
60
+ // shared report by the SdkEntityTestMain aggregator below.
61
+ ReadmeExamplesTest({ target, scalapackage })
62
+
57
63
  // Aggregating main: run every generated per-entity test through one
58
64
  // shared report and exit non-zero on any failure.
59
65
  File({ name: 'SdkEntityTestMain.' + target.ext }, () => {
@@ -79,6 +85,8 @@ object SdkEntityTestMain {
79
85
  }
80
86
  }
81
87
  Content(`
88
+ ReadmeExamplesTest.run(rep)
89
+
82
90
  rep.finish("ENTITY")
83
91
  }
84
92
  }
@@ -0,0 +1,152 @@
1
+
2
+ // Typed-model generator (Swift target). Port of EntityTypes_rust.ts /
3
+ // EntityTypes_go.ts.
4
+ //
5
+ // Reads main.<KIT>.entity.<e>.fields[] and per-op params
6
+ // (op.<name>.points[].args.params[]) and emits one file,
7
+ // Sources/ProjectNameSDK/entity/<Name>Types.swift, with a `struct <Name>` per
8
+ // entity plus a request/match struct per active op. Field/param sentinels
9
+ // ($STRING, $INTEGER, ...) map to Swift types via the SHARED canonToType
10
+ // 'swift' column (the single source of truth per language — do not keep a
11
+ // local table here).
12
+ //
13
+ // DESIGN NOTE: the Swift runtime is fully DYNAMIC — every op takes and returns
14
+ // the vendored `Value` enum (throws on error) and the op fragments emit no
15
+ // typed wrappers. These typed models are therefore DOCUMENTARY: they mirror the
16
+ // entity/op shapes for reference and IDE support, but are not wired into the op
17
+ // signatures. They compile as part of the SwiftPM target (every .swift under
18
+ // Sources/ProjectNameSDK is built) so they stay in sync with the model.
19
+ // * Optional (req:false) member -> `T?`.
20
+ // * Unknown/missing sentinel -> the dynamic `Value` (never fails), matching
21
+ // the runtime's open shape.
22
+
23
+ import {
24
+ cmp, each, names,
25
+ File, Content, Folder,
26
+ } from '@voxgig/sdkgen'
27
+
28
+ import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
29
+
30
+ import {
31
+ KIT,
32
+ getModelPath,
33
+ } from '@voxgig/apidef'
34
+
35
+ import { swiftVarName } from './utility_swift'
36
+
37
+
38
+ const LANG = 'swift'
39
+
40
+
41
+ // One Swift struct property line. `optional` -> `T?`. Property names are
42
+ // keyword-safe + lowerCamelCase via swiftVarName; duplicates are dropped by the
43
+ // caller so a struct never declares the same property twice.
44
+ function propLine(name: string, sentinel: any, optional: boolean): string {
45
+ const st = canonToType(sentinel, LANG)
46
+ const typ = optional ? `${st}?` : st
47
+ return ` public var ${swiftVarName(name)}: ${typ}\n`
48
+ }
49
+
50
+
51
+ // Emit a `struct <typeName>` from {name, type, optional} items, dropping
52
+ // duplicate Swift identifiers (two model names can collapse to one ident). An
53
+ // empty struct is a valid, zero-property shape.
54
+ function emitStruct(comment: string, typeName: string, items: any[]): void {
55
+ Content(`${comment}
56
+ public struct ${typeName} {
57
+ `)
58
+ const seen = new Set<string>()
59
+ items.forEach((it: any) => {
60
+ if (null == it || null == it.name) return
61
+ const ident = swiftVarName(it.name)
62
+ if (seen.has(ident)) return
63
+ seen.add(ident)
64
+ Content(propLine(it.name, it.type, !!it.optional))
65
+ })
66
+ Content(`}
67
+
68
+ `)
69
+ }
70
+
71
+
72
+ const EntityTypes = cmp(function EntityTypes(props: any) {
73
+ const { target } = props
74
+ const { model, log } = props.ctx$
75
+
76
+ // only_active:false — getModelPath DROPS active:false entries by default,
77
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
78
+ // collection, so inactive entities still get generated entity code that
79
+ // references these typed names. The typed model must cover them too.
80
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
81
+ // Emit for every entity that gets an entity file (filter on `name`, always
82
+ // present; derive `Name` here so the struct set is deterministic — parity
83
+ // with the rust/go emitter's fix).
84
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
85
+ entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
86
+
87
+ // Surface duplicate generated type names (two entities with the same
88
+ // PascalCase Name) — they would redeclare a type in statically-typed
89
+ // targets. Detection only; renaming is a model-level decision.
90
+ warnEntityTypeCollisions(entity, log, LANG)
91
+
92
+ Folder({ name: 'Sources' }, () => {
93
+ Folder({ name: 'ProjectNameSDK' }, () => {
94
+ Folder({ name: 'entity' }, () => {
95
+
96
+ File({ name: model.const.Name + 'Types.' + target.ext }, () => {
97
+
98
+ Content(`// Typed models for the ${model.const.Name} SDK.
99
+ //
100
+ // GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
101
+ // params (op.<name>.points[].args.params[]). Field/param types are mapped
102
+ // from the canonical type sentinels. Do not edit by hand.
103
+ //
104
+ // These are DOCUMENTARY: the SDK runtime is dynamic (ops take/return the
105
+ // \`Value\` enum), so nothing consumes these structs yet — they mirror the
106
+ // entity/op shapes for reference and IDE support.
107
+
108
+ import Foundation
109
+
110
+ `)
111
+
112
+ entityList.forEach((ent: any) => {
113
+ const Name = ent.Name
114
+ const fields = (ent.fields ? each(ent.fields) : [])
115
+ .filter((f: any) => f.active !== false)
116
+
117
+ // Entity data model: one property per field. req:false -> optional.
118
+ emitStruct(
119
+ `/// ${Name} is the typed data model for the ${ent.name} entity.`,
120
+ Name,
121
+ fields.map((f: any) => ({ name: f.name, type: f.type, optional: false === f.req }))
122
+ )
123
+
124
+ // Per active op: a request/match struct. Members and their
125
+ // optionality come from the shared partiality policy
126
+ // (opRequestShape).
127
+ const ops = ent.op || {}
128
+ ;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
129
+ if (null == ops[opname]) {
130
+ return
131
+ }
132
+
133
+ const typeName = opTypeName(Name, opname)
134
+ const { items } = opRequestShape(ent, opname)
135
+
136
+ emitStruct(
137
+ `/// ${typeName} is the typed request payload for ${Name}.${opname}.`,
138
+ typeName,
139
+ items
140
+ )
141
+ })
142
+ })
143
+ })
144
+ })
145
+ })
146
+ })
147
+ })
148
+
149
+
150
+ export {
151
+ EntityTypes,
152
+ }
@@ -24,6 +24,7 @@ import { Gitignore } from './Gitignore_swift'
24
24
  import { MainEntity } from './MainEntity_swift'
25
25
  import { SdkError } from './SdkError_swift'
26
26
  import { EntityBase } from './EntityBase_swift'
27
+ import { EntityTypes } from './EntityTypes_swift'
27
28
 
28
29
 
29
30
  const Main = cmp(async function Main(props: any) {
@@ -86,6 +87,10 @@ const Main = cmp(async function Main(props: any) {
86
87
  })
87
88
  })
88
89
  })
90
+
91
+ // entity/<Name>Types.swift — documentary typed models (one struct per entity
92
+ // + per op). Compiles with the SwiftPM target; nothing consumes it yet.
93
+ EntityTypes({ target })
89
94
  })
90
95
 
91
96
 
@@ -0,0 +1,176 @@
1
+
2
+ import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+ import { swiftVarName } from './utility_swift'
10
+
11
+
12
+ // Type names come from the shared canonToType 'swift' column (single source of truth).
13
+
14
+ // A type-correct Swift `Value` literal for a field's canonical type.
15
+ function swiftLit(type: any, placeholder: string = 'example'): string {
16
+ const k = canonKey(type)
17
+ if ('INTEGER' === k) return '.int(1)'
18
+ if ('NUMBER' === k) return '.double(1.0)'
19
+ if ('BOOLEAN' === k) return '.bool(true)'
20
+ if ('ARRAY' === k) return '.list([])'
21
+ if ('OBJECT' === k) return '.map(VMap())'
22
+ return `.string("${placeholder}")`
23
+ }
24
+
25
+
26
+ // Operation method spelling for Swift: methods over the loose object model,
27
+ // taking optional (reqmatch/reqdata, ctrl) and throwing on error. The op
28
+ // descriptions are language-agnostic.
29
+ const OP_DESC: Record<string, { method: string, desc: string }> = {
30
+ load: { method: 'load(match, nil)', desc: 'Load a single entity by match criteria.' },
31
+ list: { method: 'list(nil, nil)', desc: 'List entities, optionally matching the given criteria.' },
32
+ create: { method: 'create(data, nil)', desc: 'Create a new entity with the given data.' },
33
+ update: { method: 'update(data, nil)', desc: 'Update an existing entity.' },
34
+ remove: { method: 'remove(match, nil)', desc: 'Remove the matching entity.' },
35
+ }
36
+
37
+
38
+ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
39
+ const { target } = props
40
+ const { model } = props.ctx$
41
+
42
+ const entity = getModelPath(model, `main.${KIT}.entity`)
43
+
44
+ const publishedEntities = each(entity)
45
+ .filter((entity: any) => entity.active !== false)
46
+
47
+ if (0 === publishedEntities.length) {
48
+ return
49
+ }
50
+
51
+ Content(`
52
+
53
+ ## Entities
54
+
55
+ `)
56
+
57
+ publishedEntities.map((entity: any) => {
58
+ const opnames = Object.keys(entity.op || {})
59
+ const fields = entity.fields || []
60
+ // Model-driven id key: null when this entity has no id-like field.
61
+ const idF = entityIdField(entity)
62
+ // Sanitise the local variable name — a camelCased Swift keyword gets a
63
+ // trailing underscore (swiftVarName) so the snippet compiles.
64
+ const eVar = swiftVarName(entity.name)
65
+ const accessor = entity.Name
66
+
67
+ Content(`
68
+ ### ${entity.Name}
69
+
70
+ `)
71
+
72
+ if (entity.short) {
73
+ Content(`${entity.short}
74
+
75
+ `)
76
+ }
77
+
78
+ Content(`Create an instance: \`let ${eVar} = client.${accessor}()\`
79
+
80
+ `)
81
+
82
+ if (opnames.length > 0) {
83
+ Content(`#### Operations
84
+
85
+ | Method | Description |
86
+ | --- | --- |
87
+ `)
88
+ opnames.map((opname: string) => {
89
+ const info = OP_DESC[opname]
90
+ if (info) {
91
+ Content(`| \`${info.method}\` | ${info.desc} |
92
+ `)
93
+ }
94
+ })
95
+
96
+ Content(`
97
+ `)
98
+ }
99
+
100
+ if (fields.length > 0) {
101
+ Content(`#### Fields
102
+
103
+ | Field | Type | Description |
104
+ | --- | --- | --- |
105
+ `)
106
+
107
+ each(fields, (field: any) => {
108
+ const desc = field.short || ''
109
+ Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
110
+ `)
111
+ })
112
+
113
+ Content(`
114
+ `)
115
+ }
116
+
117
+ if (opnames.includes('load')) {
118
+ // The id key plus every REQUIRED match key (parent path params like
119
+ // page_id) — the same shape the runtime resolves path params from, so
120
+ // the example always works.
121
+ const loadItems = opRequestShape(entity, 'load').items
122
+ .filter((it: any) => !it.optional || it.name === idF)
123
+ .sort((a: any, b: any) =>
124
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
125
+ const loadArg = 0 < loadItems.length
126
+ ? `VMap([${loadItems.map((it: any) =>
127
+ `("${it.name}", ${swiftLit(it.type,
128
+ it.name === idF ? entity.name + '_id' : it.name)})`).join(', ')}])`
129
+ : 'nil'
130
+ Content(`#### Example: Load
131
+
132
+ \`\`\`swift
133
+ let ${eVar} = try client.${accessor}().load(${loadArg}, nil)
134
+ \`\`\`
135
+
136
+ `)
137
+ }
138
+
139
+ if (opnames.includes('list')) {
140
+ Content(`#### Example: List
141
+
142
+ \`\`\`swift
143
+ let ${eVar}List = try client.${accessor}().list(nil, nil)
144
+ \`\`\`
145
+
146
+ `)
147
+ }
148
+
149
+ if (opnames.includes('create')) {
150
+ // Members come from the SAME shape the runtime validates
151
+ // (opRequestShape): every required member must appear — including a
152
+ // required id and parent keys like page_id — with a real literal.
153
+ const createItems = opRequestShape(entity, 'create').items
154
+ .filter((it: any) => !it.optional)
155
+ Content(`#### Example: Create
156
+
157
+ \`\`\`swift
158
+ let ${eVar} = try client.${accessor}().create(VMap([
159
+ `)
160
+ createItems.map((it: any, i: number) => {
161
+ const comma = i < createItems.length - 1 ? ',' : ''
162
+ Content(` ("${it.name}", ${swiftLit(it.type, 'example_' + it.name)})${comma} // ${canonToType(it.type, target.name)}
163
+ `)
164
+ })
165
+ Content(`]), nil)
166
+ \`\`\`
167
+
168
+ `)
169
+ }
170
+ })
171
+ })
172
+
173
+
174
+ export {
175
+ ReadmeEntity
176
+ }