@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,104 @@
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 { kotlinVarName, kotlinPackage } from './utility_kotlin'
11
+
12
+
13
+ // A type-correct Kotlin literal for a param: numeric/boolean/array/object
14
+ // params render a typed literal; strings render the quoted placeholder. The
15
+ // SDK's loose object model means all values live in MutableMap<String, Any?>.
16
+ function kotlinLit(type: any, placeholder: string = 'example'): string {
17
+ const k = canonKey(type)
18
+ if ('INTEGER' === k) return '1L'
19
+ if ('NUMBER' === k) return '1.0'
20
+ if ('BOOLEAN' === k) return 'true'
21
+ if ('ARRAY' === k) return 'listOf<Any?>()'
22
+ if ('OBJECT' === k) return 'mapOf<String, Any?>()'
23
+ return `"${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
+
32
+ const entity = getModelPath(model, `main.${KIT}.entity`)
33
+
34
+ const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
35
+
36
+ const authActive = isAuthActive(model)
37
+
38
+ Content(`\`\`\`kotlin
39
+ import ${kotlinPackage(model)}.core.${SDK}
40
+
41
+ `)
42
+
43
+ if (authActive) {
44
+ Content(`val client = ${SDK}(mutableMapOf<String, Any?>(
45
+ "apikey" to System.getenv("${envName(model)}_APIKEY"),
46
+ ))
47
+
48
+ `)
49
+ }
50
+ else {
51
+ Content(`val client = ${SDK}()
52
+
53
+ `)
54
+ }
55
+
56
+ if (exampleEntity) {
57
+ // Sanitise the local variable name — an entity whose camelCased name is a
58
+ // Kotlin keyword gets a trailing underscore (kotlinVarName) so the snippet
59
+ // compiles.
60
+ const eVar = kotlinVarName(exampleEntity.name)
61
+ const accessor = kotlinVarName(exampleEntity.name)
62
+ const eNameLower = nom(exampleEntity, 'Name').toLowerCase()
63
+ const opnames = Object.keys(exampleEntity.op || {})
64
+ // Model-driven id key: null when the entity has no id-like field, in which
65
+ // case the load example takes an empty match.
66
+ const idF = entityIdField(exampleEntity)
67
+
68
+ if (opnames.includes('list')) {
69
+ Content(`// List all ${eNameLower}s (returns Any?, an aggregate list; raises on error)
70
+ val ${eVar}List = client.${accessor}(null).list(null, null)
71
+ println(${eVar}List)
72
+ `)
73
+ }
74
+
75
+ if (opnames.includes('load')) {
76
+ // Every REQUIRED load-match key (id first, then parent path params like
77
+ // page_id) — the same shape the runtime resolves path params from, so
78
+ // the example always works.
79
+ const loadItems = opRequestShape(exampleEntity, 'load').items
80
+ .filter((it: any) => !it.optional || it.name === idF)
81
+ .sort((a: any, b: any) =>
82
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
83
+ const loadArg = 0 < loadItems.length
84
+ ? `mutableMapOf<String, Any?>(${loadItems.map((it: any) =>
85
+ `"${it.name}" to ${kotlinLit(it.type,
86
+ it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')})`
87
+ : 'null'
88
+ Content(`
89
+ // Load a specific ${eNameLower} (returns the record, raises on error)
90
+ val ${eVar} = client.${accessor}(null).load(${loadArg}, null)
91
+ println(${eVar})
92
+ `)
93
+ }
94
+ }
95
+
96
+ Content(`\`\`\`
97
+ `)
98
+
99
+ })
100
+
101
+
102
+ export {
103
+ ReadmeTopQuick
104
+ }
@@ -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 { kotlinVarName } from './utility_kotlin'
10
+
11
+
12
+ // A type-correct Kotlin literal for a field's canonical type.
13
+ function kotlinLit(type: any): string {
14
+ const k = canonKey(type)
15
+ if ('INTEGER' === k) return '1L'
16
+ if ('NUMBER' === k) return '1.0'
17
+ if ('BOOLEAN' === k) return 'true'
18
+ if ('ARRAY' === k) return 'listOf<Any?>()'
19
+ if ('OBJECT' === k) return 'mapOf<String, Any?>()'
20
+ return '"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(`\`\`\`kotlin
36
+ val client = ${SDK}.testSDK(null, null)
37
+ `)
38
+
39
+ if (exampleEntity && primaryOp) {
40
+ const idF = entityIdField(exampleEntity)
41
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
42
+ let arg = 'null'
43
+ if (isMatchOp) {
44
+ // Every REQUIRED match key (id first) — the same shape that generates
45
+ // the op's request type, so the block stays honest.
46
+ const items = opRequestShape(exampleEntity, primaryOp).items
47
+ .filter((it: any) => !it.optional || it.name === idF)
48
+ .sort((a: any, b: any) =>
49
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
50
+ arg = 0 < items.length
51
+ ? `mutableMapOf<String, Any?>(${items.map((it: any) =>
52
+ `"${it.name}" to ${it.name === idF ? '"test01"' : kotlinLit(it.type)}`).join(', ')})`
53
+ : 'null'
54
+ } else if ('create' === primaryOp || 'update' === primaryOp) {
55
+ const items = opRequestShape(exampleEntity, primaryOp).items
56
+ .filter((it: any) => it.name !== idF && it.name !== 'id')
57
+ const required = items.filter((it: any) => !it.optional)
58
+ const chosen = required.length ? required : items.slice(0, 3)
59
+ arg = `mutableMapOf<String, Any?>(${chosen.map((it: any) =>
60
+ `"${it.name}" to ${kotlinLit(it.type)}`).join(', ')})`
61
+ }
62
+ const eVar = kotlinVarName(exampleEntity.name) + ('list' === primaryOp ? 'List' : '')
63
+ const accessor = kotlinVarName(exampleEntity.name)
64
+ Content(`val ${eVar} = client.${accessor}(null).${primaryOp}(${arg}, null)
65
+ println(${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_kotlin'
15
15
  import { TestDirect } from './TestDirect_kotlin'
16
+ import { ReadmeExamplesTest } from './ReadmeExamplesTest_kotlin'
16
17
  import { kotlinPackage } from './utility_kotlin'
17
18
 
18
19
 
@@ -33,6 +34,9 @@ const Test = cmp(function Test(props: any) {
33
34
  TestEntity({ target, entity, kotlinpackage })
34
35
  TestDirect({ target, entity, kotlinpackage })
35
36
  })
37
+
38
+ // Validate the documented kotlin examples in the root + per-language docs.
39
+ ReadmeExamplesTest({ target, kotlinpackage })
36
40
  })
37
41
  })
