@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,238 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, File } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
// Emits dart/test/readme_examples_test.dart — a COMPLETENESS + PRESENCE gate
|
|
12
|
+
// over every ```dart fenced block in the three documents that ship dart
|
|
13
|
+
// examples:
|
|
14
|
+
// - the repository ROOT README.md (one directory above the dart/ package),
|
|
15
|
+
// - the per-language dart/README.md,
|
|
16
|
+
// - the per-language dart/REFERENCE.md.
|
|
17
|
+
//
|
|
18
|
+
// Unlike the interpreted-language gates (py/rb), which EXECUTE every runnable
|
|
19
|
+
// block in a subprocess, and the go gate, which COMPILES every block, this
|
|
20
|
+
// gate is a dependency-free STRUCTURAL gate that runs inside the dependency-
|
|
21
|
+
// free dart test harness (no `dart analyze`/`dart run` subprocess, so it never
|
|
22
|
+
// depends on a resolvable package_config at test time). Per document it:
|
|
23
|
+
// 1. extracts every ```dart fenced block (tagged by source doc + index);
|
|
24
|
+
// 2. classifies each block into exactly one of
|
|
25
|
+
// {runnable, illustration, compiled-nonrunnable} and asserts the
|
|
26
|
+
// partition is complete (total == runnable + illustration + compiled);
|
|
27
|
+
// 3. asserts PRESENCE: every available doc carries at least one dart block,
|
|
28
|
+
// and at least one RUNNABLE block (one that constructs the SDK or drives
|
|
29
|
+
// a `client`), so no doc silently ships zero exercised dart examples.
|
|
30
|
+
//
|
|
31
|
+
// A missing doc is SKIPPED (not failed) — the root README is optional in a
|
|
32
|
+
// single-language checkout. The dart source is written with the fence marker
|
|
33
|
+
// and newline built from escapes (` = backtick) so this template literal
|
|
34
|
+
// stays clean.
|
|
35
|
+
const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
|
|
36
|
+
const { target, ctx$: { model } } = props
|
|
37
|
+
|
|
38
|
+
const Name = model.const.Name
|
|
39
|
+
const sdkClass = Name + 'SDK'
|
|
40
|
+
|
|
41
|
+
// The API's capitalised semantic entities — used to detect entity-factory
|
|
42
|
+
// references (client.<Entity>() ) inside a block.
|
|
43
|
+
const entities = Object.values(getModelPath(model, `main.${KIT}.entity`) || {})
|
|
44
|
+
.filter((e: any) => e && e.active !== false)
|
|
45
|
+
.map((e: any) => nom(e, 'Name'))
|
|
46
|
+
const entitiesLiteral = 0 === entities.length
|
|
47
|
+
? '<String>[]'
|
|
48
|
+
: "<String>['" + entities.join("', '") + "']"
|
|
49
|
+
|
|
50
|
+
File({ name: 'readme_examples_test.' + target.ext }, () => {
|
|
51
|
+
Content(`// ${Name} SDK — documentation dart-examples presence & completeness gate.
|
|
52
|
+
// GENERATED — do not edit.
|
|
53
|
+
//
|
|
54
|
+
// A structural completeness gate over every dart fenced code block in three
|
|
55
|
+
// documents:
|
|
56
|
+
// - the repository ROOT README.md (one directory above the dart/ package),
|
|
57
|
+
// - the per-language dart/README.md,
|
|
58
|
+
// - the per-language dart/REFERENCE.md.
|
|
59
|
+
//
|
|
60
|
+
// For each available document it partitions every block into exactly one of
|
|
61
|
+
// {runnable, illustration, compiled-nonrunnable}, asserts the partition adds
|
|
62
|
+
// up, and asserts the doc carries at least one runnable dart example. A
|
|
63
|
+
// missing document is skipped, not failed.
|
|
64
|
+
|
|
65
|
+
import 'dart:io';
|
|
66
|
+
|
|
67
|
+
import 'harness.dart';
|
|
68
|
+
import 'utility.dart';
|
|
69
|
+
|
|
70
|
+
// The triple-backtick markdown code fence (\\u0060 == backtick) and newline,
|
|
71
|
+
// built from escapes so the generator template literal stays clean.
|
|
72
|
+
const String _fence = '\\u0060\\u0060\\u0060';
|
|
73
|
+
const String _nl = '\\n';
|
|
74
|
+
|
|
75
|
+
const String _sdkClass = '${sdkClass}';
|
|
76
|
+
|
|
77
|
+
// The API's capitalised semantic entities, used to spot a client.<Entity>()
|
|
78
|
+
// factory call inside a block.
|
|
79
|
+
const List<String> _entities = ${entitiesLiteral};
|
|
80
|
+
|
|
81
|
+
// The three documents held to the gate, tagged by human label and path
|
|
82
|
+
// (relative to the package root, which is the CWD for 'dart run test/...').
|
|
83
|
+
final List<List<String>> _docs = [
|
|
84
|
+
['root README', '../README.md'],
|
|
85
|
+
['dart README.md', 'README.md'],
|
|
86
|
+
['dart REFERENCE.md', 'REFERENCE.md'],
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
// Split the doc on the code fence: odd-indexed segments are the inside of a
|
|
90
|
+
// fenced block (an info string on the first line, then the code). Only fences
|
|
91
|
+
// whose info string is exactly 'dart' are returned, so signature/markdown
|
|
92
|
+
// tables and other-language fences are skipped.
|
|
93
|
+
List<String> _blocksIn(String text) {
|
|
94
|
+
final parts = text.split(_fence);
|
|
95
|
+
final blocks = <String>[];
|
|
96
|
+
for (var i = 1; i < parts.length; i += 2) {
|
|
97
|
+
final seg = parts[i];
|
|
98
|
+
final lines = seg.split(_nl);
|
|
99
|
+
final info = lines[0].trim();
|
|
100
|
+
if ('dart' == info) {
|
|
101
|
+
blocks.add(lines.sublist(1).join(_nl));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return blocks;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// A block is RUNNABLE — and therefore MUST be exercised — when it constructs
|
|
108
|
+
// the SDK (mentions the class) or drives a client the narrative built.
|
|
109
|
+
bool _isRunnable(String block) {
|
|
110
|
+
if (block.contains(_sdkClass)) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
if (block.contains('client.')) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
for (final ent in _entities) {
|
|
117
|
+
if (block.contains('.' + ent + '(')) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// A NARROW illustration: a non-runnable block whose every non-blank line is a
|
|
125
|
+
// comment or an import — a pure signature/structure snippet with nothing to
|
|
126
|
+
// run. Anything with real statements falls to the compiled-nonrunnable bucket.
|
|
127
|
+
bool _isIllustration(String block) {
|
|
128
|
+
if (_isRunnable(block)) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
var sawLine = false;
|
|
132
|
+
for (final raw in block.split(_nl)) {
|
|
133
|
+
final line = raw.trim();
|
|
134
|
+
if ('' == line) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
sawLine = true;
|
|
138
|
+
if (line.startsWith('//')) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (line.startsWith('import ') || line.startsWith('export ')) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return sawLine;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
String _classify(String block) {
|
|
150
|
+
if (_isRunnable(block)) {
|
|
151
|
+
return 'runnable';
|
|
152
|
+
}
|
|
153
|
+
if (_isIllustration(block)) {
|
|
154
|
+
return 'illustration';
|
|
155
|
+
}
|
|
156
|
+
return 'compiled';
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
Map<String, int> _gate(String label, List<String> blocks) {
|
|
160
|
+
var runnable = 0;
|
|
161
|
+
var illustration = 0;
|
|
162
|
+
var compiled = 0;
|
|
163
|
+
for (final block in blocks) {
|
|
164
|
+
final kind = _classify(block);
|
|
165
|
+
if ('runnable' == kind) {
|
|
166
|
+
runnable++;
|
|
167
|
+
} else if ('illustration' == kind) {
|
|
168
|
+
illustration++;
|
|
169
|
+
} else {
|
|
170
|
+
compiled++;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
final total = blocks.length;
|
|
174
|
+
print(_nl +
|
|
175
|
+
'[readme-examples] ' +
|
|
176
|
+
label +
|
|
177
|
+
' dart blocks: total=' +
|
|
178
|
+
total.toString() +
|
|
179
|
+
' runnable=' +
|
|
180
|
+
runnable.toString() +
|
|
181
|
+
' compiled=' +
|
|
182
|
+
compiled.toString() +
|
|
183
|
+
' illustration=' +
|
|
184
|
+
illustration.toString());
|
|
185
|
+
|
|
186
|
+
// Every block is accounted for by exactly one bucket.
|
|
187
|
+
ok(total == runnable + illustration + compiled,
|
|
188
|
+
label +
|
|
189
|
+
': dart-block accounting does not add up — total=' +
|
|
190
|
+
total.toString() +
|
|
191
|
+
' but runnable+compiled+illustration=' +
|
|
192
|
+
(runnable + illustration + compiled).toString());
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
'total': total,
|
|
196
|
+
'runnable': runnable,
|
|
197
|
+
'compiled': compiled,
|
|
198
|
+
'illustration': illustration,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
void tests() {
|
|
203
|
+
describe('ReadmeExamples', () {
|
|
204
|
+
for (final doc in _docs) {
|
|
205
|
+
final label = doc[0];
|
|
206
|
+
final rel = doc[1];
|
|
207
|
+
|
|
208
|
+
test('dart-examples: ' + label, (t) async {
|
|
209
|
+
final path = resolveTestPath(rel);
|
|
210
|
+
if (!File(path).existsSync()) {
|
|
211
|
+
t.skip(label + ' not found: ' + path);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
final text = File(path).readAsStringSync();
|
|
216
|
+
final blocks = _blocksIn(text);
|
|
217
|
+
|
|
218
|
+
ok(0 < blocks.length,
|
|
219
|
+
'expected at least one dart block in ' + label);
|
|
220
|
+
|
|
221
|
+
final stats = _gate(label, blocks);
|
|
222
|
+
|
|
223
|
+
ok(0 < (stats['runnable'] ?? 0),
|
|
224
|
+
'expected at least one runnable dart block in ' +
|
|
225
|
+
label +
|
|
226
|
+
' (a block that constructs the SDK or drives a client)');
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
`)
|
|
232
|
+
})
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
export {
|
|
237
|
+
ReadmeExamplesTest
|
|
238
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import { dartPackageName } from './Package_dart'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
|
|
8
|
+
const { target, ctx$: { model } } = props
|
|
9
|
+
|
|
10
|
+
const Name = model.const.Name
|
|
11
|
+
const pkg = dartPackageName(model)
|
|
12
|
+
|
|
13
|
+
Content(`### Maps in, typed models alongside
|
|
14
|
+
|
|
15
|
+
The Dart SDK passes plain \`Map<String, dynamic>\` values through the
|
|
16
|
+
operation pipeline rather than requiring typed objects at every call. This
|
|
17
|
+
mirrors the dynamic nature of the API and keeps calls terse — a create is
|
|
18
|
+
just \`create({'name': 'example'})\`.
|
|
19
|
+
|
|
20
|
+
For a typed, documented view of each entity and operation, the generated
|
|
21
|
+
\`${Name}Types.dart\` provides a class per entity plus per-op request/match
|
|
22
|
+
classes (e.g. \`${Name}.fromMap(entity.data())\` and \`model.toMap()\`), so you
|
|
23
|
+
can convert to and from those maps wherever you want compile-time structure.
|
|
24
|
+
|
|
25
|
+
### Package structure
|
|
26
|
+
|
|
27
|
+
\`\`\`
|
|
28
|
+
${target.name}/
|
|
29
|
+
├── lib/
|
|
30
|
+
│ ├── ${Name}SDK.dart -- Main SDK library (exported entry point)
|
|
31
|
+
│ ├── ${Name}Types.dart -- Typed entity + request/match models
|
|
32
|
+
│ ├── ${Name}EntityBase.dart -- Base class for entities
|
|
33
|
+
│ ├── ${Name}Error.dart -- SDK error type
|
|
34
|
+
│ ├── Config.dart -- Configuration
|
|
35
|
+
│ ├── entity/ -- Entity implementations
|
|
36
|
+
│ ├── feature/ -- Built-in features (base, test, log, ...)
|
|
37
|
+
│ └── utility/ -- Utility functions and vendored struct library
|
|
38
|
+
└── test/ -- Test suites (dart run test/main.dart)
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
The main library (\`${Name}SDK.dart\`) re-exports the SDK class, the typed
|
|
42
|
+
models, and every entity class, so a single
|
|
43
|
+
\`import 'package:${pkg}/${Name}SDK.dart';\`
|
|
44
|
+
brings in everything you need.
|
|
45
|
+
|
|
46
|
+
`)
|
|
47
|
+
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
ReadmeExplanation
|
|
53
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
// A type-correct Dart literal for a field's canonical type.
|
|
12
|
+
function dartLit(type: any): string {
|
|
13
|
+
const k = canonKey(type)
|
|
14
|
+
if ('INTEGER' === k || 'NUMBER' === k) return '1'
|
|
15
|
+
if ('BOOLEAN' === k) return 'true'
|
|
16
|
+
if ('ARRAY' === k) return '<dynamic>[]'
|
|
17
|
+
if ('OBJECT' === k) return '<String, dynamic>{}'
|
|
18
|
+
return "'example'"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
23
|
+
const { target, ctx$: { model } } = props
|
|
24
|
+
|
|
25
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
26
|
+
// Pick an entity with a real op (prefer a read op) — never fabricate a
|
|
27
|
+
// `load` on an op-less entity. primaryOp is null only when NO entity
|
|
28
|
+
// exposes any op (a direct()-only SDK).
|
|
29
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
30
|
+
const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
|
|
31
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'dart')
|
|
32
|
+
// Model-driven id key: null when the entity has no id-like field.
|
|
33
|
+
const idF = exampleEntity ? entityIdField(exampleEntity) : null
|
|
34
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
35
|
+
let testArg = ''
|
|
36
|
+
if (exampleEntity && isMatchOp) {
|
|
37
|
+
testArg = idF ? `{'${idF}': 'test01'}` : ''
|
|
38
|
+
} else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
|
|
39
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
40
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
41
|
+
const required = items.filter((it: any) => !it.optional)
|
|
42
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
43
|
+
testArg = `{${chosen.map((it: any) => `'${it.name}': ${dartLit(it.type)}`).join(', ')}}`
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// The op-driven test-mode line, shown only when the SDK has an entity op.
|
|
47
|
+
// A direct()-only SDK (no ops anywhere) shows a direct() call instead.
|
|
48
|
+
const testModeExample = primaryOp
|
|
49
|
+
? `// Entity ops return the bare record and throw on error.
|
|
50
|
+
final ${eVar} = await client.${eName}().${primaryOp}(${testArg});
|
|
51
|
+
// ${eVar} contains the mock response record
|
|
52
|
+
print(${eVar});`
|
|
53
|
+
: `final result = await client.direct({'path': '/api/resource', 'method': 'GET'});
|
|
54
|
+
print(result);`
|
|
55
|
+
|
|
56
|
+
const apikeyEnvLine = isAuthActive(model)
|
|
57
|
+
? `\nexport ${envName(model)}_APIKEY=<your-key>`
|
|
58
|
+
: ''
|
|
59
|
+
|
|
60
|
+
Content(`### Make a direct HTTP request
|
|
61
|
+
|
|
62
|
+
For endpoints not covered by entity methods:
|
|
63
|
+
|
|
64
|
+
\`\`\`dart
|
|
65
|
+
final result = await client.direct({
|
|
66
|
+
'path': '/api/resource/{id}',
|
|
67
|
+
'method': 'GET',
|
|
68
|
+
'params': {'id': 'example'},
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
if (true == result['ok']) {
|
|
72
|
+
print(result['status']); // 200
|
|
73
|
+
print(result['data']); // response body
|
|
74
|
+
} else {
|
|
75
|
+
// A non-2xx response carries status + data (the error body); a
|
|
76
|
+
// transport-level failure carries err instead. direct() never throws —
|
|
77
|
+
// branch on result['ok'].
|
|
78
|
+
print(result['status']);
|
|
79
|
+
print(result['err']);
|
|
80
|
+
}
|
|
81
|
+
\`\`\`
|
|
82
|
+
|
|
83
|
+
### Prepare a request without sending it
|
|
84
|
+
|
|
85
|
+
\`\`\`dart
|
|
86
|
+
// prepare() returns the fetch definition (or an error value on failure).
|
|
87
|
+
final fetchdef = await client.prepare({
|
|
88
|
+
'path': '/api/resource/{id}',
|
|
89
|
+
'method': 'DELETE',
|
|
90
|
+
'params': {'id': 'example'},
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
print(fetchdef['url']);
|
|
94
|
+
print(fetchdef['method']);
|
|
95
|
+
print(fetchdef['headers']);
|
|
96
|
+
\`\`\`
|
|
97
|
+
|
|
98
|
+
### Use test mode
|
|
99
|
+
|
|
100
|
+
Create a mock client for unit testing — no server required:
|
|
101
|
+
|
|
102
|
+
\`\`\`dart
|
|
103
|
+
final client = ${model.const.Name}SDK.test();
|
|
104
|
+
|
|
105
|
+
${testModeExample}
|
|
106
|
+
\`\`\`
|
|
107
|
+
|
|
108
|
+
### Use a custom fetch function
|
|
109
|
+
|
|
110
|
+
Replace the HTTP transport with your own function:
|
|
111
|
+
|
|
112
|
+
\`\`\`dart
|
|
113
|
+
Future<dynamic> mockFetch(dynamic url, dynamic init) async {
|
|
114
|
+
return {
|
|
115
|
+
'status': 200,
|
|
116
|
+
'statusText': 'OK',
|
|
117
|
+
'headers': <String, dynamic>{},
|
|
118
|
+
'json': () => {'id': 'mock01'},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
final client = ${model.const.Name}SDK({
|
|
123
|
+
'base': 'http://localhost:8080',
|
|
124
|
+
'system': {
|
|
125
|
+
'fetch': mockFetch,
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
\`\`\`
|
|
129
|
+
|
|
130
|
+
### Run live tests
|
|
131
|
+
|
|
132
|
+
Set the live-mode environment variables:
|
|
133
|
+
|
|
134
|
+
\`\`\`bash
|
|
135
|
+
export ${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
|
|
136
|
+
\`\`\`
|
|
137
|
+
|
|
138
|
+
Then run:
|
|
139
|
+
|
|
140
|
+
\`\`\`bash
|
|
141
|
+
cd ${target.name} && dart run test/main.dart
|
|
142
|
+
\`\`\`
|
|
143
|
+
|
|
144
|
+
`)
|
|
145
|
+
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
export {
|
|
150
|
+
ReadmeHowto
|
|
151
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isPublished, repoInfo } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import { dartPackageName } from './Package_dart'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
|
|
8
|
+
const { target, ctx$ } = props
|
|
9
|
+
const { model } = ctx$
|
|
10
|
+
|
|
11
|
+
const pkg = dartPackageName(model)
|
|
12
|
+
|
|
13
|
+
if (isPublished(model, target.name)) {
|
|
14
|
+
Content(`\`\`\`bash
|
|
15
|
+
dart pub add ${pkg}
|
|
16
|
+
\`\`\`
|
|
17
|
+
|
|
18
|
+
Or add it to your \`pubspec.yaml\`:
|
|
19
|
+
|
|
20
|
+
\`\`\`yaml
|
|
21
|
+
dependencies:
|
|
22
|
+
${pkg}: ^0.0.1
|
|
23
|
+
\`\`\`
|
|
24
|
+
|
|
25
|
+
`)
|
|
26
|
+
return
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Publish pending: not yet on pub.dev. Depend on it via the git release
|
|
30
|
+
// tag, or from a local path checkout.
|
|
31
|
+
const { repoUrl, releasesUrl } = repoInfo(model)
|
|
32
|
+
Content(`This package is not yet published to pub.dev. Add it as a git
|
|
33
|
+
dependency (pinned to a release tag \`${target.name}/vX.Y.Z\`, see
|
|
34
|
+
[Releases](${releasesUrl})) in your \`pubspec.yaml\`:
|
|
35
|
+
|
|
36
|
+
\`\`\`yaml
|
|
37
|
+
dependencies:
|
|
38
|
+
${pkg}:
|
|
39
|
+
git:
|
|
40
|
+
url: ${repoUrl}
|
|
41
|
+
path: ${target.name}
|
|
42
|
+
ref: ${target.name}/v0.0.1
|
|
43
|
+
\`\`\`
|
|
44
|
+
|
|
45
|
+
Or depend on a local source checkout:
|
|
46
|
+
|
|
47
|
+
\`\`\`yaml
|
|
48
|
+
dependencies:
|
|
49
|
+
${pkg}:
|
|
50
|
+
path: ../${target.name}
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
`)
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
export {
|
|
58
|
+
ReadmeInstall
|
|
59
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
const ReadmeIntro = cmp(function ReadmeIntro(props: any) {
|
|
12
|
+
const { target, ctx$: { model } } = props
|
|
13
|
+
const info = (model.main && model.main.kit && model.main.kit.info) || {}
|
|
14
|
+
const tagline = info.tagline || ''
|
|
15
|
+
|
|
16
|
+
Content(`# ${model.Name} ${target.title} SDK
|
|
17
|
+
|
|
18
|
+
${tagline}
|
|
19
|
+
|
|
20
|
+
The ${target.title} SDK for the ${model.Name} API — an entity-oriented client following idiomatic Dart conventions.
|
|
21
|
+
|
|
22
|
+
`)
|
|
23
|
+
|
|
24
|
+
// Emphasise the entity-oriented design: the SDK surfaces the API as
|
|
25
|
+
// capitalised, semantic Entities with a small, uniform verb set rather
|
|
26
|
+
// than raw URL paths and query strings. The example entity name is
|
|
27
|
+
// derived from the model, never hardcoded.
|
|
28
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
29
|
+
const exampleEntity = Object.values(entity || {})
|
|
30
|
+
.find((e: any) => e.active !== false) as any
|
|
31
|
+
const example = exampleEntity
|
|
32
|
+
? `for example \`client.${nom(exampleEntity, 'Name')}()\` — each`
|
|
33
|
+
: 'each'
|
|
34
|
+
|
|
35
|
+
// Model-driven op list — only the operations the active entities actually
|
|
36
|
+
// expose (a read-only entity has just list+load); never claim
|
|
37
|
+
// create/update/remove exist when no entity has them.
|
|
38
|
+
const CANON_OPS = ['list', 'load', 'create', 'update', 'remove']
|
|
39
|
+
const opSet = new Set<string>()
|
|
40
|
+
Object.values(entity || {}).forEach((e: any) => {
|
|
41
|
+
if (!e || e.active === false) return
|
|
42
|
+
Object.keys(e.op || {}).forEach((o: string) => {
|
|
43
|
+
if (e.op[o] && e.op[o].active !== false) opSet.add(o)
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
const opNames = CANON_OPS.filter((o) => opSet.has(o))
|
|
47
|
+
.concat([...opSet].filter((o) => !CANON_OPS.includes(o)))
|
|
48
|
+
const opList = (opNames.length ? opNames : ['list', 'load'])
|
|
49
|
+
.map((o) => '`' + o + '`').join(', ')
|
|
50
|
+
|
|
51
|
+
Content(`The SDK exposes the API as capitalised, semantic **Entities** — ${example}
|
|
52
|
+
carrying a small, uniform set of operations (${opList}) instead of raw URL
|
|
53
|
+
paths and query strings. You work with named resources and verbs, which
|
|
54
|
+
keeps the cognitive load low.
|
|
55
|
+
|
|
56
|
+
> Other languages, the CLI, and MCP server live alongside this one — see
|
|
57
|
+
> the [top-level README](../README.md).
|
|
58
|
+
|
|
59
|
+
`)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
export {
|
|
64
|
+
ReadmeIntro
|
|
65
|
+
}
|