@voxgig/sdkgen 1.2.1 → 1.3.2

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 (345) hide show
  1. package/bin/voxgig-sdkgen +2 -2
  2. package/dist/action/action.d.ts +3 -1
  3. package/dist/action/action.js +26 -10
  4. package/dist/action/action.js.map +1 -1
  5. package/dist/action/feature.js +9 -8
  6. package/dist/action/feature.js.map +1 -1
  7. package/dist/action/target.d.ts +7 -1
  8. package/dist/action/target.js +22 -13
  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 +225 -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 +12 -2
  53. package/dist/sdkgen.js +60 -20
  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.d.ts +2 -1
  59. package/dist/utility.js +39 -11
  60. package/dist/utility.js.map +1 -1
  61. package/model/sdkgen.aontu +137 -0
  62. package/package.json +11 -5
  63. package/project/.sdk/model/feature/feature-index.aontu +5 -0
  64. package/project/.sdk/model/target/go-cli.aontu +47 -0
  65. package/project/.sdk/model/target/go-mcp.aontu +41 -0
  66. package/project/.sdk/model/target/go.aontu +28 -0
  67. package/project/.sdk/model/target/{js.jsonic → js.aontu} +13 -0
  68. package/project/.sdk/model/target/{lua.jsonic → lua.aontu} +13 -0
  69. package/project/.sdk/model/target/{php.jsonic → php.aontu} +13 -0
  70. package/project/.sdk/model/target/{py.jsonic → py.aontu} +13 -0
  71. package/project/.sdk/model/target/{rb.jsonic → rb.aontu} +13 -0
  72. package/project/.sdk/model/target/{ts.jsonic → ts.aontu} +13 -0
  73. package/project/.sdk/src/cmp/go/Config_go.ts +3 -2
  74. package/project/.sdk/src/cmp/go/EntityOperation_go.ts +1 -0
  75. package/project/.sdk/src/cmp/go/EntityTypes_go.ts +197 -0
  76. package/project/.sdk/src/cmp/go/Entity_go.ts +2 -1
  77. package/project/.sdk/src/cmp/go/MainEntity_go.ts +6 -0
  78. package/project/.sdk/src/cmp/go/Main_go.ts +23 -3
  79. package/project/.sdk/src/cmp/go/Package_go.ts +1 -1
  80. package/project/.sdk/src/cmp/go/ReadmeEntity_go.ts +48 -10
  81. package/project/.sdk/src/cmp/go/ReadmeExamplesTest_go.ts +688 -0
  82. package/project/.sdk/src/cmp/go/ReadmeExplanation_go.ts +1 -1
  83. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +52 -8
  84. package/project/.sdk/src/cmp/go/ReadmeInstall_go.ts +11 -6
  85. package/project/.sdk/src/cmp/go/ReadmeIntro_go.ts +40 -1
  86. package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +67 -17
  87. package/project/.sdk/src/cmp/go/ReadmeOptions_go.ts +4 -3
  88. package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +146 -116
  89. package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +87 -21
  90. package/project/.sdk/src/cmp/go/ReadmeTopHowto_go.ts +4 -0
  91. package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +75 -16
  92. package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +35 -5
  93. package/project/.sdk/src/cmp/go/TestEntity_go.ts +1 -1
  94. package/project/.sdk/src/cmp/go/Test_go.ts +5 -1
  95. package/project/.sdk/src/cmp/go/fragment/Entity.fragment.go +21 -0
  96. package/project/.sdk/src/cmp/go/fragment/EntityCreateOp.fragment.go +11 -0
  97. package/project/.sdk/src/cmp/go/fragment/EntityListOp.fragment.go +11 -0
  98. package/project/.sdk/src/cmp/go/fragment/EntityLoadOp.fragment.go +11 -0
  99. package/project/.sdk/src/cmp/go/fragment/EntityRemoveOp.fragment.go +11 -0
  100. package/project/.sdk/src/cmp/go/fragment/EntityUpdateOp.fragment.go +11 -0
  101. package/project/.sdk/src/cmp/go/utility_go.ts +70 -0
  102. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +195 -0
  103. package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +106 -0
  104. package/project/.sdk/src/cmp/go-cli/fragment/words.fragment.go +132 -0
  105. package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +184 -0
  106. package/project/.sdk/src/cmp/go-mcp/fragment/main.fragment.go +68 -0
  107. package/project/.sdk/src/cmp/go-mcp/fragment/tools.fragment.go +114 -0
  108. package/project/.sdk/src/cmp/js/Config_js.ts +3 -6
  109. package/project/.sdk/src/cmp/js/EntityTypes_js.ts +111 -0
  110. package/project/.sdk/src/cmp/js/MainEntity_js.ts +1 -0
  111. package/project/.sdk/src/cmp/js/Main_js.ts +3 -0
  112. package/project/.sdk/src/cmp/js/Package_js.ts +16 -7
  113. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +33 -10
  114. package/project/.sdk/src/cmp/js/ReadmeExplanation_js.ts +2 -2
  115. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +52 -11
  116. package/project/.sdk/src/cmp/js/ReadmeIntro_js.ts +39 -1
  117. package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +50 -18
  118. package/project/.sdk/src/cmp/js/ReadmeOptions_js.ts +4 -3
  119. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +70 -20
  120. package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +50 -16
  121. package/project/.sdk/src/cmp/js/ReadmeTopHowto_js.ts +3 -0
  122. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +45 -19
  123. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +35 -3
  124. package/project/.sdk/src/cmp/js/fragment/EntityCreateOp.fragment.js +5 -0
  125. package/project/.sdk/src/cmp/js/fragment/EntityListOp.fragment.js +5 -0
  126. package/project/.sdk/src/cmp/js/fragment/EntityLoadOp.fragment.js +5 -0
  127. package/project/.sdk/src/cmp/js/fragment/EntityRemoveOp.fragment.js +5 -0
  128. package/project/.sdk/src/cmp/js/fragment/EntityUpdateOp.fragment.js +5 -0
  129. package/project/.sdk/src/cmp/js/utility_js.ts +57 -0
  130. package/project/.sdk/src/cmp/lua/Config_lua.ts +3 -2
  131. package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +113 -0
  132. package/project/.sdk/src/cmp/lua/MainEntity_lua.ts +8 -0
  133. package/project/.sdk/src/cmp/lua/Main_lua.ts +4 -0
  134. package/project/.sdk/src/cmp/lua/Package_lua.ts +23 -4
  135. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +50 -13
  136. package/project/.sdk/src/cmp/lua/ReadmeExamplesTest_lua.ts +293 -0
  137. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +46 -8
  138. package/project/.sdk/src/cmp/lua/ReadmeInstall_lua.ts +19 -3
  139. package/project/.sdk/src/cmp/lua/ReadmeIntro_lua.ts +38 -1
  140. package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +51 -16
  141. package/project/.sdk/src/cmp/lua/ReadmeOptions_lua.ts +4 -3
  142. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +156 -21
  143. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +71 -23
  144. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +46 -9
  145. package/project/.sdk/src/cmp/lua/ReadmeTopTest_lua.ts +43 -5
  146. package/project/.sdk/src/cmp/lua/Test_lua.ts +4 -0
  147. package/project/.sdk/src/cmp/lua/fragment/EntityCreateOp.fragment.lua +4 -0
  148. package/project/.sdk/src/cmp/lua/fragment/EntityListOp.fragment.lua +4 -0
  149. package/project/.sdk/src/cmp/lua/fragment/EntityLoadOp.fragment.lua +4 -0
  150. package/project/.sdk/src/cmp/lua/fragment/EntityRemoveOp.fragment.lua +4 -0
  151. package/project/.sdk/src/cmp/lua/fragment/EntityUpdateOp.fragment.lua +4 -0
  152. package/project/.sdk/src/cmp/php/Config_php.ts +3 -2
  153. package/project/.sdk/src/cmp/php/EntityTypes_php.ts +142 -0
  154. package/project/.sdk/src/cmp/php/MainEntity_php.ts +18 -1
  155. package/project/.sdk/src/cmp/php/Main_php.ts +4 -0
  156. package/project/.sdk/src/cmp/php/Package_php.ts +18 -7
  157. package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +46 -14
  158. package/project/.sdk/src/cmp/php/ReadmeExamplesTest_php.ts +401 -0
  159. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +56 -13
  160. package/project/.sdk/src/cmp/php/ReadmeInstall_php.ts +15 -3
  161. package/project/.sdk/src/cmp/php/ReadmeIntro_php.ts +40 -1
  162. package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +26 -8
  163. package/project/.sdk/src/cmp/php/ReadmeOptions_php.ts +4 -3
  164. package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +159 -25
  165. package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +90 -45
  166. package/project/.sdk/src/cmp/php/ReadmeTopHowto_php.ts +1 -1
  167. package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +43 -11
  168. package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +52 -11
  169. package/project/.sdk/src/cmp/php/TestDirect_php.ts +9 -9
  170. package/project/.sdk/src/cmp/php/TestEntity_php.ts +6 -12
  171. package/project/.sdk/src/cmp/php/Test_php.ts +4 -0
  172. package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +13 -1
  173. package/project/.sdk/src/cmp/php/fragment/EntityCreateOp.fragment.php +10 -1
  174. package/project/.sdk/src/cmp/php/fragment/EntityListOp.fragment.php +10 -1
  175. package/project/.sdk/src/cmp/php/fragment/EntityLoadOp.fragment.php +10 -1
  176. package/project/.sdk/src/cmp/php/fragment/EntityRemoveOp.fragment.php +10 -1
  177. package/project/.sdk/src/cmp/php/fragment/EntityUpdateOp.fragment.php +10 -1
  178. package/project/.sdk/src/cmp/php/fragment/Main.fragment.php +22 -14
  179. package/project/.sdk/src/cmp/py/Config_py.ts +3 -2
  180. package/project/.sdk/src/cmp/py/EntityTypes_py.ts +184 -0
  181. package/project/.sdk/src/cmp/py/Entity_py.ts +27 -0
  182. package/project/.sdk/src/cmp/py/MainEntity_py.ts +2 -1
  183. package/project/.sdk/src/cmp/py/Main_py.ts +35 -0
  184. package/project/.sdk/src/cmp/py/Package_py.ts +24 -3
  185. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +48 -14
  186. package/project/.sdk/src/cmp/py/ReadmeExamplesTest_py.ts +626 -0
  187. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +53 -14
  188. package/project/.sdk/src/cmp/py/ReadmeInstall_py.ts +19 -3
  189. package/project/.sdk/src/cmp/py/ReadmeIntro_py.ts +48 -1
  190. package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +28 -10
  191. package/project/.sdk/src/cmp/py/ReadmeOptions_py.ts +4 -3
  192. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +150 -27
  193. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +86 -40
  194. package/project/.sdk/src/cmp/py/ReadmeTopHowto_py.ts +1 -1
  195. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +45 -11
  196. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +43 -5
  197. package/project/.sdk/src/cmp/py/TestDirect_py.ts +7 -9
  198. package/project/.sdk/src/cmp/py/TestEntity_py.ts +6 -14
  199. package/project/.sdk/src/cmp/py/Test_py.ts +4 -0
  200. package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +5 -2
  201. package/project/.sdk/src/cmp/py/fragment/EntityCreateOp.fragment.py +1 -1
  202. package/project/.sdk/src/cmp/py/fragment/EntityListOp.fragment.py +5 -1
  203. package/project/.sdk/src/cmp/py/fragment/EntityLoadOp.fragment.py +6 -1
  204. package/project/.sdk/src/cmp/py/fragment/EntityRemoveOp.fragment.py +6 -1
  205. package/project/.sdk/src/cmp/py/fragment/EntityUpdateOp.fragment.py +1 -1
  206. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +17 -10
  207. package/project/.sdk/src/cmp/rb/Config_rb.ts +3 -2
  208. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +136 -0
  209. package/project/.sdk/src/cmp/rb/MainEntity_rb.ts +1 -0
  210. package/project/.sdk/src/cmp/rb/Main_rb.ts +4 -0
  211. package/project/.sdk/src/cmp/rb/Package_rb.ts +34 -7
  212. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +47 -13
  213. package/project/.sdk/src/cmp/rb/ReadmeExamplesTest_rb.ts +289 -0
  214. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +72 -21
  215. package/project/.sdk/src/cmp/rb/ReadmeInstall_rb.ts +16 -4
  216. package/project/.sdk/src/cmp/rb/ReadmeIntro_rb.ts +40 -1
  217. package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +29 -12
  218. package/project/.sdk/src/cmp/rb/ReadmeOptions_rb.ts +4 -3
  219. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +163 -25
  220. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +85 -40
  221. package/project/.sdk/src/cmp/rb/ReadmeTopHowto_rb.ts +1 -1
  222. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +45 -11
  223. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +54 -11
  224. package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +9 -9
  225. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +6 -12
  226. package/project/.sdk/src/cmp/rb/Test_rb.ts +4 -0
  227. package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +2 -0
  228. package/project/.sdk/src/cmp/rb/fragment/EntityCreateOp.fragment.rb +5 -0
  229. package/project/.sdk/src/cmp/rb/fragment/EntityListOp.fragment.rb +20 -2
  230. package/project/.sdk/src/cmp/rb/fragment/EntityLoadOp.fragment.rb +8 -1
  231. package/project/.sdk/src/cmp/rb/fragment/EntityRemoveOp.fragment.rb +6 -1
  232. package/project/.sdk/src/cmp/rb/fragment/EntityUpdateOp.fragment.rb +5 -0
  233. package/project/.sdk/src/cmp/rb/fragment/Main.fragment.rb +24 -8
  234. package/project/.sdk/src/cmp/ts/Config_ts.ts +3 -6
  235. package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +105 -0
  236. package/project/.sdk/src/cmp/ts/Entity_ts.ts +17 -1
  237. package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +1 -0
  238. package/project/.sdk/src/cmp/ts/Main_ts.ts +6 -0
  239. package/project/.sdk/src/cmp/ts/Package_ts.ts +14 -7
  240. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +32 -10
  241. package/project/.sdk/src/cmp/ts/ReadmeExampleTest_ts.ts +81 -0
  242. package/project/.sdk/src/cmp/ts/ReadmeExamplesTest_ts.ts +446 -0
  243. package/project/.sdk/src/cmp/ts/ReadmeExplanation_ts.ts +2 -2
  244. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +57 -11
  245. package/project/.sdk/src/cmp/ts/ReadmeInstall_ts.ts +19 -6
  246. package/project/.sdk/src/cmp/ts/ReadmeIntro_ts.ts +39 -1
  247. package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +50 -18
  248. package/project/.sdk/src/cmp/ts/ReadmeOptions_ts.ts +4 -3
  249. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +141 -48
  250. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +50 -16
  251. package/project/.sdk/src/cmp/ts/ReadmeTopHowto_ts.ts +3 -0
  252. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +58 -19
  253. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +35 -3
  254. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +2 -2
  255. package/project/.sdk/src/cmp/ts/Test_ts.ts +5 -0
  256. package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.ts +3 -1
  257. package/project/.sdk/src/cmp/ts/fragment/EntityBase.fragment.ts +10 -5
  258. package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.ts +4 -2
  259. package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.ts +4 -2
  260. package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.ts +4 -2
  261. package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.ts +4 -2
  262. package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.ts +4 -2
  263. package/project/.sdk/src/cmp/ts/utility_ts.ts +59 -0
  264. package/project/.sdk/tm/go/LICENSE +1 -1
  265. package/project/.sdk/tm/go/Makefile +36 -1
  266. package/project/.sdk/tm/go/VERSION +1 -0
  267. package/project/.sdk/tm/go/core/context.go +12 -7
  268. package/project/.sdk/tm/go-cli/src/feature/README.md +6 -0
  269. package/project/.sdk/tm/go-cli/src/feature/base/.gitkeep +0 -0
  270. package/project/.sdk/tm/go-cli/src/feature/log/.gitkeep +0 -0
  271. package/project/.sdk/tm/go-cli/src/feature/test/.gitkeep +0 -0
  272. package/project/.sdk/tm/go-mcp/src/feature/README.md +6 -0
  273. package/project/.sdk/tm/go-mcp/src/feature/base/.gitkeep +0 -0
  274. package/project/.sdk/tm/go-mcp/src/feature/log/.gitkeep +0 -0
  275. package/project/.sdk/tm/go-mcp/src/feature/test/.gitkeep +0 -0
  276. package/project/.sdk/tm/js/LICENSE +1 -1
  277. package/project/.sdk/tm/js/Makefile +41 -0
  278. package/project/.sdk/tm/lua/LICENSE +1 -1
  279. package/project/.sdk/tm/lua/Makefile +40 -1
  280. package/project/.sdk/tm/lua/core/context.lua +13 -8
  281. package/project/.sdk/tm/php/LICENSE +1 -1
  282. package/project/.sdk/tm/php/Makefile +31 -1
  283. package/project/.sdk/tm/php/VERSION +1 -0
  284. package/project/.sdk/tm/php/core/Context.php +12 -6
  285. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +13 -4
  286. package/project/.sdk/tm/php/utility/Done.php +2 -2
  287. package/project/.sdk/tm/php/utility/MakeError.php +3 -3
  288. package/project/.sdk/tm/py/LICENSE +1 -1
  289. package/project/.sdk/tm/py/Makefile +34 -1
  290. package/project/.sdk/tm/py/core/context.py +12 -7
  291. package/project/.sdk/tm/py/test/test_primary_utility.py +15 -4
  292. package/project/.sdk/tm/py/test/test_struct_utility.py +1 -1
  293. package/project/.sdk/tm/py/utility/done.py +3 -1
  294. package/project/.sdk/tm/py/utility/make_error.py +2 -2
  295. package/project/.sdk/tm/rb/LICENSE +1 -1
  296. package/project/.sdk/tm/rb/Makefile +36 -2
  297. package/project/.sdk/tm/rb/core/context.rb +8 -3
  298. package/project/.sdk/tm/rb/test/primary_utility_test.rb +2 -2
  299. package/project/.sdk/tm/rb/utility/done.rb +3 -1
  300. package/project/.sdk/tm/rb/utility/make_error.rb +5 -2
  301. package/project/.sdk/tm/ts/LICENSE +1 -1
  302. package/project/.sdk/tm/ts/Makefile +42 -0
  303. package/project/.sdk/tm/ts/src/Context.ts +8 -3
  304. package/src/action/action.ts +30 -11
  305. package/src/action/feature.ts +12 -14
  306. package/src/action/target.ts +28 -17
  307. package/src/cmp/Changelog.ts +34 -0
  308. package/src/cmp/Deploy.ts +258 -0
  309. package/src/cmp/FeatureHook.ts +6 -8
  310. package/src/cmp/License.ts +49 -0
  311. package/src/cmp/Readme.ts +2 -0
  312. package/src/cmp/ReadmeErrors.ts +257 -0
  313. package/src/cmp/ReadmeExplanation.ts +250 -230
  314. package/src/cmp/ReadmeModel.ts +7 -2
  315. package/src/cmp/ReadmeTop.ts +411 -95
  316. package/src/cmp/Security.ts +41 -0
  317. package/src/helpers/canonType.ts +89 -0
  318. package/src/helpers/collectDeps.ts +5 -3
  319. package/src/helpers/naming.ts +59 -0
  320. package/src/helpers/opExample.ts +170 -0
  321. package/src/helpers/opShape.ts +274 -0
  322. package/src/helpers/packageMeta.ts +236 -0
  323. package/src/sdkgen.ts +91 -23
  324. package/src/tsconfig.json +1 -0
  325. package/src/types.ts +85 -2
  326. package/src/utility.ts +45 -11
  327. package/README.md +0 -2
  328. package/dist/action/lang.d.ts +0 -2
  329. package/dist/action/lang.js +0 -68
  330. package/dist/action/lang.js.map +0 -1
  331. package/dist/cmp/Hook.d.ts +0 -2
  332. package/dist/cmp/Hook.js +0 -10
  333. package/dist/cmp/Hook.js.map +0 -1
  334. package/dist/cmp/Top.d.ts +0 -2
  335. package/dist/cmp/Top.js +0 -23
  336. package/dist/cmp/Top.js.map +0 -1
  337. package/dist/prepare-openapi.d.ts +0 -2
  338. package/dist/prepare-openapi.js +0 -37
  339. package/dist/prepare-openapi.js.map +0 -1
  340. package/model/sdkgen.jsonic +0 -74
  341. package/project/.sdk/model/feature/feature-index.jsonic +0 -5
  342. package/project/.sdk/model/target/go.jsonic +0 -22
  343. package/project/.sdk/tm/go/utility/struct/go.mod +0 -3
  344. /package/project/.sdk/model/feature/{log.jsonic → log.aontu} +0 -0
  345. /package/project/.sdk/model/feature/{test.jsonic → test.aontu} +0 -0
