@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,168 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
import { cIdent, cVarName } from './utility_c'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct C expression constructing a voxgig struct Value.
|
|
14
|
+
function cLit(type: any): string {
|
|
15
|
+
const k = canonKey(type)
|
|
16
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'v_num(1)'
|
|
17
|
+
if ('BOOLEAN' === k) return 'v_bool(true)'
|
|
18
|
+
if ('ARRAY' === k) return 'v_list()'
|
|
19
|
+
if ('OBJECT' === k) return 'v_map()'
|
|
20
|
+
return 'v_str("example")'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// cmap(...) for a set of pairs, or NULL when empty.
|
|
25
|
+
function cmapExpr(pairs: string[]): string {
|
|
26
|
+
return pairs.length ? `cmap(${pairs.length}, ${pairs.join(', ')})` : 'NULL'
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
31
|
+
const { target, ctx$: { model } } = props
|
|
32
|
+
|
|
33
|
+
const ident = cIdent(model)
|
|
34
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
35
|
+
// Pick an entity with a real op (prefer a read op). primaryOp is null only
|
|
36
|
+
// when NO entity exposes any op (a direct()-only SDK).
|
|
37
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
38
|
+
const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
|
|
39
|
+
const evar = exampleEntity ? cVarName(exampleEntity.name) : 'entity'
|
|
40
|
+
const acc = `${ident}_${evar}`
|
|
41
|
+
const idF = exampleEntity ? entityIdField(exampleEntity) : null
|
|
42
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
43
|
+
let testArg = 'NULL'
|
|
44
|
+
if (exampleEntity && isMatchOp) {
|
|
45
|
+
testArg = idF ? `cmap(1, "${idF}", v_str("test01"))` : 'NULL'
|
|
46
|
+
} else if (exampleEntity && ('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
|
+
testArg = cmapExpr(chosen.map((it: any) => `"${it.name}", ${cLit(it.type)}`))
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// The op-driven test-mode line. A direct()-only SDK shows a direct() call.
|
|
55
|
+
const testModeExample = primaryOp
|
|
56
|
+
? `// Entity ops return the bare record and set *err on failure.
|
|
57
|
+
Entity* ${evar} = ${acc}(client, NULL);
|
|
58
|
+
voxgig_value* ${evar}_rec = ${evar}->vt->${primaryOp}(${evar}, ${testArg}, NULL, &err);
|
|
59
|
+
// ${evar}_rec contains the mock response record`
|
|
60
|
+
: `voxgig_value* result = sdk_direct(client, cmap(2,
|
|
61
|
+
"path", v_str("/api/resource"),
|
|
62
|
+
"method", v_str("GET")), &err);
|
|
63
|
+
printf("%s\\n", voxgig_to_json(result));`
|
|
64
|
+
|
|
65
|
+
const apikeyEnvLine = isAuthActive(model)
|
|
66
|
+
? `\n${envName(model)}_APIKEY=<your-key>`
|
|
67
|
+
: ''
|
|
68
|
+
|
|
69
|
+
Content(`### Make a direct HTTP request
|
|
70
|
+
|
|
71
|
+
For endpoints not covered by entity operations:
|
|
72
|
+
|
|
73
|
+
\`\`\`c
|
|
74
|
+
PNError* err = NULL;
|
|
75
|
+
voxgig_value* result = sdk_direct(client, cmap(3,
|
|
76
|
+
"path", v_str("/api/resource/{id}"),
|
|
77
|
+
"method", v_str("GET"),
|
|
78
|
+
"params", cmap(1, "id", v_str("example"))), &err);
|
|
79
|
+
|
|
80
|
+
if (voxgig_as_bool(getp(result, "ok"))) {
|
|
81
|
+
printf("%lld\\n", (long long)to_int(getp(result, "status"))); // 200
|
|
82
|
+
printf("%s\\n", voxgig_to_json(getp(result, "data"))); // response body
|
|
83
|
+
} else {
|
|
84
|
+
// A non-2xx response carries status + data (the error body); a
|
|
85
|
+
// transport-level failure carries err instead. Only one is present.
|
|
86
|
+
printf("%s\\n", voxgig_to_json(getp(result, "err")));
|
|
87
|
+
}
|
|
88
|
+
\`\`\`
|
|
89
|
+
|
|
90
|
+
\`sdk_direct()\` never sets \`*err\` for a non-2xx response — it always returns
|
|
91
|
+
a result map you branch on via \`getp(result, "ok")\`.
|
|
92
|
+
|
|
93
|
+
### Prepare a request without sending it
|
|
94
|
+
|
|
95
|
+
\`\`\`c
|
|
96
|
+
PNError* err = NULL;
|
|
97
|
+
voxgig_value* fetchdef = sdk_prepare(client, cmap(3,
|
|
98
|
+
"path", v_str("/api/resource/{id}"),
|
|
99
|
+
"method", v_str("DELETE"),
|
|
100
|
+
"params", cmap(1, "id", v_str("example"))), &err);
|
|
101
|
+
|
|
102
|
+
printf("%s\\n", get_str(fetchdef, "url"));
|
|
103
|
+
printf("%s\\n", get_str(fetchdef, "method"));
|
|
104
|
+
printf("%s\\n", voxgig_to_json(getp(fetchdef, "headers")));
|
|
105
|
+
\`\`\`
|
|
106
|
+
|
|
107
|
+
### Use test mode
|
|
108
|
+
|
|
109
|
+
Create a mock client for unit testing — no server required:
|
|
110
|
+
|
|
111
|
+
\`\`\`c
|
|
112
|
+
${model.const.Name}SDK* client = test_sdk(NULL, NULL);
|
|
113
|
+
PNError* err = NULL;
|
|
114
|
+
|
|
115
|
+
${testModeExample}
|
|
116
|
+
\`\`\`
|
|
117
|
+
|
|
118
|
+
### Use a custom fetch function
|
|
119
|
+
|
|
120
|
+
Replace the HTTP transport with your own function (the same shape the test
|
|
121
|
+
transport uses):
|
|
122
|
+
|
|
123
|
+
\`\`\`c
|
|
124
|
+
static voxgig_value* mock_fetch(void* ud, voxgig_value* args) {
|
|
125
|
+
(void)ud; (void)args;
|
|
126
|
+
return cmap(4,
|
|
127
|
+
"status", v_num(200),
|
|
128
|
+
"statusText", v_str("OK"),
|
|
129
|
+
"headers", v_map(),
|
|
130
|
+
"json", json_thunk(cmap(1, "id", v_str("mock01"))));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
${model.const.Name}SDK* client = ${ident}_sdk_new(cmap(2,
|
|
134
|
+
"base", v_str("http://localhost:8080"),
|
|
135
|
+
"system", cmap(1, "fetch", vfn(mock_fetch, NULL))));
|
|
136
|
+
\`\`\`
|
|
137
|
+
|
|
138
|
+
### Point at a different server
|
|
139
|
+
|
|
140
|
+
Override the base URL to reach a local or staging server:
|
|
141
|
+
|
|
142
|
+
\`\`\`c
|
|
143
|
+
${model.const.Name}SDK* client = ${ident}_sdk_new(cmap(1,
|
|
144
|
+
"base", v_str("http://localhost:8080")));
|
|
145
|
+
\`\`\`
|
|
146
|
+
|
|
147
|
+
### Run live tests
|
|
148
|
+
|
|
149
|
+
Create a \`.env.local\` file at the project root:
|
|
150
|
+
|
|
151
|
+
\`\`\`
|
|
152
|
+
${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
|
|
153
|
+
\`\`\`
|
|
154
|
+
|
|
155
|
+
Then run:
|
|
156
|
+
|
|
157
|
+
\`\`\`bash
|
|
158
|
+
cd ${target.name} && make test
|
|
159
|
+
\`\`\`
|
|
160
|
+
|
|
161
|
+
`)
|
|
162
|
+
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
export {
|
|
167
|
+
ReadmeHowto
|
|
168
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, installCommand, isPublished, 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
|
+
if (isPublished(model, target.name)) {
|
|
10
|
+
Content(`\`\`\`bash
|
|
11
|
+
${installCommand(model, target.name)}
|
|
12
|
+
\`\`\`
|
|
13
|
+
|
|
14
|
+
Or build it from a source checkout with the bundled \`Makefile\`:
|
|
15
|
+
|
|
16
|
+
\`\`\`bash
|
|
17
|
+
cd ${target.name} && make
|
|
18
|
+
\`\`\`
|
|
19
|
+
|
|
20
|
+
`)
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Publish pending: C has no central package registry — the release IS the
|
|
25
|
+
// git tag. Build from a source checkout (the vendored voxgig struct means
|
|
26
|
+
// there are no external dependencies to fetch).
|
|
27
|
+
const { releasesUrl } = repoInfo(model)
|
|
28
|
+
Content(`C has no central package registry — a release is the git tag
|
|
29
|
+
(\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl})). Build from a
|
|
30
|
+
source checkout with the bundled \`Makefile\`; the voxgig struct library is
|
|
31
|
+
vendored under \`utility/struct\`, so there are no external dependencies to
|
|
32
|
+
fetch:
|
|
33
|
+
|
|
34
|
+
\`\`\`bash
|
|
35
|
+
cd ${target.name} && make # builds libsdk.a
|
|
36
|
+
cd ${target.name} && make test # builds + runs the test binaries
|
|
37
|
+
\`\`\`
|
|
38
|
+
|
|
39
|
+
Link your program against \`libsdk.a\` and include \`core/api.h\`:
|
|
40
|
+
|
|
41
|
+
\`\`\`bash
|
|
42
|
+
cc -I ${target.name}/core -I ${target.name}/utility/struct \\
|
|
43
|
+
myapp.c ${target.name}/libsdk.a -lm -o myapp
|
|
44
|
+
\`\`\`
|
|
45
|
+
|
|
46
|
+
`)
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
ReadmeInstall
|
|
52
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { cIdent, cVarName } from './utility_c'
|
|
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 — an entity-oriented client following idiomatic C conventions (explicit structs, function-pointer vtables, and a trailing \`PNError**\` out-param for errors).
|
|
22
|
+
|
|
23
|
+
`)
|
|
24
|
+
|
|
25
|
+
// Emphasise the entity-oriented design: the SDK surfaces the API as
|
|
26
|
+
// capitalised, semantic Entities with a small, uniform verb set rather
|
|
27
|
+
// than raw URL paths and query strings. The example entity name is
|
|
28
|
+
// derived from the model, never hardcoded.
|
|
29
|
+
const ident = cIdent(model)
|
|
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 \`${ident}_${cVarName(exampleEntity.name)}(client, NULL)\` — 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.
|
|
57
|
+
|
|
58
|
+
> Other languages, the CLI, and MCP server live alongside this one — see
|
|
59
|
+
> the [top-level README](../README.md).
|
|
60
|
+
|
|
61
|
+
`)
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
export {
|
|
66
|
+
ReadmeIntro
|
|
67
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { cIdent, cVarName } from './utility_c'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
const ReadmeModel = cmp(function ReadmeModel(props: any) {
|
|
13
|
+
const { target, ctx$: { model } } = props
|
|
14
|
+
|
|
15
|
+
const ident = cIdent(model)
|
|
16
|
+
const Name = model.const.Name
|
|
17
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
18
|
+
const entityList = each(entity).filter((e: any) => e.active !== false)
|
|
19
|
+
|
|
20
|
+
// Model-driven op rows for the shared entity vtable: emit a row only for
|
|
21
|
+
// operations at least one active entity actually exposes.
|
|
22
|
+
const opUnion = new Set<string>()
|
|
23
|
+
entityList.forEach((e: any) => Object.keys(e.op || {})
|
|
24
|
+
.forEach((o: string) => { if (e.op[o] && e.op[o].active !== false) opUnion.add(o) }))
|
|
25
|
+
const opRowDefs: Record<string, string> = {
|
|
26
|
+
load: '| `load` | `(Entity*, reqmatch, ctrl, PNError**) -> voxgig_value*` | Load a single entity by match criteria. |',
|
|
27
|
+
list: '| `list` | `(Entity*, reqmatch, ctrl, PNError**) -> voxgig_value*` | List entities matching the criteria (a List). |',
|
|
28
|
+
create: '| `create` | `(Entity*, reqdata, ctrl, PNError**) -> voxgig_value*` | Create a new entity. |',
|
|
29
|
+
update: '| `update` | `(Entity*, reqdata, ctrl, PNError**) -> voxgig_value*` | Update an existing entity. |',
|
|
30
|
+
remove: '| `remove` | `(Entity*, reqmatch, ctrl, PNError**) -> voxgig_value*` | Remove an entity. |',
|
|
31
|
+
}
|
|
32
|
+
const opRows = ['load', 'list', 'create', 'update', 'remove']
|
|
33
|
+
.filter((o) => opUnion.has(o)).map((o) => opRowDefs[o]).join('\n')
|
|
34
|
+
|
|
35
|
+
const apikeyOptionRow = isAuthActive(model)
|
|
36
|
+
? '| `apikey` | `string` | API key for authentication. |\n'
|
|
37
|
+
: ''
|
|
38
|
+
|
|
39
|
+
Content(`### ${Name}SDK
|
|
40
|
+
|
|
41
|
+
\`\`\`c
|
|
42
|
+
#include "core/api.h"
|
|
43
|
+
|
|
44
|
+
${Name}SDK* client = ${ident}_sdk_new(options);
|
|
45
|
+
\`\`\`
|
|
46
|
+
|
|
47
|
+
Creates a new SDK client. \`options\` is a \`voxgig_value*\` map (\`NULL\` for
|
|
48
|
+
none) carrying any of the following keys:
|
|
49
|
+
|
|
50
|
+
| Option | Value type | Description |
|
|
51
|
+
| --- | --- | --- |
|
|
52
|
+
${apikeyOptionRow}| \`base\` | \`string\` | Base URL of the API server. |
|
|
53
|
+
| \`prefix\` | \`string\` | URL path prefix prepended to all requests. |
|
|
54
|
+
| \`suffix\` | \`string\` | URL path suffix appended to all requests. |
|
|
55
|
+
| \`feature\` | \`map\` | Feature activation flags. |
|
|
56
|
+
| \`system\` | \`map\` | System overrides (e.g. a custom \`fetch\`). |
|
|
57
|
+
|
|
58
|
+
### test_sdk
|
|
59
|
+
|
|
60
|
+
\`\`\`c
|
|
61
|
+
${Name}SDK* client = test_sdk(testopts, sdkopts);
|
|
62
|
+
\`\`\`
|
|
63
|
+
|
|
64
|
+
Creates a test-mode client with mock transport. Both arguments may be
|
|
65
|
+
\`NULL\`.
|
|
66
|
+
|
|
67
|
+
### ${Name}SDK functions
|
|
68
|
+
|
|
69
|
+
| Function | Signature | Description |
|
|
70
|
+
| --- | --- | --- |
|
|
71
|
+
| \`sdk_prepare\` | \`(${Name}SDK*, fetchargs, PNError**) -> voxgig_value*\` | Build an HTTP request definition without sending. |
|
|
72
|
+
| \`sdk_direct\` | \`(${Name}SDK*, fetchargs, PNError**) -> voxgig_value*\` | Build and send an HTTP request. Returns a result map (branch on \`ok\`). |
|
|
73
|
+
`)
|
|
74
|
+
|
|
75
|
+
each(entityList, (ent: any) => {
|
|
76
|
+
const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
|
|
77
|
+
Content(`| \`${ident}_${cVarName(ent.name)}\` | \`(${Name}SDK*, entopts) -> Entity*\` | Create ${article} ${ent.Name} entity instance. |
|
|
78
|
+
`)
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
Content(`
|
|
82
|
+
### Entity interface (vtable)
|
|
83
|
+
|
|
84
|
+
All entities share the same \`EntityVT\` vtable, reached via \`e->vt->...\`.
|
|
85
|
+
|
|
86
|
+
| Method | Signature | Description |
|
|
87
|
+
| --- | --- | --- |
|
|
88
|
+
${opRows}
|
|
89
|
+
| \`data\` | \`(Entity*, args) -> voxgig_value*\` | Get entity data (pass a map to set). |
|
|
90
|
+
| \`matchv\` | \`(Entity*, args) -> voxgig_value*\` | Get entity match criteria (pass a map to set). |
|
|
91
|
+
| \`make\` | \`(Entity*) -> Entity*\` | Create a new instance with the same options. |
|
|
92
|
+
| \`get_name\` | \`(Entity*) -> const char*\` | Return the entity name. |
|
|
93
|
+
|
|
94
|
+
### Result shape
|
|
95
|
+
|
|
96
|
+
Entity operations return the bare result data (a \`voxgig_value\` map for
|
|
97
|
+
single-entity ops, a List for \`list\`) and set \`*err\` to a \`PNError*\` on
|
|
98
|
+
failure. Always initialise \`PNError* err = NULL;\` and check it after the
|
|
99
|
+
call.
|
|
100
|
+
|
|
101
|
+
The \`sdk_direct()\` escape hatch never sets \`*err\` for a non-2xx response —
|
|
102
|
+
it returns a result map you branch on via \`getp(result, "ok")\`:
|
|
103
|
+
|
|
104
|
+
| Key | Type | Description |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| \`ok\` | \`bool\` | \`true\` if the HTTP status is 2xx. |
|
|
107
|
+
| \`status\` | \`number\` | HTTP status code. |
|
|
108
|
+
| \`headers\` | \`map\` | Response headers. |
|
|
109
|
+
| \`data\` | \`any\` | Parsed JSON response body. |
|
|
110
|
+
|
|
111
|
+
On error, \`ok\` is \`false\` and \`err\` carries the error value.
|
|
112
|
+
|
|
113
|
+
`)
|
|
114
|
+
|
|
115
|
+
// Entities summary
|
|
116
|
+
Content(`### Entities
|
|
117
|
+
|
|
118
|
+
`)
|
|
119
|
+
each(entityList, (ent: any) => {
|
|
120
|
+
const fields = ent.fields || []
|
|
121
|
+
const opnames = Object.keys(ent.op || {})
|
|
122
|
+
const ops = ent.op || {}
|
|
123
|
+
const points = each(ops).map((op: any) =>
|
|
124
|
+
op.points ? each(op.points) : []
|
|
125
|
+
).flat()
|
|
126
|
+
const path = points.length > 0 ? (points[0] as any).orig || '' : ''
|
|
127
|
+
|
|
128
|
+
Content(`#### ${ent.Name}
|
|
129
|
+
|
|
130
|
+
| Field | Description |
|
|
131
|
+
| --- | --- |
|
|
132
|
+
`)
|
|
133
|
+
each(fields, (field: any) => {
|
|
134
|
+
Content(`| \`${field.name}\` | ${field.short || ''} |
|
|
135
|
+
`)
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
Content(`
|
|
139
|
+
Operations: ${opnames.map((n: string) => n.charAt(0).toUpperCase() + n.slice(1)).join(', ')}.
|
|
140
|
+
|
|
141
|
+
API path: \`${path}\`
|
|
142
|
+
|
|
143
|
+
`)
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
export {
|
|
150
|
+
ReadmeModel
|
|
151
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, envName, isAuthActive } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import { cIdent } from './utility_c'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const ReadmeOptions = cmp(function ReadmeOptions(props: any) {
|
|
8
|
+
const { target } = props
|
|
9
|
+
const { model } = props.ctx$
|
|
10
|
+
|
|
11
|
+
const ident = cIdent(model)
|
|
12
|
+
|
|
13
|
+
const publishedOptions = each(target.options).filter((option: any) =>
|
|
14
|
+
option.publish && ('apikey' !== option.name || isAuthActive(model)))
|
|
15
|
+
if (0 === publishedOptions.length) {
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
Content(`
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
|
|
23
|
+
Pass an options map (a \`voxgig_value*\`) when creating a client instance:
|
|
24
|
+
|
|
25
|
+
`)
|
|
26
|
+
|
|
27
|
+
Content(`\`\`\`c
|
|
28
|
+
voxgig_value* opts = cmap(${publishedOptions.length},
|
|
29
|
+
`)
|
|
30
|
+
|
|
31
|
+
publishedOptions.map((option: any, i: number) => {
|
|
32
|
+
const comma = i < publishedOptions.length - 1 ? ',' : ');'
|
|
33
|
+
if ('apikey' === option.name) {
|
|
34
|
+
Content(` "${option.name}", v_str(getenv("${envName(model)}_APIKEY"))${comma}
|
|
35
|
+
`)
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
const val = option.kind === 'string' ? 'v_str("...")' : 'v_null()'
|
|
39
|
+
Content(` "${option.name}", ${val}${comma}
|
|
40
|
+
`)
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
Content(`${model.const.Name}SDK* client = ${ident}_sdk_new(opts);
|
|
45
|
+
\`\`\`
|
|
46
|
+
|
|
47
|
+
`)
|
|
48
|
+
|
|
49
|
+
Content(`| Option | Type | Description |
|
|
50
|
+
| --- | --- | --- |
|
|
51
|
+
`)
|
|
52
|
+
|
|
53
|
+
publishedOptions.map((option: any) => {
|
|
54
|
+
Content(`| \`${option.name}\` | \`${option.kind}\` | ${option.short} |
|
|
55
|
+
`)
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
Content(`
|
|
59
|
+
`)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
export {
|
|
64
|
+
ReadmeOptions
|
|
65
|
+
}
|