@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,92 @@
1
+
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, 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 param: numeric/boolean/array/object params
14
+ // render a typed literal; strings render the quoted placeholder. The SDK's
15
+ // loose object model means all values live in Dictionary<string, object?>.
16
+ function csLit(type: any, placeholder: string = 'example'): string {
17
+ const k = canonKey(type)
18
+ if ('INTEGER' === k) return '1L'
19
+ if ('NUMBER' === k) return '1.0'
20
+ if ('BOOLEAN' === k) return 'true'
21
+ if ('ARRAY' === k) return 'new List<object?>()'
22
+ if ('OBJECT' === k) return 'new Dictionary<string, object?>()'
23
+ return `"${placeholder}"`
24
+ }
25
+
26
+
27
+ const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
28
+ const { target, ctx$: { model } } = props
29
+
30
+ const entity = getModelPath(model, `main.${KIT}.entity`)
31
+
32
+ const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
33
+
34
+ const authActive = isAuthActive(model)
35
+ const ctor = authActive
36
+ ? `new ${model.const.Name}SDK(new Dictionary<string, object?>\n{\n ["apikey"] = Environment.GetEnvironmentVariable("${envName(model)}_APIKEY"),\n})`
37
+ : `new ${model.const.Name}SDK()`
38
+
39
+ Content(`\`\`\`csharp
40
+ using ${model.const.Name}Sdk;
41
+
42
+ var client = ${ctor};
43
+
44
+ `)
45
+
46
+ if (exampleEntity) {
47
+ const eName = nom(exampleEntity, 'Name')
48
+ // Sanitise the local variable name — an entity whose camelCased name is a
49
+ // C# keyword gets a trailing underscore (csVarName) so the snippet compiles.
50
+ const eVar = csVarName(exampleEntity.name)
51
+ const opnames = Object.keys(exampleEntity.op || {})
52
+ // Model-driven id key: null when the entity has no id-like field, in which
53
+ // case the load example takes an empty match.
54
+ const idF = entityIdField(exampleEntity)
55
+
56
+ if (opnames.includes('list')) {
57
+ Content(`// List all ${eName.toLowerCase()}s (returns object?, an aggregate list; raises on error)
58
+ var ${eVar}List = client.${eName}().List(null);
59
+ Console.WriteLine(${eVar}List);
60
+ `)
61
+ }
62
+
63
+ if (opnames.includes('load')) {
64
+ // Every REQUIRED load-match key (id first, then parent path params like
65
+ // page_id) — the same shape the runtime resolves path params from, so
66
+ // the example always works.
67
+ const loadItems = opRequestShape(exampleEntity, 'load').items
68
+ .filter((it: any) => !it.optional || it.name === idF)
69
+ .sort((a: any, b: any) =>
70
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
71
+ const loadArg = 0 < loadItems.length
72
+ ? `new Dictionary<string, object?> {${loadItems.map((it: any) =>
73
+ ` ["${it.name}"] = ${csLit(it.type,
74
+ it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(',')} }`
75
+ : 'null'
76
+ Content(`
77
+ // Load a specific ${eName.toLowerCase()} (returns the record, raises on error)
78
+ var ${eVar} = client.${eName}().Load(${loadArg});
79
+ Console.WriteLine(${eVar});
80
+ `)
81
+ }
82
+ }
83
+
84
+ Content(`\`\`\`
85
+ `)
86
+
87
+ })
88
+
89
+
90
+ export {
91
+ ReadmeTopQuick
92
+ }
@@ -0,0 +1,77 @@
1
+
2
+ import { cmp, Content, 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 ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
26
+ const { target, ctx$: { model } } = props
27
+
28
+ const entity = getModelPath(model, `main.${KIT}.entity`)
29
+
30
+ // Pick an entity with a real op (prefer a read op) — never fabricate a
31
+ // `load` on an op-less entity.
32
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
33
+
34
+ Content(`\`\`\`csharp
35
+ var client = ${model.const.Name}SDK.TestSDK(null, null);
36
+ `)
37
+
38
+ if (exampleEntity && primaryOp) {
39
+ const eName = nom(exampleEntity, 'Name')
40
+ const idF = entityIdField(exampleEntity)
41
+ const opMethod = primaryOp.charAt(0).toUpperCase() + primaryOp.slice(1)
42
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
43
+ let arg = 'null'
44
+ if (isMatchOp) {
45
+ // Every REQUIRED match key (id first) — the same shape that generates
46
+ // the op's request type, so the block stays honest.
47
+ const items = opRequestShape(exampleEntity, primaryOp).items
48
+ .filter((it: any) => !it.optional || it.name === idF)
49
+ .sort((a: any, b: any) =>
50
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
51
+ arg = 0 < items.length
52
+ ? `new Dictionary<string, object?> {${items.map((it: any) =>
53
+ ` ["${it.name}"] = ${it.name === idF ? '"test01"' : csLit(it.type)}`).join(',')} }`
54
+ : 'null'
55
+ } else if ('create' === primaryOp || 'update' === primaryOp) {
56
+ const items = opRequestShape(exampleEntity, primaryOp).items
57
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
58
+ const required = items.filter((it: any) => !it.optional)
59
+ const chosen = required.length ? required : items.slice(0, 3)
60
+ arg = `new Dictionary<string, object?> {${chosen.map((it: any) =>
61
+ ` ["${it.name}"] = ${csLit(it.type)}`).join(',')} }`
62
+ }
63
+ const eVar = csVarName(exampleEntity.name) + ('list' === primaryOp ? 'List' : '')
64
+ Content(`var ${eVar} = client.${eName}().${opMethod}(${arg});
65
+ Console.WriteLine(${eVar});
66
+ `)
67
+ }
68
+
69
+ Content(`\`\`\`
70
+ `)
71
+
72
+ })
73
+
74
+
75
+ export {
76
+ ReadmeTopTest
77
+ }
@@ -13,6 +13,7 @@ import { cmp, each, Folder } from '@voxgig/sdkgen'
13
13
 