@@ -217,7 +217,17 @@ func NewContext(ctxmap map[string]any, basectx *Context) *Context {
217
217
  }
218
218
 
219
219
  func (ctx *Context) resolveOp(opname string) *Operation {
220
- if op, ok := ctx.Opmap[opname]; ok && op != nil {
220
+ // Cache key is `<entity>:<opname>` so two entities with the same op
221
+ // (e.g. both have a "list") get distinct cached Operations. Keying on
222
+ // opname alone caused the first-resolved entity's points to be served
223
+ // to every subsequent entity's call.
224
+ entname := ""
225
+ if ctx.Entity != nil {
226
+ entname = ctx.Entity.GetName()
227
+ }
228
+ cacheKey := entname + ":" + opname
229
+
230
+ if op, ok := ctx.Opmap[cacheKey]; ok && op != nil {
221
231
  return op
222
232
  }
223
233
 
@@ -225,11 +235,6 @@ func (ctx *Context) resolveOp(opname string) *Operation {
225
235
  return NewOperation(map[string]any{})
226
236
  }
227
237
 
228
- entname := ""
229
- if ctx.Entity != nil {
230
- entname = ctx.Entity.GetName()
231
- }
232
-
233
238
  opcfg := vs.GetPath([]any{"entity", entname, "op", opname}, ctx.Config)
234
239
 
235
240
  input := "match"
@@ -258,7 +263,7 @@ func (ctx *Context) resolveOp(opname string) *Operation {
258
263
  "points": targets,
259
264
  })
260
265
 
261
- ctx.Opmap[opname] = op
266
+ ctx.Opmap[cacheKey] = op
262
267
  return op
263
268
  }
