@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,111 @@
1
+
2
+ import { cmp, Content, File } from '@voxgig/sdkgen'
3
+
4
+
5
+ // Emits test/readme_examples_test.ml — a structural gate over every ```ocaml
6
+ // fenced block in the three docs that ship ocaml examples:
7
+ // - the root README.md (top-level, multi-language quick start)
8
+ // - the per-language ocaml/README.md
9
+ // - the per-language ocaml/REFERENCE.md
10
+ //
11
+ // DESIGN NOTE (mirrors ReadmeExamplesTest_rust): the py gate shells out to a
12
+ // python subprocess to COMPILE + EXECUTE every block. A faithful ocaml port
13
+ // would shell out to `ocamlc` against each extracted snippet — a large,
14
+ // environment-sensitive harness that cannot be authored safely without a build
15
+ // to validate it (and the generated SDK ships a dependency-free stock-ocamlc
16
+ // build, no doc-test tooling). This gate instead validates that every
17
+ // documented ocaml block is PRESENT and STRUCTURALLY well-formed (balanced
18
+ // delimiters, non-empty). It is a real, always-passing test that keeps the docs
19
+ // honest about block structure; upgrading it to a true compile gate (a temp
20
+ // project that `ocamlc`s each block against the generated SDK) is a follow-up.
21
+ // Missing docs are tolerated (a run may generate a subset of phases).
22
+ const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
23
+ const { target, ctx$: { model } } = props
24
+
25
+ File({ name: 'readme_examples_test.' + target.ext }, () => {
26
+ Content(`(* Structural gate over every \`\`\`ocaml block in the ${model.const.Name} SDK
27
+ * docs (root README.md, ocaml/README.md, ocaml/REFERENCE.md). Generated by
28
+ * @voxgig/sdkgen — do not edit by hand.
29
+ *
30
+ * Validates that each documented ocaml block is present, non-empty, and has
31
+ * balanced delimiters. Missing docs are tolerated. See ReadmeExamplesTest_ocaml
32
+ * for why this is a structural gate rather than a full compile harness. *)
33
+
34
+ open Testutil
35
+
36
+ let fence = "\`\`\`ocaml"
37
+ let close_fence = "\`\`\`"
38
+
39
+ let trim = String.trim
40
+
41
+ (* Read a whole file, or None when it is absent (a doc not generated). *)
42
+ let read_file (path : string) : string option =
43
+ try Some (In_channel.with_open_text path In_channel.input_all)
44
+ with Sys_error _ -> None
45
+
46
+ let split_lines (s : string) : string list = String.split_on_char '\\n' s
47
+
48
+ (* Extract the body of every \`\`\`ocaml ... \`\`\` fenced block from markdown. *)
49
+ let extract_ocaml_blocks (md : string) : string list =
50
+ let blocks = ref [] in
51
+ let cur = ref [] in
52
+ let in_block = ref false in
53
+ List.iter (fun line ->
54
+ let t = trim line in
55
+ if not !in_block then begin
56
+ if t = fence then begin in_block := true; cur := [] end
57
+ end
58
+ else if t = close_fence then begin
59
+ blocks := String.concat "\\n" (List.rev !cur) :: !blocks;
60
+ in_block := false
61
+ end
62
+ else cur := line :: !cur)
63
+ (split_lines md);
64
+ List.rev !blocks
65
+
66
+ (* Balanced (), [], {} outside of string literals. Naive quote toggle: the
67
+ * generated snippets never embed an escaped quote inside a string. *)
68
+ let is_balanced (block : string) : bool =
69
+ let in_str = ref false in
70
+ let depth = ref 0 in
71
+ let ok = ref true in
72
+ String.iter (fun c ->
73
+ if c = '"' then in_str := not !in_str
74
+ else if not !in_str then
75
+ match c with
76
+ | '(' | '[' | '{' -> incr depth
77
+ | ')' | ']' | '}' -> decr depth; if !depth < 0 then ok := false
78
+ | _ -> ())
79
+ block;
80
+ !ok && !depth = 0 && not !in_str
81
+
82
+ let docs = [
83
+ ("root README", "../README.md");
84
+ ("ocaml/README", "README.md");
85
+ ("ocaml/REFERENCE", "REFERENCE.md");
86
+ ]
87
+
88
+ let () =
89
+ test "readme.ocaml_snippets_wellformed" (fun () ->
90
+ let total = ref 0 in
91
+ List.iter (fun (label, path) ->
92
+ match read_file path with
93
+ | None -> () (* doc not generated in this run — tolerate *)
94
+ | Some src ->
95
+ List.iteri (fun i block ->
96
+ check (label ^ " block " ^ string_of_int (i + 1) ^ " non-empty")
97
+ (trim block <> "");
98
+ check (label ^ " block " ^ string_of_int (i + 1) ^ " balanced delimiters")
99
+ (is_balanced block);
100
+ incr total)
101
+ (extract_ocaml_blocks src))
102
+ docs;
103
+ check "at least one ocaml code block across the docs" (!total > 0))
104
+ `)
105
+ })
106
+ })
107
+
108
+
109
+ export {
110
+ ReadmeExamplesTest
111
+ }
@@ -0,0 +1,46 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+
5
+ const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
6
+ const { target, ctx$: { model } } = props
7
+
8
+ Content(`### Data as \`value\`
9
+
10
+ The OCaml SDK uses a single dynamic \`value\` type throughout rather than a
11
+ typed record per entity. \`value\` is the vendored voxgig struct port (a
12
+ JSON-shaped variant: \`Str\`, \`Num\`, \`Bool\`, \`List\`, \`Map\`, \`Null\`,
13
+ \`Noval\`). 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 \`jo\` / \`ja\` helpers and read fields back with
17
+ \`getp\`; use \`to_map\` to safely coerce a value to a map.
18
+
19
+ ### Module structure
20
+
21
+ \`\`\`
22
+ ${target.name}/
23
+ ├── sdk_client.ml -- Main SDK client (constructors + accessors)
24
+ ├── sdk_config.ml -- Embedded API config + feature factory
25
+ ├── sdk_error.ml -- Branded error re-exports
26
+ ├── sdk_entity_*.ml -- Per-entity implementations (one each)
27
+ ├── sdk_types.ml -- Core pipeline types
28
+ ├── sdk_helpers.ml -- jo / ja / getp and friends
29
+ ├── sdk_runtime.ml -- Operation pipeline runner
30
+ ├── sdk_features.ml -- Built-in features (base, test, log)
31
+ ├── utility/ -- Vendored voxgig struct port
32
+ └── test/ -- Test suites
33
+ \`\`\`
34
+
35
+ The public surface lives in \`Sdk_client\` (the constructors and per-entity
36
+ accessors); \`Sdk_helpers\` carries the \`jo\` / \`ja\` / \`getp\` value
37
+ helpers. Open the runtime modules directly only when needed.
38
+
39
+ `)
40
+
41
+ })
42
+
43
+
44
+ export {
45
+ ReadmeExplanation
46
+ }
@@ -0,0 +1,147 @@
1
+
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+ import { ocamlVarName } from './utility_ocaml'
10
+
11
+
12
+ // A type-correct OCaml `value` literal for a field's canonical type.
13
+ function ocamlLit(type: any): string {
14
+ const k = canonKey(type)
15
+ if ('INTEGER' === k || 'NUMBER' === k) return '(Num 1.)'
16
+ if ('BOOLEAN' === k) return '(Bool true)'
17
+ if ('ARRAY' === k) return '(empty_list ())'
18
+ if ('OBJECT' === k) return '(empty_map ())'
19
+ return '(Str "example")'
20
+ }
21
+
22
+
23
+ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
24
+ const { target, ctx$: { model } } = props
25
+
26
+ const entity = getModelPath(model, `main.${KIT}.entity`)
27
+ // Pick an entity with a real op (prefer a read op) — never fabricate a
28
+ // `load` on an op-less entity. primaryOp is null only when NO entity exposes
29
+ // any op (a direct()-only SDK).
30
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
31
+ const fn = exampleEntity ? ocamlVarName(exampleEntity.name) : 'entity'
32
+ const idF = exampleEntity ? entityIdField(exampleEntity) : null
33
+ const field = primaryOp
34
+ ? ('load' === primaryOp ? 'e_load' :
35
+ 'list' === primaryOp ? 'e_list' :
36
+ 'create' === primaryOp ? 'e_create' :
37
+ 'update' === primaryOp ? 'e_update' : 'e_remove')
38
+ : ''
39
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
40
+ let testArg = 'Noval'
41
+ if (exampleEntity && 'list' === primaryOp) {
42
+ testArg = '(empty_map ())'
43
+ } else if (exampleEntity && isMatchOp) {
44
+ testArg = idF ? `(jo [("${idF}", Str "test01")])` : '(empty_map ())'
45
+ } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
46
+ const items = opRequestShape(exampleEntity, primaryOp).items
47
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
48
+ const required = items.filter((it: any) => !it.optional)
49
+ const chosen = required.length ? required : items.slice(0, 3)
50
+ testArg = `(jo [${chosen.map((it: any) => `("${it.name}", ${ocamlLit(it.type)})`).join('; ')}])`
51
+ }
52
+
53
+ // The op-driven test-mode line, shown only when the SDK has an entity op.
54
+ // A direct()-only SDK (no ops anywhere) shows a direct() call instead.
55
+ const testModeExample = primaryOp
56
+ ? `(* Entity ops return the bare record and raise on error. *)
57
+ let ${fn} = (Sdk_client.${fn} client Noval).${field} ${testArg} Noval in
58
+ print_endline (stringify ${fn}) (* the mock response record *)`
59
+ : `let result = Sdk_client.direct client (jo [("path", Str "/api/resource"); ("method", Str "GET")]) in
60
+ print_endline (stringify result)`
61
+
62
+ const apikeyEnvLine = isAuthActive(model)
63
+ ? `\n${envName(model)}_APIKEY=<your-key>`
64
+ : ''
65
+
66
+ Content(`### Make a direct HTTP request
67
+
68
+ For endpoints not covered by entity methods:
69
+
70
+ \`\`\`ocaml
71
+ let result = Sdk_client.direct client (jo [
72
+ ("path", Str "/api/resource/{id}");
73
+ ("method", Str "GET");
74
+ ("params", jo [("id", Str "example")]);
75
+ ]) in
76
+ (match getp result "ok" with
77
+ | Bool true ->
78
+ print_endline (stringify (getp result "status")); (* 200 *)
79
+ print_endline (stringify (getp result "data")) (* response body *)
80
+ | _ ->
81
+ (* A non-2xx response carries status + data (the error body); a transport
82
+ failure carries err instead. Read whichever is present. *)
83
+ print_endline (stringify (getp result "status"));
84
+ print_endline (stringify (getp result "err")))
85
+ \`\`\`
86
+
87
+ ### Prepare a request without sending it
88
+
89
+ \`\`\`ocaml
90
+ (* prepare returns the fetch definition and raises on error. *)
91
+ let fetchdef = Sdk_client.prepare client (jo [
92
+ ("path", Str "/api/resource/{id}");
93
+ ("method", Str "DELETE");
94
+ ("params", jo [("id", Str "example")]);
95
+ ]) in
96
+ print_endline (stringify (getp fetchdef "url"));
97
+ print_endline (stringify (getp fetchdef "method"));
98
+ print_endline (stringify (getp fetchdef "headers"))
99
+ \`\`\`
100
+
101
+ ### Use test mode
102
+
103
+ Create a mock client for unit testing — no server required:
104
+
105
+ \`\`\`ocaml
106
+ let () =
107
+ let client = Sdk_client.test () in
108
+ ${testModeExample}
109
+ \`\`\`
110
+
111
+ ### Use a custom fetch function
112
+
113
+ Replace the HTTP transport with your own function:
114
+
115
+ \`\`\`ocaml
116
+ let mock_fetch = Func (fun _ _args _ _ ->
117
+ jo [("status", Num 200.); ("statusText", Str "OK"); ("headers", empty_map ());
118
+ ("json", json_thunk (jo [("id", Str "mock01")]))]) in
119
+ let client = Sdk_client.make (jo [
120
+ ("base", Str "http://localhost:8080");
121
+ ("system", jo [("fetch", mock_fetch)]);
122
+ ]) in
123
+ ignore client
124
+ \`\`\`
125
+
126
+ ### Run live tests
127
+
128
+ Create a \`.env.local\` file at the project root:
129
+
130
+ \`\`\`
131
+ ${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
132
+ \`\`\`
133
+
134
+ Then run:
135
+
136
+ \`\`\`bash
137
+ cd ${target.name} && make test
138
+ \`\`\`
139
+
140
+ `)
141
+
142
+ })
143
+
144
+
145
+ export {
146
+ ReadmeHowto
147
+ }
@@ -0,0 +1,44 @@
1
+
2
+ import { cmp, Content, installCommand, isPublished, repoInfo } from '@voxgig/sdkgen'
3
+
4
+
5
+ const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
6
+ const { target, ctx$ } = props
7
+ const { model } = ctx$
8
+
9
+ if (isPublished(model, target.name)) {
10
+ Content(`\`\`\`bash
11
+ ${installCommand(model, target.name)}
12
+ \`\`\`
13
+
14
+ Or build from a source checkout — the SDK is dependency-free and compiles
15
+ with the stock \`ocamlc\` (no opam packages, no dune):
16
+
17
+ \`\`\`bash
18
+ cd ${target.name} && make build
19
+ \`\`\`
20
+
21
+ `)
22
+ return
23
+ }
24
+
25
+ // Publish pending: not yet on the opam registry. Build from the git release
26
+ // tag or from a local source checkout. The generated library is
27
+ // dependency-free — a plain `make build` (stock `ocamlc`) is all it needs.
28
+ const { releasesUrl } = repoInfo(model)
29
+ Content(`This package is not yet published to the opam registry. Install it from the
30
+ GitHub release tag (\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl}))
31
+ or from a source checkout. The SDK is dependency-free and compiles with the
32
+ stock \`ocamlc\` — no opam packages, no dune:
33
+
34
+ \`\`\`bash
35
+ cd ${target.name} && make build
36
+ \`\`\`
37
+
38
+ `)
39
+ })
40
+
41
+
42
+ export {
43
+ ReadmeInstall
44
+ }
@@ -0,0 +1,68 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+ import { ocamlVarName } from './utility_ocaml'
10
+
11
+
12
+ const ReadmeIntro = cmp(function ReadmeIntro(props: any) {
13
+ const { target, ctx$: { model } } = props
14
+ const info = (model.main && model.main.kit && model.main.kit.info) || {}
15
+ const tagline = info.tagline || ''
16
+
17
+ Content(`# ${model.Name} ${target.title} SDK
18
+
19
+ ${tagline}
20
+
21
+ The ${target.title} SDK for the ${model.Name} API — an entity-oriented client
22
+ following idiomatic OCaml conventions (a dependency-free library that compiles
23
+ with the stock \`ocamlc\`).
24
+
25
+ `)
26
+
27
+ // Emphasise the entity-oriented design: the SDK surfaces the API as
28
+ // capitalised, semantic Entities with a small, uniform verb set rather
29
+ // than raw URL paths and query strings. The example entity name is
30
+ // derived from the model, never hardcoded.
31
+ const entity = getModelPath(model, `main.${KIT}.entity`)
32
+ const exampleEntity = Object.values(entity || {})
33
+ .find((e: any) => e.active !== false) as any
34
+ const example = exampleEntity
35
+ ? `for example \`Sdk_client.${ocamlVarName(exampleEntity.name)} client Noval\` — each`
36
+ : 'each'
37
+
38
+ // Model-driven op list — only the operations the active entities actually
39
+ // expose (a read-only entity has just list+load); never claim
40
+ // create/update/remove exist when no entity has them.
41
+ const CANON_OPS = ['list', 'load', 'create', 'update', 'remove']
42
+ const opSet = new Set<string>()
43
+ Object.values(entity || {}).forEach((e: any) => {
44
+ if (!e || e.active === false) return
45
+ Object.keys(e.op || {}).forEach((o: string) => {
46
+ if (e.op[o] && e.op[o].active !== false) opSet.add(o)
47
+ })
48
+ })
49
+ const opNames = CANON_OPS.filter((o) => opSet.has(o))
50
+ .concat([...opSet].filter((o) => !CANON_OPS.includes(o)))
51
+ const opList = (opNames.length ? opNames : ['list', 'load'])
52
+ .map((o) => '`' + o + '`').join(', ')
53
+
54
+ Content(`The SDK exposes the API as capitalised, semantic **Entities** — ${example}
55
+ carrying a small, uniform set of operations (${opList}) instead of raw URL
56
+ paths and query strings. You work with named resources and verbs, which
57
+ keeps the cognitive load low.
58
+
59
+ > Other languages, the CLI, and MCP server live alongside this one — see
60
+ > the [top-level README](../README.md).
61
+
62
+ `)
63
+ })
64
+
65
+
66
+ export {
67
+ ReadmeIntro
68
+ }
@@ -0,0 +1,155 @@
1
+
2
+ import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+ import { ocamlVarName } from './utility_ocaml'
10
+
11
+
12
+ const ReadmeModel = cmp(function ReadmeModel(props: any) {
13
+ const { target, ctx$: { model } } = props
14
+
15
+ const entity = getModelPath(model, `main.${KIT}.entity`)
16
+ const entityList = each(entity).filter((e: any) => e.active !== false)
17
+
18
+ // Model-driven op rows for the shared entity interface: emit a row only for
19
+ // operations at least one active entity actually exposes.
20
+ const opUnion = new Set<string>()
21
+ entityList.forEach((e: any) => Object.keys(e.op || {})
22
+ .forEach((o: string) => { if (e.op[o] && e.op[o].active !== false) opUnion.add(o) }))
23
+ const opRowDefs: Record<string, string> = {
24
+ load: '| `e_load` | `value -> value -> value` | Load a single entity by match criteria. Raises on error. |',
25
+ list: '| `e_list` | `value -> value -> value` | List entities matching the criteria (returns a List). Raises on error. |',
26
+ create: '| `e_create` | `value -> value -> value` | Create a new entity. Raises on error. |',
27
+ update: '| `e_update` | `value -> value -> value` | Update an existing entity. Raises on error. |',
28
+ remove: '| `e_remove` | `value -> value -> value` | Remove an entity. Raises on error. |',
29
+ }
30
+ const opRows = ['load', 'list', 'create', 'update', 'remove']
31
+ .filter((o) => opUnion.has(o)).map((o) => opRowDefs[o]).join('\n')
32
+
33
+ const apikeyOptionRow = isAuthActive(model)
34
+ ? '| `apikey` | `string` | API key for authentication. |\n'
35
+ : ''
36
+
37
+ Content(`### Sdk_client
38
+
39
+ \`\`\`ocaml
40
+ open Voxgig_struct
41
+ open Sdk_helpers
42
+
43
+ let client = Sdk_client.make options
44
+ \`\`\`
45
+
46
+ Creates a new SDK client from a \`value\` options map. Use \`Sdk_client.make0 ()\`
47
+ for defaults.
48
+
49
+ | Option | Type | Description |
50
+ | --- | --- | --- |
51
+ ${apikeyOptionRow}| \`base\` | \`string\` | Base URL of the API server. |
52
+ | \`prefix\` | \`string\` | URL path prefix prepended to all requests. |
53
+ | \`suffix\` | \`string\` | URL path suffix appended to all requests. |
54
+ | \`feature\` | \`map\` | Feature activation flags. |
55
+ | \`extend\` | \`list\` | Additional feature instances to load. |
56
+ | \`system\` | \`map\` | System overrides (e.g. custom \`fetch\` function). |
57
+
58
+ ### Sdk_client.test
59
+
60
+ \`\`\`ocaml
61
+ let client = Sdk_client.test_with testopts sdkopts
62
+ \`\`\`
63
+
64
+ Creates a test-mode client with mock transport. Both arguments may be \`Noval\`
65
+ (\`Sdk_client.test ()\` uses defaults).
66
+
67
+ ### Sdk_client functions
68
+
69
+ | Function | Signature | Description |
70
+ | --- | --- | --- |
71
+ | \`make\` | \`value -> sdk_client\` | Construct a client from options. |
72
+ | \`make0\` | \`unit -> sdk_client\` | Construct a client with defaults. |
73
+ | \`prepare\` | \`sdk_client -> value -> value\` | Build an HTTP request definition without sending. Raises on error. |
74
+ | \`direct\` | \`sdk_client -> value -> value\` | Build and send an HTTP request. Returns a result map (branch on \`ok\`). |
75
+ `)
76
+
77
+ each(entityList, (ent: any) => {
78
+ const fn = ocamlVarName(ent.name)
79
+ const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
80
+ Content(`| \`${fn}\` | \`sdk_client -> value -> entity_obj\` | ${article.charAt(0).toUpperCase() + article.slice(1)} ${ent.Name} entity accessor. |
81
+ `)
82
+ })
83
+
84
+ Content(`
85
+ ### Entity interface
86
+
87
+ All entities are \`entity_obj\` records sharing the same fields.
88
+
89
+ | Field | Signature | Description |
90
+ | --- | --- | --- |
91
+ ${opRows}
92
+ | \`e_data_get\` | \`unit -> value\` | Get entity data. |
93
+ | \`e_data_set\` | \`value -> unit\` | Set entity data. |
94
+ | \`e_match_get\` | \`unit -> value\` | Get entity match criteria. |
95
+ | \`e_match_set\` | \`value -> unit\` | Set entity match criteria. |
96
+ | \`e_make\` | \`unit -> entity_obj\` | Create a new instance with the same options. |
97
+ | \`e_name\` | \`string\` | The entity name. |
98
+
99
+ ### Result shape
100
+
101
+ Entity operations return the bare result value (a \`Map\` for single-entity
102
+ ops, a \`List\` for \`e_list\`) and raise \`Sdk_error.E\` on error. Wrap calls
103
+ in \`try\`/\`with\` to handle failures.
104
+
105
+ The \`direct\` escape hatch never raises — it returns a result \`value\` map
106
+ you branch on via \`getp result "ok"\`:
107
+
108
+ | Key | Type | Description |
109
+ | --- | --- | --- |
110
+ | \`ok\` | \`Bool\` | \`Bool true\` if the HTTP status is 2xx. |
111
+ | \`status\` | \`Num\` | HTTP status code. |
112
+ | \`headers\` | \`Map\` | Response headers. |
113
+ | \`data\` | \`value\` | Parsed JSON response body. |
114
+
115
+ On error, \`ok\` is \`Bool false\` and \`err\` carries the error value.
116
+
117
+ `)
118
+
119
+ // Entities summary
120
+ Content(`### Entities
121
+
122
+ `)
123
+ each(entityList, (ent: any) => {
124
+ const fields = ent.fields || []
125
+ const opnames = Object.keys(ent.op || {})
126
+ const ops = ent.op || {}
127
+ const points = each(ops).map((op: any) =>
128
+ op.points ? each(op.points) : []
129
+ ).flat()
130
+ const path = points.length > 0 ? (points[0] as any).orig || '' : ''
131
+
132
+ Content(`#### ${ent.Name}
133
+
134
+ | Field | Description |
135
+ | --- | --- |
136
+ `)
137
+ each(fields, (field: any) => {
138
+ Content(`| \`${field.name}\` | ${field.short || ''} |
139
+ `)
140
+ })
141
+
142
+ Content(`
143
+ Operations: ${opnames.map((n: string) => n.charAt(0).toUpperCase() + n.slice(1)).join(', ')}.
144
+
145
+ API path: \`${path}\`
146
+
147
+ `)
148
+ })
149
+
150
+ })
151
+
152
+
153
+ export {
154
+ ReadmeModel
155
+ }
@@ -0,0 +1,59 @@
1
+
2
+ import { cmp, each, Content, envName, isAuthActive } from '@voxgig/sdkgen'
3
+
4
+
5
+ const ReadmeOptions = cmp(function ReadmeOptions(props: any) {
6
+ const { target } = props
7
+ const { model } = props.ctx$
8
+
9
+ const publishedOptions = each(target.options).filter((option: any) =>
10
+ option.publish && ('apikey' !== option.name || isAuthActive(model)))
11
+ if (0 === publishedOptions.length) {
12
+ return
13
+ }
14
+
15
+ Content(`
16
+
17
+ ## Options
18
+
19
+ Pass options as a \`value\` map when creating a client:
20
+
21
+ `)
22
+
23
+ Content(`\`\`\`ocaml
24
+ let client = Sdk_client.make (jo [
25
+ `)
26
+
27
+ publishedOptions.map((option: any) => {
28
+ if ('apikey' === option.name) {
29
+ Content(` ("${option.name}", Str (Sys.getenv "${envName(model)}_APIKEY"));
30
+ `)
31
+ }
32
+ else {
33
+ Content(` (* ("${option.name}", ${option.kind === 'string' ? 'Str "..."' : '(* ... *)'}); *)
34
+ `)
35
+ }
36
+ })
37
+
38
+ Content(`])
39
+ \`\`\`
40
+
41
+ `)
42
+
43
+ Content(`| Option | Type | Description |
44
+ | --- | --- | --- |
45
+ `)
46
+
47
+ publishedOptions.map((option: any) => {
48
+ Content(`| \`${option.name}\` | \`${option.kind}\` | ${option.short} |
49
+ `)
50
+ })
51
+
52
+ Content(`
53
+ `)
54
+ })
55
+
56
+
57
+ export {
58
+ ReadmeOptions
59
+ }