@voxgig/sdkgen 1.3.13 → 1.3.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/action.js.map +1 -1
  3. package/dist/action/feature.js.map +1 -1
  4. package/dist/action/target.js.map +1 -1
  5. package/dist/cmp/AgentGuide.js.map +1 -1
  6. package/dist/cmp/AgentGuideContent.js.map +1 -1
  7. package/dist/cmp/AgentGuideFeature.js.map +1 -1
  8. package/dist/cmp/AgentGuideTop.js.map +1 -1
  9. package/dist/cmp/Changelog.js.map +1 -1
  10. package/dist/cmp/Deploy.js.map +1 -1
  11. package/dist/cmp/Entity.js.map +1 -1
  12. package/dist/cmp/Feature.js.map +1 -1
  13. package/dist/cmp/FeatureHook.js.map +1 -1
  14. package/dist/cmp/License.js.map +1 -1
  15. package/dist/cmp/Main.js.map +1 -1
  16. package/dist/cmp/Readme.js.map +1 -1
  17. package/dist/cmp/ReadmeEntity.js.map +1 -1
  18. package/dist/cmp/ReadmeErrors.js +1 -1
  19. package/dist/cmp/ReadmeErrors.js.map +1 -1
  20. package/dist/cmp/ReadmeExplanation.js +2 -2
  21. package/dist/cmp/ReadmeExplanation.js.map +1 -1
  22. package/dist/cmp/ReadmeHowto.js.map +1 -1
  23. package/dist/cmp/ReadmeInstall.js.map +1 -1
  24. package/dist/cmp/ReadmeIntro.js.map +1 -1
  25. package/dist/cmp/ReadmeModel.js.map +1 -1
  26. package/dist/cmp/ReadmeOptions.js.map +1 -1
  27. package/dist/cmp/ReadmeQuick.js.map +1 -1
  28. package/dist/cmp/ReadmeRef.js.map +1 -1
  29. package/dist/cmp/ReadmeTop.js +1 -1
  30. package/dist/cmp/ReadmeTop.js.map +1 -1
  31. package/dist/cmp/Security.js.map +1 -1
  32. package/dist/cmp/Test.js.map +1 -1
  33. package/dist/helpers/buildIdNames.js.map +1 -1
  34. package/dist/helpers/canonType.d.ts +3 -2
  35. package/dist/helpers/canonType.js +107 -24
  36. package/dist/helpers/canonType.js.map +1 -1
  37. package/dist/helpers/collectDeps.js.map +1 -1
  38. package/dist/helpers/getMatchEntries.js.map +1 -1
  39. package/dist/helpers/naming.d.ts +5 -1
  40. package/dist/helpers/naming.js +37 -0
  41. package/dist/helpers/naming.js.map +1 -1
  42. package/dist/helpers/opExample.d.ts +1 -1
  43. package/dist/helpers/opExample.js +37 -20
  44. package/dist/helpers/opExample.js.map +1 -1
  45. package/dist/helpers/opShape.d.ts +3 -1
  46. package/dist/helpers/opShape.js +91 -3
  47. package/dist/helpers/opShape.js.map +1 -1
  48. package/dist/helpers/packageMeta.js.map +1 -1
  49. package/dist/sdkgen.d.ts +3 -3
  50. package/dist/sdkgen.js +11 -1
  51. package/dist/sdkgen.js.map +1 -1
  52. package/dist/tsconfig.tsbuildinfo +1 -1
  53. package/dist/types.js.map +1 -1
  54. package/dist/utility.js.map +1 -1
  55. package/package.json +7 -6
  56. package/project/.sdk/model/target/haskell.aontu +6 -3
  57. package/project/.sdk/model/target/zig.aontu +12 -2
  58. package/project/.sdk/src/cmp/c/Config_c.ts +16 -4
  59. package/project/.sdk/src/cmp/c/EntityTypes_c.ts +168 -0
  60. package/project/.sdk/src/cmp/c/Main_c.ts +4 -0
  61. package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +192 -0
  62. package/project/.sdk/src/cmp/c/ReadmeExamplesTest_c.ts +152 -0
  63. package/project/.sdk/src/cmp/c/ReadmeExplanation_c.ts +55 -0
  64. package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +168 -0
  65. package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +52 -0
  66. package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +67 -0
  67. package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +151 -0
  68. package/project/.sdk/src/cmp/c/ReadmeOptions_c.ts +65 -0
  69. package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +225 -0
  70. package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +398 -0
  71. package/project/.sdk/src/cmp/c/ReadmeTopHowto_c.ts +24 -0
  72. package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +104 -0
  73. package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +86 -0
  74. package/project/.sdk/src/cmp/c/TestEntity_c.ts +10 -0
  75. package/project/.sdk/src/cmp/c/Test_c.ts +4 -0
  76. package/project/.sdk/src/cmp/c/utility_c.ts +8 -2
  77. package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +182 -0
  78. package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +54 -0
  79. package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +44 -0
  80. package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +144 -0
  81. package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +51 -0
  82. package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +66 -0
  83. package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +156 -0
  84. package/project/.sdk/src/cmp/clojure/ReadmeOptions_clojure.ts +61 -0
  85. package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +210 -0
  86. package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +409 -0
  87. package/project/.sdk/src/cmp/clojure/ReadmeTopHowto_clojure.ts +24 -0
  88. package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +98 -0
  89. package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +78 -0
  90. package/project/.sdk/src/cmp/clojure/TestDirect_clojure.ts +58 -0
  91. package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +79 -0
  92. package/project/.sdk/src/cmp/clojure/Test_clojure.ts +21 -65
  93. package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +174 -0
  94. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +5 -0
  95. package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +170 -0
  96. package/project/.sdk/src/cmp/cpp/ReadmeExplanation_cpp.ts +45 -0
  97. package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +139 -0
  98. package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +42 -0
  99. package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +69 -0
  100. package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +155 -0
  101. package/project/.sdk/src/cmp/cpp/ReadmeOptions_cpp.ts +62 -0
  102. package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +234 -0
  103. package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +387 -0
  104. package/project/.sdk/src/cmp/cpp/ReadmeTopHowto_cpp.ts +24 -0
  105. package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +95 -0
  106. package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +70 -0
  107. package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +5 -1
  108. package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +196 -0
  109. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
  110. package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
  111. package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +198 -0
  112. package/project/.sdk/src/cmp/csharp/ReadmeExplanation_csharp.ts +42 -0
  113. package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +168 -0
  114. package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +41 -0
  115. package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +65 -0
  116. package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +148 -0
  117. package/project/.sdk/src/cmp/csharp/ReadmeOptions_csharp.ts +60 -0
  118. package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +219 -0
  119. package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +390 -0
  120. package/project/.sdk/src/cmp/csharp/ReadmeTopHowto_csharp.ts +25 -0
  121. package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +92 -0
  122. package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +77 -0
  123. package/project/.sdk/src/cmp/csharp/Test_csharp.ts +4 -0
  124. package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -29
  125. package/project/.sdk/src/cmp/dart/Entity_dart.ts +8 -0
  126. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +166 -0
  127. package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +238 -0
  128. package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +53 -0
  129. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +151 -0
  130. package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +59 -0
  131. package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +65 -0
  132. package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +151 -0
  133. package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +63 -0
  134. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +214 -0
  135. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +381 -0
  136. package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +24 -0
  137. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +95 -0
  138. package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +78 -0
  139. package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +52 -0
  140. package/project/.sdk/src/cmp/dart/Test_dart.ts +6 -0
  141. package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +1 -3
  142. package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +1 -40
  143. package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +3 -3
  144. package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +165 -0
  145. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +4 -0
  146. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
  147. package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +163 -0
  148. package/project/.sdk/src/cmp/elixir/ReadmeExamplesTest_elixir.ts +126 -0
  149. package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +55 -0
  150. package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +149 -0
  151. package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +67 -0
  152. package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +66 -0
  153. package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +150 -0
  154. package/project/.sdk/src/cmp/elixir/ReadmeOptions_elixir.ts +62 -0
  155. package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +198 -0
  156. package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +333 -0
  157. package/project/.sdk/src/cmp/elixir/ReadmeTopHowto_elixir.ts +26 -0
  158. package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +79 -0
  159. package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +68 -0
  160. package/project/.sdk/src/cmp/elixir/Test_elixir.ts +4 -0
  161. package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +4 -0
  162. package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +4 -0
  163. package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +4 -0
  164. package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -0
  165. package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +4 -0
  166. package/project/.sdk/src/cmp/elixir/utility_elixir.ts +32 -0
  167. package/project/.sdk/src/cmp/go/EntityTypes_go.ts +12 -3
  168. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
  169. package/project/.sdk/src/cmp/go/TestEntity_go.ts +10 -3
  170. package/project/.sdk/src/cmp/go/utility_go.ts +3 -2
  171. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +240 -43
  172. package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
  173. package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +191 -30
  174. package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
  175. package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +125 -0
  176. package/project/.sdk/src/cmp/haskell/ReadmeExplanation_haskell.ts +48 -0
  177. package/project/.sdk/src/cmp/haskell/ReadmeHowto_haskell.ts +168 -0
  178. package/project/.sdk/src/cmp/haskell/ReadmeInstall_haskell.ts +51 -0
  179. package/project/.sdk/src/cmp/haskell/ReadmeIntro_haskell.ts +67 -0
  180. package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +160 -0
  181. package/project/.sdk/src/cmp/haskell/ReadmeOptions_haskell.ts +74 -0
  182. package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +237 -0
  183. package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +405 -0
  184. package/project/.sdk/src/cmp/haskell/ReadmeTopHowto_haskell.ts +31 -0
  185. package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +104 -0
  186. package/project/.sdk/src/cmp/haskell/ReadmeTopTest_haskell.ts +80 -0
  187. package/project/.sdk/src/cmp/haskell/Test_haskell.ts +27 -2
  188. package/project/.sdk/src/cmp/java/EntityTypes_java.ts +207 -0
  189. package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
  190. package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
  191. package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +186 -0
  192. package/project/.sdk/src/cmp/java/ReadmeExplanation_java.ts +46 -0
  193. package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +156 -0
  194. package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +52 -0
  195. package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +66 -0
  196. package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +150 -0
  197. package/project/.sdk/src/cmp/java/ReadmeOptions_java.ts +61 -0
  198. package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +230 -0
  199. package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +388 -0
  200. package/project/.sdk/src/cmp/java/ReadmeTopHowto_java.ts +23 -0
  201. package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +103 -0
  202. package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +77 -0
  203. package/project/.sdk/src/cmp/java/Test_java.ts +4 -0
  204. package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -8
  205. package/project/.sdk/src/cmp/js/MainEntity_js.ts +4 -2
  206. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +4 -4
  207. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +13 -4
  208. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +4 -4
  209. package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +5 -5
  210. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +4 -4
  211. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +4 -4
  212. package/project/.sdk/src/cmp/js/TestDirect_js.ts +6 -5
  213. package/project/.sdk/src/cmp/js/TestEntity_js.ts +7 -2
  214. package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +0 -31
  215. package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +201 -0
  216. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
  217. package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
  218. package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +173 -0
  219. package/project/.sdk/src/cmp/kotlin/ReadmeExplanation_kotlin.ts +47 -0
  220. package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +154 -0
  221. package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +50 -0
  222. package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +66 -0
  223. package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +150 -0
  224. package/project/.sdk/src/cmp/kotlin/ReadmeOptions_kotlin.ts +61 -0
  225. package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +230 -0
  226. package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +387 -0
  227. package/project/.sdk/src/cmp/kotlin/ReadmeTopHowto_kotlin.ts +23 -0
  228. package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +104 -0
  229. package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +77 -0
  230. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +4 -0
  231. package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
  232. package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -5
  233. package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
  234. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +2 -2
  235. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -1
  236. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +3 -3
  237. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +2 -2
  238. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +2 -2
  239. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +7 -2
  240. package/project/.sdk/src/cmp/lua/Test_lua.ts +1 -1
  241. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +2 -0
  242. package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +180 -0
  243. package/project/.sdk/src/cmp/ocaml/ReadmeExamplesTest_ocaml.ts +111 -0
  244. package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +46 -0
  245. package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +147 -0
  246. package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +44 -0
  247. package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +68 -0
  248. package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +155 -0
  249. package/project/.sdk/src/cmp/ocaml/ReadmeOptions_ocaml.ts +59 -0
  250. package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +205 -0
  251. package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +402 -0
  252. package/project/.sdk/src/cmp/ocaml/ReadmeTopHowto_ocaml.ts +25 -0
  253. package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +86 -0
  254. package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +79 -0
  255. package/project/.sdk/src/cmp/ocaml/Test_ocaml.ts +4 -0
  256. package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +181 -0
  257. package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +354 -0
  258. package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +43 -0
  259. package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +149 -0
  260. package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +47 -0
  261. package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +66 -0
  262. package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +150 -0
  263. package/project/.sdk/src/cmp/perl/ReadmeOptions_perl.ts +59 -0
  264. package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +216 -0
  265. package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +399 -0
  266. package/project/.sdk/src/cmp/perl/ReadmeTopHowto_perl.ts +24 -0
  267. package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +91 -0
  268. package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +83 -0
  269. package/project/.sdk/src/cmp/perl/Test_perl.ts +4 -0
  270. package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -6
  271. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
  272. package/project/.sdk/src/cmp/php/TestEntity_php.ts +7 -2
  273. package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -7
  274. package/project/.sdk/src/cmp/py/Entity_py.ts +2 -10
  275. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +2 -2
  276. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +8 -3
  277. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +3 -3
  278. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +2 -2
  279. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +2 -2
  280. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +2 -2
  281. package/project/.sdk/src/cmp/py/TestEntity_py.ts +7 -2
  282. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +19 -5
  283. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +2 -2
  284. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +8 -3
  285. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +3 -3
  286. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +2 -2
  287. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
  288. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +2 -2
  289. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +7 -2
  290. package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +4 -0
  291. package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +152 -0
  292. package/project/.sdk/src/cmp/rust/Entity_rust.ts +1 -1
  293. package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
  294. package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
  295. package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +132 -0
  296. package/project/.sdk/src/cmp/rust/ReadmeExplanation_rust.ts +44 -0
  297. package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +142 -0
  298. package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +49 -0
  299. package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +66 -0
  300. package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +153 -0
  301. package/project/.sdk/src/cmp/rust/ReadmeOptions_rust.ts +60 -0
  302. package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +212 -0
  303. package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +384 -0
  304. package/project/.sdk/src/cmp/rust/ReadmeTopHowto_rust.ts +24 -0
  305. package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +95 -0
  306. package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +81 -0
  307. package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +10 -0
  308. package/project/.sdk/src/cmp/rust/Test_rust.ts +4 -0
  309. package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +202 -0
  310. package/project/.sdk/src/cmp/scala/Main_scala.ts +6 -0
  311. package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +175 -0
  312. package/project/.sdk/src/cmp/scala/ReadmeExamplesTest_scala.ts +163 -0
  313. package/project/.sdk/src/cmp/scala/ReadmeExplanation_scala.ts +49 -0
  314. package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +155 -0
  315. package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +58 -0
  316. package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +66 -0
  317. package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +150 -0
  318. package/project/.sdk/src/cmp/scala/ReadmeOptions_scala.ts +61 -0
  319. package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +230 -0
  320. package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +388 -0
  321. package/project/.sdk/src/cmp/scala/ReadmeTopHowto_scala.ts +23 -0
  322. package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +104 -0
  323. package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +77 -0
  324. package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +38 -10
  325. package/project/.sdk/src/cmp/scala/Test_scala.ts +8 -0
  326. package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +152 -0
  327. package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
  328. package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
  329. package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +170 -0
  330. package/project/.sdk/src/cmp/swift/ReadmeExplanation_swift.ts +49 -0
  331. package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +159 -0
  332. package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +58 -0
  333. package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +64 -0
  334. package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +149 -0
  335. package/project/.sdk/src/cmp/swift/ReadmeOptions_swift.ts +62 -0
  336. package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +232 -0
  337. package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +387 -0
  338. package/project/.sdk/src/cmp/swift/ReadmeTopHowto_swift.ts +24 -0
  339. package/project/.sdk/src/cmp/swift/ReadmeTopQuick_swift.ts +105 -0
  340. package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +77 -0
  341. package/project/.sdk/src/cmp/swift/Test_swift.ts +4 -0
  342. package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -5
  343. package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +4 -2
  344. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +4 -4
  345. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +14 -4
  346. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +29 -11
  347. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +5 -5
  348. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +4 -4
  349. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +4 -4
  350. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +13 -11
  351. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +18 -2
  352. package/project/.sdk/src/cmp/zig/Config_zig.ts +22 -4
  353. package/project/.sdk/src/cmp/zig/Entity_zig.ts +1 -1
  354. package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
  355. package/project/.sdk/src/cmp/zig/Package_zig.ts +53 -0
  356. package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +188 -0
  357. package/project/.sdk/src/cmp/zig/ReadmeExamplesTest_zig.ts +58 -0
  358. package/project/.sdk/src/cmp/zig/ReadmeExplanation_zig.ts +45 -0
  359. package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +143 -0
  360. package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +54 -0
  361. package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +66 -0
  362. package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +152 -0
  363. package/project/.sdk/src/cmp/zig/ReadmeOptions_zig.ts +60 -0
  364. package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +211 -0
  365. package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +400 -0
  366. package/project/.sdk/src/cmp/zig/ReadmeTopHowto_zig.ts +24 -0
  367. package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +96 -0
  368. package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +82 -0
  369. package/project/.sdk/src/cmp/zig/TestDirect_zig.ts +66 -0
  370. package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +79 -0
  371. package/project/.sdk/src/cmp/zig/Test_zig.ts +17 -61
  372. package/project/.sdk/tm/clojure/src/voxgig/struct.clj +1 -1
  373. package/project/.sdk/tm/cpp/test/feature_test.cpp +19 -0
  374. package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +4 -1
  375. package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +7 -1
  376. package/project/.sdk/tm/elixir/lib/utility/struct/voxgig_struct.ex +1 -1
  377. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +7 -1
  378. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +3 -1
  379. package/project/.sdk/tm/haskell/test/Harness.hs +8 -3
  380. package/project/.sdk/tm/js/Makefile +1 -1
  381. package/project/.sdk/tm/js/jsconfig.json +12 -0
  382. package/project/.sdk/tm/ocaml/Makefile +5 -1
  383. package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
  384. package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
  385. package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
  386. package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
  387. package/project/.sdk/tm/ts/Makefile +1 -1
  388. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
  389. package/src/cmp/ReadmeErrors.ts +2 -2
  390. package/src/cmp/ReadmeExplanation.ts +3 -3
  391. package/src/cmp/ReadmeTop.ts +2 -2
  392. package/src/helpers/canonType.ts +116 -25
  393. package/src/helpers/naming.ts +47 -0
  394. package/src/helpers/opExample.ts +43 -20
  395. package/src/helpers/opShape.ts +102 -3
  396. package/src/sdkgen.ts +12 -2
  397. package/src/tsconfig.json +2 -0
  398. package/project/.sdk/tm/zig/build.zig.zon +0 -11
