@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,149 @@
1
+
2
+ import { cmp, Content, isAuthActive, envName, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ nom,
8
+ } from '@voxgig/apidef'
9
+
10
+ import { elixirLit } from './utility_elixir'
11
+
12
+
13
+ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
14
+ const { target, ctx$: { model } } = props
15
+
16
+ const Name = model.const.Name
17
+ const entity = getModelPath(model, `main.${KIT}.entity`)
18
+
19
+ // Pick an entity with a real op (prefer a read op). primaryOp is null only
20
+ // when NO entity exposes any op (a direct()-only SDK).
21
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
22
+ const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
23
+ const eVar = exampleEntity ? exampleEntity.name : 'entity'
24
+ const idF = exampleEntity ? entityIdField(exampleEntity) : null
25
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
26
+ let testArg = 'H.deep(%{})'
27
+ if (exampleEntity && isMatchOp) {
28
+ testArg = idF ? `H.deep(%{"${idF}" => "test01"})` : 'H.deep(%{})'
29
+ } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
30
+ const items = opRequestShape(exampleEntity, primaryOp).items
31
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
32
+ const required = items.filter((it: any) => !it.optional)
33
+ const chosen = required.length ? required : items.slice(0, 3)
34
+ testArg = `H.deep(%{${chosen.map((it: any) => `"${it.name}" => ${elixirLit(it.type)}`).join(', ')}})`
35
+ }
36
+
37
+ const resVar = 'list' === primaryOp ? 'records' : 'record'
38
+ const testModeExample = primaryOp
39
+ ? `# Entity ops return the bare record (raise on error).
40
+ ${eVar} = ${Name}.${eVar}(sdk)
41
+ ${resVar} = ${Name}.Entity.${eName}.${primaryOp}(${eVar}, ${testArg})
42
+ IO.inspect(${resVar})`
43
+ : `result = ${Name}.direct(sdk, H.deep(%{"path" => "/api/resource", "method" => "GET"}))
44
+ IO.inspect(result)`
45
+
46
+ const apikeyEnvLine = isAuthActive(model)
47
+ ? `\n${envName(model)}_APIKEY=<your-key>`
48
+ : ''
49
+
50
+ Content(`### Make a direct HTTP request
51
+
52
+ For endpoints not covered by entity operations. \`direct/2\` never raises —
53
+ it returns a result node you branch on with \`Voxgig.Struct.getprop/2\`:
54
+
55
+ \`\`\`elixir
56
+ alias Voxgig.Struct, as: S
57
+ alias ${Name}.Helpers, as: H
58
+
59
+ result = ${Name}.direct(sdk, H.deep(%{
60
+ "path" => "/api/resource/{id}",
61
+ "method" => "GET",
62
+ "params" => %{"id" => "example"}
63
+ }))
64
+
65
+ if S.getprop(result, "ok") do
66
+ IO.inspect(S.getprop(result, "status")) # 200
67
+ IO.inspect(S.getprop(result, "data")) # response body
68
+ else
69
+ # A non-2xx response carries status + data (the error body); a
70
+ # transport-level failure carries err instead.
71
+ IO.inspect(S.getprop(result, "err"))
72
+ end
73
+ \`\`\`
74
+
75
+ ### Prepare a request without sending it
76
+
77
+ \`\`\`elixir
78
+ alias ${Name}.Helpers, as: H
79
+
80
+ # prepare/2 returns the fetch definition and raises on error.
81
+ fetchdef = ${Name}.prepare(sdk, H.deep(%{
82
+ "path" => "/api/resource/{id}",
83
+ "method" => "DELETE",
84
+ "params" => %{"id" => "example"}
85
+ }))
86
+
87
+ IO.inspect(Voxgig.Struct.getprop(fetchdef, "url"))
88
+ IO.inspect(Voxgig.Struct.getprop(fetchdef, "method"))
89
+ \`\`\`
90
+
91
+ ### Use test mode
92
+
93
+ Create a mock client for unit testing — no server required:
94
+
95
+ \`\`\`elixir
96
+ alias ${Name}.Helpers, as: H
97
+
98
+ sdk = ${Name}.test()
99
+
100
+ ${testModeExample}
101
+ \`\`\`
102
+
103
+ ### Use a custom fetch function
104
+
105
+ Replace the HTTP transport with your own function. It receives \`(url,
106
+ fetchdef)\` and returns a \`{response, error}\` tuple:
107
+
108
+ \`\`\`elixir
109
+ alias Voxgig.Struct, as: S
110
+ alias ${Name}.Helpers, as: H
111
+
112
+ mock_fetch = fn _url, _fetchdef ->
113
+ response = H.deep(%{
114
+ "status" => 200,
115
+ "statusText" => "OK",
116
+ "headers" => %{},
117
+ "json" => fn -> %{"id" => "mock01"} end
118
+ })
119
+ {response, nil}
120
+ end
121
+
122
+ sdk = ${Name}.new(H.deep(%{
123
+ "base" => "http://localhost:8080",
124
+ "system" => %{"fetch" => mock_fetch}
125
+ }))
126
+ \`\`\`
127
+
128
+ ### Run live tests
129
+
130
+ Create a \`.env.local\` file at the project root:
131
+
132
+ \`\`\`
133
+ ${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
134
+ \`\`\`
135
+
136
+ Then run:
137
+
138
+ \`\`\`bash
139
+ cd ${target.name} && mix test
140
+ \`\`\`
141
+
142
+ `)
143
+
144
+ })
145
+
146
+
147
+ export {
148
+ ReadmeHowto
149
+ }
@@ -0,0 +1,67 @@
1
+
2
+ import { cmp, Content, 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
+ // Match the app atom in mix.exs: snake_case, since `:a-b` is not a valid atom.
10
+ const app = model.const.name.toLowerCase().replace(/-/g, '_')
11
+
12
+ if (isPublished(model, target.name)) {
13
+ // Live on Hex: add the dependency to mix.exs deps/0.
14
+ Content(`Add \`${app}\` to your \`mix.exs\` dependencies:
15
+
16
+ \`\`\`elixir
17
+ def deps do
18
+ [
19
+ {:${app}, "~> 0.0.1"}
20
+ ]
21
+ end
22
+ \`\`\`
23
+
24
+ Then fetch it:
25
+
26
+ \`\`\`bash
27
+ mix deps.get
28
+ \`\`\`
29
+
30
+ `)
31
+ return
32
+ }
33
+
34
+ // Publish pending: not yet on Hex. Install from the git release tag or a
35
+ // local path checkout.
36
+ const { repoUrl, releasesUrl } = repoInfo(model)
37
+ Content(`This package is not yet published to [Hex](https://hex.pm). Install it from
38
+ the GitHub release tag (\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl}))
39
+ by adding a git dependency to your \`mix.exs\`:
40
+
41
+ \`\`\`elixir
42
+ def deps do
43
+ [
44
+ {:${app}, git: "${repoUrl}.git", tag: "${target.name}/vX.Y.Z"}
45
+ ]
46
+ end
47
+ \`\`\`
48
+
49
+ Or from a local source checkout:
50
+
51
+ \`\`\`elixir
52
+ def deps do
53
+ [
54
+ {:${app}, path: "../${model.const.name.toLowerCase()}-sdk/${target.name}"}
55
+ ]
56
+ end
57
+ \`\`\`
58
+
59
+ Then run \`mix deps.get\`.
60
+
61
+ `)
62
+ })
63
+
64
+
65
+ export {
66
+ ReadmeInstall
67
+ }
@@ -0,0 +1,66 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ nom,
8
+ } from '@voxgig/apidef'
9
+
10
+
11
+ const ReadmeIntro = cmp(function ReadmeIntro(props: any) {
12
+ const { target, ctx$: { model } } = props
13
+ const info = (model.main && model.main.kit && model.main.kit.info) || {}
14
+ const tagline = info.tagline || ''
15
+
16
+ Content(`# ${model.Name} ${target.title} SDK
17
+
18
+ ${tagline}
19
+
20
+ The ${target.title} SDK for the ${model.Name} API — an entity-oriented client
21
+ following idiomatic, functional Elixir conventions.
22
+
23
+ `)
24
+
25
+ // Emphasise the entity-oriented design: the SDK surfaces the API as
26
+ // capitalised, semantic Entities with a small, uniform verb set rather
27
+ // than raw URL paths and query strings. The example entity name is
28
+ // derived from the model, never hardcoded.
29
+ const entity = getModelPath(model, `main.${KIT}.entity`)
30
+ const exampleEntity = Object.values(entity || {})
31
+ .find((e: any) => e.active !== false) as any
32
+ const example = exampleEntity
33
+ ? `for example \`${model.const.Name}.${exampleEntity.name}(sdk)\` — each`
34
+ : 'each'
35
+
36
+ // Model-driven op list — only the operations the active entities actually
37
+ // expose (a read-only entity has just list+load); never claim
38
+ // create/update/remove exist when no entity has them.
39
+ const CANON_OPS = ['list', 'load', 'create', 'update', 'remove']
40
+ const opSet = new Set<string>()
41
+ Object.values(entity || {}).forEach((e: any) => {
42
+ if (!e || e.active === false) return
43
+ Object.keys(e.op || {}).forEach((o: string) => {
44
+ if (e.op[o] && e.op[o].active !== false) opSet.add(o)
45
+ })
46
+ })
47
+ const opNames = CANON_OPS.filter((o) => opSet.has(o))
48
+ .concat([...opSet].filter((o) => !CANON_OPS.includes(o)))
49
+ const opList = (opNames.length ? opNames : ['list', 'load'])
50
+ .map((o) => '`' + o + '`').join(', ')
51
+
52
+ Content(`The SDK exposes the API as capitalised, semantic **Entities** — ${example}
53
+ carrying a small, uniform set of operations (${opList}) instead of raw URL
54
+ paths and query strings. You work with named resources and verbs, which
55
+ keeps the cognitive load low.
56
+
57
+ > Other languages, the CLI, and MCP server live alongside this one — see
58
+ > the [top-level README](../README.md).
59
+
60
+ `)
61
+ })
62
+
63
+
64
+ export {
65
+ ReadmeIntro
66
+ }
@@ -0,0 +1,150 @@
1
+
2
+ import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+
10
+ const ReadmeModel = cmp(function ReadmeModel(props: any) {
11
+ const { ctx$: { model } } = props
12
+
13
+ const Name = model.const.Name
14
+ const entity = getModelPath(model, `main.${KIT}.entity`)
15
+ const entityList = each(entity).filter((e: any) => e.active !== false)
16
+
17
+ // Model-driven op rows for the shared entity interface: emit a
18
+ // load/list/create/update/remove row only for operations at least one active
19
+ // 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: '| `load` | `(entity, reqmatch, ctrl \\\\ nil) :: map()` | Load a single entity by match criteria. Raises on error. |',
25
+ list: '| `list` | `(entity, reqmatch \\\\ nil, ctrl \\\\ nil) :: list()` | List entities matching the criteria. Raises on error. |',
26
+ create: '| `create` | `(entity, reqdata, ctrl \\\\ nil) :: map()` | Create a new entity. Raises on error. |',
27
+ update: '| `update` | `(entity, reqdata, ctrl \\\\ nil) :: map()` | Update an existing entity. Raises on error. |',
28
+ remove: '| `remove` | `(entity, reqmatch \\\\ nil, ctrl \\\\ nil) :: map()` | 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.t()` | API key for authentication. |\n'
35
+ : ''
36
+
37
+ Content(`### ${Name}
38
+
39
+ \`\`\`elixir
40
+ sdk = ${Name}.new(options)
41
+ \`\`\`
42
+
43
+ Creates a new SDK client. \`options\` is a struct value node — build one from a
44
+ native map with \`${Name}.Helpers.deep/1\`.
45
+
46
+ | Option | Type | Description |
47
+ | --- | --- | --- |
48
+ ${apikeyOptionRow}| \`base\` | \`String.t()\` | Base URL of the API server. |
49
+ | \`prefix\` | \`String.t()\` | URL path prefix prepended to all requests. |
50
+ | \`suffix\` | \`String.t()\` | URL path suffix appended to all requests. |
51
+ | \`feature\` | \`map()\` | Feature activation flags. |
52
+ | \`extend\` | \`list()\` | Additional feature instances to load. |
53
+ | \`system\` | \`map()\` | System overrides (e.g. custom \`fetch\` function). |
54
+
55
+ ### test
56
+
57
+ \`\`\`elixir
58
+ sdk = ${Name}.test(testopts, sdkopts)
59
+ \`\`\`
60
+
61
+ Creates a test-mode client with mock transport. Both arguments may be \`nil\`.
62
+
63
+ ### ${Name} functions
64
+
65
+ | Function | Signature | Description |
66
+ | --- | --- | --- |
67
+ | \`options_map\` | \`(client) :: map()\` | Deep copy of current SDK options. |
68
+ | \`get_utility\` | \`(client) :: map()\` | The SDK utility node. |
69
+ | \`prepare\` | \`(client, fetchargs) :: map()\` | Build an HTTP request definition without sending. Raises on error. |
70
+ | \`direct\` | \`(client, fetchargs) :: map()\` | Build and send an HTTP request. Returns a result node (branch on \`ok\`). |
71
+ `)
72
+
73
+ each(entityList, (ent: any) => {
74
+ const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
75
+ Content(`| \`${ent.name}\` | \`(client, entopts \\\\ nil) :: entity\` | Create ${article} ${ent.Name} entity handle. |
76
+ `)
77
+ })
78
+
79
+ Content(`
80
+ ### Entity interface
81
+
82
+ Every entity's \`${Name}.Entity.<Name>\` module shares the same interface.
83
+
84
+ | Function | Signature | Description |
85
+ | --- | --- | --- |
86
+ ${opRows}
87
+ | \`data_get\` | \`(entity) :: map()\` | Get entity data. |
88
+ | \`data_set\` | \`(entity, data)\` | Set entity data. |
89
+ | \`match_get\` | \`(entity) :: map()\` | Get entity match criteria. |
90
+ | \`match_set\` | \`(entity, match)\` | Set entity match criteria. |
91
+ | \`make\` | \`(entity) :: entity\` | Create a new handle with the same options. |
92
+ | \`get_name\` | \`(entity) :: String.t()\` | Return the entity name. |
93
+
94
+ ### Result shape
95
+
96
+ Entity operations return the bare result data (a value node — a map for
97
+ single-entity ops, a list for \`list\`) and raise a \`${Name}.Error\` on
98
+ failure. Wrap calls in \`try\`/\`rescue\` to handle errors.
99
+
100
+ The \`direct/2\` escape hatch never raises — it returns a result node you
101
+ branch on via \`Voxgig.Struct.getprop(result, "ok")\`:
102
+
103
+ | Key | Type | Description |
104
+ | --- | --- | --- |
105
+ | \`ok\` | \`boolean()\` | \`true\` if the HTTP status is 2xx. |
106
+ | \`status\` | \`integer()\` | HTTP status code. |
107
+ | \`headers\` | \`map()\` | Response headers. |
108
+ | \`data\` | \`any()\` | Parsed JSON response body. |
109
+
110
+ On error, \`ok\` is \`false\` and \`err\` carries the error value.
111
+
112
+ `)
113
+
114
+ // Entities summary
115
+ Content(`### Entities
116
+
117
+ `)
118
+ each(entityList, (ent: any) => {
119
+ const fields = ent.fields || []
120
+ const opnames = Object.keys(ent.op || {})
121
+ const ops = ent.op || {}
122
+ const points = each(ops).map((op: any) =>
123
+ op.points ? each(op.points) : []
124
+ ).flat()
125
+ const path = points.length > 0 ? (points[0] as any).orig || '' : ''
126
+
127
+ Content(`#### ${ent.Name}
128
+
129
+ | Field | Description |
130
+ | --- | --- |
131
+ `)
132
+ each(fields, (field: any) => {
133
+ Content(`| \`${field.name}\` | ${field.short || ''} |
134
+ `)
135
+ })
136
+
137
+ Content(`
138
+ Operations: ${opnames.map((n: string) => n.charAt(0).toUpperCase() + n.slice(1)).join(', ')}.
139
+
140
+ API path: \`${path}\`
141
+
142
+ `)
143
+ })
144
+
145
+ })
146
+
147
+
148
+ export {
149
+ ReadmeModel
150
+ }
@@ -0,0 +1,62 @@
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 Name = model.const.Name
10
+
11
+ const publishedOptions = each(target.options).filter((option: any) =>
12
+ option.publish && ('apikey' !== option.name || isAuthActive(model)))
13
+ if (0 === publishedOptions.length) {
14
+ return
15
+ }
16
+
17
+ Content(`
18
+
19
+ ## Options
20
+
21
+ Pass options when creating a client. Native maps are lifted into the SDK's
22
+ value model by \`${Name}.Helpers.deep/1\`:
23
+
24
+ `)
25
+
26
+ Content(`\`\`\`elixir
27
+ sdk = ${Name}.new(${Name}.Helpers.deep(%{
28
+ `)
29
+
30
+ publishedOptions.map((option: any) => {
31
+ if ('apikey' === option.name) {
32
+ Content(` "${option.name}" => System.get_env("${envName(model)}_APIKEY"),
33
+ `)
34
+ }
35
+ else {
36
+ Content(` # "${option.name}" => ${option.kind === 'string' ? "\"...\"" : '...'},
37
+ `)
38
+ }
39
+ })
40
+
41
+ Content(`}))
42
+ \`\`\`
43
+
44
+ `)
45
+
46
+ Content(`| Option | Type | Description |
47
+ | --- | --- | --- |
48
+ `)
49
+
50
+ publishedOptions.map((option: any) => {
51
+ Content(`| \`${option.name}\` | \`${option.kind}\` | ${option.short} |
52
+ `)
53
+ })
54
+
55
+ Content(`
56
+ `)
57
+ })
58
+
59
+
60
+ export {
61
+ ReadmeOptions
62
+ }
@@ -0,0 +1,198 @@
1
+
2
+ import { cmp, Content, isAuthActive, envName, opRequestShape, entityIdField, entityDataIdField, entityOps } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ nom,
8
+ } from '@voxgig/apidef'
9
+
10
+ import { elixirLit } from './utility_elixir'
11
+
12
+
13
+ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
14
+ const { ctx$: { model } } = props
15
+
16
+ const Name = model.const.Name
17
+ const entity = getModelPath(model, `main.${KIT}.entity`)
18
+
19
+ const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
20
+
21
+ // Find a nested entity if available: one with a parent chain, an active
22
+ // load op, and a required non-id load param to demonstrate (the parent key).
23
+ const nestedEntity = Object.values(entity).find((e: any) =>
24
+ e.active !== false &&
25
+ e.relations && e.relations.ancestors && 0 < e.relations.ancestors.length &&
26
+ entityOps(e).includes('load') &&
27
+ opRequestShape(e, 'load').items.some((it: any) =>
28
+ !it.optional && it.name !== entityIdField(e))
29
+ ) as any
30
+
31
+ const authActive = isAuthActive(model)
32
+ const ctor = authActive
33
+ ? `${Name}.new(H.deep(%{"apikey" => System.get_env("${envName(model)}_APIKEY")}))`
34
+ : `${Name}.new()`
35
+
36
+ Content(`### 1. Create a client
37
+
38
+ \`\`\`elixir
39
+ alias ${Name}.Helpers, as: H
40
+
41
+ sdk = ${ctor}
42
+ \`\`\`
43
+
44
+ `)
45
+
46
+ if (exampleEntity) {
47
+ const eName = nom(exampleEntity, 'Name')
48
+ const article = /^[aeiou]/i.test(eName) ? 'an' : 'a'
49
+ const eVar = exampleEntity.name
50
+ const opnames = entityOps(exampleEntity)
51
+ const idF = entityIdField(exampleEntity)
52
+ const dataIdF = entityDataIdField(exampleEntity)
53
+
54
+ if (opnames.includes('list')) {
55
+ Content(`### 2. List ${eName.toLowerCase()} records
56
+
57
+ \`list/2\` returns a list value node and raises on error.
58
+
59
+ \`\`\`elixir
60
+ try do
61
+ ${eVar} = ${Name}.${eVar}(sdk)
62
+ records = ${Name}.Entity.${eName}.list(${eVar})
63
+ IO.inspect(records)
64
+ rescue
65
+ err -> IO.puts("list failed: " <> inspect(err))
66
+ end
67
+ \`\`\`
68
+
69
+ `)
70
+ }
71
+
72
+ if (nestedEntity) {
73
+ const neName = nom(nestedEntity, 'Name')
74
+ const neArticle = /^[aeiou]/i.test(neName) ? 'an' : 'a'
75
+ const neVar = nestedEntity.name
76
+
77
+ const neIdF = entityIdField(nestedEntity)
78
+ const neRequired = opRequestShape(nestedEntity, 'load').items
79
+ .filter((it: any) => !it.optional)
80
+ .sort((a: any, b: any) =>
81
+ (a.name === neIdF ? 1 : 0) - (b.name === neIdF ? 1 : 0))
82
+ const parentItem = neRequired.find((it: any) => it.name !== neIdF) as any
83
+ const parentParam = parentItem && parentItem.name
84
+ const parentName = parentParam ? parentParam.replace(/_id$/, '') : 'its parent'
85
+ const neMatch = neRequired.map((it: any) =>
86
+ `"${it.name}" => ${elixirLit(it.type,
87
+ it.name === neIdF ? 'example_id' : 'example_' + it.name)}`)
88
+
89
+ Content(`### 3. Load ${neArticle} ${neName.toLowerCase()}
90
+
91
+ ${neName} is nested under ${parentName}, so provide the \`${parentParam}\`.
92
+ \`load/2\` returns the bare record and raises on error.
93
+
94
+ \`\`\`elixir
95
+ try do
96
+ ${neVar} = ${Name}.${neVar}(sdk)
97
+ record = ${Name}.Entity.${neName}.load(${neVar}, H.deep(%{${neMatch.join(', ')}}))
98
+ IO.inspect(record)
99
+ rescue
100
+ err -> IO.puts("load failed: " <> inspect(err))
101
+ end
102
+ \`\`\`
103
+
104
+ `)
105
+ }
106
+ else if (opnames.includes('load')) {
107
+ const loadRequired = opRequestShape(exampleEntity, 'load').items
108
+ .filter((it: any) => !it.optional || it.name === idF)
109
+ .sort((a: any, b: any) =>
110
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
111
+ const loadArg = 0 < loadRequired.length
112
+ ? `H.deep(%{${loadRequired.map((it: any) =>
113
+ `"${it.name}" => ${elixirLit(it.type,
114
+ it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')}})`
115
+ : 'H.deep(%{})'
116
+
117
+ Content(`### 3. Load ${article} ${eName.toLowerCase()}
118
+
119
+ \`load/2\` returns the bare record and raises on error.
120
+
121
+ \`\`\`elixir
122
+ try do
123
+ ${eVar} = ${Name}.${eVar}(sdk)
124
+ record = ${Name}.Entity.${eName}.load(${eVar}, ${loadArg})
125
+ IO.inspect(record)
126
+ rescue
127
+ err -> IO.puts("load failed: " <> inspect(err))
128
+ end
129
+ \`\`\`
130
+
131
+ `)
132
+ }
133
+
134
+ // Model-driven example fields: derive the create/update body from the op
135
+ // shape so the docs reference REAL writable fields.
136
+ const examplePairs = (opname: string): string[] => {
137
+ const items = opRequestShape(exampleEntity, opname).items
138
+ .filter((it: any) => (it.name !== idF && it.name !== 'id') ||
139
+ ('create' === opname && !it.optional))
140
+ const required = items.filter((it: any) => !it.optional)
141
+ const optional = items.filter((it: any) => it.optional)
142
+ const chosen = 'create' === opname
143
+ ? (required.length ? required : items.slice(0, 2))
144
+ : required.concat(optional).slice(0, Math.max(2, required.length))
145
+ return chosen.map((it: any) => `"${it.name}" => ${elixirLit(it.type, 'example_' + it.name)}`)
146
+ }
147
+
148
+ const idParamType = (opname: string): any => {
149
+ const it = opRequestShape(exampleEntity, opname).items.find((x: any) => x.name === idF)
150
+ return it && it.type
151
+ }
152
+ const idValueFor = (opname: string): string => (null != dataIdF && opnames.includes('create'))
153
+ ? `Voxgig.Struct.getprop(created, "${dataIdF}")`
154
+ : elixirLit(idParamType(opname), 'example_id')
155
+
156
+ if (opnames.includes('create') || opnames.includes('update') || opnames.includes('remove')) {
157
+ Content(`### 4. Create, update, and remove
158
+
159
+ \`\`\`elixir
160
+ ${eVar} = ${Name}.${eVar}(sdk)
161
+
162
+ `)
163
+ if (opnames.includes('create')) {
164
+ Content(`# Create — returns the bare created record
165
+ created = ${Name}.Entity.${eName}.create(${eVar}, H.deep(%{${examplePairs('create').join(', ')}}))
166
+
167
+ `)
168
+ }
169
+ if (opnames.includes('update')) {
170
+ const updatePairs = (idF ? [`"${idF}" => ${idValueFor('update')}`] : []).concat(examplePairs('update'))
171
+ Content(`# Update
172
+ ${Name}.Entity.${eName}.update(${eVar}, H.deep(%{${updatePairs.join(', ')}}))
173
+
174
+ `)
175
+ }
176
+ if (opnames.includes('remove')) {
177
+ const removePairs = opRequestShape(exampleEntity, 'remove').items
178
+ .filter((it: any) => !it.optional || it.name === idF)
179
+ .sort((a: any, b: any) =>
180
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
181
+ .map((it: any) => it.name === idF
182
+ ? `"${it.name}" => ${idValueFor('remove')}`
183
+ : `"${it.name}" => ${elixirLit(it.type, 'example_' + it.name)}`)
184
+ Content(`# Remove
185
+ ${Name}.Entity.${eName}.remove(${eVar}${removePairs.length ? `, H.deep(%{${removePairs.join(', ')}})` : ''})
186
+ `)
187
+ }
188
+ Content(`\`\`\`
189
+
190
+ `)
191
+ }
192
+ }
193
+ })
194
+
195
+
196
+ export {
197
+ ReadmeQuick
198
+ }