38
42
 
@@ -54,7 +54,7 @@ const Config = cmp(async function Config(props: any) {
54
54
 
55
55
  File({ name: 'config.' + target.ext }, () => {
56
56
 
57
- Content(`-- ProjectName SDK configuration
57
+ Content(`-- ${model.const.Name} SDK configuration
58
58
 
59
59
  local function make_config()
60
60
  return {
@@ -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,
@@ -41,15 +41,29 @@ function propKey(name: string): string {
41
41
 
42
42
  const EntityTypes = cmp(function EntityTypes(props: any) {
43
43
  const { target } = props
44
- const { model } = props.ctx$
45
-
46
- const entity = getModelPath(model, `main.${KIT}.entity`)
47
- const entityList = each(entity).filter((e: any) => e.active !== false)
44
+ const { model, log } = props.ctx$
45
+
46
+ // only_active:false getModelPath DROPS active:false entries by default,
47
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
48
+ // collection, so inactive entities still get generated entity code that
49
+ // references these typed names. The typed model must cover them too.
50
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
51
+ // Emit for EVERY entity that gets generated entity code: the consumer
52
+ // scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
53
+ // filter, so inactive entities still get class files referencing these
54
+ // typed names. Filter on `name` (always present), NOT `active` — parity
55
+ // with the go emitter's fix.
56
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
48
57
  // Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
49
58
  // entity not yet named (e.g. a fieldless placeholder) would otherwise read
50
59
  // `Name = undefined` below. Parity with the go emitter's fix.
51
60
  entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
52
61
 
62
+ // Surface duplicate generated type names (two entities with the same
63
+ // PascalCase Name) — they would redeclare a type in statically-typed
64
+ // targets. Detection only; renaming is a model-level decision.
65
+ warnEntityTypeCollisions(entity, log, LANG)
66
+
53
67
  File({ name: model.name + '_types.' + (target.ext || LANG) }, () => {
54
68
 
55
69
  Content(`-- Typed models for the ${model.const.Name} SDK (LuaLS annotations).
@@ -55,7 +55,19 @@ const Main = cmp(async function Main(props: any) {
55
55
  replace: {
56
56
  ...props.ctx$.stdrep,
57
57
 
58
- '#BuildFeatures': ({ indent }: any) => {
58
+ // Load the LuaLS typed-model annotations module so it is part of
59
+ // the loaded program (module body is empty — no runtime effect) and
60
+ // does not depend on workspace-wide language-server scanning.
61
+ // NOTE: plain marker keys must EMBED the lua comment prefix
62
+ // (`-- #X`) — jostraca's bare `#X` form only matches `//`-style
63
+ // comment lines (cf. the `'-- #LoadOp'` keys in Entity_lua.ts).
64
+ '-- #TypesRequire': ({ indent }: any) => Content({ indent },
65
+ `-- Typed-model annotations (LuaLS ---@class); empty at runtime.\n` +
66
+ `require("${model.name}_types")`),
67
+
68
+ // Same embedded `-- ` prefix requirement as above (the bare
69
+ // '#BuildFeatures' key never matched the lua comment line).
70
+ '-- #BuildFeatures': ({ indent }: any) => {
59
71
  each(feature, (feat: any) => {
60
72
  const fname = feat.name.charAt(0).toUpperCase() + feat.name.slice(1)
61
73
  Content({ indent }, ` -- feature: ${feat.name}
@@ -90,7 +102,7 @@ self._utility.feature_hook(self._rootctx, "${name}")
90
102
 
91
103
  // Generate feature factory module
92
104
  File({ name: 'features.' + target.ext }, () => {
93
- Content(`-- ProjectName SDK feature factory
105
+ Content(`-- ${model.const.Name} SDK feature factory
94
106
 
95
107
  local BaseFeature = require("feature.base_feature")
96
108
  `)
@@ -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,
@@ -63,7 +63,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
63
63
  const idF = entityIdField(entity)
64
64
  // Sanitise the local variable name — an entity whose lowercased name is a
65
65
  // Lua keyword (e.g. `end`) would otherwise emit uncompilable code.
66
- const eVar = safeVarName(entity.name, 'lua')
66
+ const eVar = exampleVarName(entity.name, 'lua')
67
67
 
68
68
  Content(`
69
69
  ### ${entity.Name}
@@ -36,7 +36,12 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
36
36
  const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
37
37
  let testCallArg = ''
38
38
  if (exampleEntity && isMatchOp) {
39
- testCallArg = idF ? `{ ${idF} = "test01" }` : ''
39
+ const items = opRequestShape(exampleEntity, primaryOp).items
40
+ .filter((it: any) => !it.optional || it.name === idF)
41
+ .sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
42
+ testCallArg = 0 < items.length
43
+ ? `{ ${items.map((it: any) => `${luaKey(it.name)} = ${it.name === idF ? '"test01"' : luaLit(it.type)}`).join(', ')} }`
44
+ : ''
40
45
  } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
41
46
  const items = opRequestShape(exampleEntity, primaryOp).items
42
47
  .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 @@ local 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
  // Lua keyword (e.g. `end`) would otherwise emit uncompilable code.
48
- const eVar = safeVarName(eName.toLowerCase(), 'lua')
48
+ const eVar = exampleVarName(eName.toLowerCase(), 'lua')
49
49
  const opnames = entityOps(exampleEntity)
50
50
  // Model-driven id key: `idF` is the MATCH key (null when none). `dataIdF`
51
51
  // is the id on the RETURNED record's data type — an entity can key its match
@@ -108,7 +108,7 @@ end
108
108
  if (nestedEntity) {
109
109
  const neName = nom(nestedEntity, 'Name')
110
110
  const neArticle = /^[aeiou]/i.test(neName) ? "an" : "a"
111
- const neVar = safeVarName(neName.toLowerCase(), 'lua')
111
+ const neVar = exampleVarName(neName.toLowerCase(), 'lua')
112
112
 
113
113
  // Model-driven match: every REQUIRED load-match key — the same shape
114
114
  // 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,
@@ -176,7 +176,7 @@ same parameters as \`direct()\`.
176
176
  const idF = entityIdField(ent)
177
177
  // Sanitise the local variable name — an entity whose lowercased name is
178
178
  // a Lua keyword (e.g. `end`) would otherwise emit uncompilable code.
179
- const eVar = safeVarName(ent.name, 'lua')
179
+ const eVar = exampleVarName(ent.name, 'lua')
180
180
 
181
181
  Content(`
182
182
  ---
@@ -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,
@@ -48,7 +48,7 @@ local client = ${ctor}
48
48
  const eName = nom(exampleEntity, 'Name')
49
49
  // Sanitise the local variable name — an entity whose lowercased name is a
50
50
  // Lua keyword (e.g. `end`) would otherwise emit uncompilable code.
51
- const eVar = safeVarName(eName.toLowerCase(), 'lua')
51
+ const eVar = exampleVarName(eName.toLowerCase(), 'lua')
52
52
  const opnames = Object.keys(exampleEntity.op || {})
53
53
  // Model-driven id key: null when the entity has no id-like field, in which
54
54
  // case the load example takes no match argument.
@@ -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
 
@@ -342,6 +343,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
342
343
 
343
344
  const generateList: OpGen = (ctx, step, index) => {
344
345
  const { entity, flow } = ctx
346
+ const hasDataId = null != entityDataIdField(entity)
345
347
  const ref = step.input.ref ?? entity.name + '_ref01'
346
348
  const entvar = step.input.entvar ?? ref + '_ent'
347
349
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -387,7 +389,7 @@ const generateList: OpGen = (ctx, step, index) => {
387
389
  const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
388
390
  ((s.input.ref ?? entity.name + '_ref01') === validRef))
389
391
 
390
- if ('ItemExists' === validator.apply && hasRefData) {
392
+ if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
391
393
  const refDataVar = validRef + '_data'
392
394
  Content(`
393
395
  local found_item = vs.select(
@@ -395,7 +397,7 @@ const generateList: OpGen = (ctx, step, index) => {
395
397
  { id = ${refDataVar}["id"] })
396
398
  assert.is_false(vs.isempty(found_item))
397
399
  `)
398
- } else if ('ItemNotExists' === validator.apply && hasRefData) {
400
+ } else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
399
401
  const refDataVar = validRef + '_data'
400
402
  Content(`
401
403
  local not_found_item = vs.select(
@@ -548,6 +550,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
548
550
 
549
551
  const generateRemove: OpGen = (ctx, step, index) => {
550
552
  const { entity, flow } = ctx
553
+ if (null == entityDataIdField(entity)) {
554
+ return
555
+ }
551
556
  const ref = step.input.ref ?? entity.name + '_ref01'
552
557
  const entvar = step.input.entvar ?? ref + '_ent'
553
558
  const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
@@ -24,7 +24,7 @@ const Test = cmp(function Test(props: any) {
24
24
 
25
25
  // Generate exists test
26
26
  File({ name: 'exists_test.' + target.ext }, () => {
27
- Content(`-- ProjectName SDK exists test
27
+ Content(`-- ${model.const.Name} SDK exists test
28
28
 
29
29
  local sdk = require("${model.name}_sdk")
30
30
 
@@ -8,6 +8,8 @@ local helpers = require("core.helpers")
8
8
  -- Load utility registration (populates Utility._registrar)
9
9
  require("utility.register")
10
10
 
11
+ -- #TypesRequire
12
+
11
13
  -- Load features
12
14
  local BaseFeature = require("feature.base_feature")
13
15
  local features_factory = require("features")
@@ -0,0 +1,180 @@
1
+
2
+ import { cmp, each, Content, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+ import { ocamlVarName } from './utility_ocaml'
10
+
11
+
12
+ // A type-correct OCaml `value` literal for a field's canonical type. Strings
13
+ // render the quoted placeholder.
14
+ function ocamlLit(type: any, placeholder: string = 'example'): string {
15
+ const k = canonKey(type)
16
+ if ('INTEGER' === k || 'NUMBER' === k) return '(Num 1.)'
17
+ if ('BOOLEAN' === k) return '(Bool true)'
18
+ if ('ARRAY' === k) return '(empty_list ())'
19
+ if ('OBJECT' === k) return '(empty_map ())'
20
+ return `(Str "${placeholder}")`
21
+ }
22
+
23
+
24
+ // The logical OCaml type of a field's canonical type. The SDK carries every
25
+ // field inside the dynamic `value` variant, so this documents the underlying
26
+ // shape a caller reads out of the value.
27
+ function ocamlType(type: any): string {
28
+ const k = canonKey(type)
29
+ if ('INTEGER' === k) return 'int'
30
+ if ('NUMBER' === k) return 'float'
31
+ if ('BOOLEAN' === k) return 'bool'
32
+ if ('STRING' === k) return 'string'
33
+ if ('ARRAY' === k) return 'value list'
34
+ if ('OBJECT' === k) return 'value map'
35
+ return 'value'
36
+ }
37
+
38
+
39
+ // The op accessor spelling on the entity_obj record, plus a language-agnostic
40
+ // description.
41
+ const OP_DESC: Record<string, { method: string, desc: string }> = {
42
+ load: { method: 'e_load reqmatch ctrl', desc: 'Load a single entity by match criteria.' },
43
+ list: { method: 'e_list reqmatch ctrl', desc: 'List entities, optionally matching the given criteria.' },
44
+ create: { method: 'e_create reqdata ctrl', desc: 'Create a new entity with the given data.' },
45
+ update: { method: 'e_update reqdata ctrl', desc: 'Update an existing entity.' },
46
+ remove: { method: 'e_remove reqmatch ctrl', desc: 'Remove the matching entity.' },
47
+ }
48
+
49
+
50
+ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
51
+ const { target } = props
52
+ const { model } = props.ctx$
53
+
54
+ const entity = getModelPath(model, `main.${KIT}.entity`)
55
+
56
+ const publishedEntities = each(entity)
57
+ .filter((entity: any) => entity.active !== false)
58
+
59
+ if (0 === publishedEntities.length) {
60
+ return
61
+ }
62
+
63
+ Content(`
64
+
65
+ ## Entities
66
+
67
+ `)
68
+
69
+ publishedEntities.map((entity: any) => {
70
+ const opnames = Object.keys(entity.op || {})
71
+ const fields = entity.fields || []
72
+ // Model-driven id key: null when this entity has no id-like field.
73
+ const idF = entityIdField(entity)
74
+ const fn = ocamlVarName(entity.name)
75
+
76
+ Content(`
77
+ ### ${entity.Name}
78
+
79
+ `)
80
+
81
+ if (entity.short) {
82
+ Content(`${entity.short}
83
+
84
+ `)
85
+ }
86
+
87
+ Content(`Create an instance: \`let ${fn} = Sdk_client.${fn} client Noval\`
88
+
89
+ `)
90
+
91
+ if (opnames.length > 0) {
92
+ Content(`#### Operations
93
+
94
+ | Method | Description |
95
+ | --- | --- |
96
+ `)
97
+ opnames.map((opname: string) => {
98
+ const info = OP_DESC[opname]
99
+ if (info) {
100
+ Content(`| \`${info.method}\` | ${info.desc} |
101
+ `)
102
+ }
103
+ })
104
+
105
+ Content(`
106
+ `)
107
+ }
108
+
109
+ if (fields.length > 0) {
110
+ Content(`#### Fields
111
+
112
+ | Field | Type | Description |
113
+ | --- | --- | --- |
114
+ `)
115
+
116
+ each(fields, (field: any) => {
117
+ const desc = field.short || ''
118
+ Content(`| \`${field.name}\` | \`${ocamlType(field.type)}\` | ${desc} |
119
+ `)
120
+ })
121
+
122
+ Content(`
123
+ `)
124
+ }
125
+
126
+ if (opnames.includes('load')) {
127
+ // The id key plus every REQUIRED match key (parent path params like
128
+ // page_id) — the same shape the runtime resolves path params from.
129
+ const loadItems = opRequestShape(entity, 'load').items
130
+ .filter((it: any) => !it.optional || it.name === idF)
131
+ .sort((a: any, b: any) =>
132
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
133
+ const loadArg = 0 < loadItems.length
134
+ ? `jo [${loadItems.map((it: any) =>
135
+ `("${it.name}", ${ocamlLit(it.type,
136
+ it.name === idF ? entity.name + '_id' : it.name)})`).join('; ')}]`
137
+ : 'Noval'
138
+ Content(`#### Example: Load
139
+
140
+ \`\`\`ocaml
141
+ let ${fn} = (Sdk_client.${fn} client Noval).e_load (${loadArg}) Noval
142
+ \`\`\`
143
+
144
+ `)
145
+ }
146
+
147
+ if (opnames.includes('list')) {
148
+ Content(`#### Example: List
149
+
150
+ \`\`\`ocaml
151
+ let ${fn}s = (Sdk_client.${fn} client Noval).e_list (empty_map ()) Noval
152
+ \`\`\`
153
+
154
+ `)
155
+ }
156
+
157
+ if (opnames.includes('create')) {
158
+ const createItems = opRequestShape(entity, 'create').items
159
+ .filter((it: any) => !it.optional)
160
+ Content(`#### Example: Create
161
+
162
+ \`\`\`ocaml
163
+ let ${fn} = (Sdk_client.${fn} client Noval).e_create (jo [
164
+ `)
165
+ createItems.map((it: any) => {
166
+ Content(` ("${it.name}", ${ocamlLit(it.type, 'example_' + it.name)}); (* ${ocamlType(it.type)} *)
167
+ `)
168
+ })
169
+ Content(`]) Noval
170
+ \`\`\`
171
+
172
+ `)
173
+ }
174
+ })
175
+ })
176
+
177
+
178
+ export {
179
+ ReadmeEntity
180
+ }