@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.
- package/bin/voxgig-sdkgen +2 -2
- package/dist/action/action.d.ts +3 -1
- package/dist/action/action.js +26 -10
- package/dist/action/action.js.map +1 -1
- package/dist/action/feature.js +9 -8
- package/dist/action/feature.js.map +1 -1
- package/dist/action/target.d.ts +7 -1
- package/dist/action/target.js +22 -13
- package/dist/action/target.js.map +1 -1
- package/dist/cmp/Changelog.d.ts +2 -0
- package/dist/cmp/Changelog.js +30 -0
- package/dist/cmp/Changelog.js.map +1 -0
- package/dist/cmp/Deploy.d.ts +2 -0
- package/dist/cmp/Deploy.js +227 -0
- package/dist/cmp/Deploy.js.map +1 -0
- package/dist/cmp/FeatureHook.js +5 -6
- package/dist/cmp/FeatureHook.js.map +1 -1
- package/dist/cmp/License.d.ts +2 -0
- package/dist/cmp/License.js +44 -0
- package/dist/cmp/License.js.map +1 -0
- package/dist/cmp/Readme.js +2 -0
- package/dist/cmp/Readme.js.map +1 -1
- package/dist/cmp/ReadmeErrors.d.ts +2 -0
- package/dist/cmp/ReadmeErrors.js +210 -0
- package/dist/cmp/ReadmeErrors.js.map +1 -0
- package/dist/cmp/ReadmeExplanation.js +213 -223
- package/dist/cmp/ReadmeExplanation.js.map +1 -1
- package/dist/cmp/ReadmeModel.js +6 -1
- package/dist/cmp/ReadmeModel.js.map +1 -1
- package/dist/cmp/ReadmeTop.js +389 -82
- package/dist/cmp/ReadmeTop.js.map +1 -1
- package/dist/cmp/Security.d.ts +2 -0
- package/dist/cmp/Security.js +36 -0
- package/dist/cmp/Security.js.map +1 -0
- package/dist/helpers/canonType.d.ts +7 -0
- package/dist/helpers/canonType.js +74 -0
- package/dist/helpers/canonType.js.map +1 -0
- package/dist/helpers/collectDeps.d.ts +3 -2
- package/dist/helpers/collectDeps.js.map +1 -1
- package/dist/helpers/naming.d.ts +3 -0
- package/dist/helpers/naming.js +51 -0
- package/dist/helpers/naming.js.map +1 -0
- package/dist/helpers/opExample.d.ts +13 -0
- package/dist/helpers/opExample.js +149 -0
- package/dist/helpers/opExample.js.map +1 -0
- package/dist/helpers/opShape.d.ts +18 -0
- package/dist/helpers/opShape.js +225 -0
- package/dist/helpers/opShape.js.map +1 -0
- package/dist/helpers/packageMeta.d.ts +27 -0
- package/dist/helpers/packageMeta.js +224 -0
- package/dist/helpers/packageMeta.js.map +1 -0
- package/dist/sdkgen.d.ts +12 -2
- package/dist/sdkgen.js +60 -20
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +65 -2
- package/dist/types.js.map +1 -1
- package/dist/utility.d.ts +2 -1
- package/dist/utility.js +39 -11
- package/dist/utility.js.map +1 -1
- package/model/sdkgen.aontu +137 -0
- package/package.json +11 -5
- package/project/.sdk/model/feature/feature-index.aontu +5 -0
- package/project/.sdk/model/target/go-cli.aontu +47 -0
- package/project/.sdk/model/target/go-mcp.aontu +41 -0
- package/project/.sdk/model/target/go.aontu +28 -0
- package/project/.sdk/model/target/{js.jsonic → js.aontu} +13 -0
- package/project/.sdk/model/target/{lua.jsonic → lua.aontu} +13 -0
- package/project/.sdk/model/target/{php.jsonic → php.aontu} +13 -0
- package/project/.sdk/model/target/{py.jsonic → py.aontu} +13 -0
- package/project/.sdk/model/target/{rb.jsonic → rb.aontu} +13 -0
- package/project/.sdk/model/target/{ts.jsonic → ts.aontu} +13 -0
- package/project/.sdk/src/cmp/go/Config_go.ts +3 -2
- package/project/.sdk/src/cmp/go/EntityOperation_go.ts +1 -0
- package/project/.sdk/src/cmp/go/EntityTypes_go.ts +197 -0
- package/project/.sdk/src/cmp/go/Entity_go.ts +2 -1
- package/project/.sdk/src/cmp/go/MainEntity_go.ts +6 -0
- package/project/.sdk/src/cmp/go/Main_go.ts +23 -3
- package/project/.sdk/src/cmp/go/Package_go.ts +1 -1
- package/project/.sdk/src/cmp/go/ReadmeEntity_go.ts +48 -10
- package/project/.sdk/src/cmp/go/ReadmeExamplesTest_go.ts +688 -0
- package/project/.sdk/src/cmp/go/ReadmeExplanation_go.ts +1 -1
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +52 -8
- package/project/.sdk/src/cmp/go/ReadmeInstall_go.ts +11 -6
- package/project/.sdk/src/cmp/go/ReadmeIntro_go.ts +40 -1
- package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +67 -17
- package/project/.sdk/src/cmp/go/ReadmeOptions_go.ts +4 -3
- package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +146 -116
- package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +87 -21
- package/project/.sdk/src/cmp/go/ReadmeTopHowto_go.ts +4 -0
- package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +75 -16
- package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +35 -5
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +1 -1
- package/project/.sdk/src/cmp/go/Test_go.ts +5 -1
- package/project/.sdk/src/cmp/go/fragment/Entity.fragment.go +21 -0
- package/project/.sdk/src/cmp/go/fragment/EntityCreateOp.fragment.go +11 -0
- package/project/.sdk/src/cmp/go/fragment/EntityListOp.fragment.go +11 -0
- package/project/.sdk/src/cmp/go/fragment/EntityLoadOp.fragment.go +11 -0
- package/project/.sdk/src/cmp/go/fragment/EntityRemoveOp.fragment.go +11 -0
- package/project/.sdk/src/cmp/go/fragment/EntityUpdateOp.fragment.go +11 -0
- package/project/.sdk/src/cmp/go/utility_go.ts +70 -0
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +195 -0
- package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +106 -0
- package/project/.sdk/src/cmp/go-cli/fragment/words.fragment.go +132 -0
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +184 -0
- package/project/.sdk/src/cmp/go-mcp/fragment/main.fragment.go +68 -0
- package/project/.sdk/src/cmp/go-mcp/fragment/tools.fragment.go +114 -0
- package/project/.sdk/src/cmp/js/Config_js.ts +3 -6
- package/project/.sdk/src/cmp/js/EntityTypes_js.ts +111 -0
- package/project/.sdk/src/cmp/js/MainEntity_js.ts +1 -0
- package/project/.sdk/src/cmp/js/Main_js.ts +3 -0
- package/project/.sdk/src/cmp/js/Package_js.ts +16 -7
- package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +33 -10
- package/project/.sdk/src/cmp/js/ReadmeExplanation_js.ts +2 -2
- package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +52 -11
- package/project/.sdk/src/cmp/js/ReadmeIntro_js.ts +39 -1
- package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +50 -18
- package/project/.sdk/src/cmp/js/ReadmeOptions_js.ts +4 -3
- package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +70 -20
- package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +50 -16
- package/project/.sdk/src/cmp/js/ReadmeTopHowto_js.ts +3 -0
- package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +45 -19
- package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +35 -3
- package/project/.sdk/src/cmp/js/fragment/EntityCreateOp.fragment.js +5 -0
- package/project/.sdk/src/cmp/js/fragment/EntityListOp.fragment.js +5 -0
- package/project/.sdk/src/cmp/js/fragment/EntityLoadOp.fragment.js +5 -0
- package/project/.sdk/src/cmp/js/fragment/EntityRemoveOp.fragment.js +5 -0
- package/project/.sdk/src/cmp/js/fragment/EntityUpdateOp.fragment.js +5 -0
- package/project/.sdk/src/cmp/js/utility_js.ts +57 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +3 -2
- package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +113 -0
- package/project/.sdk/src/cmp/lua/MainEntity_lua.ts +8 -0
- package/project/.sdk/src/cmp/lua/Main_lua.ts +4 -0
- package/project/.sdk/src/cmp/lua/Package_lua.ts +23 -4
- package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +50 -13
- package/project/.sdk/src/cmp/lua/ReadmeExamplesTest_lua.ts +293 -0
- package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +46 -8
- package/project/.sdk/src/cmp/lua/ReadmeInstall_lua.ts +19 -3
- package/project/.sdk/src/cmp/lua/ReadmeIntro_lua.ts +38 -1
- package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +51 -16
- package/project/.sdk/src/cmp/lua/ReadmeOptions_lua.ts +4 -3
- package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +156 -21
- package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +71 -23
- package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +46 -9
- package/project/.sdk/src/cmp/lua/ReadmeTopTest_lua.ts +43 -5
- package/project/.sdk/src/cmp/lua/Test_lua.ts +4 -0
- package/project/.sdk/src/cmp/lua/fragment/EntityCreateOp.fragment.lua +4 -0
- package/project/.sdk/src/cmp/lua/fragment/EntityListOp.fragment.lua +4 -0
- package/project/.sdk/src/cmp/lua/fragment/EntityLoadOp.fragment.lua +4 -0
- package/project/.sdk/src/cmp/lua/fragment/EntityRemoveOp.fragment.lua +4 -0
- package/project/.sdk/src/cmp/lua/fragment/EntityUpdateOp.fragment.lua +4 -0
- package/project/.sdk/src/cmp/php/Config_php.ts +3 -2
- package/project/.sdk/src/cmp/php/EntityTypes_php.ts +142 -0
- package/project/.sdk/src/cmp/php/MainEntity_php.ts +18 -1
- package/project/.sdk/src/cmp/php/Main_php.ts +4 -0
- package/project/.sdk/src/cmp/php/Package_php.ts +18 -7
- package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +46 -14
- package/project/.sdk/src/cmp/php/ReadmeExamplesTest_php.ts +401 -0
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +56 -13
- package/project/.sdk/src/cmp/php/ReadmeInstall_php.ts +15 -3
- package/project/.sdk/src/cmp/php/ReadmeIntro_php.ts +40 -1
- package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +26 -8
- package/project/.sdk/src/cmp/php/ReadmeOptions_php.ts +4 -3
- package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +159 -25
- package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +90 -45
- package/project/.sdk/src/cmp/php/ReadmeTopHowto_php.ts +1 -1
- package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +43 -11
- package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +52 -11
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +9 -9
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +6 -12
- package/project/.sdk/src/cmp/php/Test_php.ts +4 -0
- package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +13 -1
- package/project/.sdk/src/cmp/php/fragment/EntityCreateOp.fragment.php +10 -1
- package/project/.sdk/src/cmp/php/fragment/EntityListOp.fragment.php +10 -1
- package/project/.sdk/src/cmp/php/fragment/EntityLoadOp.fragment.php +10 -1
- package/project/.sdk/src/cmp/php/fragment/EntityRemoveOp.fragment.php +10 -1
- package/project/.sdk/src/cmp/php/fragment/EntityUpdateOp.fragment.php +10 -1
- package/project/.sdk/src/cmp/php/fragment/Main.fragment.php +22 -14
- package/project/.sdk/src/cmp/py/Config_py.ts +3 -2
- package/project/.sdk/src/cmp/py/EntityTypes_py.ts +184 -0
- package/project/.sdk/src/cmp/py/Entity_py.ts +27 -0
- package/project/.sdk/src/cmp/py/MainEntity_py.ts +2 -1
- package/project/.sdk/src/cmp/py/Main_py.ts +35 -0
- package/project/.sdk/src/cmp/py/Package_py.ts +24 -3
- package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +48 -14
- package/project/.sdk/src/cmp/py/ReadmeExamplesTest_py.ts +626 -0
- package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +53 -14
- package/project/.sdk/src/cmp/py/ReadmeInstall_py.ts +19 -3
- package/project/.sdk/src/cmp/py/ReadmeIntro_py.ts +48 -1
- package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +28 -10
- package/project/.sdk/src/cmp/py/ReadmeOptions_py.ts +4 -3
- package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +150 -27
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +86 -40
- package/project/.sdk/src/cmp/py/ReadmeTopHowto_py.ts +1 -1
- package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +45 -11
- package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +43 -5
- package/project/.sdk/src/cmp/py/TestDirect_py.ts +7 -9
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +6 -14
- package/project/.sdk/src/cmp/py/Test_py.ts +4 -0
- package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +5 -2
- package/project/.sdk/src/cmp/py/fragment/EntityCreateOp.fragment.py +1 -1
- package/project/.sdk/src/cmp/py/fragment/EntityListOp.fragment.py +5 -1
- package/project/.sdk/src/cmp/py/fragment/EntityLoadOp.fragment.py +6 -1
- package/project/.sdk/src/cmp/py/fragment/EntityRemoveOp.fragment.py +6 -1
- package/project/.sdk/src/cmp/py/fragment/EntityUpdateOp.fragment.py +1 -1
- package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +17 -10
- package/project/.sdk/src/cmp/rb/Config_rb.ts +3 -2
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +136 -0
- package/project/.sdk/src/cmp/rb/MainEntity_rb.ts +1 -0
- package/project/.sdk/src/cmp/rb/Main_rb.ts +4 -0
- package/project/.sdk/src/cmp/rb/Package_rb.ts +34 -7
- package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +47 -13
- package/project/.sdk/src/cmp/rb/ReadmeExamplesTest_rb.ts +289 -0
- package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +72 -21
- package/project/.sdk/src/cmp/rb/ReadmeInstall_rb.ts +16 -4
- package/project/.sdk/src/cmp/rb/ReadmeIntro_rb.ts +40 -1
- package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +29 -12
- package/project/.sdk/src/cmp/rb/ReadmeOptions_rb.ts +4 -3
- package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +163 -25
- package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +85 -40
- package/project/.sdk/src/cmp/rb/ReadmeTopHowto_rb.ts +1 -1
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +45 -11
- package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +54 -11
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +9 -9
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +6 -12
- package/project/.sdk/src/cmp/rb/Test_rb.ts +4 -0
- package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +2 -0
- package/project/.sdk/src/cmp/rb/fragment/EntityCreateOp.fragment.rb +5 -0
- package/project/.sdk/src/cmp/rb/fragment/EntityListOp.fragment.rb +20 -2
- package/project/.sdk/src/cmp/rb/fragment/EntityLoadOp.fragment.rb +8 -1
- package/project/.sdk/src/cmp/rb/fragment/EntityRemoveOp.fragment.rb +6 -1
- package/project/.sdk/src/cmp/rb/fragment/EntityUpdateOp.fragment.rb +5 -0
- package/project/.sdk/src/cmp/rb/fragment/Main.fragment.rb +24 -8
- package/project/.sdk/src/cmp/ts/Config_ts.ts +3 -6
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +105 -0
- package/project/.sdk/src/cmp/ts/Entity_ts.ts +17 -1
- package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +1 -0
- package/project/.sdk/src/cmp/ts/Main_ts.ts +6 -0
- package/project/.sdk/src/cmp/ts/Package_ts.ts +14 -7
- package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +32 -10
- package/project/.sdk/src/cmp/ts/ReadmeExampleTest_ts.ts +81 -0
- package/project/.sdk/src/cmp/ts/ReadmeExamplesTest_ts.ts +446 -0
- package/project/.sdk/src/cmp/ts/ReadmeExplanation_ts.ts +2 -2
- package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +57 -11
- package/project/.sdk/src/cmp/ts/ReadmeInstall_ts.ts +19 -6
- package/project/.sdk/src/cmp/ts/ReadmeIntro_ts.ts +39 -1
- package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +50 -18
- package/project/.sdk/src/cmp/ts/ReadmeOptions_ts.ts +4 -3
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +141 -48
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +50 -16
- package/project/.sdk/src/cmp/ts/ReadmeTopHowto_ts.ts +3 -0
- package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +58 -19
- package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +35 -3
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +2 -2
- package/project/.sdk/src/cmp/ts/Test_ts.ts +5 -0
- package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.ts +3 -1
- package/project/.sdk/src/cmp/ts/fragment/EntityBase.fragment.ts +10 -5
- package/project/.sdk/src/cmp/ts/fragment/EntityCreateOp.fragment.ts +4 -2
- package/project/.sdk/src/cmp/ts/fragment/EntityListOp.fragment.ts +4 -2
- package/project/.sdk/src/cmp/ts/fragment/EntityLoadOp.fragment.ts +4 -2
- package/project/.sdk/src/cmp/ts/fragment/EntityRemoveOp.fragment.ts +4 -2
- package/project/.sdk/src/cmp/ts/fragment/EntityUpdateOp.fragment.ts +4 -2
- package/project/.sdk/src/cmp/ts/utility_ts.ts +59 -0
- package/project/.sdk/tm/go/LICENSE +1 -1
- package/project/.sdk/tm/go/Makefile +36 -1
- package/project/.sdk/tm/go/VERSION +1 -0
- package/project/.sdk/tm/go/core/context.go +12 -7
- package/project/.sdk/tm/go-cli/src/feature/README.md +6 -0
- package/project/.sdk/tm/go-cli/src/feature/base/.gitkeep +0 -0
- package/project/.sdk/tm/go-cli/src/feature/log/.gitkeep +0 -0
- package/project/.sdk/tm/go-cli/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/go-mcp/src/feature/README.md +6 -0
- package/project/.sdk/tm/go-mcp/src/feature/base/.gitkeep +0 -0
- package/project/.sdk/tm/go-mcp/src/feature/log/.gitkeep +0 -0
- package/project/.sdk/tm/go-mcp/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/js/LICENSE +1 -1
- package/project/.sdk/tm/js/Makefile +41 -0
- package/project/.sdk/tm/lua/LICENSE +1 -1
- package/project/.sdk/tm/lua/Makefile +40 -1
- package/project/.sdk/tm/lua/core/context.lua +13 -8
- package/project/.sdk/tm/php/LICENSE +1 -1
- package/project/.sdk/tm/php/Makefile +31 -1
- package/project/.sdk/tm/php/VERSION +1 -0
- package/project/.sdk/tm/php/core/Context.php +12 -6
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +13 -4
- package/project/.sdk/tm/php/utility/Done.php +2 -2
- package/project/.sdk/tm/php/utility/MakeError.php +3 -3
- package/project/.sdk/tm/py/LICENSE +1 -1
- package/project/.sdk/tm/py/Makefile +34 -1
- package/project/.sdk/tm/py/core/context.py +12 -7
- package/project/.sdk/tm/py/test/test_primary_utility.py +15 -4
- package/project/.sdk/tm/py/test/test_struct_utility.py +1 -1
- package/project/.sdk/tm/py/utility/done.py +3 -1
- package/project/.sdk/tm/py/utility/make_error.py +2 -2
- package/project/.sdk/tm/rb/LICENSE +1 -1
- package/project/.sdk/tm/rb/Makefile +36 -2
- package/project/.sdk/tm/rb/core/context.rb +8 -3
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +2 -2
- package/project/.sdk/tm/rb/utility/done.rb +3 -1
- package/project/.sdk/tm/rb/utility/make_error.rb +5 -2
- package/project/.sdk/tm/ts/LICENSE +1 -1
- package/project/.sdk/tm/ts/Makefile +42 -0
- package/project/.sdk/tm/ts/src/Context.ts +8 -3
- package/src/action/action.ts +30 -11
- package/src/action/feature.ts +12 -14
- package/src/action/target.ts +28 -17
- package/src/cmp/Changelog.ts +34 -0
- package/src/cmp/Deploy.ts +258 -0
- package/src/cmp/FeatureHook.ts +6 -8
- package/src/cmp/License.ts +49 -0
- package/src/cmp/Readme.ts +2 -0
- package/src/cmp/ReadmeErrors.ts +257 -0
- package/src/cmp/ReadmeExplanation.ts +250 -230
- package/src/cmp/ReadmeModel.ts +7 -2
- package/src/cmp/ReadmeTop.ts +411 -95
- package/src/cmp/Security.ts +41 -0
- package/src/helpers/canonType.ts +89 -0
- package/src/helpers/collectDeps.ts +5 -3
- package/src/helpers/naming.ts +59 -0
- package/src/helpers/opExample.ts +170 -0
- package/src/helpers/opShape.ts +274 -0
- package/src/helpers/packageMeta.ts +236 -0
- package/src/sdkgen.ts +91 -23
- package/src/tsconfig.json +1 -0
- package/src/types.ts +85 -2
- package/src/utility.ts +45 -11
- package/README.md +0 -2
- package/dist/action/lang.d.ts +0 -2
- package/dist/action/lang.js +0 -68
- package/dist/action/lang.js.map +0 -1
- package/dist/cmp/Hook.d.ts +0 -2
- package/dist/cmp/Hook.js +0 -10
- package/dist/cmp/Hook.js.map +0 -1
- package/dist/cmp/Top.d.ts +0 -2
- package/dist/cmp/Top.js +0 -23
- package/dist/cmp/Top.js.map +0 -1
- package/dist/prepare-openapi.d.ts +0 -2
- package/dist/prepare-openapi.js +0 -37
- package/dist/prepare-openapi.js.map +0 -1
- package/model/sdkgen.jsonic +0 -74
- package/project/.sdk/model/feature/feature-index.jsonic +0 -5
- package/project/.sdk/model/target/go.jsonic +0 -22
- package/project/.sdk/tm/go/utility/struct/go.mod +0 -3
- /package/project/.sdk/model/feature/{log.jsonic → log.aontu} +0 -0
- /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
|
-
|
|
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[
|
|
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.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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,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
|
-
|
|
164
|
-
|
|
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
|
|
168
|
-
return
|
|
173
|
+
if self.opmap[cache_key] ~= nil then
|
|
174
|
+
return self.opmap[cache_key]
|
|
169
175
|
end
|
|
170
176
|
|
|
171
|
-
|
|
172
|
-
|
|
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[
|
|
203
|
+
self.opmap[cache_key] = op
|
|
199
204
|
return op
|
|
200
205
|
end
|
|
201
206
|
|
|
@@ -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
|
-
|
|
104
|
-
|
|
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[$
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
459
|
-
|
|
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):
|
|
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
|
|
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):
|
|
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
|
|
55
|
+
return $result->resdata;
|
|
56
56
|
}
|
|
57
|
-
|
|
57
|
+
throw $sdk_err;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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[
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
374
|
-
|
|
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.
|
|
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
|
|
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)
|
|
@@ -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
|
|
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
|
-
|
|
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[
|
|
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
|
|
105
|
-
|
|
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
|