@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, camelify, names,
|
|
6
6
|
File, Content, Folder, Fragment,
|
|
7
|
-
entityClassName,
|
|
7
|
+
entityClassName, entityCollection,
|
|
8
8
|
} from '@voxgig/sdkgen'
|
|
9
9
|
|
|
10
10
|
import {
|
|
@@ -25,7 +25,7 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
25
25
|
// Collision-free entity CLASS name (see entityClassName): normally
|
|
26
26
|
// `<Name>Entity`, but disambiguated (e.g. `<Name>EntityClient`) when it
|
|
27
27
|
// would clash with another entity's data-type name.
|
|
28
|
-
const entityColl =
|
|
28
|
+
const entityColl = entityCollection(model)
|
|
29
29
|
const cls = entityClassName(entity, entityColl)
|
|
30
30
|
|
|
31
31
|
const entrep = {
|
|
@@ -41,7 +41,7 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
41
41
|
|
|
42
42
|
File({ name: cls + '.' + target.ext }, () => {
|
|
43
43
|
|
|
44
|
-
const opnames = Object.keys(entity.op)
|
|
44
|
+
const opnames = Object.keys(entity.op || {})
|
|
45
45
|
|
|
46
46
|
// For each CRUD op: if the spec defines it, splice in the real
|
|
47
47
|
// implementation. Otherwise emit a stub that satisfies the SdkEntity
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content, entityClassName } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, entityClassName, entityCollection } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -17,7 +17,7 @@ const MainEntity = cmp(async function MainEntity(props: any) {
|
|
|
17
17
|
const { model } = props.ctx$
|
|
18
18
|
|
|
19
19
|
const kotlinpackage = kotlinPackage(model)
|
|
20
|
-
const entityColl =
|
|
20
|
+
const entityColl = entityCollection(model)
|
|
21
21
|
const cls = entityClassName(entity, entityColl)
|
|
22
22
|
const accessor = kotlinVarName(entity.name)
|
|
23
23
|
|
|
@@ -23,6 +23,7 @@ import { Config } from './Config_kotlin'
|
|
|
23
23
|
import { Gitignore } from './Gitignore_kotlin'
|
|
24
24
|
import { MainEntity } from './MainEntity_kotlin'
|
|
25
25
|
import { EntityBase } from './EntityBase_kotlin'
|
|
26
|
+
import { EntityTypes } from './EntityTypes_kotlin'
|
|
26
27
|
import { SdkError } from './SdkError_kotlin'
|
|
27
28
|
import { kotlinPackage } from './utility_kotlin'
|
|
28
29
|
|
|
@@ -84,6 +85,11 @@ const Main = cmp(async function Main(props: any) {
|
|
|
84
85
|
})
|
|
85
86
|
|
|
86
87
|
Config({ target })
|
|
88
|
+
|
|
89
|
+
// Generate the typed reference-model file (<Name>Types.kt) beside the
|
|
90
|
+
// other generated core files. Documentation/DX shapes only — not wired
|
|
91
|
+
// into the loose-object-model op signatures.
|
|
92
|
+
EntityTypes({ target, kotlinpackage })
|
|
87
93
|
})
|
|
88
94
|
|
|
89
95
|
})
|
|
@@ -30,7 +30,7 @@ const Package = cmp(async function Package(props: any) {
|
|
|
30
30
|
|
|
31
31
|
// Dep name convention: "group:artifact" with an explicit version.
|
|
32
32
|
const deps: { group: string, artifact: string, version: string, kind: string }[] = []
|
|
33
|
-
for (const d of collectDeps(model, target.name, target.deps)) {
|
|
33
|
+
for (const d of collectDeps(model, target.name, target.deps, ctx$.log)) {
|
|
34
34
|
const [dgroup, dartifact] = String(d.name).split(':')
|
|
35
35
|
if (dgroup && dartifact && d.version) {
|
|
36
36
|
deps.push({
|
|
@@ -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 { kotlinVarName } from './utility_kotlin'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// Type names come from the shared canonToType 'kotlin' column (single source of truth).
|
|
13
|
+
|
|
14
|
+
// A type-correct Kotlin literal for a field's canonical type.
|
|
15
|
+
function kotlinLit(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 'listOf<Any?>()'
|
|
21
|
+
if ('OBJECT' === k) return 'mapOf<String, Any?>()'
|
|
22
|
+
return `"${placeholder}"`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
// Operation method spelling for Kotlin: camelCase methods over the loose
|
|
27
|
+
// object 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 Kotlin keyword gets a
|
|
62
|
+
// trailing underscore (kotlinVarName) so the snippet compiles.
|
|
63
|
+
const eVar = kotlinVarName(entity.name)
|
|
64
|
+
const accessor = kotlinVarName(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
|
+
? `mutableMapOf<String, Any?>(${loadItems.map((it: any) =>
|
|
126
|
+
`"${it.name}" to ${kotlinLit(it.type,
|
|
127
|
+
it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')})`
|
|
128
|
+
: 'null'
|
|
129
|
+
Content(`#### Example: Load
|
|
130
|
+
|
|
131
|
+
\`\`\`kotlin
|
|
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
|
+
\`\`\`kotlin
|
|
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
|
+
\`\`\`kotlin
|
|
157
|
+
val ${eVar} = client.${accessor}(null).create(mutableMapOf<String, Any?>(
|
|
158
|
+
`)
|
|
159
|
+
createItems.map((it: any, i: number) => {
|
|
160
|
+
const comma = i < createItems.length - 1 ? ',' : ''
|
|
161
|
+
Content(` "${it.name}" to ${kotlinLit(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
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, File, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import { kotlinPackage } from './utility_kotlin'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
// Emits test/ReadmeExamplesTest.kt — a JUnit PRESENCE + STRUCTURE gate over
|
|
8
|
+
// every ```kotlin fenced block in the repository ROOT README.md, the
|
|
9
|
+
// per-language kotlin/README.md, AND the per-language kotlin/REFERENCE.md.
|
|
10
|
+
//
|
|
11
|
+
// SCOPE NOTE (deliberate, documented): the Python/TS/Go equivalents EXECUTE and
|
|
12
|
+
// type-check every documented block. That is infeasible here — the generated
|
|
13
|
+
// Kotlin SDK compiles with Gradle/kotlinc only (no in-process Kotlin compiler
|
|
14
|
+
// dependency wired into the test classpath), so a test cannot compile-and-run
|
|
15
|
+
// arbitrary doc snippets at test time. This gate therefore guarantees the
|
|
16
|
+
// weaker-but-real invariant that keeps the docs honest as the generator evolves:
|
|
17
|
+
// 1. every doc exists and contains at least one ```kotlin block (nothing was
|
|
18
|
+
// dropped);
|
|
19
|
+
// 2. every ```kotlin block is structurally well-formed — its braces,
|
|
20
|
+
// parentheses and brackets balance (catches a truncated or malformed
|
|
21
|
+
// generated snippet).
|
|
22
|
+
// A per-doc summary line makes the coverage visible in the test output.
|
|
23
|
+
//
|
|
24
|
+
// The emitted Kotlin is written WITHOUT literal backticks (the fence marker is
|
|
25
|
+
// built at runtime as 96.toChar().toString().repeat(3)) so this TS template
|
|
26
|
+
// literal stays clean.
|
|
27
|
+
const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
|
|
28
|
+
const { target, ctx$: { model } } = props
|
|
29
|
+
|
|
30
|
+
const Name = model.const.Name
|
|
31
|
+
const kotlinpackage = props.kotlinpackage || kotlinPackage(model)
|
|
32
|
+
|
|
33
|
+
File({ name: 'ReadmeExamplesTest.' + target.ext }, () => {
|
|
34
|
+
Content(`package ${kotlinpackage}.sdktest
|
|
35
|
+
|
|
36
|
+
// ${Name} SDK — documentation kotlin-examples PRESENCE + STRUCTURE gate.
|
|
37
|
+
//
|
|
38
|
+
// GUARANTEE (see ReadmeExamplesTest_kotlin.ts for why this is a structure gate
|
|
39
|
+
// and not an execute gate): every kotlin example in the docs is accounted for.
|
|
40
|
+
// This JUnit class is a completeness gate over every ${'```'}kotlin fenced code
|
|
41
|
+
// block in three documents:
|
|
42
|
+
// - the repository ROOT README.md (one directory above this module),
|
|
43
|
+
// - the per-language kotlin/README.md,
|
|
44
|
+
// - the per-language kotlin/REFERENCE.md.
|
|
45
|
+
//
|
|
46
|
+
// Checks, PER DOCUMENT:
|
|
47
|
+
// 1. PRESENCE: the doc exists and holds at least one kotlin block.
|
|
48
|
+
// 2. STRUCTURE: every kotlin block's braces / parens / brackets balance, so a
|
|
49
|
+
// truncated or malformed generated snippet fails loudly. Every code fence
|
|
50
|
+
// is also terminated (even fence count), so an unclosed fence at EOF is
|
|
51
|
+
// caught rather than accepted as a complete block.
|
|
52
|
+
//
|
|
53
|
+
// GENERATED by @voxgig/sdkgen — do not edit by hand.
|
|
54
|
+
|
|
55
|
+
import org.junit.jupiter.api.Assertions.assertTrue
|
|
56
|
+
import org.junit.jupiter.api.Test
|
|
57
|
+
|
|
58
|
+
import java.io.File
|
|
59
|
+
import java.nio.file.Files
|
|
60
|
+
import java.nio.file.Path
|
|
61
|
+
import java.nio.file.Paths
|
|
62
|
+
|
|
63
|
+
class ReadmeExamplesTest {
|
|
64
|
+
|
|
65
|
+
// The three documents to scan, resolved relative to the Gradle module
|
|
66
|
+
// directory (the working directory when the test task runs). Each row is
|
|
67
|
+
// {label, relative path}.
|
|
68
|
+
private fun docs(): Array<Array<String>> {
|
|
69
|
+
return arrayOf(
|
|
70
|
+
arrayOf("root README", ".." + File.separator + "README.md"),
|
|
71
|
+
arrayOf("kotlin README.md", "README.md"),
|
|
72
|
+
arrayOf("kotlin REFERENCE.md", "REFERENCE.md"),
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Extract every kotlin fenced block. Split on the triple-backtick fence:
|
|
77
|
+
// odd-indexed segments are the inside of a fenced block (info string on the
|
|
78
|
+
// first line, then the code). Only blocks whose info string is exactly
|
|
79
|
+
// "kotlin" are returned.
|
|
80
|
+
private fun kotlinBlocks(text: String): List<String> {
|
|
81
|
+
val fence = 96.toChar().toString().repeat(3)
|
|
82
|
+
val parts = text.split(fence)
|
|
83
|
+
val blocks = mutableListOf<String>()
|
|
84
|
+
var i = 1
|
|
85
|
+
while (i < parts.size) {
|
|
86
|
+
val seg = parts[i]
|
|
87
|
+
val nl = seg.indexOf('\\n')
|
|
88
|
+
val info = (if (nl < 0) seg else seg.substring(0, nl)).trim()
|
|
89
|
+
if (info == "kotlin") {
|
|
90
|
+
blocks.add(if (nl < 0) "" else seg.substring(nl + 1))
|
|
91
|
+
}
|
|
92
|
+
i += 2
|
|
93
|
+
}
|
|
94
|
+
return blocks
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
private fun readDoc(path: Path, label: String): String {
|
|
98
|
+
assertTrue(Files.exists(path), label + " not found: " + path)
|
|
99
|
+
return Files.readString(path)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Count triple-backtick fence markers. A well-formed document opens and
|
|
103
|
+
// closes every fenced block, so the total must be EVEN. An odd count means a
|
|
104
|
+
// fence was opened but never closed (a truncated / malformed doc) — the
|
|
105
|
+
// split-based extraction in kotlinBlocks() would otherwise accept the
|
|
106
|
+
// unterminated trailing segment as a complete block and pass silently.
|
|
107
|
+
private fun fenceCount(text: String): Int {
|
|
108
|
+
val fence = 96.toChar().toString().repeat(3)
|
|
109
|
+
var count = 0
|
|
110
|
+
var idx = text.indexOf(fence)
|
|
111
|
+
while (idx >= 0) {
|
|
112
|
+
count++
|
|
113
|
+
idx = text.indexOf(fence, idx + fence.length)
|
|
114
|
+
}
|
|
115
|
+
return count
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// True when every open/close delimiter balances (ignores the subtlety of
|
|
119
|
+
// delimiters inside string literals — a generated snippet never nests an
|
|
120
|
+
// unbalanced delimiter in a string, and this catches truncation).
|
|
121
|
+
private fun balanced(block: String): Boolean {
|
|
122
|
+
val stack = ArrayDeque<Char>()
|
|
123
|
+
val pairs = mapOf('(' to ')', '[' to ']', '{' to '}')
|
|
124
|
+
for (ch in block) {
|
|
125
|
+
if (pairs.containsKey(ch)) {
|
|
126
|
+
stack.addLast(pairs[ch]!!)
|
|
127
|
+
}
|
|
128
|
+
else if (ch == ')' || ch == ']' || ch == '}') {
|
|
129
|
+
if (stack.isEmpty() || stack.removeLast() != ch) {
|
|
130
|
+
return false
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return stack.isEmpty()
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@Test
|
|
138
|
+
fun rootReadmeHasKotlinBlocks() {
|
|
139
|
+
val doc = docs()[0]
|
|
140
|
+
val blocks = kotlinBlocks(readDoc(Paths.get(doc[1]), doc[0]))
|
|
141
|
+
assertTrue(blocks.size > 0, "expected at least one kotlin block in " + doc[0])
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
@Test
|
|
145
|
+
fun localReadmeHasKotlinBlocks() {
|
|
146
|
+
val doc = docs()[1]
|
|
147
|
+
val blocks = kotlinBlocks(readDoc(Paths.get(doc[1]), doc[0]))
|
|
148
|
+
assertTrue(blocks.size > 0, "expected at least one kotlin block in " + doc[0])
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@Test
|
|
152
|
+
fun referenceHasKotlinBlocks() {
|
|
153
|
+
val doc = docs()[2]
|
|
154
|
+
val blocks = kotlinBlocks(readDoc(Paths.get(doc[1]), doc[0]))
|
|
155
|
+
assertTrue(blocks.size > 0, "expected at least one kotlin block in " + doc[0])
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@Test
|
|
159
|
+
fun allKotlinBlocksAreStructurallyBalanced() {
|
|
160
|
+
val failures = mutableListOf<String>()
|
|
161
|
+
for (doc in docs()) {
|
|
162
|
+
val path = Paths.get(doc[1])
|
|
163
|
+
if (!Files.exists(path)) {
|
|
164
|
+
continue
|
|
165
|
+
}
|
|
166
|
+
val src = readDoc(path, doc[0])
|
|
167
|
+
// A fence opened but never closed is a malformed doc — fail loudly
|
|
168
|
+
// rather than silently accepting the unterminated trailing segment as a
|
|
169
|
+
// complete block.
|
|
170
|
+
if (fenceCount(src) % 2 != 0) {
|
|
171
|
+
failures.add(doc[0] + " has an unterminated code fence")
|
|
172
|
+
}
|
|
173
|
+
val blocks = kotlinBlocks(src)
|
|
174
|
+
var balancedCount = 0
|
|
175
|
+
for (i in blocks.indices) {
|
|
176
|
+
if (balanced(blocks[i])) {
|
|
177
|
+
balancedCount++
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
failures.add(doc[0] + " kotlin block #" + i +
|
|
181
|
+
" has unbalanced delimiters:\\n\\n" + blocks[i])
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
println(
|
|
185
|
+
"[readme-examples] " + doc[0] + " kotlin blocks: total=" +
|
|
186
|
+
blocks.size + " balanced=" + balancedCount)
|
|
187
|
+
}
|
|
188
|
+
assertTrue(failures.isEmpty(), failures.joinToString("\\n\\n"))
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
`)
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
export {
|
|
197
|
+
ReadmeExamplesTest
|
|
198
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import { kotlinPackage } from './utility_kotlin'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
|
|
8
|
+
const { target, ctx$: { model } } = props
|
|
9
|
+
|
|
10
|
+
const pkg = kotlinPackage(model)
|
|
11
|
+
|
|
12
|
+
Content(`### Data as maps
|
|
13
|
+
|
|
14
|
+
The Kotlin SDK uses a loose object model — \`MutableMap<String, Any?>\`
|
|
15
|
+
throughout — rather than a bespoke typed class per endpoint. This mirrors the
|
|
16
|
+
dynamic nature of the API and keeps the SDK flexible: no regeneration is
|
|
17
|
+
needed when the API schema changes.
|
|
18
|
+
|
|
19
|
+
Use \`Helpers.toMapAny(value)\` to safely coerce a value to a
|
|
20
|
+
\`MutableMap<String, Any?>\`. A \`${model.const.Name}Types.kt\` module of
|
|
21
|
+
reference \`data class\` types is also generated for editor documentation.
|
|
22
|
+
|
|
23
|
+
### Project structure
|
|
24
|
+
|
|
25
|
+
\`\`\`
|
|
26
|
+
kotlin/
|
|
27
|
+
├── build.gradle.kts -- Gradle build (compiles core/, utility/, feature/, entity/)
|
|
28
|
+
├── settings.gradle.kts -- Gradle project settings
|
|
29
|
+
├── core/ -- Main SDK client, config, entity base, error type
|
|
30
|
+
├── entity/ -- Entity implementations
|
|
31
|
+
├── feature/ -- Built-in features (Base, Test, Log, ...)
|
|
32
|
+
├── utility/ -- Utility functions and the vendored struct library
|
|
33
|
+
└── test/ -- JUnit test suites
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
The main client class (\`${model.const.Name}SDK\`, package \`${pkg}.core\`)
|
|
37
|
+
exposes the entity accessors. Reference entity or utility types directly only
|
|
38
|
+
when needed.
|
|
39
|
+
|
|
40
|
+
`)
|
|
41
|
+
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
ReadmeExplanation
|
|
47
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { kotlinVarName } from './utility_kotlin'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct Kotlin literal for a field's canonical type.
|
|
13
|
+
function kotlinLit(type: any): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k) return '1L'
|
|
16
|
+
if ('NUMBER' === k) return '1.0'
|
|
17
|
+
if ('BOOLEAN' === k) return 'true'
|
|
18
|
+
if ('ARRAY' === k) return 'listOf<Any?>()'
|
|
19
|
+
if ('OBJECT' === k) return 'mapOf<String, Any?>()'
|
|
20
|
+
return '"example"'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
25
|
+
const { target, ctx$: { model } } = props
|
|
26
|
+
|
|
27
|
+
const SDK = model.const.Name + 'SDK'
|
|
28
|
+
|
|
29
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
30
|
+
// Pick an entity with a real op (prefer a read op). primaryOp is null only
|
|
31
|
+
// when NO entity exposes any op (a direct()-only SDK).
|
|
32
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
33
|
+
const eVar = exampleEntity ? kotlinVarName(exampleEntity.name) : 'entity'
|
|
34
|
+
const accessor = exampleEntity ? kotlinVarName(exampleEntity.name) : 'entity'
|
|
35
|
+
// Model-driven id key: null when the entity has no id-like field, so a
|
|
36
|
+
// match op takes an empty match.
|
|
37
|
+
const idF = exampleEntity ? entityIdField(exampleEntity) : null
|
|
38
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
39
|
+
let testArg = 'null'
|
|
40
|
+
if (exampleEntity && isMatchOp) {
|
|
41
|
+
testArg = idF ? `mutableMapOf<String, Any?>("${idF}" to "test01")` : 'null'
|
|
42
|
+
} else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
|
|
43
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
44
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
45
|
+
const required = items.filter((it: any) => !it.optional)
|
|
46
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
47
|
+
testArg = `mutableMapOf<String, Any?>(${chosen.map((it: any) =>
|
|
48
|
+
`"${it.name}" to ${kotlinLit(it.type)}`).join(', ')})`
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// The op-driven test-mode line, shown only when the SDK has an entity op.
|
|
52
|
+
// A direct()-only SDK (no ops anywhere) shows a direct() call instead.
|
|
53
|
+
const testModeExample = primaryOp
|
|
54
|
+
? `// Entity ops return the bare record and raise on error.
|
|
55
|
+
val ${eVar} = client.${accessor}(null).${primaryOp}(${testArg}, null)
|
|
56
|
+
// ${eVar} holds the mock response record
|
|
57
|
+
println(${eVar})`
|
|
58
|
+
: `val result = client.direct(mutableMapOf<String, Any?>(
|
|
59
|
+
"path" to "/api/resource",
|
|
60
|
+
"method" to "GET"))
|
|
61
|
+
println(result)`
|
|
62
|
+
|
|
63
|
+
const apikeyEnvLine = isAuthActive(model)
|
|
64
|
+
? `\n${envName(model)}_APIKEY=<your-key>`
|
|
65
|
+
: ''
|
|
66
|
+
|
|
67
|
+
Content(`### Make a direct HTTP request
|
|
68
|
+
|
|
69
|
+
For endpoints not covered by entity methods:
|
|
70
|
+
|
|
71
|
+
\`\`\`kotlin
|
|
72
|
+
val result = client.direct(mutableMapOf<String, Any?>(
|
|
73
|
+
"path" to "/api/resource/{id}",
|
|
74
|
+
"method" to "GET",
|
|
75
|
+
"params" to mapOf("id" to "example")))
|
|
76
|
+
|
|
77
|
+
if (result["ok"] == true) {
|
|
78
|
+
println(result["status"]) // 200
|
|
79
|
+
println(result["data"]) // response body
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// A non-2xx response carries status + data (the error body); a
|
|
83
|
+
// transport-level failure carries err instead. Only one is present, so
|
|
84
|
+
// an absent key simply reads as null.
|
|
85
|
+
println("" + result["status"] + " " + result["err"])
|
|
86
|
+
}
|
|
87
|
+
\`\`\`
|
|
88
|
+
|
|
89
|
+
### Prepare a request without sending it
|
|
90
|
+
|
|
91
|
+
\`\`\`kotlin
|
|
92
|
+
// prepare() returns the fetch definition and raises on error.
|
|
93
|
+
val fetchdef = client.prepare(mutableMapOf<String, Any?>(
|
|
94
|
+
"path" to "/api/resource/{id}",
|
|
95
|
+
"method" to "DELETE",
|
|
96
|
+
"params" to mapOf("id" to "example")))
|
|
97
|
+
|
|
98
|
+
println(fetchdef["url"])
|
|
99
|
+
println(fetchdef["method"])
|
|
100
|
+
println(fetchdef["headers"])
|
|
101
|
+
\`\`\`
|
|
102
|
+
|
|
103
|
+
### Use test mode
|
|
104
|
+
|
|
105
|
+
Create a mock client for unit testing — no server required:
|
|
106
|
+
|
|
107
|
+
\`\`\`kotlin
|
|
108
|
+
val client = ${SDK}.testSDK(null, null)
|
|
109
|
+
|
|
110
|
+
${testModeExample}
|
|
111
|
+
\`\`\`
|
|
112
|
+
|
|
113
|
+
### Use a custom fetch function
|
|
114
|
+
|
|
115
|
+
Replace the HTTP transport with your own \`BiFunction\`:
|
|
116
|
+
|
|
117
|
+
\`\`\`kotlin
|
|
118
|
+
val mockFetch = java.util.function.BiFunction<String, MutableMap<String, Any?>, Any?> { url, init ->
|
|
119
|
+
mutableMapOf<String, Any?>(
|
|
120
|
+
"status" to 200,
|
|
121
|
+
"statusText" to "OK",
|
|
122
|
+
"headers" to mutableMapOf<String, Any?>(),
|
|
123
|
+
"json" to java.util.function.Supplier<Any?> { mapOf("id" to "mock01") },
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
val client = ${SDK}(mutableMapOf<String, Any?>(
|
|
128
|
+
"base" to "http://localhost:8080",
|
|
129
|
+
"system" to mapOf("fetch" to mockFetch),
|
|
130
|
+
))
|
|
131
|
+
\`\`\`
|
|
132
|
+
|
|
133
|
+
### Run live tests
|
|
134
|
+
|
|
135
|
+
Create a \`.env.local\` file at the project root:
|
|
136
|
+
|
|
137
|
+
\`\`\`
|
|
138
|
+
${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
|
|
139
|
+
\`\`\`
|
|
140
|
+
|
|
141
|
+
Then run:
|
|
142
|
+
|
|
143
|
+
\`\`\`bash
|
|
144
|
+
cd kotlin && gradle test
|
|
145
|
+
\`\`\`
|
|
146
|
+
|
|
147
|
+
`)
|
|
148
|
+
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
export {
|
|
153
|
+
ReadmeHowto
|
|
154
|
+
}
|