@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,51 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, 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
|
+
const { origin, repo, repoUrl, releasesUrl } = repoInfo(model)
|
|
9
|
+
|
|
10
|
+
if (isPublished(model, target.name)) {
|
|
11
|
+
// Live on Clojars: add the published coordinate to deps.edn.
|
|
12
|
+
Content(`Add the dependency to your \`deps.edn\`:
|
|
13
|
+
|
|
14
|
+
\`\`\`clojure
|
|
15
|
+
;; deps.edn
|
|
16
|
+
{:deps {org.clojars.${origin}/${repo} {:mvn/version "X.Y.Z"}}}
|
|
17
|
+
\`\`\`
|
|
18
|
+
|
|
19
|
+
`)
|
|
20
|
+
return
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Publish pending: not yet on Clojars. Depend on the library directly from
|
|
24
|
+
// the GitHub release tag, or from a local checkout via :local/root.
|
|
25
|
+
Content(`This package is not yet published to Clojars. Depend on it directly from the
|
|
26
|
+
GitHub release tag (\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl})),
|
|
27
|
+
using a \`tools.deps\` git dependency:
|
|
28
|
+
|
|
29
|
+
\`\`\`clojure
|
|
30
|
+
;; deps.edn
|
|
31
|
+
{:deps {${model.const.Name.toLowerCase()}/sdk
|
|
32
|
+
{:git/url "${repoUrl}"
|
|
33
|
+
:git/tag "${target.name}/vX.Y.Z"
|
|
34
|
+
:git/sha "..."
|
|
35
|
+
:deps/root "${target.name}"}}}
|
|
36
|
+
\`\`\`
|
|
37
|
+
|
|
38
|
+
Or from a local source checkout:
|
|
39
|
+
|
|
40
|
+
\`\`\`clojure
|
|
41
|
+
;; deps.edn
|
|
42
|
+
{:deps {${model.const.Name.toLowerCase()}/sdk {:local/root "../${target.name}"}}}
|
|
43
|
+
\`\`\`
|
|
44
|
+
|
|
45
|
+
`)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
export {
|
|
50
|
+
ReadmeInstall
|
|
51
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
const ReadmeIntro = cmp(function ReadmeIntro(props: any) {
|
|
11
|
+
const { target, ctx$: { model } } = props
|
|
12
|
+
const info = (model.main && model.main.kit && model.main.kit.info) || {}
|
|
13
|
+
const tagline = info.tagline || ''
|
|
14
|
+
|
|
15
|
+
Content(`# ${model.Name} ${target.title} SDK
|
|
16
|
+
|
|
17
|
+
${tagline}
|
|
18
|
+
|
|
19
|
+
The ${target.title} SDK for the ${model.Name} API — an entity-oriented client
|
|
20
|
+
following idiomatic Clojure conventions (plain functions, immutable data, and
|
|
21
|
+
the vendored \`voxgig.struct\` value model).
|
|
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 entity = getModelPath(model, `main.${KIT}.entity`)
|
|
30
|
+
const exampleEntity = Object.values(entity || {})
|
|
31
|
+
.find((e: any) => e.active !== false) as any
|
|
32
|
+
const example = exampleEntity
|
|
33
|
+
? `for example \`(api/${exampleEntity.name} client nil)\` — each`
|
|
34
|
+
: 'each'
|
|
35
|
+
|
|
36
|
+
// Model-driven op list — only the operations the active entities actually
|
|
37
|
+
// expose (a read-only entity has just list+load); never claim
|
|
38
|
+
// create/update/remove exist when no entity has them.
|
|
39
|
+
const CANON_OPS = ['list', 'load', 'create', 'update', 'remove']
|
|
40
|
+
const opSet = new Set<string>()
|
|
41
|
+
Object.values(entity || {}).forEach((e: any) => {
|
|
42
|
+
if (!e || e.active === false) return
|
|
43
|
+
Object.keys(e.op || {}).forEach((o: string) => {
|
|
44
|
+
if (e.op[o] && e.op[o].active !== false) opSet.add(o)
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
const opNames = CANON_OPS.filter((o) => opSet.has(o))
|
|
48
|
+
.concat([...opSet].filter((o) => !CANON_OPS.includes(o)))
|
|
49
|
+
const opList = (opNames.length ? opNames : ['list', 'load'])
|
|
50
|
+
.map((o) => '`' + o + '`').join(', ')
|
|
51
|
+
|
|
52
|
+
Content(`The SDK exposes the API as capitalised, semantic **Entities** — ${example}
|
|
53
|
+
carrying a small, uniform set of operations (${opList}) instead of raw URL
|
|
54
|
+
paths and query strings. You work with named resources and verbs, which
|
|
55
|
+
keeps the cognitive load low.
|
|
56
|
+
|
|
57
|
+
> Other languages, the CLI, and MCP server live alongside this one — see
|
|
58
|
+
> the [top-level README](../README.md).
|
|
59
|
+
|
|
60
|
+
`)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
export {
|
|
65
|
+
ReadmeIntro
|
|
66
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
const ReadmeModel = cmp(function ReadmeModel(props: any) {
|
|
11
|
+
const { target, ctx$: { model } } = props
|
|
12
|
+
|
|
13
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
14
|
+
const entityList = each(entity).filter((e: any) => e.active !== false)
|
|
15
|
+
|
|
16
|
+
// Model-driven op rows for the shared entity interface: emit a row only for
|
|
17
|
+
// operations at least one active entity actually exposes — never document an
|
|
18
|
+
// operation no entity has.
|
|
19
|
+
const opUnion = new Set<string>()
|
|
20
|
+
entityList.forEach((e: any) => Object.keys(e.op || {})
|
|
21
|
+
.forEach((o: string) => { if (e.op[o] && e.op[o].active !== false) opUnion.add(o) }))
|
|
22
|
+
const opRowDefs: Record<string, string> = {
|
|
23
|
+
load: '| `load` | `(ent reqmatch ctrl) -> map` | Load a single entity by match criteria. Raises on error. |',
|
|
24
|
+
list: '| `list` | `(ent reqmatch ctrl) -> vector` | List entities matching the criteria. Raises on error. |',
|
|
25
|
+
create: '| `create` | `(ent reqdata ctrl) -> map` | Create a new entity. Raises on error. |',
|
|
26
|
+
update: '| `update` | `(ent reqdata ctrl) -> map` | Update an existing entity. Raises on error. |',
|
|
27
|
+
remove: '| `remove` | `(ent reqmatch ctrl) -> map` | Remove an entity. Raises on error. |',
|
|
28
|
+
}
|
|
29
|
+
const opRows = ['load', 'list', 'create', 'update', 'remove']
|
|
30
|
+
.filter((o) => opUnion.has(o)).map((o) => opRowDefs[o]).join('\n')
|
|
31
|
+
|
|
32
|
+
const apikeyOptionRow = isAuthActive(model)
|
|
33
|
+
? '| `apikey` | `string` | API key for authentication. |\n'
|
|
34
|
+
: ''
|
|
35
|
+
|
|
36
|
+
Content(`### make-sdk
|
|
37
|
+
|
|
38
|
+
\`\`\`clojure
|
|
39
|
+
(require '[sdk.api :as api]
|
|
40
|
+
'[voxgig.struct :as vs])
|
|
41
|
+
|
|
42
|
+
(def client (api/make-sdk options))
|
|
43
|
+
\`\`\`
|
|
44
|
+
|
|
45
|
+
Creates a new SDK client. \`options\` is a \`voxgig.struct\` map (or \`nil\`).
|
|
46
|
+
|
|
47
|
+
| Option | Type | Description |
|
|
48
|
+
| --- | --- | --- |
|
|
49
|
+
${apikeyOptionRow}| \`base\` | \`string\` | Base URL of the API server. |
|
|
50
|
+
| \`prefix\` | \`string\` | URL path prefix prepended to all requests. |
|
|
51
|
+
| \`suffix\` | \`string\` | URL path suffix appended to all requests. |
|
|
52
|
+
| \`feature\` | \`map\` | Feature activation flags. |
|
|
53
|
+
| \`extend\` | \`vector\` | Additional feature atoms to load. |
|
|
54
|
+
| \`system\` | \`map\` | System overrides (e.g. custom \`fetch\` fn). |
|
|
55
|
+
|
|
56
|
+
### test-sdk
|
|
57
|
+
|
|
58
|
+
\`\`\`clojure
|
|
59
|
+
(def client (api/test-sdk testopts sdkopts))
|
|
60
|
+
\`\`\`
|
|
61
|
+
|
|
62
|
+
Creates a test-mode client with mock transport. Both arguments may be \`nil\`.
|
|
63
|
+
|
|
64
|
+
### Client functions
|
|
65
|
+
|
|
66
|
+
| Function | Signature | Description |
|
|
67
|
+
| --- | --- | --- |
|
|
68
|
+
| \`options-map\` | \`(client) -> map\` | Deep copy of current SDK options. |
|
|
69
|
+
| \`get-utility\` | \`(client) -> utility\` | Copy of the SDK utility object. |
|
|
70
|
+
| \`prepare\` | \`(client fetchargs) -> map\` | Build an HTTP request definition without sending. Raises on error. |
|
|
71
|
+
| \`direct\` | \`(client fetchargs) -> map\` | Build and send an HTTP request. Returns a result map (branch on \`ok\`). |
|
|
72
|
+
`)
|
|
73
|
+
|
|
74
|
+
each(entityList, (ent: any) => {
|
|
75
|
+
const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
|
|
76
|
+
Content(`| \`${ent.name}\` | \`(client data) -> ${ent.Name} entity\` | Create ${article} ${ent.Name} entity instance. |
|
|
77
|
+
`)
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
Content(`
|
|
81
|
+
### Entity interface
|
|
82
|
+
|
|
83
|
+
All entities share the same interface. Operations are functions in the
|
|
84
|
+
entity namespace (\`sdk.entity.<name>\`); state accessors are stored on the
|
|
85
|
+
entity map and are called via keyword lookup.
|
|
86
|
+
|
|
87
|
+
| Member | Signature | Description |
|
|
88
|
+
| --- | --- | --- |
|
|
89
|
+
${opRows}
|
|
90
|
+
| \`:data-get\` | \`() -> map\` | Get entity data. |
|
|
91
|
+
| \`:data-set\` | \`(data)\` | Set entity data. |
|
|
92
|
+
| \`:match-get\` | \`() -> map\` | Get entity match criteria. |
|
|
93
|
+
| \`:match-set\` | \`(match)\` | Set entity match criteria. |
|
|
94
|
+
| \`:make\` | \`() -> entity\` | Create a new instance with the same options. |
|
|
95
|
+
| \`:get-name\` | \`() -> string\` | Return the entity name. |
|
|
96
|
+
|
|
97
|
+
State accessors are called by looking up the fn and applying it, e.g.
|
|
98
|
+
\`((:data-get ent))\` or \`((:data-set ent) (vs/jm "k" "v"))\`.
|
|
99
|
+
|
|
100
|
+
### Result shape
|
|
101
|
+
|
|
102
|
+
Entity operations return the bare result data (a \`map\` for single-entity
|
|
103
|
+
ops, a \`vector\` for \`list\`) and raise (via \`ex-info\`) on error. Wrap
|
|
104
|
+
calls in \`try\`/\`catch\` to handle failures.
|
|
105
|
+
|
|
106
|
+
The \`direct\` escape hatch never raises — it returns a result \`map\` you
|
|
107
|
+
branch on via \`(vs/getprop result "ok")\`:
|
|
108
|
+
|
|
109
|
+
| Key | Type | Description |
|
|
110
|
+
| --- | --- | --- |
|
|
111
|
+
| \`ok\` | \`boolean\` | \`true\` if the HTTP status is 2xx. |
|
|
112
|
+
| \`status\` | \`long\` | HTTP status code. |
|
|
113
|
+
| \`headers\` | \`map\` | Response headers. |
|
|
114
|
+
| \`data\` | \`any\` | Parsed JSON response body. |
|
|
115
|
+
|
|
116
|
+
On error, \`ok\` is \`false\` and \`err\` contains the error value.
|
|
117
|
+
|
|
118
|
+
`)
|
|
119
|
+
|
|
120
|
+
// Entities summary
|
|
121
|
+
Content(`### Entities
|
|
122
|
+
|
|
123
|
+
`)
|
|
124
|
+
each(entityList, (ent: any) => {
|
|
125
|
+
const fields = ent.fields || []
|
|
126
|
+
const opnames = Object.keys(ent.op || {})
|
|
127
|
+
const ops = ent.op || {}
|
|
128
|
+
const points = each(ops).map((op: any) =>
|
|
129
|
+
op.points ? each(op.points) : []
|
|
130
|
+
).flat()
|
|
131
|
+
const path = points.length > 0 ? (points[0] as any).orig || '' : ''
|
|
132
|
+
|
|
133
|
+
Content(`#### ${ent.Name}
|
|
134
|
+
|
|
135
|
+
| Field | Description |
|
|
136
|
+
| --- | --- |
|
|
137
|
+
`)
|
|
138
|
+
each(fields, (field: any) => {
|
|
139
|
+
Content(`| \`${field.name}\` | ${field.short || ''} |
|
|
140
|
+
`)
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
Content(`
|
|
144
|
+
Operations: ${opnames.map((n: string) => n.charAt(0).toUpperCase() + n.slice(1)).join(', ')}.
|
|
145
|
+
|
|
146
|
+
API path: \`${path}\`
|
|
147
|
+
|
|
148
|
+
`)
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
export {
|
|
155
|
+
ReadmeModel
|
|
156
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
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 a \`voxgig.struct\` map when creating a client:
|
|
20
|
+
|
|
21
|
+
`)
|
|
22
|
+
|
|
23
|
+
Content(`\`\`\`clojure
|
|
24
|
+
(def client
|
|
25
|
+
(api/make-sdk
|
|
26
|
+
(vs/jm
|
|
27
|
+
`)
|
|
28
|
+
|
|
29
|
+
publishedOptions.map((option: any) => {
|
|
30
|
+
if ('apikey' === option.name) {
|
|
31
|
+
Content(` "${option.name}" (System/getenv "${envName(model)}_APIKEY")
|
|
32
|
+
`)
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
Content(` ;; "${option.name}" ${option.kind === 'string' ? '"..."' : '...'}
|
|
36
|
+
`)
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
Content(` )))
|
|
41
|
+
\`\`\`
|
|
42
|
+
|
|
43
|
+
`)
|
|
44
|
+
|
|
45
|
+
Content(`| Option | Type | Description |
|
|
46
|
+
| --- | --- | --- |
|
|
47
|
+
`)
|
|
48
|
+
|
|
49
|
+
publishedOptions.map((option: any) => {
|
|
50
|
+
Content(`| \`${option.name}\` | \`${option.kind}\` | ${option.short} |
|
|
51
|
+
`)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
Content(`
|
|
55
|
+
`)
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
export {
|
|
60
|
+
ReadmeOptions
|
|
61
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
|
|
11
|
+
const { target, ctx$: { model } } = props
|
|
12
|
+
|
|
13
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
14
|
+
|
|
15
|
+
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
16
|
+
|
|
17
|
+
// Find a nested entity if available: one with a parent chain, an active load
|
|
18
|
+
// op, and a required non-id load param to demonstrate (the parent key).
|
|
19
|
+
const nestedEntity = Object.values(entity).find((e: any) =>
|
|
20
|
+
e.active !== false &&
|
|
21
|
+
e.relations && e.relations.ancestors && 0 < e.relations.ancestors.length &&
|
|
22
|
+
entityOps(e).includes('load') &&
|
|
23
|
+
opRequestShape(e, 'load').items.some((it: any) =>
|
|
24
|
+
!it.optional && it.name !== entityIdField(e))
|
|
25
|
+
) as any
|
|
26
|
+
|
|
27
|
+
const authActive = isAuthActive(model)
|
|
28
|
+
const ctor = authActive
|
|
29
|
+
? `(api/make-sdk (vs/jm "apikey" (System/getenv "${envName(model)}_APIKEY")))`
|
|
30
|
+
: `(api/make-sdk nil)`
|
|
31
|
+
|
|
32
|
+
// A type-correct Clojure literal for a param.
|
|
33
|
+
const cljLit = (type: any, placeholder: string = 'example'): string => {
|
|
34
|
+
const k = canonKey(type)
|
|
35
|
+
if ('INTEGER' === k || 'NUMBER' === k) return '1'
|
|
36
|
+
if ('BOOLEAN' === k) return 'true'
|
|
37
|
+
if ('ARRAY' === k) return '(vs/jt)'
|
|
38
|
+
if ('OBJECT' === k) return '(vs/jm)'
|
|
39
|
+
return `"${placeholder}"`
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Requires for block 1: the api ns, struct, plus every entity namespace the
|
|
43
|
+
// quickstart references.
|
|
44
|
+
const requireLines = ["(require '[sdk.api :as api]"]
|
|
45
|
+
if (exampleEntity) {
|
|
46
|
+
requireLines.push(` '[sdk.entity.${exampleEntity.name} :as e-${exampleEntity.name}]`)
|
|
47
|
+
}
|
|
48
|
+
if (nestedEntity && (!exampleEntity || nestedEntity.name !== exampleEntity.name)) {
|
|
49
|
+
requireLines.push(` '[sdk.entity.${nestedEntity.name} :as e-${nestedEntity.name}]`)
|
|
50
|
+
}
|
|
51
|
+
requireLines.push(` '[voxgig.struct :as vs])`)
|
|
52
|
+
|
|
53
|
+
Content(`### 1. Create a client
|
|
54
|
+
|
|
55
|
+
\`\`\`clojure
|
|
56
|
+
${requireLines.join('\n')}
|
|
57
|
+
|
|
58
|
+
(def client ${ctor})
|
|
59
|
+
\`\`\`
|
|
60
|
+
|
|
61
|
+
`)
|
|
62
|
+
|
|
63
|
+
if (exampleEntity) {
|
|
64
|
+
const eLow = exampleEntity.name
|
|
65
|
+
const article = /^[aeiou]/i.test(eLow) ? 'an' : 'a'
|
|
66
|
+
const opnames = entityOps(exampleEntity)
|
|
67
|
+
// `idF` is the entity's id-like MATCH field; `dataIdF` is the id on the
|
|
68
|
+
// RETURNED record's data type.
|
|
69
|
+
const idF = entityIdField(exampleEntity)
|
|
70
|
+
const dataIdF = entityDataIdField(exampleEntity)
|
|
71
|
+
|
|
72
|
+
if (opnames.includes('list')) {
|
|
73
|
+
Content(`### 2. List ${eLow} records
|
|
74
|
+
|
|
75
|
+
\`list\` returns a vector of records (each a map) and raises on error —
|
|
76
|
+
iterate it directly.
|
|
77
|
+
|
|
78
|
+
\`\`\`clojure
|
|
79
|
+
(try
|
|
80
|
+
(doseq [${eLow} (e-${eLow}/list (api/${eLow} client nil) nil nil)]
|
|
81
|
+
(println ${eLow}))
|
|
82
|
+
(catch Exception err
|
|
83
|
+
(println "list failed:" (.getMessage err))))
|
|
84
|
+
\`\`\`
|
|
85
|
+
|
|
86
|
+
`)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (nestedEntity) {
|
|
90
|
+
const neLow = nestedEntity.name
|
|
91
|
+
const neArticle = /^[aeiou]/i.test(neLow) ? 'an' : 'a'
|
|
92
|
+
|
|
93
|
+
// Model-driven match: every REQUIRED load-match key. Parent keys first,
|
|
94
|
+
// the entity's own id last.
|
|
95
|
+
const neIdF = entityIdField(nestedEntity)
|
|
96
|
+
const neRequired = opRequestShape(nestedEntity, 'load').items
|
|
97
|
+
.filter((it: any) => !it.optional)
|
|
98
|
+
.sort((a: any, b: any) =>
|
|
99
|
+
(a.name === neIdF ? 1 : 0) - (b.name === neIdF ? 1 : 0))
|
|
100
|
+
const parentItem = neRequired.find((it: any) => it.name !== neIdF) as any
|
|
101
|
+
const parentParam = parentItem && parentItem.name
|
|
102
|
+
const parentName = parentParam ? parentParam.replace(/_id$/, '') : 'its parent'
|
|
103
|
+
const neMatch = neRequired.map((it: any) =>
|
|
104
|
+
`"${it.name}" ${cljLit(it.type,
|
|
105
|
+
it.name === neIdF ? 'example_id' : 'example_' + it.name)}`)
|
|
106
|
+
|
|
107
|
+
Content(`### 3. Load ${neArticle} ${neLow}
|
|
108
|
+
|
|
109
|
+
${nestedEntity.Name} is nested under ${parentName}, so provide the
|
|
110
|
+
\`${parentParam}\`. \`load\` returns the bare record (a map) and raises on error.
|
|
111
|
+
|
|
112
|
+
\`\`\`clojure
|
|
113
|
+
(try
|
|
114
|
+
(let [${neLow} (e-${neLow}/load (api/${neLow} client nil) (vs/jm ${neMatch.join(' ')}) nil)]
|
|
115
|
+
(println ${neLow}))
|
|
116
|
+
(catch Exception err
|
|
117
|
+
(println "load failed:" (.getMessage err))))
|
|
118
|
+
\`\`\`
|
|
119
|
+
|
|
120
|
+
`)
|
|
121
|
+
}
|
|
122
|
+
else if (opnames.includes('load')) {
|
|
123
|
+
const loadRequired = opRequestShape(exampleEntity, 'load').items
|
|
124
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
125
|
+
.sort((a: any, b: any) =>
|
|
126
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
127
|
+
const loadArg = 0 < loadRequired.length
|
|
128
|
+
? `(vs/jm ${loadRequired.map((it: any) =>
|
|
129
|
+
`"${it.name}" ${cljLit(it.type,
|
|
130
|
+
it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(' ')})`
|
|
131
|
+
: 'nil'
|
|
132
|
+
|
|
133
|
+
Content(`### 3. Load ${article} ${eLow}
|
|
134
|
+
|
|
135
|
+
\`load\` returns the bare record (a map) and raises on error.
|
|
136
|
+
|
|
137
|
+
\`\`\`clojure
|
|
138
|
+
(try
|
|
139
|
+
(let [${eLow} (e-${eLow}/load (api/${eLow} client nil) ${loadArg} nil)]
|
|
140
|
+
(println ${eLow}))
|
|
141
|
+
(catch Exception err
|
|
142
|
+
(println "load failed:" (.getMessage err))))
|
|
143
|
+
\`\`\`
|
|
144
|
+
|
|
145
|
+
`)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Model-driven example fields from the op shape (opRequestShape).
|
|
149
|
+
const examplePairs = (opname: string): string[] => {
|
|
150
|
+
const items = opRequestShape(exampleEntity, opname).items
|
|
151
|
+
.filter((it: any) => (it.name !== idF && it.name !== 'id') ||
|
|
152
|
+
('create' === opname && !it.optional))
|
|
153
|
+
const required = items.filter((it: any) => !it.optional)
|
|
154
|
+
const optional = items.filter((it: any) => it.optional)
|
|
155
|
+
const chosen = 'create' === opname
|
|
156
|
+
? (required.length ? required : items.slice(0, 2))
|
|
157
|
+
: required.concat(optional).slice(0, Math.max(2, required.length))
|
|
158
|
+
return chosen.map((it: any) => `"${it.name}" ${cljLit(it.type, 'example_' + it.name)}`)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const idParamType = (opname: string): any => {
|
|
162
|
+
const it = opRequestShape(exampleEntity, opname).items.find((x: any) => x.name === idF)
|
|
163
|
+
return it && it.type
|
|
164
|
+
}
|
|
165
|
+
const idValueFor = (opname: string): string => (null != dataIdF && opnames.includes('create'))
|
|
166
|
+
? `(vs/getprop created "${dataIdF}")`
|
|
167
|
+
: cljLit(idParamType(opname), 'example_id')
|
|
168
|
+
|
|
169
|
+
if (opnames.includes('create') || opnames.includes('update') || opnames.includes('remove')) {
|
|
170
|
+
Content(`### 4. Create, update, and remove
|
|
171
|
+
|
|
172
|
+
\`\`\`clojure
|
|
173
|
+
`)
|
|
174
|
+
if (opnames.includes('create')) {
|
|
175
|
+
Content(`;; Create — returns the bare created record (a map)
|
|
176
|
+
(def created (e-${eLow}/create (api/${eLow} client nil) (vs/jm ${examplePairs('create').join(' ')}) nil))
|
|
177
|
+
|
|
178
|
+
`)
|
|
179
|
+
}
|
|
180
|
+
if (opnames.includes('update')) {
|
|
181
|
+
const updatePairs = (idF ? [`"${idF}" ${idValueFor('update')}`] : []).concat(examplePairs('update'))
|
|
182
|
+
const fromCreated = null != dataIdF && opnames.includes('create')
|
|
183
|
+
Content(`;; Update${fromCreated ? " — the created record's id is a plain map key" : ''}
|
|
184
|
+
(e-${eLow}/update (api/${eLow} client nil) (vs/jm ${updatePairs.join(' ')}) nil)
|
|
185
|
+
|
|
186
|
+
`)
|
|
187
|
+
}
|
|
188
|
+
if (opnames.includes('remove')) {
|
|
189
|
+
const removePairs = opRequestShape(exampleEntity, 'remove').items
|
|
190
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
191
|
+
.sort((a: any, b: any) =>
|
|
192
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
193
|
+
.map((it: any) => it.name === idF
|
|
194
|
+
? `"${it.name}" ${idValueFor('remove')}`
|
|
195
|
+
: `"${it.name}" ${cljLit(it.type, 'example_' + it.name)}`)
|
|
196
|
+
Content(`;; Remove
|
|
197
|
+
(e-${eLow}/remove (api/${eLow} client nil) ${removePairs.length ? `(vs/jm ${removePairs.join(' ')})` : 'nil'} nil)
|
|
198
|
+
`)
|
|
199
|
+
}
|
|
200
|
+
Content(`\`\`\`
|
|
201
|
+
|
|
202
|
+
`)
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
export {
|
|
209
|
+
ReadmeQuick
|
|
210
|
+
}
|