@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,201 @@
1
+
2
+ // Typed-model generator (Kotlin target). Port of EntityTypes_java.ts /
3
+ // EntityTypes_py.ts.
4
+ //
5
+ // Reads main.<KIT>.entity.<e>.fields[] and per-op params
6
+ // (op.<name>.points[].args.params[]) and emits ONE file, core/<Name>Types.kt,
7
+ // holding a container `object <Name>Types` with a nested `data class` per
8
+ // active entity plus a request/match type per active op.
9
+ //
10
+ // WHY A CONTAINER OBJECT: parity with the java/csharp emitters — every
11
+ // generated reference type lives inside a single `object <Name>Types`, so the
12
+ // whole reference model is in one file (<Name>Types.kt) whatever the entity
13
+ // count. Kotlin has no one-public-type-per-file rule, but the single-file
14
+ // convention is kept for cross-language consistency.
15
+ //
16
+ // TYPE CHOICE: reference types with BOXED (nullable) component types, NOT the
17
+ // wired runtime type. The generated ops take/return the loose object model
18
+ // (MutableMap<String, Any?> / Any?), so these types are NOT wired into the op
19
+ // signatures — they are documentation/DX reference shapes a caller may use to
20
+ // describe a payload before converting it to a map. This mirrors the JS
21
+ // target's JSDoc typedefs (annotation only, no runtime effect). Emitting unused
22
+ // types is harmless — they compile and have no runtime effect.
23
+ //
24
+ // OPTIONAL FIELDS: every component is a nullable reference type, so a
25
+ // `req:false` field/param needs no distinct rendering in Kotlin.
26
+ //
27
+ // EMPTY SHAPES: Kotlin forbids a `data class` with zero components, so an
28
+ // empty shape is emitted as a plain marker `class <Name>` instead.
29
+ //
30
+ // Sentinels map to Kotlin types via the SHARED canonToType 'kotlin' column
31
+ // (the single source of truth per language — do not keep a local table here).
32
+ //
33
+ // Keep the SAME type-name scheme as every other language: <Name>,
34
+ // <Name>LoadMatch, <Name>ListMatch, <Name>CreateData, <Name>UpdateData,
35
+ // <Name>RemoveMatch (via the shared opTypeName helper).
36
+
37
+ import {
38
+ cmp, each, names,
39
+ File, Content,
40
+ } from '@voxgig/sdkgen'
41
+
42
+ import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
43
+
44
+ import {
45
+ KIT,
46
+ getModelPath,
47
+ } from '@voxgig/apidef'
48
+
49
+ import { kotlinPackage } from './utility_kotlin'
50
+
51
+
52
+ // Kotlin hard keywords that cannot be a (non-escaped) property name.
53
+ const KOTLIN_KEYWORDS = new Set<string>([
54
+ 'as', 'break', 'class', 'continue', 'do', 'else', 'false', 'for', 'fun',
55
+ 'if', 'in', 'interface', 'is', 'null', 'object', 'package', 'return',
56
+ 'super', 'this', 'throw', 'true', 'try', 'typealias', 'typeof', 'val',
57
+ 'var', 'when', 'while',
58
+ ])
59
+
60
+
61
+ // A field/param name that has a safe Kotlin identifier rendering. Names that
62
+ // are not valid identifiers (hyphens, leading digits) have no clean component
63
+ // form and are skipped — they remain reachable via the runtime map.
64
+ function kotlinIdent(name: string): boolean {
65
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name) && !KOTLIN_KEYWORDS.has(name)
66
+ }
67
+
68
+
69
+ const LANG = 'kotlin'
70
+
71
+
72
+ // Emit a nested `data class <typeName>(...)` from {name, type} items. An item
73
+ // whose name is not a legal identifier is skipped (WITH a warning — the key
74
+ // stays reachable via the runtime map, but its absence from the typed model
75
+ // should be visible, not silent); a duplicate component name (after the
76
+ // identifier filter) is dropped. An empty shape becomes a plain marker
77
+ // `class <typeName>` (Kotlin forbids a zero-component data class).
78
+ function emitRecord(typeName: string, items: any[], log?: any): void {
79
+ const seen = new Set<string>()
80
+ const usable = items.filter((it: any) => {
81
+ if (!it || null == it.name) {
82
+ return false
83
+ }
84
+ if (!kotlinIdent(it.name)) {
85
+ if (log && log.warn) {
86
+ log.warn({
87
+ point: 'entity-types-skip-field', typeName, field: it.name,
88
+ note: `kotlin: field "${it.name}" of ${typeName} has no legal ` +
89
+ `Kotlin identifier form; omitted from the typed model (still ` +
90
+ `reachable via the runtime map)`,
91
+ })
92
+ }
93
+ return false
94
+ }
95
+ if (seen.has(it.name)) {
96
+ return false
97
+ }
98
+ seen.add(it.name)
99
+ return true
100
+ })
101
+
102
+ if (0 === usable.length) {
103
+ Content(` class ${typeName}
104
+
105
+ `)
106
+ return
107
+ }
108
+
109
+ const params = usable
110
+ .map((it: any) => `val ${it.name}: ${canonToType(it.type, LANG)}`)
111
+ .join(', ')
112
+ Content(` data class ${typeName}(${params})
113
+
114
+ `)
115
+ }
116
+
117
+
118
+ const EntityTypes = cmp(function EntityTypes(props: any) {
119
+ const { model, log } = props.ctx$
120
+ const target = props.target || {}
121
+ const ext = target.ext || 'kt'
122
+
123
+ const kotlinpackage = props.kotlinpackage || kotlinPackage(model)
124
+
125
+ // only_active:false — getModelPath DROPS active:false entries by default,
126
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
127
+ // collection, so inactive entities still get generated entity code that
128
+ // references these typed names. The typed model must cover them too.
129
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
130
+ // Emit for EVERY entity that gets generated entity code: the consumer
131
+ // scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
132
+ // filter, so inactive entities still get class files referencing these
133
+ // typed names. Filter on `name` (always present), NOT `active` — parity
134
+ // with the go emitter's fix.
135
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
136
+ // Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
137
+ // entity not yet named (e.g. a fieldless placeholder) would otherwise read
138
+ // `Name = undefined` below. Parity with the go/py/csharp/java emitter's fix.
139
+ entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
140
+
141
+ // Surface duplicate generated type names (two entities with the same
142
+ // PascalCase Name) — they would redeclare a type in statically-typed
143
+ // targets. Detection only; renaming is a model-level decision.
144
+ warnEntityTypeCollisions(entity, log, LANG)
145
+
146
+ File({ name: model.const.Name + 'Types.' + ext }, () => {
147
+
148
+ Content(`package ${kotlinpackage}.core
149
+
150
+ // Typed reference models for the ${model.const.Name} SDK.
151
+ //
152
+ // GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
153
+ // params (op.<name>.points[].args.params[]). Field/param types come from the
154
+ // canonical type sentinels (source of truth: @voxgig/apidef VALID_CANON). Do
155
+ // not edit by hand.
156
+ //
157
+ // These types are documentation/DX reference shapes ONLY. The SDK ops take and
158
+ // return the loose object model (MutableMap<String, Any?> / Any?) at runtime,
159
+ // so these types are not wired into the op signatures — use them to describe a
160
+ // payload before converting it to a map. Every component is a nullable type, so
161
+ // an optional (req:false) key needs no distinct rendering.
162
+
163
+ @Suppress("unused")
164
+ object ${model.const.Name}Types {
165
+
166
+ `)
167
+
168
+ entityList.forEach((ent: any) => {
169
+ const Name = ent.Name
170
+ const fields = (ent.fields ? each(ent.fields) : [])
171
+ .filter((f: any) => f.active !== false)
172
+
173
+ // Entity data model: one component per field.
174
+ emitRecord(Name, fields.map((f: any) => ({
175
+ name: f.name, type: f.type,
176
+ })), log)
177
+
178
+ // Per active op: a request/match type. Members come from the shared
179
+ // partiality policy (opRequestShape).
180
+ const ops = ent.op || {}
181
+ ;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
182
+ if (null == ops[opname]) {
183
+ return
184
+ }
185
+
186
+ const typeName = opTypeName(Name, opname)
187
+ const { items } = opRequestShape(ent, opname)
188
+
189
+ emitRecord(typeName, items, log)
190
+ })
191
+ })
192
+
193
+ Content(`}
194
+ `)
195
+ })
196
+ })
197
+
198
+
199
+ export {
200
+ EntityTypes,
201
+ }
@@ -23,6 +23,7 @@ import { Config } from './Config_kotlin'
23
23
  import { Gitignore } from './Gitignore_kotlin'
