@voxgig/sdkgen 1.2.1 → 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 +11 -5
- 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,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 @@ $client = new ${model.Name}SDK([
|
|
|
25
26
|
|
|
26
27
|
publishedOptions.map((option: any) => {
|
|
27
28
|
if ('apikey' === option.name) {
|
|
28
|
-
Content(` "${option.name}" => getenv("${model
|
|
29
|
+
Content(` "${option.name}" => 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,9 +18,9 @@ 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
|
+
? `new ${model.const.Name}SDK([\n "apikey" => getenv("${envName(model)}_APIKEY"),\n])`
|
|
23
|
+
: `new ${model.const.Name}SDK()`
|
|
24
24
|
|
|
25
25
|
Content(`### 1. Create a client
|
|
26
26
|
|
|
@@ -28,27 +28,46 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
|
|
|
28
28
|
<?php
|
|
29
29
|
require_once '${model.const.Name.toLowerCase()}_sdk.php';
|
|
30
30
|
|
|
31
|
-
$client =
|
|
31
|
+
$client = ${ctor};
|
|
32
32
|
\`\`\`
|
|
33
33
|
|
|
34
34
|
`)
|
|
35
35
|
|
|
36
36
|
if (exampleEntity) {
|
|
37
37
|
const eName = nom(exampleEntity, 'Name')
|
|
38
|
+
const article = /^[aeiou]/i.test(eName) ? "an" : "a"
|
|
38
39
|
const opnames = Object.keys(exampleEntity.op || {})
|
|
40
|
+
// Model-driven id key: `idF` is the MATCH key (null when none). `dataIdF` is
|
|
41
|
+
// the id on the RETURNED record's data type — an entity can key its match on
|
|
42
|
+
// an id it does not carry as data, so `["id"]` off a returned record must be
|
|
43
|
+
// guarded on this, not the match key.
|
|
44
|
+
const idF = entityIdField(exampleEntity)
|
|
45
|
+
const dataIdF = entityDataIdField(exampleEntity)
|
|
46
|
+
|
|
47
|
+
// Model-driven display field: the entity's first non-id string field
|
|
48
|
+
// (falling back to any non-id field), so the list example prints a real
|
|
49
|
+
// column instead of a hardcoded "name" the entity may not have.
|
|
50
|
+
const fields = exampleEntity.fields || []
|
|
51
|
+
const displayField =
|
|
52
|
+
fields.find((f: any) => f && f.name !== 'id' && f.type === '$STRING') ||
|
|
53
|
+
fields.find((f: any) => f && f.name !== 'id') ||
|
|
54
|
+
null
|
|
55
|
+
const idCol = dataIdF ? `$item[${JSON.stringify(dataIdF)}]` : null
|
|
56
|
+
const dispCol = displayField ? `$item[${JSON.stringify(displayField.name)}]` : null
|
|
57
|
+
const itemPrint = [idCol, dispCol].filter(Boolean).join(' . " " . ') || 'json_encode($item)'
|
|
39
58
|
|
|
40
59
|
if (opnames.includes('list')) {
|
|
41
|
-
Content(`### 2. List ${eName.toLowerCase()}
|
|
60
|
+
Content(`### 2. List ${eName.toLowerCase()} records
|
|
42
61
|
|
|
43
62
|
\`\`\`php
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
$d = $item->data_get();
|
|
50
|
-
echo $d["id"] . " " . $d["name"] . "\\n";
|
|
63
|
+
try {
|
|
64
|
+
// list() returns an array of ${eName} records — iterate directly.
|
|
65
|
+
$${eName.toLowerCase()}s = $client->${eName}()->list();
|
|
66
|
+
foreach ($${eName.toLowerCase()}s as $item) {
|
|
67
|
+
echo ${itemPrint} . "\\n";
|
|
51
68
|
}
|
|
69
|
+
} catch (\\Throwable $err) {
|
|
70
|
+
echo "Error: " . $err->getMessage();
|
|
52
71
|
}
|
|
53
72
|
\`\`\`
|
|
54
73
|
|
|
@@ -56,37 +75,76 @@ if (is_array($result)) {
|
|
|
56
75
|
}
|
|
57
76
|
|
|
58
77
|
if (opnames.includes('load')) {
|
|
59
|
-
Content(`### 3. Load
|
|
78
|
+
Content(`### 3. Load ${article} ${eName.toLowerCase()}
|
|
60
79
|
|
|
61
80
|
\`\`\`php
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
81
|
+
try {
|
|
82
|
+
// load() returns the bare ${eName} record (throws on error).
|
|
83
|
+
$${eName.toLowerCase()} = $client->${eName}()->load(${idF ? `["${idF}" => "example_id"]` : ''});
|
|
84
|
+
print_r($${eName.toLowerCase()});
|
|
85
|
+
} catch (\\Throwable $err) {
|
|
86
|
+
echo "Error: " . $err->getMessage();
|
|
87
|
+
}
|
|
65
88
|
\`\`\`
|
|
66
89
|
|
|
67
90
|
`)
|
|
68
91
|
}
|
|
69
92
|
|
|
93
|
+
// Model-driven example fields: derive the create/update body from the op
|
|
94
|
+
// shape (opRequestShape) so the docs reference REAL writable fields, not a
|
|
95
|
+
// hardcoded "name" the entity may not have. Literals are PHP-typed by the
|
|
96
|
+
// field's canonical type.
|
|
97
|
+
const idField = (exampleEntity.id && exampleEntity.id.field) || 'id'
|
|
98
|
+
const phpLit = (type: any): string => {
|
|
99
|
+
const k = canonKey(type)
|
|
100
|
+
if ('INTEGER' === k || 'NUMBER' === k) return '1'
|
|
101
|
+
if ('BOOLEAN' === k) return 'true'
|
|
102
|
+
if ('ARRAY' === k || 'OBJECT' === k) return '[]'
|
|
103
|
+
return '"example"'
|
|
104
|
+
}
|
|
105
|
+
const examplePairs = (opname: string): string[] => {
|
|
106
|
+
const items = opRequestShape(exampleEntity, opname).items
|
|
107
|
+
.filter((it: any) => it.name !== idField && it.name !== 'id')
|
|
108
|
+
const required = items.filter((it: any) => !it.optional)
|
|
109
|
+
const chosen = 'create' === opname
|
|
110
|
+
? (required.length ? required : items.slice(0, 2))
|
|
111
|
+
: items.slice(0, 2)
|
|
112
|
+
return chosen.map((it: any) => `"${it.name}" => ${phpLit(it.type)}`)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// The id VALUE for an update/remove match: off the returned `$created`
|
|
116
|
+
// record only when its data type carries the id AND a create ran, else a
|
|
117
|
+
// type-correct literal.
|
|
118
|
+
const idParamType = (opname: string): any => {
|
|
119
|
+
const it = opRequestShape(exampleEntity, opname).items.find((x: any) => x.name === idF)
|
|
120
|
+
return it && it.type
|
|
121
|
+
}
|
|
122
|
+
const idValueFor = (opname: string): string => (null != dataIdF && opnames.includes('create'))
|
|
123
|
+
? `$created["${dataIdF}"]`
|
|
124
|
+
: phpLit(idParamType(opname))
|
|
125
|
+
|
|
70
126
|
if (opnames.includes('create') || opnames.includes('update') || opnames.includes('remove')) {
|
|
71
127
|
Content(`### 4. Create, update, and remove
|
|
72
128
|
|
|
73
129
|
\`\`\`php
|
|
74
130
|
`)
|
|
75
131
|
if (opnames.includes('create')) {
|
|
76
|
-
Content(`//
|
|
77
|
-
|
|
132
|
+
Content(`// create() returns the bare created ${eName} record.
|
|
133
|
+
$created = $client->${eName}()->create([${examplePairs('create').join(', ')}]);
|
|
78
134
|
|
|
79
135
|
`)
|
|
80
136
|
}
|
|
81
137
|
if (opnames.includes('update')) {
|
|
82
|
-
|
|
83
|
-
|
|
138
|
+
const updatePairs = (idF ? [`"${idF}" => ${idValueFor('update')}`] : []).concat(examplePairs('update'))
|
|
139
|
+
const fromCreated = null != dataIdF && opnames.includes('create')
|
|
140
|
+
Content(`// Update${fromCreated ? ` — index the bare record directly ($created["${dataIdF}"]).` : ''}
|
|
141
|
+
$client->${eName}()->update([${updatePairs.join(', ')}]);
|
|
84
142
|
|
|
85
143
|
`)
|
|
86
144
|
}
|
|
87
145
|
if (opnames.includes('remove')) {
|
|
88
146
|
Content(`// Remove
|
|
89
|
-
$client->${eName}(
|
|
147
|
+
$client->${eName}()->remove(${idF ? `["${idF}" => ${idValueFor('remove')}]` : ''});
|
|
90
148
|
`)
|
|
91
149
|
}
|
|
92
150
|
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,
|
|
@@ -9,29 +9,29 @@ import {
|
|
|
9
9
|
|
|
10
10
|
const OP_SIGNATURES: Record<string, { sig: string, returns: string, desc: string }> = {
|
|
11
11
|
load: {
|
|
12
|
-
sig: 'load(array $reqmatch, ?array $ctrl = null):
|
|
13
|
-
returns: '
|
|
14
|
-
desc: 'Load a single entity matching the given criteria.',
|
|
12
|
+
sig: 'load(array $reqmatch, ?array $ctrl = null): mixed',
|
|
13
|
+
returns: 'mixed — the result data; throws on error',
|
|
14
|
+
desc: 'Load a single entity matching the given criteria. Throws on error.',
|
|
15
15
|
},
|
|
16
16
|
list: {
|
|
17
|
-
sig: 'list(array $reqmatch, ?array $ctrl = null):
|
|
18
|
-
returns: 'array
|
|
19
|
-
desc: 'List entities matching the given criteria. Returns an array.',
|
|
17
|
+
sig: 'list(?array $reqmatch = null, ?array $ctrl = null): mixed',
|
|
18
|
+
returns: 'array — the list of results; throws on error',
|
|
19
|
+
desc: 'List entities matching the given criteria (call with no argument to list all). Returns an array. Throws on error.',
|
|
20
20
|
},
|
|
21
21
|
create: {
|
|
22
|
-
sig: 'create(array $reqdata, ?array $ctrl = null):
|
|
23
|
-
returns: '
|
|
24
|
-
desc: 'Create a new entity with the given data.',
|
|
22
|
+
sig: 'create(array $reqdata, ?array $ctrl = null): mixed',
|
|
23
|
+
returns: 'mixed — the result data; throws on error',
|
|
24
|
+
desc: 'Create a new entity with the given data. Throws on error.',
|
|
25
25
|
},
|
|
26
26
|
update: {
|
|
27
|
-
sig: 'update(array $reqdata, ?array $ctrl = null):
|
|
28
|
-
returns: '
|
|
29
|
-
desc: 'Update an existing entity. The data must include the entity `id`.',
|
|
27
|
+
sig: 'update(array $reqdata, ?array $ctrl = null): mixed',
|
|
28
|
+
returns: 'mixed — the result data; throws on error',
|
|
29
|
+
desc: 'Update an existing entity. The data must include the entity `id`. Throws on error.',
|
|
30
30
|
},
|
|
31
31
|
remove: {
|
|
32
|
-
sig: 'remove(array $reqmatch, ?array $ctrl = null):
|
|
33
|
-
returns: '
|
|
34
|
-
desc: 'Remove the entity matching the given criteria.',
|
|
32
|
+
sig: 'remove(array $reqmatch, ?array $ctrl = null): mixed',
|
|
33
|
+
returns: 'mixed — the result data; throws on error',
|
|
34
|
+
desc: 'Remove the entity matching the given criteria. Throws on error.',
|
|
35
35
|
},
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -60,7 +60,7 @@ Complete API reference for the ${model.Name} ${target.title} SDK.
|
|
|
60
60
|
`)
|
|
61
61
|
|
|
62
62
|
Content(`\`\`\`php
|
|
63
|
-
require_once __DIR__ . '/${model.
|
|
63
|
+
require_once __DIR__ . '/${model.const.Name.toLowerCase()}_sdk.php';
|
|
64
64
|
|
|
65
65
|
$client = new ${model.const.Name}SDK($options);
|
|
66
66
|
\`\`\`
|
|
@@ -72,8 +72,7 @@ Create a new SDK client instance.
|
|
|
72
72
|
| Name | Type | Description |
|
|
73
73
|
| --- | --- | --- |
|
|
74
74
|
| \`$options\` | \`array\` | SDK configuration options. |
|
|
75
|
-
| \`$options["apikey"]\` | \`string\` | API key for authentication. |
|
|
76
|
-
| \`$options["base"]\` | \`string\` | Base URL for API requests. |
|
|
75
|
+
${isAuthActive(model) ? '| \`$options["apikey"]\` | \`string\` | API key for authentication. |\n' : ''}| \`$options["base"]\` | \`string\` | Base URL for API requests. |
|
|
77
76
|
| \`$options["prefix"]\` | \`string\` | URL prefix appended after base. |
|
|
78
77
|
| \`$options["suffix"]\` | \`string\` | URL suffix appended after path. |
|
|
79
78
|
| \`$options["headers"]\` | \`array\` | Custom headers for all requests. |
|
|
@@ -115,17 +114,20 @@ Create a new \`${ent.Name}Entity\` instance. Pass \`null\` for no initial data.
|
|
|
115
114
|
})
|
|
116
115
|
|
|
117
116
|
|
|
118
|
-
Content(`#### \`
|
|
117
|
+
Content(`#### \`options_map(): array\`
|
|
119
118
|
|
|
120
119
|
Return a deep copy of the current SDK options.
|
|
121
120
|
|
|
122
|
-
#### \`
|
|
121
|
+
#### \`get_utility(): ${model.const.Name}Utility\`
|
|
123
122
|
|
|
124
123
|
Return a copy of the SDK utility object.
|
|
125
124
|
|
|
126
125
|
#### \`direct(array $fetchargs = []): array\`
|
|
127
126
|
|
|
128
|
-
Make a direct HTTP request to any API endpoint.
|
|
127
|
+
Make a direct HTTP request to any API endpoint. This is the raw-HTTP escape
|
|
128
|
+
hatch: it does **not** throw. It returns a result array
|
|
129
|
+
\`["ok" => bool, "status" => int, "headers" => array, "data" => mixed]\`, or
|
|
130
|
+
\`["ok" => false, "err" => \\Exception]\` on failure. Branch on \`$result["ok"]\`.
|
|
129
131
|
|
|
130
132
|
**Parameters:**
|
|
131
133
|
|
|
@@ -139,11 +141,12 @@ Make a direct HTTP request to any API endpoint. Returns \`[$result, $err]\`.
|
|
|
139
141
|
| \`$fetchargs["body"]\` | \`mixed\` | Request body (arrays are JSON-serialized). |
|
|
140
142
|
| \`$fetchargs["ctrl"]\` | \`array\` | Control options. |
|
|
141
143
|
|
|
142
|
-
**Returns:** \`array
|
|
144
|
+
**Returns:** \`array\` — the result dict (see above); never throws.
|
|
143
145
|
|
|
144
|
-
#### \`prepare(array $fetchargs = []):
|
|
146
|
+
#### \`prepare(array $fetchargs = []): mixed\`
|
|
145
147
|
|
|
146
|
-
Prepare a fetch definition without sending the request. Returns
|
|
148
|
+
Prepare a fetch definition without sending the request. Returns the
|
|
149
|
+
\`$fetchdef\` array. Throws on error.
|
|
147
150
|
|
|
148
151
|
`)
|
|
149
152
|
|
|
@@ -152,6 +155,9 @@ Prepare a fetch definition without sending the request. Returns \`[$fetchdef, $e
|
|
|
152
155
|
publishedEntities.map((ent: any) => {
|
|
153
156
|
const opnames = Object.keys(ent.op || {})
|
|
154
157
|
const fields = ent.fields || []
|
|
158
|
+
// Model-driven id key: null when this entity has no id-like field, in
|
|
159
|
+
// which case load/remove match on no argument and update omits the id.
|
|
160
|
+
const idF = entityIdField(ent)
|
|
155
161
|
|
|
156
162
|
Content(`
|
|
157
163
|
---
|
|
@@ -183,7 +189,7 @@ $${ent.name} = $client->${ent.Name}();
|
|
|
183
189
|
each(fields, (field: any) => {
|
|
184
190
|
const req = field.req ? 'Yes' : 'No'
|
|
185
191
|
const desc = field.short || ''
|
|
186
|
-
Content(`| \`${field.name}\` | \`${field.type
|
|
192
|
+
Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${req} | ${desc} |
|
|
187
193
|
`)
|
|
188
194
|
})
|
|
189
195
|
|
|
@@ -193,15 +199,18 @@ $${ent.name} = $client->${ent.Name}();
|
|
|
193
199
|
// Field operations breakdown
|
|
194
200
|
const hasFieldOps = fields.some((f: any) => f.op && Object.keys(f.op).length > 0)
|
|
195
201
|
if (hasFieldOps) {
|
|
202
|
+
// Only emit columns for operations this entity actually exposes —
|
|
203
|
+
// never advertise a create/update/remove column the entity lacks.
|
|
204
|
+
const opcols = ['load', 'list', 'create', 'update', 'remove']
|
|
205
|
+
.filter((op: string) => opnames.includes(op) && ent.op[op]?.active !== false)
|
|
196
206
|
Content(`### Field Usage by Operation
|
|
197
207
|
|
|
198
|
-
| Field |
|
|
199
|
-
| --- |
|
|
208
|
+
| Field | ${opcols.join(' | ')} |
|
|
209
|
+
| --- | ${opcols.map(() => '---').join(' | ')} |
|
|
200
210
|
`)
|
|
201
211
|
each(fields, (field: any) => {
|
|
202
212
|
const fops = field.op || {}
|
|
203
|
-
const cols =
|
|
204
|
-
if (!opnames.includes(op)) return '-'
|
|
213
|
+
const cols = opcols.map((op: string) => {
|
|
205
214
|
const fop = fops[op]
|
|
206
215
|
if (null == fop) return '-'
|
|
207
216
|
if (fop.active === false) return '-'
|
|
@@ -236,25 +245,25 @@ ${info.desc}
|
|
|
236
245
|
// Show example
|
|
237
246
|
if ('load' === opname || 'remove' === opname) {
|
|
238
247
|
Content(`\`\`\`php
|
|
239
|
-
|
|
248
|
+
$result = $client->${ent.Name}()->${opname}(${idF ? `["${idF}" => "${ent.name}_id"]` : ''});
|
|
240
249
|
\`\`\`
|
|
241
250
|
|
|
242
251
|
`)
|
|
243
252
|
}
|
|
244
253
|
else if ('list' === opname) {
|
|
245
254
|
Content(`\`\`\`php
|
|
246
|
-
|
|
255
|
+
$results = $client->${ent.Name}()->list();
|
|
247
256
|
\`\`\`
|
|
248
257
|
|
|
249
258
|
`)
|
|
250
259
|
}
|
|
251
260
|
else if ('create' === opname) {
|
|
252
261
|
Content(`\`\`\`php
|
|
253
|
-
|
|
262
|
+
$result = $client->${ent.Name}()->create([
|
|
254
263
|
`)
|
|
255
264
|
each(fields, (field: any) => {
|
|
256
265
|
if ('id' !== field.name && field.req) {
|
|
257
|
-
Content(` "${field.name}" =>
|
|
266
|
+
Content(` "${field.name}" => null, // ${canonToType(field.type, target.name)}
|
|
258
267
|
`)
|
|
259
268
|
}
|
|
260
269
|
})
|
|
@@ -264,10 +273,10 @@ ${info.desc}
|
|
|
264
273
|
`)
|
|
265
274
|
}
|
|
266
275
|
else if ('update' === opname) {
|
|
276
|
+
const updateIdLine = idF ? ` "${idF}" => "${ent.name}_id",\n` : ''
|
|
267
277
|
Content(`\`\`\`php
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
// Fields to update
|
|
278
|
+
$result = $client->${ent.Name}()->update([
|
|
279
|
+
${updateIdLine} // Fields to update
|
|
271
280
|
]);
|
|
272
281
|
\`\`\`
|
|
273
282
|
|
|
@@ -280,19 +289,19 @@ ${info.desc}
|
|
|
280
289
|
// Common methods
|
|
281
290
|
Content(`### Common Methods
|
|
282
291
|
|
|
283
|
-
#### \`
|
|
292
|
+
#### \`data_get(): array\`
|
|
284
293
|
|
|
285
294
|
Get the entity data. Returns a copy of the current data.
|
|
286
295
|
|
|
287
|
-
#### \`
|
|
296
|
+
#### \`data_set($data): void\`
|
|
288
297
|
|
|
289
298
|
Set the entity data.
|
|
290
299
|
|
|
291
|
-
#### \`
|
|
300
|
+
#### \`match_get(): array\`
|
|
292
301
|
|
|
293
302
|
Get the entity match criteria.
|
|
294
303
|
|
|
295
|
-
#### \`
|
|
304
|
+
#### \`match_set($match): void\`
|
|
296
305
|
|
|
297
306
|
Set the entity match criteria.
|
|
298
307
|
|
|
@@ -301,7 +310,7 @@ Set the entity match criteria.
|
|
|
301
310
|
Create a new \`${ent.Name}Entity\` instance with the same client and
|
|
302
311
|
options.
|
|
303
312
|
|
|
304
|
-
#### \`
|
|
313
|
+
#### \`get_name(): string\`
|
|
305
314
|
|
|
306
315
|
Return the entity name.
|
|
307
316
|
|
|
@@ -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,35 +15,43 @@ 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
|
+
? `new ${model.const.Name}SDK([\n "apikey" => getenv("${envName(model)}_APIKEY"),\n])`
|
|
21
|
+
: `new ${model.const.Name}SDK()`
|
|
21
22
|
|
|
22
23
|
Content(`\`\`\`php
|
|
23
24
|
<?php
|
|
24
25
|
require_once '${model.const.Name.toLowerCase()}_sdk.php';
|
|
25
26
|
|
|
26
|
-
$client =
|
|
27
|
+
$client = ${ctor};
|
|
27
28
|
|
|
28
29
|
`)
|
|
29
30
|
|
|
30
31
|
if (exampleEntity) {
|
|
31
32
|
const eName = nom(exampleEntity, 'Name')
|
|
32
33
|
const opnames = Object.keys(exampleEntity.op || {})
|
|
34
|
+
// Model-driven id key: null when the entity has no id-like field, in which
|
|
35
|
+
// case the load example takes no match argument.
|
|
36
|
+
const idF = entityIdField(exampleEntity)
|
|
37
|
+
|
|
38
|
+
let hasCall = false
|
|
33
39
|
|
|
34
40
|
if (opnames.includes('list')) {
|
|
35
|
-
Content(`// List all ${eName.toLowerCase()}s
|
|
36
|
-
|
|
41
|
+
Content(`// List all ${eName.toLowerCase()}s (returns an array; throws on error)
|
|
42
|
+
$${eName.toLowerCase()}s = $client->${eName}()->list();
|
|
43
|
+
print_r($${eName.toLowerCase()}s);
|
|
37
44
|
`)
|
|
45
|
+
hasCall = true
|
|
38
46
|
}
|
|
39
47
|
|
|
40
48
|
if (opnames.includes('load')) {
|
|
41
49
|
Content(`
|
|
42
|
-
// Load a specific ${eName.toLowerCase()}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
);
|
|
50
|
+
// Load a specific ${eName.toLowerCase()} (returns the bare record; throws on error)
|
|
51
|
+
$${eName.toLowerCase()} = $client->${eName}()->load(${idF ? `["${idF}" => "example_id"]` : ''});
|
|
52
|
+
print_r($${eName.toLowerCase()});
|
|
46
53
|
`)
|
|
54
|
+
hasCall = true
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
|
|
@@ -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,16 @@ import {
|
|
|
8
8
|
} from '@voxgig/apidef'
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
// A type-correct PHP literal for a field's canonical type.
|
|
12
|
+
function phpLit(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
|
+
|
|
11
21
|
const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
12
22
|
const { target, ctx$: { model } } = props
|
|
13
23
|
|
|
@@ -15,20 +25,40 @@ const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
|
15
25
|
|
|
16
26
|
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
17
27
|
|
|
18
|
-
Content(`\`\`\`php
|
|
19
|
-
$client = ${model.const.Name}SDK::test(null, null);
|
|
20
|
-
`)
|
|
21
|
-
|
|
22
28
|
if (exampleEntity) {
|
|
23
29
|
const eName = nom(exampleEntity, 'Name')
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
)
|
|
30
|
+
const ename = eName.toLowerCase()
|
|
31
|
+
// Model-driven id key: null when the entity has no id-like field.
|
|
32
|
+
const idF = entityIdField(exampleEntity)
|
|
33
|
+
// Drive the test-mode example off the entity's PRIMARY op (never a hardcoded
|
|
34
|
+
// `load` a create-only entity lacks).
|
|
35
|
+
const primaryOp = entityPrimaryOp(exampleEntity) || 'load'
|
|
36
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
37
|
+
const recBody = idF ? `["${idF}" => "test01"]` : '[]'
|
|
38
|
+
let callArg = ''
|
|
39
|
+
if (isMatchOp) {
|
|
40
|
+
callArg = idF ? `["${idF}" => "test01"]` : ''
|
|
41
|
+
} else if ('create' === primaryOp || 'update' === primaryOp) {
|
|
42
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
43
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
44
|
+
const required = items.filter((it: any) => !it.optional)
|
|
45
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
46
|
+
callArg = `[${chosen.map((it: any) => `"${it.name}" => ${phpLit(it.type)}`).join(', ')}]`
|
|
47
|
+
}
|
|
48
|
+
Content(`\`\`\`php
|
|
49
|
+
// Seed fixture data so offline calls resolve without a live server.
|
|
50
|
+
$client = ${model.const.Name}SDK::test([
|
|
51
|
+
"entity" => ["${ename}" => ["test01" => ${recBody}]],
|
|
52
|
+
]);
|
|
53
|
+
$${ename} = $client->${eName}()->${primaryOp}(${callArg});
|
|
54
|
+
\`\`\`
|
|
27
55
|
`)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
56
|
+
} else {
|
|
57
|
+
Content(`\`\`\`php
|
|
58
|
+
$client = ${model.const.Name}SDK::test();
|
|
59
|
+
\`\`\`
|
|
31
60
|
`)
|
|
61
|
+
}
|
|
32
62
|
|
|
33
63
|
})
|
|
34
64
|
|
|
@@ -190,7 +190,7 @@ ${listSkipBlock} $client = $setup["client"];
|
|
|
190
190
|
`)
|
|
191
191
|
}
|
|
192
192
|
Content(`
|
|
193
|
-
|
|
193
|
+
$result = $client->direct([
|
|
194
194
|
"path" => "${listPath}",
|
|
195
195
|
"method" => "GET",
|
|
196
196
|
"params" => $params,
|
|
@@ -198,7 +198,7 @@ ${listSkipBlock} $client = $setup["client"];
|
|
|
198
198
|
`)
|
|
199
199
|
} else {
|
|
200
200
|
Content(`
|
|
201
|
-
|
|
201
|
+
$result = $client->direct([
|
|
202
202
|
"path" => "${listPath}",
|
|
203
203
|
"method" => "GET",
|
|
204
204
|
"params" => [],
|
|
@@ -210,8 +210,8 @@ ${listSkipBlock} $client = $setup["client"];
|
|
|
210
210
|
// Live mode is lenient: synthetic IDs frequently 4xx and the
|
|
211
211
|
// list-response shape varies wildly across public APIs. Skip
|
|
212
212
|
// rather than fail when the call doesn't return a usable list.
|
|
213
|
-
if ($err
|
|
214
|
-
$this->markTestSkipped("list call failed (likely synthetic IDs against live API): " . (string)$err);
|
|
213
|
+
if (!empty($result["err"])) {
|
|
214
|
+
$this->markTestSkipped("list call failed (likely synthetic IDs against live API): " . (string)$result["err"]);
|
|
215
215
|
return;
|
|
216
216
|
}
|
|
217
217
|
if (empty($result["ok"])) {
|
|
@@ -224,7 +224,7 @@ ${listSkipBlock} $client = $setup["client"];
|
|
|
224
224
|
return;
|
|
225
225
|
}
|
|
226
226
|
} else {
|
|
227
|
-
$this->
|
|
227
|
+
$this->assertArrayNotHasKey("err", $result);
|
|
228
228
|
$this->assertTrue($result["ok"]);
|
|
229
229
|
$this->assertEquals(200, Helpers::to_int($result["status"]));
|
|
230
230
|
$this->assertIsArray($result["data"]);
|
|
@@ -300,7 +300,7 @@ ${loadLiveQueryLines}
|
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
Content(`
|
|
303
|
-
|
|
303
|
+
$result = $client->direct([
|
|
304
304
|
"path" => "${loadPath}",
|
|
305
305
|
"method" => "GET",
|
|
306
306
|
`)
|
|
@@ -317,8 +317,8 @@ ${loadLiveQueryLines}
|
|
|
317
317
|
// Live mode is lenient: synthetic IDs frequently 4xx. Skip
|
|
318
318
|
// rather than fail when the load endpoint isn't reachable
|
|
319
319
|
// with the IDs we can construct from setup.idmap.
|
|
320
|
-
if ($err
|
|
321
|
-
$this->markTestSkipped("load call failed (likely synthetic IDs against live API): " . (string)$err);
|
|
320
|
+
if (!empty($result["err"])) {
|
|
321
|
+
$this->markTestSkipped("load call failed (likely synthetic IDs against live API): " . (string)$result["err"]);
|
|
322
322
|
return;
|
|
323
323
|
}
|
|
324
324
|
if (empty($result["ok"])) {
|
|
@@ -331,7 +331,7 @@ ${loadLiveQueryLines}
|
|
|
331
331
|
return;
|
|
332
332
|
}
|
|
333
333
|
} else {
|
|
334
|
-
$this->
|
|
334
|
+
$this->assertArrayNotHasKey("err", $result);
|
|
335
335
|
$this->assertTrue($result["ok"]);
|
|
336
336
|
$this->assertEquals(200, Helpers::to_int($result["status"]));
|
|
337
337
|
$this->assertNotNull($result["data"]);
|