@voxgig/sdkgen 1.3.14 → 1.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/dist/action/action.js.map +1 -1
- package/dist/action/feature.js.map +1 -1
- package/dist/action/target.js.map +1 -1
- package/dist/cmp/AgentGuide.js.map +1 -1
- package/dist/cmp/AgentGuideContent.js.map +1 -1
- package/dist/cmp/AgentGuideFeature.js.map +1 -1
- package/dist/cmp/AgentGuideTop.js.map +1 -1
- package/dist/cmp/Changelog.js.map +1 -1
- package/dist/cmp/Deploy.js.map +1 -1
- package/dist/cmp/Entity.js +5 -1
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/Feature.js +2 -1
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/FeatureHook.js.map +1 -1
- package/dist/cmp/License.js.map +1 -1
- package/dist/cmp/Main.js.map +1 -1
- package/dist/cmp/Readme.js.map +1 -1
- package/dist/cmp/ReadmeEntity.js.map +1 -1
- package/dist/cmp/ReadmeErrors.js +1 -1
- package/dist/cmp/ReadmeErrors.js.map +1 -1
- package/dist/cmp/ReadmeExplanation.js +2 -2
- package/dist/cmp/ReadmeExplanation.js.map +1 -1
- package/dist/cmp/ReadmeHowto.js.map +1 -1
- package/dist/cmp/ReadmeInstall.js.map +1 -1
- package/dist/cmp/ReadmeIntro.js.map +1 -1
- package/dist/cmp/ReadmeModel.js.map +1 -1
- package/dist/cmp/ReadmeOptions.js.map +1 -1
- package/dist/cmp/ReadmeQuick.js.map +1 -1
- package/dist/cmp/ReadmeRef.js.map +1 -1
- package/dist/cmp/ReadmeTop.js +1 -1
- package/dist/cmp/ReadmeTop.js.map +1 -1
- package/dist/cmp/Security.js.map +1 -1
- package/dist/cmp/Test.js.map +1 -1
- package/dist/helpers/buildIdNames.js.map +1 -1
- package/dist/helpers/canonType.d.ts +3 -2
- package/dist/helpers/canonType.js +112 -24
- package/dist/helpers/canonType.js.map +1 -1
- package/dist/helpers/collectDeps.d.ts +1 -1
- package/dist/helpers/collectDeps.js +36 -13
- package/dist/helpers/collectDeps.js.map +1 -1
- package/dist/helpers/getMatchEntries.js.map +1 -1
- package/dist/helpers/naming.d.ts +7 -1
- package/dist/helpers/naming.js +90 -0
- package/dist/helpers/naming.js.map +1 -1
- package/dist/helpers/opExample.d.ts +1 -1
- package/dist/helpers/opExample.js +37 -20
- package/dist/helpers/opExample.js.map +1 -1
- package/dist/helpers/opShape.d.ts +5 -1
- package/dist/helpers/opShape.js +174 -7
- package/dist/helpers/opShape.js.map +1 -1
- package/dist/helpers/packageMeta.js.map +1 -1
- package/dist/sdkgen.d.ts +3 -3
- package/dist/sdkgen.js +12 -2
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utility.js.map +1 -1
- package/package.json +20 -14
- package/project/.sdk/model/target/cpp.aontu +4 -4
- package/project/.sdk/model/target/go-cli.aontu +17 -17
- package/project/.sdk/model/target/go-mcp.aontu +11 -11
- package/project/.sdk/model/target/go.aontu +1 -1
- package/project/.sdk/model/target/haskell.aontu +6 -3
- package/project/.sdk/model/target/java.aontu +4 -4
- package/project/.sdk/model/target/kotlin.aontu +4 -4
- package/project/.sdk/model/target/lean.aontu +51 -0
- package/project/.sdk/model/target/scala.aontu +4 -4
- package/project/.sdk/model/target/zig.aontu +12 -2
- package/project/.sdk/src/cmp/c/Config_c.ts +16 -4
- package/project/.sdk/src/cmp/c/EntityTypes_c.ts +167 -0
- package/project/.sdk/src/cmp/c/Entity_c.ts +3 -3
- package/project/.sdk/src/cmp/c/Main_c.ts +4 -0
- package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +192 -0
- package/project/.sdk/src/cmp/c/ReadmeExamplesTest_c.ts +169 -0
- package/project/.sdk/src/cmp/c/ReadmeExplanation_c.ts +55 -0
- package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +168 -0
- package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +52 -0
- package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +67 -0
- package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +151 -0
- package/project/.sdk/src/cmp/c/ReadmeOptions_c.ts +65 -0
- package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +225 -0
- package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +398 -0
- package/project/.sdk/src/cmp/c/ReadmeTopHowto_c.ts +24 -0
- package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +104 -0
- package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +86 -0
- package/project/.sdk/src/cmp/c/TestDirect_c.ts +3 -3
- package/project/.sdk/src/cmp/c/TestEntity_c.ts +10 -0
- package/project/.sdk/src/cmp/c/Test_c.ts +4 -0
- package/project/.sdk/src/cmp/c/utility_c.ts +8 -2
- package/project/.sdk/src/cmp/clojure/Entity_clojure.ts +1 -1
- package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +182 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +65 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +44 -0
- package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +144 -0
- package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +51 -0
- package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +66 -0
- package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +156 -0
- package/project/.sdk/src/cmp/clojure/ReadmeOptions_clojure.ts +61 -0
- package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +210 -0
- package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +409 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopHowto_clojure.ts +24 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +98 -0
- package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +78 -0
- package/project/.sdk/src/cmp/clojure/TestDirect_clojure.ts +58 -0
- package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +79 -0
- package/project/.sdk/src/cmp/clojure/Test_clojure.ts +21 -65
- package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +174 -0
- package/project/.sdk/src/cmp/cpp/Entity_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/MainEntity_cpp.ts +2 -2
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +5 -0
- package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +170 -0
- package/project/.sdk/src/cmp/cpp/ReadmeExamplesTest_cpp.ts +136 -0
- package/project/.sdk/src/cmp/cpp/ReadmeExplanation_cpp.ts +45 -0
- package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +139 -0
- package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +42 -0
- package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +69 -0
- package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +155 -0
- package/project/.sdk/src/cmp/cpp/ReadmeOptions_cpp.ts +62 -0
- package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +234 -0
- package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +387 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopHowto_cpp.ts +24 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +95 -0
- package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +70 -0
- package/project/.sdk/src/cmp/cpp/TestDirect_cpp.ts +3 -3
- package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +5 -1
- package/project/.sdk/src/cmp/cpp/Test_cpp.ts +4 -0
- package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +195 -0
- package/project/.sdk/src/cmp/csharp/Entity_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/MainEntity_csharp.ts +2 -2
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
- package/project/.sdk/src/cmp/csharp/Package_csharp.ts +1 -1
- package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +210 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExplanation_csharp.ts +42 -0
- package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +168 -0
- package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +41 -0
- package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +65 -0
- package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +148 -0
- package/project/.sdk/src/cmp/csharp/ReadmeOptions_csharp.ts +60 -0
- package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +219 -0
- package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +390 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopHowto_csharp.ts +25 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +92 -0
- package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +77 -0
- package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +3 -3
- package/project/.sdk/src/cmp/csharp/Test_csharp.ts +4 -0
- package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -30
- package/project/.sdk/src/cmp/dart/Entity_dart.ts +11 -3
- package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +2 -2
- package/project/.sdk/src/cmp/dart/Main_dart.ts +3 -3
- package/project/.sdk/src/cmp/dart/Package_dart.ts +1 -1
- package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +166 -0
- package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +238 -0
- package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +53 -0
- package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +151 -0
- package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +59 -0
- package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +65 -0
- package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +151 -0
- package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +63 -0
- package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +214 -0
- package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +381 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +24 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +95 -0
- package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +78 -0
- package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +4 -4
- package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +52 -0
- package/project/.sdk/src/cmp/dart/Test_dart.ts +6 -0
- package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +1 -3
- package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +1 -40
- package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +3 -3
- package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +164 -0
- package/project/.sdk/src/cmp/elixir/Entity_elixir.ts +1 -1
- package/project/.sdk/src/cmp/elixir/Main_elixir.ts +4 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +3 -1
- package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +163 -0
- package/project/.sdk/src/cmp/elixir/ReadmeExamplesTest_elixir.ts +144 -0
- package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +55 -0
- package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +149 -0
- package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +67 -0
- package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +66 -0
- package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +150 -0
- package/project/.sdk/src/cmp/elixir/ReadmeOptions_elixir.ts +62 -0
- package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +198 -0
- package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +333 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopHowto_elixir.ts +26 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +79 -0
- package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +68 -0
- package/project/.sdk/src/cmp/elixir/Test_elixir.ts +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityCreateOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityListOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityLoadOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityRemoveOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/fragment/EntityUpdateOp.fragment.ex +4 -0
- package/project/.sdk/src/cmp/elixir/utility_elixir.ts +32 -0
- package/project/.sdk/src/cmp/go/Config_go.ts +4 -1
- package/project/.sdk/src/cmp/go/EntityTypes_go.ts +121 -20
- package/project/.sdk/src/cmp/go/Entity_go.ts +3 -3
- package/project/.sdk/src/cmp/go/Main_go.ts +7 -6
- package/project/.sdk/src/cmp/go/Package_go.ts +1 -1
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
- package/project/.sdk/src/cmp/go/TestDirect_go.ts +3 -3
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +11 -4
- package/project/.sdk/src/cmp/go/utility_go.ts +28 -2
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +249 -44
- package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +200 -31
- package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +135 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExplanation_haskell.ts +48 -0
- package/project/.sdk/src/cmp/haskell/ReadmeHowto_haskell.ts +168 -0
- package/project/.sdk/src/cmp/haskell/ReadmeInstall_haskell.ts +51 -0
- package/project/.sdk/src/cmp/haskell/ReadmeIntro_haskell.ts +67 -0
- package/project/.sdk/src/cmp/haskell/ReadmeModel_haskell.ts +160 -0
- package/project/.sdk/src/cmp/haskell/ReadmeOptions_haskell.ts +74 -0
- package/project/.sdk/src/cmp/haskell/ReadmeQuick_haskell.ts +237 -0
- package/project/.sdk/src/cmp/haskell/ReadmeRef_haskell.ts +405 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopHowto_haskell.ts +31 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopQuick_haskell.ts +104 -0
- package/project/.sdk/src/cmp/haskell/ReadmeTopTest_haskell.ts +80 -0
- package/project/.sdk/src/cmp/haskell/Test_haskell.ts +27 -2
- package/project/.sdk/src/cmp/java/EntityTypes_java.ts +206 -0
- package/project/.sdk/src/cmp/java/Entity_java.ts +3 -3
- package/project/.sdk/src/cmp/java/MainEntity_java.ts +2 -2
- package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
- package/project/.sdk/src/cmp/java/Package_java.ts +1 -1
- package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
- package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +208 -0
- package/project/.sdk/src/cmp/java/ReadmeExplanation_java.ts +46 -0
- package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +156 -0
- package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +52 -0
- package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +66 -0
- package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +150 -0
- package/project/.sdk/src/cmp/java/ReadmeOptions_java.ts +61 -0
- package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +230 -0
- package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +388 -0
- package/project/.sdk/src/cmp/java/ReadmeTopHowto_java.ts +23 -0
- package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +103 -0
- package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +77 -0
- package/project/.sdk/src/cmp/java/TestDirect_java.ts +3 -3
- package/project/.sdk/src/cmp/java/Test_java.ts +4 -0
- package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -9
- package/project/.sdk/src/cmp/js/Entity_js.ts +3 -3
- package/project/.sdk/src/cmp/js/MainEntity_js.ts +6 -4
- package/project/.sdk/src/cmp/js/Main_js.ts +2 -2
- package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +13 -4
- package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +5 -5
- package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +4 -4
- package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +4 -4
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +10 -9
- package/project/.sdk/src/cmp/js/TestEntity_js.ts +7 -2
- package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +0 -31
- package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +200 -0
- package/project/.sdk/src/cmp/kotlin/Entity_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/MainEntity_kotlin.ts +2 -2
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
- package/project/.sdk/src/cmp/kotlin/Package_kotlin.ts +1 -1
- package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +198 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExplanation_kotlin.ts +47 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +154 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +50 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +66 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +150 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeOptions_kotlin.ts +61 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +230 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +387 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopHowto_kotlin.ts +23 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +104 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +77 -0
- package/project/.sdk/src/cmp/kotlin/TestDirect_kotlin.ts +3 -3
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +4 -0
- package/project/.sdk/src/cmp/lean/Config_lean.ts +88 -0
- package/project/.sdk/src/cmp/lean/Entity_lean.ts +9 -0
- package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +18 -0
- package/project/.sdk/src/cmp/lean/Main_lean.ts +120 -0
- package/project/.sdk/src/cmp/lean/Package_lean.ts +68 -0
- package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +29 -0
- package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +19 -0
- package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +25 -0
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +38 -0
- package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +25 -0
- package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +24 -0
- package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +22 -0
- package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +50 -0
- package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +16 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +16 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +23 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +18 -0
- package/project/.sdk/src/cmp/lean/Test_lean.ts +207 -0
- package/project/.sdk/src/cmp/lean/utility_lean.ts +78 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -6
- package/project/.sdk/src/cmp/lua/Entity_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
- package/project/.sdk/src/cmp/lua/Package_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -1
- package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +2 -2
- package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +3 -3
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +8 -3
- package/project/.sdk/src/cmp/lua/Test_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +2 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +180 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeExamplesTest_ocaml.ts +126 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +46 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +147 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +44 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +68 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +155 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeOptions_ocaml.ts +59 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +205 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +402 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopHowto_ocaml.ts +25 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +86 -0
- package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +79 -0
- package/project/.sdk/src/cmp/ocaml/Test_ocaml.ts +4 -0
- package/project/.sdk/src/cmp/perl/Entity_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/MainEntity_perl.ts +2 -2
- package/project/.sdk/src/cmp/perl/Package_perl.ts +1 -1
- package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +181 -0
- package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +354 -0
- package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +43 -0
- package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +149 -0
- package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +47 -0
- package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +66 -0
- package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +150 -0
- package/project/.sdk/src/cmp/perl/ReadmeOptions_perl.ts +59 -0
- package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +216 -0
- package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +399 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopHowto_perl.ts +24 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +91 -0
- package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +83 -0
- package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +3 -3
- package/project/.sdk/src/cmp/perl/Test_perl.ts +4 -0
- package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -7
- package/project/.sdk/src/cmp/php/Entity_php.ts +3 -3
- package/project/.sdk/src/cmp/php/MainEntity_php.ts +2 -2
- package/project/.sdk/src/cmp/php/Package_php.ts +1 -1
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +3 -3
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +8 -3
- package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -8
- package/project/.sdk/src/cmp/py/Entity_py.ts +4 -12
- package/project/.sdk/src/cmp/py/MainEntity_py.ts +2 -2
- package/project/.sdk/src/cmp/py/Main_py.ts +2 -2
- package/project/.sdk/src/cmp/py/Package_py.ts +1 -1
- package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +8 -3
- package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +3 -3
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +2 -2
- package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +2 -2
- package/project/.sdk/src/cmp/py/TestDirect_py.ts +3 -3
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +8 -3
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +32 -8
- package/project/.sdk/src/cmp/rb/Entity_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/MainEntity_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/Package_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +8 -3
- package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +2 -2
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +3 -3
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +8 -3
- package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +6 -2
- package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +151 -0
- package/project/.sdk/src/cmp/rust/Entity_rust.ts +4 -4
- package/project/.sdk/src/cmp/rust/MainEntity_rust.ts +2 -2
- package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
- package/project/.sdk/src/cmp/rust/Package_rust.ts +1 -1
- package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
- package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +144 -0
- package/project/.sdk/src/cmp/rust/ReadmeExplanation_rust.ts +44 -0
- package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +142 -0
- package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +49 -0
- package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +66 -0
- package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +153 -0
- package/project/.sdk/src/cmp/rust/ReadmeOptions_rust.ts +60 -0
- package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +212 -0
- package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +384 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopHowto_rust.ts +24 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +95 -0
- package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +81 -0
- package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +3 -3
- package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +10 -0
- package/project/.sdk/src/cmp/rust/Test_rust.ts +4 -0
- package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +201 -0
- package/project/.sdk/src/cmp/scala/Entity_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/MainEntity_scala.ts +2 -2
- package/project/.sdk/src/cmp/scala/Main_scala.ts +6 -0
- package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +175 -0
- package/project/.sdk/src/cmp/scala/ReadmeExamplesTest_scala.ts +182 -0
- package/project/.sdk/src/cmp/scala/ReadmeExplanation_scala.ts +49 -0
- package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +155 -0
- package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +58 -0
- package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +66 -0
- package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +150 -0
- package/project/.sdk/src/cmp/scala/ReadmeOptions_scala.ts +61 -0
- package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +230 -0
- package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +388 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopHowto_scala.ts +23 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +104 -0
- package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +77 -0
- package/project/.sdk/src/cmp/scala/TestDirect_scala.ts +3 -3
- package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +38 -10
- package/project/.sdk/src/cmp/scala/Test_scala.ts +9 -1
- package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +151 -0
- package/project/.sdk/src/cmp/swift/Entity_swift.ts +3 -3
- package/project/.sdk/src/cmp/swift/MainEntity_swift.ts +2 -2
- package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
- package/project/.sdk/src/cmp/swift/Package_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
- package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +187 -0
- package/project/.sdk/src/cmp/swift/ReadmeExplanation_swift.ts +49 -0
- package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +159 -0
- package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +58 -0
- package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +64 -0
- package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +149 -0
- package/project/.sdk/src/cmp/swift/ReadmeOptions_swift.ts +62 -0
- package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +232 -0
- package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +387 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopHowto_swift.ts +24 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopQuick_swift.ts +105 -0
- package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +77 -0
- package/project/.sdk/src/cmp/swift/TestDirect_swift.ts +1 -1
- package/project/.sdk/src/cmp/swift/Test_swift.ts +4 -0
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -6
- package/project/.sdk/src/cmp/ts/Entity_ts.ts +3 -3
- package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +6 -4
- package/project/.sdk/src/cmp/ts/Main_ts.ts +2 -2
- package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +14 -4
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +29 -11
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +5 -5
- package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +4 -4
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +17 -15
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +18 -2
- package/project/.sdk/src/cmp/zig/Config_zig.ts +22 -4
- package/project/.sdk/src/cmp/zig/Entity_zig.ts +4 -4
- package/project/.sdk/src/cmp/zig/MainEntity_zig.ts +2 -2
- package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
- package/project/.sdk/src/cmp/zig/Package_zig.ts +61 -0
- package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +188 -0
- package/project/.sdk/src/cmp/zig/ReadmeExamplesTest_zig.ts +58 -0
- package/project/.sdk/src/cmp/zig/ReadmeExplanation_zig.ts +45 -0
- package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +143 -0
- package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +54 -0
- package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +66 -0
- package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +152 -0
- package/project/.sdk/src/cmp/zig/ReadmeOptions_zig.ts +60 -0
- package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +211 -0
- package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +400 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopHowto_zig.ts +24 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +96 -0
- package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +82 -0
- package/project/.sdk/src/cmp/zig/TestDirect_zig.ts +66 -0
- package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +79 -0
- package/project/.sdk/src/cmp/zig/Test_zig.ts +17 -61
- package/project/.sdk/tm/clojure/src/voxgig/struct.clj +1 -1
- package/project/.sdk/tm/cpp/test/feature_test.cpp +19 -0
- package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +8 -16
- package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +10 -28
- package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +4 -1
- package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +7 -1
- package/project/.sdk/tm/dart/test/primary_test.dart +7 -0
- package/project/.sdk/tm/elixir/lib/utility/struct/voxgig_struct.ex +1 -1
- package/project/.sdk/tm/elixir/test/primary_utility_test.exs +7 -1
- package/project/.sdk/tm/go/feature/test_feature.go +33 -1
- package/project/.sdk/tm/go/test/primary_utility_test.go +41 -42
- package/project/.sdk/tm/go/test/runner_test.go +30 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +3 -1
- package/project/.sdk/tm/haskell/test/Harness.hs +8 -3
- package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +7 -24
- package/project/.sdk/tm/js/Makefile +1 -1
- package/project/.sdk/tm/js/jsconfig.json +12 -0
- package/project/.sdk/tm/js/src/feature/test/TestFeature.js +18 -1
- package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +8 -0
- package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +7 -20
- package/project/.sdk/tm/lean/LICENSE +21 -0
- package/project/.sdk/tm/lean/VERSION +1 -0
- package/project/.sdk/tm/lean/src/SdkFeature.lean +171 -0
- package/project/.sdk/tm/lean/src/SdkFeatures.lean +602 -0
- package/project/.sdk/tm/lean/src/SdkJson.lean +134 -0
- package/project/.sdk/tm/lean/src/SdkRuntime.lean +356 -0
- package/project/.sdk/tm/lean/src/SdkUtility.lean +617 -0
- package/project/.sdk/tm/lean/src/VoxgigStruct.lean +2880 -0
- package/project/.sdk/tm/lean/src/Vregex.lean +412 -0
- package/project/.sdk/tm/lean/src/feature/README.md +5 -0
- package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
- package/project/.sdk/tm/lean/test/StructCorpus.lean +697 -0
- package/project/.sdk/tm/lean/test/TFeature.lean +268 -0
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +349 -0
- package/project/.sdk/tm/lua/test/primary_utility_test.lua +10 -8
- package/project/.sdk/tm/ocaml/Makefile +5 -1
- package/project/.sdk/tm/perl/t/primary_utility.t +8 -17
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +9 -7
- package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
- package/project/.sdk/tm/py/feature/test_feature.py +28 -1
- package/project/.sdk/tm/py/test/test_primary_utility.py +13 -18
- package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/rb/feature/test_feature.rb +24 -1
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +7 -8
- package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
- package/project/.sdk/tm/rust/tests/common/mod.rs +37 -1
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +12 -26
- package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +7 -8
- package/project/.sdk/tm/ts/Makefile +1 -1
- package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +18 -1
- package/project/.sdk/tm/ts/test/utility/PrimaryUtility.test.ts +65 -21
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
- package/src/cmp/Entity.ts +5 -1
- package/src/cmp/Feature.ts +2 -1
- package/src/cmp/ReadmeErrors.ts +2 -2
- package/src/cmp/ReadmeExplanation.ts +3 -3
- package/src/cmp/ReadmeTop.ts +2 -2
- package/src/helpers/canonType.ts +121 -25
- package/src/helpers/collectDeps.ts +39 -12
- package/src/helpers/naming.ts +106 -0
- package/src/helpers/opExample.ts +43 -20
- package/src/helpers/opShape.ts +197 -11
- package/src/sdkgen.ts +13 -3
- package/src/tsconfig.json +2 -0
- package/project/.sdk/tm/zig/build.zig.zon +0 -11
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, File, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// Emits sdktest/ReadmeExamplesTest.scala — a PRESENCE + STRUCTURE gate over
|
|
6
|
+
// every scala fenced block in the repository ROOT README.md, the per-language
|
|
7
|
+
// scala/README.md, AND the per-language scala/REFERENCE.md. It is a
|
|
8
|
+
// default-package scala-cli object exposing run(rep) and is driven by the
|
|
9
|
+
// generated SdkEntityTestMain aggregator (mirrors the generated per-entity
|
|
10
|
+
// test objects).
|
|
11
|
+
//
|
|
12
|
+
// SCOPE NOTE (deliberate, documented): the Python/TS/Go equivalents EXECUTE and
|
|
13
|
+
// type-check every documented block. That is infeasible here — the generated
|
|
14
|
+
// Scala SDK compiles with scala-cli only (no in-process Scala compiler wired
|
|
15
|
+
// into the test runtime), so a test cannot compile-and-run arbitrary doc
|
|
16
|
+
// snippets at test time. This gate therefore guarantees the weaker-but-real
|
|
17
|
+
// invariant that keeps the docs honest as the generator evolves:
|
|
18
|
+
// 1. every doc exists and contains at least one scala block (nothing was
|
|
19
|
+
// dropped);
|
|
20
|
+
// 2. every scala block is structurally well-formed — its braces, parentheses
|
|
21
|
+
// and brackets balance (catches a truncated or malformed generated
|
|
22
|
+
// snippet).
|
|
23
|
+
// A per-doc summary line makes the coverage visible in the test output.
|
|
24
|
+
//
|
|
25
|
+
// The emitted Scala is written WITHOUT literal backticks (the fence marker is
|
|
26
|
+
// built at runtime as 96.toChar.toString.repeat(3)) so this TS template literal
|
|
27
|
+
// stays clean.
|
|
28
|
+
const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
|
|
29
|
+
const { target, ctx$: { model } } = props
|
|
30
|
+
|
|
31
|
+
const Name = model.const.Name
|
|
32
|
+
|
|
33
|
+
File({ name: 'ReadmeExamplesTest.' + target.ext }, () => {
|
|
34
|
+
Content(`// ${Name} SDK — documentation scala-examples PRESENCE + STRUCTURE gate.
|
|
35
|
+
//
|
|
36
|
+
// GUARANTEE (see ReadmeExamplesTest_scala.ts for why this is a structure gate
|
|
37
|
+
// and not an execute gate): every scala example in the docs is accounted for.
|
|
38
|
+
// A dependency-free scala-cli test object (default package, driven by
|
|
39
|
+
// SdkEntityTestMain) over every scala fenced code block in three documents:
|
|
40
|
+
// - the repository ROOT README.md (one directory above the scala module),
|
|
41
|
+
// - the per-language scala/README.md,
|
|
42
|
+
// - the per-language scala/REFERENCE.md.
|
|
43
|
+
//
|
|
44
|
+
// Checks, PER DOCUMENT:
|
|
45
|
+
// 1. PRESENCE: the doc exists and holds at least one scala block.
|
|
46
|
+
// 2. STRUCTURE: every fence is closed (an odd number of triple-backtick
|
|
47
|
+
// markers means a fence was opened but never closed — the doc is truncated
|
|
48
|
+
// and split-based extraction would mis-segment the tail), AND every scala
|
|
49
|
+
// block's braces / parens / brackets balance, so a truncated or malformed
|
|
50
|
+
// generated snippet fails loudly.
|
|
51
|
+
//
|
|
52
|
+
// GENERATED by @voxgig/sdkgen — do not edit by hand.
|
|
53
|
+
|
|
54
|
+
import java.nio.file.{Files, Path, Paths}
|
|
55
|
+
|
|
56
|
+
object ReadmeExamplesTest {
|
|
57
|
+
|
|
58
|
+
// The three documents to scan, resolved relative to the scala module
|
|
59
|
+
// directory (the working directory when scala-cli runs the tests). Each row
|
|
60
|
+
// is {label, relative path}.
|
|
61
|
+
private def docs(): Array[Array[String]] = Array(
|
|
62
|
+
Array("root README", ".." + java.io.File.separator + "README.md"),
|
|
63
|
+
Array("scala README.md", "README.md"),
|
|
64
|
+
Array("scala REFERENCE.md", "REFERENCE.md")
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
// Extract every scala fenced block. Split on the triple-backtick fence:
|
|
68
|
+
// odd-indexed segments are the inside of a fenced block (info string on the
|
|
69
|
+
// first line, then the code). Only blocks whose info string is exactly
|
|
70
|
+
// "scala" are returned.
|
|
71
|
+
private def scalaBlocks(text: String): java.util.List[String] = {
|
|
72
|
+
val fence = 96.toChar.toString.repeat(3)
|
|
73
|
+
val parts = text.split(java.util.regex.Pattern.quote(fence), -1)
|
|
74
|
+
val blocks = new java.util.ArrayList[String]()
|
|
75
|
+
var i = 1
|
|
76
|
+
while (i < parts.length) {
|
|
77
|
+
val seg = parts(i)
|
|
78
|
+
val nl = seg.indexOf('\\n')
|
|
79
|
+
val info = (if (nl < 0) seg else seg.substring(0, nl)).trim()
|
|
80
|
+
if (info == "scala") {
|
|
81
|
+
blocks.add(if (nl < 0) "" else seg.substring(nl + 1))
|
|
82
|
+
}
|
|
83
|
+
i += 2
|
|
84
|
+
}
|
|
85
|
+
blocks
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private def readDoc(path: Path): String =
|
|
89
|
+
new String(Files.readAllBytes(path), "UTF-8")
|
|
90
|
+
|
|
91
|
+
// True when every triple-backtick fence in the document is paired. split(-1)
|
|
92
|
+
// yields (fenceCount + 1) parts, so an even fence count (all fences closed)
|
|
93
|
+
// gives an odd number of parts. An odd fence count means a fence was opened
|
|
94
|
+
// but never closed: the block-extraction above would then treat everything
|
|
95
|
+
// after it as one big "block", and a truncated snippet that happens to
|
|
96
|
+
// balance would pass silently. Detecting it here lets the gate fail loudly.
|
|
97
|
+
private def fencesClosed(text: String): Boolean = {
|
|
98
|
+
val fence = 96.toChar.toString.repeat(3)
|
|
99
|
+
text.split(java.util.regex.Pattern.quote(fence), -1).length % 2 == 1
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// True when every open/close delimiter balances (ignores the subtlety of
|
|
103
|
+
// delimiters inside string literals — a generated snippet never nests an
|
|
104
|
+
// unbalanced delimiter in a string, and this catches truncation).
|
|
105
|
+
private def balanced(block: String): Boolean = {
|
|
106
|
+
val stack = new java.util.ArrayDeque[Character]()
|
|
107
|
+
var i = 0
|
|
108
|
+
while (i < block.length) {
|
|
109
|
+
val ch = block.charAt(i)
|
|
110
|
+
ch match {
|
|
111
|
+
case '(' => stack.push(')')
|
|
112
|
+
case '[' => stack.push(']')
|
|
113
|
+
case '{' => stack.push('}')
|
|
114
|
+
case ')' | ']' | '}' =>
|
|
115
|
+
if (stack.isEmpty || stack.pop().charValue() != ch) return false
|
|
116
|
+
case _ =>
|
|
117
|
+
}
|
|
118
|
+
i += 1
|
|
119
|
+
}
|
|
120
|
+
stack.isEmpty
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
def run(rep: SdkTestReport): Unit = {
|
|
124
|
+
val ds = docs()
|
|
125
|
+
|
|
126
|
+
// PRESENCE: each doc exists and holds at least one scala block.
|
|
127
|
+
var di = 0
|
|
128
|
+
while (di < ds.length) {
|
|
129
|
+
val label = ds(di)(0)
|
|
130
|
+
val rel = ds(di)(1)
|
|
131
|
+
rep.scope("readme-examples.presence." + label) {
|
|
132
|
+
val path = Paths.get(rel)
|
|
133
|
+
rep.check("readme-examples.presence." + label + ".exists",
|
|
134
|
+
Files.exists(path), label + " not found: " + path)
|
|
135
|
+
if (Files.exists(path)) {
|
|
136
|
+
val blocks = scalaBlocks(readDoc(path))
|
|
137
|
+
rep.check("readme-examples.presence." + label, blocks.size() > 0,
|
|
138
|
+
"expected at least one scala block in " + label)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
di += 1
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// STRUCTURE: every scala block's delimiters balance.
|
|
145
|
+
rep.scope("readme-examples.structure") {
|
|
146
|
+
val failures = new java.util.ArrayList[String]()
|
|
147
|
+
var dj = 0
|
|
148
|
+
while (dj < ds.length) {
|
|
149
|
+
val label = ds(dj)(0)
|
|
150
|
+
val path = Paths.get(ds(dj)(1))
|
|
151
|
+
if (Files.exists(path)) {
|
|
152
|
+
val text = readDoc(path)
|
|
153
|
+
// A fence opened but never closed leaves an odd number of fence
|
|
154
|
+
// markers; fail loudly rather than trusting the mis-segmented tail.
|
|
155
|
+
if (!fencesClosed(text))
|
|
156
|
+
failures.add(label + " has an unclosed scala code fence")
|
|
157
|
+
val blocks = scalaBlocks(text)
|
|
158
|
+
var balancedCount = 0
|
|
159
|
+
var bi = 0
|
|
160
|
+
while (bi < blocks.size()) {
|
|
161
|
+
if (balanced(blocks.get(bi))) balancedCount += 1
|
|
162
|
+
else failures.add(label + " scala block #" + bi + " has unbalanced delimiters")
|
|
163
|
+
bi += 1
|
|
164
|
+
}
|
|
165
|
+
println("[readme-examples] " + label + " scala blocks: total=" +
|
|
166
|
+
blocks.size() + " balanced=" + balancedCount)
|
|
167
|
+
}
|
|
168
|
+
dj += 1
|
|
169
|
+
}
|
|
170
|
+
rep.check("readme-examples.structure", failures.isEmpty(),
|
|
171
|
+
String.join("; ", failures))
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
`)
|
|
176
|
+
})
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
export {
|
|
181
|
+
ReadmeExamplesTest
|
|
182
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import { scalaPackage } from './utility_scala'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
|
|
8
|
+
const { target, ctx$: { model } } = props
|
|
9
|
+
|
|
10
|
+
const pkg = scalaPackage(model)
|
|
11
|
+
|
|
12
|
+
Content(`### Data as maps
|
|
13
|
+
|
|
14
|
+
The Scala SDK uses a loose object model — \`java.util.Map[String, Object]\`
|
|
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
|
+
\`java.util.Map[String, Object]\`. A \`${model.const.Name}Types.scala\` module of
|
|
21
|
+
reference \`case class\` types is also generated for editor documentation.
|
|
22
|
+
|
|
23
|
+
### Project structure
|
|
24
|
+
|
|
25
|
+
\`\`\`
|
|
26
|
+
scala/
|
|
27
|
+
├── project.scala -- scala-cli project config (Scala 3, no deps)
|
|
28
|
+
├── core/ -- Main SDK client, config, entity base, error type
|
|
29
|
+
├── entity/ -- Entity implementations
|
|
30
|
+
├── feature/ -- Built-in features (Base, Test, Log, ...)
|
|
31
|
+
├── utility/ -- Utility functions and the vendored struct library
|
|
32
|
+
└── sdktest/ -- Generated per-entity tests (scala-cli mains)
|
|
33
|
+
\`\`\`
|
|
34
|
+
|
|
35
|
+
The main client class (\`${model.const.Name}SDK\`, package \`${pkg}.core\`)
|
|
36
|
+
exposes the entity accessors. Reference entity or utility types directly only
|
|
37
|
+
when needed. The SDK is a dependency-free scala-cli project: JSON parsing is
|
|
38
|
+
the vendored \`utility/Json.java\`, HTTP transport is the JDK
|
|
39
|
+
\`java.net.http.HttpClient\`, and the struct library is inlined under
|
|
40
|
+
\`utility/struct\`.
|
|
41
|
+
|
|
42
|
+
`)
|
|
43
|
+
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
export {
|
|
48
|
+
ReadmeExplanation
|
|
49
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
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 { scalaVarName } from './utility_scala'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct Scala literal for a field's canonical type.
|
|
13
|
+
function scalaLit(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 'java.util.List.of()'
|
|
19
|
+
if ('OBJECT' === k) return 'java.util.Map.of()'
|
|
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 ? scalaVarName(exampleEntity.name) : 'entity'
|
|
34
|
+
const accessor = exampleEntity ? scalaVarName(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 ? `java.util.Map.of("${idF}", "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 = `java.util.Map.of(${chosen.map((it: any) =>
|
|
48
|
+
`"${it.name}", ${scalaLit(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(java.util.Map.of(
|
|
59
|
+
"path", "/api/resource",
|
|
60
|
+
"method", "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
|
+
\`\`\`scala
|
|
72
|
+
val result = client.direct(java.util.Map.of(
|
|
73
|
+
"path", "/api/resource/{id}",
|
|
74
|
+
"method", "GET",
|
|
75
|
+
"params", java.util.Map.of("id", "example")))
|
|
76
|
+
|
|
77
|
+
if (java.lang.Boolean.TRUE == result.get("ok")) {
|
|
78
|
+
println(result.get("status")) // 200
|
|
79
|
+
println(result.get("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
|
+
// read both — an absent key simply reads as null.
|
|
85
|
+
println("status=" + result.get("status") + " err=" + result.get("err"))
|
|
86
|
+
}
|
|
87
|
+
\`\`\`
|
|
88
|
+
|
|
89
|
+
### Prepare a request without sending it
|
|
90
|
+
|
|
91
|
+
\`\`\`scala
|
|
92
|
+
// prepare() returns the fetch definition and raises on error.
|
|
93
|
+
val fetchdef = client.prepare(java.util.Map.of(
|
|
94
|
+
"path", "/api/resource/{id}",
|
|
95
|
+
"method", "DELETE",
|
|
96
|
+
"params", java.util.Map.of("id", "example")))
|
|
97
|
+
|
|
98
|
+
println(fetchdef.get("url"))
|
|
99
|
+
println(fetchdef.get("method"))
|
|
100
|
+
println(fetchdef.get("headers"))
|
|
101
|
+
\`\`\`
|
|
102
|
+
|
|
103
|
+
### Use test mode
|
|
104
|
+
|
|
105
|
+
Create a mock client for unit testing — no server required:
|
|
106
|
+
|
|
107
|
+
\`\`\`scala
|
|
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
|
+
\`\`\`scala
|
|
118
|
+
val mockFetch: java.util.function.BiFunction[String, java.util.Map[String, Object], Object] =
|
|
119
|
+
(url, init) => {
|
|
120
|
+
val res = new java.util.LinkedHashMap[String, Object]()
|
|
121
|
+
res.put("status", java.lang.Integer.valueOf(200))
|
|
122
|
+
res.put("statusText", "OK")
|
|
123
|
+
res.put("headers", new java.util.LinkedHashMap[String, Object]())
|
|
124
|
+
res.put("json", (() => java.util.Map.of("id", "mock01")): java.util.function.Supplier[Object])
|
|
125
|
+
res
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
val options = new java.util.LinkedHashMap[String, Object]()
|
|
129
|
+
options.put("base", "http://localhost:8080")
|
|
130
|
+
options.put("system", java.util.Map.of("fetch", mockFetch))
|
|
131
|
+
val client = new ${SDK}(options)
|
|
132
|
+
\`\`\`
|
|
133
|
+
|
|
134
|
+
### Run live tests
|
|
135
|
+
|
|
136
|
+
Create a \`.env.local\` file at the project root:
|
|
137
|
+
|
|
138
|
+
\`\`\`
|
|
139
|
+
${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
|
|
140
|
+
\`\`\`
|
|
141
|
+
|
|
142
|
+
Then run:
|
|
143
|
+
|
|
144
|
+
\`\`\`bash
|
|
145
|
+
cd scala && make test
|
|
146
|
+
\`\`\`
|
|
147
|
+
|
|
148
|
+
`)
|
|
149
|
+
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
export {
|
|
154
|
+
ReadmeHowto
|
|
155
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isPublished, repoInfo } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import { mavenGroupId } from './utility_scala'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
|
|
8
|
+
const { target, ctx$ } = props
|
|
9
|
+
const { model } = ctx$
|
|
10
|
+
|
|
11
|
+
const groupId = mavenGroupId(model)
|
|
12
|
+
const artifactId = `${model.name}-sdk`
|
|
13
|
+
|
|
14
|
+
if (isPublished(model, target.name)) {
|
|
15
|
+
Content(`Add the dependency with scala-cli:
|
|
16
|
+
|
|
17
|
+
\`\`\`scala
|
|
18
|
+
//> using dep "${groupId}:${artifactId}_3:0.0.1"
|
|
19
|
+
\`\`\`
|
|
20
|
+
|
|
21
|
+
Or, with sbt:
|
|
22
|
+
|
|
23
|
+
\`\`\`scala
|
|
24
|
+
libraryDependencies += "${groupId}" %% "${artifactId}" % "0.0.1"
|
|
25
|
+
\`\`\`
|
|
26
|
+
|
|
27
|
+
Or build from a source checkout — the SDK is a plain scala-cli project:
|
|
28
|
+
|
|
29
|
+
\`\`\`bash
|
|
30
|
+
cd scala && scala-cli compile .
|
|
31
|
+
\`\`\`
|
|
32
|
+
|
|
33
|
+
`)
|
|
34
|
+
return
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Publish pending: not yet on Maven Central. The generated SDK is a
|
|
38
|
+
// dependency-free, plain-source scala-cli project (no sbt/mill build, no
|
|
39
|
+
// third-party runtime deps), so install it from the git release tag or a
|
|
40
|
+
// local source checkout and compile with scala-cli.
|
|
41
|
+
const { releasesUrl } = repoInfo(model)
|
|
42
|
+
Content(`This package is not yet published to Maven Central. The generated SDK is a
|
|
43
|
+
plain-source scala-cli project (no build tool, no third-party runtime
|
|
44
|
+
dependencies). Install it from the GitHub release tag
|
|
45
|
+
(\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl})) or from a source
|
|
46
|
+
checkout — compile it with scala-cli:
|
|
47
|
+
|
|
48
|
+
\`\`\`bash
|
|
49
|
+
cd scala && scala-cli compile .
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
`)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
ReadmeInstall
|
|
58
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { scalaVarName } from './utility_scala'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
const ReadmeIntro = cmp(function ReadmeIntro(props: any) {
|
|
13
|
+
const { target, ctx$: { model } } = props
|
|
14
|
+
const info = (model.main && model.main.kit && model.main.kit.info) || {}
|
|
15
|
+
const tagline = info.tagline || ''
|
|
16
|
+
|
|
17
|
+
Content(`# ${model.Name} ${target.title} SDK
|
|
18
|
+
|
|
19
|
+
${tagline}
|
|
20
|
+
|
|
21
|
+
The ${target.title} SDK for the ${model.Name} API — an entity-oriented client following idiomatic Scala conventions.
|
|
22
|
+
|
|
23
|
+
`)
|
|
24
|
+
|
|
25
|
+
// Emphasise the entity-oriented design: the SDK surfaces the API as
|
|
26
|
+
// capitalised, semantic Entities with a small, uniform verb set rather
|
|
27
|
+
// than raw URL paths and query strings. The example entity name is
|
|
28
|
+
// derived from the model, never hardcoded.
|
|
29
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
30
|
+
const exampleEntity = Object.values(entity || {})
|
|
31
|
+
.find((e: any) => e.active !== false) as any
|
|
32
|
+
const example = exampleEntity
|
|
33
|
+
? `for example \`client.${scalaVarName(exampleEntity.name)}(null)\` — each`
|
|
34
|
+
: 'each'
|
|
35
|
+
|
|
36
|
+
// Model-driven op list — only the operations the active entities actually
|
|
37
|
+
// expose (a read-only entity has just list+load); never claim
|
|
38
|
+
// create/update/remove exist when no entity has them.
|
|
39
|
+
const CANON_OPS = ['list', 'load', 'create', 'update', 'remove']
|
|
40
|
+
const opSet = new Set<string>()
|
|
41
|
+
Object.values(entity || {}).forEach((e: any) => {
|
|
42
|
+
if (!e || e.active === false) return
|
|
43
|
+
Object.keys(e.op || {}).forEach((o: string) => {
|
|
44
|
+
if (e.op[o] && e.op[o].active !== false) opSet.add(o)
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
const opNames = CANON_OPS.filter((o) => opSet.has(o))
|
|
48
|
+
.concat([...opSet].filter((o) => !CANON_OPS.includes(o)))
|
|
49
|
+
const opList = (opNames.length ? opNames : ['list', 'load'])
|
|
50
|
+
.map((o) => '`' + o + '`').join(', ')
|
|
51
|
+
|
|
52
|
+
Content(`The SDK exposes the API as capitalised, semantic **Entities** — ${example}
|
|
53
|
+
carrying a small, uniform set of operations (${opList}) instead of raw URL
|
|
54
|
+
paths and query strings. You work with named resources and verbs, which
|
|
55
|
+
keeps the cognitive load low.
|
|
56
|
+
|
|
57
|
+
> Other languages, the CLI, and MCP server live alongside this one — see
|
|
58
|
+
> the [top-level README](../README.md).
|
|
59
|
+
|
|
60
|
+
`)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
export {
|
|
65
|
+
ReadmeIntro
|
|
66
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { scalaVarName } from './utility_scala'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
const ReadmeModel = cmp(function ReadmeModel(props: any) {
|
|
13
|
+
const { target, ctx$: { model } } = props
|
|
14
|
+
|
|
15
|
+
const SDK = model.const.Name + 'SDK'
|
|
16
|
+
|
|
17
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
18
|
+
const entityList = each(entity).filter((e: any) => e.active !== false)
|
|
19
|
+
|
|
20
|
+
// Model-driven op rows for the shared entity interface: emit a
|
|
21
|
+
// load/list/create/update/remove row only for operations at least one active
|
|
22
|
+
// entity actually exposes — never document an operation no entity has.
|
|
23
|
+
const opUnion = new Set<string>()
|
|
24
|
+
entityList.forEach((e: any) => Object.keys(e.op || {})
|
|
25
|
+
.forEach((o: string) => { if (e.op[o] && e.op[o].active !== false) opUnion.add(o) }))
|
|
26
|
+
const opRowDefs: Record<string, string> = {
|
|
27
|
+
load: '| `load` | `(reqmatch, ctrl) -> Object` | Load a single entity by match criteria. Raises on error. |',
|
|
28
|
+
list: '| `list` | `(reqmatch, ctrl) -> Object` | List entities matching the criteria (an aggregate list). Raises on error. |',
|
|
29
|
+
create: '| `create` | `(reqdata, ctrl) -> Object` | Create a new entity. Raises on error. |',
|
|
30
|
+
update: '| `update` | `(reqdata, ctrl) -> Object` | Update an existing entity. Raises on error. |',
|
|
31
|
+
remove: '| `remove` | `(reqmatch, ctrl) -> Object` | Remove an entity. Raises on error. |',
|
|
32
|
+
}
|
|
33
|
+
const opRows = ['load', 'list', 'create', 'update', 'remove']
|
|
34
|
+
.filter((o) => opUnion.has(o)).map((o) => opRowDefs[o]).join('\n')
|
|
35
|
+
|
|
36
|
+
const apikeyOptionRow = isAuthActive(model)
|
|
37
|
+
? '| `apikey` | `String` | API key for authentication. |\n'
|
|
38
|
+
: ''
|
|
39
|
+
|
|
40
|
+
Content(`### ${SDK}
|
|
41
|
+
|
|
42
|
+
\`\`\`scala
|
|
43
|
+
val client = new ${SDK}(options)
|
|
44
|
+
\`\`\`
|
|
45
|
+
|
|
46
|
+
Creates a new SDK client. \`options\` is a \`java.util.Map[String, Object]\`.
|
|
47
|
+
|
|
48
|
+
| Option | Type | Description |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
${apikeyOptionRow}| \`base\` | \`String\` | Base URL of the API server. |
|
|
51
|
+
| \`prefix\` | \`String\` | URL path prefix prepended to all requests. |
|
|
52
|
+
| \`suffix\` | \`String\` | URL path suffix appended to all requests. |
|
|
53
|
+
| \`feature\` | \`Map\` | Feature activation flags. |
|
|
54
|
+
| \`extend\` | \`List\` | Additional Feature instances to load. |
|
|
55
|
+
| \`system\` | \`Map\` | System overrides (e.g. custom \`fetch\` function). |
|
|
56
|
+
|
|
57
|
+
### testSDK
|
|
58
|
+
|
|
59
|
+
\`\`\`scala
|
|
60
|
+
val client = ${SDK}.testSDK(testopts, sdkopts)
|
|
61
|
+
\`\`\`
|
|
62
|
+
|
|
63
|
+
Creates a test-mode client with mock transport. Both arguments may be \`null\`.
|
|
64
|
+
|
|
65
|
+
### ${SDK} methods
|
|
66
|
+
|
|
67
|
+
| Method | Signature | Description |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| \`optionsMap\` | \`() -> Map\` | Deep copy of current SDK options. |
|
|
70
|
+
| \`getUtility\` | \`() -> Utility\` | Copy of the SDK utility object. |
|
|
71
|
+
| \`prepare\` | \`(fetchargs) -> Map\` | Build an HTTP request definition without sending. Raises on error. |
|
|
72
|
+
| \`direct\` | \`(fetchargs) -> Map\` | Build and send an HTTP request. Returns a result map (branch on \`ok\`). |
|
|
73
|
+
`)
|
|
74
|
+
|
|
75
|
+
each(entityList, (ent: any) => {
|
|
76
|
+
const article = /^[aeiou]/i.test(ent.Name) ? 'an' : 'a'
|
|
77
|
+
Content(`| \`${scalaVarName(ent.name)}\` | \`(entopts) -> SdkEntity\` | Create ${article} ${ent.Name} entity instance. |
|
|
78
|
+
`)
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
Content(`
|
|
82
|
+
### Entity interface
|
|
83
|
+
|
|
84
|
+
All entities share the same interface.
|
|
85
|
+
|
|
86
|
+
| Method | Signature | Description |
|
|
87
|
+
| --- | --- | --- |
|
|
88
|
+
${opRows}
|
|
89
|
+
| \`data\` | \`(newdata*) -> Object\` | Get or set entity data. |
|
|
90
|
+
| \`matchArgs\` | \`(newmatch*) -> Object\` | Get or set entity match criteria. |
|
|
91
|
+
| \`make\` | \`() -> Entity\` | Create a new instance with the same options. |
|
|
92
|
+
| \`getName\` | \`() -> String\` | Return the entity name. |
|
|
93
|
+
|
|
94
|
+
### Result shape
|
|
95
|
+
|
|
96
|
+
Entity operations return the bare result data (a \`Map\` for single-entity
|
|
97
|
+
ops, an aggregate \`List\` for \`list\`) as \`Object\` and raise on error. Wrap
|
|
98
|
+
calls in \`try\`/\`catch\` to handle failures.
|
|
99
|
+
|
|
100
|
+
The \`direct()\` escape hatch never raises — it returns a result
|
|
101
|
+
\`java.util.Map[String, Object]\` you branch on via \`result.get("ok")\`:
|
|
102
|
+
|
|
103
|
+
| Key | Type | Description |
|
|
104
|
+
| --- | --- | --- |
|
|
105
|
+
| \`ok\` | \`Boolean\` | \`true\` if the HTTP status is 2xx. |
|
|
106
|
+
| \`status\` | \`Int\` | HTTP status code. |
|
|
107
|
+
| \`headers\` | \`Map\` | Response headers. |
|
|
108
|
+
| \`data\` | \`Object\` | Parsed JSON response body. |
|
|
109
|
+
|
|
110
|
+
On error, \`ok\` is \`false\` and \`err\` contains the error value.
|
|
111
|
+
|
|
112
|
+
`)
|
|
113
|
+
|
|
114
|
+
// Entities summary
|
|
115
|
+
Content(`### Entities
|
|
116
|
+
|
|
117
|
+
`)
|
|
118
|
+
each(entityList, (ent: any) => {
|
|
119
|
+
const fields = ent.fields || []
|
|
120
|
+
const opnames = Object.keys(ent.op || {})
|
|
121
|
+
const ops = ent.op || {}
|
|
122
|
+
const points = each(ops).map((op: any) =>
|
|
123
|
+
op.points ? each(op.points) : []
|
|
124
|
+
).flat()
|
|
125
|
+
const path = points.length > 0 ? (points[0] as any).orig || '' : ''
|
|
126
|
+
|
|
127
|
+
Content(`#### ${ent.Name}
|
|
128
|
+
|
|
129
|
+
| Field | Description |
|
|
130
|
+
| --- | --- |
|
|
131
|
+
`)
|
|
132
|
+
each(fields, (field: any) => {
|
|
133
|
+
Content(`| \`${field.name}\` | ${field.short || ''} |
|
|
134
|
+
`)
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
Content(`
|
|
138
|
+
Operations: ${opnames.join(', ')}.
|
|
139
|
+
|
|
140
|
+
API path: \`${path}\`
|
|
141
|
+
|
|
142
|
+
`)
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
export {
|
|
149
|
+
ReadmeModel
|
|
150
|
+
}
|