24
24
  import { MainEntity } from './MainEntity_kotlin'
25
25
  import { EntityBase } from './EntityBase_kotlin'
26
+ import { EntityTypes } from './EntityTypes_kotlin'
26
27
  import { SdkError } from './SdkError_kotlin'
27
28
  import { kotlinPackage } from './utility_kotlin'
28
29
 
@@ -84,6 +85,11 @@ const Main = cmp(async function Main(props: any) {
84
85
  })
85
86
 
86
87
  Config({ target })
88
+
89
+ // Generate the typed reference-model file (<Name>Types.kt) beside the
90
+ // other generated core files. Documentation/DX shapes only — not wired
91
+ // into the loose-object-model op signatures.
92
+ EntityTypes({ target, kotlinpackage })
87
93
  })
88
94
 
89
95
  })
@@ -0,0 +1,175 @@
1
+
2
+ import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+ import { kotlinVarName } from './utility_kotlin'
10
+
11
+
12
+ // Type names come from the shared canonToType 'kotlin' column (single source of truth).
13
+
14
+ // A type-correct Kotlin literal for a field's canonical type.
15
+ function kotlinLit(type: any, placeholder: string = 'example'): string {
16
+ const k = canonKey(type)
17
+ if ('INTEGER' === k) return '1L'
18
+ if ('NUMBER' === k) return '1.0'
19
+ if ('BOOLEAN' === k) return 'true'
20
+ if ('ARRAY' === k) return 'listOf<Any?>()'
21
+ if ('OBJECT' === k) return 'mapOf<String, Any?>()'
22
+ return `"${placeholder}"`
23
+ }
24
+
25
+
26
+ // Operation method spelling for Kotlin: camelCase methods over the loose
27
+ // object model. The op descriptions are language-agnostic.
28
+ const OP_DESC: Record<string, { method: string, desc: string }> = {
29
+ load: { method: 'load(match, null)', desc: 'Load a single entity by match criteria.' },
30
+ list: { method: 'list(null, null)', desc: 'List entities, optionally matching the given criteria.' },
31
+ create: { method: 'create(data, null)', desc: 'Create a new entity with the given data.' },
32
+ update: { method: 'update(data, null)', desc: 'Update an existing entity.' },
33
+ remove: { method: 'remove(match, null)', desc: 'Remove the matching entity.' },
34
+ }
35
+
36
+
37
+ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
38
+ const { target } = props
39
+ const { model } = props.ctx$
40
+
41
+ const entity = getModelPath(model, `main.${KIT}.entity`)
42
+
43
+ const publishedEntities = each(entity)
44
+ .filter((entity: any) => entity.active !== false)
45
+
46
+ if (0 === publishedEntities.length) {
47
+ return
48
+ }
49
+
50
+ Content(`
51
+
52
+ ## Entities
53
+
54
+ `)
55
+
56
+ publishedEntities.map((entity: any) => {
57
+ const opnames = Object.keys(entity.op || {})
58
+ const fields = entity.fields || []
59
+ // Model-driven id key: null when this entity has no id-like field.
60
+ const idF = entityIdField(entity)
61
+ // Sanitise the local variable name — a camelCased Kotlin keyword gets a
62
+ // trailing underscore (kotlinVarName) so the snippet compiles.
63
+ const eVar = kotlinVarName(entity.name)
64
+ const accessor = kotlinVarName(entity.name)
65
+
66
+ Content(`
67
+ ### ${entity.Name}
68
+
69
+ `)
70
+
71
+ if (entity.short) {
72
+ Content(`${entity.short}
73
+
74
+ `)
75
+ }
76
+
77
+ Content(`Create an instance: \`val ${eVar} = client.${accessor}(null)\`
78
+
79
+ `)
80
+
81
+ if (opnames.length > 0) {
82
+ Content(`#### Operations
83
+
84
+ | Method | Description |
85
+ | --- | --- |
86
+ `)
87
+ opnames.map((opname: string) => {
88
+ const info = OP_DESC[opname]
89
+ if (info) {
90
+ Content(`| \`${info.method}\` | ${info.desc} |
91
+ `)
92
+ }
93
+ })
94
+
95
+ Content(`
96
+ `)
97
+ }
98
+
99
+ if (fields.length > 0) {
100
+ Content(`#### Fields
101
+
102
+ | Field | Type | Description |
103
+ | --- | --- | --- |
104
+ `)
105
+
106
+ each(fields, (field: any) => {
107
+ const desc = field.short || ''
108
+ Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
109
+ `)
110
+ })
111
+
112
+ Content(`
113
+ `)
114
+ }
115
+
116
+ if (opnames.includes('load')) {
117
+ // The id key plus every REQUIRED match key (parent path params like
118
+ // page_id) — the same shape the runtime resolves path params from, so
119
+ // the example always works.
120
+ const loadItems = opRequestShape(entity, 'load').items
121
+ .filter((it: any) => !it.optional || it.name === idF)
122
+ .sort((a: any, b: any) =>
123
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
124
+ const loadArg = 0 < loadItems.length
125
+ ? `mutableMapOf<String, Any?>(${loadItems.map((it: any) =>
126
+ `"${it.name}" to ${kotlinLit(it.type,
127
+ it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')})`
128
+ : 'null'
129
+ Content(`#### Example: Load
130
+
131
+ \`\`\`kotlin
132
+ val ${eVar} = client.${accessor}(null).load(${loadArg}, null)
133
+ \`\`\`
134
+
135
+ `)
136
+ }
137
+
138
+ if (opnames.includes('list')) {
139
+ Content(`#### Example: List
140
+
141
+ \`\`\`kotlin
142
+ val ${eVar}List = client.${accessor}(null).list(null, null)
143
+ \`\`\`
144
+
145
+ `)
146
+ }
147
+
148
+ if (opnames.includes('create')) {
149
+ // Members come from the SAME shape the runtime validates
150
+ // (opRequestShape): every required member must appear — including a
151
+ // required id and parent keys like page_id — with a real literal.
152
+ const createItems = opRequestShape(entity, 'create').items
153
+ .filter((it: any) => !it.optional)
154
+ Content(`#### Example: Create
155
+
156
+ \`\`\`kotlin
157
+ val ${eVar} = client.${accessor}(null).create(mutableMapOf<String, Any?>(
158
+ `)
159
+ createItems.map((it: any, i: number) => {
160
+ const comma = i < createItems.length - 1 ? ',' : ''
161
+ Content(` "${it.name}" to ${kotlinLit(it.type, 'example_' + it.name)}${comma} // ${canonToType(it.type, target.name)}
162
+ `)
163
+ })
164
+ Content(`), null)
165
+ \`\`\`
166
+
167
+ `)
168
+ }
169
+ })
170
+ })
171
+
172
+
173
+ export {
174
+ ReadmeEntity
175
+ }
@@ -0,0 +1,173 @@
1
+
2
+ import { cmp, File, Content } from '@voxgig/sdkgen'
3
+
4
+ import { kotlinPackage } from './utility_kotlin'
5
+
6
+
7
+ // Emits test/ReadmeExamplesTest.kt — a JUnit PRESENCE + STRUCTURE gate over
8
+ // every ```kotlin fenced block in the repository ROOT README.md, the
9
+ // per-language kotlin/README.md, AND the per-language kotlin/REFERENCE.md.
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
+ // Kotlin SDK compiles with Gradle/kotlinc only (no in-process Kotlin compiler
14
+ // dependency wired into the test classpath), so a test cannot compile-and-run
15
+ // arbitrary doc snippets at test time. This gate therefore guarantees the
16
+ // weaker-but-real invariant that keeps the docs honest as the generator evolves:
17
+ // 1. every doc exists and contains at least one ```kotlin block (nothing was
18
+ // dropped);
19
+ // 2. every ```kotlin block is structurally well-formed — its braces,
20
+ // parentheses and brackets balance (catches a truncated or malformed
21
+ // generated snippet).
22
+ // A per-doc summary line makes the coverage visible in the test output.
23
+ //
24
+ // The emitted Kotlin is written WITHOUT literal backticks (the fence marker is
25
+ // built at runtime as 96.toChar().toString().repeat(3)) so this TS template
26
+ // literal stays clean.
27
+ const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
28
+ const { target, ctx$: { model } } = props
29
+
30
+ const Name = model.const.Name
31
+ const kotlinpackage = props.kotlinpackage || kotlinPackage(model)
32
+
33
+ File({ name: 'ReadmeExamplesTest.' + target.ext }, () => {
34
+ Content(`package ${kotlinpackage}.sdktest
35
+
36
+ // ${Name} SDK — documentation kotlin-examples PRESENCE + STRUCTURE gate.
37
+ //
38
+ // GUARANTEE (see ReadmeExamplesTest_kotlin.ts for why this is a structure gate
39
+ // and not an execute gate): every kotlin example in the docs is accounted for.
40
+ // This JUnit class is a completeness gate over every ${'```'}kotlin fenced code
41
+ // block in three documents:
42
+ // - the repository ROOT README.md (one directory above this module),
43
+ // - the per-language kotlin/README.md,
44
+ // - the per-language kotlin/REFERENCE.md.
45
+ //
46
+ // Checks, PER DOCUMENT:
47
+ // 1. PRESENCE: the doc exists and holds at least one kotlin block.
48
+ // 2. STRUCTURE: every kotlin block's braces / parens / brackets balance, so a
49
+ // truncated or malformed generated snippet fails loudly.
50
+ //
51
+ // GENERATED by @voxgig/sdkgen — do not edit by hand.
52
+
53
+ import org.junit.jupiter.api.Assertions.assertTrue
54
+ import org.junit.jupiter.api.Test
55
+
56
+ import java.io.File
57
+ import java.nio.file.Files
58
+ import java.nio.file.Path
59
+ import java.nio.file.Paths
60
+
61
+ class ReadmeExamplesTest {
62
+
63
+ // The three documents to scan, resolved relative to the Gradle module
64
+ // directory (the working directory when the test task runs). Each row is
65
+ // {label, relative path}.
66
+ private fun docs(): Array<Array<String>> {
67
+ return arrayOf(
68
+ arrayOf("root README", ".." + File.separator + "README.md"),
69
+ arrayOf("kotlin README.md", "README.md"),
70
+ arrayOf("kotlin REFERENCE.md", "REFERENCE.md"),
71
+ )
72
+ }
73
+
74
+ // Extract every kotlin fenced block. Split on the triple-backtick fence:
75
+ // odd-indexed segments are the inside of a fenced block (info string on the
76
+ // first line, then the code). Only blocks whose info string is exactly
77
+ // "kotlin" are returned.
78
+ private fun kotlinBlocks(text: String): List<String> {
79
+ val fence = 96.toChar().toString().repeat(3)
80
+ val parts = text.split(fence)
81
+ val blocks = mutableListOf<String>()
82
+ var i = 1
83
+ while (i < parts.size) {
84
+ val seg = parts[i]
85
+ val nl = seg.indexOf('\\n')
86
+ val info = (if (nl < 0) seg else seg.substring(0, nl)).trim()
87
+ if (info == "kotlin") {
88
+ blocks.add(if (nl < 0) "" else seg.substring(nl + 1))
89
+ }
90
+ i += 2
91
+ }
92
+ return blocks
93
+ }
94
+
95
+ private fun readDoc(path: Path, label: String): String {
96
+ assertTrue(Files.exists(path), label + " not found: " + path)
97
+ return Files.readString(path)
98
+ }
99
+
100
+ // True when every open/close delimiter balances (ignores the subtlety of
101
+ // delimiters inside string literals — a generated snippet never nests an
102
+ // unbalanced delimiter in a string, and this catches truncation).
103
+ private fun balanced(block: String): Boolean {
104
+ val stack = ArrayDeque<Char>()
105
+ val pairs = mapOf('(' to ')', '[' to ']', '{' to '}')
106
+ for (ch in block) {
107
+ if (pairs.containsKey(ch)) {
108
+ stack.addLast(pairs[ch]!!)
109
+ }
110
+ else if (ch == ')' || ch == ']' || ch == '}') {
111
+ if (stack.isEmpty() || stack.removeLast() != ch) {
112
+ return false
113
+ }
114
+ }
115
+ }
116
+ return stack.isEmpty()
117
+ }
118
+
119
+ @Test
120
+ fun rootReadmeHasKotlinBlocks() {
121
+ val doc = docs()[0]
122
+ val blocks = kotlinBlocks(readDoc(Paths.get(doc[1]), doc[0]))
123
+ assertTrue(blocks.size > 0, "expected at least one kotlin block in " + doc[0])
124
+ }
125
+
126
+ @Test
127
+ fun localReadmeHasKotlinBlocks() {
128
+ val doc = docs()[1]
129
+ val blocks = kotlinBlocks(readDoc(Paths.get(doc[1]), doc[0]))
130
+ assertTrue(blocks.size > 0, "expected at least one kotlin block in " + doc[0])
131
+ }
132
+
133
+ @Test
134
+ fun referenceHasKotlinBlocks() {
135
+ val doc = docs()[2]
136
+ val blocks = kotlinBlocks(readDoc(Paths.get(doc[1]), doc[0]))
137
+ assertTrue(blocks.size > 0, "expected at least one kotlin block in " + doc[0])
138
+ }
139
+
140
+ @Test
141
+ fun allKotlinBlocksAreStructurallyBalanced() {
142
+ val failures = mutableListOf<String>()
143
+ for (doc in docs()) {
144
+ val path = Paths.get(doc[1])
145
+ if (!Files.exists(path)) {
146
+ continue
147
+ }
148
+ val blocks = kotlinBlocks(readDoc(path, doc[0]))
149
+ var balancedCount = 0
150
+ for (i in blocks.indices) {
151
+ if (balanced(blocks[i])) {
152
+ balancedCount++
153
+ }
154
+ else {
155
+ failures.add(doc[0] + " kotlin block #" + i +
156
+ " has unbalanced delimiters:\\n\\n" + blocks[i])
157
+ }
158
+ }
159
+ println(
160
+ "[readme-examples] " + doc[0] + " kotlin blocks: total=" +
161
+ blocks.size + " balanced=" + balancedCount)
162
+ }
163
+ assertTrue(failures.isEmpty(), failures.joinToString("\\n\\n"))
164
+ }
165
+ }
166
+ `)
167
+ })
168
+ })
169
+
170
+
171
+ export {
172
+ ReadmeExamplesTest
173
+ }
@@ -0,0 +1,47 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+ import { kotlinPackage } from './utility_kotlin'
5
+
6
+
7
+ const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
8
+ const { target, ctx$: { model } } = props
9
+
10
+ const pkg = kotlinPackage(model)
11
+
12
+ Content(`### Data as maps
13
+
14
+ The Kotlin SDK uses a loose object model — \`MutableMap<String, Any?>\`
15
+ throughout — rather than a bespoke typed class per endpoint. This mirrors the
16
+ dynamic nature of the API and keeps the SDK flexible: no regeneration is
17
+ needed when the API schema changes.
18
+
19
+ Use \`Helpers.toMapAny(value)\` to safely coerce a value to a
20
+ \`MutableMap<String, Any?>\`. A \`${model.const.Name}Types.kt\` module of
21
+ reference \`data class\` types is also generated for editor documentation.
22
+
23
+ ### Project structure
24
+
25
+ \`\`\`
26
+ kotlin/
27
+ ├── build.gradle.kts -- Gradle build (compiles core/, utility/, feature/, entity/)
28
+ ├── settings.gradle.kts -- Gradle project settings
29
+ ├── core/ -- Main SDK client, config, entity base, error type
30
+ ├── entity/ -- Entity implementations
31
+ ├── feature/ -- Built-in features (Base, Test, Log, ...)
32
+ ├── utility/ -- Utility functions and the vendored struct library
33
+ └── test/ -- JUnit test suites
34
+ \`\`\`
35
+
36
+ The main client class (\`${model.const.Name}SDK\`, package \`${pkg}.core\`)
37
+ exposes the entity accessors. Reference entity or utility types directly only
38
+ when needed.
39
+
40
+ `)
41
+
42
+ })
43
+
44
+
45
+ export {
46
+ ReadmeExplanation
47
+ }