@voxgig/sdkgen 1.3.14 → 1.3.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/action.js.map +1 -1
  3. package/dist/action/feature.js.map +1 -1
  4. package/dist/action/target.js.map +1 -1
  5. package/dist/cmp/AgentGuide.js.map +1 -1
  6. package/dist/cmp/AgentGuideContent.js.map +1 -1
  7. package/dist/cmp/AgentGuideFeature.js.map +1 -1
  8. package/dist/cmp/AgentGuideTop.js.map +1 -1
  9. package/dist/cmp/Changelog.js.map +1 -1
  10. package/dist/cmp/Deploy.js.map +1 -1
  11. package/dist/cmp/Entity.js.map +1 -1
  12. package/dist/cmp/Feature.js.map +1 -1
  13. package/dist/cmp/FeatureHook.js.map +1 -1
  14. package/dist/cmp/License.js.map +1 -1
  15. package/dist/cmp/Main.js.map +1 -1
  16. package/dist/cmp/Readme.js.map +1 -1
  17. package/dist/cmp/ReadmeEntity.js.map +1 -1
  18. package/dist/cmp/ReadmeErrors.js +1 -1
  19. package/dist/cmp/ReadmeErrors.js.map +1 -1
  20. package/dist/cmp/ReadmeExplanation.js +2 -2
  21. package/dist/cmp/ReadmeExplanation.js.map +1 -1
  22. package/dist/cmp/ReadmeHowto.js.map +1 -1
  23. package/dist/cmp/ReadmeInstall.js.map +1 -1
  24. package/dist/cmp/ReadmeIntro.js.map +1 -1
  25. package/dist/cmp/ReadmeModel.js.map +1 -1
  26. package/dist/cmp/ReadmeOptions.js.map +1 -1
  27. package/dist/cmp/ReadmeQuick.js.map +1 -1
  28. package/dist/cmp/ReadmeRef.js.map +1 -1
  29. package/dist/cmp/ReadmeTop.js +1 -1
  30. package/dist/cmp/ReadmeTop.js.map +1 -1
  31. package/dist/cmp/Security.js.map +1 -1
  32. package/dist/cmp/Test.js.map +1 -1
  33. package/dist/helpers/buildIdNames.js.map +1 -1
  34. package/dist/helpers/canonType.d.ts +3 -2
  35. package/dist/helpers/canonType.js +107 -24
  36. package/dist/helpers/canonType.js.map +1 -1
  37. package/dist/helpers/collectDeps.js.map +1 -1
  38. package/dist/helpers/getMatchEntries.js.map +1 -1
  39. package/dist/helpers/naming.d.ts +5 -1
  40. package/dist/helpers/naming.js +37 -0
  41. package/dist/helpers/naming.js.map +1 -1
  42. package/dist/helpers/opExample.d.ts +1 -1
  43. package/dist/helpers/opExample.js +37 -20
  44. package/dist/helpers/opExample.js.map +1 -1
  45. package/dist/helpers/opShape.d.ts +3 -1
  46. package/dist/helpers/opShape.js +91 -3
  47. package/dist/helpers/opShape.js.map +1 -1
  48. package/dist/helpers/packageMeta.js.map +1 -1
  49. package/dist/sdkgen.d.ts +3 -3
  50. package/dist/sdkgen.js +7 -1
  51. package/dist/sdkgen.js.map +1 -1
  52. package/dist/tsconfig.tsbuildinfo +1 -1
  53. package/dist/types.js.map +1 -1
  54. package/dist/utility.js.map +1 -1
  55. package/package.json +7 -6
  56. package/project/.sdk/model/target/haskell.aontu +6 -3
  57. package/project/.sdk/model/target/zig.aontu +12 -2
  58. package/project/.sdk/src/cmp/c/Config_c.ts +16 -4
  59. package/project/.sdk/src/cmp/c/EntityTypes_c.ts +168 -0
  60. package/project/.sdk/src/cmp/c/Main_c.ts +4 -0
  61. package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +192 -0
  62. package/project/.sdk/src/cmp/c/ReadmeExamplesTest_c.ts +152 -0
  63. package/project/.sdk/src/cmp/c/ReadmeExplanation_c.ts +55 -0
  64. package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +168 -0
  65. package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +52 -0
  66. package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +67 -0
  67. package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +151 -0
  68. package/project/.sdk/src/cmp/c/ReadmeOptions_c.ts +65 -0
  69. package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +225 -0
  70. package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +398 -0
  71. package/project/.sdk/src/cmp/c/ReadmeTopHowto_c.ts +24 -0
  72. package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +104 -0
  73. package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +86 -0
  74. package/project/.sdk/src/cmp/c/TestEntity_c.ts +10 -0
  75. package/project/.sdk/src/cmp/c/Test_c.ts +4 -0
  76. package/project/.sdk/src/cmp/c/utility_c.ts +8 -2
  77. package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +182 -0
  78. package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +54 -0
  79. package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +44 -0
  80. package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +144 -0
  81. package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +51 -0
  82. package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +66 -0
  83. package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +156 -0
  84. package/project/.sdk/src/cmp/clojure/ReadmeOptions_clojure.ts +61 -0
  85. package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +210 -0
  86. package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +409 -0
  87. package/project/.sdk/src/cmp/clojure/ReadmeTopHowto_clojure.ts +24 -0
  88. package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +98 -0
  89. package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +78 -0
  90. package/project/.sdk/src/cmp/clojure/TestDirect_clojure.ts +58 -0
  91. package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +79 -0
  92. package/project/.sdk/src/cmp/clojure/Test_clojure.ts +21 -65
  93. package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +174 -0
  94. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +5 -0
  95. package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +170 -0
  96. package/project/.sdk/src/cmp/cpp/ReadmeExplanation_cpp.ts +45 -0
  97. package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +139 -0
  98. package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +42 -0
  99. package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +69 -0
  100. package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +155 -0
  101. package/project/.sdk/src/cmp/cpp/ReadmeOptions_cpp.ts +62 -0
  102. package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +234 -0
  103. package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +387 -0
  104. package/project/.sdk/src/cmp/cpp/ReadmeTopHowto_cpp.ts +24 -0
  105. package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +95 -0
  106. package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +70 -0
  107. package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +5 -1
  108. package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +196 -0
  109. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
  110. package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
  111. package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +198 -0
  112. package/project/.sdk/src/cmp/csharp/ReadmeExplanation_csharp.ts +42 -0
  113. package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +168 -0
  114. package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +41 -0
  115. package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +65 -0
  116. package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +148 -0
  117. package/project/.sdk/src/cmp/csharp/ReadmeOptions_csharp.ts +60 -0
  118. package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +219 -0
  119. package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +390 -0
  120. package/project/.sdk/src/cmp/csharp/ReadmeTopHowto_csharp.ts +25 -0
  121. package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +92 -0
  122. package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +77 -0
  123. package/project/.sdk/src/cmp/csharp/Test_csharp.ts +4 -0
  124. package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -29
  125. package/project/.sdk/src/cmp/dart/Entity_dart.ts +8 -0
  126. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +166 -0
  127. package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +238 -0
  128. package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +53 -0
  129. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +151 -0
  130. package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +59 -0
  131. package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +65 -0
  132. package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +151 -0
  133. package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +63 -0
  134. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +214 -0
  135. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +381 -0
  136. package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +24 -0
  137. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +95 -0
  138. package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +78 -0
  139. package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +52 -0
  140. package/project/.sdk/src/cmp/dart/Test_dart.ts +6 -0
  141. package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +1 -3
  142. package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +1 -40
  143. package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +3 -3
  144. package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +165 -0
  145. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +4 -0
  146. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
  147. package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +163 -0
  148. package/project/.sdk/src/cmp/elixir/ReadmeExamplesTest_elixir.ts +126 -0
  149. package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +55 -0
  150. package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +149 -0
  151. package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +67 -0
  152. package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +66 -0
  153. package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +150 -0
  154. package/project/.sdk/src/cmp/elixir/ReadmeOptions_elixir.ts +62 -0
  155. package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +198 -0
  156. package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +333 -0
  157. package/project/.sdk/src/cmp/elixir/ReadmeTopHowto_elixir.ts +26 -0
  158. package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +79 -0
  159. package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +68 -0
  160. package/project/.sdk/src/cmp/elixir/Test_elixir.ts +4 -0
  161. package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +4 -0
  162. package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +4 -0
  163. package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +4 -0
  164. package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -0
  165. package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +4 -0
  166. package/project/.sdk/src/cmp/elixir/utility_elixir.ts +32 -0
  167. package/project/.sdk/src/cmp/go/EntityTypes_go.ts +12 -3
  168. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
  169. package/project/.sdk/src/cmp/go/TestEntity_go.ts +10 -3
  170. package/project/.sdk/src/cmp/go/utility_go.ts +3 -2
  171. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +240 -43
  172. package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
  173. package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +191 -30
  174. package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
  175. package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +125 -0
  176. package/project/.sdk/src/cmp/haskell/ReadmeExplanation_haskell.ts +48 -0
  177. package/project/.sdk/src/cmp/haskell/ReadmeHowto_haskell.ts +168 -0
  178. package/project/.sdk/src/cmp/haskell/ReadmeInstall_haskell.ts +51 -0
  179. package/project/.sdk/src/cmp/haskell/ReadmeIntro_haskell.ts +67 -0
  180. package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +160 -0
  181. package/project/.sdk/src/cmp/haskell/ReadmeOptions_haskell.ts +74 -0
  182. package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +237 -0
  183. package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +405 -0
  184. package/project/.sdk/src/cmp/haskell/ReadmeTopHowto_haskell.ts +31 -0
  185. package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +104 -0
  186. package/project/.sdk/src/cmp/haskell/ReadmeTopTest_haskell.ts +80 -0
  187. package/project/.sdk/src/cmp/haskell/Test_haskell.ts +27 -2
  188. package/project/.sdk/src/cmp/java/EntityTypes_java.ts +207 -0
  189. package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
  190. package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
  191. package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +186 -0
  192. package/project/.sdk/src/cmp/java/ReadmeExplanation_java.ts +46 -0
  193. package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +156 -0
  194. package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +52 -0
  195. package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +66 -0
  196. package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +150 -0
  197. package/project/.sdk/src/cmp/java/ReadmeOptions_java.ts +61 -0
  198. package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +230 -0
  199. package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +388 -0
  200. package/project/.sdk/src/cmp/java/ReadmeTopHowto_java.ts +23 -0
  201. package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +103 -0
  202. package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +77 -0
  203. package/project/.sdk/src/cmp/java/Test_java.ts +4 -0
  204. package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -8
  205. package/project/.sdk/src/cmp/js/MainEntity_js.ts +4 -2
  206. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +4 -4
  207. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +13 -4
  208. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +4 -4
  209. package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +5 -5
  210. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +4 -4
  211. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +4 -4
  212. package/project/.sdk/src/cmp/js/TestDirect_js.ts +6 -5
  213. package/project/.sdk/src/cmp/js/TestEntity_js.ts +7 -2
  214. package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +0 -31
  215. package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +201 -0
  216. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
  217. package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
  218. package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +173 -0
  219. package/project/.sdk/src/cmp/kotlin/ReadmeExplanation_kotlin.ts +47 -0
  220. package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +154 -0
  221. package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +50 -0
  222. package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +66 -0
  223. package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +150 -0
  224. package/project/.sdk/src/cmp/kotlin/ReadmeOptions_kotlin.ts +61 -0
  225. package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +230 -0
  226. package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +387 -0
  227. package/project/.sdk/src/cmp/kotlin/ReadmeTopHowto_kotlin.ts +23 -0
  228. package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +104 -0
  229. package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +77 -0
  230. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +4 -0
  231. package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
  232. package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -5
  233. package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
  234. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +2 -2
  235. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -1
  236. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +3 -3
  237. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +2 -2
  238. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +2 -2
  239. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +7 -2
  240. package/project/.sdk/src/cmp/lua/Test_lua.ts +1 -1
  241. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +2 -0
  242. package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +180 -0
  243. package/project/.sdk/src/cmp/ocaml/ReadmeExamplesTest_ocaml.ts +111 -0
  244. package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +46 -0
  245. package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +147 -0
  246. package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +44 -0
  247. package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +68 -0
  248. package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +155 -0
  249. package/project/.sdk/src/cmp/ocaml/ReadmeOptions_ocaml.ts +59 -0
  250. package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +205 -0
  251. package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +402 -0
  252. package/project/.sdk/src/cmp/ocaml/ReadmeTopHowto_ocaml.ts +25 -0
  253. package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +86 -0
  254. package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +79 -0
  255. package/project/.sdk/src/cmp/ocaml/Test_ocaml.ts +4 -0
  256. package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +181 -0
  257. package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +354 -0
  258. package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +43 -0
  259. package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +149 -0
  260. package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +47 -0
  261. package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +66 -0
  262. package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +150 -0
  263. package/project/.sdk/src/cmp/perl/ReadmeOptions_perl.ts +59 -0
  264. package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +216 -0
  265. package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +399 -0
  266. package/project/.sdk/src/cmp/perl/ReadmeTopHowto_perl.ts +24 -0
  267. package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +91 -0
  268. package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +83 -0
  269. package/project/.sdk/src/cmp/perl/Test_perl.ts +4 -0
  270. package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -6
  271. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
  272. package/project/.sdk/src/cmp/php/TestEntity_php.ts +7 -2
  273. package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -7
  274. package/project/.sdk/src/cmp/py/Entity_py.ts +2 -10
  275. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +2 -2
  276. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +8 -3
  277. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +3 -3
  278. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +2 -2
  279. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +2 -2
  280. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +2 -2
  281. package/project/.sdk/src/cmp/py/TestEntity_py.ts +7 -2
  282. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +19 -5
  283. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +2 -2
  284. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +8 -3
  285. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +3 -3
  286. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +2 -2
  287. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
  288. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +2 -2
  289. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +7 -2
  290. package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +4 -0
  291. package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +152 -0
  292. package/project/.sdk/src/cmp/rust/Entity_rust.ts +1 -1
  293. package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
  294. package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
  295. package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +132 -0
  296. package/project/.sdk/src/cmp/rust/ReadmeExplanation_rust.ts +44 -0
  297. package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +142 -0
  298. package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +49 -0
  299. package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +66 -0
  300. package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +153 -0
  301. package/project/.sdk/src/cmp/rust/ReadmeOptions_rust.ts +60 -0
  302. package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +212 -0
  303. package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +384 -0
  304. package/project/.sdk/src/cmp/rust/ReadmeTopHowto_rust.ts +24 -0
  305. package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +95 -0
  306. package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +81 -0
  307. package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +10 -0
  308. package/project/.sdk/src/cmp/rust/Test_rust.ts +4 -0
  309. package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +202 -0
  310. package/project/.sdk/src/cmp/scala/Main_scala.ts +6 -0
  311. package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +175 -0
  312. package/project/.sdk/src/cmp/scala/ReadmeExamplesTest_scala.ts +163 -0
  313. package/project/.sdk/src/cmp/scala/ReadmeExplanation_scala.ts +49 -0
  314. package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +155 -0
  315. package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +58 -0
  316. package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +66 -0
  317. package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +150 -0
  318. package/project/.sdk/src/cmp/scala/ReadmeOptions_scala.ts +61 -0
  319. package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +230 -0
  320. package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +388 -0
  321. package/project/.sdk/src/cmp/scala/ReadmeTopHowto_scala.ts +23 -0
  322. package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +104 -0
  323. package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +77 -0
  324. package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +38 -10
  325. package/project/.sdk/src/cmp/scala/Test_scala.ts +8 -0
  326. package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +152 -0
  327. package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
  328. package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
  329. package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +170 -0
  330. package/project/.sdk/src/cmp/swift/ReadmeExplanation_swift.ts +49 -0
  331. package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +159 -0
  332. package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +58 -0
  333. package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +64 -0
  334. package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +149 -0
  335. package/project/.sdk/src/cmp/swift/ReadmeOptions_swift.ts +62 -0
  336. package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +232 -0
  337. package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +387 -0
  338. package/project/.sdk/src/cmp/swift/ReadmeTopHowto_swift.ts +24 -0
  339. package/project/.sdk/src/cmp/swift/ReadmeTopQuick_swift.ts +105 -0
  340. package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +77 -0
  341. package/project/.sdk/src/cmp/swift/Test_swift.ts +4 -0
  342. package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -5
  343. package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +4 -2
  344. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +4 -4
  345. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +14 -4
  346. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +29 -11
  347. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +5 -5
  348. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +4 -4
  349. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +4 -4
  350. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +13 -11
  351. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +18 -2
  352. package/project/.sdk/src/cmp/zig/Config_zig.ts +22 -4
  353. package/project/.sdk/src/cmp/zig/Entity_zig.ts +1 -1
  354. package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
  355. package/project/.sdk/src/cmp/zig/Package_zig.ts +53 -0
  356. package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +188 -0
  357. package/project/.sdk/src/cmp/zig/ReadmeExamplesTest_zig.ts +58 -0
  358. package/project/.sdk/src/cmp/zig/ReadmeExplanation_zig.ts +45 -0
  359. package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +143 -0
  360. package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +54 -0
  361. package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +66 -0
  362. package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +152 -0
  363. package/project/.sdk/src/cmp/zig/ReadmeOptions_zig.ts +60 -0
  364. package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +211 -0
  365. package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +400 -0
  366. package/project/.sdk/src/cmp/zig/ReadmeTopHowto_zig.ts +24 -0
  367. package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +96 -0
  368. package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +82 -0
  369. package/project/.sdk/src/cmp/zig/TestDirect_zig.ts +66 -0
  370. package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +79 -0
  371. package/project/.sdk/src/cmp/zig/Test_zig.ts +17 -61
  372. package/project/.sdk/tm/clojure/src/voxgig/struct.clj +1 -1
  373. package/project/.sdk/tm/cpp/test/feature_test.cpp +19 -0
  374. package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +4 -1
  375. package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +7 -1
  376. package/project/.sdk/tm/elixir/lib/utility/struct/voxgig_struct.ex +1 -1
  377. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +7 -1
  378. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +3 -1
  379. package/project/.sdk/tm/haskell/test/Harness.hs +8 -3
  380. package/project/.sdk/tm/js/Makefile +1 -1
  381. package/project/.sdk/tm/js/jsconfig.json +12 -0
  382. package/project/.sdk/tm/ocaml/Makefile +5 -1
  383. package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
  384. package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
  385. package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
  386. package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
  387. package/project/.sdk/tm/ts/Makefile +1 -1
  388. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
  389. package/src/cmp/ReadmeErrors.ts +2 -2
  390. package/src/cmp/ReadmeExplanation.ts +3 -3
  391. package/src/cmp/ReadmeTop.ts +2 -2
  392. package/src/helpers/canonType.ts +116 -25
  393. package/src/helpers/naming.ts +47 -0
  394. package/src/helpers/opExample.ts +43 -20
  395. package/src/helpers/opShape.ts +102 -3
  396. package/src/sdkgen.ts +8 -2
  397. package/src/tsconfig.json +2 -0
  398. package/project/.sdk/tm/zig/build.zig.zon +0 -11