@@ -0,0 +1,104 @@
1
+
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ nom,
8
+ } from '@voxgig/apidef'
9
+
10
+ import { cIdent, cVarName } from './utility_c'
11
+
12
+
13
+ // A type-correct C expression constructing a voxgig struct Value for a param.
14
+ // Strings render the quoted placeholder; numeric/boolean/array/object render a
15
+ // typed builder call.
16
+ function cLit(type: any, placeholder: string = 'example'): string {
17
+ const k = canonKey(type)
18
+ if ('INTEGER' === k || 'NUMBER' === k) return 'v_num(1)'
19
+ if ('BOOLEAN' === k) return 'v_bool(true)'
20
+ if ('ARRAY' === k) return 'v_list()'
21
+ if ('OBJECT' === k) return 'v_map()'
22
+ return `v_str("${placeholder}")`
23
+ }
24
+
25
+
26
+ // cmap(...) for a set of `"key", <lit>` pairs, or NULL when empty (ops accept
27
+ // a NULL match/data argument).
28
+ function cmapExpr(pairs: string[]): string {
29
+ return pairs.length ? `cmap(${pairs.length}, ${pairs.join(', ')})` : 'NULL'
30
+ }
31
+
32
+
33
+ const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
34
+ const { target, ctx$: { model } } = props
35
+
36
+ const ident = cIdent(model)
37
+ const entity = getModelPath(model, `main.${KIT}.entity`)
38
+
39
+ const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
40
+
41
+ const authActive = isAuthActive(model)
42
+ const ctor = authActive
43
+ ? `${ident}_sdk_new(cmap(1,\n "apikey", v_str(getenv("${envName(model)}_APIKEY"))))`
44
+ : `${ident}_sdk_new(NULL)`
45
+
46
+ Content(`\`\`\`c
47
+ #include "core/api.h"
48
+
49
+ ${model.const.Name}SDK* client = ${ctor};
50
+ PNError* err = NULL;
51
+
52
+ `)
53
+
54
+ if (exampleEntity) {
55
+ const eName = nom(exampleEntity, 'Name')
56
+ const evar = cVarName(exampleEntity.name)
57
+ const acc = `${ident}_${evar}`
58
+ const opnames = Object.keys(exampleEntity.op || {})
59
+ // Model-driven id key: null when the entity has no id-like field, in which
60
+ // case the load example takes no match argument.
61
+ const idF = entityIdField(exampleEntity)
62
+
63
+ if (opnames.includes('list')) {
64
+ Content(`Entity* ${evar} = ${acc}(client, NULL);
65
+
66
+ // List all ${eName.toLowerCase()}s (returns a List, sets *err on failure)
67
+ voxgig_value* ${evar}s = ${evar}->vt->list(${evar}, NULL, NULL, &err);
68
+ for (size_t i = 0; i < (size_t)voxgig_size(${evar}s); i++) {
69
+ printf("%s\\n", voxgig_to_json(voxgig_getelem(${evar}s, v_int(i), NULL)));
70
+ }
71
+ `)
72
+ }
73
+
74
+ if (opnames.includes('load')) {
75
+ // Every REQUIRED load-match key (id first, then parent path params like
76
+ // page_id) — the same shape the runtime resolves path params from, so
77
+ // the example always works.
78
+ const loadItems = opRequestShape(exampleEntity, 'load').items
79
+ .filter((it: any) => !it.optional || it.name === idF)
80
+ .sort((a: any, b: any) =>
81
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
82
+ const loadArg = cmapExpr(loadItems.map((it: any) =>
83
+ `"${it.name}", ${cLit(it.type,
84
+ it.name === idF ? 'example_id' : 'example_' + it.name)}`))
85
+ const acquire = opnames.includes('list')
86
+ ? ''
87
+ : `Entity* ${evar} = ${acc}(client, NULL);\n`
88
+ Content(`
89
+ ${acquire}// Load a specific ${eName.toLowerCase()} (returns the record, sets *err on failure)
90
+ voxgig_value* ${evar}_rec = ${evar}->vt->load(${evar}, ${loadArg}, NULL, &err);
91
+ printf("%s\\n", voxgig_to_json(${evar}_rec));
92
+ `)
93
+ }
94
+ }
95
+
96
+ Content(`\`\`\`
97
+ `)
98
+
99
+ })
100
+
101
+
102
+ export {
103
+ ReadmeTopQuick
104
+ }
@@ -0,0 +1,86 @@
1
+
2
+ import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ nom,
8
+ } from '@voxgig/apidef'
9
+
10
+ import { cIdent, cVarName } from './utility_c'
11
+
12
+
13
+ // A type-correct C expression constructing a voxgig struct Value for a field's
14
+ // canonical type.
15
+ function cLit(type: any): string {
16
+ const k = canonKey(type)
17
+ if ('INTEGER' === k || 'NUMBER' === k) return 'v_num(1)'
18
+ if ('BOOLEAN' === k) return 'v_bool(true)'
19
+ if ('ARRAY' === k) return 'v_list()'
20
+ if ('OBJECT' === k) return 'v_map()'
21
+ return 'v_str("example")'
22
+ }
23
+
24
+
25
+ // cmap(...) for a set of pairs, or NULL when empty.
26
+ function cmapExpr(pairs: string[]): string {
27
+ return pairs.length ? `cmap(${pairs.length}, ${pairs.join(', ')})` : 'NULL'
28
+ }
29
+
30
+
31
+ const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
32
+ const { target, ctx$: { model } } = props
33
+
34
+ const ident = cIdent(model)
35
+ const entity = getModelPath(model, `main.${KIT}.entity`)
36
+
37
+ // Pick an entity with a real op (prefer a read op) — never fabricate a
38
+ // `load` on an op-less entity.
39
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
40
+
41
+ Content(`\`\`\`c
42
+ #include "core/api.h"
43
+
44
+ ${model.const.Name}SDK* client = test_sdk(NULL, NULL);
45
+ PNError* err = NULL;
46
+ `)
47
+
48
+ if (exampleEntity && primaryOp) {
49
+ const eName = nom(exampleEntity, 'Name')
50
+ const evar = cVarName(exampleEntity.name)
51
+ const acc = `${ident}_${evar}`
52
+ const idF = entityIdField(exampleEntity)
53
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
54
+ let arg = 'NULL'
55
+ if (isMatchOp) {
56
+ // Every REQUIRED match key (id first) — the same shape that generates
57
+ // the op's request match.
58
+ const items = opRequestShape(exampleEntity, primaryOp).items
59
+ .filter((it: any) => !it.optional || it.name === idF)
60
+ .sort((a: any, b: any) =>
61
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
62
+ arg = cmapExpr(items.map((it: any) =>
63
+ `"${it.name}", ${it.name === idF ? 'v_str("test01")' : cLit(it.type)}`))
64
+ } else if ('create' === primaryOp || 'update' === primaryOp) {
65
+ const items = opRequestShape(exampleEntity, primaryOp).items
66
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
67
+ const required = items.filter((it: any) => !it.optional)
68
+ const chosen = required.length ? required : items.slice(0, 3)
69
+ arg = cmapExpr(chosen.map((it: any) => `"${it.name}", ${cLit(it.type)}`))
70
+ }
71
+ const resVar = cVarName(exampleEntity.name) + ('list' === primaryOp ? 's' : '_rec')
72
+ Content(`Entity* ${evar} = ${acc}(client, NULL);
73
+ voxgig_value* ${resVar} = ${evar}->vt->${primaryOp}(${evar}, ${arg}, NULL, &err);
74
+ printf("%s\\n", voxgig_to_json(${resVar}));
75
+ `)
76
+ }
77
+
78
+ Content(`\`\`\`
79
+ `)
80
+
81
+ })
82
+
83
+
84
+ export {
85
+ ReadmeTopTest
86
+ }
@@ -39,7 +39,14 @@ int main(void) {
39
39
  Entity* e = ${ident}_${evar}(sdk, NULL);
40
40
  CHECK(e != NULL, "entity instance");
41
41
  CHECK_STR_EQ(e->vt->get_name(e), "${entity.name}", "entity get_name");
42
+ `)
42
43
 
44
+ // The stream test drives the list op; only emit it when the entity has a
45
+ // list op — a create/load-only entity has no list endpoint, so
46
+ // stream("list") would error.
47
+ const hasList = null != (entity.op && (entity.op as any).list)
48
+ if (hasList) {
49
+ Content(`
43
50
  // stream(): runs the list op through the full pipeline and returns a List
44
51
  // of items. Seed two entities via test mode; with the streaming feature
45
52
  // active it yields the feature's incremental items, else it falls back to
@@ -69,7 +76,10 @@ int main(void) {
69
76
  CHECK(perr == NULL, "stream fallback: no error");
70
77
  CHECK_INT_EQ((int64_t)voxgig_as_list(pitems)->len, 2, "stream fallback: yields both items");
71
78
  }
79
+ `)
80
+ }
72
81
 
82
+ Content(`
73
83
  TEST_SUMMARY("${evar}_entity");
74
84
  }
