@voxgig/sdkgen 1.3.13 → 1.3.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/action.js.map +1 -1
  3. package/dist/action/feature.js.map +1 -1
  4. package/dist/action/target.js.map +1 -1
  5. package/dist/cmp/AgentGuide.js.map +1 -1
  6. package/dist/cmp/AgentGuideContent.js.map +1 -1
  7. package/dist/cmp/AgentGuideFeature.js.map +1 -1
  8. package/dist/cmp/AgentGuideTop.js.map +1 -1
  9. package/dist/cmp/Changelog.js.map +1 -1
  10. package/dist/cmp/Deploy.js.map +1 -1
  11. package/dist/cmp/Entity.js.map +1 -1
  12. package/dist/cmp/Feature.js.map +1 -1
  13. package/dist/cmp/FeatureHook.js.map +1 -1
  14. package/dist/cmp/License.js.map +1 -1
  15. package/dist/cmp/Main.js.map +1 -1
  16. package/dist/cmp/Readme.js.map +1 -1
  17. package/dist/cmp/ReadmeEntity.js.map +1 -1
  18. package/dist/cmp/ReadmeErrors.js +1 -1
  19. package/dist/cmp/ReadmeErrors.js.map +1 -1
  20. package/dist/cmp/ReadmeExplanation.js +2 -2
  21. package/dist/cmp/ReadmeExplanation.js.map +1 -1
  22. package/dist/cmp/ReadmeHowto.js.map +1 -1
  23. package/dist/cmp/ReadmeInstall.js.map +1 -1
  24. package/dist/cmp/ReadmeIntro.js.map +1 -1
  25. package/dist/cmp/ReadmeModel.js.map +1 -1
  26. package/dist/cmp/ReadmeOptions.js.map +1 -1
  27. package/dist/cmp/ReadmeQuick.js.map +1 -1
  28. package/dist/cmp/ReadmeRef.js.map +1 -1
  29. package/dist/cmp/ReadmeTop.js +1 -1
  30. package/dist/cmp/ReadmeTop.js.map +1 -1
  31. package/dist/cmp/Security.js.map +1 -1
  32. package/dist/cmp/Test.js.map +1 -1
  33. package/dist/helpers/buildIdNames.js.map +1 -1
  34. package/dist/helpers/canonType.d.ts +3 -2
  35. package/dist/helpers/canonType.js +107 -24
  36. package/dist/helpers/canonType.js.map +1 -1
  37. package/dist/helpers/collectDeps.js.map +1 -1
  38. package/dist/helpers/getMatchEntries.js.map +1 -1
  39. package/dist/helpers/naming.d.ts +5 -1
  40. package/dist/helpers/naming.js +37 -0
  41. package/dist/helpers/naming.js.map +1 -1
  42. package/dist/helpers/opExample.d.ts +1 -1
  43. package/dist/helpers/opExample.js +37 -20
  44. package/dist/helpers/opExample.js.map +1 -1
  45. package/dist/helpers/opShape.d.ts +3 -1
  46. package/dist/helpers/opShape.js +91 -3
  47. package/dist/helpers/opShape.js.map +1 -1
  48. package/dist/helpers/packageMeta.js.map +1 -1
  49. package/dist/sdkgen.d.ts +3 -3
  50. package/dist/sdkgen.js +11 -1
  51. package/dist/sdkgen.js.map +1 -1
  52. package/dist/tsconfig.tsbuildinfo +1 -1
  53. package/dist/types.js.map +1 -1
  54. package/dist/utility.js.map +1 -1
  55. package/package.json +7 -6
  56. package/project/.sdk/model/target/haskell.aontu +6 -3
  57. package/project/.sdk/model/target/zig.aontu +12 -2
  58. package/project/.sdk/src/cmp/c/Config_c.ts +16 -4
  59. package/project/.sdk/src/cmp/c/EntityTypes_c.ts +168 -0
  60. package/project/.sdk/src/cmp/c/Main_c.ts +4 -0
  61. package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +192 -0
  62. package/project/.sdk/src/cmp/c/ReadmeExamplesTest_c.ts +152 -0
  63. package/project/.sdk/src/cmp/c/ReadmeExplanation_c.ts +55 -0
  64. package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +168 -0
  65. package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +52 -0
  66. package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +67 -0
  67. package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +151 -0
  68. package/project/.sdk/src/cmp/c/ReadmeOptions_c.ts +65 -0
  69. package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +225 -0
  70. package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +398 -0
  71. package/project/.sdk/src/cmp/c/ReadmeTopHowto_c.ts +24 -0
  72. package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +104 -0
  73. package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +86 -0
  74. package/project/.sdk/src/cmp/c/TestEntity_c.ts +10 -0
  75. package/project/.sdk/src/cmp/c/Test_c.ts +4 -0
  76. package/project/.sdk/src/cmp/c/utility_c.ts +8 -2
  77. package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +182 -0
  78. package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +54 -0
  79. package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +44 -0
  80. package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +144 -0
  81. package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +51 -0
  82. package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +66 -0
  83. package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +156 -0
  84. package/project/.sdk/src/cmp/clojure/ReadmeOptions_clojure.ts +61 -0
  85. package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +210 -0
  86. package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +409 -0
  87. package/project/.sdk/src/cmp/clojure/ReadmeTopHowto_clojure.ts +24 -0
  88. package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +98 -0
  89. package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +78 -0
  90. package/project/.sdk/src/cmp/clojure/TestDirect_clojure.ts +58 -0
  91. package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +79 -0
  92. package/project/.sdk/src/cmp/clojure/Test_clojure.ts +21 -65
  93. package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +174 -0
  94. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +5 -0
  95. package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +170 -0
  96. package/project/.sdk/src/cmp/cpp/ReadmeExplanation_cpp.ts +45 -0
  97. package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +139 -0
  98. package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +42 -0
  99. package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +69 -0
  100. package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +155 -0
  101. package/project/.sdk/src/cmp/cpp/ReadmeOptions_cpp.ts +62 -0
  102. package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +234 -0
  103. package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +387 -0
  104. package/project/.sdk/src/cmp/cpp/ReadmeTopHowto_cpp.ts +24 -0
  105. package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +95 -0
  106. package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +70 -0
  107. package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +5 -1
  108. package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +196 -0
  109. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
  110. package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
  111. package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +198 -0
  112. package/project/.sdk/src/cmp/csharp/ReadmeExplanation_csharp.ts +42 -0
  113. package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +168 -0
  114. package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +41 -0
  115. package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +65 -0
  116. package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +148 -0
  117. package/project/.sdk/src/cmp/csharp/ReadmeOptions_csharp.ts +60 -0
  118. package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +219 -0
  119. package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +390 -0
  120. package/project/.sdk/src/cmp/csharp/ReadmeTopHowto_csharp.ts +25 -0
  121. package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +92 -0
  122. package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +77 -0
  123. package/project/.sdk/src/cmp/csharp/Test_csharp.ts +4 -0
  124. package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -29
  125. package/project/.sdk/src/cmp/dart/Entity_dart.ts +8 -0
  126. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +166 -0
  127. package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +238 -0
  128. package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +53 -0
  129. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +151 -0
  130. package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +59 -0
  131. package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +65 -0
  132. package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +151 -0
  133. package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +63 -0
  134. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +214 -0
  135. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +381 -0
  136. package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +24 -0
  137. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +95 -0
  138. package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +78 -0
  139. package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +52 -0
  140. package/project/.sdk/src/cmp/dart/Test_dart.ts +6 -0
  141. package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +1 -3
  142. package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +1 -40
  143. package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +3 -3
  144. package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +165 -0
  145. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +4 -0
  146. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
  147. package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +163 -0
  148. package/project/.sdk/src/cmp/elixir/ReadmeExamplesTest_elixir.ts +126 -0
  149. package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +55 -0
  150. package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +149 -0
  151. package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +67 -0
  152. package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +66 -0
  153. package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +150 -0
  154. package/project/.sdk/src/cmp/elixir/ReadmeOptions_elixir.ts +62 -0
  155. package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +198 -0
  156. package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +333 -0
  157. package/project/.sdk/src/cmp/elixir/ReadmeTopHowto_elixir.ts +26 -0
  158. package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +79 -0
  159. package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +68 -0
  160. package/project/.sdk/src/cmp/elixir/Test_elixir.ts +4 -0
  161. package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +4 -0
  162. package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +4 -0
  163. package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +4 -0
  164. package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -0
  165. package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +4 -0
  166. package/project/.sdk/src/cmp/elixir/utility_elixir.ts +32 -0
  167. package/project/.sdk/src/cmp/go/EntityTypes_go.ts +12 -3
  168. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
  169. package/project/.sdk/src/cmp/go/TestEntity_go.ts +10 -3
  170. package/project/.sdk/src/cmp/go/utility_go.ts +3 -2
  171. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +240 -43
  172. package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
  173. package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +191 -30
  174. package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
  175. package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +125 -0
  176. package/project/.sdk/src/cmp/haskell/ReadmeExplanation_haskell.ts +48 -0
  177. package/project/.sdk/src/cmp/haskell/ReadmeHowto_haskell.ts +168 -0
  178. package/project/.sdk/src/cmp/haskell/ReadmeInstall_haskell.ts +51 -0
  179. package/project/.sdk/src/cmp/haskell/ReadmeIntro_haskell.ts +67 -0
  180. package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +160 -0
  181. package/project/.sdk/src/cmp/haskell/ReadmeOptions_haskell.ts +74 -0
  182. package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +237 -0
  183. package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +405 -0
  184. package/project/.sdk/src/cmp/haskell/ReadmeTopHowto_haskell.ts +31 -0
  185. package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +104 -0
  186. package/project/.sdk/src/cmp/haskell/ReadmeTopTest_haskell.ts +80 -0
  187. package/project/.sdk/src/cmp/haskell/Test_haskell.ts +27 -2
  188. package/project/.sdk/src/cmp/java/EntityTypes_java.ts +207 -0
  189. package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
  190. package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
  191. package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +186 -0
  192. package/project/.sdk/src/cmp/java/ReadmeExplanation_java.ts +46 -0
  193. package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +156 -0
  194. package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +52 -0
  195. package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +66 -0
  196. package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +150 -0
  197. package/project/.sdk/src/cmp/java/ReadmeOptions_java.ts +61 -0
  198. package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +230 -0
  199. package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +388 -0
  200. package/project/.sdk/src/cmp/java/ReadmeTopHowto_java.ts +23 -0
  201. package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +103 -0
  202. package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +77 -0
  203. package/project/.sdk/src/cmp/java/Test_java.ts +4 -0
  204. package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -8
  205. package/project/.sdk/src/cmp/js/MainEntity_js.ts +4 -2
  206. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +4 -4
  207. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +13 -4
  208. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +4 -4
  209. package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +5 -5
  210. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +4 -4
  211. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +4 -4
  212. package/project/.sdk/src/cmp/js/TestDirect_js.ts +6 -5
  213. package/project/.sdk/src/cmp/js/TestEntity_js.ts +7 -2
  214. package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +0 -31
  215. package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +201 -0
  216. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
  217. package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
  218. package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +173 -0
  219. package/project/.sdk/src/cmp/kotlin/ReadmeExplanation_kotlin.ts +47 -0
  220. package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +154 -0
  221. package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +50 -0
  222. package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +66 -0
  223. package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +150 -0
  224. package/project/.sdk/src/cmp/kotlin/ReadmeOptions_kotlin.ts +61 -0
  225. package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +230 -0
  226. package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +387 -0
  227. package/project/.sdk/src/cmp/kotlin/ReadmeTopHowto_kotlin.ts +23 -0
  228. package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +104 -0
  229. package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +77 -0
  230. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +4 -0
  231. package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
  232. package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -5
  233. package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
  234. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +2 -2
  235. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -1
  236. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +3 -3
  237. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +2 -2
  238. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +2 -2
  239. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +7 -2
  240. package/project/.sdk/src/cmp/lua/Test_lua.ts +1 -1
  241. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +2 -0
  242. package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +180 -0
  243. package/project/.sdk/src/cmp/ocaml/ReadmeExamplesTest_ocaml.ts +111 -0
  244. package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +46 -0
  245. package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +147 -0
  246. package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +44 -0
  247. package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +68 -0
  248. package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +155 -0
  249. package/project/.sdk/src/cmp/ocaml/ReadmeOptions_ocaml.ts +59 -0
  250. package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +205 -0
  251. package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +402 -0
  252. package/project/.sdk/src/cmp/ocaml/ReadmeTopHowto_ocaml.ts +25 -0
  253. package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +86 -0
  254. package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +79 -0
  255. package/project/.sdk/src/cmp/ocaml/Test_ocaml.ts +4 -0
  256. package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +181 -0
  257. package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +354 -0
  258. package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +43 -0
  259. package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +149 -0
  260. package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +47 -0
  261. package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +66 -0
  262. package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +150 -0
  263. package/project/.sdk/src/cmp/perl/ReadmeOptions_perl.ts +59 -0
  264. package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +216 -0
  265. package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +399 -0
  266. package/project/.sdk/src/cmp/perl/ReadmeTopHowto_perl.ts +24 -0
  267. package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +91 -0
  268. package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +83 -0
  269. package/project/.sdk/src/cmp/perl/Test_perl.ts +4 -0
  270. package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -6
  271. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
  272. package/project/.sdk/src/cmp/php/TestEntity_php.ts +7 -2
  273. package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -7
  274. package/project/.sdk/src/cmp/py/Entity_py.ts +2 -10
  275. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +2 -2
  276. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +8 -3
  277. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +3 -3
  278. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +2 -2
  279. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +2 -2
  280. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +2 -2
  281. package/project/.sdk/src/cmp/py/TestEntity_py.ts +7 -2
  282. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +19 -5
  283. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +2 -2
  284. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +8 -3
  285. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +3 -3
  286. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +2 -2
  287. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
  288. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +2 -2
  289. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +7 -2
  290. package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +4 -0
  291. package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +152 -0
  292. package/project/.sdk/src/cmp/rust/Entity_rust.ts +1 -1
  293. package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
  294. package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
  295. package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +132 -0
  296. package/project/.sdk/src/cmp/rust/ReadmeExplanation_rust.ts +44 -0
  297. package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +142 -0
  298. package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +49 -0
  299. package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +66 -0
  300. package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +153 -0
  301. package/project/.sdk/src/cmp/rust/ReadmeOptions_rust.ts +60 -0
  302. package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +212 -0
  303. package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +384 -0
  304. package/project/.sdk/src/cmp/rust/ReadmeTopHowto_rust.ts +24 -0
  305. package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +95 -0
  306. package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +81 -0
  307. package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +10 -0
  308. package/project/.sdk/src/cmp/rust/Test_rust.ts +4 -0
  309. package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +202 -0
  310. package/project/.sdk/src/cmp/scala/Main_scala.ts +6 -0
  311. package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +175 -0
  312. package/project/.sdk/src/cmp/scala/ReadmeExamplesTest_scala.ts +163 -0
  313. package/project/.sdk/src/cmp/scala/ReadmeExplanation_scala.ts +49 -0
  314. package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +155 -0
  315. package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +58 -0
  316. package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +66 -0
  317. package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +150 -0
  318. package/project/.sdk/src/cmp/scala/ReadmeOptions_scala.ts +61 -0
  319. package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +230 -0
  320. package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +388 -0
  321. package/project/.sdk/src/cmp/scala/ReadmeTopHowto_scala.ts +23 -0
  322. package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +104 -0
  323. package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +77 -0
  324. package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +38 -10
  325. package/project/.sdk/src/cmp/scala/Test_scala.ts +8 -0
  326. package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +152 -0
  327. package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
  328. package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
  329. package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +170 -0
  330. package/project/.sdk/src/cmp/swift/ReadmeExplanation_swift.ts +49 -0
  331. package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +159 -0
  332. package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +58 -0
  333. package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +64 -0
  334. package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +149 -0
  335. package/project/.sdk/src/cmp/swift/ReadmeOptions_swift.ts +62 -0
  336. package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +232 -0
  337. package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +387 -0
  338. package/project/.sdk/src/cmp/swift/ReadmeTopHowto_swift.ts +24 -0
  339. package/project/.sdk/src/cmp/swift/ReadmeTopQuick_swift.ts +105 -0
  340. package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +77 -0
  341. package/project/.sdk/src/cmp/swift/Test_swift.ts +4 -0
  342. package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -5
  343. package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +4 -2
  344. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +4 -4
  345. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +14 -4
  346. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +29 -11
  347. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +5 -5
  348. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +4 -4
  349. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +4 -4
  350. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +13 -11
  351. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +18 -2
  352. package/project/.sdk/src/cmp/zig/Config_zig.ts +22 -4
  353. package/project/.sdk/src/cmp/zig/Entity_zig.ts +1 -1
  354. package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
  355. package/project/.sdk/src/cmp/zig/Package_zig.ts +53 -0
  356. package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +188 -0
  357. package/project/.sdk/src/cmp/zig/ReadmeExamplesTest_zig.ts +58 -0
  358. package/project/.sdk/src/cmp/zig/ReadmeExplanation_zig.ts +45 -0
  359. package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +143 -0
  360. package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +54 -0
  361. package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +66 -0
  362. package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +152 -0
  363. package/project/.sdk/src/cmp/zig/ReadmeOptions_zig.ts +60 -0
  364. package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +211 -0
  365. package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +400 -0
  366. package/project/.sdk/src/cmp/zig/ReadmeTopHowto_zig.ts +24 -0
  367. package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +96 -0
  368. package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +82 -0
  369. package/project/.sdk/src/cmp/zig/TestDirect_zig.ts +66 -0
  370. package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +79 -0
  371. package/project/.sdk/src/cmp/zig/Test_zig.ts +17 -61
  372. package/project/.sdk/tm/clojure/src/voxgig/struct.clj +1 -1
  373. package/project/.sdk/tm/cpp/test/feature_test.cpp +19 -0
  374. package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +4 -1
  375. package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +7 -1
  376. package/project/.sdk/tm/elixir/lib/utility/struct/voxgig_struct.ex +1 -1
  377. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +7 -1
  378. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +3 -1
  379. package/project/.sdk/tm/haskell/test/Harness.hs +8 -3
  380. package/project/.sdk/tm/js/Makefile +1 -1
  381. package/project/.sdk/tm/js/jsconfig.json +12 -0
  382. package/project/.sdk/tm/ocaml/Makefile +5 -1
  383. package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
  384. package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
  385. package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
  386. package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
  387. package/project/.sdk/tm/ts/Makefile +1 -1
  388. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
  389. package/src/cmp/ReadmeErrors.ts +2 -2
  390. package/src/cmp/ReadmeExplanation.ts +3 -3
  391. package/src/cmp/ReadmeTop.ts +2 -2
  392. package/src/helpers/canonType.ts +116 -25
  393. package/src/helpers/naming.ts +47 -0
  394. package/src/helpers/opExample.ts +43 -20
  395. package/src/helpers/opShape.ts +102 -3
  396. package/src/sdkgen.ts +12 -2
  397. package/src/tsconfig.json +2 -0
  398. package/project/.sdk/tm/zig/build.zig.zon +0 -11
