@voxgig/sdkgen 1.2.0 → 1.3.1

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 (329) hide show
  1. package/bin/voxgig-sdkgen +2 -2
  2. package/dist/action/action.d.ts +2 -1
  3. package/dist/action/action.js +15 -9
  4. package/dist/action/action.js.map +1 -1
  5. package/dist/action/feature.js +6 -3
  6. package/dist/action/feature.js.map +1 -1
  7. package/dist/action/target.d.ts +7 -1
  8. package/dist/action/target.js +13 -6
  9. package/dist/action/target.js.map +1 -1
  10. package/dist/cmp/Changelog.d.ts +2 -0
  11. package/dist/cmp/Changelog.js +30 -0
  12. package/dist/cmp/Changelog.js.map +1 -0
  13. package/dist/cmp/Deploy.d.ts +2 -0
  14. package/dist/cmp/Deploy.js +227 -0
  15. package/dist/cmp/Deploy.js.map +1 -0
  16. package/dist/cmp/FeatureHook.js +5 -6
  17. package/dist/cmp/FeatureHook.js.map +1 -1
  18. package/dist/cmp/License.d.ts +2 -0
  19. package/dist/cmp/License.js +44 -0
  20. package/dist/cmp/License.js.map +1 -0
  21. package/dist/cmp/Readme.js +2 -0
  22. package/dist/cmp/Readme.js.map +1 -1
  23. package/dist/cmp/ReadmeErrors.d.ts +2 -0
  24. package/dist/cmp/ReadmeErrors.js +210 -0
  25. package/dist/cmp/ReadmeErrors.js.map +1 -0
  26. package/dist/cmp/ReadmeExplanation.js +213 -223
  27. package/dist/cmp/ReadmeExplanation.js.map +1 -1
  28. package/dist/cmp/ReadmeModel.js +6 -1
  29. package/dist/cmp/ReadmeModel.js.map +1 -1
  30. package/dist/cmp/ReadmeTop.js +389 -82
  31. package/dist/cmp/ReadmeTop.js.map +1 -1
  32. package/dist/cmp/Security.d.ts +2 -0
  33. package/dist/cmp/Security.js +36 -0
  34. package/dist/cmp/Security.js.map +1 -0
  35. package/dist/helpers/canonType.d.ts +7 -0
  36. package/dist/helpers/canonType.js +74 -0
  37. package/dist/helpers/canonType.js.map +1 -0
  38. package/dist/helpers/collectDeps.d.ts +3 -2
  39. package/dist/helpers/collectDeps.js.map +1 -1
  40. package/dist/helpers/naming.d.ts +3 -0
  41. package/dist/helpers/naming.js +51 -0
  42. package/dist/helpers/naming.js.map +1 -0
  43. package/dist/helpers/opExample.d.ts +13 -0
  44. package/dist/helpers/opExample.js +149 -0
  45. package/dist/helpers/opExample.js.map +1 -0
  46. package/dist/helpers/opShape.d.ts +18 -0
  47. package/dist/helpers/opShape.js +193 -0
  48. package/dist/helpers/opShape.js.map +1 -0
  49. package/dist/helpers/packageMeta.d.ts +27 -0
  50. package/dist/helpers/packageMeta.js +224 -0
  51. package/dist/helpers/packageMeta.js.map +1 -0
  52. package/dist/sdkgen.d.ts +11 -1
  53. package/dist/sdkgen.js +57 -18
  54. package/dist/sdkgen.js.map +1 -1
  55. package/dist/tsconfig.tsbuildinfo +1 -1
  56. package/dist/types.d.ts +65 -2
  57. package/dist/types.js.map +1 -1
  58. package/dist/utility.js +20 -11
  59. package/dist/utility.js.map +1 -1
  60. package/model/sdkgen.aontu +137 -0
  61. package/package.json +13 -6
  62. package/project/.sdk/model/target/go-cli.jsonic +47 -0
  63. package/project/.sdk/model/target/go-mcp.jsonic +41 -0
  64. package/project/.sdk/model/target/go.jsonic +9 -3
  65. package/project/.sdk/model/target/js.jsonic +13 -0
  66. package/project/.sdk/model/target/lua.jsonic +13 -0
  67. package/project/.sdk/model/target/php.jsonic +13 -0
  68. package/project/.sdk/model/target/py.jsonic +13 -0
  69. package/project/.sdk/model/target/rb.jsonic +13 -0
  70. package/project/.sdk/model/target/ts.jsonic +13 -0
  71. package/project/.sdk/src/cmp/go/EntityOperation_go.ts +1 -0
  72. package/project/.sdk/src/cmp/go/EntityTypes_go.ts +197 -0
  73. package/project/.sdk/src/cmp/go/Entity_go.ts +2 -1
  74. package/project/.sdk/src/cmp/go/MainEntity_go.ts +6 -0
  75. package/project/.sdk/src/cmp/go/Main_go.ts +23 -3
  76. package/project/.sdk/src/cmp/go/Package_go.ts +1 -1
  77. package/project/.sdk/src/cmp/go/ReadmeEntity_go.ts +18 -6
  78. package/project/.sdk/src/cmp/go/ReadmeExamplesTest_go.ts +684 -0
  79. package/project/.sdk/src/cmp/go/ReadmeExplanation_go.ts +1 -1
  80. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +48 -8
  81. package/project/.sdk/src/cmp/go/ReadmeInstall_go.ts +11 -6
  82. package/project/.sdk/src/cmp/go/ReadmeIntro_go.ts +40 -1
  83. package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +63 -17
  84. package/project/.sdk/src/cmp/go/ReadmeOptions_go.ts +4 -3
  85. package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +124 -115
  86. package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +28 -15
  87. package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +33 -9
  88. package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +35 -5
  89. package/project/.sdk/src/cmp/go/TestEntity_go.ts +1 -1
  90. package/project/.sdk/src/cmp/go/Test_go.ts +5 -1
  91. package/project/.sdk/src/cmp/go/fragment/Entity.fragment.go +21 -0
  92. package/project/.sdk/src/cmp/go/fragment/EntityCreateOp.fragment.go +11 -0
  93. package/project/.sdk/src/cmp/go/fragment/EntityListOp.fragment.go +11 -0
  94. package/project/.sdk/src/cmp/go/fragment/EntityLoadOp.fragment.go +11 -0
  95. package/project/.sdk/src/cmp/go/fragment/EntityRemoveOp.fragment.go +11 -0
  96. package/project/.sdk/src/cmp/go/fragment/EntityUpdateOp.fragment.go +11 -0
  97. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +195 -0
  98. package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +106 -0
  99. package/project/.sdk/src/cmp/go-cli/fragment/words.fragment.go +132 -0
  100. package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +184 -0
  101. package/project/.sdk/src/cmp/go-mcp/fragment/main.fragment.go +68 -0
  102. package/project/.sdk/src/cmp/go-mcp/fragment/tools.fragment.go +114 -0
  103. package/project/.sdk/src/cmp/js/EntityTypes_js.ts +111 -0
  104. package/project/.sdk/src/cmp/js/MainEntity_js.ts +1 -0
  105. package/project/.sdk/src/cmp/js/Main_js.ts +3 -0
  106. package/project/.sdk/src/cmp/js/Package_js.ts +16 -7
  107. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +13 -7
  108. package/project/.sdk/src/cmp/js/ReadmeExplanation_js.ts +2 -2
  109. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +52 -11
  110. package/project/.sdk/src/cmp/js/ReadmeIntro_js.ts +39 -1
  111. package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +50 -18
  112. package/project/.sdk/src/cmp/js/ReadmeOptions_js.ts +4 -3
  113. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +45 -19
  114. package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +24 -13
  115. package/project/.sdk/src/cmp/js/ReadmeTopHowto_js.ts +3 -0
  116. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +28 -12
  117. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +23 -3
  118. package/project/.sdk/src/cmp/js/fragment/EntityCreateOp.fragment.js +5 -0
  119. package/project/.sdk/src/cmp/js/fragment/EntityListOp.fragment.js +5 -0
  120. package/project/.sdk/src/cmp/js/fragment/EntityLoadOp.fragment.js +5 -0
  121. package/project/.sdk/src/cmp/js/fragment/EntityRemoveOp.fragment.js +5 -0
  122. package/project/.sdk/src/cmp/js/fragment/EntityUpdateOp.fragment.js +5 -0
  123. package/project/.sdk/src/cmp/js/utility_js.ts +57 -0
  124. package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +113 -0
  125. package/project/.sdk/src/cmp/lua/MainEntity_lua.ts +8 -0
  126. package/project/.sdk/src/cmp/lua/Main_lua.ts +4 -0
  127. package/project/.sdk/src/cmp/lua/Package_lua.ts +23 -4
  128. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +12 -10
  129. package/project/.sdk/src/cmp/lua/ReadmeExamplesTest_lua.ts +293 -0
  130. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +46 -8
  131. package/project/.sdk/src/cmp/lua/ReadmeInstall_lua.ts +19 -3
  132. package/project/.sdk/src/cmp/lua/ReadmeIntro_lua.ts +38 -1
  133. package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +51 -16
  134. package/project/.sdk/src/cmp/lua/ReadmeOptions_lua.ts +4 -3
  135. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +79 -18
  136. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +25 -20
  137. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +17 -9
  138. package/project/.sdk/src/cmp/lua/ReadmeTopTest_lua.ts +32 -5
  139. package/project/.sdk/src/cmp/lua/Test_lua.ts +4 -0
  140. package/project/.sdk/src/cmp/lua/fragment/EntityCreateOp.fragment.lua +4 -0
  141. package/project/.sdk/src/cmp/lua/fragment/EntityListOp.fragment.lua +4 -0
  142. package/project/.sdk/src/cmp/lua/fragment/EntityLoadOp.fragment.lua +4 -0
  143. package/project/.sdk/src/cmp/lua/fragment/EntityRemoveOp.fragment.lua +4 -0
  144. package/project/.sdk/src/cmp/lua/fragment/EntityUpdateOp.fragment.lua +4 -0
  145. package/project/.sdk/src/cmp/php/EntityTypes_php.ts +142 -0
  146. package/project/.sdk/src/cmp/php/MainEntity_php.ts +18 -1
  147. package/project/.sdk/src/cmp/php/Main_php.ts +4 -0
  148. package/project/.sdk/src/cmp/php/Package_php.ts +18 -7
  149. package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +15 -11
  150. package/project/.sdk/src/cmp/php/ReadmeExamplesTest_php.ts +401 -0
  151. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +56 -13
  152. package/project/.sdk/src/cmp/php/ReadmeInstall_php.ts +15 -3
  153. package/project/.sdk/src/cmp/php/ReadmeIntro_php.ts +40 -1
  154. package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +26 -8
  155. package/project/.sdk/src/cmp/php/ReadmeOptions_php.ts +4 -3
  156. package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +80 -22
  157. package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +51 -42
  158. package/project/.sdk/src/cmp/php/ReadmeTopHowto_php.ts +1 -1
  159. package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +19 -11
  160. package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +41 -11
  161. package/project/.sdk/src/cmp/php/TestDirect_php.ts +9 -9
  162. package/project/.sdk/src/cmp/php/TestEntity_php.ts +6 -12
  163. package/project/.sdk/src/cmp/php/Test_php.ts +4 -0
  164. package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +13 -1
  165. package/project/.sdk/src/cmp/php/fragment/EntityCreateOp.fragment.php +10 -1
  166. package/project/.sdk/src/cmp/php/fragment/EntityListOp.fragment.php +10 -1
  167. package/project/.sdk/src/cmp/php/fragment/EntityLoadOp.fragment.php +10 -1
  168. package/project/.sdk/src/cmp/php/fragment/EntityRemoveOp.fragment.php +10 -1
  169. package/project/.sdk/src/cmp/php/fragment/EntityUpdateOp.fragment.php +10 -1
  170. package/project/.sdk/src/cmp/php/fragment/Main.fragment.php +22 -14
  171. package/project/.sdk/src/cmp/py/EntityTypes_py.ts +184 -0
  172. package/project/.sdk/src/cmp/py/Entity_py.ts +27 -0
  173. package/project/.sdk/src/cmp/py/MainEntity_py.ts +2 -1
  174. package/project/.sdk/src/cmp/py/Main_py.ts +35 -0
  175. package/project/.sdk/src/cmp/py/Package_py.ts +24 -3
  176. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +27 -11
  177. package/project/.sdk/src/cmp/py/ReadmeExamplesTest_py.ts +626 -0
  178. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +53 -14
  179. package/project/.sdk/src/cmp/py/ReadmeInstall_py.ts +19 -3
  180. package/project/.sdk/src/cmp/py/ReadmeIntro_py.ts +48 -1
  181. package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +28 -10
  182. package/project/.sdk/src/cmp/py/ReadmeOptions_py.ts +4 -3
  183. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +73 -24
  184. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +57 -37
  185. package/project/.sdk/src/cmp/py/ReadmeTopHowto_py.ts +1 -1
  186. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +19 -11
  187. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +30 -5
  188. package/project/.sdk/src/cmp/py/TestDirect_py.ts +7 -9
  189. package/project/.sdk/src/cmp/py/TestEntity_py.ts +6 -14
  190. package/project/.sdk/src/cmp/py/Test_py.ts +4 -0
  191. package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +5 -2
  192. package/project/.sdk/src/cmp/py/fragment/EntityCreateOp.fragment.py +1 -1
  193. package/project/.sdk/src/cmp/py/fragment/EntityListOp.fragment.py +5 -1
  194. package/project/.sdk/src/cmp/py/fragment/EntityLoadOp.fragment.py +6 -1
  195. package/project/.sdk/src/cmp/py/fragment/EntityRemoveOp.fragment.py +6 -1
  196. package/project/.sdk/src/cmp/py/fragment/EntityUpdateOp.fragment.py +1 -1
  197. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +17 -10
  198. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +136 -0
  199. package/project/.sdk/src/cmp/rb/MainEntity_rb.ts +1 -0
  200. package/project/.sdk/src/cmp/rb/Main_rb.ts +4 -0
  201. package/project/.sdk/src/cmp/rb/Package_rb.ts +34 -7
  202. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +26 -10
  203. package/project/.sdk/src/cmp/rb/ReadmeExamplesTest_rb.ts +289 -0
  204. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +72 -21
  205. package/project/.sdk/src/cmp/rb/ReadmeInstall_rb.ts +16 -4
  206. package/project/.sdk/src/cmp/rb/ReadmeIntro_rb.ts +40 -1
  207. package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +29 -12
  208. package/project/.sdk/src/cmp/rb/ReadmeOptions_rb.ts +4 -3
  209. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +85 -22
  210. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +56 -37
  211. package/project/.sdk/src/cmp/rb/ReadmeTopHowto_rb.ts +1 -1
  212. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +19 -11
  213. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +43 -11
  214. package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +9 -9
  215. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +6 -12
  216. package/project/.sdk/src/cmp/rb/Test_rb.ts +4 -0
  217. package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +2 -0
  218. package/project/.sdk/src/cmp/rb/fragment/EntityCreateOp.fragment.rb +5 -0
  219. package/project/.sdk/src/cmp/rb/fragment/EntityListOp.fragment.rb +20 -2
  220. package/project/.sdk/src/cmp/rb/fragment/EntityLoadOp.fragment.rb +8 -1
  221. package/project/.sdk/src/cmp/rb/fragment/EntityRemoveOp.fragment.rb +6 -1
  222. package/project/.sdk/src/cmp/rb/fragment/EntityUpdateOp.fragment.rb +5 -0
  223. package/project/.sdk/src/cmp/rb/fragment/Main.fragment.rb +24 -8
  224. package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +105 -0
  225. package/project/.sdk/src/cmp/ts/Entity_ts.ts +17 -1
  226. package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +1 -0
  227. package/project/.sdk/src/cmp/ts/Main_ts.ts +6 -0
  228. package/project/.sdk/src/cmp/ts/Package_ts.ts +14 -7
  229. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +13 -7
  230. package/project/.sdk/src/cmp/ts/ReadmeExampleTest_ts.ts +81 -0
  231. package/project/.sdk/src/cmp/ts/ReadmeExamplesTest_ts.ts +446 -0
  232. package/project/.sdk/src/cmp/ts/ReadmeExplanation_ts.ts +2 -2
  233. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +57 -11
  234. package/project/.sdk/src/cmp/ts/ReadmeInstall_ts.ts +19 -6
  235. package/project/.sdk/src/cmp/ts/ReadmeIntro_ts.ts +39 -1
  236. package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +50 -18
  237. package/project/.sdk/src/cmp/ts/ReadmeOptions_ts.ts +4 -3
  238. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +95 -40
  239. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +24 -13
  240. package/project/.sdk/src/cmp/ts/ReadmeTopHowto_ts.ts +3 -0
  241. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +44 -12
  242. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +23 -3
  243. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +2 -2
  244. package/project/.sdk/src/cmp/ts/Test_ts.ts +5 -0
  245. package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.ts +3 -1
  246. package/project/.sdk/src/cmp/ts/fragment/EntityBase.fragment.ts +10 -5
  247. package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.ts +4 -2
  248. package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.ts +4 -2
  249. package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.ts +4 -2
  250. package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.ts +4 -2
  251. package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.ts +4 -2
  252. package/project/.sdk/src/cmp/ts/utility_ts.ts +59 -0
  253. package/project/.sdk/tm/go/LICENSE +1 -1
  254. package/project/.sdk/tm/go/Makefile +36 -1
  255. package/project/.sdk/tm/go/VERSION +1 -0
  256. package/project/.sdk/tm/go/core/context.go +12 -7
  257. package/project/.sdk/tm/go-cli/src/feature/README.md +6 -0
  258. package/project/.sdk/tm/go-cli/src/feature/base/.gitkeep +0 -0
  259. package/project/.sdk/tm/go-cli/src/feature/log/.gitkeep +0 -0
  260. package/project/.sdk/tm/go-cli/src/feature/test/.gitkeep +0 -0
  261. package/project/.sdk/tm/go-mcp/src/feature/README.md +6 -0
  262. package/project/.sdk/tm/go-mcp/src/feature/base/.gitkeep +0 -0
  263. package/project/.sdk/tm/go-mcp/src/feature/log/.gitkeep +0 -0
  264. package/project/.sdk/tm/go-mcp/src/feature/test/.gitkeep +0 -0
  265. package/project/.sdk/tm/js/LICENSE +1 -1
  266. package/project/.sdk/tm/js/Makefile +41 -0
  267. package/project/.sdk/tm/lua/LICENSE +1 -1
  268. package/project/.sdk/tm/lua/Makefile +40 -1
  269. package/project/.sdk/tm/lua/core/context.lua +13 -8
  270. package/project/.sdk/tm/php/LICENSE +1 -1
  271. package/project/.sdk/tm/php/Makefile +31 -1
  272. package/project/.sdk/tm/php/VERSION +1 -0
  273. package/project/.sdk/tm/php/core/Context.php +12 -6
  274. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +13 -4
  275. package/project/.sdk/tm/php/utility/Done.php +2 -2
  276. package/project/.sdk/tm/php/utility/MakeError.php +3 -3
  277. package/project/.sdk/tm/py/LICENSE +1 -1
  278. package/project/.sdk/tm/py/Makefile +34 -1
  279. package/project/.sdk/tm/py/core/context.py +12 -7
  280. package/project/.sdk/tm/py/test/test_primary_utility.py +15 -4
  281. package/project/.sdk/tm/py/utility/done.py +3 -1
  282. package/project/.sdk/tm/py/utility/make_error.py +2 -2
  283. package/project/.sdk/tm/rb/LICENSE +1 -1
  284. package/project/.sdk/tm/rb/Makefile +33 -1
  285. package/project/.sdk/tm/rb/core/context.rb +8 -3
  286. package/project/.sdk/tm/rb/test/primary_utility_test.rb +2 -2
  287. package/project/.sdk/tm/rb/utility/done.rb +3 -1
  288. package/project/.sdk/tm/rb/utility/make_error.rb +5 -2
  289. package/project/.sdk/tm/ts/LICENSE +1 -1
  290. package/project/.sdk/tm/ts/Makefile +42 -0
  291. package/project/.sdk/tm/ts/src/Context.ts +8 -3
  292. package/src/action/action.ts +17 -10
  293. package/src/action/feature.ts +8 -6
  294. package/src/action/target.ts +17 -8
  295. package/src/cmp/Changelog.ts +34 -0
  296. package/src/cmp/Deploy.ts +258 -0
  297. package/src/cmp/FeatureHook.ts +6 -8
  298. package/src/cmp/License.ts +49 -0
  299. package/src/cmp/Readme.ts +2 -0
  300. package/src/cmp/ReadmeErrors.ts +257 -0
  301. package/src/cmp/ReadmeExplanation.ts +250 -230
  302. package/src/cmp/ReadmeModel.ts +7 -2
  303. package/src/cmp/ReadmeTop.ts +411 -95
  304. package/src/cmp/Security.ts +41 -0
  305. package/src/helpers/canonType.ts +89 -0
  306. package/src/helpers/collectDeps.ts +5 -3
  307. package/src/helpers/naming.ts +59 -0
  308. package/src/helpers/opExample.ts +170 -0
  309. package/src/helpers/opShape.ts +236 -0
  310. package/src/helpers/packageMeta.ts +236 -0
  311. package/src/sdkgen.ts +87 -20
  312. package/src/tsconfig.json +1 -0
  313. package/src/types.ts +85 -2
  314. package/src/utility.ts +22 -11
  315. package/README.md +0 -2
  316. package/dist/action/lang.d.ts +0 -2
  317. package/dist/action/lang.js +0 -68
  318. package/dist/action/lang.js.map +0 -1
  319. package/dist/cmp/Hook.d.ts +0 -2
  320. package/dist/cmp/Hook.js +0 -10
  321. package/dist/cmp/Hook.js.map +0 -1
  322. package/dist/cmp/Top.d.ts +0 -2
  323. package/dist/cmp/Top.js +0 -23
  324. package/dist/cmp/Top.js.map +0 -1
  325. package/dist/prepare-openapi.d.ts +0 -2
  326. package/dist/prepare-openapi.js +0 -37
  327. package/dist/prepare-openapi.js.map +0 -1
  328. package/model/sdkgen.jsonic +0 -74
  329. package/project/.sdk/tm/go/utility/struct/go.mod +0 -3
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ // Canonical type-sentinel -> language primitive type mapper.
3
+ //
4
+ // SOURCE OF TRUTH for the sentinel set: @voxgig/apidef
5
+ // ~/Projects/voxgig/apidef ts/src/utility.ts -> `const VALID_CANON`
6
+ // (around line 908). VALID_CANON maps an OpenAPI type NAME -> a `$SENTINEL`
7
+ // string (e.g. 'string' -> `$STRING`). The model stores those sentinels on
8
+ // every `fields[].type` and op `points[].args.params[].type`.
9
+ //
10
+ // This table maps the SENTINEL the other way -> a concrete primitive type in
11
+ // each target language, so the typed-model generators (EntityTypes_<lang>.ts)
12
+ // can turn the model's field/param sentinels into real language types.
13
+ //
14
+ // Kept as a small duplicate here (rather than importing VALID_CANON) because
15
+ // VALID_CANON is name->sentinel, is not exported from @voxgig/apidef, and would
16
+ // need inverting; a sentinel->type table is what every language generator
17
+ // actually needs. If VALID_CANON gains a new sentinel, add a row below (all
18
+ // languages) and keep the two in sync.
19
+ //
20
+ // KNOWN GAPS (papered over sanely, documented for the port):
21
+ // - Unknown / missing sentinel -> the language's "any" (never throws).
22
+ // - Array element typing is not in the model: $ARRAY maps to an untyped
23
+ // list/array. `list` ops return T[] via op-kind inference in the op
24
+ // fragment, NOT via a field sentinel.
25
+ // - Object/nested field schemas are not in the corpus: $OBJECT maps to the
26
+ // language's open record/map type.
27
+ // - No enum/format/nullability beyond the `req` flag.
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.CANON_ANY = exports.CANON_TYPE = void 0;
30
+ exports.canonToType = canonToType;
31
+ exports.canonKey = canonKey;
32
+ // Bare sentinel key (backticks + leading `$` stripped, upper-cased)
33
+ // -> per-language primitive type name.
34
+ //
35
+ // ONLY the `ts` column is exercised + tested today (the reference target).
36
+ // The other columns are a starting scaffold for the per-language port; verify
37
+ // each against that language's idioms before wiring its EntityTypes_<lang>.ts.
38
+ const CANON_TYPE = {
39
+ STRING: { ts: 'string', js: 'string', py: 'str', php: 'string', rb: 'String', lua: 'string', go: 'string' },
40
+ INTEGER: { ts: 'number', js: 'number', py: 'int', php: 'int', rb: 'Integer', lua: 'number', go: 'int' },
41
+ NUMBER: { ts: 'number', js: 'number', py: 'float', php: 'float', rb: 'Float', lua: 'number', go: 'float64' },
42
+ BOOLEAN: { ts: 'boolean', js: 'boolean', py: 'bool', php: 'bool', rb: 'Boolean', lua: 'boolean', go: 'bool' },
43
+ NULL: { ts: 'null', js: 'null', py: 'None', php: 'null', rb: 'NilClass', lua: 'nil', go: 'any' },
44
+ ARRAY: { ts: 'any[]', js: 'Array', py: 'list', php: 'array', rb: 'Array', lua: 'table', go: '[]any' },
45
+ OBJECT: { ts: 'Record<string, any>', js: 'Object', py: 'dict', php: 'array', rb: 'Hash', lua: 'table', go: 'map[string]any' },
46
+ ANY: { ts: 'any', js: '*', py: 'Any', php: 'mixed', rb: 'Object', lua: 'any', go: 'any' },
47
+ };
48
+ exports.CANON_TYPE = CANON_TYPE;
49
+ // Per-language fallback for unknown / missing sentinels.
50
+ // js uses JSDoc's `*` (any type); lua uses `any` (LuaLS).
51
+ const CANON_ANY = {
52
+ ts: 'any', js: '*', py: 'Any', php: 'mixed', rb: 'Object', lua: 'any', go: 'any',
53
+ };
54
+ exports.CANON_ANY = CANON_ANY;
55
+ // Normalize a raw sentinel value to its bare upper-case key:
56
+ // '`$STRING`' / '$STRING' / 'string' -> 'STRING'.
57
+ function canonKey(sentinel) {
58
+ if (null == sentinel) {
59
+ return '';
60
+ }
61
+ return String(sentinel).replace(/[`$]/g, '').trim().toUpperCase();
62
+ }
63
+ // Map a field/param type sentinel to a target-language primitive type.
64
+ // Unknown or missing sentinel -> that language's "any" (never throws).
65
+ function canonToType(sentinel, lang) {
66
+ const l = lang;
67
+ const fallback = CANON_ANY[l] ?? 'any';
68
+ const row = CANON_TYPE[canonKey(sentinel)];
69
+ if (null == row) {
70
+ return fallback;
71
+ }
72
+ return row[l] ?? fallback;
73
+ }
74
+ //# sourceMappingURL=canonType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonType.js","sourceRoot":"","sources":["../../src/helpers/canonType.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
+ import type { SdkModel, ModelDep } from '../types';
1
2
  type DepEntry = {
2
3
  name: string;
3
4
  version: string;
4
5
  source: 'feature' | 'target';
5
- raw: any;
6
+ raw: ModelDep;
6
7
  };
7
- declare function collectDeps(model: any, targetName: string, targetDeps: any): DepEntry[];
8
+ declare function collectDeps(model: SdkModel, targetName: string, targetDeps: Record<string, ModelDep> | undefined): DepEntry[];
8
9
  export type { DepEntry, };
9
10
  export { collectDeps, };
@@ -1 +1 @@
1
- {"version":3,"file":"collectDeps.js","sourceRoot":"","sources":["../../src/helpers/collectDeps.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,yCAAyC;AACzC,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,8EAA8E;AAC9E,yEAAyE;AACzE,8BAA8B;;AAyD5B,kCAAW;AAvDb,uCAA+B;AAC/B,2CAAkD;AASlD,SAAS,WAAW,CAClB,KAAU,EACV,UAAkB,EAClB,UAAe;IAEf,MAAM,GAAG,GAAe,EAAE,CAAA;IAC1B,MAAM,OAAO,GAAG,IAAA,qBAAY,EAAC,KAAK,EAAE,QAAQ,YAAG,UAAU,CAAC,CAAA;IAE1D,IAAA,eAAI,EAAC,OAAO,EAAE,CAAC,CAAM,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,IAAA,eAAI,EAAC,QAAQ,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC1B,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC;gBAChB,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,MAAM,EAAE,SAAS;oBACjB,GAAG,EAAE,GAAG;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,IAAA,eAAI,EAAC,UAAU,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC5B,IAAI,GAAG,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,MAAM,EAAE,QAAQ;oBAChB,GAAG,EAAE,GAAG;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"collectDeps.js","sourceRoot":"","sources":["../../src/helpers/collectDeps.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,yCAAyC;AACzC,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,8EAA8E;AAC9E,yEAAyE;AACzE,8BAA8B;;AA2D5B,kCAAW;AAzDb,uCAA+B;AAC/B,2CAAkD;AAWlD,SAAS,WAAW,CAClB,KAAe,EACf,UAAkB,EAClB,UAAgD;IAEhD,MAAM,GAAG,GAAe,EAAE,CAAA;IAC1B,MAAM,OAAO,GAAG,IAAA,qBAAY,EAAC,KAAK,EAAE,QAAQ,YAAG,UAAU,CAAC,CAAA;IAE1D,IAAA,eAAI,EAAC,OAAO,EAAE,CAAC,CAAM,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,IAAA,eAAI,EAAC,QAAQ,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC1B,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC;gBAChB,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,MAAM,EAAE,SAAS;oBACjB,GAAG,EAAE,GAAG;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,IAAA,eAAI,EAAC,UAAU,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC5B,IAAI,GAAG,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,MAAM,EAAE,QAAQ;oBAChB,GAAG,EAAE,GAAG;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare function isReservedName(name: string, lang: string): boolean;
2
+ declare function safeVarName(name: string, lang: string): string;
3
+ export { isReservedName, safeVarName, };
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ // Reserved-word sanitiser for generated doc-example variable names.
3
+ //
4
+ // A doc example binds a variable named after the lowercased entity name
5
+ // (e.g. `const delete = await client.Delete().load()`). When that name is a
6
+ // reserved word in the target language the snippet does not compile
7
+ // (TS1109/TS1389 for `delete`). `safeVarName` appends `_` to any reserved
8
+ // name so the example still reads clearly and compiles.
9
+ //
10
+ // Only languages whose build/vet actually rejects the name are listed. JS and
11
+ // TS share the ECMAScript reserved set (plus the strict-mode / contextual
12
+ // words a `const` binding trips on). Go lists its 25 keywords — a var named
13
+ // `type`/`func`/`range` fails `go build`; Go builtins like `delete`/`len` are
14
+ // NOT keywords and are legal identifiers, so they are intentionally omitted.
15
+ // py/php/rb/lua rarely collide on a lowercased entity name and are not treated
16
+ // here (add a set if a real collision surfaces).
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.isReservedName = isReservedName;
19
+ exports.safeVarName = safeVarName;
20
+ const JS_RESERVED = new Set([
21
+ 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger',
22
+ 'default', 'delete', 'do', 'else', 'enum', 'export', 'extends', 'false',
23
+ 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'new',
24
+ 'null', 'return', 'super', 'switch', 'this', 'throw', 'true', 'try',
25
+ 'typeof', 'var', 'void', 'while', 'with', 'yield',
26
+ // strict-mode / contextual words that are invalid as a `const`/`let` binding
27
+ 'await', 'implements', 'interface', 'let', 'package', 'private',
28
+ 'protected', 'public', 'static',
29
+ ]);
30
+ const GO_RESERVED = new Set([
31
+ 'break', 'case', 'chan', 'const', 'continue', 'default', 'defer', 'else',
32
+ 'fallthrough', 'for', 'func', 'go', 'goto', 'if', 'import', 'interface',
33
+ 'map', 'package', 'range', 'return', 'select', 'struct', 'switch', 'type',
34
+ 'var',
35
+ ]);
36
+ const RESERVED = {
37
+ ts: JS_RESERVED,
38
+ js: JS_RESERVED,
39
+ go: GO_RESERVED,
40
+ };
41
+ // Is `name` a reserved word (an illegal identifier) in the target language?
42
+ function isReservedName(name, lang) {
43
+ const set = RESERVED[lang];
44
+ return !!set && set.has(name);
45
+ }
46
+ // A collision-free variable name for the target language: the name unchanged
47
+ // unless it is reserved, in which case a trailing `_` is appended.
48
+ function safeVarName(name, lang) {
49
+ return isReservedName(name, lang) ? name + '_' : name;
50
+ }
51
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/helpers/naming.ts"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,oEAAoE;AACpE,0EAA0E;AAC1E,wDAAwD;AACxD,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,iDAAiD;;AA0C/C,wCAAc;AACd,kCAAW;AAzCb,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS;IAClC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU;IAClE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO;IACvE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK;IACvE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK;IACnE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IACjD,6EAA6E;IAC7E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IAC/D,WAAW,EAAE,QAAQ,EAAE,QAAQ;CAChC,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS;IAClC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IACxE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW;IACvE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM;IACzE,KAAK;CACN,CAAC,CAAA;AAEF,MAAM,QAAQ,GAAgC;IAC5C,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;CAChB,CAAA;AAGD,4EAA4E;AAC5E,SAAS,cAAc,CAAC,IAAY,EAAE,IAAY;IAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC/B,CAAC;AAGD,6EAA6E;AAC7E,mEAAmE;AACnE,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AACvD,CAAC"}
@@ -0,0 +1,13 @@
1
+ type ExampleLang = 'ts' | 'js' | 'py' | 'php' | 'rb' | 'lua' | 'go';
2
+ declare function litFor(lang: ExampleLang, type: any): string;
3
+ declare function idLiteral(ent: any, op: string, idF: string | null): string;
4
+ declare function matchArg(lang: ExampleLang, idF: string | null, idLit: string): string;
5
+ declare function dataArg(lang: ExampleLang, ent: any, op: string, idF: string | null): string;
6
+ type PrimaryCall = {
7
+ expr: string;
8
+ resultVar: string;
9
+ isVoid: boolean;
10
+ };
11
+ declare function primaryOpCall(lang: ExampleLang, eName: string, eLower: string, op: string, idF: string | null, ent: any): PrimaryCall;
12
+ export { primaryOpCall, idLiteral, matchArg, dataArg, litFor, };
13
+ export type { ExampleLang, PrimaryCall, };
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ // Renders a single, type-correct entity-op CALL for the neutral doc
3
+ // components (ReadmeErrors, ReadmeExplanation) that illustrate a convention
4
+ // (throw-on-error, stateful entities) with one representative operation.
5
+ //
6
+ // Two model traps this centralises:
7
+ // 1. OP-AWARENESS — the illustrated op must be one the entity actually
8
+ // exposes. A create-only entity has no `load` method, so these components
9
+ // pick the entity's PRIMARY op (entityPrimaryOp) rather than hardcoding
10
+ // `load`, and this module renders whatever op that is.
11
+ // 2. TYPE-CORRECT MATCH ID — an entity can carry its id ONLY in the
12
+ // load-match params (no `id` data field). The example id literal is
13
+ // therefore derived from the OP's param type (opRequestShape), not the
14
+ // entity fields, so a numeric match id renders `1` and not `"example_id"`
15
+ // (which would be a TS2322 against a `number` match).
16
+ //
17
+ // Output is the invocation EXPRESSION and its result binding; the surrounding
18
+ // prose / try-catch scaffolding stays in each component's per-language table.
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.primaryOpCall = primaryOpCall;
21
+ exports.idLiteral = idLiteral;
22
+ exports.matchArg = matchArg;
23
+ exports.dataArg = dataArg;
24
+ exports.litFor = litFor;
25
+ const canonType_1 = require("./canonType");
26
+ const opShape_1 = require("./opShape");
27
+ function cap(s) {
28
+ return s.charAt(0).toUpperCase() + s.slice(1);
29
+ }
30
+ // A type-correct literal for a canonical type sentinel, in the target language.
31
+ function litFor(lang, type) {
32
+ const k = (0, canonType_1.canonKey)(type);
33
+ if ('INTEGER' === k || 'NUMBER' === k)
34
+ return '1';
35
+ if ('BOOLEAN' === k)
36
+ return 'py' === lang ? 'True' : ('rb' === lang ? 'true' : 'true');
37
+ if ('ARRAY' === k)
38
+ return ('lua' === lang) ? '{}' : ('go' === lang ? '[]any{}' : '[]');
39
+ if ('OBJECT' === k)
40
+ return ('go' === lang) ? 'map[string]any{}' : '{}';
41
+ return '"example"';
42
+ }
43
+ // The example id literal for an op's match key, typed from the op's declared
44
+ // param (falling back to the entity field) so a numeric id is never quoted.
45
+ function idLiteral(ent, op, idF) {
46
+ if (null == idF)
47
+ return '"example_id"';
48
+ const item = (0, opShape_1.opRequestShape)(ent, op).items.find((it) => it.name === idF);
49
+ const k = (0, canonType_1.canonKey)(item && item.type);
50
+ return ('INTEGER' === k || 'NUMBER' === k) ? '1' : '"example_id"';
51
+ }
52
+ // Render a match object `{ idF: idLit }` (or empty when the entity has no id
53
+ // key) in the target language's object syntax.
54
+ function matchArg(lang, idF, idLit) {
55
+ if (null == idF)
56
+ return 'go' === lang ? 'nil' : '';
57
+ switch (lang) {
58
+ case 'py': return `{"${idF}": ${idLit}}`;
59
+ case 'php': return `["${idF}" => ${idLit}]`;
60
+ case 'rb': return `{ "${idF}" => ${idLit} }`;
61
+ case 'lua': return `{ ${idF} = ${idLit} }`;
62
+ case 'go': return `map[string]any{"${idF}": ${idLit}}`;
63
+ default: return `{ ${idF}: ${idLit} }`;
64
+ }
65
+ }
66
+ // The entity's required writable fields for a create/update body, rendered as
67
+ // `key: value` pairs (capped) in the target language's object syntax. Ensures
68
+ // the body satisfies a typed CreateData/UpdateData (required fields present).
69
+ function dataArg(lang, ent, op, idF) {
70
+ const items = (0, opShape_1.opRequestShape)(ent, op).items
71
+ .filter((it) => it.name !== idF && it.name !== 'id');
72
+ const required = items.filter((it) => !it.optional);
73
+ // ALL required fields must appear (a typed CreateData rejects a partial); cap
74
+ // only the optional fallback used when the op declares no required field.
75
+ const chosen = required.length ? required : items.slice(0, 3);
76
+ const pairs = chosen.map((it) => {
77
+ const v = litFor(lang, it.type);
78
+ switch (lang) {
79
+ case 'py': return `"${it.name}": ${v}`;
80
+ case 'php': return `"${it.name}" => ${v}`;
81
+ case 'rb': return `"${it.name}" => ${v}`;
82
+ case 'lua': return `${it.name} = ${v}`;
83
+ case 'go': return `"${it.name}": ${v}`;
84
+ default: return `${it.name}: ${v}`;
85
+ }
86
+ });
87
+ switch (lang) {
88
+ case 'php': return `[${pairs.join(', ')}]`;
89
+ case 'lua': return `{ ${pairs.join(', ')} }`;
90
+ case 'go': return `map[string]any{${pairs.join(', ')}}`;
91
+ default: return `{ ${pairs.join(', ')} }`;
92
+ }
93
+ }
94
+ // Render the entity's PRIMARY-op invocation in `lang`. `eName` is the
95
+ // Capitalised entity name, `eLower` the variable-safe lowercase name, `op` the
96
+ // primary op name. Method spelling / factory syntax follow each language's
97
+ // idiom (Go PascalCase + ctrl arg, Lua `:` calls, Ruby paren-less factory).
98
+ function primaryOpCall(lang, eName, eLower, op, idF, ent) {
99
+ const isMatch = 'load' === op || 'remove' === op;
100
+ const isList = 'list' === op;
101
+ const isData = 'create' === op || 'update' === op;
102
+ const idLit = idLiteral(ent, op, idF);
103
+ // Factory + method spelling per language.
104
+ const method = 'go' === lang ? cap(op) : op;
105
+ let factory;
106
+ let sep;
107
+ if ('go' === lang) {
108
+ factory = `client.${eName}(nil)`;
109
+ sep = '.';
110
+ }
111
+ else if ('lua' === lang) {
112
+ factory = `client:${eName}()`;
113
+ sep = ':';
114
+ }
115
+ else if ('rb' === lang) {
116
+ factory = `client.${eName}`;
117
+ sep = '.';
118
+ }
119
+ else if ('php' === lang) {
120
+ factory = `$client->${eName}()`;
121
+ sep = '->';
122
+ }
123
+ else {
124
+ factory = `client.${eName}()`;
125
+ sep = '.';
126
+ }
127
+ // Argument string per op + language.
128
+ let arg;
129
+ if (isList) {
130
+ arg = 'go' === lang ? 'nil' : '';
131
+ }
132
+ else if (isMatch) {
133
+ arg = matchArg(lang, idF, idLit);
134
+ }
135
+ else if (isData) {
136
+ arg = dataArg(lang, ent, op, idF);
137
+ }
138
+ else {
139
+ arg = 'go' === lang ? 'nil' : '';
140
+ }
141
+ // Go passes a trailing ctrl arg on every entity method.
142
+ if ('go' === lang) {
143
+ arg = arg + ', nil';
144
+ }
145
+ const expr = `${factory}${sep}${method}(${arg})`;
146
+ const resultVar = isList ? eLower + 's' : eLower;
147
+ return { expr, resultVar, isVoid: 'remove' === op };
148
+ }
149
+ //# sourceMappingURL=opExample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opExample.js","sourceRoot":"","sources":["../../src/helpers/opExample.ts"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,4EAA4E;AAC5E,yEAAyE;AACzE,EAAE;AACF,oCAAoC;AACpC,yEAAyE;AACzE,+EAA+E;AAC/E,6EAA6E;AAC7E,4DAA4D;AAC5D,sEAAsE;AACtE,yEAAyE;AACzE,4EAA4E;AAC5E,+EAA+E;AAC/E,2DAA2D;AAC3D,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;;AA+I5E,sCAAa;AACb,8BAAS;AACT,4BAAQ;AACR,0BAAO;AACP,wBAAM;AAhJR,2CAAsC;AACtC,uCAAyD;AAMzD,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AAGD,gFAAgF;AAChF,SAAS,MAAM,CAAC,IAAiB,EAAE,IAAS;IAC1C,MAAM,CAAC,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,CAAA;IACxB,IAAI,SAAS,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,GAAG,CAAA;IACjD,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACtF,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACtF,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAA;IACtE,OAAO,WAAW,CAAA;AACpB,CAAC;AAGD,6EAA6E;AAC7E,4EAA4E;AAC5E,SAAS,SAAS,CAAC,GAAQ,EAAE,EAAU,EAAE,GAAkB;IACzD,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,cAAc,CAAA;IACtC,MAAM,IAAI,GAAG,IAAA,wBAAc,EAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA;IAC7E,MAAM,CAAC,GAAG,IAAA,oBAAQ,EAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IACrC,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAA;AACnE,CAAC;AAGD,6EAA6E;AAC7E,+CAA+C;AAC/C,SAAS,QAAQ,CAAC,IAAiB,EAAE,GAAkB,EAAE,KAAa;IACpE,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,GAAG,MAAM,KAAK,GAAG,CAAA;QACxC,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,GAAG,QAAQ,KAAK,GAAG,CAAA;QAC3C,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAA;QAC5C,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,GAAG,MAAM,KAAK,IAAI,CAAA;QAC1C,KAAK,IAAI,CAAC,CAAC,OAAO,mBAAmB,GAAG,MAAM,KAAK,GAAG,CAAA;QACtD,OAAO,CAAC,CAAC,OAAO,KAAK,GAAG,KAAK,KAAK,IAAI,CAAA;IACxC,CAAC;AACH,CAAC;AAGD,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,SAAS,OAAO,CAAC,IAAiB,EAAE,GAAQ,EAAE,EAAU,EAAE,GAAkB;IAC1E,MAAM,KAAK,GAAG,IAAA,wBAAc,EAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK;SACxC,MAAM,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;IACxD,8EAA8E;IAC9E,0EAA0E;IAC1E,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE;QACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;QAC/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAA;YACtC,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAA;YACzC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAA;YACxC,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAA;YACtC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAA;YACtC,OAAO,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAA;QACpC,CAAC;IACH,CAAC,CAAC,CAAA;IACF,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;QAC1C,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;QAC5C,KAAK,IAAI,CAAC,CAAC,OAAO,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;QACvD,OAAO,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IAC3C,CAAC;AACH,CAAC;AAeD,sEAAsE;AACtE,+EAA+E;AAC/E,2EAA2E;AAC3E,4EAA4E;AAC5E,SAAS,aAAa,CACpB,IAAiB,EACjB,KAAa,EACb,MAAc,EACd,EAAU,EACV,GAAkB,EAClB,GAAQ;IAER,MAAM,OAAO,GAAG,MAAM,KAAK,EAAE,IAAI,QAAQ,KAAK,EAAE,CAAA;IAChD,MAAM,MAAM,GAAG,MAAM,KAAK,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAG,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,EAAE,CAAA;IACjD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IAErC,0CAA0C;IAC1C,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3C,IAAI,OAAe,CAAA;IACnB,IAAI,GAAW,CAAA;IACf,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAAC,OAAO,GAAG,UAAU,KAAK,OAAO,CAAC;QAAC,GAAG,GAAG,GAAG,CAAA;IAAC,CAAC;SAC7D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAAC,OAAO,GAAG,UAAU,KAAK,IAAI,CAAC;QAAC,GAAG,GAAG,GAAG,CAAA;IAAC,CAAC;SAChE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAAC,OAAO,GAAG,UAAU,KAAK,EAAE,CAAC;QAAC,GAAG,GAAG,GAAG,CAAA;IAAC,CAAC;SAC7D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAAC,OAAO,GAAG,YAAY,KAAK,IAAI,CAAC;QAAC,GAAG,GAAG,IAAI,CAAA;IAAC,CAAC;SACnE,CAAC;QAAC,OAAO,GAAG,UAAU,KAAK,IAAI,CAAC;QAAC,GAAG,GAAG,GAAG,CAAA;IAAC,CAAC;IAEjD,qCAAqC;IACrC,IAAI,GAAW,CAAA;IACf,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAClC,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IAClC,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IACnC,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAClC,CAAC;IACD,wDAAwD;IACxD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,GAAG,GAAG,GAAG,GAAG,OAAO,CAAA;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,CAAA;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IAChD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,KAAK,EAAE,EAAE,CAAA;AACrD,CAAC"}
@@ -0,0 +1,18 @@
1
+ declare const OP_SUFFIX: Record<string, 'Match' | 'Data'>;
2
+ declare function opTypeName(Name: string, opname: string): string;
3
+ type OpShapeItem = {
4
+ name: string;
5
+ type: any;
6
+ optional: boolean;
7
+ };
8
+ declare function opParams(op: any): any[];
9
+ declare function opRequestShape(ent: any, opname: string): {
10
+ items: OpShapeItem[];
11
+ fromParams: boolean;
12
+ };
13
+ declare function entityIdField(ent: any): string | null;
14
+ declare function entityOps(ent: any): string[];
15
+ declare function entityPrimaryOp(ent: any): string | null;
16
+ declare function entityDataIdField(ent: any): string | null;
17
+ export { OP_SUFFIX, opTypeName, opParams, opRequestShape, entityIdField, entityDataIdField, entityOps, entityPrimaryOp, };
18
+ export type { OpShapeItem, };
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ // Per-op request-payload shape + partiality policy for the typed-model
3
+ // generators (EntityTypes_<lang>.ts).
4
+ //
5
+ // SINGLE SOURCE OF TRUTH for two things every language generator needs:
6
+ // 1. The type-name scheme: <Name>{Load,List,Remove}Match /
7
+ // <Name>{Create,Update}Data (OP_SUFFIX + opTypeName).
8
+ // 2. Which fields make up an op's request payload, and whether each is
9
+ // required or optional (opRequestShape) — i.e. the partiality policy.
10
+ //
11
+ // PARTIALITY POLICY
12
+ // Op-declared params win: if the op declares params
13
+ // (op.<name>.points[].args.params[]), the payload is built from them and a
14
+ // param is optional iff `reqd === false` (this is how path/query params such
15
+ // as {id} become required). `fromParams` is true in that case.
16
+ //
17
+ // Otherwise the payload mirrors the entity's fields, filtered to those active
18
+ // for the op (field.op[opname].active !== false; absent -> participates), and
19
+ // optionality is decided per-op:
20
+ // create -> required iff `field.req` (server-shaped required fields);
21
+ // update -> all optional (patch);
22
+ // load / remove -> a field named `id` is required, the rest optional
23
+ // (best-effort key convention; degrades to all-optional if no `id`);
24
+ // list -> all optional (filter).
25
+ //
26
+ // The generators consume `items` (each already carrying its final `optional`
27
+ // flag) and render them in the target language's struct/interface/TypedDict
28
+ // syntax; the policy itself is language-neutral and tested in isolation.
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.OP_SUFFIX = void 0;
31
+ exports.opTypeName = opTypeName;
32
+ exports.opParams = opParams;
33
+ exports.opRequestShape = opRequestShape;
34
+ exports.entityIdField = entityIdField;
35
+ exports.entityDataIdField = entityDataIdField;
36
+ exports.entityOps = entityOps;
37
+ exports.entityPrimaryOp = entityPrimaryOp;
38
+ const jostraca_1 = require("jostraca");
39
+ // The five ops, and whether their request payload is a `Match` (query/id) or
40
+ // `Data` (body) — this fixes the generated type-name suffix per op.
41
+ const OP_SUFFIX = {
42
+ load: 'Match',
43
+ list: 'Match',
44
+ remove: 'Match',
45
+ create: 'Data',
46
+ update: 'Data',
47
+ };
48
+ exports.OP_SUFFIX = OP_SUFFIX;
49
+ function cap(s) {
50
+ return s.charAt(0).toUpperCase() + s.slice(1);
51
+ }
52
+ // The generated type name for an op's request payload, e.g. AdviceLoadMatch.
53
+ function opTypeName(Name, opname) {
54
+ return Name + cap(opname) + (OP_SUFFIX[opname] || 'Match');
55
+ }
56
+ // Collect an op's params, deduped by name across all of its points.
57
+ function opParams(op) {
58
+ const points = op && op.points ? (0, jostraca_1.each)(op.points) : [];
59
+ const seen = {};
60
+ const out = [];
61
+ points.forEach((pt) => {
62
+ const params = pt && pt.args && pt.args.params ? (0, jostraca_1.each)(pt.args.params) : [];
63
+ params.forEach((p) => {
64
+ if (p && null != p.name && !seen[p.name]) {
65
+ seen[p.name] = true;
66
+ out.push(p);
67
+ }
68
+ });
69
+ });
70
+ return out;
71
+ }
72
+ // Does a field participate in an op? Absent op-entry -> participates; only an
73
+ // explicit `active: false` excludes it.
74
+ function fieldInOp(field, opname) {
75
+ const fop = field && field.op && field.op[opname];
76
+ return null == fop || fop.active !== false;
77
+ }
78
+ // Decide optionality for a field in a no-params request payload, per op.
79
+ function fieldOptional(field, opname) {
80
+ switch (opname) {
81
+ case 'create':
82
+ // Respect the model's required flag: required unless req === false.
83
+ return false === field.req;
84
+ case 'update':
85
+ // Patch semantics — every field optional.
86
+ return true;
87
+ case 'load':
88
+ case 'remove':
89
+ // Best-effort key convention: the `id` field is required, rest optional.
90
+ return 'id' !== field.name;
91
+ case 'list':
92
+ default:
93
+ // Filter — every field optional.
94
+ return true;
95
+ }
96
+ }
97
+ // The ordered request-payload members for an entity op, with each member's
98
+ // required/optional decision baked in. `fromParams` records whether the op's
99
+ // declared params were used (true) or the entity-field fallback (false).
100
+ function opRequestShape(ent, opname) {
101
+ const op = ent && ent.op ? ent.op[opname] : null;
102
+ if (null == op) {
103
+ return { items: [], fromParams: false };
104
+ }
105
+ const params = opParams(op);
106
+ if (0 < params.length) {
107
+ const items = params.map((p) => ({
108
+ name: p.name,
109
+ type: p.type,
110
+ optional: false === p.reqd,
111
+ }));
112
+ return { items, fromParams: true };
113
+ }
114
+ const fields = (ent.fields ? (0, jostraca_1.each)(ent.fields) : [])
115
+ .filter((f) => f.active !== false)
116
+ .filter((f) => fieldInOp(f, opname));
117
+ const items = fields.map((f) => ({
118
+ name: f.name,
119
+ type: f.type,
120
+ optional: fieldOptional(f, opname),
121
+ }));
122
+ return { items, fromParams: false };
123
+ }
124
+ // The entity's id-like key field, or null when it has none. Used by the doc
125
+ // generators to decide whether an example may key a load/remove on `{ id: ... }`
126
+ // and access `.id` on a returned entity, OR must degrade to `load()` with no
127
+ // argument (some APIs model an entity whose load match carries no id — e.g. a
128
+ // response-wrapped spec, where AqiLoadMatch is { code, data, msg }). Prefers the
129
+ // model's declared id field name, then a literal `id`, checking the load-match
130
+ // shape first and the entity's own fields as a fallback.
131
+ function entityIdField(ent) {
132
+ if (null == ent) {
133
+ return null;
134
+ }
135
+ const idName = (ent.id && ent.id.field) || 'id';
136
+ const loadItems = opRequestShape(ent, 'load').items;
137
+ if (loadItems.some((it) => it.name === idName)) {
138
+ return idName;
139
+ }
140
+ if (loadItems.some((it) => it.name === 'id')) {
141
+ return 'id';
142
+ }
143
+ // NO fallback to entity.fields: this is the load-MATCH key. An entity whose
144
+ // DATA type has an `id` field but whose load match does NOT (a query-param
145
+ // load, e.g. playstation-store's StoreLoadMatch { age, country, ... }) must
146
+ // degrade to a no-arg load(); `.id` access is decided by entityDataIdField.
147
+ return null;
148
+ }
149
+ // The entity's ACTIVE op names, in canonical CRUD order (list, load, create,
150
+ // update, remove), with any non-canonical ops appended in sorted order. Doc
151
+ // generators must gate an op example on this (an op present in the model but
152
+ // `active: false` generates no method, so an example calling it would not
153
+ // compile) — NOT on the raw `Object.keys(ent.op)`, which includes inactive ops.
154
+ const CANON_OP_ORDER = ['list', 'load', 'create', 'update', 'remove'];
155
+ function entityOps(ent) {
156
+ const ops = (ent && ent.op) || {};
157
+ const active = Object.keys(ops).filter((o) => ops[o] && ops[o].active !== false);
158
+ return CANON_OP_ORDER.filter((o) => active.includes(o))
159
+ .concat(active.filter((o) => !CANON_OP_ORDER.includes(o)).sort());
160
+ }
161
+ // The entity's primary/representative op for a single illustrative call —
162
+ // prefer a read op (list, then load) so the snippet needs no fabricated match,
163
+ // then fall back to create/update/remove. null when the entity exposes no op.
164
+ // Doc generators MUST pick their "primary" op through this rather than
165
+ // hardcoding `load`: a create-only entity has no `load` method.
166
+ function entityPrimaryOp(ent) {
167
+ const ops = entityOps(ent);
168
+ for (const o of CANON_OP_ORDER) {
169
+ if (ops.includes(o)) {
170
+ return o;
171
+ }
172
+ }
173
+ return ops[0] || null;
174
+ }
175
+ // The id field on the entity's DATA type (its fields[]), or null. DISTINCT from
176
+ // entityIdField (the load-MATCH key): an API can model a load match that carries
177
+ // an `id` param while the response entity itself has no `id` field, so `.id`
178
+ // access on a RETURNED record must be guarded on this, not on the match key.
179
+ function entityDataIdField(ent) {
180
+ if (null == ent) {
181
+ return null;
182
+ }
183
+ const idName = (ent.id && ent.id.field) || 'id';
184
+ const fields = ent.fields ? (0, jostraca_1.each)(ent.fields) : [];
185
+ if (fields.some((f) => f && f.name === idName)) {
186
+ return idName;
187
+ }
188
+ if (fields.some((f) => f && f.name === 'id')) {
189
+ return 'id';
190
+ }
191
+ return null;
192
+ }
193
+ //# sourceMappingURL=opShape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opShape.js","sourceRoot":"","sources":["../../src/helpers/opShape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ declare const PUBLISHER = "Voxgig";
2
+ declare const PUBLISHER_URL = "https://voxgig.com";
3
+ declare const SECURITY_EMAIL = "security@voxgig.com";
4
+ declare const GENERATOR_URL = "https://github.com/voxgig/sdkgen";
5
+ declare const LANG_LABEL: Record<string, string>;
6
+ declare function langLabel(target: string): string;
7
+ declare function repoInfo(model: any): {
8
+ slug: any;
9
+ origin: any;
10
+ repo: string;
11
+ repoUrl: string;
12
+ issuesUrl: string;
13
+ changelogUrl: string;
14
+ releasesUrl: string;
15
+ };
16
+ declare function registryState(model: any, target: string): 'tag' | 'pending' | 'active' | 'inactive';
17
+ declare function isPublished(model: any, target: string): boolean;
18
+ declare function registryName(model: any, target: string): string;
19
+ declare function vendorCommand(model: any, target: string): string;
20
+ declare function apiName(model: any): string;
21
+ declare function packageName(model: any, eco: string): string;
22
+ declare function installCommand(model: any, target: string): string;
23
+ declare function pkgDescription(model: any, target: string): string;
24
+ declare function nonAffiliation(model: any): string;
25
+ declare function keywords(model: any): string[];
26
+ declare function envName(model: any): string;
27
+ export { PUBLISHER, PUBLISHER_URL, SECURITY_EMAIL, GENERATOR_URL, LANG_LABEL, langLabel, repoInfo, apiName, packageName, installCommand, registryState, isPublished, registryName, vendorCommand, pkgDescription, nonAffiliation, keywords, envName, };