@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
|
@@ -4,7 +4,7 @@ import * as Path from 'node:path'
|
|
|
4
4
|
import {
|
|
5
5
|
cmp, each, camelify, names,
|
|
6
6
|
File, Content, Folder, Fragment, Line, FeatureHook, Slot,
|
|
7
|
-
entityClassName,
|
|
7
|
+
entityClassName, entityCollection,
|
|
8
8
|
} from '@voxgig/sdkgen'
|
|
9
9
|
|
|
10
10
|
import {
|
|
@@ -22,7 +22,7 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
22
22
|
// Collision-free entity CLASS name (see entityClassName): normally
|
|
23
23
|
// `<Name>Entity`, disambiguated when it would clash with another entity's
|
|
24
24
|
// data-type name. The class file name and the Main require path both use this.
|
|
25
|
-
const entityColl =
|
|
25
|
+
const entityColl = entityCollection(model)
|
|
26
26
|
const cls = entityClassName(entity, entityColl)
|
|
27
27
|
|
|
28
28
|
const entrep = {
|
|
@@ -37,7 +37,7 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
37
37
|
|
|
38
38
|
File({ name: cls + '.' + target.name }, () => {
|
|
39
39
|
|
|
40
|
-
const opnames = Object.keys(entity.op)
|
|
40
|
+
const opnames = Object.keys(entity.op || {})
|
|
41
41
|
|
|
42
42
|
const opfrags =
|
|
43
43
|
(['load', 'list', 'create', 'update', 'remove']
|
|
@@ -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,
|
|
@@ -14,13 +14,15 @@ const MainEntity = cmp(async function MainEntity(props: any) {
|
|
|
14
14
|
|
|
15
15
|
// Return the collision-free class (entityClassName); the accessor METHOD name
|
|
16
16
|
// (entity.Name) is unchanged so callers still write client.<Name>().
|
|
17
|
-
const cls = entityClassName(entity,
|
|
17
|
+
const cls = entityClassName(entity, entityCollection(model))
|
|
18
18
|
|
|
19
19
|
Content(`
|
|
20
20
|
// Entity access: \`client.${entity.Name}().list()\` / \`client.${entity.Name}().load({ id })\`.
|
|
21
|
-
|
|
21
|
+
// The argument is the entity OPTIONS object (passed to the entity
|
|
22
|
+
// constructor as entopts), not initial entity data.
|
|
23
|
+
${entity.Name}(entopts) {
|
|
22
24
|
const self = this
|
|
23
|
-
return new ${cls}(self,
|
|
25
|
+
return new ${cls}(self, entopts)
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
`)
|
|
@@ -4,7 +4,7 @@ import * as Path from 'node:path'
|
|
|
4
4
|
import {
|
|
5
5
|
cmp, each, names, cmap,
|
|
6
6
|
List, File, Content, Copy, Folder, Fragment, Line, FeatureHook,
|
|
7
|
-
entityClassName,
|
|
7
|
+
entityClassName, entityCollection,
|
|
8
8
|
} from '@voxgig/sdkgen'
|
|
9
9
|
|
|
10
10
|
|
|
@@ -57,7 +57,7 @@ const Main = cmp(async function Main(props: any) {
|
|
|
57
57
|
Line(`// ${model.const.Name} ${target.Name} SDK\n`)
|
|
58
58
|
|
|
59
59
|
List({ item: entity }, ({ item }: any) => {
|
|
60
|
-
const cls = entityClassName(item,
|
|
60
|
+
const cls = entityClassName(item, entityCollection(model))
|
|
61
61
|
return Line(`const { ${cls} } = require('./entity/${cls}')`)
|
|
62
62
|
})
|
|
63
63
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -46,7 +46,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
46
46
|
// Model-driven id key: null when this entity has no id-like field.
|
|
47
47
|
const idF = entityIdField(entity)
|
|
48
48
|
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
49
|
-
const eVar =
|
|
49
|
+
const eVar = exampleVarName(entity.name, 'js')
|
|
50
50
|
|
|
51
51
|
Content(`
|
|
52
52
|
### ${entity.Name}
|
|
@@ -108,7 +108,7 @@ const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
|
108
108
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
109
109
|
const loadArg = 0 < loadItems.length
|
|
110
110
|
? `{ ${loadItems.map((it: any) =>
|
|
111
|
-
`${it.name}: ${exampleValue(entity, entity.op && entity.op.load, it.name,
|
|
111
|
+
`${jsKey(it.name)}: ${exampleValue(entity, entity.op && entity.op.load, it.name,
|
|
112
112
|
it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')} }`
|
|
113
113
|
: ''
|
|
114
114
|
Content(`#### Example: Load
|
|
@@ -144,7 +144,7 @@ const ${eVar}s = await client.${entity.Name}().list()
|
|
|
144
144
|
const ${eVar} = await client.${entity.Name}().create({
|
|
145
145
|
`)
|
|
146
146
|
createItems.map((it: any) => {
|
|
147
|
-
Content(` ${it.name}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
|
|
147
|
+
Content(` ${jsKey(it.name)}: ${exampleValue(entity, entity.op && entity.op.create, it.name, 'example_' + it.name)},
|
|
148
148
|
`)
|
|
149
149
|
})
|
|
150
150
|
Content(`})
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, envName, entityIdField, entityDataIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, entityIdField, entityDataIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -19,7 +19,7 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
19
19
|
// only when NO entity exposes any op (a direct()-only SDK).
|
|
20
20
|
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
21
21
|
const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
|
|
22
|
-
const eVar =
|
|
22
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'js')
|
|
23
23
|
|
|
24
24
|
const primaryOpDef = exampleEntity && primaryOp && exampleEntity.op && exampleEntity.op[primaryOp]
|
|
25
25
|
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
@@ -32,14 +32,23 @@ const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
|
32
32
|
if (!exampleEntity || !primaryOp) return ''
|
|
33
33
|
if ('list' === primaryOp) return ''
|
|
34
34
|
if (isMatchOp) {
|
|
35
|
-
|
|
35
|
+
// Every REQUIRED match key (id first), not just idF — a composite-match
|
|
36
|
+
// entity (database_id + id) needs them all. Mirrors ReadmeTopTest.
|
|
37
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
38
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
39
|
+
.sort((a: any, b: any) => (a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
40
|
+
if (0 === items.length) return ''
|
|
41
|
+
const pairs = items.map((it: any) =>
|
|
42
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
|
|
43
|
+
it.name === idF ? idPlaceholder : 'example_' + it.name)}`)
|
|
44
|
+
return `{ ${pairs.join(', ')} }`
|
|
36
45
|
}
|
|
37
46
|
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
38
47
|
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
39
48
|
const required = items.filter((it: any) => !it.optional)
|
|
40
49
|
const chosen = required.length ? required : items.slice(0, 3)
|
|
41
50
|
const pairs = chosen.map((it: any) =>
|
|
42
|
-
`${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
|
|
51
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`)
|
|
43
52
|
return `{ ${pairs.join(', ')} }`
|
|
44
53
|
}
|
|
45
54
|
const testCallArg = primaryArg('test01')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityOps, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive, packageName, envName, opRequestShape, entityIdField, entityOps, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -47,7 +47,7 @@ const client = ${ctor}
|
|
|
47
47
|
// then load/remove match on no argument and update omits the id.
|
|
48
48
|
const idF = entityIdField(exampleEntity)
|
|
49
49
|
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
50
|
-
const eVar =
|
|
50
|
+
const eVar = exampleVarName(exampleEntity.name, 'js')
|
|
51
51
|
const exampleFields = (opname: string): string[] => {
|
|
52
52
|
// ids are rendered separately as the match key for update/remove; a
|
|
53
53
|
// REQUIRED id stays for create (dropping it makes the payload
|
|
@@ -64,7 +64,7 @@ const client = ${ctor}
|
|
|
64
64
|
? (required.length ? required : items.slice(0, 2))
|
|
65
65
|
: required.concat(optional).slice(0, Math.max(2, required.length))
|
|
66
66
|
return chosen.map((it: any) =>
|
|
67
|
-
` ${it.name}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
|
|
67
|
+
` ${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op[opname], it.name, 'example_' + it.name)},`)
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// The full REQUIRED match for load/remove (id first, then parent path
|
|
@@ -77,7 +77,7 @@ const client = ${ctor}
|
|
|
77
77
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
78
78
|
return 0 < matchItems.length
|
|
79
79
|
? `{ ${matchItems.map((it: any) =>
|
|
80
|
-
`${it.name}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op[opname], it.name,
|
|
80
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, exampleEntity.op && exampleEntity.op[opname], it.name,
|
|
81
81
|
it.name === idF ? exampleEntity.name + '_id' : 'example_' + it.name)}`).join(', ')} }`
|
|
82
82
|
: ''
|
|
83
83
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, canonToType, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -185,7 +185,7 @@ Alias for \`${model.Name}SDK.test()\`.
|
|
|
185
185
|
// which case load/remove match on no argument and update omits the id.
|
|
186
186
|
const idF = entityIdField(ent)
|
|
187
187
|
// Variable-safe lowercase name (a `Delete` entity must not bind `delete`).
|
|
188
|
-
const eVar =
|
|
188
|
+
const eVar = exampleVarName(ent.name, 'js')
|
|
189
189
|
|
|
190
190
|
Content(`
|
|
191
191
|
---
|
|
@@ -281,7 +281,7 @@ ${info.desc}
|
|
|
281
281
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
282
282
|
const arg = 0 < matchItems.length
|
|
283
283
|
? `{ ${matchItems.map((it: any) =>
|
|
284
|
-
`${it.name}: ${exampleValue(ent, ent.op && ent.op[opname], it.name,
|
|
284
|
+
`${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op[opname], it.name,
|
|
285
285
|
it.name === idF ? ent.name + '_id' : it.name)}`).join(', ')} }`
|
|
286
286
|
: ''
|
|
287
287
|
Content(`\`\`\`ts
|
|
@@ -309,7 +309,7 @@ const results = await client.${ent.Name}().${opname}()
|
|
|
309
309
|
const result = await client.${ent.Name}().create({
|
|
310
310
|
`)
|
|
311
311
|
createItems.map((it: any) => {
|
|
312
|
-
Content(` ${it.name}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
|
|
312
|
+
Content(` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.create, it.name, 'example_' + it.name)},
|
|
313
313
|
`)
|
|
314
314
|
})
|
|
315
315
|
Content(`})
|
|
@@ -325,7 +325,7 @@ const result = await client.${ent.Name}().create({
|
|
|
325
325
|
.sort((a: any, b: any) =>
|
|
326
326
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
327
327
|
const updateLines = updateItems.map((it: any) =>
|
|
328
|
-
` ${it.name}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
|
|
328
|
+
` ${jsKey(it.name)}: ${exampleValue(ent, ent.op && ent.op.update, it.name,
|
|
329
329
|
it.name === idF ? ent.name + '_id' : it.name)},\n`).join('')
|
|
330
330
|
Content(`\`\`\`ts
|
|
331
331
|
const result = await client.${ent.Name}().update({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive, packageName, envName, entityIdField, entityOps, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -29,7 +29,7 @@ const client = ${ctor}
|
|
|
29
29
|
|
|
30
30
|
if (exampleEntity) {
|
|
31
31
|
const eName = nom(exampleEntity, 'Name')
|
|
32
|
-
const eVar =
|
|
32
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'js')
|
|
33
33
|
// ACTIVE ops only — an inactive op generates no method, so an example
|
|
34
34
|
// calling it would be wrong.
|
|
35
35
|
const opnames = entityOps(exampleEntity)
|
|
@@ -57,7 +57,7 @@ for (const ${eVar} of ${eVar}s) {
|
|
|
57
57
|
|
|
58
58
|
if (nestedEntity) {
|
|
59
59
|
const neName = nom(nestedEntity, 'Name')
|
|
60
|
-
const neVar =
|
|
60
|
+
const neVar = exampleVarName(neName.toLowerCase(), 'js')
|
|
61
61
|
const loadOp = nestedEntity.op && nestedEntity.op.load
|
|
62
62
|
|
|
63
63
|
// Every REQUIRED load-match key (parent keys like page_id first, the
|
|
@@ -69,7 +69,7 @@ for (const ${eVar} of ${eVar}s) {
|
|
|
69
69
|
.sort((a: any, b: any) =>
|
|
70
70
|
(a.name === neIdF ? 1 : 0) - (b.name === neIdF ? 1 : 0))
|
|
71
71
|
.map((it: any) =>
|
|
72
|
-
` ${it.name}: ${exampleValue(nestedEntity, loadOp, it.name,
|
|
72
|
+
` ${jsKey(it.name)}: ${exampleValue(nestedEntity, loadOp, it.name,
|
|
73
73
|
it.name === neIdF ? 'example_id' : 'example_' + it.name)},`)
|
|
74
74
|
|
|
75
75
|
Content(`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, entityIdField, pickExampleEntity, opRequestShape, safeVarName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName, jsKey } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -25,7 +25,7 @@ const client = ${model.const.Name}SDK.test()
|
|
|
25
25
|
if (exampleEntity && primaryOp) {
|
|
26
26
|
const eName = nom(exampleEntity, 'Name')
|
|
27
27
|
// A list() result is an array — name the variable accordingly.
|
|
28
|
-
const eVar =
|
|
28
|
+
const eVar = exampleVarName(eName.toLowerCase(), 'js') +
|
|
29
29
|
('list' === primaryOp ? 's' : '')
|
|
30
30
|
const primaryOpDef = exampleEntity.op && exampleEntity.op[primaryOp]
|
|
31
31
|
const idF = entityIdField(exampleEntity)
|
|
@@ -39,7 +39,7 @@ const client = ${model.const.Name}SDK.test()
|
|
|
39
39
|
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
40
40
|
arg = 0 < items.length
|
|
41
41
|
? `{ ${items.map((it: any) =>
|
|
42
|
-
`${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
|
|
42
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name,
|
|
43
43
|
it.name === idF ? 'test01' : 'example_' + it.name)}`).join(', ')} }`
|
|
44
44
|
: ''
|
|
45
45
|
} else if ('create' === primaryOp || 'update' === primaryOp) {
|
|
@@ -48,7 +48,7 @@ const client = ${model.const.Name}SDK.test()
|
|
|
48
48
|
const required = items.filter((it: any) => !it.optional)
|
|
49
49
|
const chosen = required.length ? required : items.slice(0, 3)
|
|
50
50
|
arg = `{ ${chosen.map((it: any) =>
|
|
51
|
-
`${it.name}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`).join(', ')} }`
|
|
51
|
+
`${jsKey(it.name)}: ${exampleValue(exampleEntity, primaryOpDef, it.name, 'example_' + it.name)}`).join(', ')} }`
|
|
52
52
|
}
|
|
53
53
|
Content(`const ${eVar} = await client.${eName}().${primaryOp}(${arg})
|
|
54
54
|
// ${eVar} is ${'list' === primaryOp ? 'an array of bare entities' : 'a bare entity'} populated with mock data
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
cmp,
|
|
18
18
|
snakify,
|
|
19
19
|
isAuthActive,
|
|
20
|
+
jsProp,
|
|
20
21
|
} from '@voxgig/sdkgen'
|
|
21
22
|
|
|
22
23
|
|
|
@@ -47,7 +48,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
47
48
|
apikey: env.${PROJECTNAME}_APIKEY,`
|
|
48
49
|
: ''
|
|
49
50
|
|
|
50
|
-
const opnames = Object.keys(entity.op)
|
|
51
|
+
const opnames = Object.keys(entity.op || {})
|
|
51
52
|
const hasLoad = opnames.includes('load')
|
|
52
53
|
const hasList = opnames.includes('list')
|
|
53
54
|
|
|
@@ -133,7 +134,7 @@ function directSetup(mockres) {
|
|
|
133
134
|
|
|
134
135
|
|
|
135
136
|
function generateDirectLoad(model: Model, entity: ModelEntity) {
|
|
136
|
-
const loadOp = entity.op
|
|
137
|
+
const loadOp = entity.op?.load
|
|
137
138
|
const loadPoint: ModelPoint | undefined = loadOp?.points?.[0]
|
|
138
139
|
|
|
139
140
|
if (null == loadPoint) {
|
|
@@ -144,7 +145,7 @@ function generateDirectLoad(model: Model, entity: ModelEntity) {
|
|
|
144
145
|
const loadPath = normalizePathParams(loadPoint.parts || [], loadParams, loadPoint.rename?.param)
|
|
145
146
|
|
|
146
147
|
// Get list info for live mode bootstrapping
|
|
147
|
-
const listOp = entity.op
|
|
148
|
+
const listOp = entity.op?.list
|
|
148
149
|
const listPoint = listOp?.points?.[0]
|
|
149
150
|
const listParams = listPoint?.args?.params || []
|
|
150
151
|
const listPath = listPoint ? normalizePathParams(listPoint.parts || [], listParams, listPoint.rename?.param) : ''
|
|
@@ -175,7 +176,7 @@ function generateDirectLoad(model: Model, entity: ModelEntity) {
|
|
|
175
176
|
const listParamLines = liveListParams.map((lp: any) =>
|
|
176
177
|
` ${lp.name}: setup.idmap['${lp.key}'],`).join('\n')
|
|
177
178
|
const ancestorParamLines = liveAncestorParams.map((lp: any) =>
|
|
178
|
-
` params
|
|
179
|
+
` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n')
|
|
179
180
|
|
|
180
181
|
liveParamsBlock = ` if (setup.live) {
|
|
181
182
|
const listResult = await client.direct({
|
|
@@ -193,11 +194,11 @@ ${listParamLines}
|
|
|
193
194
|
params.id = listData[0].id
|
|
194
195
|
${ancestorParamLines}
|
|
195
196
|
} else {
|
|
196
|
-
${loadParams.map((p: any, i: number) => ` params
|
|
197
|
+
${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
|
|
197
198
|
}`
|
|
198
199
|
} else {
|
|
199
200
|
liveParamsBlock = ` if (!setup.live) {
|
|
200
|
-
${loadParams.map((p: any, i: number) => ` params
|
|
201
|
+
${loadParams.map((p: any, i: number) => ` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')}
|
|
201
202
|
}`
|
|
202
203
|
}
|
|
203
204
|
|
|
@@ -230,7 +231,7 @@ ${paramAsserts} }
|
|
|
230
231
|
|
|
231
232
|
|
|
232
233
|
function generateDirectList(model: Model, entity: ModelEntity) {
|
|
233
|
-
const listOp = entity.op
|
|
234
|
+
const listOp = entity.op?.list
|
|
234
235
|
const listPoint: ModelPoint | undefined = listOp?.points?.[0]
|
|
235
236
|
|
|
236
237
|
if (null == listPoint) {
|
|
@@ -254,9 +255,9 @@ function generateDirectList(model: Model, entity: ModelEntity) {
|
|
|
254
255
|
let paramsBlock = ''
|
|
255
256
|
if (listParams.length > 0) {
|
|
256
257
|
const liveLines = liveParams.map((lp: any) =>
|
|
257
|
-
` params
|
|
258
|
+
` ${jsProp('params', lp.name)} = setup.idmap['${lp.key}']`).join('\n')
|
|
258
259
|
const mockLines = listParams.map((p: any, i: number) =>
|
|
259
|
-
` params
|
|
260
|
+
` ${jsProp('params', p.name)} = 'direct0${i + 1}'`).join('\n')
|
|
260
261
|
|
|
261
262
|
paramsBlock = ` const params = {}
|
|
262
263
|
if (setup.live) {
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
cmp,
|
|
31
31
|
each,
|
|
32
32
|
isAuthActive,
|
|
33
|
+
entityDataIdField,
|
|
33
34
|
} from '@voxgig/sdkgen'
|
|
34
35
|
|
|
35
36
|
|
|
@@ -270,6 +271,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
|
|
|
270
271
|
|
|
271
272
|
const generateList: OpGen = (ctx, step, index) => {
|
|
272
273
|
const { entity, flow } = ctx
|
|
274
|
+
const hasDataId = null != entityDataIdField(entity)
|
|
273
275
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
274
276
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
275
277
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -304,12 +306,12 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
304
306
|
const hasRefData = validRef && allSteps.some(s => 'create' === s.op &&
|
|
305
307
|
((s.input.ref ?? entity.name + '_ref01') === validRef))
|
|
306
308
|
|
|
307
|
-
if ('ItemExists' === validator.apply && hasRefData) {
|
|
309
|
+
if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
|
|
308
310
|
Content(`
|
|
309
311
|
assert(!isempty(select(${listvar}, { id: ${validRef}_data.id })))
|
|
310
312
|
`)
|
|
311
313
|
}
|
|
312
|
-
else if ('ItemNotExists' === validator.apply && hasRefData) {
|
|
314
|
+
else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
|
|
313
315
|
Content(`
|
|
314
316
|
assert(isempty(select(${listvar}, { id: ${validRef}_data.id })))
|
|
315
317
|
`)
|
|
@@ -448,6 +450,9 @@ const generateLoad: OpGen = (ctx, step, index) => {
|
|
|
448
450
|
|
|
449
451
|
const generateRemove: OpGen = (ctx, step, index) => {
|
|
450
452
|
const { entity, flow } = ctx
|
|
453
|
+
if (null == entityDataIdField(entity)) {
|
|
454
|
+
return
|
|
455
|
+
}
|
|
451
456
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
452
457
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
453
458
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -30,37 +30,6 @@ describe('EntityNameEntity', async () => {
|
|
|
30
30
|
})
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
// Feature #4: the entity `stream(action, ...)` method runs the op pipeline
|
|
34
|
-
// and returns an async iterator over result items. With the streaming
|
|
35
|
-
// feature active it yields the feature's incremental output; otherwise it
|
|
36
|
-
// falls back to the materialised list so `stream` always yields.
|
|
37
|
-
test('stream', async () => {
|
|
38
|
-
const seed = {
|
|
39
|
-
entity: {
|
|
40
|
-
EntityLower: { s1: { id: 's1' }, s2: { id: 's2' }, s3: { id: 's3' } }
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Fallback: streaming inactive -> yields the materialised list items.
|
|
45
|
-
const base = ProjectNameSDK.test(seed)
|
|
46
|
-
const seen = []
|
|
47
|
-
for await (const item of base.EntityName().stream('list')) {
|
|
48
|
-
seen.push(item)
|
|
49
|
-
}
|
|
50
|
-
assert.equal(seen.length, 3)
|
|
51
|
-
|
|
52
|
-
// Inbound: streaming active -> yields each item from the feature iterator.
|
|
53
|
-
if (config.feature && config.feature.streaming) {
|
|
54
|
-
const sdk = ProjectNameSDK.test(seed, { feature: { streaming: { active: true } } })
|
|
55
|
-
const got = []
|
|
56
|
-
for await (const item of sdk.EntityName().stream('list')) {
|
|
57
|
-
if (Array.isArray(item)) { got.push(...item) } else { got.push(item) }
|
|
58
|
-
}
|
|
59
|
-
assert.equal(got.length, 3)
|
|
60
|
-
}
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
|
|
64
33
|
test('basic', async () => {
|
|
65
34
|
// <[SLOT:basic]>
|
|
66
35
|
})
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
|
|
2
|
+
// Typed-model generator (Kotlin target). Port of EntityTypes_java.ts /
|
|
3
|
+
// EntityTypes_py.ts.
|
|
4
|
+
//
|
|
5
|
+
// Reads main.<KIT>.entity.<e>.fields[] and per-op params
|
|
6
|
+
// (op.<name>.points[].args.params[]) and emits ONE file, core/<Name>Types.kt,
|
|
7
|
+
// holding a container `object <Name>Types` with a nested `data class` per
|
|
8
|
+
// active entity plus a request/match type per active op.
|
|
9
|
+
//
|
|
10
|
+
// WHY A CONTAINER OBJECT: parity with the java/csharp emitters — every
|
|
11
|
+
// generated reference type lives inside a single `object <Name>Types`, so the
|
|
12
|
+
// whole reference model is in one file (<Name>Types.kt) whatever the entity
|
|
13
|
+
// count. Kotlin has no one-public-type-per-file rule, but the single-file
|
|
14
|
+
// convention is kept for cross-language consistency.
|
|
15
|
+
//
|
|
16
|
+
// TYPE CHOICE: reference types with BOXED (nullable) component types, NOT the
|
|
17
|
+
// wired runtime type. The generated ops take/return the loose object model
|
|
18
|
+
// (MutableMap<String, Any?> / Any?), so these types are NOT wired into the op
|
|
19
|
+
// signatures — they are documentation/DX reference shapes a caller may use to
|
|
20
|
+
// describe a payload before converting it to a map. This mirrors the JS
|
|
21
|
+
// target's JSDoc typedefs (annotation only, no runtime effect). Emitting unused
|
|
22
|
+
// types is harmless — they compile and have no runtime effect.
|
|
23
|
+
//
|
|
24
|
+
// OPTIONAL FIELDS: every component is a nullable reference type, so a
|
|
25
|
+
// `req:false` field/param needs no distinct rendering in Kotlin.
|
|
26
|
+
//
|
|
27
|
+
// EMPTY SHAPES: Kotlin forbids a `data class` with zero components, so an
|
|
28
|
+
// empty shape is emitted as a plain marker `class <Name>` instead.
|
|
29
|
+
//
|
|
30
|
+
// Sentinels map to Kotlin types via the SHARED canonToType 'kotlin' column
|
|
31
|
+
// (the single source of truth per language — do not keep a local table here).
|
|
32
|
+
//
|
|
33
|
+
// Keep the SAME type-name scheme as every other language: <Name>,
|
|
34
|
+
// <Name>LoadMatch, <Name>ListMatch, <Name>CreateData, <Name>UpdateData,
|
|
35
|
+
// <Name>RemoveMatch (via the shared opTypeName helper).
|
|
36
|
+
|
|
37
|
+
import {
|
|
38
|
+
cmp, each, names,
|
|
39
|
+
File, Content,
|
|
40
|
+
} from '@voxgig/sdkgen'
|
|
41
|
+
|
|
42
|
+
import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions , deriveEntityNames } from '@voxgig/sdkgen'
|
|
43
|
+
|
|
44
|
+
import {
|
|
45
|
+
KIT,
|
|
46
|
+
getModelPath,
|
|
47
|
+
} from '@voxgig/apidef'
|
|
48
|
+
|
|
49
|
+
import { kotlinPackage } from './utility_kotlin'
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
// Kotlin hard keywords that cannot be a (non-escaped) property name.
|
|
53
|
+
const KOTLIN_KEYWORDS = new Set<string>([
|
|
54
|
+
'as', 'break', 'class', 'continue', 'do', 'else', 'false', 'for', 'fun',
|
|
55
|
+
'if', 'in', 'interface', 'is', 'null', 'object', 'package', 'return',
|
|
56
|
+
'super', 'this', 'throw', 'true', 'try', 'typealias', 'typeof', 'val',
|
|
57
|
+
'var', 'when', 'while',
|
|
58
|
+
])
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
// A field/param name that has a safe Kotlin identifier rendering. Names that
|
|
62
|
+
// are not valid identifiers (hyphens, leading digits) have no clean component
|
|
63
|
+
// form and are skipped — they remain reachable via the runtime map.
|
|
64
|
+
function kotlinIdent(name: string): boolean {
|
|
65
|
+
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name) && !KOTLIN_KEYWORDS.has(name)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
const LANG = 'kotlin'
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
// Emit a nested `data class <typeName>(...)` from {name, type} items. An item
|
|
73
|
+
// whose name is not a legal identifier is skipped (WITH a warning — the key
|
|
74
|
+
// stays reachable via the runtime map, but its absence from the typed model
|
|
75
|
+
// should be visible, not silent); a duplicate component name (after the
|
|
76
|
+
// identifier filter) is dropped. An empty shape becomes a plain marker
|
|
77
|
+
// `class <typeName>` (Kotlin forbids a zero-component data class).
|
|
78
|
+
function emitRecord(typeName: string, items: any[], log?: any): void {
|
|
79
|
+
const seen = new Set<string>()
|
|
80
|
+
const usable = items.filter((it: any) => {
|
|
81
|
+
if (!it || null == it.name) {
|
|
82
|
+
return false
|
|
83
|
+
}
|
|
84
|
+
if (!kotlinIdent(it.name)) {
|
|
85
|
+
if (log && log.warn) {
|
|
86
|
+
log.warn({
|
|
87
|
+
point: 'entity-types-skip-field', typeName, field: it.name,
|
|
88
|
+
note: `kotlin: field "${it.name}" of ${typeName} has no legal ` +
|
|
89
|
+
`Kotlin identifier form; omitted from the typed model (still ` +
|
|
90
|
+
`reachable via the runtime map)`,
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
return false
|
|
94
|
+
}
|
|
95
|
+
if (seen.has(it.name)) {
|
|
96
|
+
return false
|
|
97
|
+
}
|
|
98
|
+
seen.add(it.name)
|
|
99
|
+
return true
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
if (0 === usable.length) {
|
|
103
|
+
Content(` class ${typeName}
|
|
104
|
+
|
|
105
|
+
`)
|
|
106
|
+
return
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const params = usable
|
|
110
|
+
.map((it: any) => `val ${it.name}: ${canonToType(it.type, LANG)}`)
|
|
111
|
+
.join(', ')
|
|
112
|
+
Content(` data class ${typeName}(${params})
|
|
113
|
+
|
|
114
|
+
`)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
119
|
+
const { model, log } = props.ctx$
|
|
120
|
+
const target = props.target || {}
|
|
121
|
+
const ext = target.ext || 'kt'
|
|
122
|
+
|
|
123
|
+
const kotlinpackage = props.kotlinpackage || kotlinPackage(model)
|
|
124
|
+
|
|
125
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
126
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
127
|
+
// collection, so inactive entities still get generated entity code that
|
|
128
|
+
// references these typed names. The typed model must cover them too.
|
|
129
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
130
|
+
// Emit for EVERY entity that gets generated entity code: the consumer
|
|
131
|
+
// scaffold (create-sdkgen Root.ts) iterates entities WITHOUT an active
|
|
132
|
+
// filter, so inactive entities still get class files referencing these
|
|
133
|
+
// typed names. Filter on `name` (always present), NOT `active` — parity
|
|
134
|
+
// with the go emitter's fix.
|
|
135
|
+
const entityList = deriveEntityNames(entity)
|
|
136
|
+
// Derive the PascalCase Name up-front — it is set LAZILY by names(), so an
|
|
137
|
+
// entity not yet named (e.g. a fieldless placeholder) would otherwise read
|
|
138
|
+
// `Name = undefined` below. Parity with the go/py/csharp/java emitter's fix.
|
|
139
|
+
|
|
140
|
+
// Surface duplicate generated type names (two entities with the same
|
|
141
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
142
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
143
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
144
|
+
|
|
145
|
+
File({ name: model.const.Name + 'Types.' + ext }, () => {
|
|
146
|
+
|
|
147
|
+
Content(`package ${kotlinpackage}.core
|
|
148
|
+
|
|
149
|
+
// Typed reference models for the ${model.const.Name} SDK.
|
|
150
|
+
//
|
|
151
|
+
// GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
|
|
152
|
+
// params (op.<name>.points[].args.params[]). Field/param types come from the
|
|
153
|
+
// canonical type sentinels (source of truth: @voxgig/apidef VALID_CANON). Do
|
|
154
|
+
// not edit by hand.
|
|
155
|
+
//
|
|
156
|
+
// These types are documentation/DX reference shapes ONLY. The SDK ops take and
|
|
157
|
+
// return the loose object model (MutableMap<String, Any?> / Any?) at runtime,
|
|
158
|
+
// so these types are not wired into the op signatures — use them to describe a
|
|
159
|
+
// payload before converting it to a map. Every component is a nullable type, so
|
|
160
|
+
// an optional (req:false) key needs no distinct rendering.
|
|
161
|
+
|
|
162
|
+
@Suppress("unused")
|
|
163
|
+
object ${model.const.Name}Types {
|
|
164
|
+
|
|
165
|
+
`)
|
|
166
|
+
|
|
167
|
+
entityList.forEach((ent: any) => {
|
|
168
|
+
const Name = ent.Name
|
|
169
|
+
const fields = (ent.fields ? each(ent.fields) : [])
|
|
170
|
+
.filter((f: any) => f.active !== false)
|
|
171
|
+
|
|
172
|
+
// Entity data model: one component per field.
|
|
173
|
+
emitRecord(Name, fields.map((f: any) => ({
|
|
174
|
+
name: f.name, type: f.type,
|
|
175
|
+
})), log)
|
|
176
|
+
|
|
177
|
+
// Per active op: a request/match type. Members come from the shared
|
|
178
|
+
// partiality policy (opRequestShape).
|
|
179
|
+
const ops = ent.op || {}
|
|
180
|
+
;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
|
|
181
|
+
if (null == ops[opname]) {
|
|
182
|
+
return
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const typeName = opTypeName(Name, opname)
|
|
186
|
+
const { items } = opRequestShape(ent, opname)
|
|
187
|
+
|
|
188
|
+
emitRecord(typeName, items, log)
|
|
189
|
+
})
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
Content(`}
|
|
193
|
+
`)
|
|
194
|
+
})
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
export {
|
|
199
|
+
EntityTypes,
|
|
200
|
+
}
|