@@ -0,0 +1,198 @@
1
+
2
+ import { cmp, File, Content } from '@voxgig/sdkgen'
3
+
4
+
5
+ // Emits test/ReadmeExamplesTest.cs — an xUnit PRESENCE + STRUCTURE gate over
6
+ // every ```csharp fenced block in the repository ROOT README.md, the
7
+ // per-language csharp/README.md, AND the per-language csharp/REFERENCE.md.
8
+ //
9
+ // SCOPE NOTE (deliberate, documented): the Python/TS/Go equivalents EXECUTE and
10
+ // type-check every documented block. That is infeasible here — the generated
11
+ // C# SDK targets the .NET BCL only (no Roslyn scripting dependency), so a test
12
+ // project cannot compile-and-run arbitrary doc snippets at test time without a
13
+ // dependency the target explicitly forbids. This gate therefore guarantees the
14
+ // weaker-but-real invariant that keeps the docs honest as the generator
15
+ // evolves:
16
+ // 1. every doc exists and contains at least one ```csharp block (nothing was
17
+ // dropped);
18
+ // 2. every ```csharp block is structurally well-formed — its braces,
19
+ // parentheses and brackets balance (catches a truncated or malformed
20
+ // generated snippet), and it references the SDK/client surface so it is a
21
+ // real example, not an empty fence.
22
+ // A per-doc summary line makes the coverage visible in the test output.
23
+ //
24
+ // The emitted C# is written WITHOUT literal backticks (the fence marker is
25
+ // built at runtime as new string((char)96, 3)) so this TS template literal
26
+ // stays clean — the only interpolations are the SDK class name and the
27
+ // generated entity map.
28
+ const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
29
+ const { target, ctx$: { model } } = props
30
+
31
+ const Name = model.const.Name
32
+
33
+ File({ name: 'ReadmeExamplesTest.' + target.ext }, () => {
34
+ Content(`// ${Name} SDK — documentation csharp-examples PRESENCE + STRUCTURE gate.
35
+ //
36
+ // GUARANTEE (see ReadmeExamplesTest_csharp.ts for why this is a structure gate
37
+ // and not an execute gate): every csharp example in the docs is accounted for.
38
+ // This xUnit class is a completeness gate over every ${'```'}csharp fenced code
39
+ // block in three documents:
40
+ // - the repository ROOT README.md (two directories above this test file),
41
+ // - the per-language csharp/README.md,
42
+ // - the per-language csharp/REFERENCE.md.
43
+ //
44
+ // Checks, PER DOCUMENT:
45
+ // 1. PRESENCE: the doc exists and holds at least one csharp block.
46
+ // 2. STRUCTURE: every csharp block's braces / parens / brackets balance, so a
47
+ // truncated or malformed generated snippet fails loudly.
48
+ //
49
+ // GENERATED by @voxgig/sdkgen — do not edit by hand.
50
+
51
+ using System.Runtime.CompilerServices;
52
+
53
+ using Xunit;
54
+
55
+ namespace ${Name}Sdk.Test;
56
+
57
+ public class ReadmeExamplesTest
58
+ {
59
+ // The .cs source directory, resolved at compile time — robust to the test
60
+ // runner's working directory.
61
+ private static string SourceDir([CallerFilePath] string path = "")
62
+ => System.IO.Path.GetDirectoryName(path)!;
63
+
64
+ private static string CsharpRoot()
65
+ => System.IO.Path.GetFullPath(System.IO.Path.Combine(SourceDir(), ".."));
66
+
67
+ private static (string label, string path)[] Docs()
68
+ {
69
+ var root = CsharpRoot();
70
+ return new[]
71
+ {
72
+ ("root README", System.IO.Path.GetFullPath(
73
+ System.IO.Path.Combine(root, "..", "README.md"))),
74
+ ("csharp README.md", System.IO.Path.Combine(root, "README.md")),
75
+ ("csharp REFERENCE.md", System.IO.Path.Combine(root, "REFERENCE.md")),
76
+ };
77
+ }
78
+
79
+ // Extract every csharp fenced block. Split on the triple-backtick fence:
80
+ // odd-indexed segments are the inside of a fenced block (info string on the
81
+ // first line, then the code). Only blocks whose info string is exactly
82
+ // "csharp" are returned.
83
+ private static List<string> CsharpBlocks(string text)
84
+ {
85
+ var fence = new string((char)96, 3);
86
+ var parts = text.Split(fence);
87
+ var blocks = new List<string>();
88
+ for (var i = 1; i < parts.Length; i += 2)
89
+ {
90
+ var seg = parts[i];
91
+ var nl = seg.IndexOf('\\n');
92
+ var info = (nl < 0 ? seg : seg.Substring(0, nl)).Trim();
93
+ if (info == "csharp")
94
+ {
95
+ blocks.Add(nl < 0 ? "" : seg.Substring(nl + 1));
96
+ }
97
+ }
98
+ return blocks;
99
+ }
100
+
101
+ private static string ReadDoc(string path, string label)
102
+ {
103
+ Assert.True(System.IO.File.Exists(path), label + " not found: " + path);
104
+ return System.IO.File.ReadAllText(path);
105
+ }
106
+
107
+ // True when every open/close delimiter balances (ignores the subtlety of
108
+ // delimiters inside string literals — a generated snippet never nests an
109
+ // unbalanced delimiter in a string, and this catches truncation).
110
+ private static bool Balanced(string block)
111
+ {
112
+ var stack = new Stack<char>();
113
+ var pairs = new Dictionary<char, char> { ['('] = ')', ['['] = ']', ['{'] = '}' };
114
+ var closers = new HashSet<char> { ')', ']', '}' };
115
+ foreach (var ch in block)
116
+ {
117
+ if (pairs.ContainsKey(ch))
118
+ {
119
+ stack.Push(pairs[ch]);
120
+ }
121
+ else if (closers.Contains(ch))
122
+ {
123
+ if (stack.Count == 0 || stack.Pop() != ch)
124
+ {
125
+ return false;
126
+ }
127
+ }
128
+ }
129
+ return stack.Count == 0;
130
+ }
131
+
132
+ [Fact]
133
+ public void RootReadmeHasCsharpBlocks()
134
+ {
135
+ var doc = Docs()[0];
136
+ var blocks = CsharpBlocks(ReadDoc(doc.path, doc.label));
137
+ Assert.True(blocks.Count > 0,
138
+ "expected at least one csharp block in " + doc.label);
139
+ }
140
+
141
+ [Fact]
142
+ public void LocalReadmeHasCsharpBlocks()
143
+ {
144
+ var doc = Docs()[1];
145
+ var blocks = CsharpBlocks(ReadDoc(doc.path, doc.label));
146
+ Assert.True(blocks.Count > 0,
147
+ "expected at least one csharp block in " + doc.label);
148
+ }
149
+
150
+ [Fact]
151
+ public void ReferenceHasCsharpBlocks()
152
+ {
153
+ var doc = Docs()[2];
154
+ var blocks = CsharpBlocks(ReadDoc(doc.path, doc.label));
155
+ Assert.True(blocks.Count > 0,
156
+ "expected at least one csharp block in " + doc.label);
157
+ }
158
+
159
+ [Fact]
160
+ public void AllCsharpBlocksAreStructurallyBalanced()
161
+ {
162
+ var failures = new List<string>();
163
+ foreach (var doc in Docs())
164
+ {
165
+ if (!System.IO.File.Exists(doc.path))
166
+ {
167
+ continue;
168
+ }
169
+ var blocks = CsharpBlocks(System.IO.File.ReadAllText(doc.path));
170
+ var balanced = 0;
171
+ for (var i = 0; i < blocks.Count; i++)
172
+ {
173
+ if (Balanced(blocks[i]))
174
+ {
175
+ balanced++;
176
+ }
177
+ else
178
+ {
179
+ failures.Add(doc.label + " csharp block #" + i +
180
+ " has unbalanced delimiters:\\n\\n" + blocks[i]);
181
+ }
182
+ }
183
+ System.Console.WriteLine(
184
+ "[readme-examples] " + doc.label + " csharp blocks: total=" +
185
+ blocks.Count + " balanced=" + balanced);
186
+ }
187
+ Assert.True(failures.Count == 0,
188
+ string.Join("\\n\\n", failures));
189
+ }
190
+ }
191
+ `)
192
+ })
193
+ })
194
+
195
+
196
+ export {
197
+ ReadmeExamplesTest
198
+ }
@@ -0,0 +1,42 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+
5
+ const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
6
+ const { target, ctx$: { model } } = props
7
+
8
+ Content(`### Data as dictionaries
9
+
10
+ The C# SDK uses a loose object model — \`Dictionary<string, object?>\`
11
+ throughout — rather than a bespoke typed class per endpoint. This mirrors
12
+ the dynamic nature of the API and keeps the SDK flexible: no regeneration is
13
+ needed when the API schema changes.
14
+
15
+ Use \`Helpers.ToMapAny(value)\` to safely coerce a value to a
16
+ \`Dictionary<string, object?>\`. A \`${model.const.Name}Types.cs\` module of
17
+ reference \`record\` types is also generated for editor documentation.
18
+
19
+ ### Project structure
20
+
21
+ \`\`\`
22
+ csharp/
23
+ ├── ${model.const.Name}SDK.csproj -- Library project (compiles everything except test/)
24
+ ├── core/ -- Main SDK client, config, entity base, error type
25
+ ├── entity/ -- Entity implementations
26
+ ├── feature/ -- Built-in features (Base, Test, Log, ...)
27
+ ├── utility/ -- Utility functions and the vendored struct library
28
+ └── test/ -- xUnit test suites
29
+ \`\`\`
30
+
31
+ The main client class (\`${model.const.Name}SDK\`, namespace
32
+ \`${model.const.Name}Sdk\`) exposes the entity accessors. Reference entity or
33
+ utility types directly only when needed.
34
+
35
+ `)
36
+
37
+ })
38
+
39
+
40
+ export {
41
+ ReadmeExplanation
42
+ }
@@ -0,0 +1,168 @@
1
+
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ nom,
8
+ } from '@voxgig/apidef'
9
+
10
+ import { csVarName } from './utility_csharp'
11
+
12
+
13
+ // A type-correct C# literal for a field's canonical type.
14
+ function csLit(type: any): string {
15
+ const k = canonKey(type)
16
+ if ('INTEGER' === k) return '1L'
17
+ if ('NUMBER' === k) return '1.0'
18
+ if ('BOOLEAN' === k) return 'true'
19
+ if ('ARRAY' === k) return 'new List<object?>()'
20
+ if ('OBJECT' === k) return 'new Dictionary<string, object?>()'
21
+ return '"example"'
22
+ }
23
+
24
+
25
+ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
26
+ const { target, ctx$: { model } } = props
27
+
28
+ const entity = getModelPath(model, `main.${KIT}.entity`)
29
+ // Pick an entity with a real op (prefer a read op). primaryOp is null only
30
+ // when NO entity exposes any op (a direct()-only SDK).
31
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
32
+ const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
33
+ const eVar = exampleEntity ? csVarName(exampleEntity.name) : 'entity'
34
+ // Model-driven id key: null when the entity has no id-like field, so a
35
+ // match op takes an empty match.
36
+ const idF = exampleEntity ? entityIdField(exampleEntity) : null
37
+ const opMethod = primaryOp ? primaryOp.charAt(0).toUpperCase() + primaryOp.slice(1) : ''
38
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
39
+ let testArg = 'null'
40
+ if (exampleEntity && isMatchOp) {
41
+ testArg = idF ? `new Dictionary<string, object?> { ["${idF}"] = "test01" }` : 'null'
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 = `new Dictionary<string, object?> {${chosen.map((it: any) =>
48
+ ` ["${it.name}"] = ${csLit(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 raise on error.
55
+ var ${eVar} = client.${eName}().${opMethod}(${testArg});
56
+ // ${eVar} holds the mock response record
57
+ Console.WriteLine(${eVar});`
58
+ : `var result = client.Direct(new Dictionary<string, object?>
59
+ {
60
+ ["path"] = "/api/resource",
61
+ ["method"] = "GET",
62
+ });
63
+ Console.WriteLine(result);`
64
+
65
+ const apikeyEnvLine = isAuthActive(model)
66
+ ? `\n${envName(model)}_APIKEY=<your-key>`
67
+ : ''
68
+
69
+ Content(`### Make a direct HTTP request
70
+
71
+ For endpoints not covered by entity methods:
72
+
73
+ \`\`\`csharp
74
+ var result = client.Direct(new Dictionary<string, object?>
75
+ {
76
+ ["path"] = "/api/resource/{id}",
77
+ ["method"] = "GET",
78
+ ["params"] = new Dictionary<string, object?> { ["id"] = "example" },
79
+ });
80
+
81
+ if (Equals(result["ok"], true))
82
+ {
83
+ Console.WriteLine(result["status"]); // 200
84
+ Console.WriteLine(result["data"]); // response body
85
+ }
86
+ else
87
+ {
88
+ // A non-2xx response carries status + data (the error body); a
89
+ // transport-level failure carries err instead. Only one is present, so
90
+ // read both with TryGetValue rather than indexing a key that may be absent.
91
+ result.TryGetValue("status", out var status);
92
+ result.TryGetValue("err", out var err);
93
+ Console.WriteLine($"{status} {err}");
94
+ }
95
+ \`\`\`
96
+
97
+ ### Prepare a request without sending it
98
+
99
+ \`\`\`csharp
100
+ // Prepare() returns the fetch definition and raises on error.
101
+ var fetchdef = client.Prepare(new Dictionary<string, object?>
102
+ {
103
+ ["path"] = "/api/resource/{id}",
104
+ ["method"] = "DELETE",
105
+ ["params"] = new Dictionary<string, object?> { ["id"] = "example" },
106
+ });
107
+
108
+ Console.WriteLine(fetchdef["url"]);
109
+ Console.WriteLine(fetchdef["method"]);
110
+ Console.WriteLine(fetchdef["headers"]);
111
+ \`\`\`
112
+
113
+ ### Use test mode
114
+
115
+ Create a mock client for unit testing — no server required:
116
+
117
+ \`\`\`csharp
118
+ var client = ${model.const.Name}SDK.TestSDK(null, null);
119
+
120
+ ${testModeExample}
121
+ \`\`\`
122
+
123
+ ### Use a custom fetch function
124
+
125
+ Replace the HTTP transport with your own delegate:
126
+
127
+ \`\`\`csharp
128
+ Func<string, Dictionary<string, object?>, Dictionary<string, object?>> mockFetch =
129
+ (url, init) => new Dictionary<string, object?>
130
+ {
131
+ ["status"] = 200,
132
+ ["statusText"] = "OK",
133
+ ["headers"] = new Dictionary<string, object?>(),
134
+ ["json"] = (Func<object?>)(() => new Dictionary<string, object?> { ["id"] = "mock01" }),
135
+ };
136
+
137
+ var client = new ${model.const.Name}SDK(new Dictionary<string, object?>
138
+ {
139
+ ["base"] = "http://localhost:8080",
140
+ ["system"] = new Dictionary<string, object?>
141
+ {
142
+ ["fetch"] = mockFetch,
143
+ },
144
+ });
145
+ \`\`\`
146
+
147
+ ### Run live tests
148
+
149
+ Create a \`.env.local\` file at the project root:
150
+
151
+ \`\`\`
152
+ ${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
153
+ \`\`\`
154
+
155
+ Then run:
156
+
157
+ \`\`\`bash
158
+ cd csharp && dotnet test
159
+ \`\`\`
160
+
161
+ `)
162
+
163
+ })
164
+
165
+
166
+ export {
167
+ ReadmeHowto
168
+ }
@@ -0,0 +1,41 @@
1
+
2
+ import { cmp, Content, installCommand, isPublished, repoInfo } from '@voxgig/sdkgen'
3
+
4
+
5
+ const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
6
+ const { target, ctx$ } = props
7
+ const { model } = ctx$
8
+
9
+ if (isPublished(model, target.name)) {
10
+ Content(`\`\`\`bash
11
+ ${installCommand(model, target.name)}
12
+ \`\`\`
13
+
14
+ Or add a project reference to a source checkout:
15
+
16
+ \`\`\`bash
17
+ dotnet add reference ../${model.const.Name}SDK/${model.const.Name}SDK.csproj
18
+ \`\`\`
19
+
20
+ `)
21
+ return
22
+ }
23
+
24
+ // Publish pending: not yet on NuGet. Install from the git release tag or
25
+ // from a local source checkout.
26
+ const { releasesUrl } = repoInfo(model)
27
+ Content(`This package is not yet published to NuGet. Install it from the GitHub
28
+ release tag (\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl})) or
29
+ from a source checkout — build the library and add a project reference:
30
+
31
+ \`\`\`bash
32
+ cd csharp && dotnet build ${model.const.Name}SDK.csproj
33
+ \`\`\`
34
+
35
+ `)
36
+ })
37
+
38
+
39
+ export {
40
+ ReadmeInstall
41
+ }
@@ -0,0 +1,65 @@
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 following idiomatic C# conventions.
21
+
22
+ `)
23
+
24
+ // Emphasise the entity-oriented design: the SDK surfaces the API as
25
+ // capitalised, semantic Entities with a small, uniform verb set rather
26
+ // than raw URL paths and query strings. The example entity name is
27
+ // derived from the model, never hardcoded.
28
+ const entity = getModelPath(model, `main.${KIT}.entity`)
29
+ const exampleEntity = Object.values(entity || {})
30
+ .find((e: any) => e.active !== false) as any
31
+ const example = exampleEntity
32
+ ? `for example \`client.${nom(exampleEntity, 'Name')}()\` — each`
33
+ : 'each'
34
+
35
+ // Model-driven op list — only the operations the active entities actually
36
+ // expose (a read-only entity has just list+load); never claim
37
+ // create/update/remove exist when no entity has them.
38
+ const CANON_OPS = ['list', 'load', 'create', 'update', 'remove']
39
+ const opSet = new Set<string>()
40
+ Object.values(entity || {}).forEach((e: any) => {
41
+ if (!e || e.active === false) return
42
+ Object.keys(e.op || {}).forEach((o: string) => {
43
+ if (e.op[o] && e.op[o].active !== false) opSet.add(o)
44
+ })
45
+ })
46
+ const opNames = CANON_OPS.filter((o) => opSet.has(o))
47
+ .concat([...opSet].filter((o) => !CANON_OPS.includes(o)))
48
+ const opList = (opNames.length ? opNames : ['list', 'load'])
49
+ .map((o) => '`' + o + '`').join(', ')
50
+
51
+ Content(`The SDK exposes the API as capitalised, semantic **Entities** — ${example}
52
+ carrying a small, uniform set of operations (${opList}) instead of raw URL
53
+ paths and query strings. You work with named resources and verbs, which
54
+ keeps the cognitive load low.
55
+
56
+ > Other languages, the CLI, and MCP server live alongside this one — see
57
+ > the [top-level README](../README.md).
58
+
59
+ `)
60
+ })
61
+
62
+
63
+ export {
64
+ ReadmeIntro
65
+ }
@@ -0,0 +1,148 @@
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 entity = getModelPath(model, `main.${KIT}.entity`)
14
+ const entityList = each(entity).filter((e: any) => e.active !== false)
15
+
16
+ // Model-driven op rows for the shared entity interface: emit a
17
+ // load/list/create/update/remove row only for operations at least one active
18
+ // entity actually exposes — never document an operation no entity has.
19
+ const opUnion = new Set<string>()
20
+ entityList.forEach((e: any) => Object.keys(e.op || {})
21
+ .forEach((o: string) => { if (e.op[o] && e.op[o].active !== false) opUnion.add(o) }))
22
+ const opRowDefs: Record<string, string> = {
23
+ load: '| `Load` | `(reqmatch, ctrl) -> object?` | Load a single entity by match criteria. Raises on error. |',
24
+ list: '| `List` | `(reqmatch, ctrl) -> object?` | List entities matching the criteria (an aggregate list). Raises on error. |',
25
+ create: '| `Create` | `(reqdata, ctrl) -> object?` | Create a new entity. Raises on error. |',
26
+ update: '| `Update` | `(reqdata, ctrl) -> object?` | Update an existing entity. Raises on error. |',
27
+ remove: '| `Remove` | `(reqmatch, ctrl) -> object?` | Remove an entity. Raises on error. |',
28
+ }
29
+ const opRows = ['load', 'list', 'create', 'update', 'remove']
30
+ .filter((o) => opUnion.has(o)).map((o) => opRowDefs[o]).join('\n')
31
+
32
+ const apikeyOptionRow = isAuthActive(model)
33
+ ? '| `apikey` | `string` | API key for authentication. |\n'
34
+ : ''
35
+
36
+ Content(`### ${model.const.Name}SDK
37
+
38
+ \`\`\`csharp
39
+ using ${model.const.Name}Sdk;
40
+
41
+ var client = new ${model.const.Name}SDK(options);
42
+ \`\`\`
43
+
44
+ Creates a new SDK client. \`options\` is a \`Dictionary<string, object?>\`.
45
+
46
+ | Option | Type | Description |
47
+ | --- | --- | --- |
48
+ ${apikeyOptionRow}| \`base\` | \`string\` | Base URL of the API server. |
49
+ | \`prefix\` | \`string\` | URL path prefix prepended to all requests. |
50
+ | \`suffix\` | \`string\` | URL path suffix appended to all requests. |
51
+ | \`feature\` | \`Dictionary\` | Feature activation flags. |
52
+ | \`extend\` | \`List\` | Additional Feature instances to load. |
53
+ | \`system\` | \`Dictionary\` | System overrides (e.g. custom \`fetch\` delegate). |
54
+
55
+ ### TestSDK
56
+
57
+ \`\`\`csharp
58
+ var client = ${model.const.Name}SDK.TestSDK(testopts, sdkopts);
59
+ \`\`\`
60
+
61
+ Creates a test-mode client with mock transport. Both arguments may be \`null\`.
62
+
63
+ ### ${model.const.Name}SDK methods
64
+
65
+ | Method | Signature | Description |
66
+ | --- | --- | --- |
67
+ | \`OptionsMap\` | \`() -> Dictionary\` | Deep copy of current SDK options. |
68
+ | \`GetUtility\` | \`() -> Utility\` | Copy of the SDK utility object. |
69
+ | \`Prepare\` | \`(fetchargs) -> Dictionary\` | Build an HTTP request definition without sending. Raises on error. |
70
+ | \`Direct\` | \`(fetchargs) -> Dictionary\` | Build and send an HTTP request. Returns a result dictionary (branch on \`ok\`). |
71
+ `)
72
+
73
+ each(entityList, (ent: any) => {
74
+ const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
75
+ Content(`| \`${ent.Name}\` | \`(entopts) -> ${model.const.Name}EntityBase\` | Create ${article} ${ent.Name} entity instance. |
76
+ `)
77
+ })
78
+
79
+ Content(`
80
+ ### Entity interface
81
+
82
+ All entities share the same interface.
83
+
84
+ | Method | Signature | Description |
85
+ | --- | --- | --- |
86
+ ${opRows}
87
+ | \`Data\` | \`(newdata) -> object?\` | Get or set entity data. |
88
+ | \`Match\` | \`(newmatch) -> object?\` | Get or set entity match criteria. |
89
+ | \`Make\` | \`() -> IEntity\` | Create a new instance with the same options. |
90
+ | \`GetName\` | \`() -> string\` | Return the entity name. |
91
+
92
+ ### Result shape
93
+
94
+ Entity operations return the bare result data (a \`Dictionary\` for
95
+ single-entity ops, an aggregate list for \`List\`) as \`object?\` and raise on
96
+ error. Wrap calls in \`try\`/\`catch\` to handle failures.
97
+
98
+ The \`Direct()\` escape hatch never raises — it returns a result
99
+ \`Dictionary<string, object?>\` you branch on via \`result["ok"]\`:
100
+
101
+ | Key | Type | Description |
102
+ | --- | --- | --- |
103
+ | \`ok\` | \`bool\` | \`true\` if the HTTP status is 2xx. |
104
+ | \`status\` | \`int\` | HTTP status code. |
105
+ | \`headers\` | \`Dictionary\` | Response headers. |
106
+ | \`data\` | \`object?\` | Parsed JSON response body. |
107
+
108
+ On error, \`ok\` is \`false\` and \`err\` contains the error value.
109
+
110
+ `)
111
+
112
+ // Entities summary
113
+ Content(`### Entities
114
+
115
+ `)
116
+ each(entityList, (ent: any) => {
117
+ const fields = ent.fields || []
118
+ const opnames = Object.keys(ent.op || {})
119
+ const ops = ent.op || {}
120
+ const points = each(ops).map((op: any) =>
121
+ op.points ? each(op.points) : []
122
+ ).flat()
123
+ const path = points.length > 0 ? (points[0] as any).orig || '' : ''
124
+
125
+ Content(`#### ${ent.Name}
126
+
127
+ | Field | Description |
128
+ | --- | --- |
129
+ `)
130
+ each(fields, (field: any) => {
131
+ Content(`| \`${field.name}\` | ${field.short || ''} |
132
+ `)
133
+ })
134
+
135
+ Content(`
136
+ Operations: ${opnames.map((n: string) => n.charAt(0).toUpperCase() + n.slice(1)).join(', ')}.
137
+
138
+ API path: \`${path}\`
139
+
140
+ `)
141
+ })
142
+
143
+ })
144
+
145
+
146
+ export {
147
+ ReadmeModel
148
+ }