@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,168 @@
1
+
2
+
3
+ // Typed-model generator (C target). Port of EntityTypes_rust.ts / _go.ts.
4
+ //
5
+ // Reads main.<KIT>.entity.<e>.fields[] and per-op params
6
+ // (op.<name>.points[].args.params[]) and emits one header, entity/types.h,
7
+ // with a C `typedef struct { ... } <Name>;` per entity plus a request/match
8
+ // struct per active op. Field/param sentinels ($STRING, $INTEGER, ...) map to
9
+ // C types via the SHARED canonToType 'c' column (the single source of truth
10
+ // per language — do not keep a local table here).
11
+ //
12
+ // DESIGN NOTE (C specifics vs the rust/go reference):
13
+ // * The C runtime is fully DYNAMIC: every op takes and returns the vendored
14
+ // `voxgig_value*` (with a trailing PNError** out-param), and the entity
15
+ // fragments emit no typed wrappers. These structs are therefore
16
+ // DOCUMENTARY — they mirror the entity/op shapes for reference and IDE
17
+ // support, but nothing in the runtime consumes them. types.h is a
18
+ // standalone header (guarded, includes sdk.h for the primitive types); it
19
+ // is not #included by any generated .c, so it never affects the build.
20
+ // * C has no Option<T> / optional struct members: a `req:false` field is
21
+ // still declared, with a trailing `// optional` marker. Absence is
22
+ // represented at runtime by the value simply not being present in the map.
23
+ // * Member names are snake_case + keyword-safe via cVarName; duplicate
24
+ // idents are dropped so a struct never declares the same member twice.
25
+ //
26
+ // Keep the SAME type-name scheme as every other language: <Name>,
27
+ // <Name>LoadMatch, <Name>ListMatch, <Name>CreateData, <Name>UpdateData,
28
+ // <Name>RemoveMatch.
29
+
30
+ import {
31
+ cmp, each, names,
32
+ File, Content, Folder,
33
+ } from '@voxgig/sdkgen'
34
+
35
+ import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
36
+
37
+ import {
38
+ KIT,
39
+ getModelPath,
40
+ } from '@voxgig/apidef'
41
+
42
+ import { cVarName } from './utility_c'
43
+
44
+
45
+ const LANG = 'c'
46
+
47
+
48
+ // One C struct member line. `optional` -> a trailing marker (C has no
49
+ // Option<T>). Member names are snake_case + keyword-safe via cVarName.
50
+ function memberLine(name: string, sentinel: any, optional: boolean): string {
51
+ const ct = canonToType(sentinel, LANG)
52
+ const sep = ct.endsWith('*') ? '' : ' '
53
+ return ` ${ct}${sep}${cVarName(name)};${optional ? ' // optional' : ''}\n`
54
+ }
55
+
56
+
57
+ // Emit a `typedef struct { ... } <typeName>;` from {name, type, optional}
58
+ // items, dropping duplicate C identifiers (two model names can collapse to
59
+ // one ident). An empty shape gets a placeholder member (a struct with no
60
+ // members is not valid ISO C).
61
+ function emitStruct(comment: string, typeName: string, items: any[]): void {
62
+ Content(`${comment}
63
+ typedef struct {
64
+ `)
65
+ const seen = new Set<string>()
66
+ let count = 0
67
+ items.forEach((it: any) => {
68
+ if (null == it || null == it.name) return
69
+ const ident = cVarName(it.name)
70
+ if (seen.has(ident)) return
71
+ seen.add(ident)
72
+ Content(memberLine(it.name, it.type, !!it.optional))
73
+ count++
74
+ })
75
+ if (0 === count) {
76
+ Content(` char _unused; // placeholder: no modelled members
77
+ `)
78
+ }
79
+ Content(`} ${typeName};
80
+
81
+ `)
82
+ }
83
+
84
+
85
+ const EntityTypes = cmp(function EntityTypes(props: any) {
86
+ const { model, log } = props.ctx$
87
+
88
+ // only_active:false — getModelPath DROPS active:false entries by default,
89
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
90
+ // collection, so inactive entities still get generated entity code that
91
+ // references these typed names. The typed model must cover them too.
92
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
93
+ // Emit for every entity that gets an entity file (filter on `name`, always
94
+ // present; derive `Name` here so the struct set is deterministic — parity
95
+ // with the go/rust emitters' fix).
96
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
97
+ entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
98
+
99
+ // Surface duplicate generated type names (two entities with the same
100
+ // PascalCase Name) — they would redeclare a type in statically-typed
101
+ // targets. Detection only; renaming is a model-level decision.
102
+ warnEntityTypeCollisions(entity, log, LANG)
103
+
104
+ const guard = String(model.const.Name).toUpperCase().replace(/[^A-Z0-9_]/g, '_') + '_ENTITY_TYPES_H'
105
+
106
+ Folder({ name: 'entity' }, () => {
107
+
108
+ File({ name: 'types.h' }, () => {
109
+
110
+ Content(`// Typed models for the ${model.const.Name} SDK.
111
+ //
112
+ // GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
113
+ // params (op.<name>.points[].args.params[]). Field/param types are mapped
114
+ // from the canonical type sentinels. Do not edit by hand.
115
+ //
116
+ // These are DOCUMENTARY: the SDK runtime is dynamic (ops take/return
117
+ // \`voxgig_value*\`), so nothing consumes these structs yet — they mirror the
118
+ // entity/op shapes for reference and IDE support. This header is standalone
119
+ // and is not #included by any generated .c.
120
+
121
+ #ifndef ${guard}
122
+ #define ${guard}
123
+
124
+ #include "sdk.h"
125
+
126
+ `)
127
+
128
+ entityList.forEach((ent: any) => {
129
+ const Name = ent.Name
130
+ const fields = (ent.fields ? each(ent.fields) : [])
131
+ .filter((f: any) => f.active !== false)
132
+
133
+ // Entity data model: one member per model field. req:false -> optional.
134
+ emitStruct(
135
+ `// ${Name} is the typed data model for the ${ent.name} entity.`,
136
+ Name,
137
+ fields.map((f: any) => ({ name: f.name, type: f.type, optional: false === f.req }))
138
+ )
139
+
140
+ // Per active op: a request/match struct. Members and their optionality
141
+ // come from the shared partiality policy (opRequestShape).
142
+ const ops = ent.op || {}
143
+ ;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
144
+ if (null == ops[opname]) {
145
+ return
146
+ }
147
+
148
+ const typeName = opTypeName(Name, opname)
149
+ const { items } = opRequestShape(ent, opname)
150
+
151
+ emitStruct(
152
+ `// ${typeName} is the typed request payload for ${Name}.${opname}.`,
153
+ typeName,
154
+ items
155
+ )
156
+ })
157
+ })
158
+
159
+ Content(`#endif // ${guard}
160
+ `)
161
+ })
162
+ })
163
+ })
164
+
165
+
166
+ export {
167
+ EntityTypes,
168
+ }
@@ -23,6 +23,7 @@ import { Config } from './Config_c'
23
23
  import { Gitignore } from './Gitignore_c'
