@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,104 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
import { kotlinVarName, kotlinPackage } from './utility_kotlin'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct Kotlin literal for a param: numeric/boolean/array/object
|
|
14
|
+
// params render a typed literal; strings render the quoted placeholder. The
|
|
15
|
+
// SDK's loose object model means all values live in MutableMap<String, Any?>.
|
|
16
|
+
function kotlinLit(type: any, placeholder: string = 'example'): string {
|
|
17
|
+
const k = canonKey(type)
|
|
18
|
+
if ('INTEGER' === k) return '1L'
|
|
19
|
+
if ('NUMBER' === k) return '1.0'
|
|
20
|
+
if ('BOOLEAN' === k) return 'true'
|
|
21
|
+
if ('ARRAY' === k) return 'listOf<Any?>()'
|
|
22
|
+
if ('OBJECT' === k) return 'mapOf<String, Any?>()'
|
|
23
|
+
return `"${placeholder}"`
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
|
|
28
|
+
const { target, ctx$: { model } } = props
|
|
29
|
+
|
|
30
|
+
const SDK = model.const.Name + 'SDK'
|
|
31
|
+
|
|
32
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
33
|
+
|
|
34
|
+
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
35
|
+
|
|
36
|
+
const authActive = isAuthActive(model)
|
|
37
|
+
|
|
38
|
+
Content(`\`\`\`kotlin
|
|
39
|
+
import ${kotlinPackage(model)}.core.${SDK}
|
|
40
|
+
|
|
41
|
+
`)
|
|
42
|
+
|
|
43
|
+
if (authActive) {
|
|
44
|
+
Content(`val client = ${SDK}(mutableMapOf<String, Any?>(
|
|
45
|
+
"apikey" to System.getenv("${envName(model)}_APIKEY"),
|
|
46
|
+
))
|
|
47
|
+
|
|
48
|
+
`)
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
Content(`val client = ${SDK}()
|
|
52
|
+
|
|
53
|
+
`)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (exampleEntity) {
|
|
57
|
+
// Sanitise the local variable name — an entity whose camelCased name is a
|
|
58
|
+
// Kotlin keyword gets a trailing underscore (kotlinVarName) so the snippet
|
|
59
|
+
// compiles.
|
|
60
|
+
const eVar = kotlinVarName(exampleEntity.name)
|
|
61
|
+
const accessor = kotlinVarName(exampleEntity.name)
|
|
62
|
+
const eNameLower = nom(exampleEntity, 'Name').toLowerCase()
|
|
63
|
+
const opnames = Object.keys(exampleEntity.op || {})
|
|
64
|
+
// Model-driven id key: null when the entity has no id-like field, in which
|
|
65
|
+
// case the load example takes an empty match.
|
|
66
|
+
const idF = entityIdField(exampleEntity)
|
|
67
|
+
|
|
68
|
+
if (opnames.includes('list')) {
|
|
69
|
+
Content(`// List all ${eNameLower}s (returns Any?, an aggregate list; raises on error)
|
|
70
|
+
val ${eVar}List = client.${accessor}(null).list(null, null)
|
|
71
|
+
println(${eVar}List)
|
|
72
|
+
`)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (opnames.includes('load')) {
|
|
76
|
+
// Every REQUIRED load-match key (id first, then parent path params like
|
|
77
|
+
// page_id) — the same shape the runtime resolves path params from, so
|
|
78
|
+
// the example always works.
|
|
79
|
+
const loadItems = opRequestShape(exampleEntity, 'load').items
|
|
80
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
81
|
+
.sort((a: any, b: any) =>
|
|
82
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
83
|
+
const loadArg = 0 < loadItems.length
|
|
84
|
+
? `mutableMapOf<String, Any?>(${loadItems.map((it: any) =>
|
|
85
|
+
`"${it.name}" to ${kotlinLit(it.type,
|
|
86
|
+
it.name === idF ? 'example_id' : 'example_' + it.name)}`).join(', ')})`
|
|
87
|
+
: 'null'
|
|
88
|
+
Content(`
|
|
89
|
+
// Load a specific ${eNameLower} (returns the record, raises on error)
|
|
90
|
+
val ${eVar} = client.${accessor}(null).load(${loadArg}, null)
|
|
91
|
+
println(${eVar})
|
|
92
|
+
`)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
Content(`\`\`\`
|
|
97
|
+
`)
|
|
98
|
+
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
export {
|
|
103
|
+
ReadmeTopQuick
|
|
104
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { kotlinVarName } from './utility_kotlin'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct Kotlin literal for a field's canonical type.
|
|
13
|
+
function kotlinLit(type: any): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k) return '1L'
|
|
16
|
+
if ('NUMBER' === k) return '1.0'
|
|
17
|
+
if ('BOOLEAN' === k) return 'true'
|
|
18
|
+
if ('ARRAY' === k) return 'listOf<Any?>()'
|
|
19
|
+
if ('OBJECT' === k) return 'mapOf<String, Any?>()'
|
|
20
|
+
return '"example"'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
25
|
+
const { target, ctx$: { model } } = props
|
|
26
|
+
|
|
27
|
+
const SDK = model.const.Name + 'SDK'
|
|
28
|
+
|
|
29
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
30
|
+
|
|
31
|
+
// Pick an entity with a real op (prefer a read op) — never fabricate a
|
|
32
|
+
// `load` on an op-less entity.
|
|
33
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
34
|
+
|
|
35
|
+
Content(`\`\`\`kotlin
|
|
36
|
+
val client = ${SDK}.testSDK(null, null)
|
|
37
|
+
`)
|
|
38
|
+
|
|
39
|
+
if (exampleEntity && primaryOp) {
|
|
40
|
+
const idF = entityIdField(exampleEntity)
|
|
41
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
42
|
+
let arg = 'null'
|
|
43
|
+
if (isMatchOp) {
|
|
44
|
+
// Every REQUIRED match key (id first) — the same shape that generates
|
|
45
|
+
// the op's request type, so the block stays honest.
|
|
46
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
47
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
48
|
+
.sort((a: any, b: any) =>
|
|
49
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
50
|
+
arg = 0 < items.length
|
|
51
|
+
? `mutableMapOf<String, Any?>(${items.map((it: any) =>
|
|
52
|
+
`"${it.name}" to ${it.name === idF ? '"test01"' : kotlinLit(it.type)}`).join(', ')})`
|
|
53
|
+
: 'null'
|
|
54
|
+
} else if ('create' === primaryOp || 'update' === primaryOp) {
|
|
55
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
56
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
57
|
+
const required = items.filter((it: any) => !it.optional)
|
|
58
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
59
|
+
arg = `mutableMapOf<String, Any?>(${chosen.map((it: any) =>
|
|
60
|
+
`"${it.name}" to ${kotlinLit(it.type)}`).join(', ')})`
|
|
61
|
+
}
|
|
62
|
+
const eVar = kotlinVarName(exampleEntity.name) + ('list' === primaryOp ? 'List' : '')
|
|
63
|
+
const accessor = kotlinVarName(exampleEntity.name)
|
|
64
|
+
Content(`val ${eVar} = client.${accessor}(null).${primaryOp}(${arg}, null)
|
|
65
|
+
println(${eVar})
|
|
66
|
+
`)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
Content(`\`\`\`
|
|
70
|
+
`)
|
|
71
|
+
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
export {
|
|
76
|
+
ReadmeTopTest
|
|
77
|
+
}
|
|
@@ -13,6 +13,7 @@ import { cmp, each, Folder } from '@voxgig/sdkgen'
|
|
|
13
13
|
|
|
14
14
|
import { TestEntity } from './TestEntity_kotlin'
|
|
15
15
|
import { TestDirect } from './TestDirect_kotlin'
|
|
16
|
+
import { ReadmeExamplesTest } from './ReadmeExamplesTest_kotlin'
|
|
16
17
|
import { kotlinPackage } from './utility_kotlin'
|
|
17
18
|
|
|
18
19
|
|
|
@@ -33,6 +34,9 @@ const Test = cmp(function Test(props: any) {
|
|
|
33
34
|
TestEntity({ target, entity, kotlinpackage })
|
|
34
35
|
TestDirect({ target, entity, kotlinpackage })
|
|
35
36
|
})
|
|
37
|
+
|
|
38
|
+
// Validate the documented kotlin examples in the root + per-language docs.
|
|
39
|
+
ReadmeExamplesTest({ target, kotlinpackage })
|
|
36
40
|
})
|
|
37
41
|
})
|
|
38
42
|
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
File, Content,
|
|
22
22
|
} from '@voxgig/sdkgen'
|
|
23
23
|
|
|
24
|
-
import { canonToType, opTypeName, opRequestShape } from '@voxgig/sdkgen'
|
|
24
|
+
import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
|
|
25
25
|
|
|
26
26
|
import {
|
|
27
27
|
KIT,
|
|
@@ -41,15 +41,29 @@ function propKey(name: string): string {
|
|
|
41
41
|
|
|
42
42
|
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
43
43
|
const { target } = props
|
|
44
|
-
const { model } = props.ctx$
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
const { model, log } = props.ctx$
|
|
45
|
+
|
|
46
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
47
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
48
|
+
// collection, so inactive entities still get generated entity code that
|
|
49
|
+
// references these typed names. The typed model must cover them too.
|
|
50
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
51
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
52
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
53
|
+
// filter, so inactive entities still get class files referencing these
|
|
54
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
55
|
+
// with the go emitter's fix.
|
|
56
|
+
const entityList = each(entity).filter((e: any) => e && null != e.name)
|
|
48
57
|
// Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
|
|
49
58
|
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
50
59
|
// `Name = undefined` below. Parity with the go emitter's fix.
|
|
51
60
|
entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
52
61
|
|
|
62
|
+
// Surface duplicate generated type names (two entities with the same
|
|
63
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
64
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
65
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
66
|
+
|
|
53
67
|
File({ name: model.name + '_types.' + (target.ext || LANG) }, () => {
|
|
54
68
|
|
|
55
69
|
Content(`-- Typed models for the ${model.const.Name} SDK (LuaLS annotations).
|
|
@@ -55,7 +55,19 @@ const Main = cmp(async function Main(props: any) {
|
|
|
55
55
|
replace: {
|
|
56
56
|
...props.ctx$.stdrep,
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
// Load the LuaLS typed-model annotations module so it is part of
|
|
59
|
+
// the loaded program (module body is empty — no runtime effect) and
|
|
60
|
+
// does not depend on workspace-wide language-server scanning.
|
|
61
|
+
// NOTE: plain marker keys must EMBED the lua comment prefix
|
|
62
|
+
// (`-- #X`) — jostraca's bare `#X` form only matches `//`-style
|
|
63
|
+
// comment lines (cf. the `'-- #LoadOp'` keys in Entity_lua.ts).
|
|
64
|
+
'-- #TypesRequire': ({ indent }: any) => Content({ indent },
|
|
65
|
+
`-- Typed-model annotations (LuaLS ---@class); empty at runtime.\n` +
|
|
66
|
+
`require("${model.name}_types")`),
|
|
67
|
+
|
|
68
|
+
// Same embedded `-- ` prefix requirement as above (the bare
|
|
69
|
+
// '#BuildFeatures' key never matched the lua comment line).
|
|
70
|
+
'-- #BuildFeatures': ({ indent }: any) => {
|
|
59
71
|
each(feature, (feat: any) => {
|
|
60
72
|
const fname = feat.name.charAt(0).toUpperCase() + feat.name.slice(1)
|
|
61
73
|
Content({ indent }, ` -- feature: ${feat.name}
|
|
@@ -90,7 +102,7 @@ self._utility.feature_hook(self._rootctx, "${name}")
|
|
|
90
102
|
|
|
91
103
|
// Generate feature factory module
|
|
92
104
|
File({ name: 'features.' + target.ext }, () => {
|
|
93
|
-
Content(`--
|
|
105
|
+
Content(`-- ${model.const.Name} SDK feature factory
|
|
94
106
|
|
|
95
107
|
local BaseFeature = require("feature.base_feature")
|
|
96
108
|
`)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -63,7 +63,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
63
63
|
const idF = entityIdField(entity)
|
|
64
64
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
65
65
|
// Lua keyword (e.g. `end`) would otherwise emit uncompilable code.
|
|
66
|
-
const eVar =
|
|
66
|
+
const eVar = exampleVarName(entity.name, 'lua')
|
|
67
67
|
|
|
68
68
|
Content(`
|
|
69
69
|
### ${entity.Name}
|
|
@@ -36,7 +36,12 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
36
36
|
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
37
37
|
let testCallArg = ''
|
|
38
38
|
if (exampleEntity && isMatchOp) {
|
|
39
|
-
|
|
39
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
40
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
41
|
+
.sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
42
|
+
testCallArg = 0 < items.length
|
|
43
|
+
? `{ ${items.map((it: any) => `${luaKey(it.name)} = ${it.name === idF ? '"test01"' : luaLit(it.type)}`).join(', ')} }`
|
|
44
|
+
: ''
|
|
40
45
|
} else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
|
|
41
46
|
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
42
47
|
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -45,7 +45,7 @@ local client = ${ctor}
|
|
|
45
45
|
const article = /^[aeiou]/i.test(eName) ? "an" : "a"
|
|
46
46
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
47
47
|
// Lua keyword (e.g. `end`) would otherwise emit uncompilable code.
|
|
48
|
-
const eVar =
|
|
48
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'lua')
|
|
49
49
|
const opnames = entityOps(exampleEntity)
|
|
50
50
|
// Model-driven id key: `idF` is the MATCH key (null when none). `dataIdF`
|
|
51
51
|
// is the id on the RETURNED record's data type — an entity can key its match
|
|
@@ -108,7 +108,7 @@ end
|
|
|
108
108
|
if (nestedEntity) {
|
|
109
109
|
const neName = nom(nestedEntity, 'Name')
|
|
110
110
|
const neArticle = /^[aeiou]/i.test(neName) ? "an" : "a"
|
|
111
|
-
const neVar =
|
|
111
|
+
const neVar = exampleVarName(neName.toLowerCase(), 'lua')
|
|
112
112
|
|
|
113
113
|
// Model-driven match: every REQUIRED load-match key — the same shape
|
|
114
114
|
// the runtime resolves path params from, so the example always works.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -176,7 +176,7 @@ same parameters as \`direct()\`.
|
|
|
176
176
|
const idF = entityIdField(ent)
|
|
177
177
|
// Sanitise the local variable name — an entity whose lowercased name is
|
|
178
178
|
// a Lua keyword (e.g. `end`) would otherwise emit uncompilable code.
|
|
179
|
-
const eVar =
|
|
179
|
+
const eVar = exampleVarName(ent.name, 'lua')
|
|
180
180
|
|
|
181
181
|
Content(`
|
|
182
182
|
---
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -48,7 +48,7 @@ local client = ${ctor}
|
|
|
48
48
|
const eName = nom(exampleEntity, 'Name')
|
|
49
49
|
// Sanitise the local variable name — an entity whose lowercased name is a
|
|
50
50
|
// Lua keyword (e.g. `end`) would otherwise emit uncompilable code.
|
|
51
|
-
const eVar =
|
|
51
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'lua')
|
|
52
52
|
const opnames = Object.keys(exampleEntity.op || {})
|
|
53
53
|
// Model-driven id key: null when the entity has no id-like field, in which
|
|
54
54
|
// case the load example takes no match argument.
|
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
buildIdNames,
|
|
25
25
|
getMatchEntries,
|
|
26
26
|
isAuthActive,
|
|
27
|
+
entityDataIdField,
|
|
27
28
|
} from '@voxgig/sdkgen'
|
|
28
29
|
|
|
29
30
|
|
|
@@ -342,6 +343,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
|
|
|
342
343
|
|
|
343
344
|
const generateList: OpGen = (ctx, step, index) => {
|
|
344
345
|
const { entity, flow } = ctx
|
|
346
|
+
const hasDataId = null != entityDataIdField(entity)
|
|
345
347
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
346
348
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
347
349
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -387,7 +389,7 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
387
389
|
const hasRefData = validRef && allSteps.some((s: any) => 'create' === s.op &&
|
|
388
390
|
((s.input.ref ?? entity.name + '_ref01') === validRef))
|
|
389
391
|
|
|
390
|
-
if ('ItemExists' === validator.apply && hasRefData) {
|
|
392
|
+
if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
|
|
391
393
|
const refDataVar = validRef + '_data'
|
|
392
394
|
Content(`
|
|
393
395
|
local found_item = vs.select(
|
|
@@ -395,7 +397,7 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
395
397
|
{ id = ${refDataVar}["id"] })
|
|
396
398
|
assert.is_false(vs.isempty(found_item))
|
|
397
399
|
`)
|
|
398
|
-
} else if ('ItemNotExists' === validator.apply && hasRefData) {
|
|
400
|
+
} else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
|
|
399
401
|
const refDataVar = validRef + '_data'
|
|
400
402
|
Content(`
|
|
401
403
|
local not_found_item = vs.select(
|
|
@@ -548,6 +550,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
|
|
|
548
550
|
|
|
549
551
|
const generateRemove: OpGen = (ctx, step, index) => {
|
|
550
552
|
const { entity, flow } = ctx
|
|
553
|
+
if (null == entityDataIdField(entity)) {
|
|
554
|
+
return
|
|
555
|
+
}
|
|
551
556
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
552
557
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
553
558
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -24,7 +24,7 @@ const Test = cmp(function Test(props: any) {
|
|
|
24
24
|
|
|
25
25
|
// Generate exists test
|
|
26
26
|
File({ name: 'exists_test.' + target.ext }, () => {
|
|
27
|
-
Content(`--
|
|
27
|
+
Content(`-- ${model.const.Name} SDK exists test
|
|
28
28
|
|
|
29
29
|
local sdk = require("${model.name}_sdk")
|
|
30
30
|
|
|
@@ -8,6 +8,8 @@ local helpers = require("core.helpers")
|
|
|
8
8
|
-- Load utility registration (populates Utility._registrar)
|
|
9
9
|
require("utility.register")
|
|
10
10
|
|
|
11
|
+
-- #TypesRequire
|
|
12
|
+
|
|
11
13
|
-- Load features
|
|
12
14
|
local BaseFeature = require("feature.base_feature")
|
|
13
15
|
local features_factory = require("features")
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { ocamlVarName } from './utility_ocaml'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct OCaml `value` literal for a field's canonical type. Strings
|
|
13
|
+
// render the quoted placeholder.
|
|
14
|
+
function ocamlLit(type: any, placeholder: string = 'example'): string {
|
|
15
|
+
const k = canonKey(type)
|
|
16
|
+
if ('INTEGER' === k || 'NUMBER' === k) return '(Num 1.)'
|
|
17
|
+
if ('BOOLEAN' === k) return '(Bool true)'
|
|
18
|
+
if ('ARRAY' === k) return '(empty_list ())'
|
|
19
|
+
if ('OBJECT' === k) return '(empty_map ())'
|
|
20
|
+
return `(Str "${placeholder}")`
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// The logical OCaml type of a field's canonical type. The SDK carries every
|
|
25
|
+
// field inside the dynamic `value` variant, so this documents the underlying
|
|
26
|
+
// shape a caller reads out of the value.
|
|
27
|
+
function ocamlType(type: any): string {
|
|
28
|
+
const k = canonKey(type)
|
|
29
|
+
if ('INTEGER' === k) return 'int'
|
|
30
|
+
if ('NUMBER' === k) return 'float'
|
|
31
|
+
if ('BOOLEAN' === k) return 'bool'
|
|
32
|
+
if ('STRING' === k) return 'string'
|
|
33
|
+
if ('ARRAY' === k) return 'value list'
|
|
34
|
+
if ('OBJECT' === k) return 'value map'
|
|
35
|
+
return 'value'
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
// The op accessor spelling on the entity_obj record, plus a language-agnostic
|
|
40
|
+
// description.
|
|
41
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
42
|
+
load: { method: 'e_load reqmatch ctrl', desc: 'Load a single entity by match criteria.' },
|
|
43
|
+
list: { method: 'e_list reqmatch ctrl', desc: 'List entities, optionally matching the given criteria.' },
|
|
44
|
+
create: { method: 'e_create reqdata ctrl', desc: 'Create a new entity with the given data.' },
|
|
45
|
+
update: { method: 'e_update reqdata ctrl', desc: 'Update an existing entity.' },
|
|
46
|
+
remove: { method: 'e_remove reqmatch ctrl', desc: 'Remove the matching entity.' },
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
51
|
+
const { target } = props
|
|
52
|
+
const { model } = props.ctx$
|
|
53
|
+
|
|
54
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
55
|
+
|
|
56
|
+
const publishedEntities = each(entity)
|
|
57
|
+
.filter((entity: any) => entity.active !== false)
|
|
58
|
+
|
|
59
|
+
if (0 === publishedEntities.length) {
|
|
60
|
+
return
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
Content(`
|
|
64
|
+
|
|
65
|
+
## Entities
|
|
66
|
+
|
|
67
|
+
`)
|
|
68
|
+
|
|
69
|
+
publishedEntities.map((entity: any) => {
|
|
70
|
+
const opnames = Object.keys(entity.op || {})
|
|
71
|
+
const fields = entity.fields || []
|
|
72
|
+
// Model-driven id key: null when this entity has no id-like field.
|
|
73
|
+
const idF = entityIdField(entity)
|
|
74
|
+
const fn = ocamlVarName(entity.name)
|
|
75
|
+
|
|
76
|
+
Content(`
|
|
77
|
+
### ${entity.Name}
|
|
78
|
+
|
|
79
|
+
`)
|
|
80
|
+
|
|
81
|
+
if (entity.short) {
|
|
82
|
+
Content(`${entity.short}
|
|
83
|
+
|
|
84
|
+
`)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
Content(`Create an instance: \`let ${fn} = Sdk_client.${fn} client Noval\`
|
|
88
|
+
|
|
89
|
+
`)
|
|
90
|
+
|
|
91
|
+
if (opnames.length > 0) {
|
|
92
|
+
Content(`#### Operations
|
|
93
|
+
|
|
94
|
+
| Method | Description |
|
|
95
|
+
| --- | --- |
|
|
96
|
+
`)
|
|
97
|
+
opnames.map((opname: string) => {
|
|
98
|
+
const info = OP_DESC[opname]
|
|
99
|
+
if (info) {
|
|
100
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
101
|
+
`)
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
Content(`
|
|
106
|
+
`)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (fields.length > 0) {
|
|
110
|
+
Content(`#### Fields
|
|
111
|
+
|
|
112
|
+
| Field | Type | Description |
|
|
113
|
+
| --- | --- | --- |
|
|
114
|
+
`)
|
|
115
|
+
|
|
116
|
+
each(fields, (field: any) => {
|
|
117
|
+
const desc = field.short || ''
|
|
118
|
+
Content(`| \`${field.name}\` | \`${ocamlType(field.type)}\` | ${desc} |
|
|
119
|
+
`)
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
Content(`
|
|
123
|
+
`)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (opnames.includes('load')) {
|
|
127
|
+
// The id key plus every REQUIRED match key (parent path params like
|
|
128
|
+
// page_id) — the same shape the runtime resolves path params from.
|
|
129
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
130
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
131
|
+
.sort((a: any, b: any) =>
|
|
132
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
133
|
+
const loadArg = 0 < loadItems.length
|
|
134
|
+
? `jo [${loadItems.map((it: any) =>
|
|
135
|
+
`("${it.name}", ${ocamlLit(it.type,
|
|
136
|
+
it.name === idF ? entity.name + '_id' : it.name)})`).join('; ')}]`
|
|
137
|
+
: 'Noval'
|
|
138
|
+
Content(`#### Example: Load
|
|
139
|
+
|
|
140
|
+
\`\`\`ocaml
|
|
141
|
+
let ${fn} = (Sdk_client.${fn} client Noval).e_load (${loadArg}) Noval
|
|
142
|
+
\`\`\`
|
|
143
|
+
|
|
144
|
+
`)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (opnames.includes('list')) {
|
|
148
|
+
Content(`#### Example: List
|
|
149
|
+
|
|
150
|
+
\`\`\`ocaml
|
|
151
|
+
let ${fn}s = (Sdk_client.${fn} client Noval).e_list (empty_map ()) Noval
|
|
152
|
+
\`\`\`
|
|
153
|
+
|
|
154
|
+
`)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (opnames.includes('create')) {
|
|
158
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
159
|
+
.filter((it: any) => !it.optional)
|
|
160
|
+
Content(`#### Example: Create
|
|
161
|
+
|
|
162
|
+
\`\`\`ocaml
|
|
163
|
+
let ${fn} = (Sdk_client.${fn} client Noval).e_create (jo [
|
|
164
|
+
`)
|
|
165
|
+
createItems.map((it: any) => {
|
|
166
|
+
Content(` ("${it.name}", ${ocamlLit(it.type, 'example_' + it.name)}); (* ${ocamlType(it.type)} *)
|
|
167
|
+
`)
|
|
168
|
+
})
|
|
169
|
+
Content(`]) Noval
|
|
170
|
+
\`\`\`
|
|
171
|
+
|
|
172
|
+
`)
|
|
173
|
+
}
|
|
174
|
+
})
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
export {
|
|
179
|
+
ReadmeEntity
|
|
180
|
+
}
|