@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.
- package/bin/voxgig-sdkgen +2 -2
- package/dist/action/action.d.ts +2 -1
- package/dist/action/action.js +15 -9
- package/dist/action/action.js.map +1 -1
- package/dist/action/feature.js +6 -3
- package/dist/action/feature.js.map +1 -1
- package/dist/action/target.d.ts +7 -1
- package/dist/action/target.js +13 -6
- 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 +193 -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 +11 -1
- package/dist/sdkgen.js +57 -18
- 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.js +20 -11
- package/dist/utility.js.map +1 -1
- package/model/sdkgen.aontu +137 -0
- package/package.json +13 -6
- package/project/.sdk/model/target/go-cli.jsonic +47 -0
- package/project/.sdk/model/target/go-mcp.jsonic +41 -0
- package/project/.sdk/model/target/go.jsonic +9 -3
- package/project/.sdk/model/target/js.jsonic +13 -0
- package/project/.sdk/model/target/lua.jsonic +13 -0
- package/project/.sdk/model/target/php.jsonic +13 -0
- package/project/.sdk/model/target/py.jsonic +13 -0
- package/project/.sdk/model/target/rb.jsonic +13 -0
- package/project/.sdk/model/target/ts.jsonic +13 -0
- 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 +18 -6
- package/project/.sdk/src/cmp/go/ReadmeExamplesTest_go.ts +684 -0
- package/project/.sdk/src/cmp/go/ReadmeExplanation_go.ts +1 -1
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +48 -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 +63 -17
- package/project/.sdk/src/cmp/go/ReadmeOptions_go.ts +4 -3
- package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +124 -115
- package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +28 -15
- package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +33 -9
- 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-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/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 +13 -7
- 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 +45 -19
- package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +24 -13
- package/project/.sdk/src/cmp/js/ReadmeTopHowto_js.ts +3 -0
- package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +28 -12
- package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +23 -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/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 +12 -10
- 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 +79 -18
- package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +25 -20
- package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +17 -9
- package/project/.sdk/src/cmp/lua/ReadmeTopTest_lua.ts +32 -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/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 +15 -11
- 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 +80 -22
- package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +51 -42
- package/project/.sdk/src/cmp/php/ReadmeTopHowto_php.ts +1 -1
- package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +19 -11
- package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +41 -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/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 +27 -11
- 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 +73 -24
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +57 -37
- package/project/.sdk/src/cmp/py/ReadmeTopHowto_py.ts +1 -1
- package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +19 -11
- package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +30 -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/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 +26 -10
- 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 +85 -22
- package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +56 -37
- package/project/.sdk/src/cmp/rb/ReadmeTopHowto_rb.ts +1 -1
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +19 -11
- package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +43 -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/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 +13 -7
- 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 +95 -40
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +24 -13
- package/project/.sdk/src/cmp/ts/ReadmeTopHowto_ts.ts +3 -0
- package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +44 -12
- package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +23 -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/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 +33 -1
- 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 +17 -10
- package/src/action/feature.ts +8 -6
- package/src/action/target.ts +17 -8
- 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 +236 -0
- package/src/helpers/packageMeta.ts +236 -0
- package/src/sdkgen.ts +87 -20
- package/src/tsconfig.json +1 -0
- package/src/types.ts +85 -2
- package/src/utility.ts +22 -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/tm/go/utility/struct/go.mod +0 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive, entityIdField } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -13,6 +13,40 @@ const ReadmeModel = cmp(function ReadmeModel(props: any) {
|
|
|
13
13
|
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
14
14
|
const entityList = each(entity).filter((e: any) => e.active !== false)
|
|
15
15
|
|
|
16
|
+
// Model-driven op rows for the shared entity interface: emit a
|
|
17
|
+
// load/list/create/update/remove row only for operations at least one active
|
|
18
|
+
// entity actually exposes (a read-only entity has just list+load) — never
|
|
19
|
+
// document an operation no entity has.
|
|
20
|
+
const opUnion = new Set<string>()
|
|
21
|
+
entityList.forEach((e: any) => Object.keys(e.op || {})
|
|
22
|
+
.forEach((o: string) => { if (e.op[o] && e.op[o].active !== false) opUnion.add(o) }))
|
|
23
|
+
const opRowDefs: Record<string, string> = {
|
|
24
|
+
load: '| `load` | `(reqmatch, ctrl) -> any, err` | Load a single entity by match criteria. |',
|
|
25
|
+
list: '| `list` | `(reqmatch, ctrl) -> any, err` | List entities matching the criteria. |',
|
|
26
|
+
create: '| `create` | `(reqdata, ctrl) -> any, err` | Create a new entity. |',
|
|
27
|
+
update: '| `update` | `(reqdata, ctrl) -> any, err` | Update an existing entity. |',
|
|
28
|
+
remove: '| `remove` | `(reqmatch, ctrl) -> any, err` | Remove an entity. |',
|
|
29
|
+
}
|
|
30
|
+
const opRows = ['load', 'list', 'create', 'update', 'remove']
|
|
31
|
+
.filter((o) => opUnion.has(o)).map((o) => opRowDefs[o]).join('\n')
|
|
32
|
+
|
|
33
|
+
// Model-driven Result-shape rows: only describe the operations that
|
|
34
|
+
// actually exist. Record-returning ops (load/create/update/remove) share
|
|
35
|
+
// one row; list has its own — never name a missing op.
|
|
36
|
+
const recordOps = ['load', 'create', 'update', 'remove'].filter((o) => opUnion.has(o))
|
|
37
|
+
.map((o) => '`' + o + '`')
|
|
38
|
+
const resultRows: string[] = []
|
|
39
|
+
if (recordOps.length) resultRows.push('| ' + recordOps.join(' / ') + ' | the entity record (a `table`) |')
|
|
40
|
+
if (opUnion.has('list')) resultRows.push('| `list` | an array (`table`) of entity records |')
|
|
41
|
+
const resultShapeRows = resultRows.join('\n')
|
|
42
|
+
|
|
43
|
+
const exEnt: any = entityList[0] || {}
|
|
44
|
+
const eName = exEnt.Name || 'Entity'
|
|
45
|
+
const eLower = String(exEnt.name || 'entity').toLowerCase()
|
|
46
|
+
// Model-driven id key: null when the example entity has no id-like field, so
|
|
47
|
+
// the Result-shape load illustration takes no match argument.
|
|
48
|
+
const idF = entityIdField(exEnt)
|
|
49
|
+
|
|
16
50
|
const apikeyOptionRow = isAuthActive(model)
|
|
17
51
|
? '| `apikey` | `string` | API key for authentication. |\n'
|
|
18
52
|
: ''
|
|
@@ -54,7 +88,8 @@ Creates a test-mode client with mock transport. Both arguments may be \`nil\`.
|
|
|
54
88
|
`)
|
|
55
89
|
|
|
56
90
|
each(entityList, (ent: any) => {
|
|
57
|
-
|
|
91
|
+
const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
|
|
92
|
+
Content(`| \`${ent.Name}\` | \`(data) -> ${ent.Name}Entity\` | Create ${article} ${ent.Name} entity instance. |
|
|
58
93
|
`)
|
|
59
94
|
})
|
|
60
95
|
|
|
@@ -65,11 +100,7 @@ All entities share the same interface.
|
|
|
65
100
|
|
|
66
101
|
| Method | Signature | Description |
|
|
67
102
|
| --- | --- | --- |
|
|
68
|
-
|
|
69
|
-
| \`list\` | \`(reqmatch, ctrl) -> any, err\` | List entities matching the criteria. |
|
|
70
|
-
| \`create\` | \`(reqdata, ctrl) -> any, err\` | Create a new entity. |
|
|
71
|
-
| \`update\` | \`(reqdata, ctrl) -> any, err\` | Update an existing entity. |
|
|
72
|
-
| \`remove\` | \`(reqmatch, ctrl) -> any, err\` | Remove an entity. |
|
|
103
|
+
${opRows}
|
|
73
104
|
| \`data_get\` | \`() -> table\` | Get entity data. |
|
|
74
105
|
| \`data_set\` | \`(data)\` | Set entity data. |
|
|
75
106
|
| \`match_get\` | \`() -> table\` | Get entity match criteria. |
|
|
@@ -79,17 +110,21 @@ All entities share the same interface.
|
|
|
79
110
|
|
|
80
111
|
### Result shape
|
|
81
112
|
|
|
82
|
-
Entity operations return \`(
|
|
83
|
-
|
|
113
|
+
Entity operations return \`(value, err)\`. The \`value\` is the operation's
|
|
114
|
+
data **directly** — there is no wrapper:
|
|
84
115
|
|
|
85
|
-
|
|
|
86
|
-
| --- | --- |
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
116
|
+
| Operation | \`value\` |
|
|
117
|
+
| --- | --- |
|
|
118
|
+
${resultShapeRows}
|
|
119
|
+
|
|
120
|
+
Check \`err\` first (it is non-\`nil\` on failure), then use \`value\`:
|
|
121
|
+
|
|
122
|
+
local ${eLower}, err = client:${eName}():load(${idF ? `{ ${idF} = "example_id" }` : ''})
|
|
123
|
+
if err then error(err) end
|
|
124
|
+
-- ${eLower} is the loaded record
|
|
91
125
|
|
|
92
|
-
|
|
126
|
+
Only \`direct()\` returns a response envelope — a \`table\` with \`ok\`,
|
|
127
|
+
\`status\`, \`headers\`, and \`data\` keys.
|
|
93
128
|
|
|
94
129
|
`)
|
|
95
130
|
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, envName, isAuthActive } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
const ReadmeOptions = cmp(function ReadmeOptions(props: any) {
|
|
6
6
|
const { target } = props
|
|
7
7
|
const { model } = props.ctx$
|
|
8
8
|
|
|
9
|
-
const publishedOptions = each(target.options).filter((option: any) =>
|
|
9
|
+
const publishedOptions = each(target.options).filter((option: any) =>
|
|
10
|
+
option.publish && ('apikey' !== option.name || isAuthActive(model)))
|
|
10
11
|
if (0 === publishedOptions.length) {
|
|
11
12
|
return
|
|
12
13
|
}
|
|
@@ -25,7 +26,7 @@ local client = sdk.new({
|
|
|
25
26
|
|
|
26
27
|
publishedOptions.map((option: any) => {
|
|
27
28
|
if ('apikey' === option.name) {
|
|
28
|
-
Content(` ${option.name} = os.getenv("${model
|
|
29
|
+
Content(` ${option.name} = os.getenv("${envName(model)}_APIKEY"),
|
|
29
30
|
`)
|
|
30
31
|
}
|
|
31
32
|
else {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -18,36 +18,62 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
|
|
|
18
18
|
e.active !== false && e.ancestors && e.ancestors.length > 0
|
|
19
19
|
) as any
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
?
|
|
23
|
-
:
|
|
21
|
+
const ctor = isAuthActive(model)
|
|
22
|
+
? `sdk.new({\n apikey = os.getenv("${envName(model)}_APIKEY"),\n})`
|
|
23
|
+
: `sdk.new()`
|
|
24
24
|
|
|
25
25
|
Content(`### 1. Create a client
|
|
26
26
|
|
|
27
27
|
\`\`\`lua
|
|
28
28
|
local sdk = require("${model.name}_sdk")
|
|
29
29
|
|
|
30
|
-
local client =
|
|
30
|
+
local client = ${ctor}
|
|
31
31
|
\`\`\`
|
|
32
32
|
|
|
33
33
|
`)
|
|
34
34
|
|
|
35
35
|
if (exampleEntity) {
|
|
36
36
|
const eName = nom(exampleEntity, 'Name')
|
|
37
|
+
const article = /^[aeiou]/i.test(eName) ? "an" : "a"
|
|
37
38
|
const opnames = Object.keys(exampleEntity.op || {})
|
|
39
|
+
// Model-driven id key: `idF` is the MATCH key (null when none). `dataIdF`
|
|
40
|
+
// is the id on the RETURNED record's data type — an entity can key its match
|
|
41
|
+
// on an id it does not carry as data, so a record id read (`item["id"]`,
|
|
42
|
+
// `created["id"]`) must be guarded on this, not the match key.
|
|
43
|
+
const idF = entityIdField(exampleEntity)
|
|
44
|
+
const dataIdF = entityDataIdField(exampleEntity)
|
|
45
|
+
|
|
46
|
+
// MODEL-DRIVEN display field: the list example must reference a field
|
|
47
|
+
// the entity actually has, not a hardcoded "name". Pick the entity's
|
|
48
|
+
// first non-id string field (falling back to the first non-id field of
|
|
49
|
+
// any type). The id key stays `id` — the SDK renames every id param to
|
|
50
|
+
// `id`, matching the load example and the seeded test fixture.
|
|
51
|
+
const idNames = new Set<string>(['id',
|
|
52
|
+
(exampleEntity.id && exampleEntity.id.field) || 'id'])
|
|
53
|
+
const fields: any[] = Array.isArray(exampleEntity.fields) ? exampleEntity.fields : []
|
|
54
|
+
const isStringField = (f: any) =>
|
|
55
|
+
f && typeof f.type === 'string' && /STRING/i.test(f.type)
|
|
56
|
+
const displayFieldObj =
|
|
57
|
+
fields.find((f: any) => f && !idNames.has(f.name) && isStringField(f)) ||
|
|
58
|
+
fields.find((f: any) => f && !idNames.has(f.name))
|
|
59
|
+
const displayField = displayFieldObj ? displayFieldObj.name : null
|
|
60
|
+
const idCol = dataIdF ? `item["${dataIdF}"]` : null
|
|
61
|
+
const dispCol = displayField ? `item["${displayField}"]` : null
|
|
62
|
+
const printCols = [idCol, dispCol].filter(Boolean).join(', ')
|
|
63
|
+
const printLine = printCols ? ` print(${printCols})` : ` print(item)`
|
|
38
64
|
|
|
39
65
|
if (opnames.includes('list')) {
|
|
40
|
-
Content(`### 2. List ${eName.toLowerCase()}
|
|
66
|
+
Content(`### 2. List ${eName.toLowerCase()} records
|
|
67
|
+
|
|
68
|
+
Entity operations return \`(value, err)\`. For \`list\`, \`value\` is the
|
|
69
|
+
array of records itself — iterate it directly (there is no wrapper).
|
|
41
70
|
|
|
42
71
|
\`\`\`lua
|
|
43
|
-
local
|
|
72
|
+
local ${eName.toLowerCase()}s, err = client:${eName}():list()
|
|
44
73
|
if err then error(err) end
|
|
45
74
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
local d = item:data_get()
|
|
49
|
-
print(d["id"], d["name"])
|
|
50
|
-
end
|
|
75
|
+
for _, item in ipairs(${eName.toLowerCase()}s) do
|
|
76
|
+
${printLine}
|
|
51
77
|
end
|
|
52
78
|
\`\`\`
|
|
53
79
|
|
|
@@ -55,17 +81,50 @@ end
|
|
|
55
81
|
}
|
|
56
82
|
|
|
57
83
|
if (opnames.includes('load')) {
|
|
58
|
-
Content(`### 3. Load
|
|
84
|
+
Content(`### 3. Load ${article} ${eName.toLowerCase()}
|
|
59
85
|
|
|
60
86
|
\`\`\`lua
|
|
61
|
-
local
|
|
87
|
+
local ${eName.toLowerCase()}, err = client:${eName}():load(${idF ? `{ ${idF} = "example_id" }` : ''})
|
|
62
88
|
if err then error(err) end
|
|
63
|
-
print(
|
|
89
|
+
print(${eName.toLowerCase()})
|
|
64
90
|
\`\`\`
|
|
65
91
|
|
|
66
92
|
`)
|
|
67
93
|
}
|
|
68
94
|
|
|
95
|
+
// Model-driven example fields: derive the create/update body from the op
|
|
96
|
+
// shape (opRequestShape) so the docs reference REAL writable fields, not a
|
|
97
|
+
// hardcoded "name" the entity may not have. Literals are Lua-typed by the
|
|
98
|
+
// field's canonical type; non-identifier keys use bracket syntax.
|
|
99
|
+
const luaLit = (type: any): string => {
|
|
100
|
+
const k = canonKey(type)
|
|
101
|
+
if ('INTEGER' === k || 'NUMBER' === k) return '1'
|
|
102
|
+
if ('BOOLEAN' === k) return 'true'
|
|
103
|
+
if ('ARRAY' === k || 'OBJECT' === k) return '{}'
|
|
104
|
+
return '"example"'
|
|
105
|
+
}
|
|
106
|
+
const luaKey = (name: string): string =>
|
|
107
|
+
/^[A-Za-z_]\w*$/.test(name) ? name : `["${name}"]`
|
|
108
|
+
const examplePairs = (opname: string): string[] => {
|
|
109
|
+
const items = opRequestShape(exampleEntity, opname).items
|
|
110
|
+
.filter((it: any) => !idNames.has(it.name))
|
|
111
|
+
const required = items.filter((it: any) => !it.optional)
|
|
112
|
+
const chosen = 'create' === opname
|
|
113
|
+
? (required.length ? required : items.slice(0, 2))
|
|
114
|
+
: items.slice(0, 2)
|
|
115
|
+
return chosen.map((it: any) => `${luaKey(it.name)} = ${luaLit(it.type)}`)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// The id VALUE for an update/remove match: off the returned `created` record
|
|
119
|
+
// only when its data type carries the id AND a create ran, else a literal.
|
|
120
|
+
const idParamType = (opname: string): any => {
|
|
121
|
+
const it = opRequestShape(exampleEntity, opname).items.find((x: any) => x.name === idF)
|
|
122
|
+
return it && it.type
|
|
123
|
+
}
|
|
124
|
+
const idValueFor = (opname: string): string => (null != dataIdF && opnames.includes('create'))
|
|
125
|
+
? `created["${dataIdF}"]`
|
|
126
|
+
: luaLit(idParamType(opname))
|
|
127
|
+
|
|
69
128
|
if (opnames.includes('create') || opnames.includes('update') || opnames.includes('remove')) {
|
|
70
129
|
Content(`### 4. Create, update, and remove
|
|
71
130
|
|
|
@@ -73,19 +132,21 @@ print(result)
|
|
|
73
132
|
`)
|
|
74
133
|
if (opnames.includes('create')) {
|
|
75
134
|
Content(`-- Create
|
|
76
|
-
local created,
|
|
135
|
+
local created, err = client:${eName}():create({ ${examplePairs('create').join(', ')} })
|
|
136
|
+
if err then error(err) end
|
|
77
137
|
|
|
78
138
|
`)
|
|
79
139
|
}
|
|
80
140
|
if (opnames.includes('update')) {
|
|
141
|
+
const updatePairs = (idF ? [`${idF} = ${idValueFor('update')}`] : []).concat(examplePairs('update'))
|
|
81
142
|
Content(`-- Update
|
|
82
|
-
client:${eName}(
|
|
143
|
+
client:${eName}():update({ ${updatePairs.join(', ')} })
|
|
83
144
|
|
|
84
145
|
`)
|
|
85
146
|
}
|
|
86
147
|
if (opnames.includes('remove')) {
|
|
87
148
|
Content(`-- Remove
|
|
88
|
-
client:${eName}(
|
|
149
|
+
client:${eName}():remove(${idF ? `{ ${idF} = ${idValueFor('remove')} }` : ''})
|
|
89
150
|
`)
|
|
90
151
|
}
|
|
91
152
|
Content(`\`\`\`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, File, isAuthActive } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -71,8 +71,7 @@ Create a new SDK client instance.
|
|
|
71
71
|
| Name | Type | Description |
|
|
72
72
|
| --- | --- | --- |
|
|
73
73
|
| \`options\` | \`table\` | SDK configuration options. |
|
|
74
|
-
| \`options.apikey\` | \`string\` | API key for authentication. |
|
|
75
|
-
| \`options.base\` | \`string\` | Base URL for API requests. |
|
|
74
|
+
${isAuthActive(model) ? '| \`options.apikey\` | \`string\` | API key for authentication. |\n' : ''}| \`options.base\` | \`string\` | Base URL for API requests. |
|
|
76
75
|
| \`options.prefix\` | \`string\` | URL prefix appended after base. |
|
|
77
76
|
| \`options.suffix\` | \`string\` | URL suffix appended after path. |
|
|
78
77
|
| \`options.headers\` | \`table\` | Custom headers for all requests. |
|
|
@@ -87,12 +86,12 @@ Create a new SDK client instance.
|
|
|
87
86
|
|
|
88
87
|
`)
|
|
89
88
|
|
|
90
|
-
Content(`#### \`sdk.test(testopts
|
|
89
|
+
Content(`#### \`sdk.test(testopts?, sdkopts?)\`
|
|
91
90
|
|
|
92
|
-
Create a test client with mock features active. Both arguments
|
|
91
|
+
Create a test client with mock features active. Both arguments are optional.
|
|
93
92
|
|
|
94
93
|
\`\`\`lua
|
|
95
|
-
local client = sdk.test(
|
|
94
|
+
local client = sdk.test()
|
|
96
95
|
\`\`\`
|
|
97
96
|
|
|
98
97
|
`)
|
|
@@ -154,6 +153,9 @@ same parameters as \`direct()\`.
|
|
|
154
153
|
publishedEntities.map((ent: any) => {
|
|
155
154
|
const opnames = Object.keys(ent.op || {})
|
|
156
155
|
const fields = ent.fields || []
|
|
156
|
+
// Model-driven id key: null when this entity has no id-like field, in
|
|
157
|
+
// which case load/remove match on no argument and update omits the id.
|
|
158
|
+
const idF = entityIdField(ent)
|
|
157
159
|
|
|
158
160
|
Content(`
|
|
159
161
|
---
|
|
@@ -185,7 +187,7 @@ local ${ent.name} = client:${ent.Name}(nil)
|
|
|
185
187
|
each(fields, (field: any) => {
|
|
186
188
|
const req = field.req ? 'Yes' : 'No'
|
|
187
189
|
const desc = field.short || ''
|
|
188
|
-
Content(`| \`${field.name}\` | \`${field.type
|
|
190
|
+
Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${req} | ${desc} |
|
|
189
191
|
`)
|
|
190
192
|
})
|
|
191
193
|
|
|
@@ -195,15 +197,18 @@ local ${ent.name} = client:${ent.Name}(nil)
|
|
|
195
197
|
// Field operations breakdown
|
|
196
198
|
const hasFieldOps = fields.some((f: any) => f.op && Object.keys(f.op).length > 0)
|
|
197
199
|
if (hasFieldOps) {
|
|
200
|
+
// Only emit columns for operations this entity actually exposes —
|
|
201
|
+
// never advertise a create/update/remove column the entity lacks.
|
|
202
|
+
const opcols = ['load', 'list', 'create', 'update', 'remove']
|
|
203
|
+
.filter((op: string) => opnames.includes(op) && ent.op[op]?.active !== false)
|
|
198
204
|
Content(`### Field Usage by Operation
|
|
199
205
|
|
|
200
|
-
| Field |
|
|
201
|
-
| --- |
|
|
206
|
+
| Field | ${opcols.join(' | ')} |
|
|
207
|
+
| --- | ${opcols.map(() => '---').join(' | ')} |
|
|
202
208
|
`)
|
|
203
209
|
each(fields, (field: any) => {
|
|
204
210
|
const fops = field.op || {}
|
|
205
|
-
const cols =
|
|
206
|
-
if (!opnames.includes(op)) return '-'
|
|
211
|
+
const cols = opcols.map((op: string) => {
|
|
207
212
|
const fop = fops[op]
|
|
208
213
|
if (null == fop) return '-'
|
|
209
214
|
if (fop.active === false) return '-'
|
|
@@ -238,39 +243,39 @@ ${info.desc}
|
|
|
238
243
|
// Show example
|
|
239
244
|
if ('load' === opname || 'remove' === opname) {
|
|
240
245
|
Content(`\`\`\`lua
|
|
241
|
-
local result, err = client:${ent.Name}(
|
|
246
|
+
local result, err = client:${ent.Name}():${opname}(${idF ? `{ ${idF} = "${ent.name}_id" }` : ''})
|
|
242
247
|
\`\`\`
|
|
243
248
|
|
|
244
249
|
`)
|
|
245
250
|
}
|
|
246
251
|
else if ('list' === opname) {
|
|
247
252
|
Content(`\`\`\`lua
|
|
248
|
-
local results, err = client:${ent.Name}(
|
|
253
|
+
local results, err = client:${ent.Name}():list()
|
|
249
254
|
\`\`\`
|
|
250
255
|
|
|
251
256
|
`)
|
|
252
257
|
}
|
|
253
258
|
else if ('create' === opname) {
|
|
254
259
|
Content(`\`\`\`lua
|
|
255
|
-
local result, err = client:${ent.Name}(
|
|
260
|
+
local result, err = client:${ent.Name}():create({
|
|
256
261
|
`)
|
|
257
262
|
each(fields, (field: any) => {
|
|
258
263
|
if ('id' !== field.name && field.req) {
|
|
259
|
-
Content(` ${field.name} = --[[ ${field.type
|
|
264
|
+
Content(` ${field.name} = --[[ ${canonToType(field.type, target.name)} ]],
|
|
260
265
|
`)
|
|
261
266
|
}
|
|
262
267
|
})
|
|
263
|
-
Content(`}
|
|
268
|
+
Content(`})
|
|
264
269
|
\`\`\`
|
|
265
270
|
|
|
266
271
|
`)
|
|
267
272
|
}
|
|
268
273
|
else if ('update' === opname) {
|
|
274
|
+
const updateIdLine = idF ? ` ${idF} = "${ent.name}_id",\n` : ''
|
|
269
275
|
Content(`\`\`\`lua
|
|
270
|
-
local result, err = client:${ent.Name}(
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}, nil)
|
|
276
|
+
local result, err = client:${ent.Name}():update({
|
|
277
|
+
${updateIdLine} -- Fields to update
|
|
278
|
+
})
|
|
274
279
|
\`\`\`
|
|
275
280
|
|
|
276
281
|
`)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, entityIdField } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -15,34 +15,42 @@ const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
|
|
|
15
15
|
|
|
16
16
|
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
17
17
|
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
const authActive = isAuthActive(model)
|
|
19
|
+
const ctor = authActive
|
|
20
|
+
? `sdk.new({\n apikey = os.getenv("${envName(model)}_APIKEY"),\n})`
|
|
21
|
+
: `sdk.new()`
|
|
21
22
|
|
|
22
23
|
Content(`\`\`\`lua
|
|
23
24
|
local sdk = require("${model.name}_sdk")
|
|
24
25
|
|
|
25
|
-
local client =
|
|
26
|
+
local client = ${ctor}
|
|
26
27
|
|
|
27
28
|
`)
|
|
28
29
|
|
|
29
30
|
if (exampleEntity) {
|
|
30
31
|
const eName = nom(exampleEntity, 'Name')
|
|
31
32
|
const opnames = Object.keys(exampleEntity.op || {})
|
|
33
|
+
// Model-driven id key: null when the entity has no id-like field, in which
|
|
34
|
+
// case the load example takes no match argument.
|
|
35
|
+
const idF = entityIdField(exampleEntity)
|
|
36
|
+
|
|
37
|
+
let hasCall = false
|
|
32
38
|
|
|
33
39
|
if (opnames.includes('list')) {
|
|
34
40
|
Content(`-- List all ${eName.toLowerCase()}s
|
|
35
|
-
local ${eName.toLowerCase()}s, err = client:${eName}(
|
|
41
|
+
local ${eName.toLowerCase()}s, err = client:${eName}():list()
|
|
42
|
+
print(${eName.toLowerCase()}s)
|
|
36
43
|
`)
|
|
44
|
+
hasCall = true
|
|
37
45
|
}
|
|
38
46
|
|
|
39
47
|
if (opnames.includes('load')) {
|
|
40
48
|
Content(`
|
|
41
49
|
-- Load a specific ${eName.toLowerCase()}
|
|
42
|
-
local ${eName.toLowerCase()}, err = client:${eName}(
|
|
43
|
-
|
|
44
|
-
)
|
|
50
|
+
local ${eName.toLowerCase()}, err = client:${eName}():load(${idF ? `{ ${idF} = "example_id" }` : ''})
|
|
51
|
+
print(${eName.toLowerCase()})
|
|
45
52
|
`)
|
|
53
|
+
hasCall = true
|
|
46
54
|
}
|
|
47
55
|
}
|
|
48
56
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, canonKey, entityIdField, entityPrimaryOp, opRequestShape } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -8,6 +8,20 @@ import {
|
|
|
8
8
|
} from '@voxgig/apidef'
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
// A type-correct Lua literal for a field's canonical type.
|
|
12
|
+
function luaLit(type: any): string {
|
|
13
|
+
const k = canonKey(type)
|
|
14
|
+
if ('INTEGER' === k || 'NUMBER' === k) return '1'
|
|
15
|
+
if ('BOOLEAN' === k) return 'true'
|
|
16
|
+
if ('ARRAY' === k || 'OBJECT' === k) return '{}'
|
|
17
|
+
return '"example"'
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function luaKey(name: string): string {
|
|
21
|
+
return /^[A-Za-z_]\w*$/.test(name) ? name : `["${name}"]`
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
11
25
|
const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
12
26
|
const { target, ctx$: { model } } = props
|
|
13
27
|
|
|
@@ -16,14 +30,27 @@ const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
|
16
30
|
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
17
31
|
|
|
18
32
|
Content(`\`\`\`lua
|
|
19
|
-
local client = sdk.test(
|
|
33
|
+
local client = sdk.test()
|
|
20
34
|
`)
|
|
21
35
|
|
|
22
36
|
if (exampleEntity) {
|
|
23
37
|
const eName = nom(exampleEntity, 'Name')
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
)
|
|
38
|
+
// Drive the test-mode example off the entity's PRIMARY op (never a hardcoded
|
|
39
|
+
// `load` a create-only entity lacks).
|
|
40
|
+
const idF = entityIdField(exampleEntity)
|
|
41
|
+
const primaryOp = entityPrimaryOp(exampleEntity) || 'load'
|
|
42
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
43
|
+
let arg = ''
|
|
44
|
+
if (isMatchOp) {
|
|
45
|
+
arg = idF ? `{ ${idF} = "test01" }` : ''
|
|
46
|
+
} else if ('create' === primaryOp || 'update' === primaryOp) {
|
|
47
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
48
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
49
|
+
const required = items.filter((it: any) => !it.optional)
|
|
50
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
51
|
+
arg = `{ ${chosen.map((it: any) => `${luaKey(it.name)} = ${luaLit(it.type)}`).join(', ')} }`
|
|
52
|
+
}
|
|
53
|
+
Content(`local result, err = client:${eName}():${primaryOp}(${arg})
|
|
27
54
|
`)
|
|
28
55
|
}
|
|
29
56
|
|
|
@@ -13,6 +13,7 @@ import { cmp, each, Folder, File, Content } from '@voxgig/sdkgen'
|
|
|
13
13
|
|
|
14
14
|
import { TestEntity } from './TestEntity_lua'
|
|
15
15
|
import { TestDirect } from './TestDirect_lua'
|
|
16
|
+
import { ReadmeExamplesTest } from './ReadmeExamplesTest_lua'
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
const Test = cmp(function Test(props: any) {
|
|
@@ -40,6 +41,9 @@ end)
|
|
|
40
41
|
TestEntity({ target, entity })
|
|
41
42
|
TestDirect({ target, entity })
|
|
42
43
|
})
|
|
44
|
+
|
|
45
|
+
// README ```lua example snippets: syntax-check + offline run.
|
|
46
|
+
ReadmeExamplesTest({ target })
|
|
43
47
|
})
|
|
44
48
|
})
|
|
45
49
|
|
|
@@ -5,6 +5,10 @@ local entityCreateOp = {}
|
|
|
5
5
|
|
|
6
6
|
-- EJECT-START
|
|
7
7
|
|
|
8
|
+
---@param reqdata EntityNameCreateData
|
|
9
|
+
---@param ctrl? table
|
|
10
|
+
---@return EntityName
|
|
11
|
+
---@return string? err
|
|
8
12
|
function EntityNameEntity:create(reqdata, ctrl)
|
|
9
13
|
local utility = self._utility
|
|
10
14
|
local ctx = utility.make_context({
|
|
@@ -2,6 +2,10 @@ local entityListOp = {}
|
|
|
2
2
|
|
|
3
3
|
-- EJECT-START
|
|
4
4
|
|
|
5
|
+
---@param reqmatch EntityNameListMatch
|
|
6
|
+
---@param ctrl? table
|
|
7
|
+
---@return EntityName[]
|
|
8
|
+
---@return string? err
|
|
5
9
|
function EntityNameEntity:list(reqmatch, ctrl)
|
|
6
10
|
local utility = self._utility
|
|
7
11
|
local ctx = utility.make_context({
|
|
@@ -5,6 +5,10 @@ local entityLoadOp = {}
|
|
|
5
5
|
|
|
6
6
|
-- EJECT-START
|
|
7
7
|
|
|
8
|
+
---@param reqmatch EntityNameLoadMatch
|
|
9
|
+
---@param ctrl? table
|
|
10
|
+
---@return EntityName
|
|
11
|
+
---@return string? err
|
|
8
12
|
function EntityNameEntity:load(reqmatch, ctrl)
|
|
9
13
|
local utility = self._utility
|
|
10
14
|
local ctx = utility.make_context({
|
|
@@ -5,6 +5,10 @@ local entityRemoveOp = {}
|
|
|
5
5
|
|
|
6
6
|
-- EJECT-START
|
|
7
7
|
|
|
8
|
+
---@param reqmatch EntityNameRemoveMatch
|
|
9
|
+
---@param ctrl? table
|
|
10
|
+
---@return EntityName
|
|
11
|
+
---@return string? err
|
|
8
12
|
function EntityNameEntity:remove(reqmatch, ctrl)
|
|
9
13
|
local utility = self._utility
|
|
10
14
|
local ctx = utility.make_context({
|
|
@@ -5,6 +5,10 @@ local entityUpdateOp = {}
|
|
|
5
5
|
|
|
6
6
|
-- EJECT-START
|
|
7
7
|
|
|
8
|
+
---@param reqdata EntityNameUpdateData
|
|
9
|
+
---@param ctrl? table
|
|
10
|
+
---@return EntityName
|
|
11
|
+
---@return string? err
|
|
8
12
|
function EntityNameEntity:update(reqdata, ctrl)
|
|
9
13
|
local utility = self._utility
|
|
10
14
|
local ctx = utility.make_context({
|