@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,399 @@
1
+
2
+ import { cmp, each, Content, canonKey, File, isAuthActive, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+
10
+ // A type-correct, executable Perl literal for a field's canonical type.
11
+ function perlLit(type: any, placeholder: string = 'example'): string {
12
+ const k = canonKey(type)
13
+ if ('INTEGER' === k || 'NUMBER' === k) return '1'
14
+ if ('BOOLEAN' === k) return '1'
15
+ if ('ARRAY' === k) return '[]'
16
+ if ('OBJECT' === k) return '{}'
17
+ return `'${placeholder}'`
18
+ }
19
+
20
+
21
+ // Perl has no static types; describe field shapes with idiomatic Perl terms.
22
+ function perlType(type: any): string {
23
+ const k = canonKey(type)
24
+ const m: Record<string, string> = {
25
+ STRING: 'string', INTEGER: 'integer', NUMBER: 'number',
26
+ BOOLEAN: 'boolean', ARRAY: 'arrayref', OBJECT: 'hashref', NULL: 'undef',
27
+ }
28
+ return m[k] || 'scalar'
29
+ }
30
+
31
+
32
+ const OP_SIGNATURES: Record<string, { sig: string, returns: string, desc: string }> = {
33
+ load: {
34
+ sig: 'load($reqmatch, $ctrl) -> hashref',
35
+ returns: 'the entity data',
36
+ desc: 'Load a single entity matching the given criteria. Returns the entity data and dies on error.',
37
+ },
38
+ list: {
39
+ sig: 'list($reqmatch, $ctrl) -> arrayref',
40
+ returns: 'an arrayref of entities',
41
+ desc: 'List entities matching the given criteria. The match is optional — call `list` with no argument to list all records. Returns an arrayref and dies on error.',
42
+ },
43
+ create: {
44
+ sig: 'create($reqdata, $ctrl) -> hashref',
45
+ returns: 'the created entity data',
46
+ desc: 'Create a new entity with the given data. Returns the created entity data and dies on error.',
47
+ },
48
+ update: {
49
+ sig: 'update($reqdata, $ctrl) -> hashref',
50
+ returns: 'the updated entity data',
51
+ desc: 'Update an existing entity. The data must include the entity `id`. Returns the updated entity data and dies on error.',
52
+ },
53
+ remove: {
54
+ sig: 'remove($reqmatch, $ctrl) -> hashref',
55
+ returns: 'the removed entity data',
56
+ desc: 'Remove the entity matching the given criteria. Dies on error.',
57
+ },
58
+ }
59
+
60
+
61
+ const ReadmeRef = cmp(function ReadmeRef(props: any) {
62
+ const { target } = props
63
+ const { model } = props.ctx$
64
+
65
+ const entity = getModelPath(model, `main.${KIT}.entity`)
66
+ const feature = getModelPath(model, `main.${KIT}.feature`)
67
+
68
+ const publishedEntities = each(entity).filter((e: any) => e.active !== false)
69
+
70
+
71
+ File({ name: 'REFERENCE.md' }, () => {
72
+
73
+ Content(`# ${model.Name} ${target.title} SDK Reference
74
+
75
+ Complete API reference for the ${model.Name} ${target.title} SDK.
76
+
77
+
78
+ ## ${model.Name}SDK
79
+
80
+ ### Constructor
81
+
82
+ `)
83
+
84
+ Content(`\`\`\`perl
85
+ use lib 'lib';
86
+ use ${model.const.Name}SDK;
87
+
88
+ my $client = ${model.const.Name}SDK->new($options);
89
+ \`\`\`
90
+
91
+ Create a new SDK client instance.
92
+
93
+ **Parameters:**
94
+
95
+ | Name | Type | Description |
96
+ | --- | --- | --- |
97
+ | \`$options\` | \`hashref\` | SDK configuration options. |
98
+ ${isAuthActive(model) ? '| \`$options->{apikey}\` | \`string\` | API key for authentication. |\n' : ''}| \`$options->{base}\` | \`string\` | Base URL for API requests. |
99
+ | \`$options->{prefix}\` | \`string\` | URL prefix appended after base. |
100
+ | \`$options->{suffix}\` | \`string\` | URL suffix appended after path. |
101
+ | \`$options->{headers}\` | \`hashref\` | Custom headers for all requests. |
102
+ | \`$options->{feature}\` | \`hashref\` | Feature configuration. |
103
+ | \`$options->{system}\` | \`hashref\` | System overrides (e.g. custom fetch). |
104
+
105
+ `)
106
+
107
+
108
+ Content(`
109
+ ### Static Methods
110
+
111
+ `)
112
+
113
+ Content(`#### \`${model.const.Name}SDK->test($testopts, $sdkopts)\`
114
+
115
+ Create a test client with mock features active. Both arguments may be \`undef\`.
116
+
117
+ \`\`\`perl
118
+ my $client = ${model.const.Name}SDK->test();
119
+ \`\`\`
120
+
121
+ `)
122
+
123
+
124
+ Content(`
125
+ ### Instance Methods
126
+
127
+ `)
128
+
129
+
130
+ // Entity factory methods
131
+ publishedEntities.map((ent: any) => {
132
+ Content(`#### \`${ent.Name}($data)\`
133
+
134
+ Create a new \`${ent.Name}\` entity instance. Pass \`undef\` for no initial data.
135
+
136
+ `)
137
+ })
138
+
139
+
140
+ Content(`#### \`options_map() -> hashref\`
141
+
142
+ Return a deep copy of the current SDK options.
143
+
144
+ #### \`get_utility() -> utility\`
145
+
146
+ Return a copy of the SDK utility object.
147
+
148
+ #### \`direct($fetchargs) -> hashref\`
149
+
150
+ Make a direct HTTP request to any API endpoint. Returns a result \`hashref\` with \`ok\`, \`status\`, \`headers\`, and \`data\` (or \`err\` on failure). This escape hatch never dies — branch on \`$result->{ok}\`.
151
+
152
+ **Parameters:**
153
+
154
+ | Name | Type | Description |
155
+ | --- | --- | --- |
156
+ | \`$fetchargs->{path}\` | \`string\` | URL path with optional \`{param}\` placeholders. |
157
+ | \`$fetchargs->{method}\` | \`string\` | HTTP method (default: \`'GET'\`). |
158
+ | \`$fetchargs->{params}\` | \`hashref\` | Path parameter values. |
159
+ | \`$fetchargs->{query}\` | \`hashref\` | Query string parameters. |
160
+ | \`$fetchargs->{headers}\` | \`hashref\` | Request headers (merged with defaults). |
161
+ | \`$fetchargs->{body}\` | \`any\` | Request body (hashrefs are JSON-serialized). |
162
+
163
+ **Returns:** \`hashref\`
164
+
165
+ #### \`prepare($fetchargs) -> hashref\`
166
+
167
+ Prepare a fetch definition without sending. Returns the \`fetchdef\` and dies on error.
168
+
169
+ `)
170
+
171
+
172
+ // Entity reference sections
173
+ publishedEntities.map((ent: any) => {
174
+ const opnames = Object.keys(ent.op || {})
175
+ const fields = ent.fields || []
176
+ // Model-driven id key: null when this entity has no id-like field.
177
+ const idF = entityIdField(ent)
178
+ const eVar = ent.name
179
+
180
+ Content(`
181
+ ---
182
+
183
+ ## ${ent.Name} entity
184
+
185
+ `)
186
+
187
+ if (ent.short) {
188
+ Content(`${ent.short}
189
+
190
+ `)
191
+ }
192
+
193
+ Content(`\`\`\`perl
194
+ my $${eVar} = $client->${ent.Name};
195
+ \`\`\`
196
+
197
+ `)
198
+
199
+
200
+ // Field schema
201
+ if (fields.length > 0) {
202
+ Content(`### Fields
203
+
204
+ | Field | Type | Required | Description |
205
+ | --- | --- | --- | --- |
206
+ `)
207
+ each(fields, (field: any) => {
208
+ const req = field.req ? 'Yes' : 'No'
209
+ const desc = field.short || ''
210
+ Content(`| \`${field.name}\` | \`${perlType(field.type)}\` | ${req} | ${desc} |
211
+ `)
212
+ })
213
+
214
+ Content(`
215
+ `)
216
+
217
+ // Field operations breakdown
218
+ const hasFieldOps = fields.some((f: any) => f.op && Object.keys(f.op).length > 0)
219
+ if (hasFieldOps) {
220
+ const opcols = ['load', 'list', 'create', 'update', 'remove']
221
+ .filter((op: string) => opnames.includes(op) && ent.op[op]?.active !== false)
222
+ Content(`### Field Usage by Operation
223
+
224
+ | Field | ${opcols.join(' | ')} |
225
+ | --- | ${opcols.map(() => '---').join(' | ')} |
226
+ `)
227
+ each(fields, (field: any) => {
228
+ const fops = field.op || {}
229
+ const cols = opcols.map((op: string) => {
230
+ const fop = fops[op]
231
+ if (null == fop) return '-'
232
+ if (fop.active === false) return '-'
233
+ return 'Yes'
234
+ })
235
+ Content(`| \`${field.name}\` | ${cols.join(' | ')} |
236
+ `)
237
+ })
238
+
239
+ Content(`
240
+ `)
241
+ }
242
+ }
243
+
244
+
245
+ // Operation details
246
+ if (opnames.length > 0) {
247
+ Content(`### Operations
248
+
249
+ `)
250
+
251
+ opnames.map((opname: string) => {
252
+ const info = OP_SIGNATURES[opname]
253
+ if (!info) return
254
+
255
+ Content(`#### \`${info.sig}\`
256
+
257
+ ${info.desc}
258
+
259
+ `)
260
+
261
+ if ('load' === opname || 'remove' === opname) {
262
+ const matchItems = opRequestShape(ent, opname).items
263
+ .filter((it: any) => !it.optional || it.name === idF)
264
+ .sort((a: any, b: any) =>
265
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
266
+ const arg = 0 < matchItems.length
267
+ ? `{ ${matchItems.map((it: any) =>
268
+ `'${it.name}' => ${perlLit(it.type,
269
+ it.name === idF ? ent.name + '_id' : it.name)}`).join(', ')} }`
270
+ : ''
271
+ Content(`\`\`\`perl
272
+ my $result = $client->${ent.Name}->${opname}(${arg});
273
+ \`\`\`
274
+
275
+ `)
276
+ }
277
+ else if ('list' === opname) {
278
+ Content(`\`\`\`perl
279
+ my $results = $client->${ent.Name}->list;
280
+ for my $${eVar} (@$results) {
281
+ print "$${eVar}->{id}\\n";
282
+ }
283
+ \`\`\`
284
+
285
+ `)
286
+ }
287
+ else if ('create' === opname) {
288
+ const createItems = opRequestShape(ent, 'create').items
289
+ .filter((it: any) => !it.optional)
290
+ Content(`\`\`\`perl
291
+ my $result = $client->${ent.Name}->create({
292
+ `)
293
+ createItems.map((it: any) => {
294
+ Content(` '${it.name}' => ${perlLit(it.type, 'example_' + it.name)}, # ${perlType(it.type)}
295
+ `)
296
+ })
297
+ Content(`});
298
+ \`\`\`
299
+
300
+ `)
301
+ }
302
+ else if ('update' === opname) {
303
+ const updateItems = opRequestShape(ent, 'update').items
304
+ .filter((it: any) => !it.optional || it.name === idF)
305
+ .sort((a: any, b: any) =>
306
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
307
+ const updateLines = updateItems.map((it: any) =>
308
+ ` '${it.name}' => ${perlLit(it.type,
309
+ it.name === idF ? ent.name + '_id' : it.name)},\n`).join('')
310
+ Content(`\`\`\`perl
311
+ my $result = $client->${ent.Name}->update({
312
+ ${updateLines} # Fields to update
313
+ });
314
+ \`\`\`
315
+
316
+ `)
317
+ }
318
+ })
319
+ }
320
+
321
+
322
+ // Common methods
323
+ Content(`### Common Methods
324
+
325
+ #### \`data_get() -> hashref\`
326
+
327
+ Get the entity data.
328
+
329
+ #### \`data_set($data)\`
330
+
331
+ Set the entity data.
332
+
333
+ #### \`match_get() -> hashref\`
334
+
335
+ Get the entity match criteria.
336
+
337
+ #### \`match_set($match)\`
338
+
339
+ Set the entity match criteria.
340
+
341
+ #### \`make() -> entity\`
342
+
343
+ Create a new \`${ent.Name}\` entity instance with the same options.
344
+
345
+ #### \`get_name() -> string\`
346
+
347
+ Return the entity name.
348
+
349
+ `)
350
+ })
351
+
352
+
353
+ // Features section
354
+ const activeFeatures = each(feature).filter((f: any) => f.active)
355
+ if (activeFeatures.length > 0) {
356
+ Content(`
357
+ ---
358
+
359
+ ## Features
360
+
361
+ | Feature | Version | Description |
362
+ | --- | --- | --- |
363
+ `)
364
+
365
+ activeFeatures.map((f: any) => {
366
+ Content(`| \`${f.name}\` | ${f.version || '0.0.1'} | ${f.title || ''} |
367
+ `)
368
+ })
369
+
370
+ Content(`
371
+
372
+ Features are activated via the \`feature\` option:
373
+
374
+ `)
375
+
376
+ Content(`\`\`\`perl
377
+ my $client = ${model.const.Name}SDK->new({
378
+ 'feature' => {
379
+ `)
380
+ activeFeatures.map((f: any) => {
381
+ Content(` '${f.name}' => { 'active' => 1 },
382
+ `)
383
+ })
384
+ Content(` },
385
+ });
386
+ \`\`\`
387
+
388
+ `)
389
+ }
390
+
391
+ })
392
+ })
393
+
394
+
395
+
396
+
397
+ export {
398
+ ReadmeRef
399
+ }
@@ -0,0 +1,24 @@
1
+
2
+ import { cmp, Content } from '@voxgig/sdkgen'
3
+
4
+
5
+ const ReadmeTopHowto = cmp(function ReadmeTopHowto(props: any) {
6
+ const { target } = props
7
+
8
+ Content(`**Perl:**
9
+ \`\`\`perl
10
+ my $result = $client->direct({
11
+ 'path' => '/api/resource/{id}',
12
+ 'method' => 'GET',
13
+ 'params' => { 'id' => 'example' },
14
+ });
15
+ \`\`\`
16
+
17
+ `)
18
+
19
+ })
20
+
21
+
22
+ export {
23
+ ReadmeTopHowto
24
+ }
@@ -0,0 +1,91 @@
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
+
11
+ // A type-correct, executable Perl literal for a param: numeric/boolean/
12
+ // array/hash params render a typed literal; strings render the quoted
13
+ // placeholder (the doc test EXECUTES this block, so a comment placeholder
14
+ // would break it).
15
+ function perlLit(type: any, placeholder: string = 'example'): string {
16
+ const k = canonKey(type)
17
+ if ('INTEGER' === k || 'NUMBER' === k) return '1'
18
+ if ('BOOLEAN' === k) return '1'
19
+ if ('ARRAY' === k) return '[]'
20
+ if ('OBJECT' === k) return '{}'
21
+ return `'${placeholder}'`
22
+ }
23
+
24
+
25
+ const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
26
+ const { target, ctx$: { model } } = props
27
+
28
+ const entity = getModelPath(model, `main.${KIT}.entity`)
29
+
30
+ const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
31
+
32
+ const authActive = isAuthActive(model)
33
+ const ctor = authActive
34
+ ? `${model.const.Name}SDK->new({\n 'apikey' => $ENV{'${envName(model)}_APIKEY'},\n})`
35
+ : `${model.const.Name}SDK->new`
36
+
37
+ Content(`\`\`\`perl
38
+ use lib '${target.name}/lib';
39
+ use ${model.const.Name}SDK;
40
+
41
+ my $client = ${ctor};
42
+
43
+ `)
44
+
45
+ if (exampleEntity) {
46
+ const eName = nom(exampleEntity, 'Name')
47
+ const eVar = eName.toLowerCase()
48
+ const opnames = Object.keys(exampleEntity.op || {})
49
+ // Model-driven id key: null when the entity has no id-like field, in which
50
+ // case the load example takes no match argument.
51
+ const idF = entityIdField(exampleEntity)
52
+
53
+ if (opnames.includes('list')) {
54
+ Content(`# List all ${eName.toLowerCase()}s (returns an arrayref; dies on error)
55
+ my $${eVar}s = $client->${eName}->list;
56
+ for my $${eVar} (@$${eVar}s) {
57
+ print "$${eVar}->{id}\\n";
58
+ }
59
+ `)
60
+ }
61
+
62
+ if (opnames.includes('load')) {
63
+ // Every REQUIRED load-match key (id first, then parent path params like
64
+ // page_id) — the same shape the runtime resolves path params from, so
65
+ // the example always works.
66
+ const loadItems = opRequestShape(exampleEntity, 'load').items
67
+ .filter((it: any) => !it.optional || it.name === idF)
68
+ .sort((a: any, b: any) =>
69
+ (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
70
+ const loadArg = 0 < loadItems.length
71
+ ? `{ ${loadItems.map((it: any) =>
72
+ `'${it.name}' => ${perlLit(it.type,
73
+ it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')} }`
74
+ : ''
75
+ Content(`
76
+ # Load a specific ${eName.toLowerCase()} (returns the bare record; dies on error)
77
+ my $${eVar} = $client->${eName}->load(${loadArg});
78
+ print "$${eVar}->{id}\\n";
79
+ `)
80
+ }
81
+ }
82
+
83
+ Content(`\`\`\`
84
+ `)
85
+
86
+ })
87
+
88
+
89
+ export {
90
+ ReadmeTopQuick
91
+ }
@@ -0,0 +1,83 @@
1
+
2
+ import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ nom,
8
+ } from '@voxgig/apidef'
9
+
10
+
11
+ // A type-correct Perl literal for a field's canonical type.
12
+ function perlLit(type: any): string {
13
+ const k = canonKey(type)
14
+ if ('INTEGER' === k || 'NUMBER' === k) return '1'
15
+ if ('BOOLEAN' === k) return '1'
16
+ if ('ARRAY' === k) return '[]'
17
+ if ('OBJECT' === k) return '{}'
18
+ return "'example'"
19
+ }
20
+
21
+
22
+ const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
23
+ const { target, ctx$: { model } } = props
24
+
25
+ const entity = getModelPath(model, `main.${KIT}.entity`)
26
+
27
+ // Pick an entity with a real op (prefer a read op) — never fabricate a
28
+ // `load` on an op-less entity.
29
+ const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
30
+
31
+ Content(`\`\`\`perl
32
+ use lib '${target.name}/lib';
33
+ use ${model.const.Name}SDK;
34
+
35
+ my $client = ${model.const.Name}SDK->test(undef, undef);
36
+ `)
37
+
38
+ if (exampleEntity && primaryOp) {
39
+ const eName = nom(exampleEntity, 'Name')
40
+ const idF = entityIdField(exampleEntity)
41
+ const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
42
+ let arg = ''
43
+ if (isMatchOp) {
44
+ // Every REQUIRED match key (id first) — the same shape that generates
45
+ // the op's match resolution, so the block runs offline against a seeded
46
+ // fixture.
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
+ ? `{ ${items.map((it: any) =>
53
+ `'${it.name}' => ${it.name === idF ? "'test01'" : perlLit(it.type)}`).join(', ')} }`
54
+ : ''
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 = `{ ${chosen.map((it: any) => `'${it.name}' => ${perlLit(it.type)}`).join(', ')} }`
61
+ }
62
+ // A list() result is an arrayref — name the variable accordingly.
63
+ const eVar = eName.toLowerCase() + ('list' === primaryOp ? 's' : '')
64
+ Content(`my $${eVar} = $client->${eName}->${primaryOp}(${arg});
65
+ `)
66
+ if ('list' === primaryOp) {
67
+ Content(`print scalar(@$${eVar}), " records\\n";
68
+ `)
69
+ } else {
70
+ Content(`print "$${eVar}->{id}\\n";
71
+ `)
72
+ }
73
+ }
74
+
75
+ Content(`\`\`\`
76
+ `)
77
+
78
+ })
79
+
80
+
81
+ export {
82
+ ReadmeTopTest
83
+ }
@@ -13,6 +13,7 @@ import { cmp, each, Folder, File, Content } from '@voxgig/sdkgen'
13
13
 
14
14
  import { TestEntity } from './TestEntity_perl'
15
15
  import { TestDirect } from './TestDirect_perl'
16
+ import { ReadmeExamplesTest } from './ReadmeExamplesTest_perl'
16
17
 
17
18
 
18
19
  const Test = cmp(function Test(props: any) {
@@ -45,6 +46,9 @@ done_testing();
45
46
  TestEntity({ target, entity })
46
47
  TestDirect({ target, entity })
47
48
  })
49
+
50
+ // README example snippet gate (syntax + offline test-mode run).
51
+ ReadmeExamplesTest({ target })
48
52
  })
