@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,79 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// Emit per-entity model-driven checks INTO the shared gentest run body (the
|
|
6
|
+
// clojure test runner drives a single sdk.gentest/run). Covers: entity
|
|
7
|
+
// accessor existence, a create+list smoke run through the in-memory test-mode
|
|
8
|
+
// mock transport (exercising the full operation pipeline, hooks and run-op),
|
|
9
|
+
// and the streaming entity fn. API-agnostic behaviour (pipeline error
|
|
10
|
+
// branches, all features, netsim, primary utility, struct corpus) lives in the
|
|
11
|
+
// static template test namespaces.
|
|
12
|
+
const TestEntity = cmp(function TestEntity(props: any) {
|
|
13
|
+
const e = props.entity
|
|
14
|
+
|
|
15
|
+
const ops = Object.keys(e.op || {})
|
|
16
|
+
const hasCreate = ops.includes('create')
|
|
17
|
+
const hasList = ops.includes('list')
|
|
18
|
+
|
|
19
|
+
// Accessor existence.
|
|
20
|
+
Content(` (t/run-check rec "gen-exists-${e.name}"
|
|
21
|
+
(fn [] (let [sdk (api/test-sdk nil nil)]
|
|
22
|
+
(t/is-true (some? (api/${e.name} sdk nil)) "${e.name} accessor present"))))
|
|
23
|
+
`)
|
|
24
|
+
|
|
25
|
+
// create+list smoke run through the mock transport.
|
|
26
|
+
if (hasCreate || hasList) {
|
|
27
|
+
Content(` (t/run-check rec "gen-smoke-${e.name}"
|
|
28
|
+
(fn [] (let [sdk (api/test-sdk nil nil)
|
|
29
|
+
ent (api/${e.name} sdk nil)]
|
|
30
|
+
`)
|
|
31
|
+
if (hasCreate) {
|
|
32
|
+
Content(` (let [res (e-${e.name}/create ent (vs/jm "name" "smoke") nil)]
|
|
33
|
+
(t/is-true (vs/ismap res) "create returns a record map")
|
|
34
|
+
(t/is-true (some? (vs/getprop res "id")) "created record has an id"))
|
|
35
|
+
`)
|
|
36
|
+
}
|
|
37
|
+
if (hasList) {
|
|
38
|
+
Content(` (let [items (e-${e.name}/list ent (vs/jm) nil)]
|
|
39
|
+
(t/is-true (sequential? items) "list returns a sequential collection"))
|
|
40
|
+
`)
|
|
41
|
+
}
|
|
42
|
+
Content(` )))
|
|
43
|
+
`)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// stream(action, args, callopts): runs the op through the full pipeline and
|
|
47
|
+
// returns a lazy seq of items. Seeds three records via the test mock and
|
|
48
|
+
// streams them; needs only a list op.
|
|
49
|
+
if (hasList) {
|
|
50
|
+
Content(` (t/run-check rec "gen-stream-${e.name}"
|
|
51
|
+
(fn [] (let [seed (vs/jm "${e.name}" (vs/jm "S1" (vs/jm "id" "S1" "name" "a")
|
|
52
|
+
"S2" (vs/jm "id" "S2" "name" "b")
|
|
53
|
+
"S3" (vs/jm "id" "S3" "name" "c")))]
|
|
54
|
+
;; Fallback (no streaming feature): materialised items.
|
|
55
|
+
(let [sdk (api/test-sdk (vs/jm "entity" seed) nil)
|
|
56
|
+
items (vec (e-${e.name}/stream (api/${e.name} sdk nil) "list" (vs/jm) nil))]
|
|
57
|
+
(t/is-eq (count items) 3 "stream fallback yields materialised items")
|
|
58
|
+
(t/is-true (vs/ismap (first items)) "stream yields bare record maps"))
|
|
59
|
+
;; signal cancels iteration between yields.
|
|
60
|
+
(let [sdk (api/test-sdk (vs/jm "entity" seed) nil)
|
|
61
|
+
n (atom 0) sig (fn [] (>= (swap! n inc) 2))
|
|
62
|
+
items (vec (e-${e.name}/stream (api/${e.name} sdk nil) "list" (vs/jm) (vs/jm "signal" sig)))]
|
|
63
|
+
(t/is-eq (count items) 1 "stream signal stops after first yield"))
|
|
64
|
+
;; Streaming feature active: yields from the streaming iterator.
|
|
65
|
+
(when (vs/getpath (config/make-config) "feature.streaming")
|
|
66
|
+
(let [ssdk (api/test-sdk (vs/jm "entity" seed) (vs/jm "feature" (vs/jm "streaming" (vs/jm "active" true))))]
|
|
67
|
+
(t/is-eq (count (vec (e-${e.name}/stream (api/${e.name} ssdk nil) "list" (vs/jm) nil))) 3
|
|
68
|
+
"stream (streaming active) yields all items"))
|
|
69
|
+
(let [csdk (api/test-sdk (vs/jm "entity" seed) (vs/jm "feature" (vs/jm "streaming" (vs/jm "active" true "chunkSize" 2))))
|
|
70
|
+
batches (vec (e-${e.name}/stream (api/${e.name} csdk nil) "list" (vs/jm) nil))]
|
|
71
|
+
(t/is-eq (count batches) 2 "stream chunkSize groups items into 2 batches"))))))
|
|
72
|
+
`)
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
export {
|
|
78
|
+
TestEntity
|
|
79
|
+
}
|
|
@@ -10,20 +10,24 @@ import type {
|
|
|
10
10
|
|
|
11
11
|
import { cmp, each, File, Content, Folder } from '@voxgig/sdkgen'
|
|
12
12
|
|
|
13
|
+
import { TestEntity } from './TestEntity_clojure'
|
|
14
|
+
import { TestDirect } from './TestDirect_clojure'
|
|
15
|
+
import { ReadmeExamplesTest } from './ReadmeExamplesTest_clojure'
|
|
16
|
+
|
|
13
17
|
|
|
14
18
|
// Generates sdk/gentest.clj (ns sdk.gentest): the API-specific tests, driven by
|
|
15
|
-
// the model. Exposes (run rec) which the template test-runner invokes.
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
19
|
+
// the model. Exposes (run rec) which the template test-runner invokes. This is
|
|
20
|
+
// the orchestrator: it emits the namespace form and the single (run rec) entry
|
|
21
|
+
// point, then delegates the per-entity checks to TestEntity (accessor +
|
|
22
|
+
// create/list smoke + stream) and TestDirect (prepare + direct escape hatch),
|
|
23
|
+
// and finally the documentation clojure-examples syntax gate (ReadmeExamples).
|
|
24
|
+
// API-agnostic behaviour (pipeline error branches, all features, netsim,
|
|
25
|
+
// primary utility, struct corpus) lives in the static template test namespaces.
|
|
21
26
|
const Test = cmp(function Test(props: any) {
|
|
22
27
|
const { model } = props.ctx$
|
|
23
28
|
const { target } = props
|
|
24
29
|
|
|
25
30
|
const entity: ModelEntity = getModelPath(model, `main.${KIT}.entity`)
|
|
26
|
-
const entities = Object.values(entity) as any[]
|
|
27
31
|
|
|
28
32
|
Folder({ name: 'test' }, () => {
|
|
29
33
|
Folder({ name: 'sdk' }, () => {
|
|
@@ -39,73 +43,25 @@ const Test = cmp(function Test(props: any) {
|
|
|
39
43
|
(:require [sdk.api :as api]
|
|
40
44
|
[sdk.config :as config]
|
|
41
45
|
[sdk.testutil :as t]
|
|
46
|
+
[clojure.string]
|
|
42
47
|
[voxgig.struct :as vs]${requires}))
|
|
43
48
|
|
|
44
49
|
(defn run [rec]
|
|
45
50
|
`)
|
|
46
51
|
|
|
52
|
+
// Per-entity accessor / create+list smoke / stream checks
|
|
53
|
+
// (sorted-key order via each() keeps output byte-stable).
|
|
47
54
|
each(entity, (e: any) => {
|
|
48
|
-
|
|
49
|
-
(fn [] (let [sdk (api/test-sdk nil nil)]
|
|
50
|
-
(t/is-true (some? (api/${e.name} sdk nil)) "${e.name} accessor present"))))
|
|
51
|
-
`)
|
|
55
|
+
TestEntity({ target, entity: e })
|
|
52
56
|
})
|
|
53
57
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (!hasCreate && !hasList) {
|
|
59
|
-
continue
|
|
60
|
-
}
|
|
61
|
-
Content(` (t/run-check rec "gen-smoke-${e.name}"
|
|
62
|
-
(fn [] (let [sdk (api/test-sdk nil nil)
|
|
63
|
-
ent (api/${e.name} sdk nil)]
|
|
64
|
-
`)
|
|
65
|
-
if (hasCreate) {
|
|
66
|
-
Content(` (let [res (e-${e.name}/create ent (vs/jm "name" "smoke") nil)]
|
|
67
|
-
(t/is-true (vs/ismap res) "create returns a record map")
|
|
68
|
-
(t/is-true (some? (vs/getprop res "id")) "created record has an id"))
|
|
69
|
-
`)
|
|
70
|
-
}
|
|
71
|
-
if (hasList) {
|
|
72
|
-
Content(` (let [items (e-${e.name}/list ent (vs/jm) nil)]
|
|
73
|
-
(t/is-true (sequential? items) "list returns a sequential collection"))
|
|
74
|
-
`)
|
|
75
|
-
}
|
|
76
|
-
Content(` )))
|
|
77
|
-
`)
|
|
58
|
+
// Per-entity direct()/prepare() escape-hatch checks.
|
|
59
|
+
each(entity, (e: any) => {
|
|
60
|
+
TestDirect({ target, entity: e })
|
|
61
|
+
})
|
|
78
62
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// three records via the test mock (SDK.test entity seed) and streams
|
|
82
|
-
// them; needs only a list op.
|
|
83
|
-
if (hasList) {
|
|
84
|
-
Content(` (t/run-check rec "gen-stream-${e.name}"
|
|
85
|
-
(fn [] (let [seed (vs/jm "${e.name}" (vs/jm "S1" (vs/jm "id" "S1" "name" "a")
|
|
86
|
-
"S2" (vs/jm "id" "S2" "name" "b")
|
|
87
|
-
"S3" (vs/jm "id" "S3" "name" "c")))]
|
|
88
|
-
;; Fallback (no streaming feature): materialised items.
|
|
89
|
-
(let [sdk (api/test-sdk (vs/jm "entity" seed) nil)
|
|
90
|
-
items (vec (e-${e.name}/stream (api/${e.name} sdk nil) "list" (vs/jm) nil))]
|
|
91
|
-
(t/is-eq (count items) 3 "stream fallback yields materialised items")
|
|
92
|
-
(t/is-true (vs/ismap (first items)) "stream yields bare record maps"))
|
|
93
|
-
;; signal cancels iteration between yields.
|
|
94
|
-
(let [sdk (api/test-sdk (vs/jm "entity" seed) nil)
|
|
95
|
-
n (atom 0) sig (fn [] (>= (swap! n inc) 2))
|
|
96
|
-
items (vec (e-${e.name}/stream (api/${e.name} sdk nil) "list" (vs/jm) (vs/jm "signal" sig)))]
|
|
97
|
-
(t/is-eq (count items) 1 "stream signal stops after first yield"))
|
|
98
|
-
;; Streaming feature active: yields from the streaming iterator.
|
|
99
|
-
(when (vs/getpath (config/make-config) "feature.streaming")
|
|
100
|
-
(let [ssdk (api/test-sdk (vs/jm "entity" seed) (vs/jm "feature" (vs/jm "streaming" (vs/jm "active" true))))]
|
|
101
|
-
(t/is-eq (count (vec (e-${e.name}/stream (api/${e.name} ssdk nil) "list" (vs/jm) nil))) 3
|
|
102
|
-
"stream (streaming active) yields all items"))
|
|
103
|
-
(let [csdk (api/test-sdk (vs/jm "entity" seed) (vs/jm "feature" (vs/jm "streaming" (vs/jm "active" true "chunkSize" 2))))
|
|
104
|
-
batches (vec (e-${e.name}/stream (api/${e.name} csdk nil) "list" (vs/jm) nil))]
|
|
105
|
-
(t/is-eq (count batches) 2 "stream chunkSize groups items into 2 batches"))))))
|
|
106
|
-
`)
|
|
107
|
-
}
|
|
108
|
-
}
|
|
63
|
+
// Documentation clojure-examples syntax gate.
|
|
64
|
+
ReadmeExamplesTest({ target })
|
|
109
65
|
|
|
110
66
|
Content(` nil)
|
|
111
67
|
`)
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
// Typed-model generator (C++ target). Port of EntityTypes_ts.ts / _py.ts.
|
|
4
|
+
//
|
|
5
|
+
// The C++ SDK runtime is fully DYNAMIC: every op takes and returns the
|
|
6
|
+
// JSON-like sdk::Value, so — unlike a statically typed target — there are no
|
|
7
|
+
// generated structs the runtime consumes. This module emits a DOCUMENTATION
|
|
8
|
+
// header, <sdk>_types.hpp, describing the shape of each entity and its per-op
|
|
9
|
+
// request/match payloads as plain C++ structs in a dedicated `sdk::types`
|
|
10
|
+
// namespace. They are convenience/reference types a consumer MAY use to model
|
|
11
|
+
// payloads; the SDK itself neither includes nor requires this header, so it is
|
|
12
|
+
// safe (it cannot affect the runtime or the test build).
|
|
13
|
+
//
|
|
14
|
+
// Field/param sentinels ($STRING, $INTEGER, ...) map to concrete C++ types via
|
|
15
|
+
// the SHARED canonToType 'cpp' column (the single source of truth per language
|
|
16
|
+
// — do not keep a local table here). Array surfaces as std::vector<Value>,
|
|
17
|
+
// object as std::map<std::string, Value>, and any/null/unknown as the dynamic
|
|
18
|
+
// sdk::Value. Optional (req:false) members are marked with a trailing
|
|
19
|
+
// `// optional` comment — a struct member is always present in C++, so
|
|
20
|
+
// key-optionality is documented rather than encoded.
|
|
21
|
+
//
|
|
22
|
+
// Keep the SAME type-name scheme as every other language: <Name>,
|
|
23
|
+
// <Name>LoadMatch, <Name>ListMatch, <Name>CreateData, <Name>UpdateData,
|
|
24
|
+
// <Name>RemoveMatch (via the shared opTypeName helper).
|
|
25
|
+
|
|
26
|
+
import {
|
|
27
|
+
cmp, each, names,
|
|
28
|
+
File, Content,
|
|
29
|
+
canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions,
|
|
30
|
+
} from '@voxgig/sdkgen'
|
|
31
|
+
|
|
32
|
+
import {
|
|
33
|
+
KIT,
|
|
34
|
+
getModelPath,
|
|
35
|
+
} from '@voxgig/apidef'
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
const LANG = 'cpp'
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
// A valid C++ identifier for a struct member; non-identifier field names have
|
|
42
|
+
// no safe struct-member rendering, so they are skipped (still reachable via the
|
|
43
|
+
// runtime Value map).
|
|
44
|
+
function cppIdent(name: string): boolean {
|
|
45
|
+
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
// Emit a struct named `typeName` from a list of {name, type, optional} items.
|
|
50
|
+
// An item whose name is not a legal identifier is skipped (WITH a warning —
|
|
51
|
+
// the key stays reachable via the runtime Value map, but its absence from the
|
|
52
|
+
// typed model should be visible, not silent).
|
|
53
|
+
function emitStruct(typeName: string, items: any[], log?: any): void {
|
|
54
|
+
const usable = items.filter((it: any) => it && null != it.name && cppIdent(it.name))
|
|
55
|
+
|
|
56
|
+
items.forEach((it: any) => {
|
|
57
|
+
if (it && null != it.name && !cppIdent(it.name) && log && log.warn) {
|
|
58
|
+
log.warn({
|
|
59
|
+
point: 'entity-types-skip-field', typeName, field: it.name,
|
|
60
|
+
note: `cpp: field "${it.name}" of ${typeName} has no legal C++ ` +
|
|
61
|
+
`identifier form; omitted from the typed model (still reachable ` +
|
|
62
|
+
`via the runtime Value map)`,
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
if (0 === usable.length) {
|
|
68
|
+
Content(`struct ${typeName} {};
|
|
69
|
+
|
|
70
|
+
`)
|
|
71
|
+
return
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
Content(`struct ${typeName} {
|
|
75
|
+
`)
|
|
76
|
+
usable.forEach((it: any) => {
|
|
77
|
+
const opt = it.optional ? ' // optional' : ''
|
|
78
|
+
Content(` ${canonToType(it.type, LANG)} ${it.name};${opt}
|
|
79
|
+
`)
|
|
80
|
+
})
|
|
81
|
+
Content(`};
|
|
82
|
+
|
|
83
|
+
`)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
88
|
+
const { model, log } = props.ctx$
|
|
89
|
+
const target = props.target || {}
|
|
90
|
+
const ext = target.ext || 'hpp'
|
|
91
|
+
|
|
92
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
93
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
94
|
+
// collection, so inactive entities still get generated entity code that
|
|
95
|
+
// references these typed names. The typed model must cover them too.
|
|
96
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
97
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
98
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
99
|
+
// filter, so inactive entities still get class files referencing these
|
|
100
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
101
|
+
// with the go emitter's fix.
|
|
102
|
+
const entityList = each(entity).filter((e: any) => e && null != e.name)
|
|
103
|
+
// Derive the PascalCase Name up-front — it is set LAZILY by names().
|
|
104
|
+
entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
105
|
+
|
|
106
|
+
// Surface duplicate generated type names (two entities with the same
|
|
107
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
108
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
109
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
110
|
+
|
|
111
|
+
const guard = 'SDK_' + model.const.Name.toUpperCase().replace(/[^A-Z0-9]/g, '_') + '_TYPES_HPP'
|
|
112
|
+
|
|
113
|
+
File({ name: model.const.Name.toLowerCase() + '_types.' + ext }, () => {
|
|
114
|
+
|
|
115
|
+
Content(`// Typed reference models for the ${model.const.Name} SDK (C++).
|
|
116
|
+
//
|
|
117
|
+
// GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
|
|
118
|
+
// params. The C++ SDK runtime is Value-based, so these structs are
|
|
119
|
+
// DOCUMENTATION / convenience types only — the SDK neither includes nor
|
|
120
|
+
// requires this header. Array fields surface as std::vector<Value>, object
|
|
121
|
+
// fields as std::map<std::string, Value>, and any/null fields as sdk::Value.
|
|
122
|
+
// Optional (req:false) members are flagged with a trailing "// optional"
|
|
123
|
+
// comment. Do not edit by hand.
|
|
124
|
+
|
|
125
|
+
#ifndef ${guard}
|
|
126
|
+
#define ${guard}
|
|
127
|
+
|
|
128
|
+
#include <cstdint>
|
|
129
|
+
#include <map>
|
|
130
|
+
#include <string>
|
|
131
|
+
#include <vector>
|
|
132
|
+
|
|
133
|
+
#include "core/types.hpp"
|
|
134
|
+
|
|
135
|
+
namespace sdk {
|
|
136
|
+
namespace types {
|
|
137
|
+
|
|
138
|
+
`)
|
|
139
|
+
|
|
140
|
+
entityList.forEach((ent: any) => {
|
|
141
|
+
const Name = ent.Name
|
|
142
|
+
const fields = (ent.fields ? each(ent.fields) : [])
|
|
143
|
+
.filter((f: any) => f.active !== false)
|
|
144
|
+
|
|
145
|
+
// Entity data model: one member per field, `req:false` -> optional.
|
|
146
|
+
emitStruct(Name, fields.map((f: any) => ({
|
|
147
|
+
name: f.name, type: f.type, optional: false === f.req,
|
|
148
|
+
})), log)
|
|
149
|
+
|
|
150
|
+
// Per active op: a request/match type. Members and their optionality
|
|
151
|
+
// come from the shared partiality policy (opRequestShape).
|
|
152
|
+
const ops = ent.op || {}
|
|
153
|
+
;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
|
|
154
|
+
if (null == ops[opname]) {
|
|
155
|
+
return
|
|
156
|
+
}
|
|
157
|
+
const typeName = opTypeName(Name, opname)
|
|
158
|
+
const { items } = opRequestShape(ent, opname)
|
|
159
|
+
emitStruct(typeName, items, log)
|
|
160
|
+
})
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
Content(`} // namespace types
|
|
164
|
+
} // namespace sdk
|
|
165
|
+
|
|
166
|
+
#endif // ${guard}
|
|
167
|
+
`)
|
|
168
|
+
})
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
export {
|
|
173
|
+
EntityTypes,
|
|
174
|
+
}
|
|
@@ -23,6 +23,7 @@ import { Config } from './Config_cpp'
|
|
|
23
23
|
import { Gitignore } from './Gitignore_cpp'
|
|
24
24
|
import { MainEntity } from './MainEntity_cpp'
|
|
25
25
|
import { EntityBase } from './EntityBase_cpp'
|
|
26
|
+
import { EntityTypes } from './EntityTypes_cpp'
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
const Main = cmp(async function Main(props: any) {
|
|
@@ -49,6 +50,10 @@ const Main = cmp(async function Main(props: any) {
|
|
|
49
50
|
// entity/entities.hpp — the entity umbrella (declares every entity header).
|
|
50
51
|
EntityBase({ target })
|
|
51
52
|
|
|
53
|
+
// <sdk>_types.hpp — documentation/reference structs (not used by the
|
|
54
|
+
// Value-based runtime; safe convenience types for consumers).
|
|
55
|
+
EntityTypes({ target })
|
|
56
|
+
|
|
52
57
|
Folder({ name: 'core' }, () => {
|
|
53
58
|
|
|
54
59
|
Config({ target })
|
|
@@ -0,0 +1,170 @@
|
|
|
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 { cppVarName } from './utility_cpp'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// Type names come from the shared canonToType 'cpp' column (single source of truth).
|
|
13
|
+
|
|
14
|
+
// A type-correct C++ literal for a field's canonical type.
|
|
15
|
+
function cppLit(type: any, placeholder: string = 'example'): string {
|
|
16
|
+
const k = canonKey(type)
|
|
17
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'Value(1)'
|
|
18
|
+
if ('BOOLEAN' === k) return 'Value(true)'
|
|
19
|
+
if ('ARRAY' === k) return 'vlist()'
|
|
20
|
+
if ('OBJECT' === k) return 'vmap()'
|
|
21
|
+
return `Value("${placeholder}")`
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
// Operation method spellings for the C++ target: lowercase methods that take a
|
|
26
|
+
// request Value plus the ctrl Value, returning sdk::Value.
|
|
27
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
28
|
+
load: { method: 'load(match, ctrl)', desc: 'Load a single entity by match criteria.' },
|
|
29
|
+
list: { method: 'list(match, ctrl)', desc: 'List entities, optionally matching the given criteria.' },
|
|
30
|
+
create: { method: 'create(data, ctrl)', desc: 'Create a new entity with the given data.' },
|
|
31
|
+
update: { method: 'update(data, ctrl)', desc: 'Update an existing entity.' },
|
|
32
|
+
remove: { method: 'remove(match, ctrl)', desc: 'Remove the matching entity.' },
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
37
|
+
const { target } = props
|
|
38
|
+
const { model } = props.ctx$
|
|
39
|
+
|
|
40
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
41
|
+
|
|
42
|
+
const publishedEntities = each(entity)
|
|
43
|
+
.filter((entity: any) => entity.active !== false)
|
|
44
|
+
|
|
45
|
+
if (0 === publishedEntities.length) {
|
|
46
|
+
return
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
Content(`
|
|
50
|
+
|
|
51
|
+
## Entities
|
|
52
|
+
|
|
53
|
+
`)
|
|
54
|
+
|
|
55
|
+
publishedEntities.map((entity: any) => {
|
|
56
|
+
const opnames = Object.keys(entity.op || {})
|
|
57
|
+
const fields = entity.fields || []
|
|
58
|
+
// Model-driven id key: null when this entity has no id-like field.
|
|
59
|
+
const idF = entityIdField(entity)
|
|
60
|
+
// The client accessor is the entity's snake_case name (client->planet()).
|
|
61
|
+
const acc = cppVarName(entity.name)
|
|
62
|
+
const eVar = acc
|
|
63
|
+
|
|
64
|
+
Content(`
|
|
65
|
+
### ${entity.Name}
|
|
66
|
+
|
|
67
|
+
`)
|
|
68
|
+
|
|
69
|
+
if (entity.short) {
|
|
70
|
+
Content(`${entity.short}
|
|
71
|
+
|
|
72
|
+
`)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
Content(`Create an instance: \`auto ${eVar} = client->${acc}();\`
|
|
76
|
+
|
|
77
|
+
`)
|
|
78
|
+
|
|
79
|
+
if (opnames.length > 0) {
|
|
80
|
+
Content(`#### Operations
|
|
81
|
+
|
|
82
|
+
| Method | Description |
|
|
83
|
+
| --- | --- |
|
|
84
|
+
`)
|
|
85
|
+
opnames.map((opname: string) => {
|
|
86
|
+
const info = OP_DESC[opname]
|
|
87
|
+
if (info) {
|
|
88
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
89
|
+
`)
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
Content(`
|
|
94
|
+
`)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (fields.length > 0) {
|
|
98
|
+
Content(`#### Fields
|
|
99
|
+
|
|
100
|
+
| Field | Type | Description |
|
|
101
|
+
| --- | --- | --- |
|
|
102
|
+
`)
|
|
103
|
+
|
|
104
|
+
each(fields, (field: any) => {
|
|
105
|
+
const desc = field.short || ''
|
|
106
|
+
Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
|
|
107
|
+
`)
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
Content(`
|
|
111
|
+
`)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (opnames.includes('load')) {
|
|
115
|
+
// The id key plus every REQUIRED match key (parent path params like
|
|
116
|
+
// page_id) — the same shape the runtime resolves path params from.
|
|
117
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
118
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
119
|
+
.sort((a: any, b: any) =>
|
|
120
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
121
|
+
const loadArg = 0 < loadItems.length
|
|
122
|
+
? `vmap({${loadItems.map((it: any) =>
|
|
123
|
+
`{"${it.name}", ${cppLit(it.type,
|
|
124
|
+
it.name === idF ? entity.name + '_id' : it.name)}}`).join(', ')}})`
|
|
125
|
+
: 'Value::undef()'
|
|
126
|
+
Content(`#### Example: Load
|
|
127
|
+
|
|
128
|
+
\`\`\`cpp
|
|
129
|
+
Value ${eVar} = client->${acc}()->load(${loadArg}, Value::undef());
|
|
130
|
+
\`\`\`
|
|
131
|
+
|
|
132
|
+
`)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (opnames.includes('list')) {
|
|
136
|
+
Content(`#### Example: List
|
|
137
|
+
|
|
138
|
+
\`\`\`cpp
|
|
139
|
+
Value ${eVar}s = client->${acc}()->list(Value::undef(), Value::undef());
|
|
140
|
+
\`\`\`
|
|
141
|
+
|
|
142
|
+
`)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (opnames.includes('create')) {
|
|
146
|
+
// Members come from the SAME shape the runtime validates
|
|
147
|
+
// (opRequestShape): every required member must appear.
|
|
148
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
149
|
+
.filter((it: any) => !it.optional)
|
|
150
|
+
Content(`#### Example: Create
|
|
151
|
+
|
|
152
|
+
\`\`\`cpp
|
|
153
|
+
Value ${eVar} = client->${acc}()->create(vmap({
|
|
154
|
+
`)
|
|
155
|
+
createItems.map((it: any) => {
|
|
156
|
+
Content(` {"${it.name}", ${cppLit(it.type, 'example_' + it.name)}}, // ${canonToType(it.type, target.name)}
|
|
157
|
+
`)
|
|
158
|
+
})
|
|
159
|
+
Content(`}), Value::undef());
|
|
160
|
+
\`\`\`
|
|
161
|
+
|
|
162
|
+
`)
|
|
163
|
+
}
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
export {
|
|
169
|
+
ReadmeEntity
|
|
170
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
|
|
6
|
+
const { target, ctx$: { model } } = props
|
|
7
|
+
|
|
8
|
+
Content(`### Data as \`Value\`
|
|
9
|
+
|
|
10
|
+
The C++ SDK uses a single dynamic \`sdk::Value\` type (a JSON-like variant
|
|
11
|
+
over string / number / bool / list / map) throughout rather than generated
|
|
12
|
+
typed structs. This mirrors the dynamic nature of the API and keeps the
|
|
13
|
+
SDK flexible — no code generation is needed when the API schema changes.
|
|
14
|
+
|
|
15
|
+
Build maps with \`sdk::vmap({{"key", sdk::Value("v")}})\` and lists with
|
|
16
|
+
\`sdk::vlist({...})\`; read fields back with \`sdk::getp(value, "key")\`. Use
|
|
17
|
+
\`sdk::to_map()\` to safely coerce a value that should be a map, and
|
|
18
|
+
\`sdk::Struct::jsonify(value)\` to render it as JSON.
|
|
19
|
+
|
|
20
|
+
### Directory structure
|
|
21
|
+
|
|
22
|
+
\`\`\`
|
|
23
|
+
${target.name}/
|
|
24
|
+
├── core/ -- Runtime type graph, config, generated client
|
|
25
|
+
├── entity/ -- Per-entity client headers
|
|
26
|
+
├── feature/ -- Built-in features (Base, Test, Log, ...)
|
|
27
|
+
├── utility/ -- Operation pipeline + vendored struct library
|
|
28
|
+
├── test/ -- Test suites
|
|
29
|
+
├── Makefile -- Build & run the tests (C++17)
|
|
30
|
+
└── VERSION -- SDK version
|
|
31
|
+
\`\`\`
|
|
32
|
+
|
|
33
|
+
Include the umbrella header \`core/sdk.hpp\` to pull in the whole SDK: the
|
|
34
|
+
runtime types, the pipeline utilities, the vendored struct, the generated
|
|
35
|
+
config, the per-entity clients and the generated \`${model.const.Name}SDK\`
|
|
36
|
+
client class. Everything lives in the \`sdk\` namespace.
|
|
37
|
+
|
|
38
|
+
`)
|
|
39
|
+
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
export {
|
|
44
|
+
ReadmeExplanation
|
|
45
|
+
}
|