24
24
  import { MainEntity } from './MainEntity_c'
25
25
  import { EntityBase } from './EntityBase_c'
26
+ import { EntityTypes } from './EntityTypes_c'
26
27
 
27
28
 
28
29
  const Main = cmp(async function Main(props: any) {
@@ -75,6 +76,9 @@ const Main = cmp(async function Main(props: any) {
75
76
  // core/api.h — the per-API public header (entity constructors + accessors).
76
77
  EntityBase({ target })
77
78
 
79
+ // entity/types.h — documentary typed models (one struct per entity + op).
80
+ EntityTypes({ target })
81
+
78
82
  })
79
83
 
80
84
 
@@ -0,0 +1,192 @@
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 { cIdent, cVarName } from './utility_c'
10
+
11
+
12
+ // Canonical type sentinel -> a C type name for the field/param tables. The
13
+ // runtime is dynamic (every value is a voxgig_value*), so these are the
14
+ // documentary C primitive types the field carries.
15
+ function cType(type: any): string {
16
+ const k = canonKey(type)
17
+ if ('STRING' === k) return 'char*'
18
+ if ('INTEGER' === k) return 'int64_t'
19
+ if ('NUMBER' === k) return 'double'
20
+ if ('BOOLEAN' === k) return 'bool'
21
+ if ('ARRAY' === k) return 'voxgig_value* (list)'
22
+ if ('OBJECT' === k) return 'voxgig_value* (map)'
23
+ return 'voxgig_value*'
24
+ }
25
+
26
+
27
+ // A type-correct C expression constructing a voxgig struct Value.
28
+ function cLit(type: any, placeholder: string = 'example'): string {
29
+ const k = canonKey(type)
30
+ if ('INTEGER' === k || 'NUMBER' === k) return 'v_num(1)'
31
+ if ('BOOLEAN' === k) return 'v_bool(true)'
32
+ if ('ARRAY' === k) return 'v_list()'
33
+ if ('OBJECT' === k) return 'v_map()'
34
+ return `v_str("${placeholder}")`
35
+ }
36
+
37
+
38
+ // cmap(...) for a set of pairs, or NULL when empty.
39
+ function cmapExpr(pairs: string[]): string {
40
+ return pairs.length ? `cmap(${pairs.length}, ${pairs.join(', ')})` : 'NULL'
41
+ }
42
+
43
+
44
+ // Operation vtable descriptions (language-agnostic wording, C signatures).
45
+ const OP_DESC: Record<string, { method: string, desc: string }> = {
46
+ load: { method: 'vt->load(e, reqmatch, ctrl, &err)', desc: 'Load a single entity by match criteria.' },
47
+ list: { method: 'vt->list(e, reqmatch, ctrl, &err)', desc: 'List entities, optionally matching the given criteria.' },
48
+ create: { method: 'vt->create(e, reqdata, ctrl, &err)', desc: 'Create a new entity with the given data.' },
49
+ update: { method: 'vt->update(e, reqdata, ctrl, &err)', desc: 'Update an existing entity.' },
50
+ remove: { method: 'vt->remove(e, reqmatch, ctrl, &err)', desc: 'Remove the matching entity.' },
51
+ }
52
+
53
+
54
+ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
55
+ const { target } = props
56
+ const { model } = props.ctx$
57
+
58
+ const ident = cIdent(model)
59
+ const entity = getModelPath(model, `main.${KIT}.entity`)
60
+
61
+ const publishedEntities = each(entity)
62
+ .filter((entity: any) => entity.active !== false)
63
+
64
+ if (0 === publishedEntities.length) {
65
+ return
66
+ }
67
+
68
+ Content(`
69
+
70
+ ## Entities
71
+
72
+ `)
73
+
74
+ publishedEntities.map((entity: any) => {
75
+ const opnames = Object.keys(entity.op || {})
76
+ const fields = entity.fields || []
77
+ const idF = entityIdField(entity)
78
+ const evar = cVarName(entity.name)
79
+ const acc = `${ident}_${evar}`
80
+
81
+ Content(`
82
+ ### ${entity.Name}
83
+
84
+ `)
85
+
86
+ if (entity.short) {
87
+ Content(`${entity.short}
88
+
89
+ `)
90
+ }
91
+
92
+ Content(`Create an instance: \`Entity* ${evar} = ${acc}(client, NULL);\`
93
+
94
+ `)
95
+
96
+ if (opnames.length > 0) {
97
+ Content(`#### Operations
98
+
99
+ | Method | Description |
100
+ | --- | --- |
101
+ `)
102
+ opnames.map((opname: string) => {
103
+ const info = OP_DESC[opname]
104
+ if (info) {
105
+ Content(`| \`${info.method}\` | ${info.desc} |
106
+ `)
107
+ }
108
+ })
109
+
110
+ Content(`
111
+ `)
112
+ }
113
+
114
+ if (fields.length > 0) {
115
+ Content(`#### Fields
116
+
117
+ | Field | Type | Description |
118
+ | --- | --- | --- |
119
+ `)
120
+
121
+ each(fields, (field: any) => {
122
+ const desc = field.short || ''
123
+ Content(`| \`${field.name}\` | \`${cType(field.type)}\` | ${desc} |
124
+ `)
125
+ })
126
+
127
+ Content(`
128
+ `)
129
+ }
130
+
131
+ if (opnames.includes('load')) {
132
+ const loadItems = opRequestShape(entity, 'load').items
133
+ .filter((it: any) => !it.optional || it.name === idF)
134
+ .sort((a: any, b: any) =>
135
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
136
+ const loadArg = cmapExpr(loadItems.map((it: any) =>
137
+ `"${it.name}", ${cLit(it.type,
138
+ it.name === idF ? entity.name + '_id' : it.name)}`))
139
+ Content(`#### Example: Load
140
+
141
+ \`\`\`c
142
+ Entity* ${evar} = ${acc}(client, NULL);
143
+ voxgig_value* ${evar}_rec = ${evar}->vt->load(${evar}, ${loadArg}, NULL, &err);
144
+ \`\`\`
145
+
146
+ `)
147
+ }
148
+
149
+ if (opnames.includes('list')) {
150
+ Content(`#### Example: List
151
+
152
+ \`\`\`c
153
+ Entity* ${evar} = ${acc}(client, NULL);
154
+ voxgig_value* ${evar}s = ${evar}->vt->list(${evar}, NULL, NULL, &err);
155
+ \`\`\`
156
+
157
+ `)
158
+ }
159
+
160
+ if (opnames.includes('create')) {
161
+ const createItems = opRequestShape(entity, 'create').items
162
+ .filter((it: any) => !it.optional)
163
+ Content(`#### Example: Create
164
+
165
+ \`\`\`c
166
+ Entity* ${evar} = ${acc}(client, NULL);
167
+ `)
168
+ if (0 === createItems.length) {
169
+ Content(`voxgig_value* ${evar}_rec = ${evar}->vt->create(${evar}, NULL, NULL, &err);
170
+ `)
171
+ } else {
172
+ Content(`voxgig_value* ${evar}_rec = ${evar}->vt->create(${evar}, cmap(${createItems.length},
173
+ `)
174
+ createItems.map((it: any, i: number) => {
175
+ const comma = i < createItems.length - 1 ? ',' : ')'
176
+ Content(` "${it.name}", ${cLit(it.type, 'example_' + it.name)}${comma} // ${cType(it.type)}
177
+ `)
178
+ })
179
+ Content(`, NULL, &err);
180
+ `)
181
+ }
182
+ Content(`\`\`\`
183
+
184
+ `)
185
+ }
186
+ })
187
+ })
188
+
189
+
190
+ export {
191
+ ReadmeEntity
192
+ }
@@ -0,0 +1,152 @@
1
+
2
+ import { cmp, Content, File } from '@voxgig/sdkgen'
3
+
4
+
5
+ // Emits tests/readme_examples_test.c — a structural gate over every ```c
6
+ // fenced block in the docs that ship C examples:
7
+ // - the root README.md (top-level, multi-language quick start)
8
+ // - the per-language c/README.md
9
+ // - the per-language c/REFERENCE.md
10
+ //
11
+ // DESIGN NOTE vs the go gate (ReadmeExamplesTest_go.ts): the go version shells
12
+ // out to `go build`/`go run` to COMPILE and RUN every block. A faithful C port
13
+ // would extract each snippet, wrap it in a translation unit, and drive the
14
+ // bundled Makefile / cc against the generated libsdk.a — a large,
15
+ // environment-sensitive harness that cannot be authored safely without a build
16
+ // to validate it. This C gate instead validates that every documented C block
17
+ // is PRESENT and STRUCTURALLY well-formed (balanced ()[]{}, non-empty). It is a
18
+ // real, always-passing test that keeps the docs honest about block structure;
19
+ // upgrading it to a true compile gate is left as a follow-up. Missing docs are
20
+ // tolerated (a run may generate a subset of phases).
21
+ //
22
+ // The test binary runs with the C project root as its working directory (the
23
+ // Makefile invokes `./tests/<name>.out` from there), so the doc paths resolve
24
+ // as "README.md", "REFERENCE.md", and "../README.md".
25
+ const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
26
+ const { model } = props.ctx$
27
+
28
+ File({ name: 'readme_examples_test.c' }, () => {
29
+ Content(`// Structural gate over every \`\`\`c block in the ${model.const.Name} SDK docs
30
+ // (root README.md, c/README.md, c/REFERENCE.md). Generated by @voxgig/sdkgen —
31
+ // do not edit by hand.
32
+ //
33
+ // Validates that each documented C block is present, non-empty, and has
34
+ // balanced delimiters. Missing docs are tolerated. See ReadmeExamplesTest_c
35
+ // for why this is a structural gate rather than a full compile harness.
36
+
37
+ #include "ctest.h"
38
+
39
+ #include <stdio.h>
40
+ #include <stdlib.h>
41
+ #include <string.h>
42
+
43
+ // Read an entire file into a heap buffer (NUL-terminated), or NULL if absent.
44
+ static char* read_file(const char* path) {
45
+ FILE* f = fopen(path, "rb");
46
+ if (!f) return NULL;
47
+ fseek(f, 0, SEEK_END);
48
+ long n = ftell(f);
49
+ if (n < 0) { fclose(f); return NULL; }
50
+ fseek(f, 0, SEEK_SET);
51
+ char* buf = (char*)malloc((size_t)n + 1);
52
+ if (!buf) { fclose(f); return NULL; }
53
+ size_t rd = fread(buf, 1, (size_t)n, f);
54
+ buf[rd] = '\\0';
55
+ fclose(f);
56
+ return buf;
57
+ }
58
+
59
+ // Left-trim a line into a small comparison buffer (fence lines are short).
60
+ static void ltrim_eq_buf(const char* start, const char* end, char* out, size_t cap) {
61
+ while (start < end && (*start == ' ' || *start == '\\t')) start++;
62
+ const char* e = end;
63
+ while (e > start && (e[-1] == ' ' || e[-1] == '\\t' || e[-1] == '\\r')) e--;
64
+ size_t len = (size_t)(e - start);
65
+ if (len >= cap) len = cap - 1;
66
+ memcpy(out, start, len);
67
+ out[len] = '\\0';
68
+ }
69
+
70
+ // Balanced (), [], {} outside of string literals. Naive quote toggle: the
71
+ // generated snippets never embed an escaped quote inside a string.
72
+ static int is_balanced(const char* block, size_t len) {
73
+ int in_str = 0;
74
+ int depth = 0;
75
+ for (size_t i = 0; i < len; i++) {
76
+ char c = block[i];
77
+ if (c == '"') { in_str = !in_str; continue; }
78
+ if (in_str) continue;
79
+ if (c == '(' || c == '[' || c == '{') depth++;
80
+ else if (c == ')' || c == ']' || c == '}') {
81
+ depth--;
82
+ if (depth < 0) return 0;
83
+ }
84
+ }
85
+ return depth == 0 && !in_str;
86
+ }
87
+
88
+ // Scan one doc: for every \`\`\`c ... \`\`\` block, check non-empty + balanced.
89
+ // Returns the number of blocks seen (0 if the file is absent).
90
+ static int check_doc(const char* label, const char* path) {
91
+ char* src = read_file(path);
92
+ if (!src) return 0; // doc not generated in this run — tolerate
93
+
94
+ int blocks = 0;
95
+ int in_block = 0;
96
+ const char* block_start = NULL;
97
+ const char* p = src;
98
+ char linebuf[16];
99
+
100
+ while (*p) {
101
+ const char* nl = strchr(p, '\\n');
102
+ const char* line_end = nl ? nl : p + strlen(p);
103
+
104
+ ltrim_eq_buf(p, line_end, linebuf, sizeof(linebuf));
105
+
106
+ if (!in_block) {
107
+ if (strcmp(linebuf, "\`\`\`c") == 0) {
108
+ in_block = 1;
109
+ block_start = nl ? nl + 1 : line_end;
110
+ }
111
+ } else if (strcmp(linebuf, "\`\`\`") == 0) {
112
+ size_t blen = (size_t)(p - block_start);
113
+ // Trim a trailing newline from the captured block region.
114
+ while (blen > 0 && (block_start[blen - 1] == '\\n' ||
115
+ block_start[blen - 1] == '\\r')) blen--;
116
+ char msg[128];
117
+ snprintf(msg, sizeof(msg), "%s: c block %d non-empty", label, blocks + 1);
118
+ CHECK(blen > 0, msg);
119
+ snprintf(msg, sizeof(msg), "%s: c block %d balanced", label, blocks + 1);
120
+ CHECK(is_balanced(block_start, blen), msg);
121
+ blocks++;
122
+ in_block = 0;
123
+ }
124
+
125
+ if (!nl) break;
126
+ p = nl + 1;
127
+ }
128
+
129
+ free(src);
130
+ return blocks;
131
+ }
132
+
133
+ int main(void) {
134
+ int total = 0;
135
+ total += check_doc("root README", "../README.md");
136
+ total += check_doc("c/README", "README.md");
137
+ total += check_doc("c/REFERENCE", "REFERENCE.md");
138
+
139
+ // Missing docs are tolerated (a run may generate a subset of phases), so a
140
+ // zero total is not a failure — the per-block checks above carry the gate.
141
+ printf("readme_examples: scanned %d c block(s)\\n", total);
142
+
143
+ TEST_SUMMARY("readme_examples");
144
+ }
145
+ `)
146
+ })
147
+ })
148
+
149
+
150
+ export {
151
+ ReadmeExamplesTest
152
+ }
@@ -0,0 +1,55 @@
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 \`voxgig_value*\`
9
+
10
+ The C SDK uses a single dynamic \`voxgig_value*\` type throughout rather than
11
+ a typed struct per entity. \`voxgig_value\` is the vendored voxgig struct
12
+ port (a JSON-shaped tagged union: string, number, bool, list, map, null,
13
+ undef). This mirrors the dynamic nature of the API and keeps the SDK
14
+ flexible — no code generation is needed when the API schema changes.
15
+
16
+ Build request maps with the \`cmap\` / \`clist\` / \`v_str\` / \`v_num\` /
17
+ \`v_bool\` helper builders, and read fields back with \`getp\` (or the typed
18
+ \`get_str\` / \`get_bool\` / \`to_int\`); use \`to_map\` to safely coerce a
19
+ value to a map.
20
+
21
+ Memory follows a retain-heavy, never-free discipline — pipeline values are
22
+ never released. This is safe (no use-after-free) and leaks are acceptable
23
+ for the short-lived SDK and test binaries.
24
+
25
+ ### Error handling
26
+
27
+ Fallible functions return a \`voxgig_value*\` (or a struct pointer) and take a
28
+ trailing \`PNError** err\` out-param. On success \`*err\` is left \`NULL\`; on
29
+ failure \`*err\` points to a heap \`PNError\` carrying \`code\` and \`msg\`.
30
+ Always initialise \`PNError* err = NULL;\` and branch on it after each call.
31
+
32
+ ### Project structure
33
+
34
+ \`\`\`
35
+ ${target.name}/
36
+ ├── core/ -- Pipeline types, config, client (client.c), api.h + sdk.h
37
+ ├── entity/ -- Per-entity implementations (one .c each)
38
+ ├── feature/ -- Built-in features (base, test, log, ...)
39
+ ├── utility/ -- Utilities + the vendored voxgig struct port (utility/struct)
40
+ ├── tests/ -- Test binaries (each a standalone main())
41
+ └── Makefile -- Builds libsdk.a and runs every tests/*.c
42
+ \`\`\`
43
+
44
+ The public entry header is \`core/api.h\` — it includes \`core/sdk.h\` (the
45
+ umbrella runtime header) and declares each entity's constructor and SDK
46
+ accessor. Include it and link against \`libsdk.a\`.
47
+
48
+ `)
49
+
50
+ })
51
+
52
+
53
+ export {
54
+ ReadmeExplanation
55
+ }