264
269
 
@@ -0,0 +1,6 @@
1
+ # go-cli features
2
+
3
+ The go-cli target does not generate per-feature source. Features are
4
+ applied to the sibling Go SDK by the `go` target; the CLI consumes
5
+ that SDK as a single dependency. This file exists only to satisfy
6
+ the standard tm/<target>/src/feature/ folder convention.
@@ -0,0 +1,6 @@
1
+ # go-cli features
2
+
3
+ The go-cli target does not generate per-feature source. Features are
4
+ applied to the sibling Go SDK by the `go` target; the CLI consumes
5
+ that SDK as a single dependency. This file exists only to satisfy
6
+ the standard tm/<target>/src/feature/ folder convention.
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) $$const.year$$ $$const.Name$$
3
+ Copyright (c) $$const.year$$ Voxgig
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,41 @@
1
+ .PHONY: test build clean publish
2
+
3
+ test:
4
+ npm test
5
+
6
+ build:
7
+ @echo "No build step for JavaScript"
8
+
9
+ clean:
10
+ rm -rf node_modules
11
+
12
+ # --- Release: publish to npm ----------------------------------------------
13
+ # Publish this package to npm, then tag js/vX.Y.Z. Run headless under the aql
14
+ # key vault, which injects the npm auth token + the GitHub token (never on disk
15
+ # or argv):
16
+ # aql vault exec --for=npm=<alias> --for=github=<alias> -- make publish
17
+ # aql `--dry-run` injects a filler token we detect to rehearse (no publish/tag).
18
+ # set -e + tag-last: a failed publish never leaves a tag behind.
19
+ SHELL := /bin/bash
20
+ VERSION := $(shell node -p "require('./package.json').version")
21
+ TAG := js/v$(VERSION)
22
+ AQL_DRY_RUN_FILLER := AQL-DRY-RUN-FILLER-NOT-A-REAL-SECRET
23
+ publish: test
24
+ @if git rev-parse -q --verify "refs/tags/$(TAG)" >/dev/null; then \
25
+ echo "tag $(TAG) already exists — bump package.json version first"; exit 1; fi
26
+ @set -e; \
27
+ token="$${GITHUB_TOKEN:-$$GH_TOKEN}"; \
28
+ if [ "$$token" = "$(AQL_DRY_RUN_FILLER)" ]; then \
29
+ echo "[dry-run] aql filler token detected: would publish to npm and tag $(TAG); nothing pushed."; \
30
+ exit 0; \
31
+ fi; \
32
+ npm publish --access public --registry https://registry.npmjs.org; \
33
+ git tag -a "$(TAG)" -m "js v$(VERSION)"; \
34
+ url=$$(git remote get-url origin | sed -E 's#^git@github.com:#https://github.com/#'); \
35
+ if [ -n "$$token" ] && printf '%s' "$$url" | grep -q '^https://github.com/'; then \
36
+ hdr="AUTHORIZATION: basic $$(printf 'x-access-token:%s' "$$token" | base64 | tr -d '\n')"; \
37
+ git -c http.extraheader="$$hdr" push "$$url" "$(TAG)"; \
38
+ else \
39
+ git push origin "$(TAG)"; \
40
+ fi; \
41
+ echo "Published to npm + tag $(TAG)."
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) $$const.year$$ $$const.Name$$
3
+ Copyright (c) $$const.year$$ Voxgig
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,4 +1,4 @@
1
- .PHONY: test build clean
1
+ .PHONY: test build clean publish
2
2
 