@@ -0,0 +1,79 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+
5
+ // Emit per-entity model-driven checks INTO the shared gentest run body (the
6
+ // clojure test runner drives a single sdk.gentest/run). Covers: entity
7
+ // accessor existence, a create+list smoke run through the in-memory test-mode
8
+ // mock transport (exercising the full operation pipeline, hooks and run-op),
9
+ // and the streaming entity fn. API-agnostic behaviour (pipeline error
10
+ // branches, all features, netsim, primary utility, struct corpus) lives in the
11
+ // static template test namespaces.
12
+ const TestEntity = cmp(function TestEntity(props: any) {
13
+ const e = props.entity
14
+
15
+ const ops = Object.keys(e.op || {})
16
+ const hasCreate = ops.includes('create')
17
+ const hasList = ops.includes('list')
18
+
19
+ // Accessor existence.
20
+ Content(` (t/run-check rec "gen-exists-${e.name}"
21
+ (fn [] (let [sdk (api/test-sdk nil nil)]
22
+ (t/is-true (some? (api/${e.name} sdk nil)) "${e.name} accessor present"))))
23
+ `)
24
+
25
+ // create+list smoke run through the mock transport.
26
+ if (hasCreate || hasList) {
27
+ Content(` (t/run-check rec "gen-smoke-${e.name}"
28
+ (fn [] (let [sdk (api/test-sdk nil nil)
29
+ ent (api/${e.name} sdk nil)]
30
+ `)
31
+ if (hasCreate) {
32
+ Content(` (let [res (e-${e.name}/create ent (vs/jm "name" "smoke") nil)]
33
+ (t/is-true (vs/ismap res) "create returns a record map")
34
+ (t/is-true (some? (vs/getprop res "id")) "created record has an id"))
35
+ `)
36
+ }
37
+ if (hasList) {
38
+ Content(` (let [items (e-${e.name}/list ent (vs/jm) nil)]
39
+ (t/is-true (sequential? items) "list returns a sequential collection"))
40
+ `)
41
+ }
42
+ Content(` )))
43
+ `)
44
+ }
45
+
46
+ // stream(action, args, callopts): runs the op through the full pipeline and
47
+ // returns a lazy seq of items. Seeds three records via the test mock and
48
+ // streams them; needs only a list op.
49
+ if (hasList) {
50
+ Content(` (t/run-check rec "gen-stream-${e.name}"
51
+ (fn [] (let [seed (vs/jm "${e.name}" (vs/jm "S1" (vs/jm "id" "S1" "name" "a")
52
+ "S2" (vs/jm "id" "S2" "name" "b")
53
+ "S3" (vs/jm "id" "S3" "name" "c")))]
54
+ ;; Fallback (no streaming feature): materialised items.
55
+ (let [sdk (api/test-sdk (vs/jm "entity" seed) nil)
56
+ items (vec (e-${e.name}/stream (api/${e.name} sdk nil) "list" (vs/jm) nil))]
57
+ (t/is-eq (count items) 3 "stream fallback yields materialised items")
58
+ (t/is-true (vs/ismap (first items)) "stream yields bare record maps"))
59
+ ;; signal cancels iteration between yields.
60
+ (let [sdk (api/test-sdk (vs/jm "entity" seed) nil)
61
+ n (atom 0) sig (fn [] (>= (swap! n inc) 2))
62
+ items (vec (e-${e.name}/stream (api/${e.name} sdk nil) "list" (vs/jm) (vs/jm "signal" sig)))]
63
+ (t/is-eq (count items) 1 "stream signal stops after first yield"))
64
+ ;; Streaming feature active: yields from the streaming iterator.
65
+ (when (vs/getpath (config/make-config) "feature.streaming")
66
+ (let [ssdk (api/test-sdk (vs/jm "entity" seed) (vs/jm "feature" (vs/jm "streaming" (vs/jm "active" true))))]
67
+ (t/is-eq (count (vec (e-${e.name}/stream (api/${e.name} ssdk nil) "list" (vs/jm) nil))) 3
68
+ "stream (streaming active) yields all items"))
69
+ (let [csdk (api/test-sdk (vs/jm "entity" seed) (vs/jm "feature" (vs/jm "streaming" (vs/jm "active" true "chunkSize" 2))))
70
+ batches (vec (e-${e.name}/stream (api/${e.name} csdk nil) "list" (vs/jm) nil))]
71
+ (t/is-eq (count batches) 2 "stream chunkSize groups items into 2 batches"))))))
72
+ `)
73
+ }
74
+ })
75
+
76
+
77
+ export {
78
+ TestEntity
79
+ }
@@ -10,20 +10,24 @@ import type {
10
10
 
11
11
  import { cmp, each, File, Content, Folder } from '@voxgig/sdkgen'
12
12
 
13
+ import { TestEntity } from './TestEntity_clojure'
14
+ import { TestDirect } from './TestDirect_clojure'
15
+ import { ReadmeExamplesTest } from './ReadmeExamplesTest_clojure'
16
+
13
17
 
14
18
  // Generates sdk/gentest.clj (ns sdk.gentest): the API-specific tests, driven by
15
- // the model. Exposes (run rec) which the template test-runner invokes. Covers
16
- // entity accessor existence plus a create+list smoke run through the in-memory
17
- // test-mode mock transport (exercising the full operation pipeline, hooks and
18
- // run-op for the actual API entities). API-agnostic behaviour (pipeline error
19
- // branches, all features, netsim, primary utility, struct corpus) lives in the
20
- // static template test namespaces.
19
+ // the model. Exposes (run rec) which the template test-runner invokes. This is
20
+ // the orchestrator: it emits the namespace form and the single (run rec) entry
21
+ // point, then delegates the per-entity checks to TestEntity (accessor +
22
+ // create/list smoke + stream) and TestDirect (prepare + direct escape hatch),
23
+ // and finally the documentation clojure-examples syntax gate (ReadmeExamples).
24
+ // API-agnostic behaviour (pipeline error branches, all features, netsim,
25
+ // primary utility, struct corpus) lives in the static template test namespaces.
21
26
  const Test = cmp(function Test(props: any) {
22
27
  const { model } = props.ctx$
23
28
  const { target } = props
24
29
 
25
30
  const entity: ModelEntity = getModelPath(model, `main.${KIT}.entity`)
26
- const entities = Object.values(entity) as any[]
27
31
 
28
32
  Folder({ name: 'test' }, () => {
29
33
  Folder({ name: 'sdk' }, () => {
@@ -39,73 +43,25 @@ const Test = cmp(function Test(props: any) {
39
43
  (:require [sdk.api :as api]
40
44
  [sdk.config :as config]
41
45
  [sdk.testutil :as t]
46
+ [clojure.string]
42
47
  [voxgig.struct :as vs]${requires}))
43
48
 
44
49
  (defn run [rec]
45
50
  `)
46
51
 
52
+ // Per-entity accessor / create+list smoke / stream checks
53
+ // (sorted-key order via each() keeps output byte-stable).
47
54
  each(entity, (e: any) => {
48
- Content(` (t/run-check rec "gen-exists-${e.name}"
49
- (fn [] (let [sdk (api/test-sdk nil nil)]
50
- (t/is-true (some? (api/${e.name} sdk nil)) "${e.name} accessor present"))))
51
- `)
55
+ TestEntity({ target, entity: e })
52
56
  })
53
57
 
54
- for (const e of entities) {
55
- const ops = Object.keys(e.op || {})
56
- const hasCreate = ops.includes('create')
57
- const hasList = ops.includes('list')
58
- if (!hasCreate && !hasList) {
59
- continue
60
- }
61
- Content(` (t/run-check rec "gen-smoke-${e.name}"
62
- (fn [] (let [sdk (api/test-sdk nil nil)
63
- ent (api/${e.name} sdk nil)]
64
- `)
65
- if (hasCreate) {
66
- Content(` (let [res (e-${e.name}/create ent (vs/jm "name" "smoke") nil)]
67
- (t/is-true (vs/ismap res) "create returns a record map")
68
- (t/is-true (some? (vs/getprop res "id")) "created record has an id"))
69
- `)
70
- }
71
- if (hasList) {
72
- Content(` (let [items (e-${e.name}/list ent (vs/jm) nil)]
73
- (t/is-true (sequential? items) "list returns a sequential collection"))
74
- `)
75
- }
76
- Content(` )))
77
- `)
58
+ // Per-entity direct()/prepare() escape-hatch checks.
59
+ each(entity, (e: any) => {
60
+ TestDirect({ target, entity: e })
61
+ })
78
62
 
79
- // PR review #4: entity stream(action, args, callopts). Runs the op
80
- // through the full pipeline and returns a lazy seq of items. Seeds
81
- // three records via the test mock (SDK.test entity seed) and streams
82
- // them; needs only a list op.
83
- if (hasList) {
84
- Content(` (t/run-check rec "gen-stream-${e.name}"
85
- (fn [] (let [seed (vs/jm "${e.name}" (vs/jm "S1" (vs/jm "id" "S1" "name" "a")
86
- "S2" (vs/jm "id" "S2" "name" "b")
87
- "S3" (vs/jm "id" "S3" "name" "c")))]
88
- ;; Fallback (no streaming feature): materialised items.
89
- (let [sdk (api/test-sdk (vs/jm "entity" seed) nil)
90
- items (vec (e-${e.name}/stream (api/${e.name} sdk nil) "list" (vs/jm) nil))]
91
- (t/is-eq (count items) 3 "stream fallback yields materialised items")
92
- (t/is-true (vs/ismap (first items)) "stream yields bare record maps"))
93
- ;; signal cancels iteration between yields.
94
- (let [sdk (api/test-sdk (vs/jm "entity" seed) nil)
95
- n (atom 0) sig (fn [] (>= (swap! n inc) 2))
96
- items (vec (e-${e.name}/stream (api/${e.name} sdk nil) "list" (vs/jm) (vs/jm "signal" sig)))]
97
- (t/is-eq (count items) 1 "stream signal stops after first yield"))
98
- ;; Streaming feature active: yields from the streaming iterator.
99
- (when (vs/getpath (config/make-config) "feature.streaming")
100
- (let [ssdk (api/test-sdk (vs/jm "entity" seed) (vs/jm "feature" (vs/jm "streaming" (vs/jm "active" true))))]
101
- (t/is-eq (count (vec (e-${e.name}/stream (api/${e.name} ssdk nil) "list" (vs/jm) nil))) 3
102
- "stream (streaming active) yields all items"))
103
- (let [csdk (api/test-sdk (vs/jm "entity" seed) (vs/jm "feature" (vs/jm "streaming" (vs/jm "active" true "chunkSize" 2))))
104
- batches (vec (e-${e.name}/stream (api/${e.name} csdk nil) "list" (vs/jm) nil))]
105
- (t/is-eq (count batches) 2 "stream chunkSize groups items into 2 batches"))))))
106
- `)
107
- }
108
- }
63
+ // Documentation clojure-examples syntax gate.
64
+ ReadmeExamplesTest({ target })
109
65
 
110
66
  Content(` nil)
111
67
  `)
@@ -0,0 +1,174 @@
1
+
2
+
3
+ // Typed-model generator (C++ target). Port of EntityTypes_ts.ts / _py.ts.
4
+ //
5
+ // The C++ SDK runtime is fully DYNAMIC: every op takes and returns the
6
+ // JSON-like sdk::Value, so — unlike a statically typed target — there are no
7
+ // generated structs the runtime consumes. This module emits a DOCUMENTATION
8
+ // header, <sdk>_types.hpp, describing the shape of each entity and its per-op
9
+ // request/match payloads as plain C++ structs in a dedicated `sdk::types`
10
+ // namespace. They are convenience/reference types a consumer MAY use to model
11
+ // payloads; the SDK itself neither includes nor requires this header, so it is
12
+ // safe (it cannot affect the runtime or the test build).
13
+ //
14
+ // Field/param sentinels ($STRING, $INTEGER, ...) map to concrete C++ types via
15
+ // the SHARED canonToType 'cpp' column (the single source of truth per language
16
+ // — do not keep a local table here). Array surfaces as std::vector<Value>,
17
+ // object as std::map<std::string, Value>, and any/null/unknown as the dynamic
18
+ // sdk::Value. Optional (req:false) members are marked with a trailing
19
+ // `// optional` comment — a struct member is always present in C++, so
20
+ // key-optionality is documented rather than encoded.
21
+ //
22
+ // Keep the SAME type-name scheme as every other language: <Name>,
23
+ // <Name>LoadMatch, <Name>ListMatch, <Name>CreateData, <Name>UpdateData,
24
+ // <Name>RemoveMatch (via the shared opTypeName helper).
25
+
26
+ import {
27
+ cmp, each, names,
28
+ File, Content,
29
+ canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions,
30
+ } from '@voxgig/sdkgen'
31
+
32
+ import {
33
+ KIT,
34
+ getModelPath,
35
+ } from '@voxgig/apidef'
36
+
37
+
38
+ const LANG = 'cpp'
39
+
40
+
41
+ // A valid C++ identifier for a struct member; non-identifier field names have
42
+ // no safe struct-member rendering, so they are skipped (still reachable via the
43
+ // runtime Value map).
44
+ function cppIdent(name: string): boolean {
45
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)
46
+ }
47
+
48
+
49
+ // Emit a struct named `typeName` from a list of {name, type, optional} items.
50
+ // An item whose name is not a legal identifier is skipped (WITH a warning —
51
+ // the key stays reachable via the runtime Value map, but its absence from the
52
+ // typed model should be visible, not silent).
53
+ function emitStruct(typeName: string, items: any[], log?: any): void {
54
+ const usable = items.filter((it: any) => it && null != it.name && cppIdent(it.name))
55
+
56
+ items.forEach((it: any) => {
57
+ if (it && null != it.name && !cppIdent(it.name) && log && log.warn) {
58
+ log.warn({
59
+ point: 'entity-types-skip-field', typeName, field: it.name,
60
+ note: `cpp: field "${it.name}" of ${typeName} has no legal C++ ` +
61
+ `identifier form; omitted from the typed model (still reachable ` +
62
+ `via the runtime Value map)`,
63
+ })
64
+ }
65
+ })
66
+
67
+ if (0 === usable.length) {
68
+ Content(`struct ${typeName} {};
69
+
70
+ `)
71
+ return
72
+ }
73
+
74
+ Content(`struct ${typeName} {
75
+ `)
76
+ usable.forEach((it: any) => {
77
+ const opt = it.optional ? ' // optional' : ''
78
+ Content(` ${canonToType(it.type, LANG)} ${it.name};${opt}
79
+ `)
80
+ })
81
+ Content(`};
82
+
83
+ `)
84
+ }
85
+
86
+
87
+ const EntityTypes = cmp(function EntityTypes(props: any) {
88
+ const { model, log } = props.ctx$
89
+ const target = props.target || {}
90
+ const ext = target.ext || 'hpp'
91
+
92
+ // only_active:false — getModelPath DROPS active:false entries by default,
93
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
94
+ // collection, so inactive entities still get generated entity code that
95
+ // references these typed names. The typed model must cover them too.
96
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
97
+ // Emit for EVERY entity that gets generated entity code: the consumer
98
+ // scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
99
+ // filter, so inactive entities still get class files referencing these
100
+ // typed names. Filter on `name` (always present), NOT `active` — parity
101
+ // with the go emitter's fix.
102
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
103
+ // Derive the PascalCase Name up-front — it is set LAZILY by names().
104
+ entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
105
+
106
+ // Surface duplicate generated type names (two entities with the same
107
+ // PascalCase Name) — they would redeclare a type in statically-typed
108
+ // targets. Detection only; renaming is a model-level decision.
109
+ warnEntityTypeCollisions(entity, log, LANG)
110
+
111
+ const guard = 'SDK_' + model.const.Name.toUpperCase().replace(/[^A-Z0-9]/g, '_') + '_TYPES_HPP'
112
+
113
+ File({ name: model.const.Name.toLowerCase() + '_types.' + ext }, () => {
114
+
115
+ Content(`// Typed reference models for the ${model.const.Name} SDK (C++).
116
+ //
117
+ // GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
118
+ // params. The C++ SDK runtime is Value-based, so these structs are
119
+ // DOCUMENTATION / convenience types only — the SDK neither includes nor
120
+ // requires this header. Array fields surface as std::vector<Value>, object
121
+ // fields as std::map<std::string, Value>, and any/null fields as sdk::Value.
122
+ // Optional (req:false) members are flagged with a trailing "// optional"
123
+ // comment. Do not edit by hand.
124
+
125
+ #ifndef ${guard}
126
+ #define ${guard}
127
+
128
+ #include <cstdint>
129
+ #include <map>
130
+ #include <string>
131
+ #include <vector>
132
+
133
+ #include "core/types.hpp"
134
+
135
+ namespace sdk {
136
+ namespace types {
137
+
138
+ `)
139
+
140
+ entityList.forEach((ent: any) => {
141
+ const Name = ent.Name
142
+ const fields = (ent.fields ? each(ent.fields) : [])
143
+ .filter((f: any) => f.active !== false)
144
+
145
+ // Entity data model: one member per field, `req:false` -> optional.
146
+ emitStruct(Name, fields.map((f: any) => ({
147
+ name: f.name, type: f.type, optional: false === f.req,
148
+ })), log)
149
+
150
+ // Per active op: a request/match type. Members and their optionality
151
+ // come from the shared partiality policy (opRequestShape).
152
+ const ops = ent.op || {}
153
+ ;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
154
+ if (null == ops[opname]) {
155
+ return
156
+ }
157
+ const typeName = opTypeName(Name, opname)
158
+ const { items } = opRequestShape(ent, opname)
159
+ emitStruct(typeName, items, log)
160
+ })
161
+ })
162
+
163
+ Content(`} // namespace types
164
+ } // namespace sdk
165
+
166
+ #endif // ${guard}
167
+ `)
168
+ })
169
+ })
170
+
171
+
172
+ export {
173
+ EntityTypes,
174
+ }
@@ -23,6 +23,7 @@ import { Config } from './Config_cpp'
23
23
  import { Gitignore } from './Gitignore_cpp'
24
24
  import { MainEntity } from './MainEntity_cpp'
25
25
  import { EntityBase } from './EntityBase_cpp'
26
+ import { EntityTypes } from './EntityTypes_cpp'
26
27
 
27
28
 
28
29
  const Main = cmp(async function Main(props: any) {
@@ -49,6 +50,10 @@ const Main = cmp(async function Main(props: any) {
49
50
  // entity/entities.hpp — the entity umbrella (declares every entity header).
50
51
  EntityBase({ target })
51
52
 
53
+ // <sdk>_types.hpp — documentation/reference structs (not used by the
54
+ // Value-based runtime; safe convenience types for consumers).
55
+ EntityTypes({ target })
56
+
52
57
  Folder({ name: 'core' }, () => {
53
58
 
54
59
  Config({ target })
@@ -0,0 +1,170 @@
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 { cppVarName } from './utility_cpp'
10
+
11
+
12
+ // Type names come from the shared canonToType 'cpp' column (single source of truth).
13
+
14
+ // A type-correct C++ literal for a field's canonical type.
15
+ function cppLit(type: any, placeholder: string = 'example'): string {
16
+ const k = canonKey(type)
17
+ if ('INTEGER' === k || 'NUMBER' === k) return 'Value(1)'
18
+ if ('BOOLEAN' === k) return 'Value(true)'
19
+ if ('ARRAY' === k) return 'vlist()'
20
+ if ('OBJECT' === k) return 'vmap()'
21
+ return `Value("${placeholder}")`
22
+ }
23
+
24
+
25
+ // Operation method spellings for the C++ target: lowercase methods that take a
26
+ // request Value plus the ctrl Value, returning sdk::Value.
27
+ const OP_DESC: Record<string, { method: string, desc: string }> = {
28
+ load: { method: 'load(match, ctrl)', desc: 'Load a single entity by match criteria.' },
29
+ list: { method: 'list(match, ctrl)', desc: 'List entities, optionally matching the given criteria.' },
30
+ create: { method: 'create(data, ctrl)', desc: 'Create a new entity with the given data.' },
31
+ update: { method: 'update(data, ctrl)', desc: 'Update an existing entity.' },
32
+ remove: { method: 'remove(match, ctrl)', desc: 'Remove the matching entity.' },
33
+ }
34
+
35
+
36
+ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
37
+ const { target } = props
38
+ const { model } = props.ctx$
39
+
40
+ const entity = getModelPath(model, `main.${KIT}.entity`)
41
+
42
+ const publishedEntities = each(entity)
43
+ .filter((entity: any) => entity.active !== false)
44
+
45
+ if (0 === publishedEntities.length) {
46
+ return
47
+ }
48
+
49
+ Content(`
50
+
51
+ ## Entities
52
+
53
+ `)
54
+
55
+ publishedEntities.map((entity: any) => {
56
+ const opnames = Object.keys(entity.op || {})
57
+ const fields = entity.fields || []
58
+ // Model-driven id key: null when this entity has no id-like field.
59
+ const idF = entityIdField(entity)
60
+ // The client accessor is the entity's snake_case name (client->planet()).
61
+ const acc = cppVarName(entity.name)
62
+ const eVar = acc
63
+
64
+ Content(`
65
+ ### ${entity.Name}
66
+
67
+ `)
68
+
69
+ if (entity.short) {
70
+ Content(`${entity.short}
71
+
72
+ `)
73
+ }
74
+
75
+ Content(`Create an instance: \`auto ${eVar} = client->${acc}();\`
76
+
77
+ `)
78
+
79
+ if (opnames.length > 0) {
80
+ Content(`#### Operations
81
+
82
+ | Method | Description |
83
+ | --- | --- |
84
+ `)
85
+ opnames.map((opname: string) => {
86
+ const info = OP_DESC[opname]
87
+ if (info) {
88
+ Content(`| \`${info.method}\` | ${info.desc} |
89
+ `)
90
+ }
91
+ })
92
+
93
+ Content(`
94
+ `)
95
+ }
96
+
97
+ if (fields.length > 0) {
98
+ Content(`#### Fields
99
+
100
+ | Field | Type | Description |
101
+ | --- | --- | --- |
102
+ `)
103
+
104
+ each(fields, (field: any) => {
105
+ const desc = field.short || ''
106
+ Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
107
+ `)
108
+ })
109
+
110
+ Content(`
111
+ `)
112
+ }
113
+
114
+ if (opnames.includes('load')) {
115
+ // The id key plus every REQUIRED match key (parent path params like
116
+ // page_id) — the same shape the runtime resolves path params from.
117
+ const loadItems = opRequestShape(entity, 'load').items
118
+ .filter((it: any) => !it.optional || it.name === idF)
119
+ .sort((a: any, b: any) =>
120
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
121
+ const loadArg = 0 < loadItems.length
122
+ ? `vmap({${loadItems.map((it: any) =>
123
+ `{"${it.name}", ${cppLit(it.type,
124
+ it.name === idF ? entity.name + '_id' : it.name)}}`).join(', ')}})`
125
+ : 'Value::undef()'
126
+ Content(`#### Example: Load
127
+
128
+ \`\`\`cpp
129
+ Value ${eVar} = client->${acc}()->load(${loadArg}, Value::undef());
130
+ \`\`\`
131
+
132
+ `)
133
+ }
134
+
135
+ if (opnames.includes('list')) {
136
+ Content(`#### Example: List
137
+
138
+ \`\`\`cpp
139
+ Value ${eVar}s = client->${acc}()->list(Value::undef(), Value::undef());
140
+ \`\`\`
141
+
142
+ `)
143
+ }
144
+
145
+ if (opnames.includes('create')) {
146
+ // Members come from the SAME shape the runtime validates
147
+ // (opRequestShape): every required member must appear.
148
+ const createItems = opRequestShape(entity, 'create').items
149
+ .filter((it: any) => !it.optional)
150
+ Content(`#### Example: Create
151
+
152
+ \`\`\`cpp
153
+ Value ${eVar} = client->${acc}()->create(vmap({
154
+ `)
155
+ createItems.map((it: any) => {
156
+ Content(` {"${it.name}", ${cppLit(it.type, 'example_' + it.name)}}, // ${canonToType(it.type, target.name)}
157
+ `)
158
+ })
159
+ Content(`}), Value::undef());
160
+ \`\`\`
161
+
162
+ `)
163
+ }
164
+ })
165
+ })
166
+
167
+
168
+ export {
169
+ ReadmeEntity
170
+ }
@@ -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 C++ SDK uses a single dynamic \`sdk::Value\` type (a JSON-like variant
11
+ over string / number / bool / list / map) throughout rather than generated
12
+ typed structs. This mirrors the dynamic nature of the API and keeps the
13
+ SDK flexible — no code generation is needed when the API schema changes.
14
+
15
+ Build maps with \`sdk::vmap({{"key", sdk::Value("v")}})\` and lists with
16
+ \`sdk::vlist({...})\`; read fields back with \`sdk::getp(value, "key")\`. Use
17
+ \`sdk::to_map()\` to safely coerce a value that should be a map, and
18
+ \`sdk::Struct::jsonify(value)\` to render it as JSON.
19
+
20
+ ### Directory structure
21
+
22
+ \`\`\`
23
+ ${target.name}/
24
+ ├── core/ -- Runtime type graph, config, generated client
25
+ ├── entity/ -- Per-entity client headers
26
+ ├── feature/ -- Built-in features (Base, Test, Log, ...)
27
+ ├── utility/ -- Operation pipeline + vendored struct library
28
+ ├── test/ -- Test suites
29
+ ├── Makefile -- Build & run the tests (C++17)
30
+ └── VERSION -- SDK version
31
+ \`\`\`
32
+
33
+ Include the umbrella header \`core/sdk.hpp\` to pull in the whole SDK: the
34
+ runtime types, the pipeline utilities, the vendored struct, the generated
35
+ config, the per-entity clients and the generated \`${model.const.Name}SDK\`
36
+ client class. Everything lives in the \`sdk\` namespace.
37
+
38
+ `)
39
+
40
+ })
41
+
42
+
43
+ export {
44
+ ReadmeExplanation
45
+ }