@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
@@ -30,6 +30,7 @@ import {
30
30
  cmp,
31
31
  each,
32
32
  isAuthActive,
33
+ entityDataIdField,
33
34
  } from '@voxgig/sdkgen'
34
35
 
35
36
 
@@ -314,6 +315,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
314
315
 
315
316
  const generateList: OpGen = (ctx, step, index) => {
316
317
  const { entity, flow } = ctx
318
+ const hasDataId = null != entityDataIdField(entity)
317
319
  const ref = step.input.ref ?? entity.name + '_ref01'
318
320
  const entvar = step.input.entvar ?? ref + '_ent'
319
321
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -348,12 +350,18 @@ const generateList: OpGen = (ctx, step, index) => {
348
350
  const hasRefData = validRef && allSteps.some(s => 'create' === s.op &&
349
351
  ((s.input.ref ?? entity.name + '_ref01') === validRef))
350
352
 
351
- if ('ItemExists' === validator.apply && hasRefData) {
353
+ // Guard on a DATA id field (entityDataIdField), NOT entity.id (the load-MATCH
354
+ // key): an entity can have a match id in its path while its RESPONSE record
355
+ // has no `id` field (e.g. Multichannel's Template — data fields meta/status/…,
356
+ // no id). Then `${validRef}_data.id` is undefined and select(list, { id:
357
+ // undefined }) spuriously matches id-less records, so ItemExists/ItemNotExists
358
+ // are meaningless. Emit them only when `.id` is a real data field.
359
+ if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
352
360
  Content(`
353
361
  assert(!isempty(select(${listvar}, { id: ${validRef}_data.id })))
354
362
  `)
355
363
  }
356
- else if ('ItemNotExists' === validator.apply && hasRefData) {
364
+ else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
357
365
  Content(`
358
366
  assert(isempty(select(${listvar}, { id: ${validRef}_data.id })))
359
367
  `)
@@ -524,6 +532,14 @@ const generateRemove: OpGen = (ctx, step, index) => {
524
532
  const needsEnt = !priorSteps.some(s =>
525
533
  ['create', 'list', 'load', 'update', 'remove'].includes(s.op))
526
534
 
535
+ // "Remove what you created" needs the created record's id. An entity with
536
+ // no DATA id field (entityDataIdField null — e.g. Multichannel's Template)
537
+ // returns records without `.id`, so `${srcdatavar}.id` is absent (a py
538
+ // KeyError; a silent nil elsewhere). Skip the flow-remove step for those —
539
+ // the remove op is still exercised by the direct() test.
540
+ if (null == entityDataIdField(entity)) {
541
+ return
542
+ }
527
543
  Content(`
528
544
  // REMOVE
529
545
  `)
@@ -93,14 +93,32 @@ pub fn make_config() Value {
93
93
  pub fn make_feature(name: []const u8) Feature {
94
94
  `)
95
95
 
96
+ // The factory must be able to instantiate any built-in feature by name,
97
+ // not just the ones the current API model configures — a caller can enable
98
+ // a shipped feature (e.g. netsim) purely through runtime options even when
99
+ // the API def does not list it. The built-in set mirrors the feature
100
+ // templates in tm/zig/feature/ (excluding `base`, the fallback, and
101
+ // `support`, a helper module). Any model feature not already built in is
102
+ // appended so bespoke features still resolve.
103
+ const builtinFeatures = [
104
+ 'audit', 'cache', 'clienttrack', 'debug', 'idempotency', 'log',
105
+ 'metrics', 'netsim', 'paging', 'proxy', 'ratelimit', 'rbac',
106
+ 'retry', 'streaming', 'telemetry', 'test', 'timeout',
107
+ ]
108
+
109
+ const featureNames: string[] = [...builtinFeatures]
96
110
  each(feature, (f: any) => {
97
- const fname = f.name.charAt(0).toUpperCase() + f.name.slice(1)
98
- if (f.name !== 'base') {
99
- Content(` if (std.mem.eql(u8, name, "${f.name}")) return @import("../feature/${f.name}.zig").${fname}Feature.make();
100
- `)
111
+ if (f.name !== 'base' && !featureNames.includes(f.name)) {
112
+ featureNames.push(f.name)
101
113
  }
102
114
  })
103
115
 
116
+ featureNames.forEach((name: string) => {
117
+ const fname = name.charAt(0).toUpperCase() + name.slice(1)
118
+ Content(` if (std.mem.eql(u8, name, "${name}")) return @import("../feature/${name}.zig").${fname}Feature.make();
119
+ `)
120
+ })
121
+
104
122
  Content(` return @import("../feature/base.zig").BaseFeature.make();
105
123
  }
106
124
  `)
@@ -48,7 +48,7 @@ const Entity = cmp(function Entity(props: any) {
48
48
  ({ indent }: any) => {
49
49
  const arg = ('create' === opname || 'update' === opname) ?
50
50
  'reqdata' : 'reqmatch'
51
- Content({ indent }, `pub fn ${opname}(self: *EntyClass, _${arg}: Value, _ctrl: Value) OpResult {
51
+ Content({ indent }, `pub fn ${opname}(self: *${cls}, _${arg}: Value, _ctrl: Value) OpResult {
52
52
  _ = _${arg};
53
53
  _ = _ctrl;
54
54
  return .{ .err = h.unsupported_op("${opname}", self.name) };
@@ -21,6 +21,7 @@ import {
21
21
  import { Config } from './Config_zig'
22
22
  import { Gitignore } from './Gitignore_zig'
23
23
  import { MainEntity } from './MainEntity_zig'
24
+ import { Package } from './Package_zig'
24
25
 
25
26
 
26
27
  const Main = cmp(async function Main(props: any) {
@@ -30,16 +31,21 @@ const Main = cmp(async function Main(props: any) {
30
31
 
31
32
  const entity: ModelEntity = getModelPath(model, `main.${KIT}.entity`)
32
33
 
34
+ // build.zig.zon — the package manifest, stamped with the model package name.
35
+ Package({ target })
36
+
33
37
  Gitignore({})
34
38
 
35
39
  // Copy tm/zig files with replacements. The tm src/ subtree only stages the
36
40
  // per-feature custom-source dirs (target add), so it is excluded here
37
- // exactly like the go/rust targets. The SDK source lives at the tree root
38
- // (core/, feature/, utility/, entity/, test/) Zig's idiomatic src/ is not
39
- // used, to keep the exclude rule identical to the reference targets.
41
+ // exactly like the go/rust targets. build.zig.zon is generated by Package
42
+ // (above), so it is excluded from the verbatim copy. The SDK source lives at
43
+ // the tree root (core/, feature/, utility/, entity/, test/) Zig's
44
+ // idiomatic src/ is not used, to keep the exclude rule identical to the
45
+ // reference targets.
40
46
  Copy({
41
47
  from: 'tm/' + target.name,
42
- exclude: [/src\//],
48
+ exclude: [/src\//, /build\.zig\.zon$/],
43
49
  replace: {
44
50
  ...props.ctx$.stdrep,
45
51
  }
@@ -0,0 +1,53 @@
1
+
2
+ import {
3
+ Content,
4
+ File,
5
+ cmp,
6
+ } from '@voxgig/sdkgen'
7
+
8
+
9
+ import type {
10
+ Model,
11
+ } from '@voxgig/apidef'
12
+
13
+
14
+ import { zigModuleName } from './utility_zig'
15
+
16
+
17
+ // build.zig.zon — the Zig package manifest. Zig has no central package
18
+ // registry, so there are no external registry dependencies to declare: the
19
+ // voxgig struct port is vendored in-tree (utility/voxgigstruct) and wired as a
20
+ // local module by build.zig. This generator only stamps the manifest with the
21
+ // model-derived package name (the go/rust Package generators emit go.mod /
22
+ // Cargo.toml the same way).
23
+ //
24
+ // The `.paths` allow-list mirrors the (registry-less) template: it only
25
+ // matters when packaging for a registry, which zig does not do, so it is kept
26
+ // stable. `.name` is a plain string here (matching the target's zig toolchain
27
+ // pin) rather than the newer enum-literal + fingerprint form.
28
+ const Package = cmp(async function Package(props: any) {
29
+ const ctx$ = props.ctx$
30
+ const model: Model = ctx$.model
31
+
32
+ const name = zigModuleName(model)
33
+
34
+ File({ name: 'build.zig.zon' }, () => {
35
+ Content(`.{
36
+ .name = "${name}",
37
+ .version = "0.0.1",
38
+ .dependencies = .{},
39
+ .paths = .{
40
+ "src",
41
+ "test",
42
+ "build.zig",
43
+ "build.zig.zon",
44
+ },
45
+ }
46
+ `)
47
+ })
48
+ })
49
+
50
+
51
+ export {
52
+ Package
53
+ }
@@ -0,0 +1,188 @@
1
+
2
+ import { cmp, each, Content, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+ import { zigVarName } from './utility_zig'
10
+
11
+
12
+ // Canonical type sentinel -> a zig type name for the field/param tables.
13
+ // (The shared canonToType helper has no zig column, so map locally.) Every
14
+ // value is dynamically a `Value`, so the type column is documentary.
15
+ function zigType(type: any): string {
16
+ const k = canonKey(type)
17
+ if ('STRING' === k) return '[]const u8'
18
+ if ('INTEGER' === k) return 'i64'
19
+ if ('NUMBER' === k) return 'f64'
20
+ if ('BOOLEAN' === k) return 'bool'
21
+ if ('ARRAY' === k) return 'Value (array)'
22
+ if ('OBJECT' === k) return 'Value (object)'
23
+ return 'Value'
24
+ }
25
+
26
+
27
+ // A type-correct zig expression constructing a voxgig struct Value.
28
+ function zigLit(type: any, placeholder: string = 'example'): string {
29
+ const k = canonKey(type)
30
+ if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
31
+ if ('BOOLEAN' === k) return 'h.vbool(true)'
32
+ if ('ARRAY' === k) return 'h.olist()'
33
+ if ('OBJECT' === k) return 'h.omap()'
34
+ return `h.vstr("${placeholder}")`
35
+ }
36
+
37
+
38
+ // Operation method descriptions (language-agnostic wording, zig signatures).
39
+ const OP_DESC: Record<string, { method: string, desc: string }> = {
40
+ load: { method: 'load(reqmatch, ctrl)', desc: 'Load a single entity by match criteria.' },
41
+ list: { method: 'list(reqmatch, ctrl)', desc: 'List entities, optionally matching the given criteria.' },
42
+ create: { method: 'create(reqdata, ctrl)', desc: 'Create a new entity with the given data.' },
43
+ update: { method: 'update(reqdata, ctrl)', desc: 'Update an existing entity.' },
44
+ remove: { method: 'remove(reqmatch, ctrl)', desc: 'Remove the matching entity.' },
45
+ }
46
+
47
+
48
+ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
49
+ const { target } = props
50
+ const { model } = props.ctx$
51
+
52
+ const entity = getModelPath(model, `main.${KIT}.entity`)
53
+
54
+ const publishedEntities = each(entity)
55
+ .filter((entity: any) => entity.active !== false)
56
+
57
+ if (0 === publishedEntities.length) {
58
+ return
59
+ }
60
+
61
+ Content(`
62
+
63
+ ## Entities
64
+
65
+ `)
66
+
67
+ publishedEntities.map((entity: any) => {
68
+ const opnames = Object.keys(entity.op || {})
69
+ const fields = entity.fields || []
70
+ const idF = entityIdField(entity)
71
+ const eVar = zigVarName(entity.name)
72
+ const method = zigVarName(entity.name)
73
+
74
+ Content(`
75
+ ### ${entity.Name}
76
+
77
+ `)
78
+
79
+ if (entity.short) {
80
+ Content(`${entity.short}
81
+
82
+ `)
83
+ }
84
+
85
+ Content(`Create an instance: \`const ${eVar} = client.${method}(h.vnull());\`
86
+
87
+ `)
88
+
89
+ if (opnames.length > 0) {
90
+ Content(`#### Operations
91
+
92
+ | Method | Description |
93
+ | --- | --- |
94
+ `)
95
+ opnames.map((opname: string) => {
96
+ const info = OP_DESC[opname]
97
+ if (info) {
98
+ Content(`| \`${info.method}\` | ${info.desc} |
99
+ `)
100
+ }
101
+ })
102
+
103
+ Content(`
104
+ Each operation returns an \`OpResult\` — \`switch\` on it: \`.ok => |data|\`
105
+ carries the result \`Value\`, \`.err => |e|\` carries the branded error.
106
+
107
+ `)
108
+ }
109
+
110
+ if (fields.length > 0) {
111
+ Content(`#### Fields
112
+
113
+ | Field | Type | Description |
114
+ | --- | --- | --- |
115
+ `)
116
+
117
+ each(fields, (field: any) => {
118
+ const desc = field.short || ''
119
+ Content(`| \`${field.name}\` | \`${zigType(field.type)}\` | ${desc} |
120
+ `)
121
+ })
122
+
123
+ Content(`
124
+ `)
125
+ }
126
+
127
+ if (opnames.includes('load')) {
128
+ const loadItems = opRequestShape(entity, 'load').items
129
+ .filter((it: any) => !it.optional || it.name === idF)
130
+ .sort((a: any, b: any) =>
131
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
132
+ const loadArg = 0 < loadItems.length
133
+ ? `h.jo(&.{${loadItems.map((it: any) =>
134
+ `.{ "${it.name}", ${zigLit(it.type,
135
+ it.name === idF ? entity.name + '_id' : it.name)} }`).join(', ')}})`
136
+ : 'h.vnull()'
137
+ Content(`#### Example: Load
138
+
139
+ \`\`\`zig
140
+ switch (client.${method}(h.vnull()).load(${loadArg}, h.vnull())) {
141
+ .ok => |${eVar}| std.debug.print("{s}\\n", .{h.stringify(${eVar})}),
142
+ .err => |e| std.debug.print("load failed: {s}\\n", .{e.msg}),
143
+ }
144
+ \`\`\`
145
+
146
+ `)
147
+ }
148
+
149
+ if (opnames.includes('list')) {
150
+ Content(`#### Example: List
151
+
152
+ \`\`\`zig
153
+ switch (client.${method}(h.vnull()).list(h.vnull(), h.vnull())) {
154
+ .ok => |${eVar}s| std.debug.print("{s}\\n", .{h.stringify(${eVar}s)}),
155
+ .err => |e| std.debug.print("list failed: {s}\\n", .{e.msg}),
156
+ }
157
+ \`\`\`
158
+
159
+ `)
160
+ }
161
+
162
+ if (opnames.includes('create')) {
163
+ const createItems = opRequestShape(entity, 'create').items
164
+ .filter((it: any) => !it.optional)
165
+ Content(`#### Example: Create
166
+
167
+ \`\`\`zig
168
+ switch (client.${method}(h.vnull()).create(h.jo(&.{
169
+ `)
170
+ createItems.map((it: any) => {
171
+ Content(` .{ "${it.name}", ${zigLit(it.type, 'example_' + it.name)} }, // ${zigType(it.type)}
172
+ `)
173
+ })
174
+ Content(`}), h.vnull())) {
175
+ .ok => |${eVar}| std.debug.print("{s}\\n", .{h.stringify(${eVar})}),
176
+ .err => |e| std.debug.print("create failed: {s}\\n", .{e.msg}),
177
+ }
178
+ \`\`\`
179
+
180
+ `)
181
+ }
182
+ })
183
+ })
184
+
185
+
186
+ export {
187
+ ReadmeEntity
188
+ }
@@ -0,0 +1,58 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+
5
+ // Validates the documented README/REFERENCE quick-start examples for the Zig
6
+ // SDK.
7
+ //
8
+ // DESIGN NOTE vs the go/rust gates (ReadmeExamplesTest_go.ts /
9
+ // ReadmeExamplesTest_rust.ts): the go version shells out to `go build`/`go run`
10
+ // to compile and run every fenced block; the rust version reads the doc files
11
+ // and checks that each block is structurally well-formed. Zig's test harness
12
+ // uses an EXPLICIT test-file list in build.zig (no auto-discovery of test/*.zig
13
+ // and no per-block temp compilation), and the doc files are not on the package
14
+ // path at test time — so neither a filesystem scan nor a per-snippet compile can
15
+ // be authored safely without a build to validate against.
16
+ //
17
+ // Instead this gate emits a real, always-compiling zig `test` block INTO the
18
+ // shared generated_test.zig (the only generated test file build.zig picks up).
19
+ // It exercises the exact top-level entry points the docs advertise — the
20
+ // test-mode constructor and the `direct()` escape hatch — so the documented
21
+ // quick-start surface is guaranteed to exist and run. Upgrading it to a true
22
+ // per-block compile gate is left as a follow-up.
23
+ const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
24
+ const { ctx$: { model } } = props
25
+
26
+ Content(`
27
+ // Documented quick-start surface (README.md / REFERENCE.md). Exercises the
28
+ // test-mode constructor and the direct() escape hatch exactly as documented.
29
+ test "readme_quickstart_surface" {
30
+ // \`sdk.test_sdk(...)\` — the documented mock constructor.
31
+ const client = sdk.test_sdk(vnull(), vnull());
32
+ try std.testing.expect(std.mem.eql(u8, client.mode, "test"));
33
+
34
+ // \`client.direct(...)\` — the documented escape hatch. It always returns a
35
+ // result map carrying an \`ok\` flag (never an error union).
36
+ const result = client.direct(h.jo(&.{
37
+ .{ "path", h.vstr("/api/resource/{id}") },
38
+ .{ "method", h.vstr("GET") },
39
+ .{ "params", h.jo(&.{.{ "id", h.vstr("example") }}) },
40
+ }));
41
+ try std.testing.expect(result == .object);
42
+ try std.testing.expect(h.get_bool(result, "ok") != null);
43
+
44
+ // \`client.prepare(...)\` — build a request without sending it.
45
+ const fetchdef = client.prepare(h.jo(&.{
46
+ .{ "path", h.vstr("/api/resource/{id}") },
47
+ .{ "method", h.vstr("GET") },
48
+ .{ "params", h.jo(&.{.{ "id", h.vstr("example") }}) },
49
+ })) catch h.vnull();
50
+ _ = fetchdef;
51
+ }
52
+ `)
53
+ })
54
+
55
+
56
+ export {
57
+ ReadmeExamplesTest
58
+ }
@@ -0,0 +1,45 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+
5
+ const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
6
+ const { target, ctx$: { model } } = props
7
+
8
+ Content(`### Data as \`Value\`
9
+
10
+ The Zig SDK uses a single dynamic \`Value\` type throughout rather than a
11
+ typed struct per entity. \`Value\` is the vendored voxgig struct port's
12
+ \`JsonValue\` (a JSON-shaped tagged union: \`.string\`, \`.integer\`,
13
+ \`.float\`, \`.bool\`, \`.array\`, \`.object\`, \`.null\`). This mirrors the
14
+ dynamic nature of the API and keeps the SDK flexible — no code generation is
15
+ needed when the API schema changes.
16
+
17
+ Build request maps with the \`h.jo\` / \`h.ja\` helpers and read fields back
18
+ with \`h.getp\` (or the typed \`h.get_str\` / \`h.get_bool\` / \`h.to_int\`
19
+ accessors); use \`h.to_map\` to safely coerce a value to a map.
20
+
21
+ ### Module structure
22
+
23
+ \`\`\`
24
+ ${target.name}/
25
+ ├── root.zig -- Module root (re-exports the public surface)
26
+ ├── build.zig -- Build + test wiring
27
+ ├── core/ -- Pipeline types, config, client (sdk.zig)
28
+ ├── entity/ -- Per-entity clients (one file each)
29
+ ├── feature/ -- Built-in features (base, test, log)
30
+ ├── utility/ -- Utilities + the vendored voxgig struct port
31
+ └── test/ -- Test suites
32
+ \`\`\`
33
+
34
+ The public API is re-exported from \`root.zig\`, so \`@import("sdk")\` reaches
35
+ the SDK client, \`Value\`, and the \`h\` (helpers) namespace directly. Import
36
+ entity or utility modules only when needed.
37
+
38
+ `)
39
+
40
+ })
41
+
42
+
43
+ export {
44
+ ReadmeExplanation
45
+ }
@@ -0,0 +1,143 @@
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 { zigVarName } from './utility_zig'
11
+
12
+
13
+ // A type-correct zig expression constructing a voxgig struct Value.
14
+ function zigLit(type: any): string {
15
+ const k = canonKey(type)
16
+ if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
17
+ if ('BOOLEAN' === k) return 'h.vbool(true)'
18
+ if ('ARRAY' === k) return 'h.olist()'
19
+ if ('OBJECT' === k) return 'h.omap()'
20
+ return 'h.vstr("example")'
21
+ }
22
+
23
+
24
+ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
25
+ const { target, ctx$: { model } } = props
26
+
27
+ const entity = getModelPath(model, `main.${KIT}.entity`)
28
+ // Pick an entity with a real op (prefer a read op). primaryOp is null only
29
+ // when NO entity exposes any op (a direct()-only SDK).
30
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
31
+ const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
32
+ const eVar = exampleEntity ? zigVarName(exampleEntity.name) : 'entity'
33
+ const method = exampleEntity ? zigVarName(exampleEntity.name) : 'entity'
34
+ const idF = exampleEntity ? entityIdField(exampleEntity) : null
35
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
36
+ let testArg = 'h.vnull()'
37
+ if (exampleEntity && isMatchOp) {
38
+ testArg = idF ? `h.jo(&.{.{ "${idF}", h.vstr("test01") }})` : 'h.vnull()'
39
+ } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
40
+ const items = opRequestShape(exampleEntity, primaryOp).items
41
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
42
+ const required = items.filter((it: any) => !it.optional)
43
+ const chosen = required.length ? required : items.slice(0, 3)
44
+ testArg = 0 < chosen.length
45
+ ? `h.jo(&.{${chosen.map((it: any) => `.{ "${it.name}", ${zigLit(it.type)} }`).join(', ')}})`
46
+ : 'h.omap()'
47
+ }
48
+
49
+ // The op-driven test-mode line. A direct()-only SDK shows a direct() call.
50
+ const testModeExample = primaryOp
51
+ ? `// Entity ops return an OpResult — .ok carries the record, .err the error.
52
+ switch (client.${method}(h.vnull()).${primaryOp}(${testArg}, h.vnull())) {
53
+ .ok => |${eVar}| std.debug.print("{s}\\n", .{h.stringify(${eVar})}), // the mock record
54
+ .err => |e| std.debug.print("${primaryOp} failed: {s}\\n", .{e.msg}),
55
+ }`
56
+ : `const result = client.direct(h.jo(&.{
57
+ .{ "path", h.vstr("/api/resource") },
58
+ .{ "method", h.vstr("GET") },
59
+ }));
60
+ std.debug.print("{s}\\n", .{h.stringify(result)});`
61
+
62
+ const apikeyEnvLine = isAuthActive(model)
63
+ ? `\n${envName(model)}_APIKEY=<your-key>`
64
+ : ''
65
+
66
+ Content(`### Make a direct HTTP request
67
+
68
+ For endpoints not covered by entity methods:
69
+
70
+ \`\`\`zig
71
+ const result = client.direct(h.jo(&.{
72
+ .{ "path", h.vstr("/api/resource/{id}") },
73
+ .{ "method", h.vstr("GET") },
74
+ .{ "params", h.jo(&.{.{ "id", h.vstr("example") }}) },
75
+ }));
76
+
77
+ if (h.get_bool(result, "ok") orelse false) {
78
+ std.debug.print("{d}\\n", .{h.to_int(h.getp(result, "status"))}); // 200
79
+ std.debug.print("{s}\\n", .{h.stringify(h.getp(result, "data"))}); // response body
80
+ } else {
81
+ // A non-2xx response carries status + data (the error body); a
82
+ // transport-level failure carries err instead. Only one is present.
83
+ std.debug.print("{s}\\n", .{h.get_str(result, "err") orelse ""});
84
+ }
85
+ \`\`\`
86
+
87
+ ### Prepare a request without sending it
88
+
89
+ \`\`\`zig
90
+ // prepare() returns the fetch definition (an error union — use \`catch\`/\`try\`).
91
+ const fetchdef = client.prepare(h.jo(&.{
92
+ .{ "path", h.vstr("/api/resource/{id}") },
93
+ .{ "method", h.vstr("DELETE") },
94
+ .{ "params", h.jo(&.{.{ "id", h.vstr("example") }}) },
95
+ })) catch unreachable;
96
+
97
+ std.debug.print("{s}\\n", .{h.get_str(fetchdef, "url") orelse ""});
98
+ std.debug.print("{s}\\n", .{h.get_str(fetchdef, "method") orelse ""});
99
+ std.debug.print("{s}\\n", .{h.stringify(h.getp(fetchdef, "headers"))});
100
+ \`\`\`
101
+
102
+ ### Use test mode
103
+
104
+ Create a mock client for unit testing — no server required:
105
+
106
+ \`\`\`zig
107
+ const client = sdk.test_sdk(h.vnull(), h.vnull());
108
+
109
+ ${testModeExample}
110
+ \`\`\`
111
+
112
+ ### Point at a different server
113
+
114
+ Override the base URL to reach a local or staging server:
115
+
116
+ \`\`\`zig
117
+ const client = sdk.${model.const.Name}SDK.new(h.jo(&.{
118
+ .{ "base", h.vstr("http://localhost:8080") },
119
+ }));
120
+ \`\`\`
121
+
122
+ ### Run live tests
123
+
124
+ Create a \`.env.local\` file at the project root:
125
+
126
+ \`\`\`
127
+ ${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
128
+ \`\`\`
129
+
130
+ Then run:
131
+
132
+ \`\`\`bash
133
+ cd ${target.name} && zig build test
134
+ \`\`\`
135
+
136
+ `)
137
+
138
+ })
139
+
140
+
141
+ export {
142
+ ReadmeHowto
143
+ }
@@ -0,0 +1,54 @@
1
+
2
+ import { cmp, Content, installCommand, isPublished, repoInfo } from '@voxgig/sdkgen'
3
+
4
+
5
+ const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
6
+ const { target, ctx$ } = props
7
+ const { model } = ctx$
8
+
9
+ if (isPublished(model, target.name)) {
10
+ Content(`\`\`\`bash
11
+ ${installCommand(model, target.name)}
12
+ \`\`\`
13
+
14
+ Or build it from a source checkout:
15
+
16
+ \`\`\`bash
17
+ cd ${target.name} && zig build
18
+ \`\`\`
19
+
20
+ `)
21
+ return
22
+ }
23
+
24
+ // Zig has no central package registry — the release IS the git tag. Depend
25
+ // on it via the Zig package manager (a git-tagged url in build.zig.zon) or
26
+ // build from a local source checkout.
27
+ const { releasesUrl } = repoInfo(model)
28
+ Content(`Zig has no central package registry, so this package is distributed as a
29
+ git tag (\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl})). Add it to
30
+ your \`build.zig.zon\` dependencies, or build from a source checkout:
31
+
32
+ \`\`\`bash
33
+ cd ${target.name} && zig build
34
+ \`\`\`
35
+
36
+ To depend on it from another project, add the tagged archive to
37
+ \`build.zig.zon\`:
38
+
39
+ \`\`\`zig
40
+ .dependencies = .{
41
+ .sdk = .{
42
+ .url = "<repo-url>/archive/refs/tags/${target.name}/vX.Y.Z.tar.gz",
43
+ // .hash = "...", // filled in by \`zig fetch\`
44
+ },
45
+ },
46
+ \`\`\`
47
+
48
+ `)
49
+ })
50
+
51
+
52
+ export {
53
+ ReadmeInstall
54
+ }