14
14
  import { TestEntity } from './TestEntity_csharp'
15
15
  import { TestDirect } from './TestDirect_csharp'
16
+ import { ReadmeExamplesTest } from './ReadmeExamplesTest_csharp'
16
17
 
17
18
 
18
19
  const Test = cmp(function Test(props: any) {
@@ -29,6 +30,9 @@ const Test = cmp(function Test(props: any) {
29
30
  TestEntity({ target, entity })
30
31
  TestDirect({ target, entity })
31
32
  })
33
+
34
+ // Validate the documented csharp examples in the root + per-language docs.
35
+ ReadmeExamplesTest({ target })
32
36
  })
33
37
  })
34
38
 
@@ -5,10 +5,10 @@
5
5
  // (op.<name>.points[].args.params[]) and emits one file,
6
6
  // lib/<Sdk>Types.dart, with a Dart class per active entity plus a
7
7
  // request/match class per active op. Field/param sentinels ($STRING,
8
- // $INTEGER, ...) are turned into Dart types locally (Dart is not in the
9
- // shared canonToType table); the sentinel key comes from the shared
10
- // canonKey helper so the source of truth (@voxgig/apidef VALID_CANON) is
11
- // respected.
8
+ // $INTEGER, ...) map to Dart types via the SHARED canonToType 'dart' column
9
+ // (the single source of truth per language do not keep a local table
10
+ // here); the doc-comment sentinel key comes from the shared canonKey helper
11
+ // so the source of truth (@voxgig/apidef VALID_CANON) is respected.
12
12
  //
13
13
  // TYPE CHOICE: plain classes with nullable fields + fromMap/toMap. The
14
14
  // generated ops accept/return runtime maps (Dart has no structural typing),
@@ -23,7 +23,7 @@ import {
23
23
  File, Content,
24
24
  } from '@voxgig/sdkgen'