3
3
  test:
4
4
  busted -p _test test/
@@ -8,3 +8,42 @@ build:
8
8
 
9
9
  clean:
10
10
  @echo "No clean step for Lua"
11
+
12
+ # --- Release: publish to LuaRocks -----------------------------------------
13
+ # Upload the rockspec to LuaRocks, then tag lua/vX.Y.Z. LuaRocks has no aql
14
+ # recipe, so inject its API key + the GitHub token as custom env vars
15
+ # (all-positional — aql cannot mix --for recipes with positional env):
16
+ # aql vault exec '<alias>=LUAROCKS_API_KEY,<gh-alias>=GITHUB_TOKEN' -- make publish
17
+ # --skip-pack uploads only the rockspec (its git+https source is fetched at the
18
+ # lua/vX.Y.Z tag on install; that tag is pushed in the LAST step, so we must not
19
+ # pack here). LuaRocks requires the rockspec filename to be
20
+ # <package>-<version>.rockspec, so we upload a canonically-named copy. aql
21
+ # `--dry-run` rehearses (no upload/tag). set -e + tag-last: a failed upload
22
+ # never leaves a tag behind.
23
+ VERSION := $(shell sed -nE 's/^version *= *"([0-9.]+).*/\1/p' *.rockspec | head -1)
24
+ TAG := lua/v$(VERSION)
25
+ AQL_DRY_RUN_FILLER := AQL-DRY-RUN-FILLER-NOT-A-REAL-SECRET
26
+ publish: test
27
+ @if git rev-parse -q --verify "refs/tags/$(TAG)" >/dev/null; then \
28
+ echo "tag $(TAG) already exists — bump the rockspec version first"; exit 1; fi
29
+ @set -e; \
30
+ token="$${GITHUB_TOKEN:-$$GH_TOKEN}"; \
31
+ if [ "$$token" = "$(AQL_DRY_RUN_FILLER)" ] || [ "$$LUAROCKS_API_KEY" = "$(AQL_DRY_RUN_FILLER)" ]; then \
32
+ echo "[dry-run] aql filler token detected: would upload to LuaRocks and tag $(TAG); nothing pushed."; \
33
+ exit 0; \
34
+ fi; \
35
+ rock=$$(ls *.rockspec | head -1); \
36
+ pkg=$$(sed -nE 's/^package *= *"([^"]+)".*/\1/p' "$$rock" | head -1); \
37
+ rev=$$(sed -nE 's/^version *= *"([^"]+)".*/\1/p' "$$rock" | head -1); \
38
+ cp "$$rock" "$$pkg-$$rev.rockspec"; \
39
+ luarocks upload --skip-pack "$$pkg-$$rev.rockspec" --temp-key="$$LUAROCKS_API_KEY"; \
40
+ rm -f "$$pkg-$$rev.rockspec"; \
41
+ git tag -a "$(TAG)" -m "lua v$(VERSION)"; \
42
+ url=$$(git remote get-url origin | sed -E 's#^git@github.com:#https://github.com/#'); \
43
+ if [ -n "$$token" ] && printf '%s' "$$url" | grep -q '^https://github.com/'; then \
44
+ hdr="AUTHORIZATION: basic $$(printf 'x-access-token:%s' "$$token" | base64 | tr -d '\n')"; \
45
+ git -c http.extraheader="$$hdr" push "$$url" "$(TAG)"; \
46
+ else \
47
+ git push origin "$(TAG)"; \
48
+ fi; \
49
+ echo "Published to LuaRocks + tag $(TAG)."
@@ -160,17 +160,22 @@ end
160
160
 
