@voxgig/sdkgen 1.3.14 → 1.3.18
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 +5 -1
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/Feature.js +2 -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 +112 -24
- package/dist/helpers/canonType.js.map +1 -1
- package/dist/helpers/collectDeps.d.ts +1 -1
- package/dist/helpers/collectDeps.js +36 -13
- package/dist/helpers/collectDeps.js.map +1 -1
- package/dist/helpers/getMatchEntries.js.map +1 -1
- package/dist/helpers/naming.d.ts +7 -1
- package/dist/helpers/naming.js +90 -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 +5 -1
- package/dist/helpers/opShape.js +174 -7
- 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 +12 -2
- 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 +20 -14
- package/project/.sdk/model/target/cpp.aontu +4 -4
- package/project/.sdk/model/target/go-cli.aontu +17 -17
- package/project/.sdk/model/target/go-mcp.aontu +11 -11
- package/project/.sdk/model/target/go.aontu +1 -1
- package/project/.sdk/model/target/haskell.aontu +6 -3
- package/project/.sdk/model/target/java.aontu +4 -4
- package/project/.sdk/model/target/kotlin.aontu +4 -4
- package/project/.sdk/model/target/lean.aontu +51 -0
- package/project/.sdk/model/target/scala.aontu +4 -4
- 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 +167 -0
- package/project/.sdk/src/cmp/c/Entity_c.ts +3 -3
- 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 +169 -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/TestDirect_c.ts +3 -3
- 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/Entity_clojure.ts +1 -1
- package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +182 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +65 -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/Entity_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/MainEntity_cpp.ts +2 -2
- 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/ReadmeExamplesTest_cpp.ts +136 -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/TestDirect_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +5 -1
- package/project/.sdk/src/cmp/cpp/Test_cpp.ts +4 -0
- package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +195 -0
- package/project/.sdk/src/cmp/csharp/Entity_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/MainEntity_csharp.ts +2 -2
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
- package/project/.sdk/src/cmp/csharp/Package_csharp.ts +1 -1
- package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +210 -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/TestDirect_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/Test_csharp.ts +4 -0
- package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -30
- package/project/.sdk/src/cmp/dart/Entity_dart.ts +11 -3
- package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +2 -2
- package/project/.sdk/src/cmp/dart/Main_dart.ts +3 -3
- package/project/.sdk/src/cmp/dart/Package_dart.ts +1 -1
- 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/TestDirect_dart.ts +4 -4
- 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 +164 -0
- package/project/.sdk/src/cmp/elixir/Entity_elixir.ts +1 -1
- 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 +144 -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/Config_go.ts +4 -1
- package/project/.sdk/src/cmp/go/EntityTypes_go.ts +121 -20
- package/project/.sdk/src/cmp/go/Entity_go.ts +3 -3
- package/project/.sdk/src/cmp/go/Main_go.ts +7 -6
- package/project/.sdk/src/cmp/go/Package_go.ts +1 -1
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
- package/project/.sdk/src/cmp/go/TestDirect_go.ts +3 -3
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +11 -4
- package/project/.sdk/src/cmp/go/utility_go.ts +28 -2
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +249 -44
- package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +200 -31
- package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +135 -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 +206 -0
- package/project/.sdk/src/cmp/java/Entity_java.ts +3 -3
- package/project/.sdk/src/cmp/java/MainEntity_java.ts +2 -2
- package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
- package/project/.sdk/src/cmp/java/Package_java.ts +1 -1
- package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
- package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +208 -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/TestDirect_java.ts +3 -3
- package/project/.sdk/src/cmp/java/Test_java.ts +4 -0
- package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -9
- package/project/.sdk/src/cmp/js/Entity_js.ts +3 -3
- package/project/.sdk/src/cmp/js/MainEntity_js.ts +6 -4
- package/project/.sdk/src/cmp/js/Main_js.ts +2 -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 +10 -9
- 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 +200 -0
- package/project/.sdk/src/cmp/kotlin/Entity_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/MainEntity_kotlin.ts +2 -2
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
- package/project/.sdk/src/cmp/kotlin/Package_kotlin.ts +1 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +198 -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/TestDirect_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +4 -0
- package/project/.sdk/src/cmp/lean/Config_lean.ts +88 -0
- package/project/.sdk/src/cmp/lean/Entity_lean.ts +9 -0
- package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +18 -0
- package/project/.sdk/src/cmp/lean/Main_lean.ts +120 -0
- package/project/.sdk/src/cmp/lean/Package_lean.ts +68 -0
- package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +29 -0
- package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +19 -0
- package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +25 -0
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +38 -0
- package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +25 -0
- package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +24 -0
- package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +22 -0
- package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +50 -0
- package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +16 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +16 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +23 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +18 -0
- package/project/.sdk/src/cmp/lean/Test_lean.ts +207 -0
- package/project/.sdk/src/cmp/lean/utility_lean.ts +78 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -6
- package/project/.sdk/src/cmp/lua/Entity_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
- package/project/.sdk/src/cmp/lua/Package_lua.ts +1 -1
- 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/TestDirect_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +8 -3
- 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 +126 -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/Entity_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/MainEntity_perl.ts +2 -2
- package/project/.sdk/src/cmp/perl/Package_perl.ts +1 -1
- 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/TestDirect_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/Test_perl.ts +4 -0
- package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -7
- package/project/.sdk/src/cmp/php/Entity_php.ts +3 -3
- package/project/.sdk/src/cmp/php/MainEntity_php.ts +2 -2
- package/project/.sdk/src/cmp/php/Package_php.ts +1 -1
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +3 -3
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +8 -3
- package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -8
- package/project/.sdk/src/cmp/py/Entity_py.ts +4 -12
- package/project/.sdk/src/cmp/py/MainEntity_py.ts +2 -2
- package/project/.sdk/src/cmp/py/Main_py.ts +2 -2
- package/project/.sdk/src/cmp/py/Package_py.ts +1 -1
- 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/TestDirect_py.ts +3 -3
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +8 -3
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +32 -8
- package/project/.sdk/src/cmp/rb/Entity_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/MainEntity_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/Package_rb.ts +2 -2
- 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/TestDirect_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +8 -3
- package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +6 -2
- package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +151 -0
- package/project/.sdk/src/cmp/rust/Entity_rust.ts +4 -4
- package/project/.sdk/src/cmp/rust/MainEntity_rust.ts +2 -2
- package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
- package/project/.sdk/src/cmp/rust/Package_rust.ts +1 -1
- package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
- package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +144 -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/TestDirect_rust.ts +3 -3
- 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 +201 -0
- package/project/.sdk/src/cmp/scala/Entity_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/MainEntity_scala.ts +2 -2
- 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 +182 -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/TestDirect_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +38 -10
- package/project/.sdk/src/cmp/scala/Test_scala.ts +9 -1
- package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +151 -0
- package/project/.sdk/src/cmp/swift/Entity_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/MainEntity_swift.ts +2 -2
- package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
- package/project/.sdk/src/cmp/swift/Package_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
- package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +187 -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/TestDirect_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/Test_swift.ts +4 -0
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -6
- package/project/.sdk/src/cmp/ts/Entity_ts.ts +3 -3
- package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +6 -4
- package/project/.sdk/src/cmp/ts/Main_ts.ts +2 -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 +17 -15
- 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 +4 -4
- package/project/.sdk/src/cmp/zig/MainEntity_zig.ts +2 -2
- package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
- package/project/.sdk/src/cmp/zig/Package_zig.ts +61 -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/cpp/test/primary_utility_test.cpp +8 -16
- package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +10 -28
- 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/dart/test/primary_test.dart +7 -0
- 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/feature/test_feature.go +33 -1
- package/project/.sdk/tm/go/test/primary_utility_test.go +41 -42
- package/project/.sdk/tm/go/test/runner_test.go +30 -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/java/test/PrimaryUtilityTest.java +7 -24
- package/project/.sdk/tm/js/Makefile +1 -1
- package/project/.sdk/tm/js/jsconfig.json +12 -0
- package/project/.sdk/tm/js/src/feature/test/TestFeature.js +18 -1
- package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +8 -0
- package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +7 -20
- package/project/.sdk/tm/lean/LICENSE +21 -0
- package/project/.sdk/tm/lean/VERSION +1 -0
- package/project/.sdk/tm/lean/src/SdkFeature.lean +171 -0
- package/project/.sdk/tm/lean/src/SdkFeatures.lean +602 -0
- package/project/.sdk/tm/lean/src/SdkJson.lean +134 -0
- package/project/.sdk/tm/lean/src/SdkRuntime.lean +356 -0
- package/project/.sdk/tm/lean/src/SdkUtility.lean +617 -0
- package/project/.sdk/tm/lean/src/VoxgigStruct.lean +2880 -0
- package/project/.sdk/tm/lean/src/Vregex.lean +412 -0
- package/project/.sdk/tm/lean/src/feature/README.md +5 -0
- package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
- package/project/.sdk/tm/lean/test/StructCorpus.lean +697 -0
- package/project/.sdk/tm/lean/test/TFeature.lean +268 -0
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +349 -0
- package/project/.sdk/tm/lua/test/primary_utility_test.lua +10 -8
- package/project/.sdk/tm/ocaml/Makefile +5 -1
- package/project/.sdk/tm/perl/t/primary_utility.t +8 -17
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +9 -7
- package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
- package/project/.sdk/tm/py/feature/test_feature.py +28 -1
- package/project/.sdk/tm/py/test/test_primary_utility.py +13 -18
- package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/rb/feature/test_feature.rb +24 -1
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +7 -8
- package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
- package/project/.sdk/tm/rust/tests/common/mod.rs +37 -1
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +12 -26
- package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +7 -8
- package/project/.sdk/tm/ts/Makefile +1 -1
- package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +18 -1
- package/project/.sdk/tm/ts/test/utility/PrimaryUtility.test.ts +65 -21
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
- package/src/cmp/Entity.ts +5 -1
- package/src/cmp/Feature.ts +2 -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 +121 -25
- package/src/helpers/collectDeps.ts +39 -12
- package/src/helpers/naming.ts +106 -0
- package/src/helpers/opExample.ts +43 -20
- package/src/helpers/opShape.ts +197 -11
- package/src/sdkgen.ts +13 -3
- package/src/tsconfig.json +2 -0
- package/project/.sdk/tm/zig/build.zig.zon +0 -11
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
import { crateIdent, rustVarName } from './utility_rust'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct rust expression constructing a voxgig struct Value for a
|
|
14
|
+
// param. Strings render the quoted placeholder; numeric/boolean/array/object
|
|
15
|
+
// render a typed literal.
|
|
16
|
+
function rustLit(type: any, placeholder: string = 'example'): string {
|
|
17
|
+
const k = canonKey(type)
|
|
18
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
|
|
19
|
+
if ('BOOLEAN' === k) return 'Value::Bool(true)'
|
|
20
|
+
if ('ARRAY' === k) return 'Value::empty_list()'
|
|
21
|
+
if ('OBJECT' === k) return 'Value::empty_map()'
|
|
22
|
+
return `Value::str("${placeholder}")`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
|
|
27
|
+
const { target, ctx$: { model } } = props
|
|
28
|
+
|
|
29
|
+
const rustcrate = crateIdent(model)
|
|
30
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
31
|
+
|
|
32
|
+
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
33
|
+
|
|
34
|
+
const authActive = isAuthActive(model)
|
|
35
|
+
const ctor = authActive
|
|
36
|
+
? `${model.const.Name}SDK::new(jo(vec![\n ("apikey", Value::str(std::env::var("${envName(model)}_APIKEY").unwrap_or_default())),\n]))`
|
|
37
|
+
: `${model.const.Name}SDK::new(Value::Noval)`
|
|
38
|
+
|
|
39
|
+
Content(`\`\`\`rust
|
|
40
|
+
use ${rustcrate}::{jo, ${model.const.Name}SDK, Value};
|
|
41
|
+
|
|
42
|
+
let client = ${ctor};
|
|
43
|
+
|
|
44
|
+
`)
|
|
45
|
+
|
|
46
|
+
if (exampleEntity) {
|
|
47
|
+
const eName = nom(exampleEntity, 'Name')
|
|
48
|
+
const eVar = rustVarName(exampleEntity.name)
|
|
49
|
+
const method = rustVarName(exampleEntity.name)
|
|
50
|
+
const opnames = Object.keys(exampleEntity.op || {})
|
|
51
|
+
// Model-driven id key: null when the entity has no id-like field, in which
|
|
52
|
+
// case the load example takes no match argument.
|
|
53
|
+
const idF = entityIdField(exampleEntity)
|
|
54
|
+
|
|
55
|
+
if (opnames.includes('list')) {
|
|
56
|
+
Content(`// List all ${eName.toLowerCase()}s (returns a Value::List, Err on failure)
|
|
57
|
+
let ${eVar}s = client.${method}(Value::Noval).list(Value::Noval, Value::Noval).unwrap();
|
|
58
|
+
if let Value::List(items) = &${eVar}s {
|
|
59
|
+
for ${eVar} in items.borrow().iter() {
|
|
60
|
+
println!("{:?}", ${eVar});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
`)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (opnames.includes('load')) {
|
|
67
|
+
// Every REQUIRED load-match key (id first, then parent path params like
|
|
68
|
+
// page_id) — the same shape the runtime resolves path params from, so
|
|
69
|
+
// the example always works.
|
|
70
|
+
const loadItems = opRequestShape(exampleEntity, 'load').items
|
|
71
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
72
|
+
.sort((a: any, b: any) =>
|
|
73
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
74
|
+
const loadArg = 0 < loadItems.length
|
|
75
|
+
? `jo(vec![${loadItems.map((it: any) =>
|
|
76
|
+
`("${it.name}", ${rustLit(it.type,
|
|
77
|
+
it.name === idF ? 'example_id' : 'example_' + it.name)})`).join(', ')}])`
|
|
78
|
+
: 'Value::Noval'
|
|
79
|
+
Content(`
|
|
80
|
+
// Load a specific ${eName.toLowerCase()} (returns the record, Err on failure)
|
|
81
|
+
let ${eVar} = client.${method}(Value::Noval).load(${loadArg}, Value::Noval).unwrap();
|
|
82
|
+
println!("{:?}", ${eVar});
|
|
83
|
+
`)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
Content(`\`\`\`
|
|
88
|
+
`)
|
|
89
|
+
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
export {
|
|
94
|
+
ReadmeTopQuick
|
|
95
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
import { crateIdent, rustVarName } from './utility_rust'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct rust expression constructing a voxgig struct Value for a
|
|
14
|
+
// field's canonical type.
|
|
15
|
+
function rustLit(type: any): string {
|
|
16
|
+
const k = canonKey(type)
|
|
17
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
|
|
18
|
+
if ('BOOLEAN' === k) return 'Value::Bool(true)'
|
|
19
|
+
if ('ARRAY' === k) return 'Value::empty_list()'
|
|
20
|
+
if ('OBJECT' === k) return 'Value::empty_map()'
|
|
21
|
+
return 'Value::str("example")'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
const ReadmeTopTest = cmp(function ReadmeTopTest(props: any) {
|
|
26
|
+
const { target, ctx$: { model } } = props
|
|
27
|
+
|
|
28
|
+
const rustcrate = crateIdent(model)
|
|
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(`\`\`\`rust
|
|
36
|
+
use ${rustcrate}::{jo, test_sdk, Value};
|
|
37
|
+
|
|
38
|
+
let client = test_sdk(Value::Noval, Value::Noval);
|
|
39
|
+
`)
|
|
40
|
+
|
|
41
|
+
if (exampleEntity && primaryOp) {
|
|
42
|
+
const eName = nom(exampleEntity, 'Name')
|
|
43
|
+
const method = rustVarName(exampleEntity.name)
|
|
44
|
+
const idF = entityIdField(exampleEntity)
|
|
45
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
46
|
+
let arg = 'Value::Noval'
|
|
47
|
+
if (isMatchOp) {
|
|
48
|
+
// Every REQUIRED match key (id first) — the same shape that generates
|
|
49
|
+
// the op's request match.
|
|
50
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
51
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
52
|
+
.sort((a: any, b: any) =>
|
|
53
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
54
|
+
arg = 0 < items.length
|
|
55
|
+
? `jo(vec![${items.map((it: any) =>
|
|
56
|
+
`("${it.name}", ${it.name === idF ? 'Value::str("test01")' : rustLit(it.type)})`).join(', ')}])`
|
|
57
|
+
: 'Value::Noval'
|
|
58
|
+
} else if ('create' === primaryOp || 'update' === primaryOp) {
|
|
59
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
60
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
61
|
+
const required = items.filter((it: any) => !it.optional)
|
|
62
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
63
|
+
arg = 0 < chosen.length
|
|
64
|
+
? `jo(vec![${chosen.map((it: any) => `("${it.name}", ${rustLit(it.type)})`).join(', ')}])`
|
|
65
|
+
: 'Value::empty_map()'
|
|
66
|
+
}
|
|
67
|
+
const eVar = rustVarName(exampleEntity.name) + ('list' === primaryOp ? 's' : '')
|
|
68
|
+
Content(`let ${eVar} = client.${method}(Value::Noval).${primaryOp}(${arg}, Value::Noval).unwrap();
|
|
69
|
+
println!("{:?}", ${eVar});
|
|
70
|
+
`)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
Content(`\`\`\`
|
|
74
|
+
`)
|
|
75
|
+
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
ReadmeTopTest
|
|
81
|
+
}
|
|
@@ -73,7 +73,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
73
73
|
? `("apikey", getp(&env, "${PROJECTNAME}_APIKEY"))`
|
|
74
74
|
: ''
|
|
75
75
|
|
|
76
|
-
const opnames = Object.keys(entity.op)
|
|
76
|
+
const opnames = Object.keys(entity.op || {})
|
|
77
77
|
const hasLoad = opnames.includes('load')
|
|
78
78
|
const hasList = opnames.includes('list')
|
|
79
79
|
|
|
@@ -81,8 +81,8 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
81
81
|
return
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
const loadOp = (entity.op as any)
|
|
85
|
-
const listOp = (entity.op as any)
|
|
84
|
+
const loadOp = (entity.op as any)?.load
|
|
85
|
+
const listOp = (entity.op as any)?.list
|
|
86
86
|
|
|
87
87
|
// Load point info.
|
|
88
88
|
const loadPoint = loadOp?.points?.[0]
|
|
@@ -104,7 +104,14 @@ fn ${evar}_entity_instance() {
|
|
|
104
104
|
let ent = testsdk.${method}(Value::Noval);
|
|
105
105
|
assert_eq!(ent.get_name(), "${entity.name}");
|
|
106
106
|
}
|
|
107
|
+
`)
|
|
107
108
|
|
|
109
|
+
// The stream test drives the list op; only emit it when the entity has a
|
|
110
|
+
// list op (a create/load-only entity has no list endpoint, so
|
|
111
|
+
// stream("list") panics with point_no_points).
|
|
112
|
+
const flowHasList = allSteps.some((s: any) => 'list' === s.op)
|
|
113
|
+
if (flowHasList) {
|
|
114
|
+
Content(`
|
|
108
115
|
#[test]
|
|
109
116
|
fn ${evar}_entity_stream() {
|
|
110
117
|
// stream() runs the list op through the full pipeline and yields each
|
|
@@ -144,7 +151,10 @@ fn ${evar}_entity_stream() {
|
|
|
144
151
|
.collect();
|
|
145
152
|
assert_eq!(plain_items.len(), 2, "fallback stream should yield both items");
|
|
146
153
|
}
|
|
154
|
+
`)
|
|
155
|
+
}
|
|
147
156
|
|
|
157
|
+
Content(`
|
|
148
158
|
#[test]
|
|
149
159
|
fn ${evar}_entity_basic() {
|
|
150
160
|
let setup = ${evar}_basic_setup(Value::Noval);
|
|
@@ -13,6 +13,7 @@ import { cmp, each, Folder, File, Content } from '@voxgig/sdkgen'
|
|
|
13
13
|
|
|
14
14
|
import { TestEntity } from './TestEntity_rust'
|
|
15
15
|
import { TestDirect } from './TestDirect_rust'
|
|
16
|
+
import { ReadmeExamplesTest } from './ReadmeExamplesTest_rust'
|
|
16
17
|
import { crateIdent } from './utility_rust'
|
|
17
18
|
|
|
18
19
|
|
|
@@ -42,6 +43,9 @@ fn exists_test_mode() {
|
|
|
42
43
|
TestEntity({ target, entity, rustcrate })
|
|
43
44
|
TestDirect({ target, entity, rustcrate })
|
|
44
45
|
})
|
|
46
|
+
|
|
47
|
+
// Validate the documented rust examples in the READMEs are well-formed.
|
|
48
|
+
ReadmeExamplesTest({ target })
|
|
45
49
|
})
|
|
46
50
|
})
|
|
47
51
|
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
// Typed-model generator (Scala target). Port of EntityTypes_java.ts /
|
|
4
|
+
// EntityTypes_py.ts.
|
|
5
|
+
//
|
|
6
|
+
// Reads main.<KIT>.entity.<e>.fields[] and per-op params
|
|
7
|
+
// (op.<name>.points[].args.params[]) and emits ONE file, core/<Name>Types.scala,
|
|
8
|
+
// holding an `object <Name>Types` with a nested `final case class` per active
|
|
9
|
+
// entity plus a request/match case class per active op.
|
|
10
|
+
//
|
|
11
|
+
// WHY A CONTAINER OBJECT: keeps the whole reference model in one file whatever
|
|
12
|
+
// the entity count and matches the java target's single-container layout
|
|
13
|
+
// (<Name>Types.java). Scala permits multiple top-level types per file, but a
|
|
14
|
+
// container object mirrors the JVM sibling and keeps the generated core/ dir
|
|
15
|
+
// tidy.
|
|
16
|
+
//
|
|
17
|
+
// TYPE CHOICE: reference `case class` types with BOXED (nullable) component
|
|
18
|
+
// types, NOT the wired runtime type. The generated ops take/return the loose
|
|
19
|
+
// object model (java.util.Map[String, Object] / Object), so these case classes
|
|
20
|
+
// are NOT wired into the op signatures — they are documentation/DX reference
|
|
21
|
+
// shapes a caller may use to describe a payload before converting it to a map.
|
|
22
|
+
// This mirrors the java target's reference records and the JS target's JSDoc
|
|
23
|
+
// typedefs (annotation only, no runtime effect). Emitting unused case classes
|
|
24
|
+
// is harmless — they compile and have no runtime effect.
|
|
25
|
+
//
|
|
26
|
+
// OPTIONAL FIELDS: every component is a boxed reference type, hence inherently
|
|
27
|
+
// nullable, so a `req:false` field/param needs no distinct rendering in Scala.
|
|
28
|
+
//
|
|
29
|
+
// Sentinels map to Scala types via the SHARED canonToType 'scala' column (the
|
|
30
|
+
// single source of truth per language — do not keep a local table here).
|
|
31
|
+
//
|
|
32
|
+
// Keep the SAME type-name scheme as every other language: <Name>,
|
|
33
|
+
// <Name>LoadMatch, <Name>ListMatch, <Name>CreateData, <Name>UpdateData,
|
|
34
|
+
// <Name>RemoveMatch (via the shared opTypeName helper).
|
|
35
|
+
|
|
36
|
+
import {
|
|
37
|
+
cmp, each, names,
|
|
38
|
+
File, Content,
|
|
39
|
+
} from '@voxgig/sdkgen'
|
|
40
|
+
|
|
41
|
+
import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions , deriveEntityNames } from '@voxgig/sdkgen'
|
|
42
|
+
|
|
43
|
+
import {
|
|
44
|
+
KIT,
|
|
45
|
+
getModelPath,
|
|
46
|
+
} from '@voxgig/apidef'
|
|
47
|
+
|
|
48
|
+
import { scalaPackage } from './utility_scala'
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
const LANG = 'scala'
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
// Scala reserved words that cannot be a case-class parameter name.
|
|
55
|
+
const SCALA_KEYWORDS = new Set<string>([
|
|
56
|
+
'abstract', 'case', 'catch', 'class', 'def', 'do', 'else', 'enum', 'export',
|
|
57
|
+
'extends', 'false', 'final', 'finally', 'for', 'forSome', 'given', 'if',
|
|
58
|
+
'implicit', 'import', 'lazy', 'match', 'new', 'null', 'object', 'override',
|
|
59
|
+
'package', 'private', 'protected', 'return', 'sealed', 'super', 'then',
|
|
60
|
+
'this', 'throw', 'trait', 'true', 'try', 'type', 'val', 'var', 'while',
|
|
61
|
+
'with', 'yield',
|
|
62
|
+
])
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
// A field/param name that has a safe Scala identifier rendering. Names that are
|
|
66
|
+
// not valid identifiers (hyphens, leading digits) have no clean parameter form
|
|
67
|
+
// and are skipped — they remain reachable via the runtime map.
|
|
68
|
+
function scalaIdent(name: string): boolean {
|
|
69
|
+
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name) && !SCALA_KEYWORDS.has(name)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
// Emit a nested `final case class <typeName>(...)` from {name, type} items. An
|
|
74
|
+
// item whose name is not a legal identifier is skipped (WITH a warning — the
|
|
75
|
+
// key stays reachable via the runtime map, but its absence from the typed
|
|
76
|
+
// model should be visible, not silent); a duplicate component name (after the
|
|
77
|
+
// identifier filter) is dropped. An empty case class is a valid,
|
|
78
|
+
// zero-parameter shape.
|
|
79
|
+
function emitCaseClass(typeName: string, items: any[], log?: any): void {
|
|
80
|
+
const seen = new Set<string>()
|
|
81
|
+
const usable = items.filter((it: any) => {
|
|
82
|
+
if (!it || null == it.name) {
|
|
83
|
+
return false
|
|
84
|
+
}
|
|
85
|
+
if (!scalaIdent(it.name)) {
|
|
86
|
+
if (log && log.warn) {
|
|
87
|
+
log.warn({
|
|
88
|
+
point: 'entity-types-skip-field', typeName, field: it.name,
|
|
89
|
+
note: `scala: field "${it.name}" of ${typeName} has no legal ` +
|
|
90
|
+
`Scala identifier form; omitted from the typed model (still ` +
|
|
91
|
+
`reachable via the runtime map)`,
|
|
92
|
+
})
|
|
93
|
+
}
|
|
94
|
+
return false
|
|
95
|
+
}
|
|
96
|
+
if (seen.has(it.name)) {
|
|
97
|
+
return false
|
|
98
|
+
}
|
|
99
|
+
seen.add(it.name)
|
|
100
|
+
return true
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
if (0 === usable.length) {
|
|
104
|
+
Content(` final case class ${typeName}()
|
|
105
|
+
|
|
106
|
+
`)
|
|
107
|
+
return
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const params = usable
|
|
111
|
+
.map((it: any) => `${it.name}: ${canonToType(it.type, LANG)}`)
|
|
112
|
+
.join(', ')
|
|
113
|
+
Content(` final case class ${typeName}(${params})
|
|
114
|
+
|
|
115
|
+
`)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
120
|
+
const { model, log } = props.ctx$
|
|
121
|
+
const target = props.target || {}
|
|
122
|
+
const ext = target.ext || 'scala'
|
|
123
|
+
|
|
124
|
+
const scalapackage = props.scalapackage || scalaPackage(model)
|
|
125
|
+
|
|
126
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
127
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
128
|
+
// collection, so inactive entities still get generated entity code that
|
|
129
|
+
// references these typed names. The typed model must cover them too.
|
|
130
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
131
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
132
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
133
|
+
// filter, so inactive entities still get class files referencing these
|
|
134
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
135
|
+
// with the go emitter's fix.
|
|
136
|
+
const entityList = deriveEntityNames(entity)
|
|
137
|
+
// Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
|
|
138
|
+
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
139
|
+
// `Name = undefined` below. Parity with the go/py/java/csharp emitter's fix.
|
|
140
|
+
|
|
141
|
+
// Surface duplicate generated type names (two entities with the same
|
|
142
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
143
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
144
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
145
|
+
|
|
146
|
+
File({ name: model.const.Name + 'Types.' + ext }, () => {
|
|
147
|
+
|
|
148
|
+
Content(`package ${scalapackage}.core
|
|
149
|
+
|
|
150
|
+
// Typed reference models for the ${model.const.Name} SDK.
|
|
151
|
+
//
|
|
152
|
+
// GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
|
|
153
|
+
// params (op.<name>.points[].args.params[]). Field/param types come from the
|
|
154
|
+
// canonical type sentinels (source of truth: @voxgig/apidef VALID_CANON). Do
|
|
155
|
+
// not edit by hand.
|
|
156
|
+
//
|
|
157
|
+
// These case classes are documentation/DX reference shapes ONLY. The SDK ops
|
|
158
|
+
// take and return the loose object model (java.util.Map[String, Object] /
|
|
159
|
+
// Object) at runtime, so these types are not wired into the op signatures —
|
|
160
|
+
// use them to describe a payload before converting it to a map. Every
|
|
161
|
+
// component is a boxed (nullable) type, so an optional (req:false) key needs
|
|
162
|
+
// no distinct rendering.
|
|
163
|
+
|
|
164
|
+
object ${model.const.Name}Types {
|
|
165
|
+
|
|
166
|
+
`)
|
|
167
|
+
|
|
168
|
+
entityList.forEach((ent: any) => {
|
|
169
|
+
const Name = ent.Name
|
|
170
|
+
const fields = (ent.fields ? each(ent.fields) : [])
|
|
171
|
+
.filter((f: any) => f.active !== false)
|
|
172
|
+
|
|
173
|
+
// Entity data model: one component per field.
|
|
174
|
+
emitCaseClass(Name, fields.map((f: any) => ({
|
|
175
|
+
name: f.name, type: f.type,
|
|
176
|
+
})), log)
|
|
177
|
+
|
|
178
|
+
// Per active op: a request/match case class. Members come from the shared
|
|
179
|
+
// partiality policy (opRequestShape).
|
|
180
|
+
const ops = ent.op || {}
|
|
181
|
+
;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
|
|
182
|
+
if (null == ops[opname]) {
|
|
183
|
+
return
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const typeName = opTypeName(Name, opname)
|
|
187
|
+
const { items } = opRequestShape(ent, opname)
|
|
188
|
+
|
|
189
|
+
emitCaseClass(typeName, items, log)
|
|
190
|
+
})
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
Content(`}
|
|
194
|
+
`)
|
|
195
|
+
})
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
export {
|
|
200
|
+
EntityTypes,
|
|
201
|
+
}
|
|
@@ -4,7 +4,7 @@ import * as Path from 'node:path'
|
|
|
4
4
|
import {
|
|
5
5
|
cmp, camelify, names,
|
|
6
6
|
File, Content, Folder, Fragment,
|
|
7
|
-
entityClassName,
|
|
7
|
+
entityClassName, entityCollection,
|
|
8
8
|
} from '@voxgig/sdkgen'
|
|
9
9
|
|
|
10
10
|
import {
|
|
@@ -23,7 +23,7 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
23
23
|
const scalapackage = scalaPackage(model)
|
|
24
24
|
|
|
25
25
|
// Collision-free entity CLASS name.
|
|
26
|
-
const entityColl =
|
|
26
|
+
const entityColl = entityCollection(model)
|
|
27
27
|
const cls = entityClassName(entity, entityColl)
|
|
28
28
|
|
|
29
29
|
const entrep = {
|
|
@@ -39,7 +39,7 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
39
39
|
|
|
40
40
|
File({ name: cls + '.' + target.ext }, () => {
|
|
41
41
|
|
|
42
|
-
const opnames = Object.keys(entity.op)
|
|
42
|
+
const opnames = Object.keys(entity.op || {})
|
|
43
43
|
|
|
44
44
|
// For each CRUD op: if the spec defines it, splice in the real
|
|
45
45
|
// implementation. Otherwise emit a stub that satisfies the SdkEntity
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
import { cmp, Content, entityClassName } from '@voxgig/sdkgen'
|
|
3
|
+
import { cmp, Content, entityClassName, entityCollection } from '@voxgig/sdkgen'
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
KIT,
|
|
@@ -18,7 +18,7 @@ const MainEntity = cmp(async function MainEntity(props: any) {
|
|
|
18
18
|
const { model } = props.ctx$
|
|
19
19
|
|
|
20
20
|
const scalapackage = scalaPackage(model)
|
|
21
|
-
const entityColl =
|
|
21
|
+
const entityColl = entityCollection(model)
|
|
22
22
|
const cls = entityClassName(entity, entityColl)
|
|
23
23
|
const accessor = scalaVarName(entity.name)
|
|
24
24
|
|
|
@@ -23,6 +23,7 @@ import { Config } from './Config_scala'
|
|
|
23
23
|
import { Gitignore } from './Gitignore_scala'
|
|
24
24
|
import { MainEntity } from './MainEntity_scala'
|
|
25
25
|
import { EntityBase } from './EntityBase_scala'
|
|
26
|
+
import { EntityTypes } from './EntityTypes_scala'
|
|
26
27
|
import { scalaPackage } from './utility_scala'
|
|
27
28
|
|
|
28
29
|
|
|
@@ -83,6 +84,11 @@ const Main = cmp(async function Main(props: any) {
|
|
|
83
84
|
})
|
|
84
85
|
|
|
85
86
|
Config({ target })
|
|
87
|
+
|
|
88
|
+
// Generate the typed reference-model file (<Name>Types.scala) beside the
|
|
89
|
+
// other generated core files. Documentation/DX shapes only — not wired
|
|
90
|
+
// into the loose-object-model op signatures.
|
|
91
|
+
EntityTypes({ target, scalapackage })
|
|
86
92
|
})
|
|
87
93
|
|
|
88
94
|
})
|
|
@@ -0,0 +1,175 @@
|
|
|
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 { scalaVarName } from './utility_scala'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// Type names come from the shared canonToType 'scala' column (single source of truth).
|
|
13
|
+
|
|
14
|
+
// A type-correct Scala literal for a field's canonical type.
|
|
15
|
+
function scalaLit(type: any, placeholder: string = 'example'): string {
|
|
16
|
+
const k = canonKey(type)
|
|
17
|
+
if ('INTEGER' === k) return '1L'
|
|
18
|
+
if ('NUMBER' === k) return '1.0'
|
|
19
|
+
if ('BOOLEAN' === k) return 'true'
|
|
20
|
+
if ('ARRAY' === k) return 'java.util.List.of()'
|
|
21
|
+
if ('OBJECT' === k) return 'java.util.Map.of()'
|
|
22
|
+
return `"${placeholder}"`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
// Operation method spelling for Scala: camelCase methods over the loose object
|
|
27
|
+
// model. The op descriptions are language-agnostic.
|
|
28
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
29
|
+
load: { method: 'load(match, null)', desc: 'Load a single entity by match criteria.' },
|
|
30
|
+
list: { method: 'list(null, null)', desc: 'List entities, optionally matching the given criteria.' },
|
|
31
|
+
create: { method: 'create(data, null)', desc: 'Create a new entity with the given data.' },
|
|
32
|
+
update: { method: 'update(data, null)', desc: 'Update an existing entity.' },
|
|
33
|
+
remove: { method: 'remove(match, null)', desc: 'Remove the matching entity.' },
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
38
|
+
const { target } = props
|
|
39
|
+
const { model } = props.ctx$
|
|
40
|
+
|
|
41
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
42
|
+
|
|
43
|
+
const publishedEntities = each(entity)
|
|
44
|
+
.filter((entity: any) => entity.active !== false)
|
|
45
|
+
|
|
46
|
+
if (0 === publishedEntities.length) {
|
|
47
|
+
return
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
Content(`
|
|
51
|
+
|
|
52
|
+
## Entities
|
|
53
|
+
|
|
54
|
+
`)
|
|
55
|
+
|
|
56
|
+
publishedEntities.map((entity: any) => {
|
|
57
|
+
const opnames = Object.keys(entity.op || {})
|
|
58
|
+
const fields = entity.fields || []
|
|
59
|
+
// Model-driven id key: null when this entity has no id-like field.
|
|
60
|
+
const idF = entityIdField(entity)
|
|
61
|
+
// Sanitise the local variable name — a camelCased Scala keyword gets a
|
|
62
|
+
// trailing underscore (scalaVarName) so the snippet compiles.
|
|
63
|
+
const eVar = scalaVarName(entity.name)
|
|
64
|
+
const accessor = scalaVarName(entity.name)
|
|
65
|
+
|
|
66
|
+
Content(`
|
|
67
|
+
### ${entity.Name}
|
|
68
|
+
|
|
69
|
+
`)
|
|
70
|
+
|
|
71
|
+
if (entity.short) {
|
|
72
|
+
Content(`${entity.short}
|
|
73
|
+
|
|
74
|
+
`)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
Content(`Create an instance: \`val ${eVar} = client.${accessor}(null)\`
|
|
78
|
+
|
|
79
|
+
`)
|
|
80
|
+
|
|
81
|
+
if (opnames.length > 0) {
|
|
82
|
+
Content(`#### Operations
|
|
83
|
+
|
|
84
|
+
| Method | Description |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
`)
|
|
87
|
+
opnames.map((opname: string) => {
|
|
88
|
+
const info = OP_DESC[opname]
|
|
89
|
+
if (info) {
|
|
90
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
91
|
+
`)
|
|
92
|
+
}
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
Content(`
|
|
96
|
+
`)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (fields.length > 0) {
|
|
100
|
+
Content(`#### Fields
|
|
101
|
+
|
|
102
|
+
| Field | Type | Description |
|
|
103
|
+
| --- | --- | --- |
|
|
104
|
+
`)
|
|
105
|
+
|
|
106
|
+
each(fields, (field: any) => {
|
|
107
|
+
const desc = field.short || ''
|
|
108
|
+
Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
|
|
109
|
+
`)
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
Content(`
|
|
113
|
+
`)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (opnames.includes('load')) {
|
|
117
|
+
// The id key plus every REQUIRED match key (parent path params like
|
|
118
|
+
// page_id) — the same shape the runtime resolves path params from, so
|
|
119
|
+
// the example always works.
|
|
120
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
121
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
122
|
+
.sort((a: any, b: any) =>
|
|
123
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
124
|
+
const loadArg = 0 < loadItems.length
|
|
125
|
+
? `java.util.Map.of(${loadItems.map((it: any) =>
|
|
126
|
+
`"${it.name}", ${scalaLit(it.type,
|
|
127
|
+
it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')})`
|
|
128
|
+
: 'null'
|
|
129
|
+
Content(`#### Example: Load
|
|
130
|
+
|
|
131
|
+
\`\`\`scala
|
|
132
|
+
val ${eVar} = client.${accessor}(null).load(${loadArg}, null)
|
|
133
|
+
\`\`\`
|
|
134
|
+
|
|
135
|
+
`)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (opnames.includes('list')) {
|
|
139
|
+
Content(`#### Example: List
|
|
140
|
+
|
|
141
|
+
\`\`\`scala
|
|
142
|
+
val ${eVar}List = client.${accessor}(null).list(null, null)
|
|
143
|
+
\`\`\`
|
|
144
|
+
|
|
145
|
+
`)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (opnames.includes('create')) {
|
|
149
|
+
// Members come from the SAME shape the runtime validates
|
|
150
|
+
// (opRequestShape): every required member must appear — including a
|
|
151
|
+
// required id and parent keys like page_id — with a real literal.
|
|
152
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
153
|
+
.filter((it: any) => !it.optional)
|
|
154
|
+
Content(`#### Example: Create
|
|
155
|
+
|
|
156
|
+
\`\`\`scala
|
|
157
|
+
val ${eVar} = client.${accessor}(null).create(java.util.Map.of(
|
|
158
|
+
`)
|
|
159
|
+
createItems.map((it: any, i: number) => {
|
|
160
|
+
const comma = i < createItems.length - 1 ? ',' : ''
|
|
161
|
+
Content(` "${it.name}", ${scalaLit(it.type, 'example_' + it.name)}${comma} // ${canonToType(it.type, target.name)}
|
|
162
|
+
`)
|
|
163
|
+
})
|
|
164
|
+
Content(`), null)
|
|
165
|
+
\`\`\`
|
|
166
|
+
|
|
167
|
+
`)
|
|
168
|
+
}
|
|
169
|
+
})
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
export {
|
|
174
|
+
ReadmeEntity
|
|
175
|
+
}
|