@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
@@ -24,6 +24,7 @@ import {
24
24
  buildIdNames,
25
25
  getMatchEntries,
26
26
  isAuthActive,
27
+ entityDataIdField,
27
28
  } from '@voxgig/sdkgen'
28
29
 
29
30
 
@@ -344,6 +345,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
344
345
 
345
346
  const generateList: OpGen = (ctx, step, index) => {
346
347
  const { entity, flow, accessor } = ctx
348
+ const hasDataId = null != entityDataIdField(entity)
347
349
  const ref = step.input.ref ?? entity.name + '_ref01'
348
350
  const entvar = step.input.entvar ?? ref + '_ent'
349
351
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -388,7 +390,7 @@ const generateList: OpGen = (ctx, step, index) => {
388
390
  const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
389
391
  ((s.input.ref ?? entity.name + '_ref01') === validRef))
390
392
 
391
- if ('ItemExists' === validator.apply && hasRefData) {
393
+ if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
392
394
  const refDataVar = validRef + '_data'
393
395
  Content(`
394
396
  $found_item = sdk_select(
@@ -396,7 +398,7 @@ const generateList: OpGen = (ctx, step, index) => {
396
398
  ["id" => $${refDataVar}["id"]]);
397
399
  $this->assertNotEmpty($found_item);
398
400
  `)
399
- } else if ('ItemNotExists' === validator.apply && hasRefData) {
401
+ } else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
400
402
  const refDataVar = validRef + '_data'
401
403
  Content(`
402
404
  $not_found_item = sdk_select(
@@ -546,6 +548,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
546
548
 
547
549
  const generateRemove: OpGen = (ctx, step, index) => {
548
550
  const { entity, flow, accessor } = ctx
551
+ if (null == entityDataIdField(entity)) {
552
+ return
553
+ }
549
554
  const ref = step.input.ref ?? entity.name + '_ref01'
550
555
  const entvar = step.input.entvar ?? ref + '_ent'
551
556
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -36,7 +36,7 @@ import {
36
36
  File, Content,
37
37
  } from '@voxgig/sdkgen'
38
38
 
39
- import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
39
+ import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
40
40
 
41
41
  import {
42
42
  KIT,
@@ -75,9 +75,20 @@ function pyIdent(name: string): boolean {
75
75
  // only required -> single `class <typeName>(TypedDict):`
76
76
  // only optional -> single `class <typeName>(TypedDict, total=False):`
77
77
  // no usable keys -> single `class <typeName>(TypedDict): pass`
78
- function emitTypedDict(typeName: string, items: any[]): void {
78
+ function emitTypedDict(typeName: string, items: any[], log?: any): void {
79
79
  const usable = items.filter((it: any) => it && null != it.name && pyIdent(it.name))
80
80
 
81
+ items.forEach((it: any) => {
82
+ if (it && null != it.name && !pyIdent(it.name) && log && log.warn) {
83
+ log.warn({
84
+ point: 'entity-types-skip-field', typeName, field: it.name,
85
+ note: `py: field "${it.name}" of ${typeName} has no legal class-syntax ` +
86
+ `TypedDict key form; omitted from the typed model (still reachable ` +
87
+ `via the runtime dict)`,
88
+ })
89
+ }
90
+ })
91
+
81
92
  const required = usable.filter((it: any) => !it.optional)
82
93
  const optional = usable.filter((it: any) => it.optional)
83
94
 
@@ -117,17 +128,31 @@ class ${typeName}(${typeName}Required, total=False):
117
128
 
118
129
 
119
130
  const EntityTypes = cmp(function EntityTypes(props: any) {
120
- const { model } = props.ctx$
131
+ const { model, log } = props.ctx$
121
132
  const target = props.target || {}
122
133
  const ext = target.ext || LANG
123
134
 
124
- const entity = getModelPath(model, `main.${KIT}.entity`)
125
- const entityList = each(entity).filter((e: any) => e.active !== false)
135
+ // only_active:false getModelPath DROPS active:false entries by default,
136
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
137
+ // collection, so inactive entities still get generated entity code that
138
+ // references these typed names. The typed model must cover them too.
139
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
140
+ // Emit for EVERY entity that gets generated entity code: the consumer
141
+ // scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
142
+ // filter, so inactive entities still get class files referencing these
143
+ // typed names. Filter on `name` (always present), NOT `active` — parity
144
+ // with the go emitter's fix.
145
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
126
146
  // Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
127
147
  // entity not yet named (e.g. a fieldless placeholder) would otherwise read
128
148
  // `Name = undefined` below. Parity with the go emitter's fix.
129
149
  entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
130
150
 
151
+ // Surface duplicate generated type names (two entities with the same
152
+ // PascalCase Name) — they would redeclare a type in statically-typed
153
+ // targets. Detection only; renaming is a model-level decision.
154
+ warnEntityTypeCollisions(entity, log, LANG)
155
+
131
156
  File({ name: model.const.Name.toLowerCase() + '_types.' + ext }, () => {
132
157
 
133
158
  Content(`# Typed models for the ${model.const.Name} SDK.
@@ -159,7 +184,7 @@ from typing import TypedDict, Any
159
184
  `)
160
185
  emitTypedDict(Name, fields.map((f: any) => ({
161
186
  name: f.name, type: f.type, optional: false === f.req,
162
- })))
187
+ })), log)
163
188
 
164
189
  // Per active op: a request/match type. Members and their optionality come
165
190
  // from the shared partiality policy (opRequestShape); this file only
@@ -176,7 +201,7 @@ from typing import TypedDict, Any
176
201
  Content(`
177
202
 
178
203
  `)
179
- emitTypedDict(typeName, items)
204
+ emitTypedDict(typeName, items, log)
180
205
  })
181
206
  })
182
207
  })
@@ -4,7 +4,7 @@ import * as Path from 'node:path'
4
4
  import {
5
5
  cmp, each, camelify, names,
6
6
  File, Content, Folder, Fragment, Line, FeatureHook, Slot,
7
- entityClassName,
7
+ entityClassName, opTypeName,
8
8
  } from '@voxgig/sdkgen'
9
9
 
10
10
  import {
@@ -15,12 +15,6 @@ import {
15
15
  import { EntityOperation } from './EntityOperation_py'
16
16
 
17
17
 
18
- // Op -> generated request-type suffix (keep in sync with EntityTypes_py.ts).
19
- const OP_SUFFIX: Record<string, 'Match' | 'Data'> = {
20
- load: 'Match', list: 'Match', remove: 'Match', create: 'Data', update: 'Data',
21
- }
22
-
23
-
24
18
  const Entity = cmp(function Entity(props: any) {
25
19
  const { model, stdrep } = props.ctx$
26
20
  const { target, entity } = props
@@ -44,9 +38,7 @@ const Entity = cmp(function Entity(props: any) {
44
38
  const opnamesAll = Object.keys(entity.op || {})
45
39
  ;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
46
40
  if (opnamesAll.includes(opname)) {
47
- const suffix = OP_SUFFIX[opname] || 'Match'
48
- const cap = opname.charAt(0).toUpperCase() + opname.slice(1)
49
- typeNames.push(entity.Name + cap + suffix)
41
+ typeNames.push(opTypeName(entity.Name, opname))
50
42
  }
51
43
  })
52
44
  const typesModule = model.const.Name.toLowerCase() + '_types'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -60,7 +60,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
60
60
  const idF = entityIdField(entity)
61
61
  // Sanitise the local variable name — an entity whose lowercased name is a
62
62
  // Python keyword (e.g. `class`) would otherwise emit uncompilable code.
63
- const eVar = safeVarName(entity.name, 'py')
63
+ const eVar = exampleVarName(entity.name, 'py')
64
64
 
65
65
  Content(`
66
66
  ### ${entity.Name}
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -30,14 +30,19 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
30
30
  const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
31
31
  // Sanitise the local variable name — an entity whose lowercased name is a
32
32
  // Python keyword (e.g. `class`) would otherwise emit uncompilable code.
33
- const eVar = safeVarName(eName.toLowerCase(), 'py')
33
+ const eVar = exampleVarName(eName.toLowerCase(), 'py')
34
34
  // Model-driven id key: null when the entity has no id-like field, so a
35
35
  // match op takes no argument.
36
36
  const idF = exampleEntity ? entityIdField(exampleEntity) : null
37
37
  const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
38
38
  let testArg = ''
39
39
  if (exampleEntity && isMatchOp) {
40
- testArg = idF ? `{"${idF}": "test01"}` : ''
40
+ const items = opRequestShape(exampleEntity, primaryOp).items
41
+ .filter((it: any) => !it.optional || it.name === idF)
42
+ .sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
43
+ testArg = 0 < items.length
44
+ ? `{${items.map((it: any) => `"${it.name}": ${it.name === idF ? '"test01"' : pyLit(it.type)}`).join(', ')}}`
45
+ : ''
41
46
  } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
42
47
  const items = opRequestShape(exampleEntity, primaryOp).items
43
48
  .filter((it: any) => it.name !== idF && it.name !== 'id')
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -47,7 +47,7 @@ client = ${ctor}
47
47
  const article = /^[aeiou]/i.test(eName) ? 'an' : 'a'
48
48
  // Sanitise the local variable name — an entity whose lowercased name is a
49
49
  // Python keyword (e.g. `class`) would otherwise emit uncompilable code.
50
- const eVar = safeVarName(eName.toLowerCase(), 'py')
50
+ const eVar = exampleVarName(eName.toLowerCase(), 'py')
51
51
  const opnames = entityOps(exampleEntity)
52
52
  // Model-driven id key: `idF` is the entity's id-like MATCH field name, or
53
53
  // null when it has none (a response-wrapped spec). `dataIdF` is the id on
@@ -91,7 +91,7 @@ except Exception as err:
91
91
  if (nestedEntity) {
92
92
  const neName = nom(nestedEntity, 'Name')
93
93
  const neArticle = /^[aeiou]/i.test(neName) ? 'an' : 'a'
94
- const neVar = safeVarName(neName.toLowerCase(), 'py')
94
+ const neVar = exampleVarName(neName.toLowerCase(), 'py')
95
95
 
96
96
  // Model-driven match: every REQUIRED load-match key — the same shape
97
97
  // the runtime resolves path params from, so the example always works.
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -168,7 +168,7 @@ Prepare a fetch definition without sending. Returns the \`fetchdef\` and raises
168
168
  const idF = entityIdField(ent)
169
169
  // Sanitise the local variable name — an entity whose lowercased name is
170
170
  // a Python keyword (e.g. `class`) would otherwise emit uncompilable code.
171
- const eVar = safeVarName(ent.name, 'py')
171
+ const eVar = exampleVarName(ent.name, 'py')
172
172
 
173
173
  Content(`
174
174
  ---
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -46,7 +46,7 @@ client = ${ctor}
46
46
  const eName = nom(exampleEntity, 'Name')
47
47
  // Sanitise the local variable name — an entity whose lowercased name is a
48
48
  // Python keyword (e.g. `class`) would otherwise emit uncompilable code.
49
- const eVar = safeVarName(eName.toLowerCase(), 'py')
49
+ const eVar = exampleVarName(eName.toLowerCase(), 'py')
50
50
  const opnames = Object.keys(exampleEntity.op || {})
51
51
  // Model-driven id key: null when the entity has no id-like field, in which
52
52
  // case the load example takes no match argument.
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -58,7 +58,7 @@ client = ${model.const.Name}SDK.test()
58
58
  // A list() result is a list — name the variable accordingly (the root
59
59
  // README doc gate concatenates blocks, so reusing the singular name for
60
60
  // a different type is a mypy assignment error).
61
- const eVar = safeVarName(eName.toLowerCase(), 'py') + ('list' === primaryOp ? 's' : '')
61
+ const eVar = exampleVarName(eName.toLowerCase(), 'py') + ('list' === primaryOp ? 's' : '')
62
62
  Content(`${eVar} = client.${eName}().${primaryOp}(${arg})
63
63
  print(${eVar})
64
64
  `)
@@ -24,6 +24,7 @@ import {
24
24
  buildIdNames,
25
25
  getMatchEntries,
26
26
  isAuthActive,
27
+ entityDataIdField,
27
28
  } from '@voxgig/sdkgen'
28
29
 
29
30
 
@@ -332,6 +333,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
332
333
 
333
334
  const generateList: OpGen = (ctx, step, index) => {
334
335
  const { entity, flow } = ctx
336
+ const hasDataId = null != entityDataIdField(entity)
335
337
  const ref = step.input.ref ?? entity.name + '_ref01'
336
338
  const entvar = step.input.entvar ?? ref + '_ent'
337
339
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -376,7 +378,7 @@ const generateList: OpGen = (ctx, step, index) => {
376
378
  const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
377
379
  ((s.input.ref ?? entity.name + '_ref01') === validRef))
378
380
 
379
- if ('ItemExists' === validator.apply && hasRefData) {
381
+ if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
380
382
  const refDataVar = validRef + '_data'
381
383
  Content(`
382
384
  found_item = vs.select(
@@ -384,7 +386,7 @@ const generateList: OpGen = (ctx, step, index) => {
384
386
  {"id": ${refDataVar}["id"]})
385
387
  assert not vs.isempty(found_item)
386
388
  `)
387
- } else if ('ItemNotExists' === validator.apply && hasRefData) {
389
+ } else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
388
390
  const refDataVar = validRef + '_data'
389
391
  Content(`
390
392
  not_found_item = vs.select(
@@ -532,6 +534,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
532
534
 
533
535
  const generateRemove: OpGen = (ctx, step, index) => {
534
536
  const { entity, flow } = ctx
537
+ if (null == entityDataIdField(entity)) {
538
+ return
539
+ }
535
540
  const ref = step.input.ref ?? entity.name + '_ref01'
536
541
  const entvar = step.input.entvar ?? ref + '_ent'
537
542
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -27,7 +27,7 @@ import {
27
27
  File, Content,
28
28
  } from '@voxgig/sdkgen'
29
29
 
30
- import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
30
+ import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
31
31
 
32
32
  import {
33
33
  KIT,
@@ -77,15 +77,29 @@ function emitStruct(
77
77
 
78
78
 
79
79
  const EntityTypes = cmp(function EntityTypes(props: any) {
80
- const { model } = props.ctx$
81
-
82
- const entity = getModelPath(model, `main.${KIT}.entity`)
83
- const entityList = each(entity).filter((e: any) => e.active !== false)
80
+ const { model, log } = props.ctx$
81
+
82
+ // only_active:false getModelPath DROPS active:false entries by default,
83
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
84
+ // collection, so inactive entities still get generated entity code that
85
+ // references these typed names. The typed model must cover them too.
86
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
87
+ // Emit for EVERY entity that gets generated entity code: the consumer
88
+ // scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
89
+ // filter, so inactive entities still get class files referencing these
90
+ // typed names. Filter on `name` (always present), NOT `active` — parity
91
+ // with the go emitter's fix.
92
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
84
93
  // Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
85
94
  // entity not yet named (e.g. a fieldless placeholder) would otherwise read
86
95
  // `Name = undefined` below. Parity with the go emitter's fix.
87
96
  entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
88
97
 
98
+ // Surface duplicate generated type names (two entities with the same
99
+ // PascalCase Name) — they would redeclare a type in statically-typed
100
+ // targets. Detection only; renaming is a model-level decision.
101
+ warnEntityTypeCollisions(entity, log, LANG)
102
+
89
103
  File({ name: model.const.Name + '_types.' + LANG }, () => {
90
104
 
91
105
  Content(`# frozen_string_literal: true
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -58,7 +58,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
58
58
  const idF = entityIdField(entity)
59
59
  // Sanitise the local variable name — an entity whose lowercased name is a
60
60
  // Ruby keyword (e.g. `self`) would otherwise emit uncompilable code.
61
- const eVar = safeVarName(entity.name, 'rb')
61
+ const eVar = exampleVarName(entity.name, 'rb')
62
62
 
63
63
  Content(`
64
64
  ### ${entity.Name}
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -32,7 +32,7 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
32
32
  // Ruby keyword (e.g. `self`) would otherwise emit uncompilable code. The
33
33
  // fixture KEY (`"${eName.toLowerCase()}"`) stays raw — it must match the
34
34
  // entity's registered name for the mock lookup to resolve.
35
- const eVar = safeVarName(eName.toLowerCase(), 'rb')
35
+ const eVar = exampleVarName(eName.toLowerCase(), 'rb')
36
36
  // Model-driven id key: null when the entity has no id-like field (a
37
37
  // response-wrapped spec). When null the fixture seeds no id and a match op
38
38
  // takes no argument.
@@ -48,7 +48,12 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
48
48
  // remove, a required-field body for create/update, nothing for list.
49
49
  let testCallArg = ''
50
50
  if (exampleEntity && isMatchOp) {
51
- testCallArg = idF ? `{ "${idF}" => "test01" }` : ''
51
+ const items = opRequestShape(exampleEntity, primaryOp).items
52
+ .filter((it: any) => !it.optional || it.name === idF)
53
+ .sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
54
+ testCallArg = 0 < items.length
55
+ ? `{ ${items.map((it: any) => `"${it.name}" => ${it.name === idF ? '"test01"' : rbLit(it.type)}`).join(', ')} }`
56
+ : ''
52
57
  } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
53
58
  const items = opRequestShape(exampleEntity, primaryOp).items
54
59
  .filter((it: any) => it.name !== idF && it.name !== 'id')
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -45,7 +45,7 @@ client = ${ctor}
45
45
  const article = /^[aeiou]/i.test(eName) ? "an" : "a"
46
46
  // Sanitise the local variable name — an entity whose lowercased name is a
47
47
  // Ruby keyword (e.g. `self`) would otherwise emit uncompilable code.
48
- const eVar = safeVarName(eName.toLowerCase(), 'rb')
48
+ const eVar = exampleVarName(eName.toLowerCase(), 'rb')
49
49
  const opnames = entityOps(exampleEntity)
50
50
  // Model-driven id keys: `idF` is the load-MATCH key (null when the entity
51
51
  // has no id-like field — a response-wrapped spec); when null, load/remove
@@ -102,7 +102,7 @@ end
102
102
  if (nestedEntity) {
103
103
  const neName = nom(nestedEntity, 'Name')
104
104
  const neArticle = /^[aeiou]/i.test(neName) ? "an" : "a"
105
- const neVar = safeVarName(neName.toLowerCase(), 'rb')
105
+ const neVar = exampleVarName(neName.toLowerCase(), 'rb')
106
106
 
107
107
  // Model-driven match: every REQUIRED load-match key — the same shape
108
108
  // the runtime resolves path params from, so the example always works.
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -174,7 +174,7 @@ same parameters as \`direct()\`. Raises on error.
174
174
  const idF = entityIdField(ent)
175
175
  // Sanitise the local variable name — an entity whose lowercased name is
176
176
  // a Ruby keyword (e.g. `self`) would otherwise emit uncompilable code.
177
- const eVar = safeVarName(ent.name, 'rb')
177
+ const eVar = exampleVarName(ent.name, 'rb')
178
178
 
179
179
  Content(`
180
180
  ---
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -45,7 +45,7 @@ client = ${ctor}
45
45
  const eName = nom(exampleEntity, 'Name')
46
46
  // Sanitise the local variable name — an entity whose lowercased name is a
47
47
  // Ruby keyword (e.g. `self`) would otherwise emit uncompilable code.
48
- const eVar = safeVarName(eName.toLowerCase(), 'rb')
48
+ const eVar = exampleVarName(eName.toLowerCase(), 'rb')
49
49
  const opnames = Object.keys(exampleEntity.op || {})
50
50
  // Model-driven id key: null when the entity has no id-like field, in which
51
51
  // case the load example takes no match argument.
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -59,7 +59,7 @@ const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
59
59
  // base name — an entity whose lowercased name is a Ruby keyword (e.g.
60
60
  // `self`) would otherwise emit uncompilable code. The fixture KEY (`ename`)
61
61
  // stays raw so the mock lookup resolves.
62
- const eVar = safeVarName(ename, 'rb') + ('list' === primaryOp ? 's' : '')
62
+ const eVar = exampleVarName(ename, 'rb') + ('list' === primaryOp ? 's' : '')
63
63
  Content(`\`\`\`ruby
64
64
  # Seed fixture data so offline calls resolve without a live server.
65
65
  client = ${model.const.Name}SDK.test({
@@ -24,6 +24,7 @@ import {
24
24
  buildIdNames,
25
25
  getMatchEntries,
26
26
  isAuthActive,
27
+ entityDataIdField,
27
28
  } from '@voxgig/sdkgen'
28
29
 
29
30
 
@@ -327,6 +328,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
327
328
 
328
329
  const generateList: OpGen = (ctx, step, index) => {
329
330
  const { entity, flow } = ctx
331
+ const hasDataId = null != entityDataIdField(entity)
330
332
  const ref = step.input.ref ?? entity.name + '_ref01'
331
333
  const entvar = step.input.entvar ?? ref + '_ent'
332
334
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -371,7 +373,7 @@ const generateList: OpGen = (ctx, step, index) => {
371
373
  const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
372
374
  ((s.input.ref ?? entity.name + '_ref01') === validRef))
373
375
 
374
- if ('ItemExists' === validator.apply && hasRefData) {
376
+ if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
375
377
  const refDataVar = validRef + '_data'
376
378
  Content(`
377
379
  found_item = Vs.select(
@@ -379,7 +381,7 @@ const generateList: OpGen = (ctx, step, index) => {
379
381
  { "id" => ${refDataVar}["id"] })
380
382
  assert !Vs.isempty(found_item)
381
383
  `)
382
- } else if ('ItemNotExists' === validator.apply && hasRefData) {
384
+ } else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
383
385
  const refDataVar = validRef + '_data'
384
386
  Content(`
385
387
  not_found_item = Vs.select(
@@ -529,6 +531,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
529
531
 
530
532
  const generateRemove: OpGen = (ctx, step, index) => {
531
533
  const { entity, flow } = ctx
534
+ if (null == entityDataIdField(entity)) {
535
+ return
536
+ }
532
537
  const ref = step.input.ref ?? entity.name + '_ref01'
533
538
  const entvar = step.input.entvar ?? ref + '_ent'
534
539
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -39,6 +39,10 @@ const EntityBase = cmp(async function EntityBase(props: any) {
39
39
  `)
40
40
  })
41
41
 
42
+ // Documentary typed models (entity/types.rs), generated by EntityTypes.
43
+ Content(`pub mod types;
44
+ `)
45
+
42
46
  if (0 < Object.keys(entity || {}).length) {
43
47
  Content(`
44
48
  `)