161
161
 
162
162
  function Context:resolve_op(opname)
163
- if self.opmap[opname] ~= nil then
164
- return self.opmap[opname]
163
+ -- Cache key is `<entity>:<opname>` so two entities with the same op
164
+ -- (e.g. both have a "list") get distinct cached Operations. Keying
165
+ -- on opname alone caused the first-resolved entity's points to be
166
+ -- served to every subsequent entity's call.
167
+ local entname = "_"
168
+ if self.entity ~= nil and type(self.entity.get_name) == "function" then
169
+ entname = self.entity:get_name()
165
170
  end
171
+ local cache_key = entname .. ":" .. opname
166
172
 
167
- if opname == "" then
168
- return Operation.new({})
173
+ if self.opmap[cache_key] ~= nil then
174
+ return self.opmap[cache_key]
169
175
  end
170
176
 
171
- local entname = "_"
172
- if self.entity ~= nil and type(self.entity.get_name) == "function" then
173
- entname = self.entity:get_name()
177
+ if opname == "" then
178
+ return Operation.new({})
174
179
  end
175
180
 
176
181
  local opcfg = vs.getpath(self.config, "entity." .. entname .. ".op." .. opname)
@@ -195,7 +200,7 @@ function Context:resolve_op(opname)
195
200
  points = points,
196
201
  })
197
202
 
198
- self.opmap[opname] = op
203
+ self.opmap[cache_key] = op
199
204
  return op
200
205
  end
201
206
 
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) $$const.year$$ $$const.Name$$
3
+ Copyright (c) $$const.year$$ Voxgig
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,4 +1,4 @@
1
- .PHONY: test build clean
1
+ .PHONY: test build clean publish
2
2
 
3
3
  test:
4
4
  ./vendor/bin/phpunit test
@@ -8,3 +8,33 @@ build:
8
8
 
9
9
  clean:
10
10
  @echo "No clean step for PHP"
