@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,181 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
// A type-correct, executable Perl literal for a field's canonical type. The
|
|
11
|
+
// create example is EXECUTED by the doc test, so a placeholder must be a real
|
|
12
|
+
// value. Strings render the quoted placeholder.
|
|
13
|
+
function perlLit(type: any, placeholder: string = 'example'): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k || 'NUMBER' === k) return '1'
|
|
16
|
+
if ('BOOLEAN' === k) return '1'
|
|
17
|
+
if ('ARRAY' === k) return '[]'
|
|
18
|
+
if ('OBJECT' === k) return '{}'
|
|
19
|
+
return `'${placeholder}'`
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
// Perl has no static types; describe a field's shape with idiomatic Perl
|
|
24
|
+
// terms (scalar / arrayref / hashref) derived from the canonical sentinel.
|
|
25
|
+
function perlType(type: any): string {
|
|
26
|
+
const k = canonKey(type)
|
|
27
|
+
const m: Record<string, string> = {
|
|
28
|
+
STRING: 'string', INTEGER: 'integer', NUMBER: 'number',
|
|
29
|
+
BOOLEAN: 'boolean', ARRAY: 'arrayref', OBJECT: 'hashref', NULL: 'undef',
|
|
30
|
+
}
|
|
31
|
+
return m[k] || 'scalar'
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
// Operation method spelling for Perl: lowercase methods called on the entity
|
|
36
|
+
// instance, taking a hashref match/data argument.
|
|
37
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
38
|
+
load: { method: 'load($match)', desc: 'Load a single entity by match criteria.' },
|
|
39
|
+
list: { method: 'list()', desc: 'List entities, optionally matching the given criteria.' },
|
|
40
|
+
create: { method: 'create($data)', desc: 'Create a new entity with the given data.' },
|
|
41
|
+
update: { method: 'update($data)', desc: 'Update an existing entity.' },
|
|
42
|
+
remove: { method: 'remove($match)', desc: 'Remove the matching entity.' },
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
47
|
+
const { target } = props
|
|
48
|
+
const { model } = props.ctx$
|
|
49
|
+
|
|
50
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
51
|
+
|
|
52
|
+
const publishedEntities = each(entity)
|
|
53
|
+
.filter((entity: any) => entity.active !== false)
|
|
54
|
+
|
|
55
|
+
if (0 === publishedEntities.length) {
|
|
56
|
+
return
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
Content(`
|
|
60
|
+
|
|
61
|
+
## Entities
|
|
62
|
+
|
|
63
|
+
`)
|
|
64
|
+
|
|
65
|
+
publishedEntities.map((entity: any) => {
|
|
66
|
+
const opnames = Object.keys(entity.op || {})
|
|
67
|
+
const fields = entity.fields || []
|
|
68
|
+
// Model-driven id key: null when this entity has no id-like field.
|
|
69
|
+
const idF = entityIdField(entity)
|
|
70
|
+
const eVar = entity.name
|
|
71
|
+
|
|
72
|
+
Content(`
|
|
73
|
+
### ${entity.Name}
|
|
74
|
+
|
|
75
|
+
`)
|
|
76
|
+
|
|
77
|
+
if (entity.short) {
|
|
78
|
+
Content(`${entity.short}
|
|
79
|
+
|
|
80
|
+
`)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
Content(`Create an instance: \`my $${eVar} = $client->${entity.Name};\`
|
|
84
|
+
|
|
85
|
+
`)
|
|
86
|
+
|
|
87
|
+
if (opnames.length > 0) {
|
|
88
|
+
Content(`#### Operations
|
|
89
|
+
|
|
90
|
+
| Method | Description |
|
|
91
|
+
| --- | --- |
|
|
92
|
+
`)
|
|
93
|
+
opnames.map((opname: string) => {
|
|
94
|
+
const info = OP_DESC[opname]
|
|
95
|
+
if (info) {
|
|
96
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
97
|
+
`)
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
Content(`
|
|
102
|
+
`)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (fields.length > 0) {
|
|
106
|
+
Content(`#### Fields
|
|
107
|
+
|
|
108
|
+
| Field | Type | Description |
|
|
109
|
+
| --- | --- | --- |
|
|
110
|
+
`)
|
|
111
|
+
|
|
112
|
+
each(fields, (field: any) => {
|
|
113
|
+
const desc = field.short || ''
|
|
114
|
+
Content(`| \`${field.name}\` | \`${perlType(field.type)}\` | ${desc} |
|
|
115
|
+
`)
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
Content(`
|
|
119
|
+
`)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (opnames.includes('load')) {
|
|
123
|
+
// The id key plus every REQUIRED match key (parent path params like
|
|
124
|
+
// page_id) — the same shape the runtime resolves path params from, so
|
|
125
|
+
// the example always works.
|
|
126
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
127
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
128
|
+
.sort((a: any, b: any) =>
|
|
129
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
130
|
+
const loadArg = 0 < loadItems.length
|
|
131
|
+
? `{ ${loadItems.map((it: any) =>
|
|
132
|
+
`'${it.name}' => ${perlLit(it.type,
|
|
133
|
+
it.name === idF ? entity.name + '_id' : it.name)}`).join(', ')} }`
|
|
134
|
+
: ''
|
|
135
|
+
Content(`#### Example: Load
|
|
136
|
+
|
|
137
|
+
\`\`\`perl
|
|
138
|
+
my $${eVar} = $client->${entity.Name}->load(${loadArg});
|
|
139
|
+
\`\`\`
|
|
140
|
+
|
|
141
|
+
`)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (opnames.includes('list')) {
|
|
145
|
+
Content(`#### Example: List
|
|
146
|
+
|
|
147
|
+
\`\`\`perl
|
|
148
|
+
my $${eVar}s = $client->${entity.Name}->list;
|
|
149
|
+
\`\`\`
|
|
150
|
+
|
|
151
|
+
`)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (opnames.includes('create')) {
|
|
155
|
+
// Members come from the SAME shape the runtime validates
|
|
156
|
+
// (opRequestShape): every required member must appear — including a
|
|
157
|
+
// required id and parent keys like page_id — with a real, executable
|
|
158
|
+
// literal.
|
|
159
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
160
|
+
.filter((it: any) => !it.optional)
|
|
161
|
+
Content(`#### Example: Create
|
|
162
|
+
|
|
163
|
+
\`\`\`perl
|
|
164
|
+
my $${eVar} = $client->${entity.Name}->create({
|
|
165
|
+
`)
|
|
166
|
+
createItems.map((it: any) => {
|
|
167
|
+
Content(` '${it.name}' => ${perlLit(it.type, 'example_' + it.name)}, # ${perlType(it.type)}
|
|
168
|
+
`)
|
|
169
|
+
})
|
|
170
|
+
Content(`});
|
|
171
|
+
\`\`\`
|
|
172
|
+
|
|
173
|
+
`)
|
|
174
|
+
}
|
|
175
|
+
})
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
export {
|
|
180
|
+
ReadmeEntity
|
|
181
|
+
}
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, File, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
// Emits t/readme_examples.t — a Test::More COMPLETENESS GATE that guarantees
|
|
12
|
+
// every fenced `perl` code example across the package docs is unit-tested. It
|
|
13
|
+
// reads ALL THREE docs — the root (multi-language) ../README.md, the
|
|
14
|
+
// Perl-specific ../README.md, and ../REFERENCE.md — extracts every fenced perl
|
|
15
|
+
// block (tagged by source doc + index) and enforces:
|
|
16
|
+
//
|
|
17
|
+
// 1. SYNTAX — `perl -c` on every block (with the SDK lib on @INC, so a
|
|
18
|
+
// construction block's `use <Name>SDK` is actually compiled/loaded).
|
|
19
|
+
// 2. RUN — every RUNNABLE block (one that constructs the SDK, drives
|
|
20
|
+
// `$client`, or performs an entity op) is EXECUTED offline in seeded
|
|
21
|
+
// test mode against the real SDK. The captured stdout+stderr is scanned
|
|
22
|
+
// for FATAL perl-level programming-error markers REGARDLESS of exit code,
|
|
23
|
+
// so a bug an example's own eval swallows and prints is still caught.
|
|
24
|
+
// A domain not-found / 404 error never matches FATAL, so it is tolerated.
|
|
25
|
+
// 3. COMPLETENESS — every block is partitioned into exactly one of
|
|
26
|
+
// {executed, syntaxchecked-nonrunnable, illustration}; the counts must
|
|
27
|
+
// sum to the total. A runnable-looking block that was not executed lands
|
|
28
|
+
// in neither bucket and FAILS the gate.
|
|
29
|
+
//
|
|
30
|
+
// A runnable block is rewritten so its client is a test-mode client
|
|
31
|
+
// (<Name>SDK->test) seeded with an in-memory fixture for every entity it
|
|
32
|
+
// references; any real ->new/->test constructor is rewritten. A block that
|
|
33
|
+
// only uses `$client` (constructed in an earlier fenced block) gets a test
|
|
34
|
+
// client prepended.
|
|
35
|
+
//
|
|
36
|
+
// The emitted Perl builds the ``` fence via chr(96) so this generator string
|
|
37
|
+
// contains no backticks of its own.
|
|
38
|
+
const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
|
|
39
|
+
const { target, ctx$: { model } } = props
|
|
40
|
+
|
|
41
|
+
const Name = model.const.Name
|
|
42
|
+
const sdkClass = Name + 'SDK'
|
|
43
|
+
|
|
44
|
+
// Entity accessor ($client->Name) => lowercase fixture storage key.
|
|
45
|
+
const entities = each(getModelPath(model, `main.${KIT}.entity`))
|
|
46
|
+
.filter((e: any) => e && e.active !== false)
|
|
47
|
+
const entityLines = entities
|
|
48
|
+
.map((e: any) => ` '${nom(e, 'Name')}' => '${e.name}',`)
|
|
49
|
+
.join('\n')
|
|
50
|
+
|
|
51
|
+
// Perl test files use the `.t` extension (run by `prove`), not target.ext
|
|
52
|
+
// (`pl`); this component is invoked inside the `t/` folder by Test_perl.
|
|
53
|
+
File({ name: 'readme_examples.t' }, () => {
|
|
54
|
+
|
|
55
|
+
Content(`#!perl
|
|
56
|
+
# ${Name} SDK - documentation example COMPLETENESS gate.
|
|
57
|
+
#
|
|
58
|
+
# Guarantees every fenced perl code example across ALL THREE package docs is
|
|
59
|
+
# unit-tested. Reads the root ../README.md, the Perl ../README.md, and
|
|
60
|
+
# ../REFERENCE.md, extracts every fenced perl block (tagged by source doc +
|
|
61
|
+
# index) and enforces:
|
|
62
|
+
#
|
|
63
|
+
# 1. SYNTAX - 'perl -c' on every block (SDK lib on \@INC).
|
|
64
|
+
# 2. RUN - every RUNNABLE block (constructs the SDK, drives \$client, or
|
|
65
|
+
# performs an entity op) is EXECUTED offline in seeded test mode
|
|
66
|
+
# (${sdkClass}->test) against the real SDK. Captured output is scanned for
|
|
67
|
+
# a real perl-level error (undefined subroutine, no such method, ...)
|
|
68
|
+
# REGARDLESS of exit code, so a bug an example's own eval swallows and
|
|
69
|
+
# prints cannot slip through. Expected not-found domain errors are
|
|
70
|
+
# tolerated.
|
|
71
|
+
# 3. COMPLETENESS - every block is partitioned into exactly one of
|
|
72
|
+
# {executed, syntaxchecked-nonrunnable, illustration}; the counts must sum
|
|
73
|
+
# to the total. A runnable-looking block that was not executed belongs to
|
|
74
|
+
# no bucket and FAILS the gate.
|
|
75
|
+
#
|
|
76
|
+
# Perl is dynamically typed, so syntax + actually running every example is the
|
|
77
|
+
# strongest check available without a live server.
|
|
78
|
+
|
|
79
|
+
use strict;
|
|
80
|
+
use warnings;
|
|
81
|
+
use Test::More;
|
|
82
|
+
use File::Temp ();
|
|
83
|
+
use File::Basename ();
|
|
84
|
+
use File::Spec ();
|
|
85
|
+
use Cwd ();
|
|
86
|
+
|
|
87
|
+
my $TEST_DIR = File::Basename::dirname(Cwd::abs_path(__FILE__));
|
|
88
|
+
my $PKG_ROOT = Cwd::abs_path(File::Spec->catdir($TEST_DIR, '..'));
|
|
89
|
+
my $LIB = File::Spec->catdir($PKG_ROOT, 'lib');
|
|
90
|
+
|
|
91
|
+
# The three documentation sources this gate covers.
|
|
92
|
+
my %DOCS = (
|
|
93
|
+
'root README' => File::Spec->catfile($PKG_ROOT, '..', 'README.md'),
|
|
94
|
+
'perl README' => File::Spec->catfile($PKG_ROOT, 'README.md'),
|
|
95
|
+
'perl REFERENCE' => File::Spec->catfile($PKG_ROOT, 'REFERENCE.md'),
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
my $SDK_CLASS = '${sdkClass}';
|
|
99
|
+
|
|
100
|
+
# Entity accessor (\$client->Name) => fixture storage key (lowercase name).
|
|
101
|
+
my %ENTITIES = (
|
|
102
|
+
${entityLines}
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
# Documented SDK method names - used only to recognise the NARROW
|
|
106
|
+
# signature/method-table "illustration" class.
|
|
107
|
+
my @METHODS = qw(options_map get_utility prepare direct data_get data_set match_get match_set make get_name);
|
|
108
|
+
|
|
109
|
+
# Perl-level errors that indicate a real bug in a documented example (as
|
|
110
|
+
# opposed to an expected not-found / domain error, which is tolerated).
|
|
111
|
+
my $FATAL = qr/Can't locate object method|Can't locate \\S+ in \\@INC|Undefined subroutine|Not a HASH reference|Not an ARRAY reference|Not a CODE reference|Not a SCALAR reference|Can't use string \\(.*?\\) as a? \\w+ ref|Can't use an undefined value as a? \\w+ reference|Can't call method .* on (?:an undefined value|unblessed reference)|Global symbol .* requires explicit package|Bareword .* not allowed|syntax error|Modification of a read-only value/;
|
|
112
|
+
|
|
113
|
+
my $FENCE = chr(96) x 3;
|
|
114
|
+
|
|
115
|
+
my @TMPFILES;
|
|
116
|
+
END { unlink @TMPFILES if @TMPFILES }
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
sub read_doc {
|
|
120
|
+
my ($path) = @_;
|
|
121
|
+
return undef unless -e $path;
|
|
122
|
+
open my $fh, '<:encoding(UTF-8)', $path or return undef;
|
|
123
|
+
local $/;
|
|
124
|
+
my $c = <$fh>;
|
|
125
|
+
close $fh;
|
|
126
|
+
return $c;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
# Extract every fenced perl block from a document. Split on the fence: odd
|
|
131
|
+
# segments are the inside of a fenced block (info string on the first line,
|
|
132
|
+
# then code). Only blocks whose info string is exactly "perl" are returned, so
|
|
133
|
+
# other-language and plain fences are skipped.
|
|
134
|
+
sub blocks_in {
|
|
135
|
+
my ($text) = @_;
|
|
136
|
+
my @blocks;
|
|
137
|
+
my @parts = split /\\Q$FENCE\\E/, $text, -1;
|
|
138
|
+
for (my $i = 1; $i < @parts; $i += 2) {
|
|
139
|
+
my @lines = split /\\n/, $parts[$i], -1;
|
|
140
|
+
my $info = defined $lines[0] ? $lines[0] : '';
|
|
141
|
+
$info =~ s/^\\s+|\\s+$//g;
|
|
142
|
+
if ('perl' eq $info) {
|
|
143
|
+
shift @lines;
|
|
144
|
+
push @blocks, join("\\n", @lines);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return @blocks;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
sub all_blocks {
|
|
152
|
+
my @all;
|
|
153
|
+
for my $label (sort keys %DOCS) {
|
|
154
|
+
my $text = read_doc($DOCS{$label});
|
|
155
|
+
next unless defined $text;
|
|
156
|
+
my $i = 0;
|
|
157
|
+
for my $code (blocks_in($text)) {
|
|
158
|
+
push @all, { doc => $label, n => $i, code => $code };
|
|
159
|
+
$i++;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return @all;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
# --- classification --------------------------------------------------------
|
|
167
|
+
|
|
168
|
+
# A block is RUNNABLE when it constructs the SDK, drives \$client, or performs
|
|
169
|
+
# an entity operation. Every runnable block MUST be executed.
|
|
170
|
+
sub runnable {
|
|
171
|
+
my ($b) = @_;
|
|
172
|
+
return 1 if $b =~ /\\Q$SDK_CLASS\\E->(?:new|test)\\b/;
|
|
173
|
+
return 1 if $b =~ /\\\$client\\b/;
|
|
174
|
+
return 1 if $b =~ /->(?:load|list|create|update|remove)\\b/;
|
|
175
|
+
return 0;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
# A block "mentions the SDK" when it references \$client, the SDK class, an
|
|
180
|
+
# entity accessor, or an entity operation.
|
|
181
|
+
sub looks_sdk {
|
|
182
|
+
my ($b) = @_;
|
|
183
|
+
return 1 if $b =~ /\\\$client\\b/;
|
|
184
|
+
return 1 if $b =~ /\\b\\Q$SDK_CLASS\\E\\b/;
|
|
185
|
+
return 1 if $b =~ /->(?:load|list|create|update|remove)\\b/;
|
|
186
|
+
for my $name (keys %ENTITIES) {
|
|
187
|
+
return 1 if $b =~ /->\\Q$name\\E\\b/;
|
|
188
|
+
}
|
|
189
|
+
return 0;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
# NARROW illustration class: a non-runnable block that references the SDK class
|
|
194
|
+
# or a documented method NAME as a signature, and never uses \$client.
|
|
195
|
+
sub illustration {
|
|
196
|
+
my ($b) = @_;
|
|
197
|
+
return 0 if runnable($b);
|
|
198
|
+
return 0 if $b =~ /\\\$client\\b/;
|
|
199
|
+
return 1 if $b =~ /\\b\\Q$SDK_CLASS\\E\\b/;
|
|
200
|
+
for my $m (@METHODS) {
|
|
201
|
+
return 1 if $b =~ /\\b\\Q$m\\E\\s*\\(/;
|
|
202
|
+
}
|
|
203
|
+
return 0;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
sub classify {
|
|
208
|
+
my ($b) = @_;
|
|
209
|
+
return 'executed' if runnable($b);
|
|
210
|
+
return 'illustration' if illustration($b);
|
|
211
|
+
return 'syntaxchecked_nonrunnable' unless looks_sdk($b);
|
|
212
|
+
return 'unclassified';
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
# --- execution -------------------------------------------------------------
|
|
217
|
+
|
|
218
|
+
# Build the SDK 'entity' fixture option (as Perl source) for the entities a
|
|
219
|
+
# block references, falling back to seeding all entities when none are named.
|
|
220
|
+
sub fixtures_literal {
|
|
221
|
+
my ($block) = @_;
|
|
222
|
+
my %refs;
|
|
223
|
+
for my $name (sort keys %ENTITIES) {
|
|
224
|
+
$refs{$name} = $ENTITIES{$name} if $block =~ /->\\Q$name\\E\\b/;
|
|
225
|
+
}
|
|
226
|
+
%refs = %ENTITIES unless %refs;
|
|
227
|
+
my @pairs;
|
|
228
|
+
for my $name (sort keys %refs) {
|
|
229
|
+
push @pairs, "'" . $refs{$name} . "' => { 'test01' => { 'id' => 'test01' } }";
|
|
230
|
+
}
|
|
231
|
+
return "{ 'entity' => { " . join(', ', @pairs) . " } }";
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
# Rewrite a runnable block into an executable offline test-mode program: the
|
|
236
|
+
# SDK lib is put on \@INC by absolute path; any real ->new/->test constructor
|
|
237
|
+
# becomes ${sdkClass}->test(<fixtures>); a block that only uses \$client gets
|
|
238
|
+
# such a constructor prepended. The constructor arg match is deliberately
|
|
239
|
+
# shallow (no nested parens) - runnable op blocks never build a client inline
|
|
240
|
+
# with a paren-bearing argument.
|
|
241
|
+
sub to_runner {
|
|
242
|
+
my ($block) = @_;
|
|
243
|
+
my $fixtures = fixtures_literal($block);
|
|
244
|
+
my $body;
|
|
245
|
+
if ($block =~ /\\Q$SDK_CLASS\\E->(?:new|test)\\b/) {
|
|
246
|
+
($body = $block) =~ s/\\Q$SDK_CLASS\\E->(?:new|test)(?:\\s*\\([^()]*\\))?/$SDK_CLASS->test($fixtures)/g;
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
$body = "my \\\$client = $SDK_CLASS->test($fixtures);\\n" . $block;
|
|
250
|
+
}
|
|
251
|
+
return "use lib '$LIB';\\nuse $SDK_CLASS;\\n" . $body;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
sub write_temp {
|
|
256
|
+
my ($source) = @_;
|
|
257
|
+
my ($fh, $path) = File::Temp::tempfile(
|
|
258
|
+
'readme_XXXXXX', SUFFIX => '.pl', DIR => File::Spec->tmpdir, UNLINK => 0);
|
|
259
|
+
binmode($fh, ':encoding(UTF-8)');
|
|
260
|
+
print $fh $source;
|
|
261
|
+
close $fh;
|
|
262
|
+
push @TMPFILES, $path;
|
|
263
|
+
return $path;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
# --- tests -----------------------------------------------------------------
|
|
268
|
+
|
|
269
|
+
my @BLOCKS = all_blocks();
|
|
270
|
+
|
|
271
|
+
ok(scalar(@BLOCKS) > 0, 'docs contain perl examples');
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
# 1. SYNTAX gate: every documented perl block must compile.
|
|
275
|
+
{
|
|
276
|
+
my @failures;
|
|
277
|
+
for my $blk (@BLOCKS) {
|
|
278
|
+
my $path = write_temp($blk->{code});
|
|
279
|
+
my $out = qx{"$^X" -I"$LIB" -c "$path" 2>&1};
|
|
280
|
+
if (0 != $?) {
|
|
281
|
+
push @failures, "$blk->{doc} #$blk->{n}:\\n$out\\n$blk->{code}";
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
is(scalar(@failures), 0, 'all perl doc blocks have valid syntax')
|
|
285
|
+
or diag(join("\\n\\n", @failures));
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
# 2. RUN gate: every runnable perl block executes offline without a FATAL
|
|
290
|
+
# perl-level error (even one an example's eval swallows and prints).
|
|
291
|
+
{
|
|
292
|
+
my $ran = 0;
|
|
293
|
+
my @failures;
|
|
294
|
+
for my $blk (@BLOCKS) {
|
|
295
|
+
next unless runnable($blk->{code});
|
|
296
|
+
$ran++;
|
|
297
|
+
my $path = write_temp(to_runner($blk->{code}));
|
|
298
|
+
my $out = qx{"$^X" -I"$LIB" "$path" 2>&1};
|
|
299
|
+
if ($out =~ $FATAL) {
|
|
300
|
+
push @failures, "$blk->{doc} #$blk->{n} (exit @{[ $? >> 8 ]}):\\n$out\\n$blk->{code}";
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
ok($ran > 0, 'at least one runnable perl example executed');
|
|
304
|
+
is(scalar(@failures), 0, 'perl doc examples run offline without programming errors')
|
|
305
|
+
or diag(join("\\n\\n", @failures));
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
# 3. COMPLETENESS gate: every block is executed, syntaxchecked-nonrunnable, or
|
|
310
|
+
# a narrow illustration - nothing is silently dropped.
|
|
311
|
+
{
|
|
312
|
+
my %buckets = (
|
|
313
|
+
executed => [], syntaxchecked_nonrunnable => [], illustration => [], unclassified => []);
|
|
314
|
+
my %per_doc;
|
|
315
|
+
for my $blk (@BLOCKS) {
|
|
316
|
+
my $cls = classify($blk->{code});
|
|
317
|
+
push @{ $buckets{$cls} }, $blk;
|
|
318
|
+
$per_doc{$blk->{doc}} ||= { total => 0, executed => 0, syntaxchecked_nonrunnable => 0, illustration => 0, unclassified => 0 };
|
|
319
|
+
$per_doc{$blk->{doc}}{total}++;
|
|
320
|
+
$per_doc{$blk->{doc}}{$cls}++;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
for my $doc (sort keys %per_doc) {
|
|
324
|
+
my $c = $per_doc{$doc};
|
|
325
|
+
note(sprintf('%-16s total=%d executed=%d syntaxchecked=%d illustration=%d%s',
|
|
326
|
+
$doc, $c->{total}, $c->{executed}, $c->{syntaxchecked_nonrunnable}, $c->{illustration},
|
|
327
|
+
$c->{unclassified} ? ' UNCLASSIFIED=' . $c->{unclassified} : ''));
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
my @unclassified = map { "$_->{doc} #$_->{n}:\\n$_->{code}" } @{ $buckets{unclassified} };
|
|
331
|
+
is(scalar(@unclassified), 0,
|
|
332
|
+
'no runnable-looking perl block was left unexecuted')
|
|
333
|
+
or diag(join("\\n\\n", @unclassified));
|
|
334
|
+
|
|
335
|
+
my $total = scalar(@BLOCKS);
|
|
336
|
+
my $sum = scalar(@{ $buckets{executed} })
|
|
337
|
+
+ scalar(@{ $buckets{syntaxchecked_nonrunnable} })
|
|
338
|
+
+ scalar(@{ $buckets{illustration} });
|
|
339
|
+
is($sum, $total,
|
|
340
|
+
'every perl block is executed, syntaxchecked-nonrunnable, or illustration');
|
|
341
|
+
|
|
342
|
+
ok(scalar(@{ $buckets{executed} }) > 0, 'at least one executed perl example');
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
done_testing();
|
|
347
|
+
`)
|
|
348
|
+
})
|
|
349
|
+
})
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
export {
|
|
353
|
+
ReadmeExamplesTest
|
|
354
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const ReadmeExplanation = cmp(function ReadmeExplanation(props: any) {
|
|
6
|
+
const { target, ctx$: { model } } = props
|
|
7
|
+
|
|
8
|
+
Content(`### Data as hashrefs
|
|
9
|
+
|
|
10
|
+
The Perl SDK uses plain hashrefs and arrayrefs throughout rather than typed
|
|
11
|
+
objects. This mirrors the dynamic nature of the API and keeps the SDK
|
|
12
|
+
flexible — no code generation is needed when the API schema changes.
|
|
13
|
+
|
|
14
|
+
Use \`${model.const.Name}Helpers::to_map()\` to safely validate that a value
|
|
15
|
+
is a hashref.
|
|
16
|
+
|
|
17
|
+
### Module structure
|
|
18
|
+
|
|
19
|
+
\`\`\`
|
|
20
|
+
${target.name}/
|
|
21
|
+
├── lib/${model.const.Name}SDK.pm -- Main SDK module (package ${model.const.Name}SDK)
|
|
22
|
+
├── config.pm -- Configuration
|
|
23
|
+
├── features.pm -- Feature factory
|
|
24
|
+
├── core/ -- Core types and context
|
|
25
|
+
├── entity/ -- Entity implementations
|
|
26
|
+
├── feature/ -- Built-in features (base, test, log)
|
|
27
|
+
├── utility/ -- Utility functions
|
|
28
|
+
├── lib/Voxgig/Struct.pm -- Vendored struct library
|
|
29
|
+
└── t/ -- Test suites
|
|
30
|
+
\`\`\`
|
|
31
|
+
|
|
32
|
+
Load the main module with \`use lib 'lib'; use ${model.const.Name}SDK;\` — it
|
|
33
|
+
pulls in the config, features, and core modules for you. Require entity or
|
|
34
|
+
utility modules directly only when needed.
|
|
35
|
+
|
|
36
|
+
`)
|
|
37
|
+
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
export {
|
|
42
|
+
ReadmeExplanation
|
|
43
|
+
}
|