@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,105 @@
|
|
|
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 { swiftVarName } from './utility_swift'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct Swift `Value` literal for a param: numeric/boolean/array/
|
|
14
|
+
// object params render a typed literal; strings render the quoted placeholder.
|
|
15
|
+
// The SDK's loose object model means every value is a `Value` inside a `VMap`.
|
|
16
|
+
function swiftLit(type: any, placeholder: string = 'example'): string {
|
|
17
|
+
const k = canonKey(type)
|
|
18
|
+
if ('INTEGER' === k) return '.int(1)'
|
|
19
|
+
if ('NUMBER' === k) return '.double(1.0)'
|
|
20
|
+
if ('BOOLEAN' === k) return '.bool(true)'
|
|
21
|
+
if ('ARRAY' === k) return '.list([])'
|
|
22
|
+
if ('OBJECT' === k) return '.map(VMap())'
|
|
23
|
+
return `.string("${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
|
+
const MODULE = model.const.Name + 'Sdk'
|
|
32
|
+
|
|
33
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
34
|
+
|
|
35
|
+
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
36
|
+
|
|
37
|
+
const authActive = isAuthActive(model)
|
|
38
|
+
|
|
39
|
+
Content(`\`\`\`swift
|
|
40
|
+
import ${MODULE}
|
|
41
|
+
|
|
42
|
+
`)
|
|
43
|
+
|
|
44
|
+
if (authActive) {
|
|
45
|
+
Content(`let options = VMap()
|
|
46
|
+
options.entries["apikey"] = .string(
|
|
47
|
+
ProcessInfo.processInfo.environment["${envName(model)}_APIKEY"] ?? "")
|
|
48
|
+
let client = ${SDK}(options)
|
|
49
|
+
|
|
50
|
+
`)
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
Content(`let client = ${SDK}()
|
|
54
|
+
|
|
55
|
+
`)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (exampleEntity) {
|
|
59
|
+
const eName = nom(exampleEntity, 'Name')
|
|
60
|
+
const eVar = swiftVarName(exampleEntity.name)
|
|
61
|
+
const eNameLower = eName.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 a Value list, throws on error)
|
|
69
|
+
let ${eVar}List = try client.${eName}().list(nil, nil)
|
|
70
|
+
for ${eVar} in ${eVar}List.asList?.items ?? [] {
|
|
71
|
+
print(${eVar})
|
|
72
|
+
}
|
|
73
|
+
`)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (opnames.includes('load')) {
|
|
77
|
+
// Every REQUIRED load-match key (id first, then parent path params like
|
|
78
|
+
// page_id) — the same shape the runtime resolves path params from, so
|
|
79
|
+
// the example always works.
|
|
80
|
+
const loadItems = opRequestShape(exampleEntity, 'load').items
|
|
81
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
82
|
+
.sort((a: any, b: any) =>
|
|
83
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
84
|
+
const loadArg = 0 < loadItems.length
|
|
85
|
+
? `VMap([${loadItems.map((it: any) =>
|
|
86
|
+
`("${it.name}", ${swiftLit(it.type,
|
|
87
|
+
it.name === idF ? 'example_id' : 'example_' + it.name)})`).join(', ')}])`
|
|
88
|
+
: 'nil'
|
|
89
|
+
Content(`
|
|
90
|
+
// Load a specific ${eNameLower} (returns the record, throws on error)
|
|
91
|
+
let ${eVar} = try client.${eName}().load(${loadArg}, nil)
|
|
92
|
+
print(${eVar})
|
|
93
|
+
`)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
Content(`\`\`\`
|
|
98
|
+
`)
|
|
99
|
+
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
export {
|
|
104
|
+
ReadmeTopQuick
|
|
105
|
+
}
|
|
@@ -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 { swiftVarName } from './utility_swift'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct Swift `Value` literal for a field's canonical type.
|
|
13
|
+
function swiftLit(type: any): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k) return '.int(1)'
|
|
16
|
+
if ('NUMBER' === k) return '.double(1.0)'
|
|
17
|
+
if ('BOOLEAN' === k) return '.bool(true)'
|
|
18
|
+
if ('ARRAY' === k) return '.list([])'
|
|
19
|
+
if ('OBJECT' === k) return '.map(VMap())'
|
|
20
|
+
return '.string("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(`\`\`\`swift
|
|
36
|
+
let client = ${SDK}.testSDK(nil, nil)
|
|
37
|
+
`)
|
|
38
|
+
|
|
39
|
+
if (exampleEntity && primaryOp) {
|
|
40
|
+
const eName = exampleEntity.Name
|
|
41
|
+
const idF = entityIdField(exampleEntity)
|
|
42
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
43
|
+
let arg = 'nil'
|
|
44
|
+
if (isMatchOp) {
|
|
45
|
+
// Every REQUIRED match key (id first) — the same shape that generates
|
|
46
|
+
// the op's request type, so the block stays honest.
|
|
47
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
48
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
49
|
+
.sort((a: any, b: any) =>
|
|
50
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
51
|
+
arg = 0 < items.length
|
|
52
|
+
? `VMap([${items.map((it: any) =>
|
|
53
|
+
`("${it.name}", ${it.name === idF ? '.string("test01")' : swiftLit(it.type)})`).join(', ')}])`
|
|
54
|
+
: 'nil'
|
|
55
|
+
} else if ('create' === primaryOp || 'update' === primaryOp) {
|
|
56
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
57
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
58
|
+
const required = items.filter((it: any) => !it.optional)
|
|
59
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
60
|
+
arg = `VMap([${chosen.map((it: any) =>
|
|
61
|
+
`("${it.name}", ${swiftLit(it.type)})`).join(', ')}])`
|
|
62
|
+
}
|
|
63
|
+
const eVar = swiftVarName(exampleEntity.name) + ('list' === primaryOp ? 'List' : '')
|
|
64
|
+
Content(`let ${eVar} = try client.${eName}().${primaryOp}(${arg}, nil)
|
|
65
|
+
print(${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_swift'
|
|
15
15
|
import { TestDirect } from './TestDirect_swift'
|
|
16
|
+
import { ReadmeExamplesTest } from './ReadmeExamplesTest_swift'
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
const Test = cmp(function Test(props: any) {
|
|
@@ -29,6 +30,9 @@ const Test = cmp(function Test(props: any) {
|
|
|
29
30
|
TestEntity({ target, entity })
|
|
30
31
|
TestDirect({ target, entity })
|
|
31
32
|
})
|
|
33
|
+
|
|
34
|
+
// Validate the documented swift examples in the READMEs are well-formed.
|
|
35
|
+
ReadmeExamplesTest({ target })
|
|
32
36
|
})
|
|
33
37
|
})
|
|
34
38
|
})
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
File, Content,
|
|
22
22
|
} from '@voxgig/sdkgen'
|
|
23
23
|
|
|
24
|
-
import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
|
|
24
|
+
import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
|
|
25
25
|
|
|
26
26
|
import {
|
|
27
27
|
KIT,
|
|
@@ -39,15 +39,29 @@ function propKey(name: string): string {
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
42
|
-
const { model } = props.ctx$
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
const { model, log } = props.ctx$
|
|
43
|
+
|
|
44
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
45
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
46
|
+
// collection, so inactive entities still get generated entity code that
|
|
47
|
+
// references these typed names. The typed model must cover them too.
|
|
48
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
49
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
50
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
51
|
+
// filter, so inactive entities still get class files referencing these
|
|
52
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
53
|
+
// with the go emitter's fix.
|
|
54
|
+
const entityList = each(entity).filter((e: any) => e && null != e.name)
|
|
46
55
|
// Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
|
|
47
56
|
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
48
57
|
// `Name = undefined` below. Parity with the go emitter's fix.
|
|
49
58
|
entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
50
59
|
|
|
60
|
+
// Surface duplicate generated type names (two entities with the same
|
|
61
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
62
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
63
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
64
|
+
|
|
51
65
|
File({ name: model.const.Name + 'Types.' + LANG }, () => {
|
|
52
66
|
|
|
53
67
|
Content(`// Typed models for the ${model.const.Name} SDK.
|
|
@@ -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?: Record<string, any>) {
|
|
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, target.name)
|
|
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
|
|
@@ -143,7 +143,7 @@ const ${eVar}s = await client.${entity.Name}().list()
|
|
|
143
143
|
const ${eVar} = await client.${entity.Name}().create({
|
|
144
144
|
`)
|
|
145
145
|
createItems.map((it: any) => {
|
|
146
|
-
Content(` ${it.name}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
|
|
146
|
+
Content(` ${jsKey(it.name)}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
|
|
147
147
|
`)
|
|
148
148
|
})
|
|
149
149
|
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,
|
|
@@ -20,7 +20,7 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
20
20
|
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
21
21
|
const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
|
|
22
22
|
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
23
|
-
const eVar =
|
|
23
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'ts')
|
|
24
24
|
|
|
25
25
|
const primaryOpDef = exampleEntity && primaryOp && exampleEntity.op && exampleEntity.op[primaryOp]
|
|
26
26
|
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
@@ -35,7 +35,17 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
35
35
|
if (!exampleEntity || !primaryOp) return ''
|
|
36
36
|
if ('list' === primaryOp) return ''
|
|
37
37
|
if (isMatchOp) {
|
|
38
|
-
|
|
38
|
+
// Every REQUIRED match key (id first), not just idF — a composite-match
|
|
39
|
+
// entity (e.g. Umbrella's FlatPermission, database_id + id) needs them all
|
|
40
|
+
// to satisfy the typed <Name>LoadMatch. Mirrors ReadmeTopTest.
|
|
41
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
42
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
43
|
+
.sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
44
|
+
if (0 === items.length) return ''
|
|
45
|
+
const pairs = items.map((it: any) =>
|
|
46
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
|
|
47
|
+
it.name === idF ? idPlaceholder : 'example_' + it.name)}`)
|
|
48
|
+
return `{ ${pairs.join(', ')} }`
|
|
39
49
|
}
|
|
40
50
|
// create / update: a body of the required writable fields.
|
|
41
51
|
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
@@ -43,7 +53,7 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
43
53
|
const required = items.filter((it: any) => !it.optional)
|
|
44
54
|
const chosen = required.length ? required : items.slice(0, 3)
|
|
45
55
|
const pairs = chosen.map((it: any) =>
|
|
46
|
-
`${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
|
|
56
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
|
|
47
57
|
return `{ ${pairs.join(', ')} }`
|
|
48
58
|
}
|
|
49
59
|
const testCallArg = primaryArg('test01')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -48,7 +48,7 @@ const client = ${ctor}
|
|
|
48
48
|
const eName = nom(exampleEntity, 'Name')
|
|
49
49
|
// Variable-safe lowercase name — a `Delete`/`Class` entity must not bind a
|
|
50
50
|
// reserved word (`const delete = ...` is a TS1109 syntax error).
|
|
51
|
-
const eVar =
|
|
51
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'ts')
|
|
52
52
|
const article = /^[aeiou]/i.test(eName) ? 'an' : 'a'
|
|
53
53
|
const opnames = entityOps(exampleEntity)
|
|
54
54
|
// Model-driven id key: `idF` is the entity's id-like MATCH field name, or
|
|
@@ -78,7 +78,7 @@ for (const ${eVar} of ${eVar}s) {
|
|
|
78
78
|
|
|
79
79
|
if (nestedEntity) {
|
|
80
80
|
const neName = nom(nestedEntity, 'Name')
|
|
81
|
-
const neVar =
|
|
81
|
+
const neVar = exampleVarName(neName.toLowerCase(), 'ts')
|
|
82
82
|
const neArticle = /^[aeiou]/i.test(neName) ? 'an' : 'a'
|
|
83
83
|
const loadOp = nestedEntity.op && nestedEntity.op.load
|
|
84
84
|
|
|
@@ -94,7 +94,7 @@ for (const ${eVar} of ${eVar}s) {
|
|
|
94
94
|
const parentParam = parentItem && parentItem.name
|
|
95
95
|
const parentName = parentParam ? parentParam.replace(/_id$/, '') : 'its parent'
|
|
96
96
|
const neMatchLines = neRequired.map((it: any) =>
|
|
97
|
-
` ${it.name}: ${exampleValue(nestedEntity, loadOp, it.name,
|
|
97
|
+
` ${jsKey(it.name)}: ${exampleValue(nestedEntity, loadOp, it.name,
|
|
98
98
|
it.name === neIdF ? 'example_id' : 'example_' + it.name)},`)
|
|
99
99
|
|
|
100
100
|
Content(`### 3. Load ${neArticle} ${neName.toLowerCase()}
|
|
@@ -124,7 +124,7 @@ ${neMatchLines.join('\n')}
|
|
|
124
124
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
125
125
|
const loadArg = 0 < loadRequired.length
|
|
126
126
|
? `{ ${loadRequired.map((it: any) =>
|
|
127
|
-
`${it.name}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op.load, it.name,
|
|
127
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op.load, it.name,
|
|
128
128
|
it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')} }`
|
|
129
129
|
: ''
|
|
130
130
|
|
|
@@ -169,15 +169,33 @@ try {
|
|
|
169
169
|
? (required.length ? required : items.slice(0, 2))
|
|
170
170
|
: required.concat(optional).slice(0, Math.max(2, required.length))
|
|
171
171
|
return chosen.map((it: any) =>
|
|
172
|
-
` ${it.name}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
|
|
172
|
+
` ${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
// The id VALUE for an update/remove match. When the entity's DATA type
|
|
176
176
|
// carries the id (dataIdF) AND a `created` record exists, take it off the
|
|
177
177
|
// returned record; otherwise use a type-correct literal — reading
|
|
178
178
|
// `created.id` off an id-less data type is a TS2339.
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
// Type of the data field we would read off `created` (e.g. number for an
|
|
180
|
+
// integer id). null when unknown.
|
|
181
|
+
const dataFields: any[] = exampleEntity.fields ? each(exampleEntity.fields) : []
|
|
182
|
+
const dataIdType = dataIdF
|
|
183
|
+
? (dataFields.find((f: any) => f && f.name === dataIdF) || {}).type
|
|
184
|
+
: null
|
|
185
|
+
// `created.<dataIdF>` is only usable as an op's id-match value when its
|
|
186
|
+
// type matches that op's id PARAM type. An id that is integer in the data
|
|
187
|
+
// type but string in the match path (a spec quirk seen on management
|
|
188
|
+
// APIs) would be a TS2322 otherwise — fall back to a type-correct literal.
|
|
189
|
+
const usesCreatedId = (opname: string): boolean => {
|
|
190
|
+
if (null == dataIdF || !opnames.includes('create')) {
|
|
191
|
+
return false
|
|
192
|
+
}
|
|
193
|
+
const matchItem = opRequestShape(exampleEntity, opname).items
|
|
194
|
+
.find((it: any) => it.name === idF)
|
|
195
|
+
const matchType = matchItem ? matchItem.type : null
|
|
196
|
+
return null == matchType || null == dataIdType || matchType === dataIdType
|
|
197
|
+
}
|
|
198
|
+
const idValueFor = (opname: string): string => usesCreatedId(opname)
|
|
181
199
|
? `created.${dataIdF}!`
|
|
182
200
|
: exampleValue(exampleEntity, exampleEntity.op[opname], idF as string, 'example_id')
|
|
183
201
|
|
|
@@ -198,7 +216,7 @@ const created = await client.${eName}().create({${createBody}})
|
|
|
198
216
|
// type carries one, else a literal), plus a couple of patch fields.
|
|
199
217
|
const updateLines = (idF ? [` ${idF}: ${idValueFor('update')},`] : []).concat(exampleFields('update'))
|
|
200
218
|
const updateBody = updateLines.length ? '\n' + updateLines.join('\n') + '\n' : ''
|
|
201
|
-
Content(`// Update${
|
|
219
|
+
Content(`// Update${usesCreatedId('update') ? ' — the id comes straight off the returned entity' : ''}
|
|
202
220
|
const updated = await client.${eName}().update({${updateBody}})
|
|
203
221
|
|
|
204
222
|
`)
|
|
@@ -211,8 +229,8 @@ const updated = await client.${eName}().update({${updateBody}})
|
|
|
211
229
|
.sort((a: any, b: any) =>
|
|
212
230
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
213
231
|
.map((it: any) => it.name === idF
|
|
214
|
-
? ` ${it.name}: ${idValueFor('remove')},`
|
|
215
|
-
: ` ${it.name}: ${exampleValue(exampleEntity, exampleEntity.op.remove, it.name, 'example_' + it.name)},`)
|
|
232
|
+
? ` ${jsKey(it.name)}: ${idValueFor('remove')},`
|
|
233
|
+
: ` ${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op.remove, it.name, 'example_' + it.name)},`)
|
|
216
234
|
Content(`// Remove
|
|
217
235
|
await client.${eName}().remove(${removeLines.length ? `{\n${removeLines.join('\n')}\n}` : ''})
|
|
218
236
|
`)
|
|
@@ -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, target.name)
|
|
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
|
|
@@ -308,7 +308,7 @@ const results = await client.${ent.Name}().${opname}()
|
|
|
308
308
|
const result = await client.${ent.Name}().create({
|
|
309
309
|
`)
|
|
310
310
|
createItems.map((it: any) => {
|
|
311
|
-
Content(` ${it.name}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
|
|
311
|
+
Content(` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
|
|
312
312
|
`)
|
|
313
313
|
})
|
|
314
314
|
Content(`})
|
|
@@ -324,7 +324,7 @@ const result = await client.${ent.Name}().create({
|
|
|
324
324
|
.sort((a: any, b: any) =>
|
|
325
325
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
326
326
|
const updateLines = updateItems.map((it: any) =>
|
|
327
|
-
` ${it.name}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
|
|
327
|
+
` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
|
|
328
328
|
it.name === idF ? ent.name + '_id' : it.name)},\n`).join('')
|
|
329
329
|
Content(`\`\`\`ts
|
|
330
330
|
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,
|
|
@@ -30,7 +30,7 @@ const client = ${ctor}
|
|
|
30
30
|
|
|
31
31
|
if (exampleEntity) {
|
|
32
32
|
const eName = nom(exampleEntity, 'Name')
|
|
33
|
-
const eVar =
|
|
33
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'ts')
|
|
34
34
|
const opnames = entityOps(exampleEntity)
|
|
35
35
|
|
|
36
36
|
let hasCall = false
|
|
@@ -58,7 +58,7 @@ for (const ${eVar} of ${eVar}s) {
|
|
|
58
58
|
|
|
59
59
|
if (nestedEntity) {
|
|
60
60
|
const neName = nom(nestedEntity, 'Name')
|
|
61
|
-
const neVar =
|
|
61
|
+
const neVar = exampleVarName(neName.toLowerCase(), 'ts')
|
|
62
62
|
const loadOp = nestedEntity.op && nestedEntity.op.load
|
|
63
63
|
|
|
64
64
|
// Every REQUIRED load-match key (parent keys first, own id last) — the
|
|
@@ -70,7 +70,7 @@ for (const ${eVar} of ${eVar}s) {
|
|
|
70
70
|
.sort((a: any, b: any) =>
|
|
71
71
|
(a.name === neIdF ? 1 : 0) - (b.name === neIdF ? 1 : 0))
|
|
72
72
|
.map((it: any) =>
|
|
73
|
-
` ${it.name}: ${exampleValue(nestedEntity, loadOp, it.name,
|
|
73
|
+
` ${jsKey(it.name)}: ${exampleValue(nestedEntity, loadOp, it.name,
|
|
74
74
|
it.name === neIdF ? 'example_id' : 'example_' + it.name)},`)
|
|
75
75
|
|
|
76
76
|
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(), 'ts') +
|
|
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 ${eName} records` : `a bare ${eName}`} populated with mock data
|
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
cmp,
|
|
18
18
|
snakify,
|
|
19
19
|
isAuthActive,
|
|
20
|
+
jsProp,
|
|
21
|
+
jsOptProp,
|
|
20
22
|
} from '@voxgig/sdkgen'
|
|
21
23
|
|
|
22
24
|
|
|
@@ -192,7 +194,7 @@ function generateDirectLoad(model: Model, entity: ModelEntity) {
|
|
|
192
194
|
.filter((q: any) => q.reqd && undefined !== q.example && null !== q.example)
|
|
193
195
|
const hasLiveQuery = liveQueryEntries.length > 0
|
|
194
196
|
const liveQueryLines = liveQueryEntries
|
|
195
|
-
.map((q: any) => ` query
|
|
197
|
+
.map((q: any) => ` ${jsProp('query', q.name)} = ${JSON.stringify(q.example)}`)
|
|
196
198
|
.join('\n')
|
|
197
199
|
|
|
198
200
|
// Get list info for live mode bootstrapping
|
|
@@ -245,12 +247,12 @@ function generateDirectLoad(model: Model, entity: ModelEntity) {
|
|
|
245
247
|
let liveParamsBlock = ''
|
|
246
248
|
if (allLoadParamsHaveExamples) {
|
|
247
249
|
const exampleLines = loadParams.map(
|
|
248
|
-
(p: any) => ` params
|
|
250
|
+
(p: any) => ` ${jsProp('params', p.name)} = ${JSON.stringify(p.example)}`
|
|
249
251
|
).join('\n')
|
|
250
252
|
liveParamsBlock = ` if (setup.live) {
|
|
251
253
|
${liveQueryPrefix}${exampleLines}
|
|
252
254
|
} else {
|
|
253
|
-
${loadParams.map((p: any, i: number) => ` params
|
|
255
|
+
${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
|
|
254
256
|
}`
|
|
255
257
|
}
|
|
256
258
|
else if (hasList) {
|
|
@@ -262,7 +264,7 @@ ${loadParams.map((p: any, i: number) => ` params.${p.name} = 'direct0${i +
|
|
|
262
264
|
const listParamLines = liveListParams.map((lp: any) =>
|
|
263
265
|
` ${lp.name}: setup.idmap['${lp.key}'],`).join('\n')
|
|
264
266
|
const ancestorParamLines = liveAncestorParams.map((lp: any) =>
|
|
265
|
-
` params
|
|
267
|
+
` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n')
|
|
266
268
|
// Try every load-path param name as the candidate field on listData[0].
|
|
267
269
|
// Some APIs name the path param differently from the response field
|
|
268
270
|
// (e.g. path uses {id} while response has mal_id), so we attempt the
|
|
@@ -286,14 +288,14 @@ ${listParamLines}
|
|
|
286
288
|
if (null == listArr || listArr.length === 0) {
|
|
287
289
|
return // skip: no entities to load in live mode
|
|
288
290
|
}
|
|
289
|
-
const candidateId = listArr[0]
|
|
291
|
+
const candidateId = ${jsOptProp('listArr[0]', idParamName)} ?? listArr[0]?.id
|
|
290
292
|
if (null == candidateId) {
|
|
291
293
|
return // skip: list response shape does not expose load identifier
|
|
292
294
|
}
|
|
293
|
-
params
|
|
295
|
+
${jsProp('params', idParamName)} = candidateId
|
|
294
296
|
${ancestorParamLines}
|
|
295
297
|
} else {
|
|
296
|
-
${loadParams.map((p: any, i: number) => ` params
|
|
298
|
+
${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
|
|
297
299
|
}`
|
|
298
300
|
} else if (hasLiveQuery || loadParams.length > 0) {
|
|
299
301
|
// Synthetic-only fallback: if there are load params with no examples
|
|
@@ -306,7 +308,7 @@ ${loadParams.map((p: any, i: number) => ` params.${p.name} = 'direct0${i +
|
|
|
306
308
|
liveParamsBlock = ` if (setup.live) {
|
|
307
309
|
${liveQueryPrefix.replace(/\n$/, '')}
|
|
308
310
|
} else {
|
|
309
|
-
${loadParams.map((p: any, i: number) => ` params
|
|
311
|
+
${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
|
|
310
312
|
}`
|
|
311
313
|
} else {
|
|
312
314
|
liveParamsBlock = ''
|
|
@@ -369,7 +371,7 @@ function generateDirectList(model: Model, entity: ModelEntity) {
|
|
|
369
371
|
const listQuery = listPoint.args?.query || []
|
|
370
372
|
const liveQueryLines = listQuery
|
|
371
373
|
.filter((q: any) => q.reqd && undefined !== q.example && null !== q.example)
|
|
372
|
-
.map((q: any) => ` query
|
|
374
|
+
.map((q: any) => ` ${jsProp('query', q.name)} = ${JSON.stringify(q.example)}`)
|
|
373
375
|
.join('\n')
|
|
374
376
|
|
|
375
377
|
// Build live params
|
|
@@ -388,10 +390,10 @@ function generateDirectList(model: Model, entity: ModelEntity) {
|
|
|
388
390
|
const liveLines = [
|
|
389
391
|
liveQueryLines,
|
|
390
392
|
liveParams.map((lp: any) =>
|
|
391
|
-
` params
|
|
393
|
+
` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n'),
|
|
392
394
|
].filter(Boolean).join('\n')
|
|
393
395
|
const mockLines = listParams.map((p: any, i: number) =>
|
|
394
|
-
` params
|
|
396
|
+
` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')
|
|
395
397
|
|
|
396
398
|
paramsBlock = ` const params: any = {}
|
|
397
399
|
const query: any = {}
|