11
+
12
+ # --- Release: tag for Packagist -------------------------------------------
13
+ # Packagist has no upload — it tracks the repo and indexes each git tag
14
+ # php/vX.Y.Z (a configured GitHub webhook, or the Packagist "Update" API,
15
+ # refreshes the package). So publishing a version means pushing the tag. Run
16
+ # headless under the aql key vault, which injects the GitHub token:
17
+ # aql vault exec --for=github=<alias> -- make publish
18
+ # aql `--dry-run` injects a filler token we detect to rehearse (no tag/push).
19
+ # set -e + tag-last: a failed push never leaves a tag behind.
20
+ VERSION := $(shell cat VERSION)
21
+ TAG := php/v$(VERSION)
22
+ AQL_DRY_RUN_FILLER := AQL-DRY-RUN-FILLER-NOT-A-REAL-SECRET
23
+ publish: test
24
+ @if git rev-parse -q --verify "refs/tags/$(TAG)" >/dev/null; then \
25
+ echo "tag $(TAG) already exists — bump VERSION first"; exit 1; fi
26
+ @set -e; \
27
+ token="$${GITHUB_TOKEN:-$$GH_TOKEN}"; \
28
+ if [ "$$token" = "$(AQL_DRY_RUN_FILLER)" ]; then \
29
+ echo "[dry-run] aql filler token detected: would tag $(TAG) for Packagist; nothing pushed."; \
30
+ exit 0; \
31
+ fi; \
32
+ git tag -a "$(TAG)" -m "php v$(VERSION)"; \
33
+ url=$$(git remote get-url origin | sed -E 's#^git@github.com:#https://github.com/#'); \
34
+ if [ -n "$$token" ] && printf '%s' "$$url" | grep -q '^https://github.com/'; then \
35
+ hdr="AUTHORIZATION: basic $$(printf 'x-access-token:%s' "$$token" | base64 | tr -d '\n')"; \
36
+ git -c http.extraheader="$$hdr" push "$$url" "$(TAG)"; \
37
+ else \
38
+ git push origin "$(TAG)"; \
39
+ fi; \
40
+ echo "Tagged $(TAG) for Packagist."
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -100,16 +100,22 @@ class ProjectNameContext
100
100
 
101
101
  public function resolve_op(string $opname): ProjectNameOperation
102
102
  {
103
- if (isset($this->opmap[$opname])) {
104
- return $this->opmap[$opname];
103
+ // Cache key is `<entity>:<opname>` so two entities with the same op
104
+ // (e.g. both have a "list") get distinct cached Operations. Keying
105
+ // on opname alone caused the first-resolved entity's points to be
106
+ // served to every subsequent entity's call.
107
+ $entname = (is_object($this->entity) && method_exists($this->entity, 'get_name'))
108
+ ? $this->entity->get_name()
109
+ : '_';
110
+ $cacheKey = $entname . ':' . $opname;
111
+
112
+ if (isset($this->opmap[$cacheKey])) {
113
+ return $this->opmap[$cacheKey];
105
114
  }
106
115
  if ($opname === '') {
107
116
  return new ProjectNameOperation([]);
108
117
  }
109
118
 
110
- $entname = (is_object($this->entity) && method_exists($this->entity, 'get_name'))
111
- ? $this->entity->get_name()
112
- : '_';
113
119
  $opcfg = \Voxgig\Struct\Struct::getpath($this->config, "entity.{$entname}.op.{$opname}");
114
120
 
115
121
  $input = ($opname === 'update' || $opname === 'create') ? 'data' : 'match';
@@ -128,7 +134,7 @@ class ProjectNameContext
128
134
  'input' => $input,
129
135
  'points' => $points,
130
136
  ]);
131
- $this->opmap[$opname] = $op;
137
+ $this->opmap[$cacheKey] = $op;
132
138
  return $op;
133
139
  }
134
140
 
@@ -405,7 +405,11 @@ class PrimaryUtilityTest extends TestCase
405
405
  $ctxmap = $entry['ctx'] ?? [];
406
406
  $ctx = self::make_ctx_from_map($ctxmap, $client, $utility);
407
407
  self::fixctx($ctx, $client);
408
- return ($utility->done)($ctx);
408
+ // done now returns the bare result data (or raises on error, which
409
+ // runset catches). Re-wrap success into a (result, err) tuple so the
410
+ // data-driven spec matcher keeps working.
411
+ $out = ($utility->done)($ctx);
412
+ return [$out, null];
409
413
  });
410
414
  }
411
415
 
@@ -437,7 +441,11 @@ class PrimaryUtilityTest extends TestCase
437
441
  $err = self::err_from_map($args[1]);
438
442
  }
439
443
 
440
- return ($utility->make_error)($ctx, $err);
444
+ // make_error now RAISES the constructed exception (default throw
445
+ // path); runset catches it. On the no-throw path it returns the
446
+ // bare result data, which we re-wrap into a (result, err) tuple.
447
+ $out = ($utility->make_error)($ctx, $err);
448
+ return [$out, null];
441
449
  });
442
450
  }
443
451
 
@@ -455,8 +463,9 @@ class PrimaryUtilityTest extends TestCase
455
463
  'resdata' => ['id' => 'safe01'],
456
464
  ]);
457
465
 
458
- [$out, $err] = ($utility->make_error)($ctx, $ctx->make_error('test_code', 'test message'));
459
- $this->assertNull($err, 'expected no error');
466
+ // throw_err === false: make_error returns the bare result data instead
467
+ // of raising (the result-object / no-throw escape hatch).
468
+ $out = ($utility->make_error)($ctx, $ctx->make_error('test_code', 'test message'));
460
469
  $this->assertIsArray($out);
461
470
  $this->assertEquals('safe01', $out['id']);
462
471
  }
@@ -5,7 +5,7 @@ declare(strict_types=1);
5
5
 
6
6
  class ProjectNameDone