49
53
  })
50
54
 
@@ -29,7 +29,7 @@ import {
29
29
  File, Content, Folder,
30
30
  } from '@voxgig/sdkgen'
31
31
 
32
- import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
32
+ import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
33
33
 
34
34
  import {
35
35
  KIT,
@@ -50,9 +50,12 @@ function validName(name: string): boolean {
50
50
  // Emit one typed PHP property line. `mixed` is already nullable in PHP and
51
51
  // rejects the `?` prefix, so it is special-cased; every other optional field
52
52
  // becomes `?type` with a `= null` default so the property is safely optional.
53
+ // A `$NULL`-typed field maps to the 'null' type name, which is not usable as
54
+ // a property type here (`?null` is a fatal, and standalone `null` needs
55
+ // PHP >= 8.2), so it degrades to `mixed` too.
53
56
  function propLine(name: string, sentinel: unknown, optional: boolean): string {
54
57
  const type = canonToType(sentinel, LANG)
55
- if ('mixed' === type) {
58
+ if ('mixed' === type || 'null' === type) {
56
59
  return optional
57
60
  ? ` public mixed $${name} = null;\n`
58
61
  : ` public mixed $${name};\n`
@@ -64,15 +67,29 @@ function propLine(name: string, sentinel: unknown, optional: boolean): string {
64
67
 
65
68
 
66
69
  const EntityTypes = cmp(function EntityTypes(props: any) {
67
- const { model } = props.ctx$
68
-
69
- const entity = getModelPath(model, `main.${KIT}.entity`)
70
- const entityList = each(entity).filter((e: any) => e.active !== false)
70
+ const { model, log } = props.ctx$
71
+
72
+ // only_active:false getModelPath DROPS active:false entries by default,
73
+ // but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
74
+ // collection, so inactive entities still get generated entity code that
75
+ // references these typed names. The typed model must cover them too.
76
+ const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
77
+ // Emit for EVERY entity that gets generated entity code: the consumer
78
+ // scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
79
+ // filter, so inactive entities still get class files referencing these
80
+ // typed names. Filter on `name` (always present), NOT `active` — parity
81
+ // with the go emitter's fix.
82
+ const entityList = each(entity).filter((e: any) => e && null != e.name)
71
83
  // Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
72
84
  // entity not yet named (e.g. a fieldless placeholder) would otherwise read
73
85
  // `Name = undefined` below. Parity with the go emitter's fix.
74
86
  entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
75
87
 
88
+ // Surface duplicate generated type names (two entities with the same
89
+ // PascalCase Name) — they would redeclare a type in statically-typed
90
+ // targets. Detection only; renaming is a model-level decision.
91
+ warnEntityTypeCollisions(entity, log, LANG)
92
+
76
93
  Folder({ name: 'types' }, () => {
77
94
 
78
95
  File({ name: model.const.Name + 'Types.' + LANG }, () => {
@@ -34,7 +34,12 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
34
34
  : `${model.const.Name}SDK::test()`
35
35
  let testCallArg = ''
36
36
  if (exampleEntity && isMatchOp) {
37
- testCallArg = idF ? `["${idF}" => "test01"]` : ''
37
+ const items = opRequestShape(exampleEntity, primaryOp).items
38
+ .filter((it: any) => !it.optional || it.name === idF)
39
+ .sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
40
+ testCallArg = 0 < items.length
41
+ ? `[${items.map((it: any) => `"${it.name}" => ${it.name === idF ? '"test01"' : phpLit(it.type)}`).join(', ')}]`
42
+ : ''
38
43
  } else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
39
44
  const items = opRequestShape(exampleEntity, primaryOp).items
40
45
  .filter((it: any) => it.name !== idF && it.name !== 'id')