@voxgig/sdkgen 1.3.13 → 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 +11 -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 +12 -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 { hsVarName } from './utility_haskell'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct Haskell `Value` literal for a field's canonical type.
|
|
14
|
+
function hsLit(type: any): string {
|
|
15
|
+
const k = canonKey(type)
|
|
16
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'VNum 1'
|
|
17
|
+
if ('BOOLEAN' === k) return 'VBool True'
|
|
18
|
+
if ('ARRAY' === k || 'OBJECT' === k) return 'VNoval'
|
|
19
|
+
return 'VStr "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). primaryOp is null only
|
|
28
|
+
// when NO entity exposes any op (a direct()-only SDK).
|
|
29
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
30
|
+
const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
|
|
31
|
+
const eFn = exampleEntity ? hsVarName(exampleEntity.name) : 'entity'
|
|
32
|
+
const idF = exampleEntity ? entityIdField(exampleEntity) : null
|
|
33
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
34
|
+
let testArgExpr = 'emptyMap'
|
|
35
|
+
if (exampleEntity && isMatchOp) {
|
|
36
|
+
testArgExpr = idF ? `jo [("${idF}", VStr "test01")]` : 'emptyMap'
|
|
37
|
+
} else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
|
|
38
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
39
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
40
|
+
const required = items.filter((it: any) => !it.optional)
|
|
41
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
42
|
+
testArgExpr = `jo [${chosen.map((it: any) => `("${it.name}", ${hsLit(it.type)})`).join(', ')}]`
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// The op-driven test-mode line, shown only when the SDK has an entity op.
|
|
46
|
+
const testModeExample = primaryOp
|
|
47
|
+
? ` ent <- Sdk.${eFn} sdk VNoval
|
|
48
|
+
arg <- ${testArgExpr}
|
|
49
|
+
ctrl <- emptyMap
|
|
50
|
+
-- Entity ops return the bare record and raise on error.
|
|
51
|
+
${eFn} <- Sdk.e${primaryOp.charAt(0).toUpperCase() + primaryOp.slice(1)} ent arg ctrl
|
|
52
|
+
print ${eFn}`
|
|
53
|
+
: ` args <- jo [("path", VStr "/api/resource"), ("method", VStr "GET")]
|
|
54
|
+
result <- F.direct sdk args
|
|
55
|
+
print result`
|
|
56
|
+
|
|
57
|
+
const apikeyEnvLine = isAuthActive(model)
|
|
58
|
+
? `\n${envName(model)}_APIKEY=<your-key>`
|
|
59
|
+
: ''
|
|
60
|
+
|
|
61
|
+
Content(`### Make a direct HTTP request
|
|
62
|
+
|
|
63
|
+
For endpoints not covered by entity accessors, use \`direct\` — it never
|
|
64
|
+
raises and returns a result \`Value\` you branch on via its \`ok\` field:
|
|
65
|
+
|
|
66
|
+
\`\`\`haskell
|
|
67
|
+
import qualified SdkClient as Sdk
|
|
68
|
+
import qualified SdkFeatures as F
|
|
69
|
+
import VoxgigStruct (Value (..))
|
|
70
|
+
import SdkHelpers (jo, getp)
|
|
71
|
+
|
|
72
|
+
main :: IO ()
|
|
73
|
+
main = do
|
|
74
|
+
sdk <- Sdk.newSdk0
|
|
75
|
+
params <- jo [("id", VStr "example")]
|
|
76
|
+
args <- jo [("path", VStr "/api/resource/{id}"), ("method", VStr "GET"), ("params", params)]
|
|
77
|
+
result <- F.direct sdk args
|
|
78
|
+
ok <- getp result "ok"
|
|
79
|
+
case ok of
|
|
80
|
+
VBool True -> do
|
|
81
|
+
status <- getp result "status" -- e.g. VNum 200
|
|
82
|
+
body <- getp result "data" -- the response body
|
|
83
|
+
print (status, body)
|
|
84
|
+
_ -> do
|
|
85
|
+
-- A non-2xx response carries status + data (the error body); a
|
|
86
|
+
-- transport-level failure carries err instead.
|
|
87
|
+
status <- getp result "status"
|
|
88
|
+
err <- getp result "err"
|
|
89
|
+
print (status, err)
|
|
90
|
+
\`\`\`
|
|
91
|
+
|
|
92
|
+
### Prepare a request without sending it
|
|
93
|
+
|
|
94
|
+
\`\`\`haskell
|
|
95
|
+
import qualified SdkClient as Sdk
|
|
96
|
+
import qualified SdkFeatures as F
|
|
97
|
+
import VoxgigStruct (Value (..))
|
|
98
|
+
import SdkHelpers (jo, getp)
|
|
99
|
+
|
|
100
|
+
main :: IO ()
|
|
101
|
+
main = do
|
|
102
|
+
sdk <- Sdk.newSdk0
|
|
103
|
+
params <- jo [("id", VStr "example")]
|
|
104
|
+
args <- jo [("path", VStr "/api/resource/{id}"), ("method", VStr "DELETE"), ("params", params)]
|
|
105
|
+
-- prepare returns the fetch definition and raises on error.
|
|
106
|
+
fetchdef <- F.prepare sdk args
|
|
107
|
+
url <- getp fetchdef "url"
|
|
108
|
+
method <- getp fetchdef "method"
|
|
109
|
+
print (url, method)
|
|
110
|
+
\`\`\`
|
|
111
|
+
|
|
112
|
+
### Use test mode
|
|
113
|
+
|
|
114
|
+
Create a mock client for unit testing — no server required:
|
|
115
|
+
|
|
116
|
+
\`\`\`haskell
|
|
117
|
+
import qualified SdkClient as Sdk
|
|
118
|
+
import qualified SdkFeatures as F
|
|
119
|
+
import VoxgigStruct (Value (..), emptyMap)
|
|
120
|
+
import SdkHelpers (jo)
|
|
121
|
+
|
|
122
|
+
main :: IO ()
|
|
123
|
+
main = do
|
|
124
|
+
sdk <- Sdk.testSdk0
|
|
125
|
+
${testModeExample}
|
|
126
|
+
\`\`\`
|
|
127
|
+
|
|
128
|
+
### Use a custom fetch function
|
|
129
|
+
|
|
130
|
+
Replace the HTTP transport with your own \`VFunc\` under \`system.fetch\`:
|
|
131
|
+
|
|
132
|
+
\`\`\`haskell
|
|
133
|
+
import qualified SdkClient as Sdk
|
|
134
|
+
import VoxgigStruct (Value (..))
|
|
135
|
+
import SdkHelpers (jo, jsonThunk)
|
|
136
|
+
|
|
137
|
+
customClient :: IO Sdk.Client
|
|
138
|
+
customClient = do
|
|
139
|
+
let mockFetch = VFunc (\\_ _ _ _ -> do
|
|
140
|
+
body <- jo [("id", VStr "mock01")]
|
|
141
|
+
jo [("status", VNum 200), ("statusText", VStr "OK"), ("json", jsonThunk body)])
|
|
142
|
+
sys <- jo [("fetch", mockFetch)]
|
|
143
|
+
opts <- jo [("base", VStr "http://localhost:8080"), ("system", sys)]
|
|
144
|
+
Sdk.newSdk opts
|
|
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 the suite (stock GHC, no third-party dependencies):
|
|
156
|
+
|
|
157
|
+
\`\`\`bash
|
|
158
|
+
cd ${target.name} && make test
|
|
159
|
+
\`\`\`
|
|
160
|
+
|
|
161
|
+
`)
|
|
162
|
+
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
export {
|
|
167
|
+
ReadmeHowto
|
|
168
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
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 from a source checkout with the bundled Makefile (stock GHC, no
|
|
15
|
+
third-party dependencies — only the GHC boot libraries):
|
|
16
|
+
|
|
17
|
+
\`\`\`bash
|
|
18
|
+
cd ${target.name} && make test
|
|
19
|
+
\`\`\`
|
|
20
|
+
|
|
21
|
+
`)
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Publish pending: not yet on Hackage. Build from the git release tag or
|
|
26
|
+
// from a local source checkout. The runtime is dependency-free, so no cabal
|
|
27
|
+
// solve is needed — the Makefile drives stock GHC directly.
|
|
28
|
+
const { releasesUrl } = repoInfo(model)
|
|
29
|
+
Content(`This package is not yet published to Hackage. Install it from the GitHub
|
|
30
|
+
release tag (\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl})) or
|
|
31
|
+
from a source checkout. The runtime has no third-party dependencies (only the
|
|
32
|
+
GHC boot libraries: \`base\`, \`containers\`, \`array\`, \`time\`), so the
|
|
33
|
+
bundled Makefile drives stock GHC with no cabal solve:
|
|
34
|
+
|
|
35
|
+
\`\`\`bash
|
|
36
|
+
cd ${target.name} && make test
|
|
37
|
+
\`\`\`
|
|
38
|
+
|
|
39
|
+
A \`.cabal\` file is also generated for use with \`cabal\`/\`stack\`:
|
|
40
|
+
|
|
41
|
+
\`\`\`bash
|
|
42
|
+
cd ${target.name} && cabal build
|
|
43
|
+
\`\`\`
|
|
44
|
+
|
|
45
|
+
`)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
export {
|
|
50
|
+
ReadmeInstall
|
|
51
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
import { hsVarName } from './utility_haskell'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
const ReadmeIntro = cmp(function ReadmeIntro(props: any) {
|
|
14
|
+
const { target, ctx$: { model } } = props
|
|
15
|
+
const info = (model.main && model.main.kit && model.main.kit.info) || {}
|
|
16
|
+
const tagline = info.tagline || ''
|
|
17
|
+
|
|
18
|
+
Content(`# ${model.Name} ${target.title} SDK
|
|
19
|
+
|
|
20
|
+
${tagline}
|
|
21
|
+
|
|
22
|
+
The ${target.title} SDK for the ${model.Name} API — an entity-oriented client following idiomatic Haskell conventions (pure functions, explicit \`IO\`, and the dependency-free vendored \`Value\` struct model).
|
|
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 \`${hsVarName(exampleEntity.name)} sdk VNoval\` — 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) => '`e' + o.charAt(0).toUpperCase() + o.slice(1) + '`').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,160 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { hsVarName } from './utility_haskell'
|
|
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 record interface: emit a row
|
|
19
|
+
// only for operations at least one active entity actually exposes.
|
|
20
|
+
const opUnion = new Set<string>()
|
|
21
|
+
entityList.forEach((e: any) => Object.keys(e.op || {})
|
|
22
|
+
.forEach((o: string) => { if (e.op[o] && e.op[o].active !== false) opUnion.add(o) }))
|
|
23
|
+
const opRowDefs: Record<string, string> = {
|
|
24
|
+
load: '| `eLoad` | `Value -> Value -> IO Value` | Load a single entity by match criteria. Raises on error. |',
|
|
25
|
+
list: '| `eList` | `Value -> Value -> IO Value` | List entities matching the criteria. Raises on error. |',
|
|
26
|
+
create: '| `eCreate` | `Value -> Value -> IO Value` | Create a new entity. Raises on error. |',
|
|
27
|
+
update: '| `eUpdate` | `Value -> Value -> IO Value` | Update an existing entity. Raises on error. |',
|
|
28
|
+
remove: '| `eRemove` | `Value -> Value -> IO Value` | Remove an entity. Raises on error. |',
|
|
29
|
+
}
|
|
30
|
+
const opRows = ['load', 'list', 'create', 'update', 'remove']
|
|
31
|
+
.filter((o) => opUnion.has(o)).map((o) => opRowDefs[o]).join('\n')
|
|
32
|
+
|
|
33
|
+
const apikeyOptionRow = isAuthActive(model)
|
|
34
|
+
? '| `apikey` | `String` | API key for authentication. |\n'
|
|
35
|
+
: ''
|
|
36
|
+
|
|
37
|
+
Content(`### Client constructors
|
|
38
|
+
|
|
39
|
+
\`\`\`haskell
|
|
40
|
+
import qualified SdkClient as Sdk
|
|
41
|
+
import VoxgigStruct (Value (..))
|
|
42
|
+
import SdkHelpers (jo)
|
|
43
|
+
|
|
44
|
+
makeClient :: IO Sdk.Client
|
|
45
|
+
makeClient = do
|
|
46
|
+
opts <- jo [("base", VStr "https://api.example.com")]
|
|
47
|
+
Sdk.newSdk opts
|
|
48
|
+
\`\`\`
|
|
49
|
+
|
|
50
|
+
\`newSdk :: Value -> IO Client\` constructs a client from an options map;
|
|
51
|
+
\`newSdk0 :: IO Client\` is the no-argument convenience form.
|
|
52
|
+
|
|
53
|
+
| Option (map key) | Type | Description |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
${apikeyOptionRow}| \`base\` | \`String\` | Base URL of the API server. |
|
|
56
|
+
| \`prefix\` | \`String\` | URL path prefix prepended to all requests. |
|
|
57
|
+
| \`suffix\` | \`String\` | URL path suffix appended to all requests. |
|
|
58
|
+
| \`headers\` | \`Value\` | Custom headers for all requests. |
|
|
59
|
+
| \`feature\` | \`Value\` | Feature activation flags. |
|
|
60
|
+
| \`system\` | \`Value\` | System overrides (e.g. custom \`fetch\` function). |
|
|
61
|
+
|
|
62
|
+
### Test client
|
|
63
|
+
|
|
64
|
+
\`\`\`haskell
|
|
65
|
+
client <- Sdk.testSdk testopts sdkopts
|
|
66
|
+
\`\`\`
|
|
67
|
+
|
|
68
|
+
\`testSdk :: Value -> Value -> IO Client\` constructs a test-mode client with
|
|
69
|
+
mock transport (\`testSdk0 :: IO Client\` for the no-argument form). Pass
|
|
70
|
+
\`VNoval\` for defaults.
|
|
71
|
+
|
|
72
|
+
### Client functions
|
|
73
|
+
|
|
74
|
+
| Function | Signature | Description |
|
|
75
|
+
| --- | --- | --- |
|
|
76
|
+
| \`newSdk\` | \`Value -> IO Client\` | Construct a live client from options. |
|
|
77
|
+
| \`newSdk0\` | \`IO Client\` | Construct a live client with defaults. |
|
|
78
|
+
| \`testSdk\` | \`Value -> Value -> IO Client\` | Construct a test-mode client. |
|
|
79
|
+
| \`prepare\` | \`Client -> Value -> IO Value\` | Build an HTTP request definition without sending. Raises on error. |
|
|
80
|
+
| \`direct\` | \`Client -> Value -> IO Value\` | Build and send an HTTP request. Returns a result \`Value\` (branch on \`ok\`). |
|
|
81
|
+
`)
|
|
82
|
+
|
|
83
|
+
each(entityList, (ent: any) => {
|
|
84
|
+
const eFn = hsVarName(ent.name)
|
|
85
|
+
const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
|
|
86
|
+
Content(`| \`${eFn}\` | \`Client -> Value -> IO Entity\` | Create ${article} ${ent.Name} entity instance. |
|
|
87
|
+
`)
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
Content(`
|
|
91
|
+
### Entity interface
|
|
92
|
+
|
|
93
|
+
All entities share the same record interface (fields of the \`Entity\` type).
|
|
94
|
+
|
|
95
|
+
| Field | Signature | Description |
|
|
96
|
+
| --- | --- | --- |
|
|
97
|
+
${opRows}
|
|
98
|
+
| \`eDataGet\` | \`IO Value\` | Get entity data. |
|
|
99
|
+
| \`eDataSet\` | \`Value -> IO ()\` | Set entity data. |
|
|
100
|
+
| \`eStream\` | \`String -> Value -> Value -> IO [Value]\` | Run an op as a lazy stream of items. |
|
|
101
|
+
| \`eMake\` | \`IO Entity\` | Create a new instance with the same options. |
|
|
102
|
+
| \`eName\` | \`String\` | The entity name. |
|
|
103
|
+
|
|
104
|
+
### Result shape
|
|
105
|
+
|
|
106
|
+
Entity operations return the bare result \`Value\` (a map for single-entity
|
|
107
|
+
ops, a list for \`eList\`) and raise on error. Wrap calls in
|
|
108
|
+
\`Control.Exception.try\` to handle failures.
|
|
109
|
+
|
|
110
|
+
The \`direct\` escape hatch never raises — it returns a result \`Value\`
|
|
111
|
+
you branch on via its \`ok\` field (read with \`getp result "ok"\`):
|
|
112
|
+
|
|
113
|
+
| Key | Type | Description |
|
|
114
|
+
| --- | --- | --- |
|
|
115
|
+
| \`ok\` | \`Bool\` | \`True\` if the HTTP status is 2xx. |
|
|
116
|
+
| \`status\` | \`Int\` | HTTP status code. |
|
|
117
|
+
| \`headers\` | \`Value\` | Response headers. |
|
|
118
|
+
| \`data\` | \`Value\` | Parsed JSON response body. |
|
|
119
|
+
|
|
120
|
+
On error, \`ok\` is \`False\` and \`err\` carries the error value.
|
|
121
|
+
|
|
122
|
+
`)
|
|
123
|
+
|
|
124
|
+
// Entities summary
|
|
125
|
+
Content(`### Entities
|
|
126
|
+
|
|
127
|
+
`)
|
|
128
|
+
each(entityList, (ent: any) => {
|
|
129
|
+
const fields = ent.fields || []
|
|
130
|
+
const opnames = Object.keys(ent.op || {})
|
|
131
|
+
const ops = ent.op || {}
|
|
132
|
+
const points = each(ops).map((op: any) =>
|
|
133
|
+
op.points ? each(op.points) : []
|
|
134
|
+
).flat()
|
|
135
|
+
const path = points.length > 0 ? (points[0] as any).orig || '' : ''
|
|
136
|
+
|
|
137
|
+
Content(`#### ${ent.Name}
|
|
138
|
+
|
|
139
|
+
| Field | Description |
|
|
140
|
+
| --- | --- |
|
|
141
|
+
`)
|
|
142
|
+
each(fields, (field: any) => {
|
|
143
|
+
Content(`| \`${field.name}\` | ${field.short || ''} |
|
|
144
|
+
`)
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
Content(`
|
|
148
|
+
Operations: ${opnames.map((n: string) => n.charAt(0).toUpperCase() + n.slice(1)).join(', ')}.
|
|
149
|
+
|
|
150
|
+
API path: \`${path}\`
|
|
151
|
+
|
|
152
|
+
`)
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
export {
|
|
159
|
+
ReadmeModel
|
|
160
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
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
|
+
const authActive = isAuthActive(model)
|
|
16
|
+
|
|
17
|
+
Content(`
|
|
18
|
+
|
|
19
|
+
## Options
|
|
20
|
+
|
|
21
|
+
Pass an options \`Value\` (built with \`jo\`) when constructing a client. Any
|
|
22
|
+
option may be omitted; the entries below are illustrative.
|
|
23
|
+
|
|
24
|
+
`)
|
|
25
|
+
|
|
26
|
+
if (authActive) {
|
|
27
|
+
Content(`\`\`\`haskell
|
|
28
|
+
import qualified SdkClient as Sdk
|
|
29
|
+
import VoxgigStruct (Value (..))
|
|
30
|
+
import SdkHelpers (jo)
|
|
31
|
+
|
|
32
|
+
makeClient :: IO Sdk.Client
|
|
33
|
+
makeClient = do
|
|
34
|
+
-- Read the API key from the ${envName(model)}_APIKEY environment variable.
|
|
35
|
+
opts <- jo [("apikey", VStr "your-api-key")]
|
|
36
|
+
Sdk.newSdk opts
|
|
37
|
+
\`\`\`
|
|
38
|
+
|
|
39
|
+
`)
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
Content(`\`\`\`haskell
|
|
43
|
+
import qualified SdkClient as Sdk
|
|
44
|
+
import VoxgigStruct (Value (..))
|
|
45
|
+
import SdkHelpers (jo)
|
|
46
|
+
|
|
47
|
+
makeClient :: IO Sdk.Client
|
|
48
|
+
makeClient = do
|
|
49
|
+
opts <- jo [("base", VStr "https://api.example.com")]
|
|
50
|
+
Sdk.newSdk opts
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
`)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
Content(`Every published option:
|
|
57
|
+
|
|
58
|
+
| Option | Type | Description |
|
|
59
|
+
| --- | --- | --- |
|
|
60
|
+
`)
|
|
61
|
+
|
|
62
|
+
publishedOptions.map((option: any) => {
|
|
63
|
+
Content(`| \`${option.name}\` | \`${option.kind}\` | ${option.short} |
|
|
64
|
+
`)
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
Content(`
|
|
68
|
+
`)
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
export {
|
|
73
|
+
ReadmeOptions
|
|
74
|
+
}
|