@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,95 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { cppVarName } from './utility_cpp'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct C++ literal for a param.
|
|
13
|
+
function cppLit(type: any, placeholder: string = 'example'): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'Value(1)'
|
|
16
|
+
if ('BOOLEAN' === k) return 'Value(true)'
|
|
17
|
+
if ('ARRAY' === k) return 'vlist()'
|
|
18
|
+
if ('OBJECT' === k) return 'vmap()'
|
|
19
|
+
return `Value("${placeholder}")`
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
|
|
24
|
+
const { target, ctx$: { model } } = props
|
|
25
|
+
|
|
26
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
27
|
+
|
|
28
|
+
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
29
|
+
|
|
30
|
+
const Name = model.const.Name
|
|
31
|
+
const authActive = isAuthActive(model)
|
|
32
|
+
const ctor = authActive
|
|
33
|
+
? `const char* apikey = std::getenv("${envName(model)}_APIKEY");
|
|
34
|
+
auto client = std::make_shared<${Name}SDK>(vmap({
|
|
35
|
+
{"apikey", Value(apikey ? apikey : "")},
|
|
36
|
+
}));`
|
|
37
|
+
: `auto client = ${Name}SDK::create();`
|
|
38
|
+
const ctorIncludes = authActive
|
|
39
|
+
? `#include <cstdlib>
|
|
40
|
+
#include "core/sdk.hpp"`
|
|
41
|
+
: `#include "core/sdk.hpp"`
|
|
42
|
+
|
|
43
|
+
Content(`\`\`\`cpp
|
|
44
|
+
${ctorIncludes}
|
|
45
|
+
|
|
46
|
+
using namespace sdk;
|
|
47
|
+
|
|
48
|
+
${ctor}
|
|
49
|
+
|
|
50
|
+
`)
|
|
51
|
+
|
|
52
|
+
if (exampleEntity) {
|
|
53
|
+
const acc = cppVarName(exampleEntity.name)
|
|
54
|
+
const eVar = acc
|
|
55
|
+
const opnames = Object.keys(exampleEntity.op || {})
|
|
56
|
+
// Model-driven id key: null when the entity has no id-like field.
|
|
57
|
+
const idF = entityIdField(exampleEntity)
|
|
58
|
+
|
|
59
|
+
if (opnames.includes('list')) {
|
|
60
|
+
Content(`// List all ${acc}s (returns a Value list, throws on error)
|
|
61
|
+
Value ${eVar}s = client->${acc}()->list(Value::undef(), Value::undef());
|
|
62
|
+
for (const auto& ${eVar} : *${eVar}s.as_list()) {
|
|
63
|
+
std::cout << Struct::jsonify(${eVar}) << std::endl;
|
|
64
|
+
}
|
|
65
|
+
`)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (opnames.includes('load')) {
|
|
69
|
+
// Every REQUIRED load-match key (id first, then parent path params).
|
|
70
|
+
const loadItems = opRequestShape(exampleEntity, 'load').items
|
|
71
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
72
|
+
.sort((a: any, b: any) =>
|
|
73
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
74
|
+
const loadArg = 0 < loadItems.length
|
|
75
|
+
? `vmap({${loadItems.map((it: any) =>
|
|
76
|
+
`{"${it.name}", ${cppLit(it.type,
|
|
77
|
+
it.name === idF ? 'example_id' : 'example_' + it.name)}}`).join(', ')}})`
|
|
78
|
+
: 'Value::undef()'
|
|
79
|
+
Content(`
|
|
80
|
+
// Load a specific ${acc} (returns the record, throws on error)
|
|
81
|
+
Value ${eVar} = client->${acc}()->load(${loadArg}, Value::undef());
|
|
82
|
+
std::cout << Struct::jsonify(${eVar}) << std::endl;
|
|
83
|
+
`)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
Content(`\`\`\`
|
|
88
|
+
`)
|
|
89
|
+
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
export {
|
|
94
|
+
ReadmeTopQuick
|
|
95
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { cppVarName } from './utility_cpp'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct C++ literal for a field's canonical type.
|
|
13
|
+
function cppLit(type: any): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'Value(1)'
|
|
16
|
+
if ('BOOLEAN' === k) return 'Value(true)'
|
|
17
|
+
if ('ARRAY' === k) return 'vlist()'
|
|
18
|
+
if ('OBJECT' === k) return 'vmap()'
|
|
19
|
+
return 'Value("example")'
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
24
|
+
const { target, ctx$: { model } } = props
|
|
25
|
+
|
|
26
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
27
|
+
|
|
28
|
+
// Pick an entity with a real op (prefer a read op).
|
|
29
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
30
|
+
|
|
31
|
+
Content(`\`\`\`cpp
|
|
32
|
+
auto client = ${model.const.Name}SDK::testSDK();
|
|
33
|
+
`)
|
|
34
|
+
|
|
35
|
+
if (exampleEntity && primaryOp) {
|
|
36
|
+
const acc = cppVarName(exampleEntity.name)
|
|
37
|
+
const idF = entityIdField(exampleEntity)
|
|
38
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
39
|
+
let arg = 'Value::undef()'
|
|
40
|
+
if (isMatchOp) {
|
|
41
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
42
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
43
|
+
.sort((a: any, b: any) =>
|
|
44
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
45
|
+
arg = 0 < items.length
|
|
46
|
+
? `vmap({${items.map((it: any) =>
|
|
47
|
+
`{"${it.name}", ${it.name === idF ? 'Value("test01")' : cppLit(it.type)}}`).join(', ')}})`
|
|
48
|
+
: 'Value::undef()'
|
|
49
|
+
} else if ('create' === primaryOp || 'update' === primaryOp) {
|
|
50
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
51
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
52
|
+
const required = items.filter((it: any) => !it.optional)
|
|
53
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
54
|
+
arg = `vmap({${chosen.map((it: any) => `{"${it.name}", ${cppLit(it.type)}}`).join(', ')}})`
|
|
55
|
+
}
|
|
56
|
+
const eVar = acc + ('list' === primaryOp ? 's' : '')
|
|
57
|
+
Content(`Value ${eVar} = client->${acc}()->${primaryOp}(${arg}, Value::undef());
|
|
58
|
+
std::cout << Struct::jsonify(${eVar}) << std::endl;
|
|
59
|
+
`)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
Content(`\`\`\`
|
|
63
|
+
`)
|
|
64
|
+
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
export {
|
|
69
|
+
ReadmeTopTest
|
|
70
|
+
}
|
|
@@ -173,7 +173,7 @@ static void ${evar}_entity_stream() {
|
|
|
173
173
|
static void ${evar}_entity_basic() {
|
|
174
174
|
auto setup = ${evar}_basic_setup(Value::undef());
|
|
175
175
|
std::string mode = setup.live ? "live" : "unit";
|
|
176
|
-
for (const std::string& op : {${opsList}}) {
|
|
176
|
+
for (const std::string& op : std::vector<std::string>{${opsList}}) {
|
|
177
177
|
auto sk = is_control_skipped("entityOp", std::string("${entity.name}.") + op, mode);
|
|
178
178
|
if (sk.first) { std::cerr << "skip: " << (sk.second.empty()? "sdk-test-control.json" : sk.second) << "\\n"; return; }
|
|
179
179
|
}
|
|
@@ -186,7 +186,11 @@ static void ${evar}_entity_basic() {
|
|
|
186
186
|
const preambleVar = cppVarName(entity.name + '_ref01')
|
|
187
187
|
Content(`
|
|
188
188
|
// Bootstrap entity data from existing test data (no create step in flow).
|
|
189
|
+
// Declare _data at FUNCTION scope (later load/update steps reference it);
|
|
190
|
+
// only _data_raw was declared, so the block-local assignment left _data
|
|
191
|
+
// undeclared ("was not declared in this scope").
|
|
189
192
|
Value ${preambleVar}_data_raw = Helpers::toMapAny(Struct::getpath(setup.data, {"existing", "${entity.name}"}));
|
|
193
|
+
Value ${preambleVar}_data = vmap();
|
|
190
194
|
{
|
|
191
195
|
std::vector<Value> its = Struct::items(${preambleVar}_data_raw);
|
|
192
196
|
${preambleVar}_data = its.empty() ? vmap() : Helpers::toMapAny(pair_val(its[0]));
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
// Typed-model generator (C# target). Port of EntityTypes_py.ts / EntityTypes_js.ts.
|
|
4
|
+
//
|
|
5
|
+
// Reads main.<KIT>.entity.<e>.fields[] and per-op params
|
|
6
|
+
// (op.<name>.points[].args.params[]) and emits one file, core/<Name>Types.cs,
|
|
7
|
+
// with a `public record <Name>` per active entity plus a request/match record
|
|
8
|
+
// per active op.
|
|
9
|
+
//
|
|
10
|
+
// TYPE CHOICE: reference `record` types with nullable `init` properties, NOT
|
|
11
|
+
// the wired runtime type. The generated ops take/return the loose object model
|
|
12
|
+
// (`Dictionary<string, object?>` / `object?`), so these records are NOT wired
|
|
13
|
+
// into the op signatures — they are documentation/DX reference shapes a caller
|
|
14
|
+
// may use to describe a payload before converting it to a dictionary. This
|
|
15
|
+
// mirrors the JS target's JSDoc typedefs (annotation only, no runtime effect):
|
|
16
|
+
// C# has no annotation-only type, so a `record` is the closest zero-behaviour
|
|
17
|
+
// analogue. Emitting unused records is harmless — they compile and have no
|
|
18
|
+
// runtime effect.
|
|
19
|
+
//
|
|
20
|
+
// OPTIONAL FIELDS: a `req:false` field/param becomes a nullable property
|
|
21
|
+
// (`T?`), a required one the plain type (`T`). Nullability warnings for
|
|
22
|
+
// uninitialised required reference properties (CS8618) are already suppressed
|
|
23
|
+
// by the generated csproj, so no initialisation is forced.
|
|
24
|
+
//
|
|
25
|
+
// Sentinels map to C# types via the SHARED canonToType 'csharp' column (the
|
|
26
|
+
// single source of truth per language — do not keep a local table here).
|
|
27
|
+
//
|
|
28
|
+
// Keep the SAME type-name scheme as every other language: <Name>,
|
|
29
|
+
// <Name>LoadMatch, <Name>ListMatch, <Name>CreateData, <Name>UpdateData,
|
|
30
|
+
// <Name>RemoveMatch (via the shared opTypeName helper).
|
|
31
|
+
|
|
32
|
+
import {
|
|
33
|
+
cmp, each, names,
|
|
34
|
+
File, Content,
|
|
35
|
+
} from '@voxgig/sdkgen'
|
|
36
|
+
|
|
37
|
+
import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
|
|
38
|
+
|
|
39
|
+
import {
|
|
40
|
+
KIT,
|
|
41
|
+
getModelPath,
|
|
42
|
+
} from '@voxgig/apidef'
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
const LANG = 'csharp'
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
// C# keywords that need the `@` verbatim prefix to be legal identifiers.
|
|
49
|
+
const CS_KEYWORDS = new Set<string>([
|
|
50
|
+
'abstract', 'as', 'base', 'bool', 'break', 'byte', 'case', 'catch',
|
|
51
|
+
'char', 'checked', 'class', 'const', 'continue', 'decimal', 'default',
|
|
52
|
+
'delegate', 'do', 'double', 'else', 'enum', 'event', 'explicit',
|
|
53
|
+
'extern', 'false', 'finally', 'fixed', 'float', 'for', 'foreach',
|
|
54
|
+
'goto', 'if', 'implicit', 'in', 'int', 'interface', 'internal', 'is',
|
|
55
|
+
'lock', 'long', 'namespace', 'new', 'null', 'object', 'operator',
|
|
56
|
+
'out', 'override', 'params', 'private', 'protected', 'public',
|
|
57
|
+
'readonly', 'ref', 'return', 'sbyte', 'sealed', 'short', 'sizeof',
|
|
58
|
+
'stackalloc', 'static', 'string', 'struct', 'switch', 'this', 'throw',
|
|
59
|
+
'true', 'try', 'typeof', 'uint', 'ulong', 'unchecked', 'unsafe',
|
|
60
|
+
'ushort', 'using', 'virtual', 'void', 'volatile', 'while',
|
|
61
|
+
])
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
// A field/param name that has a safe C# property rendering (valid identifier).
|
|
65
|
+
// Names that are not valid identifiers (hyphens, leading digits) have no clean
|
|
66
|
+
// property form and are skipped — they remain reachable via the runtime dict.
|
|
67
|
+
function csIdent(name: string): boolean {
|
|
68
|
+
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
// A legal C# property identifier: keyword names get the `@` verbatim prefix.
|
|
73
|
+
function csProp(name: string): string {
|
|
74
|
+
return CS_KEYWORDS.has(name) ? '@' + name : name
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
// Emit `public record <typeName>` from {name, type, optional} items. Optional
|
|
79
|
+
// items become nullable properties (`T?`); required items the plain type. An
|
|
80
|
+
// item whose name is not a legal identifier is skipped (WITH a warning — the
|
|
81
|
+
// key stays reachable via the runtime dict, but its absence from the typed
|
|
82
|
+
// model should be visible, not silent). An empty record is a valid,
|
|
83
|
+
// zero-member shape.
|
|
84
|
+
function emitRecord(typeName: string, items: any[], log?: any): void {
|
|
85
|
+
const usable = items.filter((it: any) => it && null != it.name && csIdent(it.name))
|
|
86
|
+
|
|
87
|
+
items.forEach((it: any) => {
|
|
88
|
+
if (it && null != it.name && !csIdent(it.name) && log && log.warn) {
|
|
89
|
+
log.warn({
|
|
90
|
+
point: 'entity-types-skip-field', typeName, field: it.name,
|
|
91
|
+
note: `csharp: field "${it.name}" of ${typeName} has no legal C# ` +
|
|
92
|
+
`identifier form; omitted from the typed model (still reachable ` +
|
|
93
|
+
`via the runtime dictionary)`,
|
|
94
|
+
})
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
if (0 === usable.length) {
|
|
99
|
+
Content(`public record ${typeName}();
|
|
100
|
+
|
|
101
|
+
`)
|
|
102
|
+
return
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
Content(`public record ${typeName}
|
|
106
|
+
{
|
|
107
|
+
`)
|
|
108
|
+
usable.forEach((it: any) => {
|
|
109
|
+
const base = canonToType(it.type, LANG)
|
|
110
|
+
// `object?` is already nullable; other types get a trailing `?` when optional.
|
|
111
|
+
const t = it.optional && !base.endsWith('?') ? base + '?' : base
|
|
112
|
+
Content(` public ${t} ${csProp(it.name)} { get; init; }
|
|
113
|
+
`)
|
|
114
|
+
})
|
|
115
|
+
Content(`}
|
|
116
|
+
|
|
117
|
+
`)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
122
|
+
const { model, log } = props.ctx$
|
|
123
|
+
const target = props.target || {}
|
|
124
|
+
const ext = target.ext || 'cs'
|
|
125
|
+
|
|
126
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
127
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
128
|
+
// collection, so inactive entities still get generated entity code that
|
|
129
|
+
// references these typed names. The typed model must cover them too.
|
|
130
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
131
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
132
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
133
|
+
// filter, so inactive entities still get class files referencing these
|
|
134
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
135
|
+
// with the go emitter's fix.
|
|
136
|
+
const entityList = each(entity).filter((e: any) => e && null != e.name)
|
|
137
|
+
// Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
|
|
138
|
+
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
139
|
+
// `Name = undefined` below. Parity with the go/py emitter's fix.
|
|
140
|
+
entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
141
|
+
|
|
142
|
+
// Surface duplicate generated type names (two entities with the same
|
|
143
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
144
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
145
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
146
|
+
|
|
147
|
+
File({ name: model.const.Name + 'Types.' + ext }, () => {
|
|
148
|
+
|
|
149
|
+
Content(`// Typed reference models for the ${model.const.Name} SDK.
|
|
150
|
+
//
|
|
151
|
+
// GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
|
|
152
|
+
// params (op.<name>.points[].args.params[]). Field/param types come from the
|
|
153
|
+
// canonical type sentinels (source of truth: @voxgig/apidef VALID_CANON). Do
|
|
154
|
+
// not edit by hand.
|
|
155
|
+
//
|
|
156
|
+
// These records are documentation/DX reference shapes ONLY. The SDK ops take
|
|
157
|
+
// and return the loose object model (Dictionary<string, object?> / object?) at
|
|
158
|
+
// runtime, so these types are not wired into the op signatures — use them to
|
|
159
|
+
// describe a payload before converting it to a dictionary. Optional (req:false)
|
|
160
|
+
// keys are modelled as nullable properties.
|
|
161
|
+
|
|
162
|
+
namespace ${model.const.Name}Sdk.Types;
|
|
163
|
+
|
|
164
|
+
`)
|
|
165
|
+
|
|
166
|
+
entityList.forEach((ent: any) => {
|
|
167
|
+
const Name = ent.Name
|
|
168
|
+
const fields = (ent.fields ? each(ent.fields) : [])
|
|
169
|
+
.filter((f: any) => f.active !== false)
|
|
170
|
+
|
|
171
|
+
// Entity data model: one property per field, `req:false` -> nullable.
|
|
172
|
+
emitRecord(Name, fields.map((f: any) => ({
|
|
173
|
+
name: f.name, type: f.type, optional: false === f.req,
|
|
174
|
+
})), log)
|
|
175
|
+
|
|
176
|
+
// Per active op: a request/match record. Members and their optionality
|
|
177
|
+
// come from the shared partiality policy (opRequestShape).
|
|
178
|
+
const ops = ent.op || {}
|
|
179
|
+
;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
|
|
180
|
+
if (null == ops[opname]) {
|
|
181
|
+
return
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const typeName = opTypeName(Name, opname)
|
|
185
|
+
const { items } = opRequestShape(ent, opname)
|
|
186
|
+
|
|
187
|
+
emitRecord(typeName, items, log)
|
|
188
|
+
})
|
|
189
|
+
})
|
|
190
|
+
})
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
export {
|
|
195
|
+
EntityTypes,
|
|
196
|
+
}
|
|
@@ -24,6 +24,7 @@ import { Gitignore } from './Gitignore_csharp'
|
|
|
24
24
|
import { MainEntity } from './MainEntity_csharp'
|
|
25
25
|
import { SdkError } from './SdkError_csharp'
|
|
26
26
|
import { EntityBase } from './EntityBase_csharp'
|
|
27
|
+
import { EntityTypes } from './EntityTypes_csharp'
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
const Main = cmp(async function Main(props: any) {
|
|
@@ -82,6 +83,11 @@ const Main = cmp(async function Main(props: any) {
|
|
|
82
83
|
SdkError({ target })
|
|
83
84
|
|
|
84
85
|
EntityBase({ target })
|
|
86
|
+
|
|
87
|
+
// Generate the typed reference-model file (<Name>Types.cs) beside the
|
|
88
|
+
// other generated core files. Documentation/DX shapes only — not wired
|
|
89
|
+
// into the loose-object-model op signatures.
|
|
90
|
+
EntityTypes({ target })
|
|
85
91
|
})
|
|
86
92
|
})
|
|
87
93
|
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { csVarName } from './utility_csharp'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// Type names come from the shared canonToType 'csharp' column (single source of truth).
|
|
13
|
+
|
|
14
|
+
// A type-correct, JSON-serialisable C# literal for a field's canonical type.
|
|
15
|
+
function csLit(type: any, placeholder: string = 'example'): string {
|
|
16
|
+
const k = canonKey(type)
|
|
17
|
+
if ('INTEGER' === k) return '1L'
|
|
18
|
+
if ('NUMBER' === k) return '1.0'
|
|
19
|
+
if ('BOOLEAN' === k) return 'true'
|
|
20
|
+
if ('ARRAY' === k) return 'new List<object?>()'
|
|
21
|
+
if ('OBJECT' === k) return 'new Dictionary<string, object?>()'
|
|
22
|
+
return `"${placeholder}"`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
// Operation method spelling for C#: PascalCase methods over the loose object
|
|
27
|
+
// model. The op descriptions are language-agnostic.
|
|
28
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
29
|
+
load: { method: 'Load(match)', desc: 'Load a single entity by match criteria.' },
|
|
30
|
+
list: { method: 'List(null)', desc: 'List entities, optionally matching the given criteria.' },
|
|
31
|
+
create: { method: 'Create(data)', desc: 'Create a new entity with the given data.' },
|
|
32
|
+
update: { method: 'Update(data)', desc: 'Update an existing entity.' },
|
|
33
|
+
remove: { method: 'Remove(match)', desc: 'Remove the matching entity.' },
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
38
|
+
const { target } = props
|
|
39
|
+
const { model } = props.ctx$
|
|
40
|
+
|
|
41
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
42
|
+
|
|
43
|
+
const publishedEntities = each(entity)
|
|
44
|
+
.filter((entity: any) => entity.active !== false)
|
|
45
|
+
|
|
46
|
+
if (0 === publishedEntities.length) {
|
|
47
|
+
return
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
Content(`
|
|
51
|
+
|
|
52
|
+
## Entities
|
|
53
|
+
|
|
54
|
+
`)
|
|
55
|
+
|
|
56
|
+
publishedEntities.map((entity: any) => {
|
|
57
|
+
const opnames = Object.keys(entity.op || {})
|
|
58
|
+
const fields = entity.fields || []
|
|
59
|
+
// Model-driven id key: null when this entity has no id-like field.
|
|
60
|
+
const idF = entityIdField(entity)
|
|
61
|
+
// Sanitise the local variable name — a camelCased C# keyword gets a
|
|
62
|
+
// trailing underscore (csVarName) so the snippet compiles.
|
|
63
|
+
const eVar = csVarName(entity.name)
|
|
64
|
+
|
|
65
|
+
Content(`
|
|
66
|
+
### ${entity.Name}
|
|
67
|
+
|
|
68
|
+
`)
|
|
69
|
+
|
|
70
|
+
if (entity.short) {
|
|
71
|
+
Content(`${entity.short}
|
|
72
|
+
|
|
73
|
+
`)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
Content(`Create an instance: \`var ${eVar} = client.${entity.Name}();\`
|
|
77
|
+
|
|
78
|
+
`)
|
|
79
|
+
|
|
80
|
+
if (opnames.length > 0) {
|
|
81
|
+
Content(`#### Operations
|
|
82
|
+
|
|
83
|
+
| Method | Description |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
`)
|
|
86
|
+
opnames.map((opname: string) => {
|
|
87
|
+
const info = OP_DESC[opname]
|
|
88
|
+
if (info) {
|
|
89
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
90
|
+
`)
|
|
91
|
+
}
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
Content(`
|
|
95
|
+
`)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (fields.length > 0) {
|
|
99
|
+
Content(`#### Fields
|
|
100
|
+
|
|
101
|
+
| Field | Type | Description |
|
|
102
|
+
| --- | --- | --- |
|
|
103
|
+
`)
|
|
104
|
+
|
|
105
|
+
each(fields, (field: any) => {
|
|
106
|
+
const desc = field.short || ''
|
|
107
|
+
Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
|
|
108
|
+
`)
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
Content(`
|
|
112
|
+
`)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (opnames.includes('load')) {
|
|
116
|
+
// The id key plus every REQUIRED match key (parent path params like
|
|
117
|
+
// page_id) — the same shape the runtime resolves path params from, so
|
|
118
|
+
// the example always works.
|
|
119
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
120
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
121
|
+
.sort((a: any, b: any) =>
|
|
122
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
123
|
+
const loadArg = 0 < loadItems.length
|
|
124
|
+
? `new Dictionary<string, object?> {${loadItems.map((it: any) =>
|
|
125
|
+
` ["${it.name}"] = ${csLit(it.type,
|
|
126
|
+
it.name === idF ? entity.name + '_id' : it.name)}`).join(',')} }`
|
|
127
|
+
: 'null'
|
|
128
|
+
Content(`#### Example: Load
|
|
129
|
+
|
|
130
|
+
\`\`\`csharp
|
|
131
|
+
var ${eVar} = client.${entity.Name}().Load(${loadArg});
|
|
132
|
+
\`\`\`
|
|
133
|
+
|
|
134
|
+
`)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (opnames.includes('list')) {
|
|
138
|
+
Content(`#### Example: List
|
|
139
|
+
|
|
140
|
+
\`\`\`csharp
|
|
141
|
+
var ${eVar}List = client.${entity.Name}().List(null);
|
|
142
|
+
\`\`\`
|
|
143
|
+
|
|
144
|
+
`)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (opnames.includes('create')) {
|
|
148
|
+
// Members come from the SAME shape the runtime validates
|
|
149
|
+
// (opRequestShape): every required member must appear — including a
|
|
150
|
+
// required id and parent keys like page_id — with a real literal.
|
|
151
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
152
|
+
.filter((it: any) => !it.optional)
|
|
153
|
+
Content(`#### Example: Create
|
|
154
|
+
|
|
155
|
+
\`\`\`csharp
|
|
156
|
+
var ${eVar} = client.${entity.Name}().Create(new Dictionary<string, object?>
|
|
157
|
+
{
|
|
158
|
+
`)
|
|
159
|
+
createItems.map((it: any) => {
|
|
160
|
+
Content(` ["${it.name}"] = ${csLit(it.type, 'example_' + it.name)}, // ${canonToType(it.type, target.name)}
|
|
161
|
+
`)
|
|
162
|
+
})
|
|
163
|
+
Content(`});
|
|
164
|
+
\`\`\`
|
|
165
|
+
|
|
166
|
+
`)
|
|
167
|
+
}
|
|
168
|
+
})
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
export {
|
|
173
|
+
ReadmeEntity
|
|
174
|
+
}
|