@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,105 @@
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 { swiftVarName } from './utility_swift'
11
+
12
+
13
+ // A type-correct Swift `Value` literal for a param: numeric/boolean/array/
14
+ // object params render a typed literal; strings render the quoted placeholder.
15
+ // The SDK's loose object model means every value is a `Value` inside a `VMap`.
16
+ function swiftLit(type: any, placeholder: string = 'example'): string {
17
+ const k = canonKey(type)
18
+ if ('INTEGER' === k) return '.int(1)'
19
+ if ('NUMBER' === k) return '.double(1.0)'
20
+ if ('BOOLEAN' === k) return '.bool(true)'
21
+ if ('ARRAY' === k) return '.list([])'
22
+ if ('OBJECT' === k) return '.map(VMap())'
23
+ return `.string("${placeholder}")`
24
+ }
25
+
26
+
27
+ const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
28
+ const { target, ctx$: { model } } = props
29
+
30
+ const SDK = model.const.Name + 'SDK'
31
+ const MODULE = model.const.Name + 'Sdk'
32
+
33
+ const entity = getModelPath(model, `main.${KIT}.entity`)
34
+
35
+ const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
36
+
37
+ const authActive = isAuthActive(model)
38
+
39
+ Content(`\`\`\`swift
40
+ import ${MODULE}
41
+
42
+ `)
43
+
44
+ if (authActive) {
45
+ Content(`let options = VMap()
46
+ options.entries["apikey"] = .string(
47
+ ProcessInfo.processInfo.environment["${envName(model)}_APIKEY"] ?? "")
48
+ let client = ${SDK}(options)
49
+
50
+ `)
51
+ }
52
+ else {
53
+ Content(`let client = ${SDK}()
54
+
55
+ `)
56
+ }
57
+
58
+ if (exampleEntity) {
59
+ const eName = nom(exampleEntity, 'Name')
60
+ const eVar = swiftVarName(exampleEntity.name)
61
+ const eNameLower = eName.toLowerCase()
62
+ const opnames = Object.keys(exampleEntity.op || {})
63
+ // Model-driven id key: null when the entity has no id-like field, in which
64
+ // case the load example takes an empty match.
65
+ const idF = entityIdField(exampleEntity)
66
+
67
+ if (opnames.includes('list')) {
68
+ Content(`// List all ${eNameLower}s (returns a Value list, throws on error)
69
+ let ${eVar}List = try client.${eName}().list(nil, nil)
70
+ for ${eVar} in ${eVar}List.asList?.items ?? [] {
71
+ print(${eVar})
72
+ }
73
+ `)
74
+ }
75
+
76
+ if (opnames.includes('load')) {
77
+ // Every REQUIRED load-match key (id first, then parent path params like
78
+ // page_id) — the same shape the runtime resolves path params from, so
79
+ // the example always works.
80
+ const loadItems = opRequestShape(exampleEntity, 'load').items
81
+ .filter((it: any) => !it.optional || it.name === idF)
82
+ .sort((a: any, b: any) =>
83
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
84
+ const loadArg = 0 < loadItems.length
85
+ ? `VMap([${loadItems.map((it: any) =>
86
+ `("${it.name}", ${swiftLit(it.type,
87
+ it.name === idF ? 'example_id' : 'example_' + it.name)})`).join(', ')}])`
88
+ : 'nil'
89
+ Content(`
90
+ // Load a specific ${eNameLower} (returns the record, throws on error)
91
+ let ${eVar} = try client.${eName}().load(${loadArg}, nil)
92
+ print(${eVar})
93
+ `)
94
+ }
95
+ }
96
+
97
+ Content(`\`\`\`
98
+ `)
99
+
100
+ })
101
+
102
+
103
+ export {
104
+ ReadmeTopQuick
105
+ }
@@ -0,0 +1,77 @@
1
+
2
+ import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+ import { swiftVarName } from './utility_swift'
10
+
11
+
12
+ // A type-correct Swift `Value` literal for a field's canonical type.
13
+ function swiftLit(type: any): string {
14
+ const k = canonKey(type)
15
+ if ('INTEGER' === k) return '.int(1)'
16
+ if ('NUMBER' === k) return '.double(1.0)'
17
+ if ('BOOLEAN' === k) return '.bool(true)'
18
+ if ('ARRAY' === k) return '.list([])'
19
+ if ('OBJECT' === k) return '.map(VMap())'
20
+ return '.string("example")'
21
+ }
22
+
23
+
24
+ const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
25
+ const { target, ctx$: { model } } = props
26
+
27
+ const SDK = model.const.Name + 'SDK'
28
+
29
+ const entity = getModelPath(model, `main.${KIT}.entity`)
30
+
31
+ // Pick an entity with a real op (prefer a read op) — never fabricate a
32
+ // `load` on an op-less entity.
33
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
34
+
35
+ Content(`\`\`\`swift
36
+ let client = ${SDK}.testSDK(nil, nil)
37
+ `)
38
+
39
+ if (exampleEntity && primaryOp) {
40
+ const eName = exampleEntity.Name
41
+ const idF = entityIdField(exampleEntity)
42
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
43
+ let arg = 'nil'
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
+ ? `VMap([${items.map((it: any) =>
53
+ `("${it.name}", ${it.name === idF ? '.string("test01")' : swiftLit(it.type)})`).join(', ')}])`
54
+ : 'nil'
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 = `VMap([${chosen.map((it: any) =>
61
+ `("${it.name}", ${swiftLit(it.type)})`).join(', ')}])`
62
+ }
63
+ const eVar = swiftVarName(exampleEntity.name) + ('list' === primaryOp ? 'List' : '')
64
+ Content(`let ${eVar} = try client.${eName}().${primaryOp}(${arg}, nil)
65
+ print(${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_swift'
15
15
  import { TestDirect } from './TestDirect_swift'
16
+ import { ReadmeExamplesTest } from './ReadmeExamplesTest_swift'
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 swift examples in the READMEs are well-formed.
35
+ ReadmeExamplesTest({ target })
32
36
  })
33
37
  })
34
38
  })
@@ -21,7 +21,7 @@ import {
21
21
  File, Content,
22
22
  } from '@voxgig/sdkgen'
23
23
 
24
- import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
24
+ import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
25
25
 
26
26
  import {
27
27
  KIT,
@@ -39,15 +39,29 @@ function propKey(name: string): string {
39
39
 
40
40
 
41
41
  const EntityTypes = cmp(function EntityTypes(props: any) {
42
- const { model } = props.ctx$
43
-
44
- const entity = getModelPath(model, `main.${KIT}.entity`)
45
- const entityList = each(entity).filter((e: any) => e.active !== false)
42
+ const { model, log } = props.ctx$
43
+
44
+ // only_active:false getModelPath DROPS active:false entries by default,
45
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
46
+ // collection, so inactive entities still get generated entity code that
47
+ // references these typed names. The typed model must cover them too.
48
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
49
+ // Emit for EVERY entity that gets generated entity code: the consumer
50
+ // scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
51
+ // filter, so inactive entities still get class files referencing these
52
+ // typed names. Filter on `name` (always present), NOT `active` — parity
53
+ // with the go emitter's fix.
54
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
46
55
  // Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
47
56
  // entity not yet named (e.g. a fieldless placeholder) would otherwise read
48
57
  // `Name = undefined` below. Parity with the go emitter's fix.
49
58
  entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
50
59
 
60
+ // Surface duplicate generated type names (two entities with the same
61
+ // PascalCase Name) — they would redeclare a type in statically-typed
62
+ // targets. Detection only; renaming is a model-level decision.
63
+ warnEntityTypeCollisions(entity, log, LANG)
64
+
51
65
  File({ name: model.const.Name + 'Types.' + LANG }, () => {
52
66
 
53
67
  Content(`// Typed models for the ${model.const.Name} SDK.
@@ -18,9 +18,11 @@ const MainEntity = cmp(async function MainEntity(props: any) {
18
18
 
19
19
  Content(`
20
20
  // Entity access: \`client.${entity.Name}().list()\` / \`client.${entity.Name}().load({ id })\`.
21
- ${entity.Name}(data?: any) {
21
+ // The argument is the entity OPTIONS object (passed to the entity
22
+ // constructor as entopts), not initial entity data.
23
+ ${entity.Name}(entopts?: Record<string, any>) {
22
24
  const self = this
23
- return new ${cls}(self,data)
25
+ return new ${cls}(self, entopts)
24
26
  }
25
27
 
26
28
  `)
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -46,7 +46,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
46
46
  // Model-driven id key: null when this entity has no id-like field.
47
47
  const idF = entityIdField(entity)
48
48
  // Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
49
- const eVar = safeVarName(entity.name, target.name)
49
+ const eVar = exampleVarName(entity.name, target.name)
50
50
 
51
51
  Content(`
52
52
  ### ${entity.Name}
@@ -108,7 +108,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
108
108
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
109
109
  const loadArg = 0 < loadItems.length
110
110
  ? `{ ${loadItems.map((it: any) =>
111
- `${it.name}: ${exampleValue(entity, entity.op && entity.op.load, it.name,
111
+ `${jsKey(it.name)}: ${exampleValue(entity, entity.op && entity.op.load, it.name,
112
112
  it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')} }`
113
113
  : ''
114
114
  Content(`#### Example: Load
@@ -143,7 +143,7 @@ const ${eVar}s = await client.${entity.Name}().list()
143
143
  const ${eVar} = await client.${entity.Name}().create({
144
144
  `)
145
145
  createItems.map((it: any) => {
146
- Content(` ${it.name}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
146
+ Content(` ${jsKey(it.name)}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
147
147
  `)
148
148
  })
149
149
  Content(`})
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, entityIdField, entityDataIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, entityIdField, entityDataIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -20,7 +20,7 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
20
20
  const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
21
21
  const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
22
22
  // Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
23
- const eVar = safeVarName(eName.toLowerCase(), 'ts')
23
+ const eVar = exampleVarName(eName.toLowerCase(), 'ts')
24
24
 
25
25
  const primaryOpDef = exampleEntity && primaryOp && exampleEntity.op && exampleEntity.op[primaryOp]
26
26
  const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
@@ -35,7 +35,17 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
35
35
  if (!exampleEntity || !primaryOp) return ''
36
36
  if ('list' === primaryOp) return ''
37
37
  if (isMatchOp) {
38
- return idF ? `{ ${idF}: ${exampleValue(exampleEntity, primaryOpDef, idF, idPlaceholder)} }` : ''
38
+ // Every REQUIRED match key (id first), not just idF a composite-match
39
+ // entity (e.g. Umbrella's FlatPermission, database_id + id) needs them all
40
+ // to satisfy the typed <Name>LoadMatch. Mirrors ReadmeTopTest.
41
+ const items = opRequestShape(exampleEntity, primaryOp).items
42
+ .filter((it: any) => !it.optional || it.name === idF)
43
+ .sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
44
+ if (0 === items.length) return ''
45
+ const pairs = items.map((it: any) =>
46
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
47
+ it.name === idF ? idPlaceholder : 'example_' + it.name)}`)
48
+ return `{ ${pairs.join(', ')} }`
39
49
  }
40
50
  // create / update: a body of the required writable fields.
41
51
  const items = opRequestShape(exampleEntity, primaryOp).items
@@ -43,7 +53,7 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
43
53
  const required = items.filter((it: any) => !it.optional)
44
54
  const chosen = required.length ? required : items.slice(0, 3)
45
55
  const pairs = chosen.map((it: any) =>
46
- `${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
56
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
47
57
  return `{ ${pairs.join(', ')} }`
48
58
  }
49
59
  const testCallArg = primaryArg('test01')
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -48,7 +48,7 @@ const client = ${ctor}
48
48
  const eName = nom(exampleEntity, 'Name')
49
49
  // Variable-safe lowercase name — a `Delete`/`Class` entity must not bind a
50
50
  // reserved word (`const delete = ...` is a TS1109 syntax error).
51
- const eVar = safeVarName(eName.toLowerCase(), 'ts')
51
+ const eVar = exampleVarName(eName.toLowerCase(), 'ts')
52
52
  const article = /^[aeiou]/i.test(eName) ? 'an' : 'a'
53
53
  const opnames = entityOps(exampleEntity)
54
54
  // Model-driven id key: `idF` is the entity's id-like MATCH field name, or
@@ -78,7 +78,7 @@ for (const ${eVar} of ${eVar}s) {
78
78
 
79
79
  if (nestedEntity) {
80
80
  const neName = nom(nestedEntity, 'Name')
81
- const neVar = safeVarName(neName.toLowerCase(), 'ts')
81
+ const neVar = exampleVarName(neName.toLowerCase(), 'ts')
82
82
  const neArticle = /^[aeiou]/i.test(neName) ? 'an' : 'a'
83
83
  const loadOp = nestedEntity.op && nestedEntity.op.load
84
84
 
@@ -94,7 +94,7 @@ for (const ${eVar} of ${eVar}s) {
94
94
  const parentParam = parentItem && parentItem.name
95
95
  const parentName = parentParam ? parentParam.replace(/_id$/, '') : 'its parent'
96
96
  const neMatchLines = neRequired.map((it: any) =>
97
- ` ${it.name}: ${exampleValue(nestedEntity, loadOp, it.name,
97
+ ` ${jsKey(it.name)}: ${exampleValue(nestedEntity, loadOp, it.name,
98
98
  it.name === neIdF ? 'example_id' : 'example_' + it.name)},`)
99
99
 
100
100
  Content(`### 3. Load ${neArticle} ${neName.toLowerCase()}
@@ -124,7 +124,7 @@ ${neMatchLines.join('\n')}
124
124
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
125
125
  const loadArg = 0 < loadRequired.length
126
126
  ? `{ ${loadRequired.map((it: any) =>
127
- `${it.name}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op.load, it.name,
127
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op.load, it.name,
128
128
  it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')} }`
129
129
  : ''
130
130
 
@@ -169,15 +169,33 @@ try {
169
169
  ? (required.length ? required : items.slice(0, 2))
170
170
  : required.concat(optional).slice(0, Math.max(2, required.length))
171
171
  return chosen.map((it: any) =>
172
- ` ${it.name}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
172
+ ` ${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
173
173
  }
174
174
 
175
175
  // The id VALUE for an update/remove match. When the entity's DATA type
176
176
  // carries the id (dataIdF) AND a `created` record exists, take it off the
177
177
  // returned record; otherwise use a type-correct literal — reading
178
178
  // `created.id` off an id-less data type is a TS2339.
179
- const canUseCreatedId = null != dataIdF && opnames.includes('create')
180
- const idValueFor = (opname: string): string => canUseCreatedId
179
+ // Type of the data field we would read off `created` (e.g. number for an
180
+ // integer id). null when unknown.
181
+ const dataFields: any[] = exampleEntity.fields ? each(exampleEntity.fields) : []
182
+ const dataIdType = dataIdF
183
+ ? (dataFields.find((f: any) => f && f.name === dataIdF) || {}).type
184
+ : null
185
+ // `created.<dataIdF>` is only usable as an op's id-match value when its
186
+ // type matches that op's id PARAM type. An id that is integer in the data
187
+ // type but string in the match path (a spec quirk seen on management
188
+ // APIs) would be a TS2322 otherwise — fall back to a type-correct literal.
189
+ const usesCreatedId = (opname: string): boolean => {
190
+ if (null == dataIdF || !opnames.includes('create')) {
191
+ return false
192
+ }
193
+ const matchItem = opRequestShape(exampleEntity, opname).items
194
+ .find((it: any) => it.name === idF)
195
+ const matchType = matchItem ? matchItem.type : null
196
+ return null == matchType || null == dataIdType || matchType === dataIdType
197
+ }
198
+ const idValueFor = (opname: string): string => usesCreatedId(opname)
181
199
  ? `created.${dataIdF}!`
182
200
  : exampleValue(exampleEntity, exampleEntity.op[opname], idF as string, 'example_id')
183
201
 
@@ -198,7 +216,7 @@ const created = await client.${eName}().create({${createBody}})
198
216
  // type carries one, else a literal), plus a couple of patch fields.
199
217
  const updateLines = (idF ? [` ${idF}: ${idValueFor('update')},`] : []).concat(exampleFields('update'))
200
218
  const updateBody = updateLines.length ? '\n' + updateLines.join('\n') + '\n' : ''
201
- Content(`// Update${canUseCreatedId ? ' — the id comes straight off the returned entity' : ''}
219
+ Content(`// Update${usesCreatedId('update') ? ' — the id comes straight off the returned entity' : ''}
202
220
  const updated = await client.${eName}().update({${updateBody}})
203
221
 
204
222
  `)
@@ -211,8 +229,8 @@ const updated = await client.${eName}().update({${updateBody}})
211
229
  .sort((a: any, b: any) =>
212
230
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
213
231
  .map((it: any) => it.name === idF
214
- ? ` ${it.name}: ${idValueFor('remove')},`
215
- : ` ${it.name}: ${exampleValue(exampleEntity, exampleEntity.op.remove, it.name, 'example_' + it.name)},`)
232
+ ? ` ${jsKey(it.name)}: ${idValueFor('remove')},`
233
+ : ` ${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op.remove, it.name, 'example_' + it.name)},`)
216
234
  Content(`// Remove
217
235
  await client.${eName}().remove(${removeLines.length ? `{\n${removeLines.join('\n')}\n}` : ''})
218
236
  `)
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -185,7 +185,7 @@ Alias for \`${model.Name}SDK.test()\`.
185
185
  // which case load/remove match on no argument and update omits the id.
186
186
  const idF = entityIdField(ent)
187
187
  // Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
188
- const eVar = safeVarName(ent.name, target.name)
188
+ const eVar = exampleVarName(ent.name, target.name)
189
189
 
190
190
  Content(`
191
191
  ---
@@ -281,7 +281,7 @@ ${info.desc}
281
281
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
282
282
  const arg = 0 < matchItems.length
283
283
  ? `{ ${matchItems.map((it: any) =>
284
- `${it.name}: ${exampleValue(ent, ent.op && ent.op[opname], it.name,
284
+ `${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op[opname], it.name,
285
285
  it.name === idF ? ent.name + '_id' : it.name)}`).join(', ')} }`
286
286
  : ''
287
287
  Content(`\`\`\`ts
@@ -308,7 +308,7 @@ const results = await client.${ent.Name}().${opname}()
308
308
  const result = await client.${ent.Name}().create({
309
309
  `)
310
310
  createItems.map((it: any) => {
311
- Content(` ${it.name}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
311
+ Content(` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
312
312
  `)
313
313
  })
314
314
  Content(`})
@@ -324,7 +324,7 @@ const result = await client.${ent.Name}().create({
324
324
  .sort((a: any, b: any) =>
325
325
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
326
326
  const updateLines = updateItems.map((it: any) =>
327
- ` ${it.name}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
327
+ ` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
328
328
  it.name === idF ? ent.name + '_id' : it.name)},\n`).join('')
329
329
  Content(`\`\`\`ts
330
330
  const result = await client.${ent.Name}().update({
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -30,7 +30,7 @@ const client = ${ctor}
30
30
 
31
31
  if (exampleEntity) {
32
32
  const eName = nom(exampleEntity, 'Name')
33
- const eVar = safeVarName(eName.toLowerCase(), 'ts')
33
+ const eVar = exampleVarName(eName.toLowerCase(), 'ts')
34
34
  const opnames = entityOps(exampleEntity)
35
35
 
36
36
  let hasCall = false
@@ -58,7 +58,7 @@ for (const ${eVar} of ${eVar}s) {
58
58
 
59
59
  if (nestedEntity) {
60
60
  const neName = nom(nestedEntity, 'Name')
61
- const neVar = safeVarName(neName.toLowerCase(), 'ts')
61
+ const neVar = exampleVarName(neName.toLowerCase(), 'ts')
62
62
  const loadOp = nestedEntity.op && nestedEntity.op.load
63
63
 
64
64
  // Every REQUIRED load-match key (parent keys first, own id last) — the
@@ -70,7 +70,7 @@ for (const ${eVar} of ${eVar}s) {
70
70
  .sort((a: any, b: any) =>
71
71
  (a.name === neIdF ? 1 : 0) - (b.name === neIdF ? 1 : 0))
72
72
  .map((it: any) =>
73
- ` ${it.name}: ${exampleValue(nestedEntity, loadOp, it.name,
73
+ ` ${jsKey(it.name)}: ${exampleValue(nestedEntity, loadOp, it.name,
74
74
  it.name === neIdF ? 'example_id' : 'example_' + it.name)},`)
75
75
 
76
76
  Content(`
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -25,7 +25,7 @@ const client = ${model.const.Name}SDK.test()
25
25
  if (exampleEntity && primaryOp) {
26
26
  const eName = nom(exampleEntity, 'Name')
27
27
  // A list() result is an array — name the variable accordingly.
28
- const eVar = safeVarName(eName.toLowerCase(), 'ts') +
28
+ const eVar = exampleVarName(eName.toLowerCase(), 'ts') +
29
29
  ('list' === primaryOp ? 's' : '')
30
30
  const primaryOpDef = exampleEntity.op && exampleEntity.op[primaryOp]
31
31
  const idF = entityIdField(exampleEntity)
@@ -39,7 +39,7 @@ const client = ${model.const.Name}SDK.test()
39
39
  (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
40
40
  arg = 0 < items.length
41
41
  ? `{ ${items.map((it: any) =>
42
- `${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
42
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
43
43
  it.name === idF ? 'test01' : 'example_' + it.name)}`).join(', ')} }`
44
44
  : ''
45
45
  } else if ('create' === primaryOp || 'update' === primaryOp) {
@@ -48,7 +48,7 @@ const client = ${model.const.Name}SDK.test()
48
48
  const required = items.filter((it: any) => !it.optional)
49
49
  const chosen = required.length ? required : items.slice(0, 3)
50
50
  arg = `{ ${chosen.map((it: any) =>
51
- `${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`).join(', ')} }`
51
+ `${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`).join(', ')} }`
52
52
  }
53
53
  Content(`const ${eVar} = await client.${eName}().${primaryOp}(${arg})
54
54
  // ${eVar} is ${'list' === primaryOp ? `an array of bare ${eName} records` : `a bare ${eName}`} populated with mock data
@@ -17,6 +17,8 @@ import {
17
17
  cmp,
18
18
  snakify,
19
19
  isAuthActive,
20
+ jsProp,
21
+ jsOptProp,
20
22
  } from '@voxgig/sdkgen'
21
23
 
22
24
 
@@ -192,7 +194,7 @@ function generateDirectLoad(model: Model, entity: ModelEntity) {
192
194
  .filter((q: any) => q.reqd && undefined !== q.example && null !== q.example)
193
195
  const hasLiveQuery = liveQueryEntries.length > 0
194
196
  const liveQueryLines = liveQueryEntries
195
- .map((q: any) => ` query.${q.name} = ${JSON.stringify(q.example)}`)
197
+ .map((q: any) => ` ${jsProp('query', q.name)} = ${JSON.stringify(q.example)}`)
196
198
  .join('\n')
197
199
 
198
200
  // Get list info for live mode bootstrapping
@@ -245,12 +247,12 @@ function generateDirectLoad(model: Model, entity: ModelEntity) {
245
247
  let liveParamsBlock = ''
246
248
  if (allLoadParamsHaveExamples) {
247
249
  const exampleLines = loadParams.map(
248
- (p: any) => ` params.${p.name} = ${JSON.stringify(p.example)}`
250
+ (p: any) => ` ${jsProp('params', p.name)} = ${JSON.stringify(p.example)}`
249
251
  ).join('\n')
250
252
  liveParamsBlock = ` if (setup.live) {
251
253
  ${liveQueryPrefix}${exampleLines}
252
254
  } else {
253
- ${loadParams.map((p: any, i: number) => ` params.${p.name} = 'direct0${i + 1}'`).join('\n')}
255
+ ${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
254
256
  }`
255
257
  }
256
258
  else if (hasList) {
@@ -262,7 +264,7 @@ ${loadParams.map((p: any, i: number) => ` params.${p.name} = 'direct0${i +
262
264
  const listParamLines = liveListParams.map((lp: any) =>
263
265
  ` ${lp.name}: setup.idmap['${lp.key}'],`).join('\n')
264
266
  const ancestorParamLines = liveAncestorParams.map((lp: any) =>
265
- ` params.${lp.name} = setup.idmap['${lp.key}']`).join('\n')
267
+ ` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n')
266
268
  // Try every load-path param name as the candidate field on listData[0].
267
269
  // Some APIs name the path param differently from the response field
268
270
  // (e.g. path uses {id} while response has mal_id), so we attempt the
@@ -286,14 +288,14 @@ ${listParamLines}
286
288
  if (null == listArr || listArr.length === 0) {
287
289
  return // skip: no entities to load in live mode
288
290
  }
289
- const candidateId = listArr[0]?.${idParamName} ?? listArr[0]?.id
291
+ const candidateId = ${jsOptProp('listArr[0]', idParamName)} ?? listArr[0]?.id
290
292
  if (null == candidateId) {
291
293
  return // skip: list response shape does not expose load identifier
292
294
  }
293
- params.${idParamName} = candidateId
295
+ ${jsProp('params', idParamName)} = candidateId
294
296
  ${ancestorParamLines}
295
297
  } else {
296
- ${loadParams.map((p: any, i: number) => ` params.${p.name} = 'direct0${i + 1}'`).join('\n')}
298
+ ${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
297
299
  }`
298
300
  } else if (hasLiveQuery || loadParams.length > 0) {
299
301
  // Synthetic-only fallback: if there are load params with no examples
@@ -306,7 +308,7 @@ ${loadParams.map((p: any, i: number) => ` params.${p.name} = 'direct0${i +
306
308
  liveParamsBlock = ` if (setup.live) {
307
309
  ${liveQueryPrefix.replace(/\n$/, '')}
308
310
  } else {
309
- ${loadParams.map((p: any, i: number) => ` params.${p.name} = 'direct0${i + 1}'`).join('\n')}
311
+ ${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
310
312
  }`
311
313
  } else {
312
314
  liveParamsBlock = ''
@@ -369,7 +371,7 @@ function generateDirectList(model: Model, entity: ModelEntity) {
369
371
  const listQuery = listPoint.args?.query || []
370
372
  const liveQueryLines = listQuery
371
373
  .filter((q: any) => q.reqd && undefined !== q.example && null !== q.example)
372
- .map((q: any) => ` query.${q.name} = ${JSON.stringify(q.example)}`)
374
+ .map((q: any) => ` ${jsProp('query', q.name)} = ${JSON.stringify(q.example)}`)
373
375
  .join('\n')
374
376
 
375
377
  // Build live params
@@ -388,10 +390,10 @@ function generateDirectList(model: Model, entity: ModelEntity) {
388
390
  const liveLines = [
389
391
  liveQueryLines,
390
392
  liveParams.map((lp: any) =>
391
- ` params.${lp.name} = setup.idmap['${lp.key}']`).join('\n'),
393
+ ` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n'),
392
394
  ].filter(Boolean).join('\n')
393
395
  const mockLines = listParams.map((p: any, i: number) =>
394
- ` params.${p.name} = 'direct0${i + 1}'`).join('\n')
396
+ ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')
395
397
 
396
398
  paramsBlock = ` const params: any = {}
397
399
  const query: any = {}