7
7
  {
8
- public static function call(ProjectNameContext $ctx): array
8
+ public static function call(ProjectNameContext $ctx): mixed
9
9
  {
10
10
  if ($ctx->ctrl->explain) {
11
11
  $ctx->ctrl->explain = ($ctx->utility->clean)($ctx, $ctx->ctrl->explain);
@@ -19,7 +19,7 @@ class ProjectNameDone
19
19
  if (is_object($resdata)) {
20
20
  $resdata = (array)$resdata;
21
21
  }
22
- return [$resdata, null];
22
+ return $resdata;
23
23
  }
24
24
  return ($ctx->utility->make_error)($ctx, null);
25
25
  }
@@ -9,7 +9,7 @@ require_once __DIR__ . '/../core/Error.php';
9
9
 
10
10
  class ProjectNameMakeError
11
11
  {
12
- public static function call(?ProjectNameContext $ctx, mixed $err): array
12
+ public static function call(?ProjectNameContext $ctx, mixed $err): mixed
13
13
  {
14
14
  if ($ctx === null) {
15
15
  require_once __DIR__ . '/../core/Context.php';
@@ -52,8 +52,8 @@ class ProjectNameMakeError
52
52
  $ctx->ctrl->err = $sdk_err;
53
53
 
54
54
  if ($ctx->ctrl->throw_err === false) {
55
- return [$result->resdata, null];
55
+ return $result->resdata;
56
56
  }
57
- return [null, $sdk_err];
57
+ throw $sdk_err;
58
58
  }
59
59
  }
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) $$const.year$$ $$const.Name$$
3
+ Copyright (c) $$const.year$$ Voxgig
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,4 +1,4 @@
1
- .PHONY: test build clean
1
+ .PHONY: test build clean publish
2
2
 
3
3
  test:
4
4
  python -m pytest test/
@@ -8,3 +8,36 @@ build:
8
8
 
9
9
  clean:
10
10
  find . -name __pycache__ -exec rm -rf {} + 2>/dev/null; true
11
+
12
+ # --- Release: publish to PyPI ---------------------------------------------
13
+ # Publish this package to PyPI, then tag py/vX.Y.Z. Run headless under the aql
14
+ # key vault, which injects the PyPI + GitHub tokens as environment variables
15
+ # (never written to disk or argv):
16
+ # aql vault exec --for=pypi=<alias> --for=github=<alias> -- make publish
17
+ # aql `--dry-run` injects a filler token we detect to rehearse: builds the dist
18
+ # but performs no upload, tag, or push. set -e + tag-last: a failed upload never
19
+ # leaves a tag behind. Needs python `build` + `twine` (pip install build twine).
20
+ VERSION := $(shell sed -nE 's/^version *= *"([^"]+)".*/\1/p' pyproject.toml | head -1)
21
+ TAG := py/v$(VERSION)
22
+ AQL_DRY_RUN_FILLER := AQL-DRY-RUN-FILLER-NOT-A-REAL-SECRET
23
+ publish: test
24
+ @if git rev-parse -q --verify "refs/tags/$(TAG)" >/dev/null; then \
25
+ echo "tag $(TAG) already exists — bump pyproject.toml version first"; exit 1; fi
26
+ @set -e; \
27
+ token="$${GITHUB_TOKEN:-$$GH_TOKEN}"; \
28
+ rm -rf dist; \
29
+ python3 -m build; \
30
+ if [ "$$token" = "$(AQL_DRY_RUN_FILLER)" ] || [ "$$TWINE_PASSWORD" = "$(AQL_DRY_RUN_FILLER)" ]; then \
31
+ echo "[dry-run] aql filler token detected: built the dist; would upload to PyPI and tag $(TAG); nothing pushed."; \
32
+ exit 0; \
33
+ fi; \
34
+ python3 -m twine upload dist/*; \
35
+ git tag -a "$(TAG)" -m "py v$(VERSION)"; \
36
+ url=$$(git remote get-url origin | sed -E 's#^git@github.com:#https://github.com/#'); \
37
+ if [ -n "$$token" ] && printf '%s' "$$url" | grep -q '^https://github.com/'; then \
38
+ hdr="AUTHORIZATION: basic $$(printf 'x-access-token:%s' "$$token" | base64 | tr -d '\n')"; \
39
+ git -c http.extraheader="$$hdr" push "$$url" "$(TAG)"; \
40
+ else \
41
+ git push origin "$(TAG)"; \
42
+ fi; \
43
+ echo "Published to PyPI + tag $(TAG)."
@@ -163,15 +163,20 @@ class ProjectNameContext:
163
163
  self.op = self.resolve_op(opname)
164
164
 
165
165
  def resolve_op(self, opname):
166
- if opname in self.opmap:
167
- return self.opmap[opname]
168
-
169
- if opname == "":
170
- return ProjectNameOperation({})
171
-
166
+ # Cache key is `<entity>:<opname>` so two entities with the same op
167
+ # (e.g. both have a "list") get distinct cached Operations. Keying
168
+ # on opname alone caused the first-resolved entity's points to be
169
+ # served to every subsequent entity's call.
172
170
  entname = "_"
173
171
  if self.entity is not None and hasattr(self.entity, "get_name") and callable(self.entity.get_name):
174
172
  entname = self.entity.get_name()
173
+ cache_key = entname + ":" + opname
174
+
175
+ if cache_key in self.opmap:
176
+ return self.opmap[cache_key]
177
+
178
+ if opname == "":
179
+ return ProjectNameOperation({})
175
180
 
176
181
  opcfg = vs.getpath(self.config, "entity." + entname + ".op." + opname)
177
182
 
@@ -192,7 +197,7 @@ class ProjectNameContext:
192
197
  "points": points,
193
198
  })
194
199
 
195
- self.opmap[opname] = op
200
+ self.opmap[cache_key] = op
196
201
  return op
197
202
 
198
203
  def make_error(self, code, msg):
@@ -329,7 +329,12 @@ class TestPrimaryUtility:
329
329
  ctxmap = {}
330
330
  ctx = _make_ctx_from_map(ctxmap, client, utility)
331
331
  _fixctx(ctx, client)
332
- return utility.done(ctx)
332
+ # done() returns the bare result data on success and raises on
333
+ # error. Adapt to the (result, err) shape the runner expects.
334
+ try:
335
+ return utility.done(ctx), None
336
+ except ProjectNameError as e:
337
+ return None, e
333
338
 
334
339
  _runset(_get_spec(primary, "done", "basic"), subject)
335
340
 
@@ -356,7 +361,12 @@ class TestPrimaryUtility:
356
361
  if isinstance(err_map, dict):
357
362
  err = _err_from_map(err_map)
358
363
 
359
- return utility.make_error(ctx, err)
364
+ # make_error() raises the constructed exception on the default
365
+ # (throw) path. Adapt to the (result, err) shape the runner expects.
366
+ try:
367
+ return utility.make_error(ctx, err), None
368
+ except ProjectNameError as e:
369
+ return None, e
360
370
 
361
371
  _runset(_get_spec(primary, "makeError", "basic"), subject)
362
372
 
@@ -370,8 +380,9 @@ class TestPrimaryUtility:
370
380
  "resdata": {"id": "safe01"},
371
381
  })
372
382
 
373
- out, err = utility.make_error(ctx, ctx.make_error("test_code", "test message"))
374
- assert err is None
383
+ # throw_err is False: make_error returns the bare result data instead
384
+ # of raising (the result-object / no-throw escape hatch).
385
+ out = utility.make_error(ctx, ctx.make_error("test_code", "test message"))
375
386
  assert isinstance(out, dict)
376
387
  assert out["id"] == "safe01"
377
388
 
@@ -516,7 +516,7 @@ class TestStructUtility(unittest.TestCase):
516
516
 
517
517
  # -------------------------------------------------
518
518
  # transform tests
519
- # Inputs and expected outputs: build/test/transform.jsonic
519
+ # Inputs and expected outputs: build/test/transform.aontu
520
520
  # -------------------------------------------------
521
521
 
522
522
  def test_transform_basic(self):
@@ -9,6 +9,8 @@ def done_util(ctx):
9
9
  explain_result.pop("err", None)
10
10
 
11
11
  if ctx.result is not None and ctx.result.ok:
12
- return ctx.result.resdata, None
12
+ return ctx.result.resdata
13
13
 
14
+ # make_error raises on the default (throw) path; only returns bare
15
+ # resdata when throw_err is explicitly disabled.
14
16
  return ctx.utility.make_error(ctx, None)
@@ -59,6 +59,6 @@ def make_error_util(ctx, err):
59
59
  ctx.ctrl.err = sdk_err
60
60
 
61
61
  if ctx.ctrl.throw_err is False:
62
- return result.resdata, None
62
+ return result.resdata
63
63
 
64
- return None, sdk_err
64
+ raise sdk_err
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) $$const.year$$ $$const.Name$$
3
+ Copyright (c) $$const.year$$ Voxgig
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,10 +1,44 @@
1
- .PHONY: test build clean
1
+ .PHONY: test build clean publish
2
2
 
3
+ # Run the WHOLE suite (entity, direct, utility, and readme-example tests) —
4
+ # a single-file invocation here leaves the rest of test/ silently unrun.
3
5
  test:
4
- ruby -Ilib test/exists_test.rb
6
+ ruby -Ilib -Itest -e 'Dir.glob("./test/*_test.rb").each { |f| require f }'
5
7
 
6
8
  build:
7
9
  @echo "No build step for Ruby"
8
10
 
9
11
  clean:
10
12
  @echo "No clean step for Ruby"
13
+
14
+ # --- Release: publish to RubyGems -----------------------------------------
15
+ # Build the gem and push it to RubyGems, then tag rb/vX.Y.Z. Run headless under
16
+ # the aql key vault, which injects GEM_HOST_API_KEY + the GitHub token (never on
17
+ # disk or argv):
18
+ # aql vault exec --for=gem=<alias> --for=github=<alias> -- make publish
19
+ # aql `--dry-run` injects a filler token we detect to rehearse (build only, no
20
+ # push/tag). set -e + tag-last: a failed push never leaves a tag behind.
21
+ VERSION := $(shell sed -nE 's/.*\.version *= *"([^"]+)".*/\1/p' *.gemspec | head -1)
22
+ TAG := rb/v$(VERSION)
23
+ AQL_DRY_RUN_FILLER := AQL-DRY-RUN-FILLER-NOT-A-REAL-SECRET
24
+ publish: test
25
+ @if git rev-parse -q --verify "refs/tags/$(TAG)" >/dev/null; then \
26
+ echo "tag $(TAG) already exists — bump the gemspec version first"; exit 1; fi
27
+ @set -e; \
28
+ token="$${GITHUB_TOKEN:-$$GH_TOKEN}"; \
29
+ rm -f *.gem; \
30
+ gem build *.gemspec; \
31
+ if [ "$$token" = "$(AQL_DRY_RUN_FILLER)" ] || [ "$$GEM_HOST_API_KEY" = "$(AQL_DRY_RUN_FILLER)" ]; then \
32
+ echo "[dry-run] aql filler token detected: built the gem; would push to RubyGems and tag $(TAG); nothing pushed."; \
33
+ exit 0; \
34
+ fi; \
35
+ gem push *.gem; \
36
+ git tag -a "$(TAG)" -m "rb v$(VERSION)"; \
37
+ url=$$(git remote get-url origin | sed -E 's#^git@github.com:#https://github.com/#'); \
38
+ if [ -n "$$token" ] && printf '%s' "$$url" | grep -q '^https://github.com/'; then \
39
+ hdr="AUTHORIZATION: basic $$(printf 'x-access-token:%s' "$$token" | base64 | tr -d '\n')"; \
40
+ git -c http.extraheader="$$hdr" push "$$url" "$(TAG)"; \
41
+ else \
42
+ git push origin "$(TAG)"; \
43
+ fi; \
44
+ echo "Published to RubyGems + tag $(TAG)."
@@ -75,10 +75,15 @@ class ProjectNameContext
75
75
  end
76
76
 
77
77
  def resolve_op(opname)
78
- return @opmap[opname] if @opmap[opname]
78
+ # Cache key is `<entity>:<opname>` so two entities with the same op
79
+ # (e.g. both have a "list") get distinct cached Operations. Keying
80
+ # on opname alone caused the first-resolved entity's points to be
81
+ # served to every subsequent entity's call.
82
+ entname = @entity&.respond_to?(:get_name) ? @entity.get_name : "_"
83
+ cache_key = "#{entname}:#{opname}"
84
+ return @opmap[cache_key] if @opmap[cache_key]
79
85
  return ProjectNameOperation.new({}) if opname.empty?
80
86
 
81
- entname = @entity&.respond_to?(:get_name) ? @entity.get_name : "_"
82
87
  opcfg = VoxgigStruct.getpath(@config, "entity.#{entname}.op.#{opname}")
83
88
 
84
89
  input = (opname == "update" || opname == "create") ? "data" : "match"
@@ -95,7 +100,7 @@ class ProjectNameContext
95
100
  "input" => input,
96
101
  "points" => points,
97
102
  })
98
- @opmap[opname] = op
103
+ @opmap[cache_key] = op
99
104
  op
100
105
  end
101
106
 
@@ -101,8 +101,8 @@ class PrimaryUtilityTest < Minitest::Test
101
101
  "resdata" => { "id" => "safe01" },
102
102
  })
103
103
 
104
- out, err = @utility.make_error.call(ctx, ctx.make_error("test_code", "test message"))
105
- assert_nil err, "expected no error"
104
+ # Opt-out path: throw_err disabled -> returns the bare result data, no raise.
105
+ out = @utility.make_error.call(ctx, ctx.make_error("test_code", "test message"))
106
106
  assert out.is_a?(Hash), "expected hash result, got: #{out.class}"
107
107
  assert_equal "safe01", out["id"], "expected id=safe01"
108
108
  end