75
85
  `)
@@ -13,6 +13,7 @@ import { cmp, each, Folder, File, Content } from '@voxgig/sdkgen'
13
13
 
14
14
  import { TestEntity } from './TestEntity_c'
15
15
  import { TestDirect } from './TestDirect_c'
16
+ import { ReadmeExamplesTest } from './ReadmeExamplesTest_c'
16
17
 
17
18
 
18
19
  const Test = cmp(function Test(props: any) {
@@ -42,6 +43,9 @@ int main(void) {
42
43
  TestEntity({ target, entity })
43
44
  TestDirect({ target, entity })
44
45
  })
46
+
47
+ // Validate the documented C examples in the READMEs are well-formed.
48
+ ReadmeExamplesTest({ target })
45
49
  })
46
50
  })
47
51
 
@@ -23,9 +23,15 @@ function cVarName(name: string): string {
23
23
  }
24
24
 
25
25
 
26
- // The C project identifier used as a function-name prefix, e.g. solar.
26
+ // The C project identifier used as a function-name prefix, e.g. solar. Must
27
+ // match the SQUASHED `projectname` token that the umbrella header/fragment use
28
+ // for the constructor (`<ident>_sdk_new`): a hyphenated slug
29
+ // (bluefin-decryptx-p2pe) squashes to `bluefindecryptxp2pe`, so drop every
30
+ // non-alphanumeric char rather than mapping them to `_` (which produced
31
+ // `bluefin_decryptx_p2pe_sdk_new` callers that never linked against the
32
+ // squashed definition). No-op for single-word names.
27
33
  function cIdent(model: any): string {
28
- return String(model.name).toLowerCase().replace(/[^a-z0-9_]/g, '_')
34
+ return String(model.name).toLowerCase().replace(/[^a-z0-9]/g, '')
29
35
  }
30
36
 
31
37
 
@@ -0,0 +1,182 @@
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
+
10
+ // A type-correct Clojure literal for a field's canonical type. The create
11
+ // example builds a real struct map, so array/object render as (vs/jt)/(vs/jm).
12
+ function cljLit(type: any, placeholder: string = 'example'): string {
13
+ const k = canonKey(type)
14
+ if ('INTEGER' === k || 'NUMBER' === k) return '1'
15
+ if ('BOOLEAN' === k) return 'true'
16
+ if ('ARRAY' === k) return '(vs/jt)'
17
+ if ('OBJECT' === k) return '(vs/jm)'
18
+ return `"${placeholder}"`
19
+ }
20
+
21
+
22
+ // A descriptive Clojure-ish type name for a field's canonical type. Clojure is
23
+ // dynamically typed, so these are documentation hints, not static types.
24
+ function cljType(type: any): string {
25
+ const k = canonKey(type)
26
+ if ('STRING' === k) return 'string'
27
+ if ('INTEGER' === k) return 'long'
28
+ if ('NUMBER' === k) return 'double'
29
+ if ('BOOLEAN' === k) return 'boolean'
30
+ if ('ARRAY' === k) return 'vector'
31
+ if ('OBJECT' === k) return 'map'
32
+ return 'any'
33
+ }
34
+
35
+
36
+ // Operation descriptions are language-agnostic; the method spelling matches
37
+ // the generated Clojure entity fns: (op ent arg ctrl).
38
+ const OP_DESC: Record<string, { method: string, desc: string }> = {
39
+ load: { method: '(load ent match ctrl)', desc: 'Load a single entity by match criteria.' },
40
+ list: { method: '(list ent match ctrl)', desc: 'List entities, optionally matching the given criteria.' },
41
+ create: { method: '(create ent data ctrl)', desc: 'Create a new entity with the given data.' },
42
+ update: { method: '(update ent data ctrl)', desc: 'Update an existing entity.' },
43
+ remove: { method: '(remove ent match ctrl)', desc: 'Remove the matching entity.' },
44
+ }
45
+
46
+
47
+ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
48
+ const { target } = props
49
+ const { model } = props.ctx$
50
+
51
+ const entity = getModelPath(model, `main.${KIT}.entity`)
52
+
53
+ const publishedEntities = each(entity)
54
+ .filter((entity: any) => entity.active !== false)
55
+
56
+ if (0 === publishedEntities.length) {
57
+ return
58
+ }
59
+
60
+ Content(`
61
+
62
+ ## Entities
63
+
64
+ `)
65
+
66
+ publishedEntities.map((entity: any) => {
67
+ const opnames = Object.keys(entity.op || {})
68
+ const fields = entity.fields || []
69
+ // Model-driven id key: null when this entity has no id-like field.
70
+ const idF = entityIdField(entity)
71
+ const eLow = entity.name
72
+
73
+ Content(`
74
+ ### ${entity.Name}
75
+
76
+ `)
77
+
78
+ if (entity.short) {
79
+ Content(`${entity.short}
80
+
81
+ `)
82
+ }
83
+
84
+ Content(`Create an instance: \`(def ${eLow} (api/${eLow} client nil))\`
85
+
86
+ `)
87
+
88
+ if (opnames.length > 0) {
89
+ Content(`#### Operations
90
+
91
+ | Method | Description |
92
+ | --- | --- |
93
+ `)
94
+ opnames.map((opname: string) => {
95
+ const info = OP_DESC[opname]
96
+ if (info) {
97
+ Content(`| \`${info.method}\` | ${info.desc} |
98
+ `)
99
+ }
100
+ })
101
+
102
+ Content(`
103
+ `)
104
+ }
105
+
106
+ if (fields.length > 0) {
107
+ Content(`#### Fields
108
+
109
+ | Field | Type | Description |
110
+ | --- | --- | --- |
111
+ `)
112
+
113
+ each(fields, (field: any) => {
114
+ const desc = field.short || ''
115
+ Content(`| \`${field.name}\` | \`${cljType(field.type)}\` | ${desc} |
116
+ `)
117
+ })
118
+
119
+ Content(`
120
+ `)
121
+ }
122
+
123
+ if (opnames.includes('load')) {
124
+ // The id key plus every REQUIRED match key (parent path params like
125
+ // page_id) — the same shape the runtime resolves path params from.
126
+ const loadItems = opRequestShape(entity, 'load').items
127
+ .filter((it: any) => !it.optional || it.name === idF)
128
+ .sort((a: any, b: any) =>
129
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
130
+ const loadArg = 0 < loadItems.length
131
+ ? `(vs/jm ${loadItems.map((it: any) =>
132
+ `"${it.name}" ${cljLit(it.type,
133
+ it.name === idF ? entity.name + '_id' : it.name)}`).join(' ')})`
134
+ : 'nil'
135
+ Content(`#### Example: Load
136
+
137
+ \`\`\`clojure
138
+ (def ${eLow} (e-${eLow}/load (api/${eLow} client nil) ${loadArg} nil))
139
+ \`\`\`
140
+
141
+ `)
142
+ }
143
+
144
+ if (opnames.includes('list')) {
145
+ Content(`#### Example: List
146
+
147
+ \`\`\`clojure
148
+ (def ${eLow}s (e-${eLow}/list (api/${eLow} client nil) nil nil))
149
+ \`\`\`
150
+
151
+ `)
152
+ }
153
+
154
+ if (opnames.includes('create')) {
155
+ // Members come from the SAME shape the runtime validates
156
+ // (opRequestShape): every required member must appear.
157
+ const createItems = opRequestShape(entity, 'create').items
158
+ .filter((it: any) => !it.optional)
159
+ Content(`#### Example: Create
160
+
161
+ \`\`\`clojure
162
+ (def ${eLow}
163
+ (e-${eLow}/create (api/${eLow} client nil)
164
+ (vs/jm
165
+ `)
166
+ createItems.map((it: any) => {
167
+ Content(` "${it.name}" ${cljLit(it.type, 'example_' + it.name)} ;; ${cljType(it.type)}
168
+ `)
169
+ })
170
+ Content(` )
171
+ nil))
172
+ \`\`\`
173
+
174
+ `)
175
+ }
176
+ })
177
+ })
178
+
179
+
180
+ export {
181
+ ReadmeEntity
182
+ }
@@ -0,0 +1,54 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+
5
+ // Emit a documentation clojure-examples SYNTAX gate INTO the shared gentest run
6
+ // body (the clojure test runner drives a single sdk.gentest/run). For each doc
7
+ // that ships clojure examples — the repository ROOT README.md, the per-language
8
+ // README.md, and REFERENCE.md — every ```clojure fenced block is extracted and
9
+ // PARSED with read-string (all forms wrapped in a vector), catching a malformed
10
+ // documented example (an unbalanced paren, a bad token, an unclosed string).
11
+ //
12
+ // SCOPE NOTE: like the elixir gate, this stops at the syntax check rather than
13
+ // EXECUTING each block. Running a README fragment against the generated
14
+ // namespaces would need the SDK loaded and the narrative requires resolved for
15
+ // every block; the syntax gate is a real, useful guard that keeps documented
16
+ // examples parseable as the generator evolves. A doc that is absent at test
17
+ // time is skipped (passes), so the gate never hard-fails on a missing file.
18
+ //
19
+ // The emitted clojure builds the triple-backtick fence from (char 96) so this
20
+ // TS template literal needs no embedded backticks.
21
+ const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(_props: any) {
22
+
23
+ Content(` (letfn [(clj-blocks [text]
24
+ (let [fence (apply str (repeat 3 (char 96)))
25
+ parts (clojure.string/split text (re-pattern fence))]
26
+ (->> parts
27
+ (map-indexed vector)
28
+ (filter (fn [[i _]] (odd? i)))
29
+ (map (fn [[_ seg]] seg))
30
+ (filter (fn [seg]
31
+ (= "clojure"
32
+ (clojure.string/trim (first (clojure.string/split-lines seg))))))
33
+ (map (fn [seg]
34
+ (clojure.string/join "\\n"
35
+ (rest (clojure.string/split-lines seg))))))))]
36
+ (doseq [[label path] [["root-README" "../README.md"]
37
+ ["README" "README.md"]
38
+ ["REFERENCE" "REFERENCE.md"]]]
39
+ (t/run-check rec (str "gen-readme-examples-" label)
40
+ (fn []
41
+ (if-not (.exists (java.io.File. ^String path))
42
+ (t/is-true true (str label " absent (skipped)"))
43
+ (let [blocks (clj-blocks (slurp path))]
44
+ (doseq [b blocks]
45
+ (binding [*read-eval* false]
46
+ (read-string (str "[\\n" b "\\n]"))))
47
+ (t/is-true true (str label " clojure blocks parse cleanly"))))))))
48
+ `)
49
+ })
50
+
51
+
52
+ export {
53
+ ReadmeExamplesTest
54
+ }
@@ -0,0 +1,44 @@
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 struct value maps
9
+
10
+ The Clojure SDK represents API data with the vendored \`voxgig.struct\`
11
+ value model (ordered, Java-backed maps and lists) rather than typed
12
+ records. This mirrors the dynamic nature of the API and keeps the SDK
13
+ flexible — no code generation is needed when the API schema changes.
14
+
15
+ Build request maps with \`(vs/jm "k" v ...)\` and lists with
16
+ \`(vs/jt v ...)\`; read values with \`(vs/getprop m "k")\`. Use
17
+ \`(vs/ismap x)\` to safely check that a value is a map.
18
+
19
+ ### Namespace structure
20
+
21
+ \`\`\`
22
+ ${target.name}/
23
+ ├── src/sdk/api.clj -- public API namespace (entity accessors)
24
+ ├── src/sdk/client.clj -- client constructors (make-sdk, test-sdk)
25
+ ├── src/sdk/config.clj -- generated configuration
26
+ ├── src/sdk/core.clj -- core types, context and pipeline
27
+ ├── src/sdk/features.clj -- feature factory
28
+ ├── src/sdk/entity/ -- entity namespaces (one per entity)
29
+ ├── src/voxgig/struct.clj -- vendored struct value library
30
+ └── test/ -- test suites
31
+ \`\`\`
32
+
33
+ Require \`[sdk.api :as api]\` for the public surface, and an entity
34
+ namespace (e.g. \`[sdk.entity.${model.const.Name.toLowerCase()} :as e-${model.const.Name.toLowerCase()}]\`)
35
+ only when you call its operations directly.
36
+
37
+ `)
38
+
39
+ })
40
+
41
+
42
+ export {
43
+ ReadmeExplanation
44
+ }
@@ -0,0 +1,144 @@
1
+
2
+ import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+
10
+ // A type-correct Clojure literal for a field's canonical type.
11
+ function cljLit(type: any): string {
12
+ const k = canonKey(type)
13
+ if ('INTEGER' === k || 'NUMBER' === k) return '1'
14
+ if ('BOOLEAN' === k) return 'true'
15
+ if ('ARRAY' === k) return '(vs/jt)'
16
+ if ('OBJECT' === k) return '(vs/jm)'
17
+ return '"example"'
18
+ }
19
+
20
+
21
+ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
22
+ const { target, ctx$: { model } } = props
23
+
24
+ const entity = getModelPath(model, `main.${KIT}.entity`)
25
+ // Pick an entity with a real op (prefer a read op). primaryOp is null only
26
+ // when NO entity exposes any op (a direct()-only SDK).
27
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
28
+ const eLow = exampleEntity ? exampleEntity.name : 'entity'
29
+ // Model-driven id key: null when the entity has no id-like field.
30
+ const idF = exampleEntity ? entityIdField(exampleEntity) : null
31
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
32
+ let testArg = 'nil'
33
+ if (exampleEntity && isMatchOp) {
34
+ testArg = idF ? `(vs/jm "${idF}" "test01")` : 'nil'
35
+ } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
36
+ const items = opRequestShape(exampleEntity, primaryOp).items
37
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
38
+ const required = items.filter((it: any) => !it.optional)
39
+ const chosen = required.length ? required : items.slice(0, 3)
40
+ testArg = `(vs/jm ${chosen.map((it: any) => `"${it.name}" ${cljLit(it.type)}`).join(' ')})`
41
+ }
42
+
43
+ // The op-driven test-mode line, shown only when the SDK has an entity op.
44
+ const testModeExample = primaryOp
45
+ ? `;; Entity ops return the bare record and raise on error.
46
+ (def ${eLow} (e-${eLow}/${primaryOp} (api/${eLow} client nil) ${testArg} nil))
47
+ ;; ${eLow} contains the mock response record
48
+ (println ${eLow})`
49
+ : `(def result (api/direct client (vs/jm "path" "/api/resource" "method" "GET")))
50
+ (println result)`
51
+
52
+ const testModeRequire = primaryOp
53
+ ? `\n '[sdk.entity.${eLow} :as e-${eLow}]`
54
+ : ''
55
+
56
+ Content(`### Make a direct HTTP request
57
+
58
+ For endpoints not covered by entity operations:
59
+
60
+ \`\`\`clojure
61
+ (def result
62
+ (api/direct client
63
+ (vs/jm "path" "/api/resource/{id}"
64
+ "method" "GET"
65
+ "params" (vs/jm "id" "example"))))
66
+
67
+ (if (vs/getprop result "ok")
68
+ (do
69
+ (println (vs/getprop result "status")) ;; 200
70
+ (println (vs/getprop result "data"))) ;; response body
71
+ ;; A non-2xx response carries status + data (the error body); a
72
+ ;; transport-level failure carries err instead. Only one is present.
73
+ (println (vs/getprop result "status") (vs/getprop result "err")))
74
+ \`\`\`
75
+
76
+ ### Prepare a request without sending it
77
+
78
+ \`\`\`clojure
79
+ ;; prepare returns the fetch definition and raises on error.
80
+ (def fetchdef
81
+ (api/prepare client
82
+ (vs/jm "path" "/api/resource/{id}"
83
+ "method" "DELETE"
84
+ "params" (vs/jm "id" "example"))))
85
+
86
+ (println (vs/getprop fetchdef "url"))
87
+ (println (vs/getprop fetchdef "method"))
88
+ (println (vs/getprop fetchdef "headers"))
89
+ \`\`\`
90
+
91
+ ### Use test mode
92
+
93
+ Create a mock client for unit testing — no server required:
94
+
95
+ \`\`\`clojure
96
+ (require '[sdk.api :as api]${testModeRequire}
97
+ '[voxgig.struct :as vs])
98
+
99
+ (def client (api/test-sdk nil nil))
100
+
101
+ ${testModeExample}
102
+ \`\`\`
103
+
104
+ ### Use a custom fetch function
105
+
106
+ Replace the HTTP transport with your own function. A fetch fn takes the
107
+ URL and fetch definition and returns a \`[response err]\` pair; \`response\`
108
+ is a struct map carrying \`status\`, \`headers\`, and a \`json\` thunk:
109
+
110
+ \`\`\`clojure
111
+ (defn mock-fetch [url fetchdef]
112
+ [(vs/jm "status" 200
113
+ "statusText" "OK"
114
+ "headers" (vs/jm)
115
+ "json" (fn [] (vs/jm "id" "mock01")))
116
+ nil])
117
+
118
+ (def client
119
+ (api/make-sdk
120
+ (vs/jm "base" "http://localhost:8080"
121
+ "system" (vs/jm "fetch" mock-fetch))))
122
+ \`\`\`
123
+
124
+ ### Run the test suite
125
+
126
+ The generated suite (pipeline, features, netsim, primary utility and the
127
+ vendored struct corpus) runs offline through a single \`tools.deps\` entry
128
+ point:
129
+
130
+ \`\`\`bash
131
+ cd ${target.name} && make test
132
+ \`\`\`
133
+
134
+ To exercise the SDK against the live API, construct a client with real
135
+ credentials and call its operations directly.
136
+
137
+ `)
138
+
139
+ })
140
+
141
+
142
+ export {
143
+ ReadmeHowto
144
+ }