@voxgig/sdkgen 1.3.14 → 1.3.17
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 +1 -1
- package/dist/action/action.js.map +1 -1
- package/dist/action/feature.js.map +1 -1
- package/dist/action/target.js.map +1 -1
- package/dist/cmp/AgentGuide.js.map +1 -1
- package/dist/cmp/AgentGuideContent.js.map +1 -1
- package/dist/cmp/AgentGuideFeature.js.map +1 -1
- package/dist/cmp/AgentGuideTop.js.map +1 -1
- package/dist/cmp/Changelog.js.map +1 -1
- package/dist/cmp/Deploy.js.map +1 -1
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/FeatureHook.js.map +1 -1
- package/dist/cmp/License.js.map +1 -1
- package/dist/cmp/Main.js.map +1 -1
- package/dist/cmp/Readme.js.map +1 -1
- package/dist/cmp/ReadmeEntity.js.map +1 -1
- package/dist/cmp/ReadmeErrors.js +1 -1
- package/dist/cmp/ReadmeErrors.js.map +1 -1
- package/dist/cmp/ReadmeExplanation.js +2 -2
- package/dist/cmp/ReadmeExplanation.js.map +1 -1
- package/dist/cmp/ReadmeHowto.js.map +1 -1
- package/dist/cmp/ReadmeInstall.js.map +1 -1
- package/dist/cmp/ReadmeIntro.js.map +1 -1
- package/dist/cmp/ReadmeModel.js.map +1 -1
- package/dist/cmp/ReadmeOptions.js.map +1 -1
- package/dist/cmp/ReadmeQuick.js.map +1 -1
- package/dist/cmp/ReadmeRef.js.map +1 -1
- package/dist/cmp/ReadmeTop.js +1 -1
- package/dist/cmp/ReadmeTop.js.map +1 -1
- package/dist/cmp/Security.js.map +1 -1
- package/dist/cmp/Test.js.map +1 -1
- package/dist/helpers/buildIdNames.js.map +1 -1
- package/dist/helpers/canonType.d.ts +3 -2
- package/dist/helpers/canonType.js +107 -24
- package/dist/helpers/canonType.js.map +1 -1
- package/dist/helpers/collectDeps.js.map +1 -1
- package/dist/helpers/getMatchEntries.js.map +1 -1
- package/dist/helpers/naming.d.ts +5 -1
- package/dist/helpers/naming.js +37 -0
- package/dist/helpers/naming.js.map +1 -1
- package/dist/helpers/opExample.d.ts +1 -1
- package/dist/helpers/opExample.js +37 -20
- package/dist/helpers/opExample.js.map +1 -1
- package/dist/helpers/opShape.d.ts +3 -1
- package/dist/helpers/opShape.js +91 -3
- package/dist/helpers/opShape.js.map +1 -1
- package/dist/helpers/packageMeta.js.map +1 -1
- package/dist/sdkgen.d.ts +3 -3
- package/dist/sdkgen.js +7 -1
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utility.js.map +1 -1
- package/package.json +7 -6
- package/project/.sdk/model/target/haskell.aontu +6 -3
- package/project/.sdk/model/target/zig.aontu +12 -2
- package/project/.sdk/src/cmp/c/Config_c.ts +16 -4
- package/project/.sdk/src/cmp/c/EntityTypes_c.ts +168 -0
- package/project/.sdk/src/cmp/c/Main_c.ts +4 -0
- package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +192 -0
- package/project/.sdk/src/cmp/c/ReadmeExamplesTest_c.ts +152 -0
- package/project/.sdk/src/cmp/c/ReadmeExplanation_c.ts +55 -0
- package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +168 -0
- package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +52 -0
- package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +67 -0
- package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +151 -0
- package/project/.sdk/src/cmp/c/ReadmeOptions_c.ts +65 -0
- package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +225 -0
- package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +398 -0
- package/project/.sdk/src/cmp/c/ReadmeTopHowto_c.ts +24 -0
- package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +104 -0
- package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +86 -0
- package/project/.sdk/src/cmp/c/TestEntity_c.ts +10 -0
- package/project/.sdk/src/cmp/c/Test_c.ts +4 -0
- package/project/.sdk/src/cmp/c/utility_c.ts +8 -2
- package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +182 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +54 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +44 -0
- package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +144 -0
- package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +51 -0
- package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +66 -0
- package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +156 -0
- package/project/.sdk/src/cmp/clojure/ReadmeOptions_clojure.ts +61 -0
- package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +210 -0
- package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +409 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopHowto_clojure.ts +24 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +98 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +78 -0
- package/project/.sdk/src/cmp/clojure/TestDirect_clojure.ts +58 -0
- package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +79 -0
- package/project/.sdk/src/cmp/clojure/Test_clojure.ts +21 -65
- package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +174 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +5 -0
- package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +170 -0
- package/project/.sdk/src/cmp/cpp/ReadmeExplanation_cpp.ts +45 -0
- package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +139 -0
- package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +42 -0
- package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +69 -0
- package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +155 -0
- package/project/.sdk/src/cmp/cpp/ReadmeOptions_cpp.ts +62 -0
- package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +234 -0
- package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +387 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopHowto_cpp.ts +24 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +95 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +70 -0
- package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +5 -1
- package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +196 -0
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
- package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +198 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExplanation_csharp.ts +42 -0
- package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +168 -0
- package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +41 -0
- package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +65 -0
- package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +148 -0
- package/project/.sdk/src/cmp/csharp/ReadmeOptions_csharp.ts +60 -0
- package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +219 -0
- package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +390 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopHowto_csharp.ts +25 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +92 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +77 -0
- package/project/.sdk/src/cmp/csharp/Test_csharp.ts +4 -0
- package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -29
- package/project/.sdk/src/cmp/dart/Entity_dart.ts +8 -0
- package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +166 -0
- package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +238 -0
- package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +53 -0
- package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +151 -0
- package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +59 -0
- package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +65 -0
- package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +151 -0
- package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +63 -0
- package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +214 -0
- package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +381 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +24 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +95 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +78 -0
- package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +52 -0
- package/project/.sdk/src/cmp/dart/Test_dart.ts +6 -0
- package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +1 -3
- package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +1 -40
- package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +3 -3
- package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +165 -0
- package/project/.sdk/src/cmp/elixir/Main_elixir.ts +4 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
- package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +163 -0
- package/project/.sdk/src/cmp/elixir/ReadmeExamplesTest_elixir.ts +126 -0
- package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +55 -0
- package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +149 -0
- package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +67 -0
- package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +66 -0
- package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +150 -0
- package/project/.sdk/src/cmp/elixir/ReadmeOptions_elixir.ts +62 -0
- package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +198 -0
- package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +333 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopHowto_elixir.ts +26 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +79 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +68 -0
- package/project/.sdk/src/cmp/elixir/Test_elixir.ts +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/utility_elixir.ts +32 -0
- package/project/.sdk/src/cmp/go/EntityTypes_go.ts +12 -3
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +10 -3
- package/project/.sdk/src/cmp/go/utility_go.ts +3 -2
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +240 -43
- package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +191 -30
- package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +125 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExplanation_haskell.ts +48 -0
- package/project/.sdk/src/cmp/haskell/ReadmeHowto_haskell.ts +168 -0
- package/project/.sdk/src/cmp/haskell/ReadmeInstall_haskell.ts +51 -0
- package/project/.sdk/src/cmp/haskell/ReadmeIntro_haskell.ts +67 -0
- package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +160 -0
- package/project/.sdk/src/cmp/haskell/ReadmeOptions_haskell.ts +74 -0
- package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +237 -0
- package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +405 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopHowto_haskell.ts +31 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +104 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopTest_haskell.ts +80 -0
- package/project/.sdk/src/cmp/haskell/Test_haskell.ts +27 -2
- package/project/.sdk/src/cmp/java/EntityTypes_java.ts +207 -0
- package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
- package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
- package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +186 -0
- package/project/.sdk/src/cmp/java/ReadmeExplanation_java.ts +46 -0
- package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +156 -0
- package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +52 -0
- package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +66 -0
- package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +150 -0
- package/project/.sdk/src/cmp/java/ReadmeOptions_java.ts +61 -0
- package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +230 -0
- package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +388 -0
- package/project/.sdk/src/cmp/java/ReadmeTopHowto_java.ts +23 -0
- package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +103 -0
- package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +77 -0
- package/project/.sdk/src/cmp/java/Test_java.ts +4 -0
- package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -8
- package/project/.sdk/src/cmp/js/MainEntity_js.ts +4 -2
- package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +13 -4
- package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +5 -5
- package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +4 -4
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +6 -5
- package/project/.sdk/src/cmp/js/TestEntity_js.ts +7 -2
- package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +0 -31
- package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +201 -0
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +173 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExplanation_kotlin.ts +47 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +154 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +50 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +66 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +150 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeOptions_kotlin.ts +61 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +230 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +387 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopHowto_kotlin.ts +23 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +104 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +77 -0
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +4 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -5
- package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
- package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -1
- package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +7 -2
- package/project/.sdk/src/cmp/lua/Test_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +2 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +180 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeExamplesTest_ocaml.ts +111 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +46 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +147 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +44 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +68 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +155 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeOptions_ocaml.ts +59 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +205 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +402 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopHowto_ocaml.ts +25 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +86 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +79 -0
- package/project/.sdk/src/cmp/ocaml/Test_ocaml.ts +4 -0
- package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +181 -0
- package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +354 -0
- package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +43 -0
- package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +149 -0
- package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +47 -0
- package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +66 -0
- package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +150 -0
- package/project/.sdk/src/cmp/perl/ReadmeOptions_perl.ts +59 -0
- package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +216 -0
- package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +399 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopHowto_perl.ts +24 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +91 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +83 -0
- package/project/.sdk/src/cmp/perl/Test_perl.ts +4 -0
- package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -6
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +7 -2
- package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -7
- package/project/.sdk/src/cmp/py/Entity_py.ts +2 -10
- package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +8 -3
- package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +3 -3
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +2 -2
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +7 -2
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +19 -5
- package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +8 -3
- package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +7 -2
- package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +4 -0
- package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +152 -0
- package/project/.sdk/src/cmp/rust/Entity_rust.ts +1 -1
- package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
- package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
- package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +132 -0
- package/project/.sdk/src/cmp/rust/ReadmeExplanation_rust.ts +44 -0
- package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +142 -0
- package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +49 -0
- package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +66 -0
- package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +153 -0
- package/project/.sdk/src/cmp/rust/ReadmeOptions_rust.ts +60 -0
- package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +212 -0
- package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +384 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopHowto_rust.ts +24 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +95 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +81 -0
- package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +10 -0
- package/project/.sdk/src/cmp/rust/Test_rust.ts +4 -0
- package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +202 -0
- package/project/.sdk/src/cmp/scala/Main_scala.ts +6 -0
- package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +175 -0
- package/project/.sdk/src/cmp/scala/ReadmeExamplesTest_scala.ts +163 -0
- package/project/.sdk/src/cmp/scala/ReadmeExplanation_scala.ts +49 -0
- package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +155 -0
- package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +58 -0
- package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +66 -0
- package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +150 -0
- package/project/.sdk/src/cmp/scala/ReadmeOptions_scala.ts +61 -0
- package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +230 -0
- package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +388 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopHowto_scala.ts +23 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +104 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +77 -0
- package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +38 -10
- package/project/.sdk/src/cmp/scala/Test_scala.ts +8 -0
- package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +152 -0
- package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
- package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
- package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +170 -0
- package/project/.sdk/src/cmp/swift/ReadmeExplanation_swift.ts +49 -0
- package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +159 -0
- package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +58 -0
- package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +64 -0
- package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +149 -0
- package/project/.sdk/src/cmp/swift/ReadmeOptions_swift.ts +62 -0
- package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +232 -0
- package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +387 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopHowto_swift.ts +24 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopQuick_swift.ts +105 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +77 -0
- package/project/.sdk/src/cmp/swift/Test_swift.ts +4 -0
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -5
- package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +4 -2
- package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +14 -4
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +29 -11
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +5 -5
- package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +13 -11
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +18 -2
- package/project/.sdk/src/cmp/zig/Config_zig.ts +22 -4
- package/project/.sdk/src/cmp/zig/Entity_zig.ts +1 -1
- package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
- package/project/.sdk/src/cmp/zig/Package_zig.ts +53 -0
- package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +188 -0
- package/project/.sdk/src/cmp/zig/ReadmeExamplesTest_zig.ts +58 -0
- package/project/.sdk/src/cmp/zig/ReadmeExplanation_zig.ts +45 -0
- package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +143 -0
- package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +54 -0
- package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +66 -0
- package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +152 -0
- package/project/.sdk/src/cmp/zig/ReadmeOptions_zig.ts +60 -0
- package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +211 -0
- package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +400 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopHowto_zig.ts +24 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +96 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +82 -0
- package/project/.sdk/src/cmp/zig/TestDirect_zig.ts +66 -0
- package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +79 -0
- package/project/.sdk/src/cmp/zig/Test_zig.ts +17 -61
- package/project/.sdk/tm/clojure/src/voxgig/struct.clj +1 -1
- package/project/.sdk/tm/cpp/test/feature_test.cpp +19 -0
- package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +4 -1
- package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +7 -1
- package/project/.sdk/tm/elixir/lib/utility/struct/voxgig_struct.ex +1 -1
- package/project/.sdk/tm/elixir/test/primary_utility_test.exs +7 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +3 -1
- package/project/.sdk/tm/haskell/test/Harness.hs +8 -3
- package/project/.sdk/tm/js/Makefile +1 -1
- package/project/.sdk/tm/js/jsconfig.json +12 -0
- package/project/.sdk/tm/ocaml/Makefile +5 -1
- package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
- package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
- package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
- package/project/.sdk/tm/ts/Makefile +1 -1
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
- package/src/cmp/ReadmeErrors.ts +2 -2
- package/src/cmp/ReadmeExplanation.ts +3 -3
- package/src/cmp/ReadmeTop.ts +2 -2
- package/src/helpers/canonType.ts +116 -25
- package/src/helpers/naming.ts +47 -0
- package/src/helpers/opExample.ts +43 -20
- package/src/helpers/opShape.ts +102 -3
- package/src/sdkgen.ts +8 -2
- package/src/tsconfig.json +2 -0
- package/project/.sdk/tm/zig/build.zig.zon +0 -11
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { cppVarName } from './utility_cpp'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct C++ literal for a field's canonical type.
|
|
13
|
+
function cppLit(type: any): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'Value(1)'
|
|
16
|
+
if ('BOOLEAN' === k) return 'Value(true)'
|
|
17
|
+
if ('ARRAY' === k) return 'vlist()'
|
|
18
|
+
if ('OBJECT' === k) return 'vmap()'
|
|
19
|
+
return 'Value("example")'
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
24
|
+
const { target, ctx$: { model } } = props
|
|
25
|
+
|
|
26
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
27
|
+
// Pick an entity with a real op (prefer a read op) — never fabricate a
|
|
28
|
+
// `load` on an op-less entity. primaryOp is null only when NO entity
|
|
29
|
+
// exposes any op (a direct()-only SDK).
|
|
30
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
31
|
+
const acc = exampleEntity ? cppVarName(exampleEntity.name) : 'entity'
|
|
32
|
+
const eVar = acc
|
|
33
|
+
// Model-driven id key: null when the entity has no id-like field.
|
|
34
|
+
const idF = exampleEntity ? entityIdField(exampleEntity) : null
|
|
35
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
36
|
+
let testArg = 'Value::undef()'
|
|
37
|
+
if (exampleEntity && isMatchOp) {
|
|
38
|
+
testArg = idF ? `vmap({{"${idF}", Value("test01")}})` : 'Value::undef()'
|
|
39
|
+
} else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
|
|
40
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
41
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
42
|
+
const required = items.filter((it: any) => !it.optional)
|
|
43
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
44
|
+
testArg = `vmap({${chosen.map((it: any) => `{"${it.name}", ${cppLit(it.type)}}`).join(', ')}})`
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// The op-driven test-mode line, shown only when the SDK has an entity op.
|
|
48
|
+
// A direct()-only SDK (no ops anywhere) shows a direct() call instead.
|
|
49
|
+
const testModeExample = primaryOp
|
|
50
|
+
? `// Entity ops return the bare record and throw on error.
|
|
51
|
+
Value ${eVar} = client->${acc}()->${primaryOp}(${testArg}, Value::undef());
|
|
52
|
+
// ${eVar} contains the mock response record
|
|
53
|
+
std::cout << Struct::jsonify(${eVar}) << std::endl;`
|
|
54
|
+
: `Value result = client->direct(vmap({
|
|
55
|
+
{"path", Value("/api/resource")},
|
|
56
|
+
{"method", Value("GET")},
|
|
57
|
+
}));
|
|
58
|
+
std::cout << Struct::jsonify(result) << std::endl;`
|
|
59
|
+
|
|
60
|
+
const apikeyEnvLine = isAuthActive(model)
|
|
61
|
+
? `\n${envName(model)}_APIKEY=<your-key>`
|
|
62
|
+
: ''
|
|
63
|
+
|
|
64
|
+
Content(`### Make a direct HTTP request
|
|
65
|
+
|
|
66
|
+
For endpoints not covered by entity methods:
|
|
67
|
+
|
|
68
|
+
\`\`\`cpp
|
|
69
|
+
Value result = client->direct(vmap({
|
|
70
|
+
{"path", Value("/api/resource/{id}")},
|
|
71
|
+
{"method", Value("GET")},
|
|
72
|
+
{"params", vmap({{"id", Value("example")}})},
|
|
73
|
+
}));
|
|
74
|
+
|
|
75
|
+
if (getp(result, "ok") == Value(true)) {
|
|
76
|
+
std::cout << Helpers::toInt(getp(result, "status")) << std::endl; // 200
|
|
77
|
+
std::cout << Struct::jsonify(getp(result, "data")) << std::endl; // response body
|
|
78
|
+
} else {
|
|
79
|
+
// A non-2xx response carries status + data (the error body); a
|
|
80
|
+
// transport-level failure carries err instead. Only one is present.
|
|
81
|
+
std::cerr << Helpers::toInt(getp(result, "status")) << " "
|
|
82
|
+
<< Struct::jsonify(getp(result, "err")) << std::endl;
|
|
83
|
+
}
|
|
84
|
+
\`\`\`
|
|
85
|
+
|
|
86
|
+
\`direct()\` is the escape hatch: it never throws — branch on
|
|
87
|
+
\`getp(result, "ok")\`.
|
|
88
|
+
|
|
89
|
+
### Prepare a request without sending it
|
|
90
|
+
|
|
91
|
+
\`\`\`cpp
|
|
92
|
+
// prepare() returns the fetch definition and throws on error.
|
|
93
|
+
Value fetchdef = client->prepare(vmap({
|
|
94
|
+
{"path", Value("/api/resource/{id}")},
|
|
95
|
+
{"method", Value("DELETE")},
|
|
96
|
+
{"params", vmap({{"id", Value("example")}})},
|
|
97
|
+
}));
|
|
98
|
+
|
|
99
|
+
std::cout << Struct::stringify(getp(fetchdef, "url")) << std::endl;
|
|
100
|
+
std::cout << Struct::stringify(getp(fetchdef, "method")) << std::endl;
|
|
101
|
+
std::cout << Struct::jsonify(getp(fetchdef, "headers")) << std::endl;
|
|
102
|
+
\`\`\`
|
|
103
|
+
|
|
104
|
+
### Use test mode
|
|
105
|
+
|
|
106
|
+
Create a mock client for unit testing — no server required. The test
|
|
107
|
+
feature installs an in-memory mock transport:
|
|
108
|
+
|
|
109
|
+
\`\`\`cpp
|
|
110
|
+
auto client = ${model.const.Name}SDK::testSDK();
|
|
111
|
+
|
|
112
|
+
${testModeExample}
|
|
113
|
+
\`\`\`
|
|
114
|
+
|
|
115
|
+
You can seed the mock store by passing test options — see the generated
|
|
116
|
+
\`test/\` suite for worked examples.
|
|
117
|
+
|
|
118
|
+
### Run live tests
|
|
119
|
+
|
|
120
|
+
Create a \`.env.local\` file at the project root:
|
|
121
|
+
|
|
122
|
+
\`\`\`
|
|
123
|
+
${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
|
|
124
|
+
\`\`\`
|
|
125
|
+
|
|
126
|
+
Then build and run the test suite:
|
|
127
|
+
|
|
128
|
+
\`\`\`bash
|
|
129
|
+
cd ${target.name} && make test
|
|
130
|
+
\`\`\`
|
|
131
|
+
|
|
132
|
+
`)
|
|
133
|
+
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
export {
|
|
138
|
+
ReadmeHowto
|
|
139
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, repoInfo } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
|
|
6
|
+
const { target, ctx$ } = props
|
|
7
|
+
const { model } = ctx$
|
|
8
|
+
|
|
9
|
+
// The C++ SDK is header-only: there is no package registry to install from.
|
|
10
|
+
// Consumers vendor the source tree (or add it as a submodule) and put the
|
|
11
|
+
// SDK directory on the compiler include path. The git release tag
|
|
12
|
+
// (`cpp/vX.Y.Z`) is the unit of distribution.
|
|
13
|
+
const { releasesUrl } = repoInfo(model)
|
|
14
|
+
|
|
15
|
+
Content(`The ${target.title} SDK is **header-only** — there is no package to install
|
|
16
|
+
from a registry. Vendor the \`cpp/\` directory into your project (or add the
|
|
17
|
+
repository as a git submodule) and put it on your compiler's include path.
|
|
18
|
+
Releases are cut as the git tag \`${target.name}/vX.Y.Z\` (see
|
|
19
|
+
[Releases](${releasesUrl})).
|
|
20
|
+
|
|
21
|
+
\`\`\`bash
|
|
22
|
+
# Add the SDK as a submodule (or copy the cpp/ directory into your tree).
|
|
23
|
+
git submodule add <repo-url> third_party/${model.const.Name.toLowerCase()}-sdk
|
|
24
|
+
\`\`\`
|
|
25
|
+
|
|
26
|
+
Then include the umbrella header and compile with C++17:
|
|
27
|
+
|
|
28
|
+
\`\`\`cpp
|
|
29
|
+
#include "core/sdk.hpp"
|
|
30
|
+
\`\`\`
|
|
31
|
+
|
|
32
|
+
\`\`\`bash
|
|
33
|
+
g++ -std=c++17 -Ithird_party/${model.const.Name.toLowerCase()}-sdk/cpp your_app.cpp -o your_app
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
`)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
export {
|
|
41
|
+
ReadmeInstall
|
|
42
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { cppVarName } from './utility_cpp'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
const ReadmeIntro = cmp(function ReadmeIntro(props: any) {
|
|
13
|
+
const { target, ctx$: { model } } = props
|
|
14
|
+
const info = (model.main && model.main.kit && model.main.kit.info) || {}
|
|
15
|
+
const tagline = info.tagline || ''
|
|
16
|
+
|
|
17
|
+
Content(`# ${model.Name} ${target.title} SDK
|
|
18
|
+
|
|
19
|
+
${tagline}
|
|
20
|
+
|
|
21
|
+
The ${target.title} SDK for the ${model.Name} API — a header-only,
|
|
22
|
+
entity-oriented client following idiomatic modern C++ (C++17) conventions.
|
|
23
|
+
|
|
24
|
+
`)
|
|
25
|
+
|
|
26
|
+
// Emphasise the entity-oriented design: the SDK surfaces the API as
|
|
27
|
+
// capitalised, semantic Entities with a small, uniform verb set rather
|
|
28
|
+
// than raw URL paths and query strings. The example entity accessor is
|
|
29
|
+
// derived from the model, never hardcoded.
|
|
30
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
31
|
+
const exampleEntity = Object.values(entity || {})
|
|
32
|
+
.find((e: any) => e.active !== false) as any
|
|
33
|
+
const example = exampleEntity
|
|
34
|
+
? `for example \`client->${cppVarName(exampleEntity.name)}()\` — each`
|
|
35
|
+
: 'each'
|
|
36
|
+
|
|
37
|
+
// Model-driven op list — only the operations the active entities actually
|
|
38
|
+
// expose (a read-only entity has just list+load); never claim
|
|
39
|
+
// create/update/remove exist when no entity has them.
|
|
40
|
+
const CANON_OPS = ['list', 'load', 'create', 'update', 'remove']
|
|
41
|
+
const opSet = new Set<string>()
|
|
42
|
+
Object.values(entity || {}).forEach((e: any) => {
|
|
43
|
+
if (!e || e.active === false) return
|
|
44
|
+
Object.keys(e.op || {}).forEach((o: string) => {
|
|
45
|
+
if (e.op[o] && e.op[o].active !== false) opSet.add(o)
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
const opNames = CANON_OPS.filter((o) => opSet.has(o))
|
|
49
|
+
.concat([...opSet].filter((o) => !CANON_OPS.includes(o)))
|
|
50
|
+
const opList = (opNames.length ? opNames : ['list', 'load'])
|
|
51
|
+
.map((o) => '`' + o + '`').join(', ')
|
|
52
|
+
|
|
53
|
+
Content(`The SDK exposes the API as capitalised, semantic **Entities** — ${example}
|
|
54
|
+
carrying a small, uniform set of operations (${opList}) instead of raw URL
|
|
55
|
+
paths and query strings. You work with named resources and verbs, which
|
|
56
|
+
keeps the cognitive load low. Every value flows through a single dynamic
|
|
57
|
+
\`sdk::Value\` type (a JSON-like variant), so there is no schema-driven code to
|
|
58
|
+
regenerate when the API changes.
|
|
59
|
+
|
|
60
|
+
> Other languages, the CLI, and MCP server live alongside this one — see
|
|
61
|
+
> the [top-level README](../README.md).
|
|
62
|
+
|
|
63
|
+
`)
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
export {
|
|
68
|
+
ReadmeIntro
|
|
69
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { cppVarName } from './utility_cpp'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
const ReadmeModel = cmp(function ReadmeModel(props: any) {
|
|
13
|
+
const { target, ctx$: { model } } = props
|
|
14
|
+
|
|
15
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
16
|
+
const entityList = each(entity).filter((e: any) => e.active !== false)
|
|
17
|
+
|
|
18
|
+
// Model-driven op rows for the shared entity interface: emit a
|
|
19
|
+
// load/list/create/update/remove row only for operations at least one active
|
|
20
|
+
// entity actually exposes — never document an operation no entity has.
|
|
21
|
+
const opUnion = new Set<string>()
|
|
22
|
+
entityList.forEach((e: any) => Object.keys(e.op || {})
|
|
23
|
+
.forEach((o: string) => { if (e.op[o] && e.op[o].active !== false) opUnion.add(o) }))
|
|
24
|
+
const opRowDefs: Record<string, string> = {
|
|
25
|
+
load: '| `load` | `(reqmatch, ctrl) -> Value` | Load a single entity by match criteria. Throws on error. |',
|
|
26
|
+
list: '| `list` | `(reqmatch, ctrl) -> Value` | List entities matching the criteria (a Value list). Throws on error. |',
|
|
27
|
+
create: '| `create` | `(reqdata, ctrl) -> Value` | Create a new entity. Throws on error. |',
|
|
28
|
+
update: '| `update` | `(reqdata, ctrl) -> Value` | Update an existing entity. Throws on error. |',
|
|
29
|
+
remove: '| `remove` | `(reqmatch, ctrl) -> Value` | Remove an entity. Throws on error. |',
|
|
30
|
+
}
|
|
31
|
+
const opRows = ['load', 'list', 'create', 'update', 'remove']
|
|
32
|
+
.filter((o) => opUnion.has(o)).map((o) => opRowDefs[o]).join('\n')
|
|
33
|
+
|
|
34
|
+
const apikeyOptionRow = isAuthActive(model)
|
|
35
|
+
? '| `apikey` | `std::string` | API key for authentication. |\n'
|
|
36
|
+
: ''
|
|
37
|
+
|
|
38
|
+
Content(`### ${model.const.Name}SDK
|
|
39
|
+
|
|
40
|
+
\`\`\`cpp
|
|
41
|
+
#include "core/sdk.hpp"
|
|
42
|
+
|
|
43
|
+
using namespace sdk;
|
|
44
|
+
|
|
45
|
+
auto client = std::make_shared<${model.const.Name}SDK>(options);
|
|
46
|
+
\`\`\`
|
|
47
|
+
|
|
48
|
+
Creates a new SDK client. \`options\` is an \`sdk::Value\` map.
|
|
49
|
+
|
|
50
|
+
| Option | Type | Description |
|
|
51
|
+
| --- | --- | --- |
|
|
52
|
+
${apikeyOptionRow}| \`base\` | \`std::string\` | Base URL of the API server. |
|
|
53
|
+
| \`prefix\` | \`std::string\` | URL path prefix prepended to all requests. |
|
|
54
|
+
| \`suffix\` | \`std::string\` | URL path suffix appended to all requests. |
|
|
55
|
+
| \`feature\` | \`Value\` | Feature activation flags. |
|
|
56
|
+
| \`system\` | \`Value\` | System overrides. |
|
|
57
|
+
|
|
58
|
+
### testSDK
|
|
59
|
+
|
|
60
|
+
\`\`\`cpp
|
|
61
|
+
auto client = ${model.const.Name}SDK::testSDK(testopts, sdkopts);
|
|
62
|
+
\`\`\`
|
|
63
|
+
|
|
64
|
+
Creates a test-mode client with mock transport. Both arguments may be
|
|
65
|
+
\`Value::undef()\`; a no-arg \`${model.const.Name}SDK::testSDK()\` overload is
|
|
66
|
+
also provided.
|
|
67
|
+
|
|
68
|
+
### ${model.const.Name}SDK methods
|
|
69
|
+
|
|
70
|
+
| Method | Signature | Description |
|
|
71
|
+
| --- | --- | --- |
|
|
72
|
+
| \`optionsMap\` | \`() -> Value\` | Deep copy of current SDK options. |
|
|
73
|
+
| \`getUtility\` | \`() -> UtilityPtr\` | Copy of the SDK utility object. |
|
|
74
|
+
| \`prepare\` | \`(fetchargs) -> Value\` | Build an HTTP request definition without sending. Throws on error. |
|
|
75
|
+
| \`direct\` | \`(fetchargs) -> Value\` | Build and send an HTTP request. Returns a result Value (branch on \`ok\`). |
|
|
76
|
+
`)
|
|
77
|
+
|
|
78
|
+
each(entityList, (ent: any) => {
|
|
79
|
+
const acc = cppVarName(ent.name)
|
|
80
|
+
const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
|
|
81
|
+
Content(`| \`${acc}\` | \`(entopts) -> std::shared_ptr<${ent.Name}Entity>\` | Create ${article} ${ent.Name} entity instance. |
|
|
82
|
+
`)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
Content(`
|
|
86
|
+
### Entity interface
|
|
87
|
+
|
|
88
|
+
All entities share the same interface.
|
|
89
|
+
|
|
90
|
+
| Method | Signature | Description |
|
|
91
|
+
| --- | --- | --- |
|
|
92
|
+
${opRows}
|
|
93
|
+
| \`data\` | \`(arg) -> Value\` | Get (no arg) or set (with arg) entity data. |
|
|
94
|
+
| \`match\` | \`(arg) -> Value\` | Get (no arg) or set (with arg) entity match criteria. |
|
|
95
|
+
| \`make\` | \`() -> EntityPtr\` | Create a new instance with the same options. |
|
|
96
|
+
| \`getName\` | \`() -> std::string\` | Return the entity name. |
|
|
97
|
+
|
|
98
|
+
### Result shape
|
|
99
|
+
|
|
100
|
+
Entity operations return the bare result data (a map \`Value\` for
|
|
101
|
+
single-entity ops, a list \`Value\` for \`list\`) and throw
|
|
102
|
+
\`sdk::SdkErrorPtr\` on error. Wrap calls in \`try\`/\`catch\` to handle
|
|
103
|
+
failures.
|
|
104
|
+
|
|
105
|
+
The \`direct()\` escape hatch never throws — it returns a result \`Value\`
|
|
106
|
+
you branch on via \`getp(result, "ok")\`:
|
|
107
|
+
|
|
108
|
+
| Key | Type | Description |
|
|
109
|
+
| --- | --- | --- |
|
|
110
|
+
| \`ok\` | \`bool\` | \`true\` if the HTTP status is 2xx. |
|
|
111
|
+
| \`status\` | \`int\` | HTTP status code. |
|
|
112
|
+
| \`headers\` | \`Value\` | Response headers. |
|
|
113
|
+
| \`data\` | \`Value\` | Parsed JSON response body. |
|
|
114
|
+
|
|
115
|
+
On error, \`ok\` is \`false\` and \`err\` contains the error value.
|
|
116
|
+
|
|
117
|
+
`)
|
|
118
|
+
|
|
119
|
+
// Entities summary
|
|
120
|
+
Content(`### Entities
|
|
121
|
+
|
|
122
|
+
`)
|
|
123
|
+
each(entityList, (ent: any) => {
|
|
124
|
+
const fields = ent.fields || []
|
|
125
|
+
const opnames = Object.keys(ent.op || {})
|
|
126
|
+
const ops = ent.op || {}
|
|
127
|
+
const points = each(ops).map((op: any) =>
|
|
128
|
+
op.points ? each(op.points) : []
|
|
129
|
+
).flat()
|
|
130
|
+
const path = points.length > 0 ? (points[0] as any).orig || '' : ''
|
|
131
|
+
|
|
132
|
+
Content(`#### ${ent.Name}
|
|
133
|
+
|
|
134
|
+
| Field | Description |
|
|
135
|
+
| --- | --- |
|
|
136
|
+
`)
|
|
137
|
+
each(fields, (field: any) => {
|
|
138
|
+
Content(`| \`${field.name}\` | ${field.short || ''} |
|
|
139
|
+
`)
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
Content(`
|
|
143
|
+
Operations: ${opnames.map((n: string) => n.charAt(0).toUpperCase() + n.slice(1)).join(', ')}.
|
|
144
|
+
|
|
145
|
+
API path: \`${path}\`
|
|
146
|
+
|
|
147
|
+
`)
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
export {
|
|
154
|
+
ReadmeModel
|
|
155
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, envName, isAuthActive } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const ReadmeOptions = cmp(function ReadmeOptions(props: any) {
|
|
6
|
+
const { target } = props
|
|
7
|
+
const { model } = props.ctx$
|
|
8
|
+
|
|
9
|
+
const publishedOptions = each(target.options).filter((option: any) =>
|
|
10
|
+
option.publish && ('apikey' !== option.name || isAuthActive(model)))
|
|
11
|
+
if (0 === publishedOptions.length) {
|
|
12
|
+
return
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
Content(`
|
|
16
|
+
|
|
17
|
+
## Options
|
|
18
|
+
|
|
19
|
+
Pass options as an \`sdk::Value\` map when constructing a client:
|
|
20
|
+
|
|
21
|
+
`)
|
|
22
|
+
|
|
23
|
+
const hasApikey = publishedOptions.some((o: any) => 'apikey' === o.name)
|
|
24
|
+
|
|
25
|
+
Content(`\`\`\`cpp
|
|
26
|
+
${hasApikey ? `const char* apikey = std::getenv("${envName(model)}_APIKEY");
|
|
27
|
+
` : ''}auto client = std::make_shared<${model.Name}SDK>(vmap({
|
|
28
|
+
`)
|
|
29
|
+
|
|
30
|
+
publishedOptions.map((option: any) => {
|
|
31
|
+
if ('apikey' === option.name) {
|
|
32
|
+
Content(` {"${option.name}", Value(apikey ? apikey : "")},
|
|
33
|
+
`)
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
Content(` // {"${option.name}", ${option.kind === 'string' ? 'Value("...")' : 'Value(...)'}},
|
|
37
|
+
`)
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
Content(`}));
|
|
42
|
+
\`\`\`
|
|
43
|
+
|
|
44
|
+
`)
|
|
45
|
+
|
|
46
|
+
Content(`| Option | Type | Description |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
`)
|
|
49
|
+
|
|
50
|
+
publishedOptions.map((option: any) => {
|
|
51
|
+
Content(`| \`${option.name}\` | \`${option.kind}\` | ${option.short} |
|
|
52
|
+
`)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
Content(`
|
|
56
|
+
`)
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
export {
|
|
61
|
+
ReadmeOptions
|
|
62
|
+
}
|