@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,170 @@
1
+
2
+ import { cmp, File, Content } from '@voxgig/sdkgen'
3
+
4
+
5
+ // Emits Tests/ProjectNameSDKTests/ReadmeExamplesTest.swift — a PRESENCE +
6
+ // STRUCTURE gate over every swift fenced block in the repository ROOT
7
+ // README.md, the per-language swift/README.md, AND swift/REFERENCE.md. It is a
8
+ // plain XCTestCase (no @testable import — it only reads the doc files off
9
+ // disk), resolved relative to the test file via #filePath.
10
+ //
11
+ // SCOPE NOTE (deliberate, documented): the Python/TS/Go equivalents EXECUTE and
12
+ // type-check every documented block. That is infeasible here — the generated
13
+ // Swift SDK compiles with SwiftPM only (no in-process Swift compiler wired into
14
+ // the test runtime), so a test cannot compile-and-run arbitrary doc snippets at
15
+ // test time. This gate therefore guarantees the weaker-but-real invariant that
16
+ // keeps the docs honest as the generator evolves:
17
+ // 1. PRESENCE: every scanned doc that exists holds at least one swift block
18
+ // (nothing was dropped);
19
+ // 2. STRUCTURE: every swift block's braces / parens / brackets balance
20
+ // (ignoring string literals and line comments), catching a truncated or
21
+ // malformed generated snippet.
22
+ //
23
+ // The emitted Swift is written WITHOUT literal backticks (the fence marker is
24
+ // built at runtime as String(repeating: "\u{60}", count: 3)) so this TS
25
+ // template literal stays clean, and uses string concatenation instead of Swift
26
+ // interpolation to keep backslash-escaping in this template minimal.
27
+ const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
28
+ const { ctx$: { model } } = props
29
+
30
+ const Name = model.const.Name
31
+
32
+ File({ name: 'ReadmeExamplesTest.swift' }, () => {
33
+ Content(`// ${Name} SDK — documentation swift-examples PRESENCE + STRUCTURE gate.
34
+ //
35
+ // GUARANTEE (see ReadmeExamplesTest_swift.ts for why this is a structure gate
36
+ // and not an execute gate): every swift example in the docs is accounted for.
37
+ // A dependency-free XCTestCase over every swift fenced code block in three
38
+ // documents:
39
+ // - the repository ROOT README.md (one directory above the swift module),
40
+ // - the per-language swift/README.md,
41
+ // - the per-language swift/REFERENCE.md.
42
+ //
43
+ // Checks, PER DOCUMENT that exists:
44
+ // 1. PRESENCE: the doc holds at least one swift block.
45
+ // 2. STRUCTURE: every swift block's braces / parens / brackets balance, so a
46
+ // truncated or malformed generated snippet fails loudly.
47
+ //
48
+ // GENERATED by @voxgig/sdkgen — do not edit by hand.
49
+
50
+ import XCTest
51
+ import Foundation
52
+
53
+ final class ReadmeExamplesTest: XCTestCase {
54
+ private struct Doc { let label: String; let path: String }
55
+
56
+ private let NL: Character = "\\n"
57
+
58
+ // The triple-backtick fence, built at runtime so this source carries no
59
+ // literal backticks.
60
+ private var fence: String { String(repeating: "\\u{60}", count: 3) }
61
+
62
+ // The three documents to scan, resolved relative to this test file.
63
+ private func docs() -> [Doc] {
64
+ let here = URL(fileURLWithPath: #filePath)
65
+ .deletingLastPathComponent() // ProjectNameSDKTests
66
+ .deletingLastPathComponent() // Tests
67
+ .deletingLastPathComponent() // swift (module dir)
68
+ let project = here.deletingLastPathComponent() // project (holds root README)
69
+ return [
70
+ Doc(label: "root README", path: project.appendingPathComponent("README.md").path),
71
+ Doc(label: "swift README.md", path: here.appendingPathComponent("README.md").path),
72
+ Doc(label: "swift REFERENCE.md", path: here.appendingPathComponent("REFERENCE.md").path),
73
+ ]
74
+ }
75
+
76
+ // Extract every swift fenced block. Split on the triple-backtick fence:
77
+ // odd-indexed segments are the inside of a fenced block (info string on the
78
+ // first line, then the code). Only blocks whose info string is exactly
79
+ // "swift" are returned.
80
+ private func swiftBlocks(_ text: String) -> [String] {
81
+ let parts = text.components(separatedBy: fence)
82
+ var blocks: [String] = []
83
+ var i = 1
84
+ while i < parts.count {
85
+ let seg = parts[i]
86
+ let split = seg.split(separator: NL, maxSplits: 1, omittingEmptySubsequences: false)
87
+ let first = split.first.map { String($0) } ?? ""
88
+ let info = first.trimmingCharacters(in: .whitespaces)
89
+ if info == "swift" {
90
+ blocks.append(split.count > 1 ? String(split[1]) : "")
91
+ }
92
+ i += 2
93
+ }
94
+ return blocks
95
+ }
96
+
97
+ // True when every open/close delimiter balances, ignoring characters inside
98
+ // string literals and line comments (a generated snippet never nests an
99
+ // unbalanced delimiter outside those, and this catches truncation).
100
+ private func balanced(_ block: String) -> Bool {
101
+ var stack: [Character] = []
102
+ var inString = false
103
+ var escaped = false
104
+ let chars = Array(block)
105
+ var i = 0
106
+ while i < chars.count {
107
+ let ch = chars[i]
108
+ if inString {
109
+ if escaped { escaped = false }
110
+ else if ch == "\\\\" { escaped = true }
111
+ else if ch == "\\"" { inString = false }
112
+ i += 1
113
+ continue
114
+ }
115
+ if ch == "\\"" { inString = true; i += 1; continue }
116
+ if ch == "/" && i + 1 < chars.count && chars[i + 1] == "/" {
117
+ while i < chars.count && chars[i] != NL { i += 1 }
118
+ continue
119
+ }
120
+ switch ch {
121
+ case "(": stack.append(")")
122
+ case "[": stack.append("]")
123
+ case "{": stack.append("}")
124
+ case ")", "]", "}":
125
+ if stack.isEmpty || stack.removeLast() != ch { return false }
126
+ default: break
127
+ }
128
+ i += 1
129
+ }
130
+ return stack.isEmpty && !inString
131
+ }
132
+
133
+ private func read(_ path: String) -> String? {
134
+ return try? String(contentsOfFile: path, encoding: .utf8)
135
+ }
136
+
137
+ // PRESENCE: each doc that exists holds at least one swift block.
138
+ func testDocExamplesPresent() {
139
+ for doc in docs() {
140
+ guard let text = read(doc.path) else { continue }
141
+ let blocks = swiftBlocks(text)
142
+ XCTAssertGreaterThan(blocks.count, 0,
143
+ "expected at least one swift block in " + doc.label)
144
+ }
145
+ }
146
+
147
+ // STRUCTURE: every swift block's delimiters balance.
148
+ func testDocExamplesWellFormed() {
149
+ var failures: [String] = []
150
+ for doc in docs() {
151
+ guard let text = read(doc.path) else { continue }
152
+ let blocks = swiftBlocks(text)
153
+ var balancedCount = 0
154
+ for (i, b) in blocks.enumerated() {
155
+ if balanced(b) { balancedCount += 1 }
156
+ else { failures.append(doc.label + " swift block #" + String(i) + " has unbalanced delimiters") }
157
+ }
158
+ print("[readme-examples] " + doc.label + " swift blocks: total=" + String(blocks.count) + " balanced=" + String(balancedCount))
159
+ }
160
+ XCTAssertTrue(failures.isEmpty, failures.joined(separator: "; "))
161
+ }
162
+ }
163
+ `)
164
+ })
165
+ })
166
+
167
+
168
+ export {
169
+ ReadmeExamplesTest
170
+ }
@@ -0,0 +1,49 @@
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
+ const SDK = model.const.Name + 'SDK'
9
+
10
+ Content(`### Data as loose values
11
+
12
+ The Swift SDK uses a loose object model — the vendored \`Value\` enum
13
+ (with \`VMap\` / \`VList\` wrappers) throughout — rather than a bespoke typed
14
+ struct per endpoint. This mirrors the dynamic nature of the API and keeps the
15
+ SDK flexible: no regeneration is needed when the API schema changes.
16
+
17
+ Use the \`.asMap\` / \`.asList\` / \`.asString\` accessors to safely coerce a
18
+ \`Value\` to a concrete Swift type (each returns \`nil\` on a type mismatch).
19
+ A \`${model.const.Name}Types.swift\` file of reference \`struct\` types is also
20
+ generated for editor documentation.
21
+
22
+ ### Project structure
23
+
24
+ \`\`\`
25
+ swift/
26
+ ├── Package.swift -- SwiftPM manifest (zero runtime deps)
27
+ ├── Sources/ProjectNameSDK/
28
+ │ ├── core/ -- Main client, config, entity base, error type
29
+ │ ├── entity/ -- Generated entity clients
30
+ │ ├── feature/ -- Built-in features (Base, Test, Log, ...)
31
+ │ ├── utility/ -- Utility functions
32
+ │ └── Struct/ -- Vendored Voxgig Struct port
33
+ └── Tests/ProjectNameSDKTests/ -- Test suites (XCTest)
34
+ \`\`\`
35
+
36
+ The main client class (\`${SDK}\`, under \`Sources/ProjectNameSDK/core\`)
37
+ exposes the entity accessors. Reference entity or utility types directly only
38
+ when needed. The SDK is dependency-free: JSON parsing is the vendored
39
+ \`Struct/JSON.swift\`, HTTP transport is Foundation's \`URLSession\`, and the
40
+ struct library is inlined under \`Struct/\`.
41
+
42
+ `)
43
+
44
+ })
45
+
46
+
47
+ export {
48
+ ReadmeExplanation
49
+ }
@@ -0,0 +1,159 @@
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 { swiftVarName } from './utility_swift'
10
+
11
+
12
+ // A type-correct Swift `Value` literal for a field's canonical type.
13
+ function swiftLit(type: any): string {
14
+ const k = canonKey(type)
15
+ if ('INTEGER' === k) return '.int(1)'
16
+ if ('NUMBER' === k) return '.double(1.0)'
17
+ if ('BOOLEAN' === k) return '.bool(true)'
18
+ if ('ARRAY' === k) return '.list([])'
19
+ if ('OBJECT' === k) return '.map(VMap())'
20
+ return '.string("example")'
21
+ }
22
+
23
+
24
+ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
25
+ const { target, ctx$: { model } } = props
26
+
27
+ const SDK = model.const.Name + 'SDK'
28
+
29
+ const entity = getModelPath(model, `main.${KIT}.entity`)
30
+ // Pick an entity with a real op (prefer a read op). primaryOp is null only
31
+ // when NO entity exposes any op (a direct()-only SDK).
32
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
33
+ const eName = exampleEntity ? exampleEntity.Name : 'Entity'
34
+ const eVar = exampleEntity ? swiftVarName(exampleEntity.name) : 'entity'
35
+ // Model-driven id key: null when the entity has no id-like field, so a
36
+ // match op takes an empty match.
37
+ const idF = exampleEntity ? entityIdField(exampleEntity) : null
38
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
39
+ let testArg = 'nil'
40
+ if (exampleEntity && isMatchOp) {
41
+ testArg = idF ? `VMap([("${idF}", .string("test01"))])` : 'nil'
42
+ } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
43
+ const items = opRequestShape(exampleEntity, primaryOp).items
44
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
45
+ const required = items.filter((it: any) => !it.optional)
46
+ const chosen = required.length ? required : items.slice(0, 3)
47
+ testArg = `VMap([${chosen.map((it: any) =>
48
+ `("${it.name}", ${swiftLit(it.type)})`).join(', ')}])`
49
+ }
50
+
51
+ // The op-driven test-mode line, shown only when the SDK has an entity op.
52
+ // A direct()-only SDK (no ops anywhere) shows a direct() call instead.
53
+ const testModeExample = primaryOp
54
+ ? `// Entity ops return the bare record and throw on error.
55
+ let ${eVar} = try client.${eName}().${primaryOp}(${testArg}, nil)
56
+ // ${eVar} holds the mock response record
57
+ print(${eVar})`
58
+ : `let result = client.direct(VMap([
59
+ ("path", .string("/api/resource")),
60
+ ("method", .string("GET")),
61
+ ]))
62
+ print(result)`
63
+
64
+ const apikeyEnvLine = isAuthActive(model)
65
+ ? `\n${envName(model)}_APIKEY=<your-key>`
66
+ : ''
67
+
68
+ Content(`### Make a direct HTTP request
69
+
70
+ For endpoints not covered by entity methods:
71
+
72
+ \`\`\`swift
73
+ let result = client.direct(VMap([
74
+ ("path", .string("/api/resource/{id}")),
75
+ ("method", .string("GET")),
76
+ ("params", .map([("id", .string("example"))])),
77
+ ]))
78
+
79
+ if result.entries["ok"] == .bool(true) {
80
+ print(result.entries["status"] ?? .noval) // 200
81
+ print(result.entries["data"] ?? .noval) // response body
82
+ }
83
+ else {
84
+ // A non-2xx response carries status + data (the error body); a
85
+ // transport-level failure carries err instead. Only one is present, so
86
+ // an absent key simply reads as .noval.
87
+ print(result.entries["status"] ?? .noval, result.entries["err"] ?? .noval)
88
+ }
89
+ \`\`\`
90
+
91
+ ### Prepare a request without sending it
92
+
93
+ \`\`\`swift
94
+ // prepare() returns the fetch definition and throws on error.
95
+ let fetchdef = try client.prepare(VMap([
96
+ ("path", .string("/api/resource/{id}")),
97
+ ("method", .string("DELETE")),
98
+ ("params", .map([("id", .string("example"))])),
99
+ ]))
100
+
101
+ print(fetchdef.entries["url"] ?? .noval)
102
+ print(fetchdef.entries["method"] ?? .noval)
103
+ print(fetchdef.entries["headers"] ?? .noval)
104
+ \`\`\`
105
+
106
+ ### Use test mode
107
+
108
+ Create a mock client for unit testing — no server required:
109
+
110
+ \`\`\`swift
111
+ let client = ${SDK}.testSDK(nil, nil)
112
+
113
+ ${testModeExample}
114
+ \`\`\`
115
+
116
+ ### Use a custom fetch function
117
+
118
+ Replace the HTTP transport with your own \`SystemFetch\` closure:
119
+
120
+ \`\`\`swift
121
+ let fetch: SystemFetch = { url, _ in
122
+ let m = VMap()
123
+ m.entries["status"] = .int(200)
124
+ m.entries["statusText"] = .string("OK")
125
+ m.entries["headers"] = .map(VMap())
126
+ m.entries["json"] = .nat({ () -> Value in .map(VMap([("id", .string("mock01"))])) } as NativeCall0)
127
+ return .map(m)
128
+ }
129
+
130
+ let system = VMap()
131
+ system.entries["fetch"] = .nat(fetch)
132
+ let options = VMap()
133
+ options.entries["base"] = .string("http://localhost:8080")
134
+ options.entries["system"] = .map(system)
135
+ let client = ${SDK}(options)
136
+ \`\`\`
137
+
138
+ ### Run live tests
139
+
140
+ Create a \`.env.local\` file at the project root:
141
+
142
+ \`\`\`
143
+ ${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
144
+ \`\`\`
145
+
146
+ Then run:
147
+
148
+ \`\`\`bash
149
+ cd swift && make test
150
+ \`\`\`
151
+
152
+ `)
153
+
154
+ })
155
+
156
+
157
+ export {
158
+ ReadmeHowto
159
+ }
@@ -0,0 +1,58 @@
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
+ if (isPublished(model, target.name)) {
10
+ Content(`Add the package as a dependency in your \`Package.swift\`:
11
+
12
+ \`\`\`swift
13
+ dependencies: [
14
+ .package(url: "<repo-url>", from: "0.0.1"),
15
+ ],
16
+ \`\`\`
17
+
18
+ Or build from a source checkout — the SDK is a plain SwiftPM package:
19
+
20
+ \`\`\`bash
21
+ cd swift && swift build
22
+ \`\`\`
23
+
24
+ `)
25
+ return
26
+ }
27
+
28
+ // Publish pending: not yet on the SwiftPM registry (git-tag only). The
29
+ // generated SDK is a dependency-free SwiftPM package (Foundation + the
30
+ // vendored Voxgig Struct port), so install it from the git release tag or a
31
+ // local source checkout and build with SwiftPM.
32
+ const { releasesUrl } = repoInfo(model)
33
+ Content(`This package is not yet published to a SwiftPM registry. The generated SDK
34
+ is a dependency-free SwiftPM package (Foundation only, plus the vendored
35
+ Voxgig Struct port). Depend on it from the GitHub release tag
36
+ (\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl})) by adding it to
37
+ your \`Package.swift\`:
38
+
39
+ \`\`\`swift
40
+ dependencies: [
41
+ // From the git release tag:
42
+ .package(url: "<repo-url>", exact: "0.0.1"),
43
+ ],
44
+ \`\`\`
45
+
46
+ Or build from a source checkout with SwiftPM:
47
+
48
+ \`\`\`bash
49
+ cd swift && swift build
50
+ \`\`\`
51
+
52
+ `)
53
+ })
54
+
55
+
56
+ export {
57
+ ReadmeInstall
58
+ }
@@ -0,0 +1,64 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+
10
+ const ReadmeIntro = cmp(function ReadmeIntro(props: any) {
11
+ const { target, ctx$: { model } } = props
12
+ const info = (model.main && model.main.kit && model.main.kit.info) || {}
13
+ const tagline = info.tagline || ''
14
+
15
+ Content(`# ${model.Name} ${target.title} SDK
16
+
17
+ ${tagline}
18
+
19
+ The ${target.title} SDK for the ${model.Name} API — an entity-oriented client following idiomatic Swift conventions.
20
+
21
+ `)
22
+
23
+ // Emphasise the entity-oriented design: the SDK surfaces the API as
24
+ // capitalised, semantic Entities with a small, uniform verb set rather
25
+ // than raw URL paths and query strings. The example entity name is
26
+ // derived from the model, never hardcoded.
27
+ const entity = getModelPath(model, `main.${KIT}.entity`)
28
+ const exampleEntity = Object.values(entity || {})
29
+ .find((e: any) => e.active !== false) as any
30
+ const example = exampleEntity
31
+ ? `for example \`client.${exampleEntity.Name}()\` — each`
32
+ : 'each'
33
+
34
+ // Model-driven op list — only the operations the active entities actually
35
+ // expose (a read-only entity has just list+load); never claim
36
+ // create/update/remove exist when no entity has them.
37
+ const CANON_OPS = ['list', 'load', 'create', 'update', 'remove']
38
+ const opSet = new Set<string>()
39
+ Object.values(entity || {}).forEach((e: any) => {
40
+ if (!e || e.active === false) return
41
+ Object.keys(e.op || {}).forEach((o: string) => {
42
+ if (e.op[o] && e.op[o].active !== false) opSet.add(o)
43
+ })
44
+ })
45
+ const opNames = CANON_OPS.filter((o) => opSet.has(o))
46
+ .concat([...opSet].filter((o) => !CANON_OPS.includes(o)))
47
+ const opList = (opNames.length ? opNames : ['list', 'load'])
48
+ .map((o) => '`' + o + '`').join(', ')
49
+
50
+ Content(`The SDK exposes the API as capitalised, semantic **Entities** — ${example}
51
+ carrying a small, uniform set of operations (${opList}) instead of raw URL
52
+ paths and query strings. You work with named resources and verbs, which
53
+ keeps the cognitive load low.
54
+
55
+ > Other languages, the CLI, and MCP server live alongside this one — see
56
+ > the [top-level README](../README.md).
57
+
58
+ `)
59
+ })
60
+
61
+
62
+ export {
63
+ ReadmeIntro
64
+ }
@@ -0,0 +1,149 @@
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 { target, ctx$: { model } } = props
12
+
13
+ const SDK = model.const.Name + 'SDK'
14
+ const EntityBase = model.const.Name + 'EntityBase'
15
+
16
+ const entity = getModelPath(model, `main.${KIT}.entity`)
17
+ const entityList = each(entity).filter((e: any) => e.active !== false)
18
+
19
+ // Model-driven op rows for the shared entity interface: emit a
20
+ // load/list/create/update/remove row only for operations at least one active
21
+ // entity actually exposes — never document an operation no entity has.
22
+ const opUnion = new Set<string>()
23
+ entityList.forEach((e: any) => Object.keys(e.op || {})
24
+ .forEach((o: string) => { if (e.op[o] && e.op[o].active !== false) opUnion.add(o) }))
25
+ const opRowDefs: Record<string, string> = {
26
+ load: '| `load` | `(reqmatch, ctrl) throws -> Value` | Load a single entity by match criteria. Throws on error. |',
27
+ list: '| `list` | `(reqmatch, ctrl) throws -> Value` | List entities matching the criteria (a Value list). Throws on error. |',
28
+ create: '| `create` | `(reqdata, ctrl) throws -> Value` | Create a new entity. Throws on error. |',
29
+ update: '| `update` | `(reqdata, ctrl) throws -> Value` | Update an existing entity. Throws on error. |',
30
+ remove: '| `remove` | `(reqmatch, ctrl) throws -> Value` | Remove an entity. Throws on error. |',
31
+ }
32
+ const opRows = ['load', 'list', 'create', 'update', 'remove']
33
+ .filter((o) => opUnion.has(o)).map((o) => opRowDefs[o]).join('\n')
34
+
35
+ const apikeyOptionRow = isAuthActive(model)
36
+ ? '| `apikey` | `String` | API key for authentication. |\n'
37
+ : ''
38
+
39
+ Content(`### ${SDK}
40
+
41
+ \`\`\`swift
42
+ let client = ${SDK}(options)
43
+ \`\`\`
44
+
45
+ Creates a new SDK client. \`options\` is a \`VMap\` of \`Value\`.
46
+
47
+ | Option | Type | Description |
48
+ | --- | --- | --- |
49
+ ${apikeyOptionRow}| \`base\` | \`String\` | Base URL of the API server. |
50
+ | \`prefix\` | \`String\` | URL path prefix prepended to all requests. |
51
+ | \`suffix\` | \`String\` | URL path suffix appended to all requests. |
52
+ | \`feature\` | \`VMap\` | Feature activation flags. |
53
+ | \`extend\` | \`VList\` | Additional Feature instances to load. |
54
+ | \`system\` | \`VMap\` | System overrides (e.g. custom \`fetch\` function). |
55
+
56
+ ### testSDK
57
+
58
+ \`\`\`swift
59
+ let client = ${SDK}.testSDK(testopts, sdkopts)
60
+ \`\`\`
61
+
62
+ Creates a test-mode client with mock transport. Both arguments may be \`nil\`.
63
+
64
+ ### ${SDK} methods
65
+
66
+ | Method | Signature | Description |
67
+ | --- | --- | --- |
68
+ | \`optionsMap\` | \`() -> VMap\` | Deep copy of current SDK options. |
69
+ | \`getUtility\` | \`() -> Utility\` | Copy of the SDK utility object. |
70
+ | \`prepare\` | \`(fetchargs) throws -> VMap\` | Build an HTTP request definition without sending. Throws on error. |
71
+ | \`direct\` | \`(fetchargs) -> VMap\` | Build and send an HTTP request. Returns a result map (branch on \`ok\`). |
72
+ `)
73
+
74
+ each(entityList, (ent: any) => {
75
+ const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
76
+ Content(`| \`${ent.Name}\` | \`(entopts) -> ${EntityBase}\` | Create ${article} ${ent.Name} entity instance. |
77
+ `)
78
+ })
79
+
80
+ Content(`
81
+ ### Entity interface
82
+
83
+ All entities share the same interface.
84
+
85
+ | Method | Signature | Description |
86
+ | --- | --- | --- |
87
+ ${opRows}
88
+ | \`data\` | \`(newdata?) -> Value\` | Get or set entity data. |
89
+ | \`matchv\` | \`(newmatch?) -> Value\` | Get or set entity match criteria. |
90
+ | \`make\` | \`() -> Entity\` | Create a new instance with the same options. |
91
+ | \`getName\` | \`() -> String\` | Return the entity name. |
92
+
93
+ ### Result shape
94
+
95
+ Entity operations return the bare result data (a \`Value\` map for
96
+ single-entity ops, a \`Value\` list for \`list\`) and throw on error. Wrap
97
+ calls in \`do\`/\`catch\` to handle failures.
98
+
99
+ The \`direct()\` escape hatch never throws — it returns a result \`VMap\` you
100
+ branch on via \`result.entries["ok"]\`:
101
+
102
+ | Key | Type | Description |
103
+ | --- | --- | --- |
104
+ | \`ok\` | \`Bool\` | \`true\` if the HTTP status is 2xx. |
105
+ | \`status\` | \`Int\` | HTTP status code. |
106
+ | \`headers\` | \`VMap\` | Response headers. |
107
+ | \`data\` | \`Value\` | Parsed JSON response body. |
108
+
109
+ On error, \`ok\` is \`false\` and \`err\` contains the error value.
110
+
111
+ `)
112
+
113
+ // Entities summary
114
+ Content(`### Entities
115
+
116
+ `)
117
+ each(entityList, (ent: any) => {
118
+ const fields = ent.fields || []
119
+ const opnames = Object.keys(ent.op || {})
120
+ const ops = ent.op || {}
121
+ const points = each(ops).map((op: any) =>
122
+ op.points ? each(op.points) : []
123
+ ).flat()
124
+ const path = points.length > 0 ? (points[0] as any).orig || '' : ''
125
+
126
+ Content(`#### ${ent.Name}
127
+
128
+ | Field | Description |
129
+ | --- | --- |
130
+ `)
131
+ each(fields, (field: any) => {
132
+ Content(`| \`${field.name}\` | ${field.short || ''} |
133
+ `)
134
+ })
135
+
136
+ Content(`
137
+ Operations: ${opnames.map((n: string) => n.charAt(0).toUpperCase() + n.slice(1)).join(', ')}.
138
+
139
+ API path: \`${path}\`
140
+
141
+ `)
142
+ })
143
+
144
+ })
145
+
146
+
147
+ export {
148
+ ReadmeModel
149
+ }