@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
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
buildIdNames,
|
|
25
25
|
getMatchEntries,
|
|
26
26
|
isAuthActive,
|
|
27
|
+
entityDataIdField,
|
|
27
28
|
} from '@voxgig/sdkgen'
|
|
28
29
|
|
|
29
30
|
|
|
@@ -344,6 +345,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
|
|
|
344
345
|
|
|
345
346
|
const generateList: OpGen = (ctx, step, index) => {
|
|
346
347
|
const { entity, flow, accessor } = ctx
|
|
348
|
+
const hasDataId = null != entityDataIdField(entity)
|
|
347
349
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
348
350
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
349
351
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -388,7 +390,7 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
388
390
|
const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
|
|
389
391
|
((s.input.ref ?? entity.name + '_ref01') === validRef))
|
|
390
392
|
|
|
391
|
-
if ('ItemExists' === validator.apply && hasRefData) {
|
|
393
|
+
if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
|
|
392
394
|
const refDataVar = validRef + '_data'
|
|
393
395
|
Content(`
|
|
394
396
|
$found_item = sdk_select(
|
|
@@ -396,7 +398,7 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
396
398
|
["id" => $${refDataVar}["id"]]);
|
|
397
399
|
$this->assertNotEmpty($found_item);
|
|
398
400
|
`)
|
|
399
|
-
} else if ('ItemNotExists' === validator.apply && hasRefData) {
|
|
401
|
+
} else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
|
|
400
402
|
const refDataVar = validRef + '_data'
|
|
401
403
|
Content(`
|
|
402
404
|
$not_found_item = sdk_select(
|
|
@@ -546,6 +548,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
|
|
|
546
548
|
|
|
547
549
|
const generateRemove: OpGen = (ctx, step, index) => {
|
|
548
550
|
const { entity, flow, accessor } = ctx
|
|
551
|
+
if (null == entityDataIdField(entity)) {
|
|
552
|
+
return
|
|
553
|
+
}
|
|
549
554
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
550
555
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
551
556
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
File, Content,
|
|
37
37
|
} from '@voxgig/sdkgen'
|
|
38
38
|
|
|
39
|
-
import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
|
|
39
|
+
import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
|
|
40
40
|
|
|
41
41
|
import {
|
|
42
42
|
KIT,
|
|
@@ -75,9 +75,20 @@ function pyIdent(name: string): boolean {
|
|
|
75
75
|
// only required -> single `class <typeName>(TypedDict):`
|
|
76
76
|
// only optional -> single `class <typeName>(TypedDict, total=False):`
|
|
77
77
|
// no usable keys -> single `class <typeName>(TypedDict): pass`
|
|
78
|
-
function emitTypedDict(typeName: string, items: any[]): void {
|
|
78
|
+
function emitTypedDict(typeName: string, items: any[], log?: any): void {
|
|
79
79
|
const usable = items.filter((it: any) => it && null != it.name && pyIdent(it.name))
|
|
80
80
|
|
|
81
|
+
items.forEach((it: any) => {
|
|
82
|
+
if (it && null != it.name && !pyIdent(it.name) && log && log.warn) {
|
|
83
|
+
log.warn({
|
|
84
|
+
point: 'entity-types-skip-field', typeName, field: it.name,
|
|
85
|
+
note: `py: field "${it.name}" of ${typeName} has no legal class-syntax ` +
|
|
86
|
+
`TypedDict key form; omitted from the typed model (still reachable ` +
|
|
87
|
+
`via the runtime dict)`,
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
|
|
81
92
|
const required = usable.filter((it: any) => !it.optional)
|
|
82
93
|
const optional = usable.filter((it: any) => it.optional)
|
|
83
94
|
|
|
@@ -117,17 +128,31 @@ class ${typeName}(${typeName}Required, total=False):
|
|
|
117
128
|
|
|
118
129
|
|
|
119
130
|
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
120
|
-
const { model } = props.ctx$
|
|
131
|
+
const { model, log } = props.ctx$
|
|
121
132
|
const target = props.target || {}
|
|
122
133
|
const ext = target.ext || LANG
|
|
123
134
|
|
|
124
|
-
|
|
125
|
-
|
|
135
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
136
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
137
|
+
// collection, so inactive entities still get generated entity code that
|
|
138
|
+
// references these typed names. The typed model must cover them too.
|
|
139
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
140
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
141
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
142
|
+
// filter, so inactive entities still get class files referencing these
|
|
143
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
144
|
+
// with the go emitter's fix.
|
|
145
|
+
const entityList = each(entity).filter((e: any) => e && null != e.name)
|
|
126
146
|
// Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
|
|
127
147
|
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
128
148
|
// `Name = undefined` below. Parity with the go emitter's fix.
|
|
129
149
|
entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
130
150
|
|
|
151
|
+
// Surface duplicate generated type names (two entities with the same
|
|
152
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
153
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
154
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
155
|
+
|
|
131
156
|
File({ name: model.const.Name.toLowerCase() + '_types.' + ext }, () => {
|
|
132
157
|
|
|
133
158
|
Content(`# Typed models for the ${model.const.Name} SDK.
|
|
@@ -159,7 +184,7 @@ from typing import TypedDict, Any
|
|
|
159
184
|
`)
|
|
160
185
|
emitTypedDict(Name, fields.map((f: any) => ({
|
|
161
186
|
name: f.name, type: f.type, optional: false === f.req,
|
|
162
|
-
})))
|
|
187
|
+
})), log)
|
|
163
188
|
|
|
164
189
|
// Per active op: a request/match type. Members and their optionality come
|
|
165
190
|
// from the shared partiality policy (opRequestShape); this file only
|
|
@@ -176,7 +201,7 @@ from typing import TypedDict, Any
|
|
|
176
201
|
Content(`
|
|
177
202
|
|
|
178
203
|
`)
|
|
179
|
-
emitTypedDict(typeName, items)
|
|
204
|
+
emitTypedDict(typeName, items, log)
|
|
180
205
|
})
|
|
181
206
|
})
|
|
182
207
|
})
|
|
@@ -4,7 +4,7 @@ import * as Path from 'node:path'
|
|
|
4
4
|
import {
|
|
5
5
|
cmp, each, camelify, names,
|
|
6
6
|
File, Content, Folder, Fragment, Line, FeatureHook, Slot,
|
|
7
|
-
entityClassName,
|
|
7
|
+
entityClassName, opTypeName,
|
|
8
8
|
} from '@voxgig/sdkgen'
|
|
9
9
|
|
|
10
10
|
import {
|
|
@@ -15,12 +15,6 @@ import {
|
|
|
15
15
|
import { EntityOperation } from './EntityOperation_py'
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
// Op -> generated request-type suffix (keep in sync with EntityTypes_py.ts).
|
|
19
|
-
const OP_SUFFIX: Record<string, 'Match' | 'Data'> = {
|
|
20
|
-
load: 'Match', list: 'Match', remove: 'Match', create: 'Data', update: 'Data',
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
18
|
const Entity = cmp(function Entity(props: any) {
|
|
25
19
|
const { model, stdrep } = props.ctx$
|
|
26
20
|
const { target, entity } = props
|
|
@@ -44,9 +38,7 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
44
38
|
const opnamesAll = Object.keys(entity.op || {})
|
|
45
39
|
;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
|
|
46
40
|
if (opnamesAll.includes(opname)) {
|
|
47
|
-
|
|
48
|
-
const cap = opname.charAt(0).toUpperCase() + opname.slice(1)
|
|
49
|
-
typeNames.push(entity.Name + cap + suffix)
|
|
41
|
+
typeNames.push(opTypeName(entity.Name, opname))
|
|
50
42
|
}
|
|
51
43
|
})
|
|
52
44
|
const typesModule = model.const.Name.toLowerCase() + '_types'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -60,7 +60,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
60
60
|
const idF = entityIdField(entity)
|
|
61
61
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
62
62
|
// Python keyword (e.g. `class`) would otherwise emit uncompilable code.
|
|
63
|
-
const eVar =
|
|
63
|
+
const eVar = exampleVarName(entity.name, 'py')
|
|
64
64
|
|
|
65
65
|
Content(`
|
|
66
66
|
### ${entity.Name}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -30,14 +30,19 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
30
30
|
const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
|
|
31
31
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
32
32
|
// Python keyword (e.g. `class`) would otherwise emit uncompilable code.
|
|
33
|
-
const eVar =
|
|
33
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'py')
|
|
34
34
|
// Model-driven id key: null when the entity has no id-like field, so a
|
|
35
35
|
// match op takes no argument.
|
|
36
36
|
const idF = exampleEntity ? entityIdField(exampleEntity) : null
|
|
37
37
|
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
38
38
|
let testArg = ''
|
|
39
39
|
if (exampleEntity && isMatchOp) {
|
|
40
|
-
|
|
40
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
41
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
42
|
+
.sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
43
|
+
testArg = 0 < items.length
|
|
44
|
+
? `{${items.map((it: any) => `"${it.name}": ${it.name === idF ? '"test01"' : pyLit(it.type)}`).join(', ')}}`
|
|
45
|
+
: ''
|
|
41
46
|
} else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
|
|
42
47
|
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
43
48
|
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -47,7 +47,7 @@ client = ${ctor}
|
|
|
47
47
|
const article = /^[aeiou]/i.test(eName) ? 'an' : 'a'
|
|
48
48
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
49
49
|
// Python keyword (e.g. `class`) would otherwise emit uncompilable code.
|
|
50
|
-
const eVar =
|
|
50
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'py')
|
|
51
51
|
const opnames = entityOps(exampleEntity)
|
|
52
52
|
// Model-driven id key: `idF` is the entity's id-like MATCH field name, or
|
|
53
53
|
// null when it has none (a response-wrapped spec). `dataIdF` is the id on
|
|
@@ -91,7 +91,7 @@ except Exception as err:
|
|
|
91
91
|
if (nestedEntity) {
|
|
92
92
|
const neName = nom(nestedEntity, 'Name')
|
|
93
93
|
const neArticle = /^[aeiou]/i.test(neName) ? 'an' : 'a'
|
|
94
|
-
const neVar =
|
|
94
|
+
const neVar = exampleVarName(neName.toLowerCase(), 'py')
|
|
95
95
|
|
|
96
96
|
// Model-driven match: every REQUIRED load-match key — the same shape
|
|
97
97
|
// the runtime resolves path params from, so the example always works.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -168,7 +168,7 @@ Prepare a fetch definition without sending. Returns the \`fetchdef\` and raises
|
|
|
168
168
|
const idF = entityIdField(ent)
|
|
169
169
|
// Sanitise the local variable name — an entity whose lowercased name is
|
|
170
170
|
// a Python keyword (e.g. `class`) would otherwise emit uncompilable code.
|
|
171
|
-
const eVar =
|
|
171
|
+
const eVar = exampleVarName(ent.name, 'py')
|
|
172
172
|
|
|
173
173
|
Content(`
|
|
174
174
|
---
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -46,7 +46,7 @@ client = ${ctor}
|
|
|
46
46
|
const eName = nom(exampleEntity, 'Name')
|
|
47
47
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
48
48
|
// Python keyword (e.g. `class`) would otherwise emit uncompilable code.
|
|
49
|
-
const eVar =
|
|
49
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'py')
|
|
50
50
|
const opnames = Object.keys(exampleEntity.op || {})
|
|
51
51
|
// Model-driven id key: null when the entity has no id-like field, in which
|
|
52
52
|
// case the load example takes no match argument.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -58,7 +58,7 @@ client = ${model.const.Name}SDK.test()
|
|
|
58
58
|
// A list() result is a list — name the variable accordingly (the root
|
|
59
59
|
// README doc gate concatenates blocks, so reusing the singular name for
|
|
60
60
|
// a different type is a mypy assignment error).
|
|
61
|
-
const eVar =
|
|
61
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'py') + ('list' === primaryOp ? 's' : '')
|
|
62
62
|
Content(`${eVar} = client.${eName}().${primaryOp}(${arg})
|
|
63
63
|
print(${eVar})
|
|
64
64
|
`)
|
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
buildIdNames,
|
|
25
25
|
getMatchEntries,
|
|
26
26
|
isAuthActive,
|
|
27
|
+
entityDataIdField,
|
|
27
28
|
} from '@voxgig/sdkgen'
|
|
28
29
|
|
|
29
30
|
|
|
@@ -332,6 +333,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
|
|
|
332
333
|
|
|
333
334
|
const generateList: OpGen = (ctx, step, index) => {
|
|
334
335
|
const { entity, flow } = ctx
|
|
336
|
+
const hasDataId = null != entityDataIdField(entity)
|
|
335
337
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
336
338
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
337
339
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -376,7 +378,7 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
376
378
|
const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
|
|
377
379
|
((s.input.ref ?? entity.name + '_ref01') === validRef))
|
|
378
380
|
|
|
379
|
-
if ('ItemExists' === validator.apply && hasRefData) {
|
|
381
|
+
if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
|
|
380
382
|
const refDataVar = validRef + '_data'
|
|
381
383
|
Content(`
|
|
382
384
|
found_item = vs.select(
|
|
@@ -384,7 +386,7 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
384
386
|
{"id": ${refDataVar}["id"]})
|
|
385
387
|
assert not vs.isempty(found_item)
|
|
386
388
|
`)
|
|
387
|
-
} else if ('ItemNotExists' === validator.apply && hasRefData) {
|
|
389
|
+
} else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
|
|
388
390
|
const refDataVar = validRef + '_data'
|
|
389
391
|
Content(`
|
|
390
392
|
not_found_item = vs.select(
|
|
@@ -532,6 +534,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
|
|
|
532
534
|
|
|
533
535
|
const generateRemove: OpGen = (ctx, step, index) => {
|
|
534
536
|
const { entity, flow } = ctx
|
|
537
|
+
if (null == entityDataIdField(entity)) {
|
|
538
|
+
return
|
|
539
|
+
}
|
|
535
540
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
536
541
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
537
542
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
File, Content,
|
|
28
28
|
} from '@voxgig/sdkgen'
|
|
29
29
|
|
|
30
|
-
import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
|
|
30
|
+
import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
|
|
31
31
|
|
|
32
32
|
import {
|
|
33
33
|
KIT,
|
|
@@ -77,15 +77,29 @@ function emitStruct(
|
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
80
|
-
const { model } = props.ctx$
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
const { model, log } = props.ctx$
|
|
81
|
+
|
|
82
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
83
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
84
|
+
// collection, so inactive entities still get generated entity code that
|
|
85
|
+
// references these typed names. The typed model must cover them too.
|
|
86
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
87
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
88
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
89
|
+
// filter, so inactive entities still get class files referencing these
|
|
90
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
91
|
+
// with the go emitter's fix.
|
|
92
|
+
const entityList = each(entity).filter((e: any) => e && null != e.name)
|
|
84
93
|
// Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
|
|
85
94
|
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
86
95
|
// `Name = undefined` below. Parity with the go emitter's fix.
|
|
87
96
|
entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
88
97
|
|
|
98
|
+
// Surface duplicate generated type names (two entities with the same
|
|
99
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
100
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
101
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
102
|
+
|
|
89
103
|
File({ name: model.const.Name + '_types.' + LANG }, () => {
|
|
90
104
|
|
|
91
105
|
Content(`# frozen_string_literal: true
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -58,7 +58,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
58
58
|
const idF = entityIdField(entity)
|
|
59
59
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
60
60
|
// Ruby keyword (e.g. `self`) would otherwise emit uncompilable code.
|
|
61
|
-
const eVar =
|
|
61
|
+
const eVar = exampleVarName(entity.name, 'rb')
|
|
62
62
|
|
|
63
63
|
Content(`
|
|
64
64
|
### ${entity.Name}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -32,7 +32,7 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
32
32
|
// Ruby keyword (e.g. `self`) would otherwise emit uncompilable code. The
|
|
33
33
|
// fixture KEY (`"${eName.toLowerCase()}"`) stays raw — it must match the
|
|
34
34
|
// entity's registered name for the mock lookup to resolve.
|
|
35
|
-
const eVar =
|
|
35
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'rb')
|
|
36
36
|
// Model-driven id key: null when the entity has no id-like field (a
|
|
37
37
|
// response-wrapped spec). When null the fixture seeds no id and a match op
|
|
38
38
|
// takes no argument.
|
|
@@ -48,7 +48,12 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
48
48
|
// remove, a required-field body for create/update, nothing for list.
|
|
49
49
|
let testCallArg = ''
|
|
50
50
|
if (exampleEntity && isMatchOp) {
|
|
51
|
-
|
|
51
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
52
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
53
|
+
.sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
54
|
+
testCallArg = 0 < items.length
|
|
55
|
+
? `{ ${items.map((it: any) => `"${it.name}" => ${it.name === idF ? '"test01"' : rbLit(it.type)}`).join(', ')} }`
|
|
56
|
+
: ''
|
|
52
57
|
} else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
|
|
53
58
|
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
54
59
|
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -45,7 +45,7 @@ client = ${ctor}
|
|
|
45
45
|
const article = /^[aeiou]/i.test(eName) ? "an" : "a"
|
|
46
46
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
47
47
|
// Ruby keyword (e.g. `self`) would otherwise emit uncompilable code.
|
|
48
|
-
const eVar =
|
|
48
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'rb')
|
|
49
49
|
const opnames = entityOps(exampleEntity)
|
|
50
50
|
// Model-driven id keys: `idF` is the load-MATCH key (null when the entity
|
|
51
51
|
// has no id-like field — a response-wrapped spec); when null, load/remove
|
|
@@ -102,7 +102,7 @@ end
|
|
|
102
102
|
if (nestedEntity) {
|
|
103
103
|
const neName = nom(nestedEntity, 'Name')
|
|
104
104
|
const neArticle = /^[aeiou]/i.test(neName) ? "an" : "a"
|
|
105
|
-
const neVar =
|
|
105
|
+
const neVar = exampleVarName(neName.toLowerCase(), 'rb')
|
|
106
106
|
|
|
107
107
|
// Model-driven match: every REQUIRED load-match key — the same shape
|
|
108
108
|
// the runtime resolves path params from, so the example always works.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -174,7 +174,7 @@ same parameters as \`direct()\`. Raises on error.
|
|
|
174
174
|
const idF = entityIdField(ent)
|
|
175
175
|
// Sanitise the local variable name — an entity whose lowercased name is
|
|
176
176
|
// a Ruby keyword (e.g. `self`) would otherwise emit uncompilable code.
|
|
177
|
-
const eVar =
|
|
177
|
+
const eVar = exampleVarName(ent.name, 'rb')
|
|
178
178
|
|
|
179
179
|
Content(`
|
|
180
180
|
---
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -45,7 +45,7 @@ client = ${ctor}
|
|
|
45
45
|
const eName = nom(exampleEntity, 'Name')
|
|
46
46
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
47
47
|
// Ruby keyword (e.g. `self`) would otherwise emit uncompilable code.
|
|
48
|
-
const eVar =
|
|
48
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'rb')
|
|
49
49
|
const opnames = Object.keys(exampleEntity.op || {})
|
|
50
50
|
// Model-driven id key: null when the entity has no id-like field, in which
|
|
51
51
|
// case the load example takes no match argument.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -59,7 +59,7 @@ const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
|
59
59
|
// base name — an entity whose lowercased name is a Ruby keyword (e.g.
|
|
60
60
|
// `self`) would otherwise emit uncompilable code. The fixture KEY (`ename`)
|
|
61
61
|
// stays raw so the mock lookup resolves.
|
|
62
|
-
const eVar =
|
|
62
|
+
const eVar = exampleVarName(ename, 'rb') + ('list' === primaryOp ? 's' : '')
|
|
63
63
|
Content(`\`\`\`ruby
|
|
64
64
|
# Seed fixture data so offline calls resolve without a live server.
|
|
65
65
|
client = ${model.const.Name}SDK.test({
|
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
buildIdNames,
|
|
25
25
|
getMatchEntries,
|
|
26
26
|
isAuthActive,
|
|
27
|
+
entityDataIdField,
|
|
27
28
|
} from '@voxgig/sdkgen'
|
|
28
29
|
|
|
29
30
|
|
|
@@ -327,6 +328,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
|
|
|
327
328
|
|
|
328
329
|
const generateList: OpGen = (ctx, step, index) => {
|
|
329
330
|
const { entity, flow } = ctx
|
|
331
|
+
const hasDataId = null != entityDataIdField(entity)
|
|
330
332
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
331
333
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
332
334
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -371,7 +373,7 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
371
373
|
const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
|
|
372
374
|
((s.input.ref ?? entity.name + '_ref01') === validRef))
|
|
373
375
|
|
|
374
|
-
if ('ItemExists' === validator.apply && hasRefData) {
|
|
376
|
+
if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
|
|
375
377
|
const refDataVar = validRef + '_data'
|
|
376
378
|
Content(`
|
|
377
379
|
found_item = Vs.select(
|
|
@@ -379,7 +381,7 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
379
381
|
{ "id" => ${refDataVar}["id"] })
|
|
380
382
|
assert !Vs.isempty(found_item)
|
|
381
383
|
`)
|
|
382
|
-
} else if ('ItemNotExists' === validator.apply && hasRefData) {
|
|
384
|
+
} else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
|
|
383
385
|
const refDataVar = validRef + '_data'
|
|
384
386
|
Content(`
|
|
385
387
|
not_found_item = Vs.select(
|
|
@@ -529,6 +531,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
|
|
|
529
531
|
|
|
530
532
|
const generateRemove: OpGen = (ctx, step, index) => {
|
|
531
533
|
const { entity, flow } = ctx
|
|
534
|
+
if (null == entityDataIdField(entity)) {
|
|
535
|
+
return
|
|
536
|
+
}
|
|
532
537
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
533
538
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
534
539
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -39,6 +39,10 @@ const EntityBase = cmp(async function EntityBase(props: any) {
|
|
|
39
39
|
`)
|
|
40
40
|
})
|
|
41
41
|
|
|
42
|
+
// Documentary typed models (entity/types.rs), generated by EntityTypes.
|
|
43
|
+
Content(`pub mod types;
|
|
44
|
+
`)
|
|
45
|
+
|
|
42
46
|
if (0 < Object.keys(entity || {}).length) {
|
|
43
47
|
Content(`
|
|
44
48
|
`)
|