@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,103 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
import { javaVarName, javaPackage } from './utility_java'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct Java literal for a param: numeric/boolean/array/object params
|
|
14
|
+
// render a typed literal; strings render the quoted placeholder. The SDK's
|
|
15
|
+
// loose object model means all values live in Map<String, Object>.
|
|
16
|
+
function javaLit(type: any, placeholder: string = 'example'): string {
|
|
17
|
+
const k = canonKey(type)
|
|
18
|
+
if ('INTEGER' === k) return '1L'
|
|
19
|
+
if ('NUMBER' === k) return '1.0'
|
|
20
|
+
if ('BOOLEAN' === k) return 'true'
|
|
21
|
+
if ('ARRAY' === k) return 'List.of()'
|
|
22
|
+
if ('OBJECT' === k) return 'Map.of()'
|
|
23
|
+
return `"${placeholder}"`
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
|
|
28
|
+
const { target, ctx$: { model } } = props
|
|
29
|
+
|
|
30
|
+
const SDK = model.const.Name + 'SDK'
|
|
31
|
+
|
|
32
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
33
|
+
|
|
34
|
+
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
35
|
+
|
|
36
|
+
const authActive = isAuthActive(model)
|
|
37
|
+
|
|
38
|
+
Content(`\`\`\`java
|
|
39
|
+
import ${javaPackage(model)}.core.${SDK};
|
|
40
|
+
|
|
41
|
+
`)
|
|
42
|
+
|
|
43
|
+
if (authActive) {
|
|
44
|
+
Content(`Map<String, Object> options = new java.util.LinkedHashMap<>();
|
|
45
|
+
options.put("apikey", System.getenv("${envName(model)}_APIKEY"));
|
|
46
|
+
${SDK} client = new ${SDK}(options);
|
|
47
|
+
|
|
48
|
+
`)
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
Content(`${SDK} client = new ${SDK}();
|
|
52
|
+
|
|
53
|
+
`)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (exampleEntity) {
|
|
57
|
+
// Sanitise the local variable name — an entity whose camelCased name is a
|
|
58
|
+
// Java keyword gets a trailing underscore (javaVarName) so the snippet compiles.
|
|
59
|
+
const eVar = javaVarName(exampleEntity.name)
|
|
60
|
+
const accessor = javaVarName(exampleEntity.name)
|
|
61
|
+
const eNameLower = nom(exampleEntity, 'Name').toLowerCase()
|
|
62
|
+
const opnames = Object.keys(exampleEntity.op || {})
|
|
63
|
+
// Model-driven id key: null when the entity has no id-like field, in which
|
|
64
|
+
// case the load example takes an empty match.
|
|
65
|
+
const idF = entityIdField(exampleEntity)
|
|
66
|
+
|
|
67
|
+
if (opnames.includes('list')) {
|
|
68
|
+
Content(`// List all ${eNameLower}s (returns Object, an aggregate list; raises on error)
|
|
69
|
+
Object ${eVar}List = client.${accessor}(null).list(null, null);
|
|
70
|
+
System.out.println(${eVar}List);
|
|
71
|
+
`)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (opnames.includes('load')) {
|
|
75
|
+
// Every REQUIRED load-match key (id first, then parent path params like
|
|
76
|
+
// page_id) — the same shape the runtime resolves path params from, so
|
|
77
|
+
// the example always works.
|
|
78
|
+
const loadItems = opRequestShape(exampleEntity, 'load').items
|
|
79
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
80
|
+
.sort((a: any, b: any) =>
|
|
81
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
82
|
+
const loadArg = 0 < loadItems.length
|
|
83
|
+
? `Map.of(${loadItems.map((it: any) =>
|
|
84
|
+
`"${it.name}", ${javaLit(it.type,
|
|
85
|
+
it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')})`
|
|
86
|
+
: 'null'
|
|
87
|
+
Content(`
|
|
88
|
+
// Load a specific ${eNameLower} (returns the record, raises on error)
|
|
89
|
+
Object ${eVar} = client.${accessor}(null).load(${loadArg}, null);
|
|
90
|
+
System.out.println(${eVar});
|
|
91
|
+
`)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
Content(`\`\`\`
|
|
96
|
+
`)
|
|
97
|
+
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
export {
|
|
102
|
+
ReadmeTopQuick
|
|
103
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { javaVarName } from './utility_java'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct Java literal for a field's canonical type.
|
|
13
|
+
function javaLit(type: any): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k) return '1L'
|
|
16
|
+
if ('NUMBER' === k) return '1.0'
|
|
17
|
+
if ('BOOLEAN' === k) return 'true'
|
|
18
|
+
if ('ARRAY' === k) return 'List.of()'
|
|
19
|
+
if ('OBJECT' === k) return 'Map.of()'
|
|
20
|
+
return '"example"'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
25
|
+
const { target, ctx$: { model } } = props
|
|
26
|
+
|
|
27
|
+
const SDK = model.const.Name + 'SDK'
|
|
28
|
+
|
|
29
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
30
|
+
|
|
31
|
+
// Pick an entity with a real op (prefer a read op) — never fabricate a
|
|
32
|
+
// `load` on an op-less entity.
|
|
33
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
34
|
+
|
|
35
|
+
Content(`\`\`\`java
|
|
36
|
+
${SDK} client = ${SDK}.testSDK(null, null);
|
|
37
|
+
`)
|
|
38
|
+
|
|
39
|
+
if (exampleEntity && primaryOp) {
|
|
40
|
+
const idF = entityIdField(exampleEntity)
|
|
41
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
42
|
+
let arg = 'null'
|
|
43
|
+
if (isMatchOp) {
|
|
44
|
+
// Every REQUIRED match key (id first) — the same shape that generates
|
|
45
|
+
// the op's request type, so the block stays honest.
|
|
46
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
47
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
48
|
+
.sort((a: any, b: any) =>
|
|
49
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
50
|
+
arg = 0 < items.length
|
|
51
|
+
? `Map.of(${items.map((it: any) =>
|
|
52
|
+
`"${it.name}", ${it.name === idF ? '"test01"' : javaLit(it.type)}`).join(', ')})`
|
|
53
|
+
: 'null'
|
|
54
|
+
} else if ('create' === primaryOp || 'update' === primaryOp) {
|
|
55
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
56
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
57
|
+
const required = items.filter((it: any) => !it.optional)
|
|
58
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
59
|
+
arg = `Map.of(${chosen.map((it: any) =>
|
|
60
|
+
`"${it.name}", ${javaLit(it.type)}`).join(', ')})`
|
|
61
|
+
}
|
|
62
|
+
const eVar = javaVarName(exampleEntity.name) + ('list' === primaryOp ? 'List' : '')
|
|
63
|
+
const accessor = javaVarName(exampleEntity.name)
|
|
64
|
+
Content(`Object ${eVar} = client.${accessor}(null).${primaryOp}(${arg}, null);
|
|
65
|
+
System.out.println(${eVar});
|
|
66
|
+
`)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
Content(`\`\`\`
|
|
70
|
+
`)
|
|
71
|
+
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
export {
|
|
76
|
+
ReadmeTopTest
|
|
77
|
+
}
|
|
@@ -13,6 +13,7 @@ import { cmp, each, Folder } from '@voxgig/sdkgen'
|
|
|
13
13
|
|
|
14
14
|
import { TestEntity } from './TestEntity_java'
|
|
15
15
|
import { TestDirect } from './TestDirect_java'
|
|
16
|
+
import { ReadmeExamplesTest } from './ReadmeExamplesTest_java'
|
|
16
17
|
import { javaPackage } from './utility_java'
|
|
17
18
|
|
|
18
19
|
|
|
@@ -33,6 +34,9 @@ const Test = cmp(function Test(props: any) {
|
|
|
33
34
|
TestEntity({ target, entity, javapackage })
|
|
34
35
|
TestDirect({ target, entity, javapackage })
|
|
35
36
|
})
|
|
37
|
+
|
|
38
|
+
// Validate the documented java examples in the root + per-language docs.
|
|
39
|
+
ReadmeExamplesTest({ target, javapackage })
|
|
36
40
|
})
|
|
37
41
|
})
|
|
38
42
|
|
|
@@ -14,16 +14,19 @@
|
|
|
14
14
|
//
|
|
15
15
|
// The typedefs are emitted at file (script) scope so they are GLOBAL across
|
|
16
16
|
// the SDK's JS program — the op fragments reference them by bare name
|
|
17
|
-
// (@param {AdviceLoadMatch} / @returns {Promise<Advice>}).
|
|
18
|
-
//
|
|
19
|
-
//
|
|
17
|
+
// (@param {AdviceLoadMatch} / @returns {Promise<Advice>}). The program itself
|
|
18
|
+
// is established by the tm/js/jsconfig.json template shipped at the SDK root
|
|
19
|
+
// (one project spanning src/ + test/), so resolution does not depend on
|
|
20
|
+
// editor workspace inference. Keeps the SAME type-name scheme as the TS
|
|
21
|
+
// reference (<Name>, <Name>LoadMatch, <Name>ListMatch, <Name>CreateData,
|
|
22
|
+
// <Name>UpdateData, <Name>RemoveMatch).
|
|
20
23
|
|
|
21
24
|
import {
|
|
22
25
|
cmp, each, names,
|
|
23
26
|
File, Content,
|
|
24
27
|
} from '@voxgig/sdkgen'
|
|
25
28
|
|
|
26
|
-
import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
|
|
29
|
+
import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
|
|
27
30
|
|
|
28
31
|
import {
|
|
29
32
|
KIT,
|
|
@@ -42,15 +45,29 @@ function propKey(name: string): string {
|
|
|
42
45
|
|
|
43
46
|
|
|
44
47
|
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
45
|
-
const { model } = props.ctx$
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
const { model, log } = props.ctx$
|
|
49
|
+
|
|
50
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
51
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
52
|
+
// collection, so inactive entities still get generated entity code that
|
|
53
|
+
// references these typed names. The typed model must cover them too.
|
|
54
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
55
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
56
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
57
|
+
// filter, so inactive entities still get class files referencing these
|
|
58
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
59
|
+
// with the go emitter's fix.
|
|
60
|
+
const entityList = each(entity).filter((e: any) => e && null != e.name)
|
|
49
61
|
// Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
|
|
50
62
|
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
51
63
|
// `Name = undefined` below. Parity with the go emitter's fix.
|
|
52
64
|
entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
53
65
|
|
|
66
|
+
// Surface duplicate generated type names (two entities with the same
|
|
67
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
68
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
69
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
70
|
+
|
|
54
71
|
File({ name: model.const.Name + 'Types.' + LANG }, () => {
|
|
55
72
|
|
|
56
73
|
Content(`// Typed models for the ${model.const.Name} SDK (JSDoc typedefs).
|
|
@@ -18,9 +18,11 @@ const MainEntity = cmp(async function MainEntity(props: any) {
|
|
|
18
18
|
|
|
19
19
|
Content(`
|
|
20
20
|
// Entity access: \`client.${entity.Name}().list()\` / \`client.${entity.Name}().load({ id })\`.
|
|
21
|
-
|
|
21
|
+
// The argument is the entity OPTIONS object (passed to the entity
|
|
22
|
+
// constructor as entopts), not initial entity data.
|
|
23
|
+
${entity.Name}(entopts) {
|
|
22
24
|
const self = this
|
|
23
|
-
return new ${cls}(self,
|
|
25
|
+
return new ${cls}(self, entopts)
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
`)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -46,7 +46,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
46
46
|
// Model-driven id key: null when this entity has no id-like field.
|
|
47
47
|
const idF = entityIdField(entity)
|
|
48
48
|
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
49
|
-
const eVar =
|
|
49
|
+
const eVar = exampleVarName(entity.name, 'js')
|
|
50
50
|
|
|
51
51
|
Content(`
|
|
52
52
|
### ${entity.Name}
|
|
@@ -108,7 +108,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
108
108
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
109
109
|
const loadArg = 0 < loadItems.length
|
|
110
110
|
? `{ ${loadItems.map((it: any) =>
|
|
111
|
-
`${it.name}: ${exampleValue(entity, entity.op && entity.op.load, it.name,
|
|
111
|
+
`${jsKey(it.name)}: ${exampleValue(entity, entity.op && entity.op.load, it.name,
|
|
112
112
|
it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')} }`
|
|
113
113
|
: ''
|
|
114
114
|
Content(`#### Example: Load
|
|
@@ -144,7 +144,7 @@ const ${eVar}s = await client.${entity.Name}().list()
|
|
|
144
144
|
const ${eVar} = await client.${entity.Name}().create({
|
|
145
145
|
`)
|
|
146
146
|
createItems.map((it: any) => {
|
|
147
|
-
Content(` ${it.name}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
|
|
147
|
+
Content(` ${jsKey(it.name)}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
|
|
148
148
|
`)
|
|
149
149
|
})
|
|
150
150
|
Content(`})
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, envName, entityIdField, entityDataIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, entityIdField, entityDataIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -19,7 +19,7 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
19
19
|
// only when NO entity exposes any op (a direct()-only SDK).
|
|
20
20
|
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
21
21
|
const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
|
|
22
|
-
const eVar =
|
|
22
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'js')
|
|
23
23
|
|
|
24
24
|
const primaryOpDef = exampleEntity && primaryOp && exampleEntity.op && exampleEntity.op[primaryOp]
|
|
25
25
|
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
@@ -32,14 +32,23 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
32
32
|
if (!exampleEntity || !primaryOp) return ''
|
|
33
33
|
if ('list' === primaryOp) return ''
|
|
34
34
|
if (isMatchOp) {
|
|
35
|
-
|
|
35
|
+
// Every REQUIRED match key (id first), not just idF — a composite-match
|
|
36
|
+
// entity (database_id + id) needs them all. Mirrors ReadmeTopTest.
|
|
37
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
38
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
39
|
+
.sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
40
|
+
if (0 === items.length) return ''
|
|
41
|
+
const pairs = items.map((it: any) =>
|
|
42
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
|
|
43
|
+
it.name === idF ? idPlaceholder : 'example_' + it.name)}`)
|
|
44
|
+
return `{ ${pairs.join(', ')} }`
|
|
36
45
|
}
|
|
37
46
|
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
38
47
|
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
39
48
|
const required = items.filter((it: any) => !it.optional)
|
|
40
49
|
const chosen = required.length ? required : items.slice(0, 3)
|
|
41
50
|
const pairs = chosen.map((it: any) =>
|
|
42
|
-
`${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
|
|
51
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
|
|
43
52
|
return `{ ${pairs.join(', ')} }`
|
|
44
53
|
}
|
|
45
54
|
const testCallArg = primaryArg('test01')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityOps, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -47,7 +47,7 @@ const client = ${ctor}
|
|
|
47
47
|
// then load/remove match on no argument and update omits the id.
|
|
48
48
|
const idF = entityIdField(exampleEntity)
|
|
49
49
|
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
50
|
-
const eVar =
|
|
50
|
+
const eVar = exampleVarName(exampleEntity.name, 'js')
|
|
51
51
|
const exampleFields = (opname: string): string[] => {
|
|
52
52
|
// ids are rendered separately as the match key for update/remove; a
|
|
53
53
|
// REQUIRED id stays for create (dropping it makes the payload
|
|
@@ -64,7 +64,7 @@ const client = ${ctor}
|
|
|
64
64
|
? (required.length ? required : items.slice(0, 2))
|
|
65
65
|
: required.concat(optional).slice(0, Math.max(2, required.length))
|
|
66
66
|
return chosen.map((it: any) =>
|
|
67
|
-
` ${it.name}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
|
|
67
|
+
` ${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// The full REQUIRED match for load/remove (id first, then parent path
|
|
@@ -77,7 +77,7 @@ const client = ${ctor}
|
|
|
77
77
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
78
78
|
return 0 < matchItems.length
|
|
79
79
|
? `{ ${matchItems.map((it: any) =>
|
|
80
|
-
`${it.name}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op[opname], it.name,
|
|
80
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op[opname], it.name,
|
|
81
81
|
it.name === idF ? exampleEntity.name + '_id' : 'example_' + it.name)}`).join(', ')} }`
|
|
82
82
|
: ''
|
|
83
83
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -185,7 +185,7 @@ Alias for \`${model.Name}SDK.test()\`.
|
|
|
185
185
|
// which case load/remove match on no argument and update omits the id.
|
|
186
186
|
const idF = entityIdField(ent)
|
|
187
187
|
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
188
|
-
const eVar =
|
|
188
|
+
const eVar = exampleVarName(ent.name, 'js')
|
|
189
189
|
|
|
190
190
|
Content(`
|
|
191
191
|
---
|
|
@@ -281,7 +281,7 @@ ${info.desc}
|
|
|
281
281
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
282
282
|
const arg = 0 < matchItems.length
|
|
283
283
|
? `{ ${matchItems.map((it: any) =>
|
|
284
|
-
`${it.name}: ${exampleValue(ent, ent.op && ent.op[opname], it.name,
|
|
284
|
+
`${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op[opname], it.name,
|
|
285
285
|
it.name === idF ? ent.name + '_id' : it.name)}`).join(', ')} }`
|
|
286
286
|
: ''
|
|
287
287
|
Content(`\`\`\`ts
|
|
@@ -309,7 +309,7 @@ const results = await client.${ent.Name}().${opname}()
|
|
|
309
309
|
const result = await client.${ent.Name}().create({
|
|
310
310
|
`)
|
|
311
311
|
createItems.map((it: any) => {
|
|
312
|
-
Content(` ${it.name}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
|
|
312
|
+
Content(` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
|
|
313
313
|
`)
|
|
314
314
|
})
|
|
315
315
|
Content(`})
|
|
@@ -325,7 +325,7 @@ const result = await client.${ent.Name}().create({
|
|
|
325
325
|
.sort((a: any, b: any) =>
|
|
326
326
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
327
327
|
const updateLines = updateItems.map((it: any) =>
|
|
328
|
-
` ${it.name}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
|
|
328
|
+
` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
|
|
329
329
|
it.name === idF ? ent.name + '_id' : it.name)},\n`).join('')
|
|
330
330
|
Content(`\`\`\`ts
|
|
331
331
|
const result = await client.${ent.Name}().update({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -29,7 +29,7 @@ const client = ${ctor}
|
|
|
29
29
|
|
|
30
30
|
if (exampleEntity) {
|
|
31
31
|
const eName = nom(exampleEntity, 'Name')
|
|
32
|
-
const eVar =
|
|
32
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'js')
|
|
33
33
|
// ACTIVE ops only — an inactive op generates no method, so an example
|
|
34
34
|
// calling it would be wrong.
|
|
35
35
|
const opnames = entityOps(exampleEntity)
|
|
@@ -57,7 +57,7 @@ for (const ${eVar} of ${eVar}s) {
|
|
|
57
57
|
|
|
58
58
|
if (nestedEntity) {
|
|
59
59
|
const neName = nom(nestedEntity, 'Name')
|
|
60
|
-
const neVar =
|
|
60
|
+
const neVar = exampleVarName(neName.toLowerCase(), 'js')
|
|
61
61
|
const loadOp = nestedEntity.op && nestedEntity.op.load
|
|
62
62
|
|
|
63
63
|
// Every REQUIRED load-match key (parent keys like page_id first, the
|
|
@@ -69,7 +69,7 @@ for (const ${eVar} of ${eVar}s) {
|
|
|
69
69
|
.sort((a: any, b: any) =>
|
|
70
70
|
(a.name === neIdF ? 1 : 0) - (b.name === neIdF ? 1 : 0))
|
|
71
71
|
.map((it: any) =>
|
|
72
|
-
` ${it.name}: ${exampleValue(nestedEntity, loadOp, it.name,
|
|
72
|
+
` ${jsKey(it.name)}: ${exampleValue(nestedEntity, loadOp, it.name,
|
|
73
73
|
it.name === neIdF ? 'example_id' : 'example_' + it.name)},`)
|
|
74
74
|
|
|
75
75
|
Content(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -25,7 +25,7 @@ const client = ${model.const.Name}SDK.test()
|
|
|
25
25
|
if (exampleEntity && primaryOp) {
|
|
26
26
|
const eName = nom(exampleEntity, 'Name')
|
|
27
27
|
// A list() result is an array — name the variable accordingly.
|
|
28
|
-
const eVar =
|
|
28
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'js') +
|
|
29
29
|
('list' === primaryOp ? 's' : '')
|
|
30
30
|
const primaryOpDef = exampleEntity.op && exampleEntity.op[primaryOp]
|
|
31
31
|
const idF = entityIdField(exampleEntity)
|
|
@@ -39,7 +39,7 @@ const client = ${model.const.Name}SDK.test()
|
|
|
39
39
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
40
40
|
arg = 0 < items.length
|
|
41
41
|
? `{ ${items.map((it: any) =>
|
|
42
|
-
`${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
|
|
42
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
|
|
43
43
|
it.name === idF ? 'test01' : 'example_' + it.name)}`).join(', ')} }`
|
|
44
44
|
: ''
|
|
45
45
|
} else if ('create' === primaryOp || 'update' === primaryOp) {
|
|
@@ -48,7 +48,7 @@ const client = ${model.const.Name}SDK.test()
|
|
|
48
48
|
const required = items.filter((it: any) => !it.optional)
|
|
49
49
|
const chosen = required.length ? required : items.slice(0, 3)
|
|
50
50
|
arg = `{ ${chosen.map((it: any) =>
|
|
51
|
-
`${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`).join(', ')} }`
|
|
51
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`).join(', ')} }`
|
|
52
52
|
}
|
|
53
53
|
Content(`const ${eVar} = await client.${eName}().${primaryOp}(${arg})
|
|
54
54
|
// ${eVar} is ${'list' === primaryOp ? 'an array of bare entities' : 'a bare entity'} populated with mock data
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
cmp,
|
|
18
18
|
snakify,
|
|
19
19
|
isAuthActive,
|
|
20
|
+
jsProp,
|
|
20
21
|
} from '@voxgig/sdkgen'
|
|
21
22
|
|
|
22
23
|
|
|
@@ -175,7 +176,7 @@ function generateDirectLoad(model: Model, entity: ModelEntity) {
|
|
|
175
176
|
const listParamLines = liveListParams.map((lp: any) =>
|
|
176
177
|
` ${lp.name}: setup.idmap['${lp.key}'],`).join('\n')
|
|
177
178
|
const ancestorParamLines = liveAncestorParams.map((lp: any) =>
|
|
178
|
-
` params
|
|
179
|
+
` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n')
|
|
179
180
|
|
|
180
181
|
liveParamsBlock = ` if (setup.live) {
|
|
181
182
|
const listResult = await client.direct({
|
|
@@ -193,11 +194,11 @@ ${listParamLines}
|
|
|
193
194
|
params.id = listData[0].id
|
|
194
195
|
${ancestorParamLines}
|
|
195
196
|
} else {
|
|
196
|
-
${loadParams.map((p: any, i: number) => ` params
|
|
197
|
+
${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
|
|
197
198
|
}`
|
|
198
199
|
} else {
|
|
199
200
|
liveParamsBlock = ` if (!setup.live) {
|
|
200
|
-
${loadParams.map((p: any, i: number) => ` params
|
|
201
|
+
${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
|
|
201
202
|
}`
|
|
202
203
|
}
|
|
203
204
|
|
|
@@ -254,9 +255,9 @@ function generateDirectList(model: Model, entity: ModelEntity) {
|
|
|
254
255
|
let paramsBlock = ''
|
|
255
256
|
if (listParams.length > 0) {
|
|
256
257
|
const liveLines = liveParams.map((lp: any) =>
|
|
257
|
-
` params
|
|
258
|
+
` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n')
|
|
258
259
|
const mockLines = listParams.map((p: any, i: number) =>
|
|
259
|
-
` params
|
|
260
|
+
` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')
|
|
260
261
|
|
|
261
262
|
paramsBlock = ` const params = {}
|
|
262
263
|
if (setup.live) {
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
cmp,
|
|
31
31
|
each,
|
|
32
32
|
isAuthActive,
|
|
33
|
+
entityDataIdField,
|
|
33
34
|
} from '@voxgig/sdkgen'
|
|
34
35
|
|
|
35
36
|
|
|
@@ -270,6 +271,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
|
|
|
270
271
|
|
|
271
272
|
const generateList: OpGen = (ctx, step, index) => {
|
|
272
273
|
const { entity, flow } = ctx
|
|
274
|
+
const hasDataId = null != entityDataIdField(entity)
|
|
273
275
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
274
276
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
275
277
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -304,12 +306,12 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
304
306
|
const hasRefData = validRef && allSteps.some(s => 'create' === s.op &&
|
|
305
307
|
((s.input.ref ?? entity.name + '_ref01') === validRef))
|
|
306
308
|
|
|
307
|
-
if ('ItemExists' === validator.apply && hasRefData) {
|
|
309
|
+
if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
|
|
308
310
|
Content(`
|
|
309
311
|
assert(!isempty(select(${listvar}, { id: ${validRef}_data.id })))
|
|
310
312
|
`)
|
|
311
313
|
}
|
|
312
|
-
else if ('ItemNotExists' === validator.apply && hasRefData) {
|
|
314
|
+
else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
|
|
313
315
|
Content(`
|
|
314
316
|
assert(isempty(select(${listvar}, { id: ${validRef}_data.id })))
|
|
315
317
|
`)
|
|
@@ -448,6 +450,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
|
|
|
448
450
|
|
|
449
451
|
const generateRemove: OpGen = (ctx, step, index) => {
|
|
450
452
|
const { entity, flow } = ctx
|
|
453
|
+
if (null == entityDataIdField(entity)) {
|
|
454
|
+
return
|
|
455
|
+
}
|
|
451
456
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
452
457
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
453
458
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -30,37 +30,6 @@ describe('EntityNameEntity', async () => {
|
|
|
30
30
|
})
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
// Feature #4: the entity `stream(action, ...)` method runs the op pipeline
|
|
34
|
-
// and returns an async iterator over result items. With the streaming
|
|
35
|
-
// feature active it yields the feature's incremental output; otherwise it
|
|
36
|
-
// falls back to the materialised list so `stream` always yields.
|
|
37
|
-
test('stream', async () => {
|
|
38
|
-
const seed = {
|
|
39
|
-
entity: {
|
|
40
|
-
EntityLower: { s1: { id: 's1' }, s2: { id: 's2' }, s3: { id: 's3' } }
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Fallback: streaming inactive -> yields the materialised list items.
|
|
45
|
-
const base = ProjectNameSDK.test(seed)
|
|
46
|
-
const seen = []
|
|
47
|
-
for await (const item of base.EntityName().stream('list')) {
|
|
48
|
-
seen.push(item)
|
|
49
|
-
}
|
|
50
|
-
assert.equal(seen.length, 3)
|
|
51
|
-
|
|
52
|
-
// Inbound: streaming active -> yields each item from the feature iterator.
|
|
53
|
-
if (config.feature && config.feature.streaming) {
|
|
54
|
-
const sdk = ProjectNameSDK.test(seed, { feature: { streaming: { active: true } } })
|
|
55
|
-
const got = []
|
|
56
|
-
for await (const item of sdk.EntityName().stream('list')) {
|
|
57
|
-
if (Array.isArray(item)) { got.push(...item) } else { got.push(item) }
|
|
58
|
-
}
|
|
59
|
-
assert.equal(got.length, 3)
|
|
60
|
-
}
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
|
|
64
33
|
test('basic', async () => {
|
|
65
34
|
// <[SLOT:basic]>
|
|
66
35
|
})
|