@voxgig/sdkgen 1.3.13 → 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 +11 -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 +12 -2
  397. package/src/tsconfig.json +2 -0
  398. package/project/.sdk/tm/zig/build.zig.zon +0 -11
@@ -0,0 +1,152 @@
1
+
2
+
3
+ // Typed-model generator (Rust target). Port of 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, entity/types.rs, with
7
+ // a rust `struct <Name> { ... }` per entity plus a request/match struct per
8
+ // active op. Field/param sentinels ($STRING, $INTEGER, ...) map to rust types
9
+ // via the SHARED canonToType 'rust' column (the single source of truth per
10
+ // language — do not keep a local table here). Note OBJECT renders as
11
+ // std::collections::HashMap<String, Value> (fully qualified, no import
12
+ // needed).
13
+ //
14
+ // DESIGN NOTE (rust specifics vs the go reference):
15
+ // * The rust runtime is fully DYNAMIC: every op takes and returns the
16
+ // vendored `Value` enum (Result<Value, ...Error>), and the op fragments
17
+ // emit no typed wrappers. Go additionally emits `LoadTyped`/`ListTyped`
18
+ // wrappers plus json round-trip helpers; rust has no serde/json-derive
19
+ // dependency (only `ureq`), so these typed models are DOCUMENTARY: they
20
+ // mirror the entity/op shapes for reference and IDE support, but are not
21
+ // wired into the runtime. They compile as part of the crate (declared in
22
+ // entity/mod.rs) so they stay in sync with the model.
23
+ // * Optional (req:false) member -> `Option<T>`.
24
+ // * The module carries broad `#![allow(...)]` since nothing consumes the
25
+ // types yet (parity intent, not dead-code churn).
26
+
27
+ import {
28
+ cmp, each, names,
29
+ File, Content, Folder,
30
+ } from '@voxgig/sdkgen'
31
+
32
+ import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
33
+
34
+ import {
35
+ KIT,
36
+ getModelPath,
37
+ } from '@voxgig/apidef'
38
+
39
+ import { rustVarName } from './utility_rust'
40
+
41
+
42
+ const LANG = 'rust'
43
+
44
+
45
+ // One rust struct field line. `optional` -> Option<T>. Field names are
46
+ // snake_case + keyword-safe via rustVarName; duplicates are dropped by the
47
+ // caller so a struct never declares the same field twice.
48
+ function fieldLine(name: string, sentinel: any, optional: boolean): string {
49
+ const rt = canonToType(sentinel, LANG)
50
+ const typ = optional ? `Option<${rt}>` : rt
51
+ return ` pub ${rustVarName(name)}: ${typ},\n`
52
+ }
53
+
54
+
55
+ // Emit a struct named `typeName` from {name, type, optional} items, dropping
56
+ // duplicate rust identifiers (two model names can collapse to one ident).
57
+ function emitStruct(comment: string, typeName: string, items: any[]): void {
58
+ Content(`${comment}
59
+ #[derive(Debug, Clone)]
60
+ pub struct ${typeName} {
61
+ `)
62
+ const seen = new Set<string>()
63
+ items.forEach((it: any) => {
64
+ if (null == it || null == it.name) return
65
+ const ident = rustVarName(it.name)
66
+ if (seen.has(ident)) return
67
+ seen.add(ident)
68
+ Content(fieldLine(it.name, it.type, !!it.optional))
69
+ })
70
+ Content(`}
71
+
72
+ `)
73
+ }
74
+
75
+
76
+ const EntityTypes = cmp(function EntityTypes(props: any) {
77
+ const { target } = props
78
+ const { model, log } = props.ctx$
79
+
80
+ // only_active:false — getModelPath DROPS active:false entries by default,
81
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
82
+ // collection, so inactive entities still get generated entity code that
83
+ // references these typed names. The typed model must cover them too.
84
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
85
+ // Emit for every entity that gets an entity file (filter on `name`, always
86
+ // present; derive `Name` here so the struct set is deterministic — parity
87
+ // with the go emitter's fix).
88
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
89
+ entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
90
+
91
+ // Surface duplicate generated type names (two entities with the same
92
+ // PascalCase Name) — they would redeclare a type in statically-typed
93
+ // targets. Detection only; renaming is a model-level decision.
94
+ warnEntityTypeCollisions(entity, log, LANG)
95
+
96
+ Folder({ name: 'entity' }, () => {
97
+
98
+ File({ name: 'types.' + target.ext }, () => {
99
+
100
+ Content(`// Typed models for the ${model.const.Name} SDK.
101
+ //
102
+ // GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
103
+ // params (op.<name>.points[].args.params[]). Field/param types are mapped
104
+ // from the canonical type sentinels. Do not edit by hand.
105
+ //
106
+ // These are DOCUMENTARY: the SDK runtime is dynamic (ops take/return the
107
+ // \`Value\` enum), so nothing consumes these structs yet — they mirror the
108
+ // entity/op shapes for reference and IDE support.
109
+ #![allow(dead_code, non_snake_case, unused_imports)]
110
+
111
+ use crate::utility::voxgigstruct::Value;
112
+
113
+ `)
114
+
115
+ entityList.forEach((ent: any) => {
116
+ const Name = ent.Name
117
+ const fields = (ent.fields ? each(ent.fields) : [])
118
+ .filter((f: any) => f.active !== false)
119
+
120
+ // Entity data model: one field per model field. req:false -> Option.
121
+ emitStruct(
122
+ `/// ${Name} is the typed data model for the ${ent.name} entity.`,
123
+ Name,
124
+ fields.map((f: any) => ({ name: f.name, type: f.type, optional: false === f.req }))
125
+ )
126
+
127
+ // Per active op: a request/match struct. Members and their optionality
128
+ // come from the shared partiality policy (opRequestShape).
129
+ const ops = ent.op || {}
130
+ ;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
131
+ if (null == ops[opname]) {
132
+ return
133
+ }
134
+
135
+ const typeName = opTypeName(Name, opname)
136
+ const { items } = opRequestShape(ent, opname)
137
+
138
+ emitStruct(
139
+ `/// ${typeName} is the typed request payload for ${Name}.${opname}.`,
140
+ typeName,
141
+ items
142
+ )
143
+ })
144
+ })
145
+ })
146
+ })
147
+ })
148
+
149
+
150
+ export {
151
+ EntityTypes,
152
+ }
@@ -53,7 +53,7 @@ const Entity = cmp(function Entity(props: any) {
53
53
  ({ indent }: any) => {
54
54
  const arg = ('create' === opname || 'update' === opname) ?
55
55
  'reqdata' : 'reqmatch'
56
- Content({ indent }, `fn ${opname}(&self, _${arg}: Value, _ctrl: Value) -> Result<Value, ProjectNameError> {
56
+ Content({ indent }, `fn ${opname}(&self, _${arg}: Value, _ctrl: Value) -> Result<Value, ${model.const.Name}Error> {
57
57
  Err(crate::core::helpers::unsupported_op("${opname}", &self.name))
58
58
  }
59
59
  `)
@@ -24,6 +24,7 @@ import { Config } from './Config_rust'
24
24
  import { Gitignore } from './Gitignore_rust'
25
25
  import { MainEntity } from './MainEntity_rust'
26
26
  import { EntityBase } from './EntityBase_rust'
27
+ import { EntityTypes } from './EntityTypes_rust'
27
28
  import { SdkError } from './SdkError_rust'
28
29
  import { crateIdent } from './utility_rust'
29
30
 
@@ -87,6 +88,10 @@ const Main = cmp(async function Main(props: any) {
87
88
  // entity/mod.rs — the entity module index.
88
89
  EntityBase({ target })
89
90
 
91
+ // entity/types.rs — the documentary typed models (one struct per entity +
92
+ // per op). Declared as a module by EntityBase so it compiles with the crate.
93
+ EntityTypes({ target })
94
+
90
95
  // lib.rs — the crate root: module declarations plus the public API
91
96
  // re-exports (twin of the go root package file).
92
97
  File({ name: 'lib.' + target.ext }, () => {
@@ -0,0 +1,163 @@
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 { rustVarName } from './utility_rust'
10
+
11
+
12
+ // Type names come from the shared canonToType 'rust' column (single source of truth).
13
+
14
+ // A type-correct rust expression constructing a voxgig struct Value.
15
+ function rustLit(type: any, placeholder: string = 'example'): string {
16
+ const k = canonKey(type)
17
+ if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
18
+ if ('BOOLEAN' === k) return 'Value::Bool(true)'
19
+ if ('ARRAY' === k) return 'Value::empty_list()'
20
+ if ('OBJECT' === k) return 'Value::empty_map()'
21
+ return `Value::str("${placeholder}")`
22
+ }
23
+
24
+
25
+ // Operation method descriptions (language-agnostic wording, rust signatures).
26
+ const OP_DESC: Record<string, { method: string, desc: string }> = {
27
+ load: { method: 'load(reqmatch, ctrl)', desc: 'Load a single entity by match criteria.' },
28
+ list: { method: 'list(reqmatch, ctrl)', desc: 'List entities, optionally matching the given criteria.' },
29
+ create: { method: 'create(reqdata, ctrl)', desc: 'Create a new entity with the given data.' },
30
+ update: { method: 'update(reqdata, ctrl)', desc: 'Update an existing entity.' },
31
+ remove: { method: 'remove(reqmatch, ctrl)', desc: 'Remove the matching entity.' },
32
+ }
33
+
34
+
35
+ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
36
+ const { target } = props
37
+ const { model } = props.ctx$
38
+
39
+ const entity = getModelPath(model, `main.${KIT}.entity`)
40
+
41
+ const publishedEntities = each(entity)
42
+ .filter((entity: any) => entity.active !== false)
43
+
44
+ if (0 === publishedEntities.length) {
45
+ return
46
+ }
47
+
48
+ Content(`
49
+
50
+ ## Entities
51
+
52
+ `)
53
+
54
+ publishedEntities.map((entity: any) => {
55
+ const opnames = Object.keys(entity.op || {})
56
+ const fields = entity.fields || []
57
+ const idF = entityIdField(entity)
58
+ const eVar = rustVarName(entity.name)
59
+ const method = rustVarName(entity.name)
60
+
61
+ Content(`
62
+ ### ${entity.Name}
63
+
64
+ `)
65
+
66
+ if (entity.short) {
67
+ Content(`${entity.short}
68
+
69
+ `)
70
+ }
71
+
72
+ Content(`Create an instance: \`let ${eVar} = client.${method}(Value::Noval);\`
73
+
74
+ `)
75
+
76
+ if (opnames.length > 0) {
77
+ Content(`#### Operations
78
+
79
+ | Method | Description |
80
+ | --- | --- |
81
+ `)
82
+ opnames.map((opname: string) => {
83
+ const info = OP_DESC[opname]
84
+ if (info) {
85
+ Content(`| \`${info.method}\` | ${info.desc} |
86
+ `)
87
+ }
88
+ })
89
+
90
+ Content(`
91
+ `)
92
+ }
93
+
94
+ if (fields.length > 0) {
95
+ Content(`#### Fields
96
+
97
+ | Field | Type | Description |
98
+ | --- | --- | --- |
99
+ `)
100
+
101
+ each(fields, (field: any) => {
102
+ const desc = field.short || ''
103
+ Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
104
+ `)
105
+ })
106
+
107
+ Content(`
108
+ `)
109
+ }
110
+
111
+ if (opnames.includes('load')) {
112
+ const loadItems = opRequestShape(entity, 'load').items
113
+ .filter((it: any) => !it.optional || it.name === idF)
114
+ .sort((a: any, b: any) =>
115
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
116
+ const loadArg = 0 < loadItems.length
117
+ ? `jo(vec![${loadItems.map((it: any) =>
118
+ `("${it.name}", ${rustLit(it.type,
119
+ it.name === idF ? entity.name + '_id' : it.name)})`).join(', ')}])`
120
+ : 'Value::Noval'
121
+ Content(`#### Example: Load
122
+
123
+ \`\`\`rust
124
+ let ${eVar} = client.${method}(Value::Noval).load(${loadArg}, Value::Noval).unwrap();
125
+ \`\`\`
126
+
127
+ `)
128
+ }
129
+
130
+ if (opnames.includes('list')) {
131
+ Content(`#### Example: List
132
+
133
+ \`\`\`rust
134
+ let ${eVar}s = client.${method}(Value::Noval).list(Value::Noval, Value::Noval).unwrap();
135
+ \`\`\`
136
+
137
+ `)
138
+ }
139
+
140
+ if (opnames.includes('create')) {
141
+ const createItems = opRequestShape(entity, 'create').items
142
+ .filter((it: any) => !it.optional)
143
+ Content(`#### Example: Create
144
+
145
+ \`\`\`rust
146
+ let ${eVar} = client.${method}(Value::Noval).create(jo(vec![
147
+ `)
148
+ createItems.map((it: any) => {
149
+ Content(` ("${it.name}", ${rustLit(it.type, 'example_' + it.name)}), // ${canonToType(it.type, target.name)}
150
+ `)
151
+ })
152
+ Content(`]), Value::Noval).unwrap();
153
+ \`\`\`
154
+
155
+ `)
156
+ }
157
+ })
158
+ })
159
+
160
+
161
+ export {
162
+ ReadmeEntity
163
+ }
@@ -0,0 +1,132 @@
1
+ import { cmp, Content, File } from '@voxgig/sdkgen'
2
+
3
+
4
+ // Emits rust/tests/readme_examples_test.rs — a structural gate over every
5
+ // ```rust fenced block in the three docs that ship rust examples:
6
+ // - the root README.md (top-level, multi-language quick start)
7
+ // - the per-language rust/README.md
8
+ // - the per-language rust/REFERENCE.md
9
+ //
10
+ // DESIGN NOTE vs the go gate (ReadmeExamplesTest_go.ts): the go version shells
11
+ // out to `go build`/`go run` to COMPILE and RUN every block. A faithful rust
12
+ // port would shell out to `cargo`/`rustc` against extracted snippets — a large,
13
+ // environment-sensitive harness that cannot be authored safely without a build
14
+ // to validate it. This rust gate instead validates that every documented rust
15
+ // block is PRESENT and STRUCTURALLY well-formed (balanced delimiters,
16
+ // non-empty). It is a real, always-passing test that keeps the docs honest
17
+ // about block structure; upgrading it to a true compile gate (a temp crate that
18
+ // `cargo build`s each block against the generated SDK) is left as a follow-up.
19
+ // Missing docs are tolerated (a run may generate a subset of phases).
20
+ const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
21
+ const { ctx$: { model } } = props
22
+
23
+ File({ name: 'readme_examples_test.rs' }, () => {
24
+ Content(`// Structural gate over every \`\`\`rust block in the ${model.const.Name} SDK
25
+ // docs (root README.md, rust/README.md, rust/REFERENCE.md). Generated by
26
+ // @voxgig/sdkgen — do not edit by hand.
27
+ //
28
+ // Validates that each documented rust block is present, non-empty, and has
29
+ // balanced delimiters. Missing docs are tolerated. See ReadmeExamplesTest_rust
30
+ // for why this is a structural gate rather than a full compile harness.
31
+
32
+ use std::fs;
33
+ use std::path::PathBuf;
34
+
35
+ // Extract the body of every \`\`\`rust ... \`\`\` fenced block from markdown.
36
+ fn extract_rust_blocks(md: &str) -> Vec<String> {
37
+ let mut blocks: Vec<String> = Vec::new();
38
+ let mut in_block = false;
39
+ let mut cur: Vec<&str> = Vec::new();
40
+ for line in md.lines() {
41
+ let trimmed = line.trim();
42
+ if !in_block {
43
+ if trimmed == "\`\`\`rust" {
44
+ in_block = true;
45
+ cur = Vec::new();
46
+ }
47
+ continue;
48
+ }
49
+ if trimmed == "\`\`\`" {
50
+ blocks.push(cur.join("\\n"));
51
+ in_block = false;
52
+ continue;
53
+ }
54
+ cur.push(line);
55
+ }
56
+ blocks
57
+ }
58
+
59
+ // Balanced (), [], {} outside of string literals. Naive quote toggle: the
60
+ // generated snippets never embed an escaped quote inside a string.
61
+ fn is_balanced(block: &str) -> bool {
62
+ let mut in_str = false;
63
+ let mut depth: i32 = 0;
64
+ for c in block.chars() {
65
+ if c == '"' {
66
+ in_str = !in_str;
67
+ continue;
68
+ }
69
+ if in_str {
70
+ continue;
71
+ }
72
+ match c {
73
+ '(' | '[' | '{' => depth += 1,
74
+ ')' | ']' | '}' => {
75
+ depth -= 1;
76
+ if depth < 0 {
77
+ return false;
78
+ }
79
+ }
80
+ _ => {}
81
+ }
82
+ }
83
+ depth == 0 && !in_str
84
+ }
85
+
86
+ #[test]
87
+ fn readme_rust_snippets_wellformed() {
88
+ let manifest = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
89
+ let docs: [(&str, PathBuf); 3] = [
90
+ ("root README", manifest.join("..").join("README.md")),
91
+ ("rust/README", manifest.join("README.md")),
92
+ ("rust/REFERENCE", manifest.join("REFERENCE.md")),
93
+ ];
94
+
95
+ let mut total_blocks = 0usize;
96
+ for (label, path) in docs.iter() {
97
+ let src = match fs::read_to_string(path) {
98
+ Ok(s) => s,
99
+ Err(_) => continue, // doc not generated in this run — tolerate
100
+ };
101
+ let blocks = extract_rust_blocks(&src);
102
+ for (i, block) in blocks.iter().enumerate() {
103
+ assert!(
104
+ !block.trim().is_empty(),
105
+ "{}: rust block {} is empty",
106
+ label,
107
+ i + 1
108
+ );
109
+ assert!(
110
+ is_balanced(block),
111
+ "{}: rust block {} has unbalanced delimiters:\\n{}",
112
+ label,
113
+ i + 1,
114
+ block
115
+ );
116
+ total_blocks += 1;
117
+ }
118
+ }
119
+
120
+ assert!(
121
+ total_blocks > 0,
122
+ "no rust code blocks found in any README/REFERENCE doc"
123
+ );
124
+ }
125
+ `)
126
+ })
127
+ })
128
+
129
+
130
+ export {
131
+ ReadmeExamplesTest
132
+ }
@@ -0,0 +1,44 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+ import { crateIdent } from './utility_rust'
5
+
6
+
7
+ const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
8
+ const { target, ctx$: { model } } = props
9
+ const rustcrate = crateIdent(model)
10
+
11
+ Content(`### Data as \`Value\`
12
+
13
+ The Rust SDK uses a single dynamic \`Value\` type throughout rather than a
14
+ typed struct per entity. \`Value\` is the vendored voxgig struct port (a
15
+ JSON-shaped enum: \`Str\`, \`Num\`, \`Bool\`, \`List\`, \`Map\`, \`Null\`,
16
+ \`Noval\`). This mirrors the dynamic nature of the API and keeps the SDK
17
+ flexible — no code generation is needed when the API schema changes.
18
+
19
+ Build request maps with the \`jo\` / \`ja\` helpers and read fields back with
20
+ \`getp\`; use \`to_map\` to safely coerce a value to a map.
21
+
22
+ ### Crate structure
23
+
24
+ \`\`\`
25
+ ${target.name}/
26
+ ├── lib.rs -- Crate root (module decls + re-exports)
27
+ ├── core/ -- Pipeline types, config, client (sdk.rs)
28
+ ├── entity/ -- Per-entity clients (one module each)
29
+ ├── feature/ -- Built-in features (base, test, log)
30
+ └── utility/ -- Utilities + the vendored voxgig struct port
31
+ \`\`\`
32
+
33
+ The public API is re-exported from the crate root, so \`use ${rustcrate}::{...}\`
34
+ reaches the SDK client, \`Value\`, and the \`jo\` / \`ja\` / \`getp\` helpers
35
+ directly. Import entity or utility modules only when needed.
36
+
37
+ `)
38
+
39
+ })
40
+
41
+
42
+ export {
43
+ ReadmeExplanation
44
+ }
@@ -0,0 +1,142 @@
1
+
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ nom,
8
+ } from '@voxgig/apidef'
9
+
10
+ import { crateIdent, rustVarName } from './utility_rust'
11
+
12
+
13
+ // A type-correct rust expression constructing a voxgig struct Value.
14
+ function rustLit(type: any): string {
15
+ const k = canonKey(type)
16
+ if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
17
+ if ('BOOLEAN' === k) return 'Value::Bool(true)'
18
+ if ('ARRAY' === k) return 'Value::empty_list()'
19
+ if ('OBJECT' === k) return 'Value::empty_map()'
20
+ return 'Value::str("example")'
21
+ }
22
+
23
+
24
+ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
25
+ const { target, ctx$: { model } } = props
26
+
27
+ const rustcrate = crateIdent(model)
28
+ const entity = getModelPath(model, `main.${KIT}.entity`)
29
+ // Pick an entity with a real op (prefer a read op). primaryOp is null only
30
+ // when NO entity exposes any op (a direct()-only SDK).
31
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
32
+ const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
33
+ const eVar = exampleEntity ? rustVarName(exampleEntity.name) : 'entity'
34
+ const method = exampleEntity ? rustVarName(exampleEntity.name) : 'entity'
35
+ const idF = exampleEntity ? entityIdField(exampleEntity) : null
36
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
37
+ let testArg = 'Value::Noval'
38
+ if (exampleEntity && isMatchOp) {
39
+ testArg = idF ? `jo(vec![("${idF}", Value::str("test01"))])` : 'Value::Noval'
40
+ } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
41
+ const items = opRequestShape(exampleEntity, primaryOp).items
42
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
43
+ const required = items.filter((it: any) => !it.optional)
44
+ const chosen = required.length ? required : items.slice(0, 3)
45
+ testArg = 0 < chosen.length
46
+ ? `jo(vec![${chosen.map((it: any) => `("${it.name}", ${rustLit(it.type)})`).join(', ')}])`
47
+ : 'Value::empty_map()'
48
+ }
49
+
50
+ // The op-driven test-mode line. A direct()-only SDK shows a direct() call.
51
+ const testModeExample = primaryOp
52
+ ? `// Entity ops return the bare record on Ok and Err on failure.
53
+ let ${eVar} = client.${method}(Value::Noval).${primaryOp}(${testArg}, Value::Noval).unwrap();
54
+ // ${eVar} contains the mock response record`
55
+ : `let result = client.direct(jo(vec![
56
+ ("path", Value::str("/api/resource")),
57
+ ("method", Value::str("GET")),
58
+ ])).unwrap();
59
+ println!("{:?}", result);`
60
+
61
+ const apikeyEnvLine = isAuthActive(model)
62
+ ? `\n${envName(model)}_APIKEY=<your-key>`
63
+ : ''
64
+
65
+ Content(`### Make a direct HTTP request
66
+
67
+ For endpoints not covered by entity methods:
68
+
69
+ \`\`\`rust
70
+ let result = client.direct(jo(vec![
71
+ ("path", Value::str("/api/resource/{id}")),
72
+ ("method", Value::str("GET")),
73
+ ("params", jo(vec![("id", Value::str("example"))])),
74
+ ])).unwrap();
75
+
76
+ if getp(&result, "ok") == Value::Bool(true) {
77
+ println!("{:?}", getp(&result, "status")); // 200
78
+ println!("{:?}", getp(&result, "data")); // response body
79
+ } else {
80
+ // A non-2xx response carries status + data (the error body); a
81
+ // transport-level failure carries err instead. Only one is present.
82
+ println!("{:?} {:?}", getp(&result, "status"), getp(&result, "err"));
83
+ }
84
+ \`\`\`
85
+
86
+ ### Prepare a request without sending it
87
+
88
+ \`\`\`rust
89
+ // prepare() returns the fetch definition on Ok and Err on failure.
90
+ let fetchdef = client.prepare(jo(vec![
91
+ ("path", Value::str("/api/resource/{id}")),
92
+ ("method", Value::str("DELETE")),
93
+ ("params", jo(vec![("id", Value::str("example"))])),
94
+ ])).unwrap();
95
+
96
+ println!("{:?}", getp(&fetchdef, "url"));
97
+ println!("{:?}", getp(&fetchdef, "method"));
98
+ println!("{:?}", getp(&fetchdef, "headers"));
99
+ \`\`\`
100
+
101
+ ### Use test mode
102
+
103
+ Create a mock client for unit testing — no server required:
104
+
105
+ \`\`\`rust
106
+ let client = test_sdk(Value::Noval, Value::Noval);
107
+
108
+ ${testModeExample}
109
+ \`\`\`
110
+
111
+ ### Point at a different server
112
+
113
+ Override the base URL to reach a local or staging server:
114
+
115
+ \`\`\`rust
116
+ let client = ${model.const.Name}SDK::new(jo(vec![
117
+ ("base", Value::str("http://localhost:8080")),
118
+ ]));
119
+ \`\`\`
120
+
121
+ ### Run live tests
122
+
123
+ Create a \`.env.local\` file at the crate root:
124
+
125
+ \`\`\`
126
+ ${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
127
+ \`\`\`
128
+
129
+ Then run:
130
+
131
+ \`\`\`bash
132
+ cd ${target.name} && cargo test
133
+ \`\`\`
134
+
135
+ `)
136
+
137
+ })
138
+
139
+
140
+ export {
141
+ ReadmeHowto
142
+ }