25
25
 
26
- import { canonKey, opTypeName, opRequestShape } from '@voxgig/sdkgen'
26
+ import { canonKey, canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
27
27
 
28
28
  import {
29
29
  KIT,
@@ -31,21 +31,7 @@ import {
31
31
  } from '@voxgig/apidef'
32
32
 
33
33
 
34
- // Sentinel -> Dart type (nullable added at emission).
35
- const DART_TYPE: Record<string, string> = {
36
- STRING: 'String',
37
- INTEGER: 'int',
38
- NUMBER: 'num',
39
- BOOLEAN: 'bool',
40
- NULL: 'Object',
41
- ARRAY: 'List<dynamic>',
42
- OBJECT: 'Map<String, dynamic>',
43
- ANY: 'dynamic',
44
- }
45
-
46
- function dartType(sentinel: unknown): string {
47
- return DART_TYPE[canonKey(sentinel)] ?? 'dynamic'
48
- }
34
+ const LANG = 'dart'
49
35
 
50
36
 
51
37
  // Dart reserved words that cannot be used as field names.
@@ -65,14 +51,28 @@ function dartIdent(name: string): boolean {
65
51
 
66
52
  // Emit a Dart data class from a list of {name, type, optional} items. All
67
53
  // fields are nullable (`optional` is documented) since the runtime passes
68
- // partial maps; fromMap is lenient (mismatched value types become null).
69
- function emitClass(typeName: string, items: any[]): void {
54
+ // partial maps; fromMap is lenient (mismatched value types become null). An
55
+ // item whose name is not a legal identifier is skipped (WITH a warning the
56
+ // key stays reachable via the runtime map, but its absence from the typed
57
+ // model should be visible, not silent).
58
+ function emitClass(typeName: string, items: any[], log?: any): void {
70
59
  const usable = items.filter((it: any) => it && null != it.name && dartIdent(it.name))
71
60
 
61
+ items.forEach((it: any) => {
62
+ if (it && null != it.name && !dartIdent(it.name) && log && log.warn) {
63
+ log.warn({
64
+ point: 'entity-types-skip-field', typeName, field: it.name,
65
+ note: `dart: field "${it.name}" of ${typeName} has no legal Dart ` +
66
+ `identifier form; omitted from the typed model (still reachable ` +
67
+ `via the runtime map)`,
68
+ })
69
+ }
70
+ })
71
+
72
72
  Content(`class ${typeName} {
73
73
  `)
74
74
  usable.forEach((it: any) => {
75
- const base = dartType(it.type)
75
+ const base = canonToType(it.type, LANG)
76
76
  const t = 'dynamic' === base ? 'dynamic' : base + '?'
77
77
  const req = it.optional ? '' : ' (required at the API)'
78
78
  Content(` /// ${canonKey(it.type) || 'ANY'}${req}
@@ -101,7 +101,7 @@ function emitClass(typeName: string, items: any[]): void {
101
101
  factory ${typeName}.fromMap(Map<String, dynamic> m) => ${typeName}(
102
102
  `)
103
103
  usable.forEach((it: any) => {
104
- const base = dartType(it.type)
104
+ const base = canonToType(it.type, LANG)
105
105
  if ('dynamic' === base) {
106
106
  Content(` ${it.name}: m['${it.name}'],
107
107
  `)
@@ -134,16 +134,30 @@ function emitClass(typeName: string, items: any[]): void {
134
134
 
135
135
 
136
136
  const EntityTypes = cmp(function EntityTypes(props: any) {
137
- const { model } = props.ctx$
137
+ const { model, log } = props.ctx$
138
138
  const { target } = props
139
139
 
140
- const entity = getModelPath(model, `main.${KIT}.entity`)
141
- const entityList = each(entity).filter((e: any) => e.active !== false)
140
+ // only_active:false getModelPath DROPS active:false entries by default,
141
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
142
+ // collection, so inactive entities still get generated entity code that
143
+ // references these typed names. The typed model must cover them too.
144
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
145
+ // Emit for EVERY entity that gets generated entity code: the consumer
146
+ // scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
147
+ // filter, so inactive entities still get class files referencing these
148
+ // typed names. Filter on `name` (always present), NOT `active` — parity
149
+ // with the go emitter's fix.
150
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
142
151
  // Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
143
152
  // entity not yet named (e.g. a fieldless placeholder) would otherwise read
144
153
  // `Name = undefined` below. Parity with the go emitter's fix.
145
154
  entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
146
155
 
156
+ // Surface duplicate generated type names (two entities with the same
157
+ // PascalCase Name) — they would redeclare a type in statically-typed
158
+ // targets. Detection only; renaming is a model-level decision.
159
+ warnEntityTypeCollisions(entity, log, LANG)
160
+
147
161
  File({ name: model.const.Name + 'Types.' + target.ext }, () => {
148
162
 
149
163
  Content(`// Typed models for the ${model.const.Name} SDK.
@@ -168,7 +182,7 @@ const EntityTypes = cmp(function EntityTypes(props: any) {
168
182
  name: f.name,
169
183
  type: f.type,
170
184
  optional: false === f.req,
171
- })))
185
+ })), log)
172
186
 
173
187
  // Per active op: a request/match type. The members and each member's
174
188
  // required/optional decision come from the shared partiality policy
@@ -182,7 +196,7 @@ const EntityTypes = cmp(function EntityTypes(props: any) {
182
196
  const typeName = opTypeName(Name, opname)
183
197
  const { items } = opRequestShape(ent, opname)
184
198
 
185
- emitClass(typeName, items)
199
+ emitClass(typeName, items, log)
186
200
  })
187
201
  })
188
202
  })
@@ -64,6 +64,14 @@ const Entity = cmp(function Entity(props: any) {
64
64
  `// Typed models: see ../${model.const.Name}Types.dart ` +
65
65
  `(${entity.Name} and the per-op request/match types).`),
66
66
 
67
+ // dart:async (Future/Stream) and ErrUtility are only referenced by
68
+ // op method bodies, so an op-less entity would import them unused.
69
+ // Emit them only when the entity actually has operations.
70
+ '#OpImports': opnames.length > 0
71
+ ? ({ indent }: any) => Content({ indent },
72
+ `import 'dart:async';\nimport '../utility/ErrUtility.dart';`)
73
+ : '',
74
+
67
75
  ...opfrags,
68
76
  }
69
77
  })
@@ -0,0 +1,166 @@
1
+
2
+ import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+
10
+ // Type names come from the shared canonToType 'dart' column (single source of truth).
11
+
12
+ // A type-correct Dart literal for a field's canonical type. Strings render
13
+ // the quoted placeholder (single-quoted, matching the generated Dart style).
14
+ function dartLit(type: any, placeholder: string = 'example'): string {
15
+ const k = canonKey(type)
16
+ if ('INTEGER' === k || 'NUMBER' === k) return '1'
17
+ if ('BOOLEAN' === k) return 'true'
18
+ if ('ARRAY' === k) return '<dynamic>[]'
19
+ if ('OBJECT' === k) return '<String, dynamic>{}'
20
+ return `'${placeholder}'`
21
+ }
22
+
23
+
24
+ // Op method spellings + descriptions (language-agnostic wording).
25
+ const OP_DESC: Record<string, { method: string, desc: string }> = {
26
+ load: { method: 'load(match)', desc: 'Load a single entity by match criteria.' },
27
+ list: { method: 'list()', desc: 'List entities, optionally matching the given criteria.' },
28
+ create: { method: 'create(data)', desc: 'Create a new entity with the given data.' },
29
+ update: { method: 'update(data)', desc: 'Update an existing entity.' },
30
+ remove: { method: 'remove(match)', desc: 'Remove the matching entity.' },
31
+ }
32
+
33
+
34
+ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
35
+ const { target } = props
36
+ const { model } = props.ctx$
37
+
38
+ const entity = getModelPath(model, `main.${KIT}.entity`)
39
+
40
+ const publishedEntities = each(entity)
41
+ .filter((entity: any) => entity.active !== false)
42
+
43
+ if (0 === publishedEntities.length) {
44
+ return
45
+ }
46
+
47
+ Content(`
48
+
49
+ ## Entities
50
+
51
+ `)
52
+
53
+ publishedEntities.map((entity: any) => {
54
+ const opnames = Object.keys(entity.op || {})
55
+ const fields = entity.fields || []
56
+ // Model-driven id key: null when this entity has no id-like field.
57
+ const idF = entityIdField(entity)
58
+ const eVar = exampleVarName(entity.name, 'dart')
59
+
60
+ Content(`
61
+ ### ${entity.Name}
62
+
63
+ `)
64
+
65
+ if (entity.short) {
66
+ Content(`${entity.short}
67
+
68
+ `)
69
+ }
70
+
71
+ Content(`Create an instance: \`final ${eVar} = client.${entity.Name}();\`
72
+
73
+ `)
74
+
75
+ if (opnames.length > 0) {
76
+ Content(`#### Operations
77
+
78
+ | Method | Description |
79
+ | --- | --- |
80
+ `)
81
+ opnames.map((opname: string) => {
82
+ const info = OP_DESC[opname]
83
+ if (info) {
84
+ Content(`| \`${info.method}\` | ${info.desc} |
85
+ `)
86
+ }
87
+ })
88
+
89
+ Content(`
90
+ `)
91
+ }
92
+
93
+ if (fields.length > 0) {
94
+ Content(`#### Fields
95
+
96
+ | Field | Type | Description |
97
+ | --- | --- | --- |
98
+ `)
99
+
100
+ each(fields, (field: any) => {
101
+ const desc = field.short || ''
102
+ Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
103
+ `)
104
+ })
105
+
106
+ Content(`
107
+ `)
108
+ }
109
+
110
+ if (opnames.includes('load')) {
111
+ // The id key plus every REQUIRED match key (parent path params like
112
+ // page_id) — the same shape the runtime resolves path params from.
113
+ const loadItems = opRequestShape(entity, 'load').items
114
+ .filter((it: any) => !it.optional || it.name === idF)
115
+ .sort((a: any, b: any) =>
116
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
117
+ const loadArg = 0 < loadItems.length
118
+ ? `{${loadItems.map((it: any) =>
119
+ `'${it.name}': ${dartLit(it.type,
120
+ it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')}}`
121
+ : ''
122
+ Content(`#### Example: Load
123
+
124
+ \`\`\`dart
125
+ final ${eVar} = await client.${entity.Name}().load(${loadArg});
126
+ \`\`\`
127
+
128
+ `)
129
+ }
130
+
131
+ if (opnames.includes('list')) {
132
+ Content(`#### Example: List
133
+
134
+ \`\`\`dart
135
+ final ${eVar}s = await client.${entity.Name}().list();
136
+ \`\`\`
137
+
138
+ `)
139
+ }
140
+
141
+ if (opnames.includes('create')) {
142
+ // Members come from the SAME shape the runtime validates
143
+ // (opRequestShape): every required member must appear.
144
+ const createItems = opRequestShape(entity, 'create').items
145
+ .filter((it: any) => !it.optional)
146
+ Content(`#### Example: Create
147
+
148
+ \`\`\`dart
149
+ final ${eVar} = await client.${entity.Name}().create({
150
+ `)
151
+ createItems.map((it: any) => {
152
+ Content(` '${it.name}': ${dartLit(it.type, 'example_' + it.name)}, // ${canonToType(it.type, target.name)}
153
+ `)
154
+ })
155
+ Content(`});
156
+ \`\`\`
157
+
158
+ `)
159
+ }
160
+ })
161
+ })
162
+
163
+
164
+ export {
165
+ ReadmeEntity
166
+ }