@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,92 @@
|
|
|
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 { csVarName } from './utility_csharp'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct C# 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 Dictionary<string, object?>.
|
|
16
|
+
function csLit(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 'new List<object?>()'
|
|
22
|
+
if ('OBJECT' === k) return 'new Dictionary<string, object?>()'
|
|
23
|
+
return `"${placeholder}"`
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
|
|
28
|
+
const { target, ctx$: { model } } = props
|
|
29
|
+
|
|
30
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
31
|
+
|
|
32
|
+
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
33
|
+
|
|
34
|
+
const authActive = isAuthActive(model)
|
|
35
|
+
const ctor = authActive
|
|
36
|
+
? `new ${model.const.Name}SDK(new Dictionary<string, object?>\n{\n ["apikey"] = Environment.GetEnvironmentVariable("${envName(model)}_APIKEY"),\n})`
|
|
37
|
+
: `new ${model.const.Name}SDK()`
|
|
38
|
+
|
|
39
|
+
Content(`\`\`\`csharp
|
|
40
|
+
using ${model.const.Name}Sdk;
|
|
41
|
+
|
|
42
|
+
var client = ${ctor};
|
|
43
|
+
|
|
44
|
+
`)
|
|
45
|
+
|
|
46
|
+
if (exampleEntity) {
|
|
47
|
+
const eName = nom(exampleEntity, 'Name')
|
|
48
|
+
// Sanitise the local variable name — an entity whose camelCased name is a
|
|
49
|
+
// C# keyword gets a trailing underscore (csVarName) so the snippet compiles.
|
|
50
|
+
const eVar = csVarName(exampleEntity.name)
|
|
51
|
+
const opnames = Object.keys(exampleEntity.op || {})
|
|
52
|
+
// Model-driven id key: null when the entity has no id-like field, in which
|
|
53
|
+
// case the load example takes an empty match.
|
|
54
|
+
const idF = entityIdField(exampleEntity)
|
|
55
|
+
|
|
56
|
+
if (opnames.includes('list')) {
|
|
57
|
+
Content(`// List all ${eName.toLowerCase()}s (returns object?, an aggregate list; raises on error)
|
|
58
|
+
var ${eVar}List = client.${eName}().List(null);
|
|
59
|
+
Console.WriteLine(${eVar}List);
|
|
60
|
+
`)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (opnames.includes('load')) {
|
|
64
|
+
// Every REQUIRED load-match key (id first, then parent path params like
|
|
65
|
+
// page_id) — the same shape the runtime resolves path params from, so
|
|
66
|
+
// the example always works.
|
|
67
|
+
const loadItems = opRequestShape(exampleEntity, 'load').items
|
|
68
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
69
|
+
.sort((a: any, b: any) =>
|
|
70
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
71
|
+
const loadArg = 0 < loadItems.length
|
|
72
|
+
? `new Dictionary<string, object?> {${loadItems.map((it: any) =>
|
|
73
|
+
` ["${it.name}"] = ${csLit(it.type,
|
|
74
|
+
it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(',')} }`
|
|
75
|
+
: 'null'
|
|
76
|
+
Content(`
|
|
77
|
+
// Load a specific ${eName.toLowerCase()} (returns the record, raises on error)
|
|
78
|
+
var ${eVar} = client.${eName}().Load(${loadArg});
|
|
79
|
+
Console.WriteLine(${eVar});
|
|
80
|
+
`)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
Content(`\`\`\`
|
|
85
|
+
`)
|
|
86
|
+
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
export {
|
|
91
|
+
ReadmeTopQuick
|
|
92
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
import { csVarName } from './utility_csharp'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct C# literal for a field's canonical type.
|
|
14
|
+
function csLit(type: any): string {
|
|
15
|
+
const k = canonKey(type)
|
|
16
|
+
if ('INTEGER' === k) return '1L'
|
|
17
|
+
if ('NUMBER' === k) return '1.0'
|
|
18
|
+
if ('BOOLEAN' === k) return 'true'
|
|
19
|
+
if ('ARRAY' === k) return 'new List<object?>()'
|
|
20
|
+
if ('OBJECT' === k) return 'new Dictionary<string, object?>()'
|
|
21
|
+
return '"example"'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
26
|
+
const { target, ctx$: { model } } = props
|
|
27
|
+
|
|
28
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
29
|
+
|
|
30
|
+
// Pick an entity with a real op (prefer a read op) — never fabricate a
|
|
31
|
+
// `load` on an op-less entity.
|
|
32
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
33
|
+
|
|
34
|
+
Content(`\`\`\`csharp
|
|
35
|
+
var client = ${model.const.Name}SDK.TestSDK(null, null);
|
|
36
|
+
`)
|
|
37
|
+
|
|
38
|
+
if (exampleEntity && primaryOp) {
|
|
39
|
+
const eName = nom(exampleEntity, 'Name')
|
|
40
|
+
const idF = entityIdField(exampleEntity)
|
|
41
|
+
const opMethod = primaryOp.charAt(0).toUpperCase() + primaryOp.slice(1)
|
|
42
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
43
|
+
let arg = 'null'
|
|
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
|
+
? `new Dictionary<string, object?> {${items.map((it: any) =>
|
|
53
|
+
` ["${it.name}"] = ${it.name === idF ? '"test01"' : csLit(it.type)}`).join(',')} }`
|
|
54
|
+
: 'null'
|
|
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 = `new Dictionary<string, object?> {${chosen.map((it: any) =>
|
|
61
|
+
` ["${it.name}"] = ${csLit(it.type)}`).join(',')} }`
|
|
62
|
+
}
|
|
63
|
+
const eVar = csVarName(exampleEntity.name) + ('list' === primaryOp ? 'List' : '')
|
|
64
|
+
Content(`var ${eVar} = client.${eName}().${opMethod}(${arg});
|
|
65
|
+
Console.WriteLine(${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_csharp'
|
|
15
15
|
import { TestDirect } from './TestDirect_csharp'
|
|
16
|
+
import { ReadmeExamplesTest } from './ReadmeExamplesTest_csharp'
|
|
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 csharp examples in the root + per-language docs.
|
|
35
|
+
ReadmeExamplesTest({ target })
|
|
32
36
|
})
|
|
33
37
|
})
|
|
34
38
|
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
// (op.<name>.points[].args.params[]) and emits one file,
|
|
6
6
|
// lib/<Sdk>Types.dart, with a Dart class per active entity plus a
|
|
7
7
|
// request/match class per active op. Field/param sentinels ($STRING,
|
|
8
|
-
// $INTEGER, ...)
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// respected.
|
|
8
|
+
// $INTEGER, ...) map to Dart types via the SHARED canonToType 'dart' column
|
|
9
|
+
// (the single source of truth per language — do not keep a local table
|
|
10
|
+
// here); the doc-comment sentinel key comes from the shared canonKey helper
|
|
11
|
+
// so the source of truth (@voxgig/apidef VALID_CANON) is respected.
|
|
12
12
|
//
|
|
13
13
|
// TYPE CHOICE: plain classes with nullable fields + fromMap/toMap. The
|
|
14
14
|
// generated ops accept/return runtime maps (Dart has no structural typing),
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
File, Content,
|
|
24
24
|
} from '@voxgig/sdkgen'
|
|
25
25
|
|
|
26
|
-
import { canonKey, opTypeName, opRequestShape } from '@voxgig/sdkgen'
|
|
26
|
+
import { canonKey, canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
|
|
27
27
|
|
|
28
28
|
import {
|
|
29
29
|
KIT,
|
|
@@ -31,21 +31,7 @@ import {
|
|
|
31
31
|
} from '@voxgig/apidef'
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
const DART_TYPE: Record<string, string> = {
|
|
36
|
-
STRING: 'String',
|
|
37
|
-
INTEGER: 'int',
|
|
38
|
-
NUMBER: 'num',
|
|
39
|
-
BOOLEAN: 'bool',
|
|
40
|
-
NULL: 'Object',
|
|
41
|
-
ARRAY: 'List<dynamic>',
|
|
42
|
-
OBJECT: 'Map<String, dynamic>',
|
|
43
|
-
ANY: 'dynamic',
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function dartType(sentinel: unknown): string {
|
|
47
|
-
return DART_TYPE[canonKey(sentinel)] ?? 'dynamic'
|
|
48
|
-
}
|
|
34
|
+
const LANG = 'dart'
|
|
49
35
|
|
|
50
36
|
|
|
51
37
|
// Dart reserved words that cannot be used as field names.
|
|
@@ -65,14 +51,28 @@ function dartIdent(name: string): boolean {
|
|
|
65
51
|
|
|
66
52
|
// Emit a Dart data class from a list of {name, type, optional} items. All
|
|
67
53
|
// fields are nullable (`optional` is documented) since the runtime passes
|
|
68
|
-
// partial maps; fromMap is lenient (mismatched value types become null).
|
|
69
|
-
|
|
54
|
+
// partial maps; fromMap is lenient (mismatched value types become null). An
|
|
55
|
+
// item whose name is not a legal identifier is skipped (WITH a warning — the
|
|
56
|
+
// key stays reachable via the runtime map, but its absence from the typed
|
|
57
|
+
// model should be visible, not silent).
|
|
58
|
+
function emitClass(typeName: string, items: any[], log?: any): void {
|
|
70
59
|
const usable = items.filter((it: any) => it && null != it.name && dartIdent(it.name))
|
|
71
60
|
|
|
61
|
+
items.forEach((it: any) => {
|
|
62
|
+
if (it && null != it.name && !dartIdent(it.name) && log && log.warn) {
|
|
63
|
+
log.warn({
|
|
64
|
+
point: 'entity-types-skip-field', typeName, field: it.name,
|
|
65
|
+
note: `dart: field "${it.name}" of ${typeName} has no legal Dart ` +
|
|
66
|
+
`identifier form; omitted from the typed model (still reachable ` +
|
|
67
|
+
`via the runtime map)`,
|
|
68
|
+
})
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
|
|
72
72
|
Content(`class ${typeName} {
|
|
73
73
|
`)
|
|
74
74
|
usable.forEach((it: any) => {
|
|
75
|
-
const base =
|
|
75
|
+
const base = canonToType(it.type, LANG)
|
|
76
76
|
const t = 'dynamic' === base ? 'dynamic' : base + '?'
|
|
77
77
|
const req = it.optional ? '' : ' (required at the API)'
|
|
78
78
|
Content(` /// ${canonKey(it.type) || 'ANY'}${req}
|
|
@@ -101,7 +101,7 @@ function emitClass(typeName: string, items: any[]): void {
|
|
|
101
101
|
factory ${typeName}.fromMap(Map<String, dynamic> m) => ${typeName}(
|
|
102
102
|
`)
|
|
103
103
|
usable.forEach((it: any) => {
|
|
104
|
-
const base =
|
|
104
|
+
const base = canonToType(it.type, LANG)
|
|
105
105
|
if ('dynamic' === base) {
|
|
106
106
|
Content(` ${it.name}: m['${it.name}'],
|
|
107
107
|
`)
|
|
@@ -134,16 +134,30 @@ function emitClass(typeName: string, items: any[]): void {
|
|
|
134
134
|
|
|
135
135
|
|
|
136
136
|
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
137
|
-
const { model } = props.ctx$
|
|
137
|
+
const { model, log } = props.ctx$
|
|
138
138
|
const { target } = props
|
|
139
139
|
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
141
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
142
|
+
// collection, so inactive entities still get generated entity code that
|
|
143
|
+
// references these typed names. The typed model must cover them too.
|
|
144
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
145
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
146
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
147
|
+
// filter, so inactive entities still get class files referencing these
|
|
148
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
149
|
+
// with the go emitter's fix.
|
|
150
|
+
const entityList = each(entity).filter((e: any) => e && null != e.name)
|
|
142
151
|
// Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
|
|
143
152
|
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
144
153
|
// `Name = undefined` below. Parity with the go emitter's fix.
|
|
145
154
|
entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
146
155
|
|
|
156
|
+
// Surface duplicate generated type names (two entities with the same
|
|
157
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
158
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
159
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
160
|
+
|
|
147
161
|
File({ name: model.const.Name + 'Types.' + target.ext }, () => {
|
|
148
162
|
|
|
149
163
|
Content(`// Typed models for the ${model.const.Name} SDK.
|
|
@@ -168,7 +182,7 @@ const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
|
168
182
|
name: f.name,
|
|
169
183
|
type: f.type,
|
|
170
184
|
optional: false === f.req,
|
|
171
|
-
})))
|
|
185
|
+
})), log)
|
|
172
186
|
|
|
173
187
|
// Per active op: a request/match type. The members and each member's
|
|
174
188
|
// required/optional decision come from the shared partiality policy
|
|
@@ -182,7 +196,7 @@ const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
|
182
196
|
const typeName = opTypeName(Name, opname)
|
|
183
197
|
const { items } = opRequestShape(ent, opname)
|
|
184
198
|
|
|
185
|
-
emitClass(typeName, items)
|
|
199
|
+
emitClass(typeName, items, log)
|
|
186
200
|
})
|
|
187
201
|
})
|
|
188
202
|
})
|
|
@@ -64,6 +64,14 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
64
64
|
`// Typed models: see ../${model.const.Name}Types.dart ` +
|
|
65
65
|
`(${entity.Name} and the per-op request/match types).`),
|
|
66
66
|
|
|
67
|
+
// dart:async (Future/Stream) and ErrUtility are only referenced by
|
|
68
|
+
// op method bodies, so an op-less entity would import them unused.
|
|
69
|
+
// Emit them only when the entity actually has operations.
|
|
70
|
+
'#OpImports': opnames.length > 0
|
|
71
|
+
? ({ indent }: any) => Content({ indent },
|
|
72
|
+
`import 'dart:async';\nimport '../utility/ErrUtility.dart';`)
|
|
73
|
+
: '',
|
|
74
|
+
|
|
67
75
|
...opfrags,
|
|
68
76
|
}
|
|
69
77
|
})
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
// Type names come from the shared canonToType 'dart' column (single source of truth).
|
|
11
|
+
|
|
12
|
+
// A type-correct Dart literal for a field's canonical type. Strings render
|
|
13
|
+
// the quoted placeholder (single-quoted, matching the generated Dart style).
|
|
14
|
+
function dartLit(type: any, placeholder: string = 'example'): string {
|
|
15
|
+
const k = canonKey(type)
|
|
16
|
+
if ('INTEGER' === k || 'NUMBER' === k) return '1'
|
|
17
|
+
if ('BOOLEAN' === k) return 'true'
|
|
18
|
+
if ('ARRAY' === k) return '<dynamic>[]'
|
|
19
|
+
if ('OBJECT' === k) return '<String, dynamic>{}'
|
|
20
|
+
return `'${placeholder}'`
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// Op method spellings + descriptions (language-agnostic wording).
|
|
25
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
26
|
+
load: { method: 'load(match)', desc: 'Load a single entity by match criteria.' },
|
|
27
|
+
list: { method: 'list()', desc: 'List entities, optionally matching the given criteria.' },
|
|
28
|
+
create: { method: 'create(data)', desc: 'Create a new entity with the given data.' },
|
|
29
|
+
update: { method: 'update(data)', desc: 'Update an existing entity.' },
|
|
30
|
+
remove: { method: 'remove(match)', desc: 'Remove the matching entity.' },
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
35
|
+
const { target } = props
|
|
36
|
+
const { model } = props.ctx$
|
|
37
|
+
|
|
38
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
39
|
+
|
|
40
|
+
const publishedEntities = each(entity)
|
|
41
|
+
.filter((entity: any) => entity.active !== false)
|
|
42
|
+
|
|
43
|
+
if (0 === publishedEntities.length) {
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
Content(`
|
|
48
|
+
|
|
49
|
+
## Entities
|
|
50
|
+
|
|
51
|
+
`)
|
|
52
|
+
|
|
53
|
+
publishedEntities.map((entity: any) => {
|
|
54
|
+
const opnames = Object.keys(entity.op || {})
|
|
55
|
+
const fields = entity.fields || []
|
|
56
|
+
// Model-driven id key: null when this entity has no id-like field.
|
|
57
|
+
const idF = entityIdField(entity)
|
|
58
|
+
const eVar = exampleVarName(entity.name, 'dart')
|
|
59
|
+
|
|
60
|
+
Content(`
|
|
61
|
+
### ${entity.Name}
|
|
62
|
+
|
|
63
|
+
`)
|
|
64
|
+
|
|
65
|
+
if (entity.short) {
|
|
66
|
+
Content(`${entity.short}
|
|
67
|
+
|
|
68
|
+
`)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
Content(`Create an instance: \`final ${eVar} = client.${entity.Name}();\`
|
|
72
|
+
|
|
73
|
+
`)
|
|
74
|
+
|
|
75
|
+
if (opnames.length > 0) {
|
|
76
|
+
Content(`#### Operations
|
|
77
|
+
|
|
78
|
+
| Method | Description |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
`)
|
|
81
|
+
opnames.map((opname: string) => {
|
|
82
|
+
const info = OP_DESC[opname]
|
|
83
|
+
if (info) {
|
|
84
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
85
|
+
`)
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
Content(`
|
|
90
|
+
`)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (fields.length > 0) {
|
|
94
|
+
Content(`#### Fields
|
|
95
|
+
|
|
96
|
+
| Field | Type | Description |
|
|
97
|
+
| --- | --- | --- |
|
|
98
|
+
`)
|
|
99
|
+
|
|
100
|
+
each(fields, (field: any) => {
|
|
101
|
+
const desc = field.short || ''
|
|
102
|
+
Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
|
|
103
|
+
`)
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
Content(`
|
|
107
|
+
`)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (opnames.includes('load')) {
|
|
111
|
+
// The id key plus every REQUIRED match key (parent path params like
|
|
112
|
+
// page_id) — the same shape the runtime resolves path params from.
|
|
113
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
114
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
115
|
+
.sort((a: any, b: any) =>
|
|
116
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
117
|
+
const loadArg = 0 < loadItems.length
|
|
118
|
+
? `{${loadItems.map((it: any) =>
|
|
119
|
+
`'${it.name}': ${dartLit(it.type,
|
|
120
|
+
it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')}}`
|
|
121
|
+
: ''
|
|
122
|
+
Content(`#### Example: Load
|
|
123
|
+
|
|
124
|
+
\`\`\`dart
|
|
125
|
+
final ${eVar} = await client.${entity.Name}().load(${loadArg});
|
|
126
|
+
\`\`\`
|
|
127
|
+
|
|
128
|
+
`)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (opnames.includes('list')) {
|
|
132
|
+
Content(`#### Example: List
|
|
133
|
+
|
|
134
|
+
\`\`\`dart
|
|
135
|
+
final ${eVar}s = await client.${entity.Name}().list();
|
|
136
|
+
\`\`\`
|
|
137
|
+
|
|
138
|
+
`)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (opnames.includes('create')) {
|
|
142
|
+
// Members come from the SAME shape the runtime validates
|
|
143
|
+
// (opRequestShape): every required member must appear.
|
|
144
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
145
|
+
.filter((it: any) => !it.optional)
|
|
146
|
+
Content(`#### Example: Create
|
|
147
|
+
|
|
148
|
+
\`\`\`dart
|
|
149
|
+
final ${eVar} = await client.${entity.Name}().create({
|
|
150
|
+
`)
|
|
151
|
+
createItems.map((it: any) => {
|
|
152
|
+
Content(` '${it.name}': ${dartLit(it.type, 'example_' + it.name)}, // ${canonToType(it.type, target.name)}
|
|
153
|
+
`)
|
|
154
|
+
})
|
|
155
|
+
Content(`});
|
|
156
|
+
\`\`\`
|
|
157
|
+
|
|
158
|
+
`)
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
export {
|
|
165
|
+
ReadmeEntity
|
|
166
|
+
}
|