@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,176 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
import { swiftVarName } from './utility_swift'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// Type names come from the shared canonToType 'swift' column (single source of truth).
|
|
13
|
+
|
|
14
|
+
// A type-correct Swift `Value` literal for a field's canonical type.
|
|
15
|
+
function swiftLit(type: any, placeholder: string = 'example'): string {
|
|
16
|
+
const k = canonKey(type)
|
|
17
|
+
if ('INTEGER' === k) return '.int(1)'
|
|
18
|
+
if ('NUMBER' === k) return '.double(1.0)'
|
|
19
|
+
if ('BOOLEAN' === k) return '.bool(true)'
|
|
20
|
+
if ('ARRAY' === k) return '.list([])'
|
|
21
|
+
if ('OBJECT' === k) return '.map(VMap())'
|
|
22
|
+
return `.string("${placeholder}")`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
// Operation method spelling for Swift: methods over the loose object model,
|
|
27
|
+
// taking optional (reqmatch/reqdata, ctrl) and throwing on error. The op
|
|
28
|
+
// descriptions are language-agnostic.
|
|
29
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
30
|
+
load: { method: 'load(match, nil)', desc: 'Load a single entity by match criteria.' },
|
|
31
|
+
list: { method: 'list(nil, nil)', desc: 'List entities, optionally matching the given criteria.' },
|
|
32
|
+
create: { method: 'create(data, nil)', desc: 'Create a new entity with the given data.' },
|
|
33
|
+
update: { method: 'update(data, nil)', desc: 'Update an existing entity.' },
|
|
34
|
+
remove: { method: 'remove(match, nil)', desc: 'Remove the matching entity.' },
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
39
|
+
const { target } = props
|
|
40
|
+
const { model } = props.ctx$
|
|
41
|
+
|
|
42
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
43
|
+
|
|
44
|
+
const publishedEntities = each(entity)
|
|
45
|
+
.filter((entity: any) => entity.active !== false)
|
|
46
|
+
|
|
47
|
+
if (0 === publishedEntities.length) {
|
|
48
|
+
return
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
Content(`
|
|
52
|
+
|
|
53
|
+
## Entities
|
|
54
|
+
|
|
55
|
+
`)
|
|
56
|
+
|
|
57
|
+
publishedEntities.map((entity: any) => {
|
|
58
|
+
const opnames = Object.keys(entity.op || {})
|
|
59
|
+
const fields = entity.fields || []
|
|
60
|
+
// Model-driven id key: null when this entity has no id-like field.
|
|
61
|
+
const idF = entityIdField(entity)
|
|
62
|
+
// Sanitise the local variable name — a camelCased Swift keyword gets a
|
|
63
|
+
// trailing underscore (swiftVarName) so the snippet compiles.
|
|
64
|
+
const eVar = swiftVarName(entity.name)
|
|
65
|
+
const accessor = entity.Name
|
|
66
|
+
|
|
67
|
+
Content(`
|
|
68
|
+
### ${entity.Name}
|
|
69
|
+
|
|
70
|
+
`)
|
|
71
|
+
|
|
72
|
+
if (entity.short) {
|
|
73
|
+
Content(`${entity.short}
|
|
74
|
+
|
|
75
|
+
`)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
Content(`Create an instance: \`let ${eVar} = client.${accessor}()\`
|
|
79
|
+
|
|
80
|
+
`)
|
|
81
|
+
|
|
82
|
+
if (opnames.length > 0) {
|
|
83
|
+
Content(`#### Operations
|
|
84
|
+
|
|
85
|
+
| Method | Description |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
`)
|
|
88
|
+
opnames.map((opname: string) => {
|
|
89
|
+
const info = OP_DESC[opname]
|
|
90
|
+
if (info) {
|
|
91
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
92
|
+
`)
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
Content(`
|
|
97
|
+
`)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (fields.length > 0) {
|
|
101
|
+
Content(`#### Fields
|
|
102
|
+
|
|
103
|
+
| Field | Type | Description |
|
|
104
|
+
| --- | --- | --- |
|
|
105
|
+
`)
|
|
106
|
+
|
|
107
|
+
each(fields, (field: any) => {
|
|
108
|
+
const desc = field.short || ''
|
|
109
|
+
Content(`| \`${field.name}\` | \`${canonToType(field.type, target.name)}\` | ${desc} |
|
|
110
|
+
`)
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
Content(`
|
|
114
|
+
`)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (opnames.includes('load')) {
|
|
118
|
+
// The id key plus every REQUIRED match key (parent path params like
|
|
119
|
+
// page_id) — the same shape the runtime resolves path params from, so
|
|
120
|
+
// the example always works.
|
|
121
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
122
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
123
|
+
.sort((a: any, b: any) =>
|
|
124
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
125
|
+
const loadArg = 0 < loadItems.length
|
|
126
|
+
? `VMap([${loadItems.map((it: any) =>
|
|
127
|
+
`("${it.name}", ${swiftLit(it.type,
|
|
128
|
+
it.name === idF ? entity.name + '_id' : it.name)})`).join(', ')}])`
|
|
129
|
+
: 'nil'
|
|
130
|
+
Content(`#### Example: Load
|
|
131
|
+
|
|
132
|
+
\`\`\`swift
|
|
133
|
+
let ${eVar} = try client.${accessor}().load(${loadArg}, nil)
|
|
134
|
+
\`\`\`
|
|
135
|
+
|
|
136
|
+
`)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (opnames.includes('list')) {
|
|
140
|
+
Content(`#### Example: List
|
|
141
|
+
|
|
142
|
+
\`\`\`swift
|
|
143
|
+
let ${eVar}List = try client.${accessor}().list(nil, nil)
|
|
144
|
+
\`\`\`
|
|
145
|
+
|
|
146
|
+
`)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (opnames.includes('create')) {
|
|
150
|
+
// Members come from the SAME shape the runtime validates
|
|
151
|
+
// (opRequestShape): every required member must appear — including a
|
|
152
|
+
// required id and parent keys like page_id — with a real literal.
|
|
153
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
154
|
+
.filter((it: any) => !it.optional)
|
|
155
|
+
Content(`#### Example: Create
|
|
156
|
+
|
|
157
|
+
\`\`\`swift
|
|
158
|
+
let ${eVar} = try client.${accessor}().create(VMap([
|
|
159
|
+
`)
|
|
160
|
+
createItems.map((it: any, i: number) => {
|
|
161
|
+
const comma = i < createItems.length - 1 ? ',' : ''
|
|
162
|
+
Content(` ("${it.name}", ${swiftLit(it.type, 'example_' + it.name)})${comma} // ${canonToType(it.type, target.name)}
|
|
163
|
+
`)
|
|
164
|
+
})
|
|
165
|
+
Content(`]), nil)
|
|
166
|
+
\`\`\`
|
|
167
|
+
|
|
168
|
+
`)
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
export {
|
|
175
|
+
ReadmeEntity
|
|
176
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, File, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// Emits Tests/ProjectNameSDKTests/ReadmeExamplesTest.swift — a PRESENCE +
|
|
6
|
+
// STRUCTURE gate over every swift fenced block in the repository ROOT
|
|
7
|
+
// README.md, the per-language swift/README.md, AND swift/REFERENCE.md. It is a
|
|
8
|
+
// plain XCTestCase (no @testable import — it only reads the doc files off
|
|
9
|
+
// disk), resolved relative to the test file via #filePath.
|
|
10
|
+
//
|
|
11
|
+
// SCOPE NOTE (deliberate, documented): the Python/TS/Go equivalents EXECUTE and
|
|
12
|
+
// type-check every documented block. That is infeasible here — the generated
|
|
13
|
+
// Swift SDK compiles with SwiftPM only (no in-process Swift compiler wired into
|
|
14
|
+
// the test runtime), so a test cannot compile-and-run arbitrary doc snippets at
|
|
15
|
+
// test time. This gate therefore guarantees the weaker-but-real invariant that
|
|
16
|
+
// keeps the docs honest as the generator evolves:
|
|
17
|
+
// 1. PRESENCE: every scanned doc that exists holds at least one swift block
|
|
18
|
+
// (nothing was dropped);
|
|
19
|
+
// 2. STRUCTURE: every swift block's braces / parens / brackets balance
|
|
20
|
+
// (ignoring string literals and line comments), catching a truncated or
|
|
21
|
+
// malformed generated snippet.
|
|
22
|
+
//
|
|
23
|
+
// The emitted Swift is written WITHOUT literal backticks (the fence marker is
|
|
24
|
+
// built at runtime as String(repeating: "\u{60}", count: 3)) so this TS
|
|
25
|
+
// template literal stays clean, and uses string concatenation instead of Swift
|
|
26
|
+
// interpolation to keep backslash-escaping in this template minimal.
|
|
27
|
+
const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
|
|
28
|
+
const { ctx$: { model } } = props
|
|
29
|
+
|
|
30
|
+
const Name = model.const.Name
|
|
31
|
+
|
|
32
|
+
File({ name: 'ReadmeExamplesTest.swift' }, () => {
|
|
33
|
+
Content(`// ${Name} SDK — documentation swift-examples PRESENCE + STRUCTURE gate.
|
|
34
|
+
//
|
|
35
|
+
// GUARANTEE (see ReadmeExamplesTest_swift.ts for why this is a structure gate
|
|
36
|
+
// and not an execute gate): every swift example in the docs is accounted for.
|
|
37
|
+
// A dependency-free XCTestCase over every swift fenced code block in three
|
|
38
|
+
// documents:
|
|
39
|
+
// - the repository ROOT README.md (one directory above the swift module),
|
|
40
|
+
// - the per-language swift/README.md,
|
|
41
|
+
// - the per-language swift/REFERENCE.md.
|
|
42
|
+
//
|
|
43
|
+
// Checks, PER DOCUMENT that exists:
|
|
44
|
+
// 1. PRESENCE: the doc holds at least one swift block.
|
|
45
|
+
// 2. STRUCTURE: every swift block's braces / parens / brackets balance, so a
|
|
46
|
+
// truncated or malformed generated snippet fails loudly. An unclosed fence
|
|
47
|
+
// (odd number of fence markers) also fails, rather than silently absorbing
|
|
48
|
+
// the trailing text as a block.
|
|
49
|
+
//
|
|
50
|
+
// GENERATED by @voxgig/sdkgen — do not edit by hand.
|
|
51
|
+
|
|
52
|
+
import XCTest
|
|
53
|
+
import Foundation
|
|
54
|
+
|
|
55
|
+
final class ReadmeExamplesTest: XCTestCase {
|
|
56
|
+
private struct Doc { let label: String; let path: String }
|
|
57
|
+
|
|
58
|
+
private let NL: Character = "\\n"
|
|
59
|
+
|
|
60
|
+
// The triple-backtick fence, built at runtime so this source carries no
|
|
61
|
+
// literal backticks.
|
|
62
|
+
private var fence: String { String(repeating: "\\u{60}", count: 3) }
|
|
63
|
+
|
|
64
|
+
// The three documents to scan, resolved relative to this test file.
|
|
65
|
+
private func docs() -> [Doc] {
|
|
66
|
+
let here = URL(fileURLWithPath: #filePath)
|
|
67
|
+
.deletingLastPathComponent() // ProjectNameSDKTests
|
|
68
|
+
.deletingLastPathComponent() // Tests
|
|
69
|
+
.deletingLastPathComponent() // swift (module dir)
|
|
70
|
+
let project = here.deletingLastPathComponent() // project (holds root README)
|
|
71
|
+
return [
|
|
72
|
+
Doc(label: "root README", path: project.appendingPathComponent("README.md").path),
|
|
73
|
+
Doc(label: "swift README.md", path: here.appendingPathComponent("README.md").path),
|
|
74
|
+
Doc(label: "swift REFERENCE.md", path: here.appendingPathComponent("REFERENCE.md").path),
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Extract every swift fenced block. Split on the triple-backtick fence:
|
|
79
|
+
// odd-indexed segments are the inside of a fenced block (info string on the
|
|
80
|
+
// first line, then the code). Only blocks whose info string is exactly
|
|
81
|
+
// "swift" are returned.
|
|
82
|
+
private func swiftBlocks(_ text: String) -> [String] {
|
|
83
|
+
let parts = text.components(separatedBy: fence)
|
|
84
|
+
var blocks: [String] = []
|
|
85
|
+
var i = 1
|
|
86
|
+
while i < parts.count {
|
|
87
|
+
let seg = parts[i]
|
|
88
|
+
let split = seg.split(separator: NL, maxSplits: 1, omittingEmptySubsequences: false)
|
|
89
|
+
let first = split.first.map { String($0) } ?? ""
|
|
90
|
+
let info = first.trimmingCharacters(in: .whitespaces)
|
|
91
|
+
if info == "swift" {
|
|
92
|
+
blocks.append(split.count > 1 ? String(split[1]) : "")
|
|
93
|
+
}
|
|
94
|
+
i += 2
|
|
95
|
+
}
|
|
96
|
+
return blocks
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// True when the doc has a fence that was opened but never closed. A
|
|
100
|
+
// well-formed doc holds fence markers in open/close pairs, so an ODD number
|
|
101
|
+
// of markers means the final fence dangles — the split-based scan above would
|
|
102
|
+
// otherwise silently treat the truncated tail as a block. This is the
|
|
103
|
+
// structural analogue of an at-EOF "still inside a block" check.
|
|
104
|
+
private func hasUnclosedFence(_ text: String) -> Bool {
|
|
105
|
+
let fenceCount = text.components(separatedBy: fence).count - 1
|
|
106
|
+
return fenceCount % 2 != 0
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// True when every open/close delimiter balances, ignoring characters inside
|
|
110
|
+
// string literals and line comments (a generated snippet never nests an
|
|
111
|
+
// unbalanced delimiter outside those, and this catches truncation).
|
|
112
|
+
private func balanced(_ block: String) -> Bool {
|
|
113
|
+
var stack: [Character] = []
|
|
114
|
+
var inString = false
|
|
115
|
+
var escaped = false
|
|
116
|
+
let chars = Array(block)
|
|
117
|
+
var i = 0
|
|
118
|
+
while i < chars.count {
|
|
119
|
+
let ch = chars[i]
|
|
120
|
+
if inString {
|
|
121
|
+
if escaped { escaped = false }
|
|
122
|
+
else if ch == "\\\\" { escaped = true }
|
|
123
|
+
else if ch == "\\"" { inString = false }
|
|
124
|
+
i += 1
|
|
125
|
+
continue
|
|
126
|
+
}
|
|
127
|
+
if ch == "\\"" { inString = true; i += 1; continue }
|
|
128
|
+
if ch == "/" && i + 1 < chars.count && chars[i + 1] == "/" {
|
|
129
|
+
while i < chars.count && chars[i] != NL { i += 1 }
|
|
130
|
+
continue
|
|
131
|
+
}
|
|
132
|
+
switch ch {
|
|
133
|
+
case "(": stack.append(")")
|
|
134
|
+
case "[": stack.append("]")
|
|
135
|
+
case "{": stack.append("}")
|
|
136
|
+
case ")", "]", "}":
|
|
137
|
+
if stack.isEmpty || stack.removeLast() != ch { return false }
|
|
138
|
+
default: break
|
|
139
|
+
}
|
|
140
|
+
i += 1
|
|
141
|
+
}
|
|
142
|
+
return stack.isEmpty && !inString
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private func read(_ path: String) -> String? {
|
|
146
|
+
return try? String(contentsOfFile: path, encoding: .utf8)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// PRESENCE: each doc that exists holds at least one swift block.
|
|
150
|
+
func testDocExamplesPresent() {
|
|
151
|
+
for doc in docs() {
|
|
152
|
+
guard let text = read(doc.path) else { continue }
|
|
153
|
+
let blocks = swiftBlocks(text)
|
|
154
|
+
XCTAssertGreaterThan(blocks.count, 0,
|
|
155
|
+
"expected at least one swift block in " + doc.label)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// STRUCTURE: every swift block's delimiters balance.
|
|
160
|
+
func testDocExamplesWellFormed() {
|
|
161
|
+
var failures: [String] = []
|
|
162
|
+
for doc in docs() {
|
|
163
|
+
guard let text = read(doc.path) else { continue }
|
|
164
|
+
// A fence opened but never closed is a malformed doc — fail loudly rather
|
|
165
|
+
// than silently absorbing the unterminated tail as a block.
|
|
166
|
+
if hasUnclosedFence(text) {
|
|
167
|
+
failures.append(doc.label + " has an unclosed swift code fence")
|
|
168
|
+
}
|
|
169
|
+
let blocks = swiftBlocks(text)
|
|
170
|
+
var balancedCount = 0
|
|
171
|
+
for (i, b) in blocks.enumerated() {
|
|
172
|
+
if balanced(b) { balancedCount += 1 }
|
|
173
|
+
else { failures.append(doc.label + " swift block #" + String(i) + " has unbalanced delimiters") }
|
|
174
|
+
}
|
|
175
|
+
print("[readme-examples] " + doc.label + " swift blocks: total=" + String(blocks.count) + " balanced=" + String(balancedCount))
|
|
176
|
+
}
|
|
177
|
+
XCTAssertTrue(failures.isEmpty, failures.joined(separator: "; "))
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
`)
|
|
181
|
+
})
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
export {
|
|
186
|
+
ReadmeExamplesTest
|
|
187
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
const SDK = model.const.Name + 'SDK'
|
|
9
|
+
|
|
10
|
+
Content(`### Data as loose values
|
|
11
|
+
|
|
12
|
+
The Swift SDK uses a loose object model — the vendored \`Value\` enum
|
|
13
|
+
(with \`VMap\` / \`VList\` wrappers) throughout — rather than a bespoke typed
|
|
14
|
+
struct per endpoint. This mirrors the dynamic nature of the API and keeps the
|
|
15
|
+
SDK flexible: no regeneration is needed when the API schema changes.
|
|
16
|
+
|
|
17
|
+
Use the \`.asMap\` / \`.asList\` / \`.asString\` accessors to safely coerce a
|
|
18
|
+
\`Value\` to a concrete Swift type (each returns \`nil\` on a type mismatch).
|
|
19
|
+
A \`${model.const.Name}Types.swift\` file of reference \`struct\` types is also
|
|
20
|
+
generated for editor documentation.
|
|
21
|
+
|
|
22
|
+
### Project structure
|
|
23
|
+
|
|
24
|
+
\`\`\`
|
|
25
|
+
swift/
|
|
26
|
+
├── Package.swift -- SwiftPM manifest (zero runtime deps)
|
|
27
|
+
├── Sources/ProjectNameSDK/
|
|
28
|
+
│ ├── core/ -- Main client, config, entity base, error type
|
|
29
|
+
│ ├── entity/ -- Generated entity clients
|
|
30
|
+
│ ├── feature/ -- Built-in features (Base, Test, Log, ...)
|
|
31
|
+
│ ├── utility/ -- Utility functions
|
|
32
|
+
│ └── Struct/ -- Vendored Voxgig Struct port
|
|
33
|
+
└── Tests/ProjectNameSDKTests/ -- Test suites (XCTest)
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
The main client class (\`${SDK}\`, under \`Sources/ProjectNameSDK/core\`)
|
|
37
|
+
exposes the entity accessors. Reference entity or utility types directly only
|
|
38
|
+
when needed. The SDK is dependency-free: JSON parsing is the vendored
|
|
39
|
+
\`Struct/JSON.swift\`, HTTP transport is Foundation's \`URLSession\`, and the
|
|
40
|
+
struct library is inlined under \`Struct/\`.
|
|
41
|
+
|
|
42
|
+
`)
|
|
43
|
+
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
export {
|
|
48
|
+
ReadmeExplanation
|
|
49
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
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 { swiftVarName } from './utility_swift'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// A type-correct Swift `Value` literal for a field's canonical type.
|
|
13
|
+
function swiftLit(type: any): string {
|
|
14
|
+
const k = canonKey(type)
|
|
15
|
+
if ('INTEGER' === k) return '.int(1)'
|
|
16
|
+
if ('NUMBER' === k) return '.double(1.0)'
|
|
17
|
+
if ('BOOLEAN' === k) return '.bool(true)'
|
|
18
|
+
if ('ARRAY' === k) return '.list([])'
|
|
19
|
+
if ('OBJECT' === k) return '.map(VMap())'
|
|
20
|
+
return '.string("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 eName = exampleEntity ? exampleEntity.Name : 'Entity'
|
|
34
|
+
const eVar = exampleEntity ? swiftVarName(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 = 'nil'
|
|
40
|
+
if (exampleEntity && isMatchOp) {
|
|
41
|
+
testArg = idF ? `VMap([("${idF}", .string("test01"))])` : 'nil'
|
|
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 = `VMap([${chosen.map((it: any) =>
|
|
48
|
+
`("${it.name}", ${swiftLit(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 throw on error.
|
|
55
|
+
let ${eVar} = try client.${eName}().${primaryOp}(${testArg}, nil)
|
|
56
|
+
// ${eVar} holds the mock response record
|
|
57
|
+
print(${eVar})`
|
|
58
|
+
: `let result = client.direct(VMap([
|
|
59
|
+
("path", .string("/api/resource")),
|
|
60
|
+
("method", .string("GET")),
|
|
61
|
+
]))
|
|
62
|
+
print(result)`
|
|
63
|
+
|
|
64
|
+
const apikeyEnvLine = isAuthActive(model)
|
|
65
|
+
? `\n${envName(model)}_APIKEY=<your-key>`
|
|
66
|
+
: ''
|
|
67
|
+
|
|
68
|
+
Content(`### Make a direct HTTP request
|
|
69
|
+
|
|
70
|
+
For endpoints not covered by entity methods:
|
|
71
|
+
|
|
72
|
+
\`\`\`swift
|
|
73
|
+
let result = client.direct(VMap([
|
|
74
|
+
("path", .string("/api/resource/{id}")),
|
|
75
|
+
("method", .string("GET")),
|
|
76
|
+
("params", .map([("id", .string("example"))])),
|
|
77
|
+
]))
|
|
78
|
+
|
|
79
|
+
if result.entries["ok"] == .bool(true) {
|
|
80
|
+
print(result.entries["status"] ?? .noval) // 200
|
|
81
|
+
print(result.entries["data"] ?? .noval) // response body
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// A non-2xx response carries status + data (the error body); a
|
|
85
|
+
// transport-level failure carries err instead. Only one is present, so
|
|
86
|
+
// an absent key simply reads as .noval.
|
|
87
|
+
print(result.entries["status"] ?? .noval, result.entries["err"] ?? .noval)
|
|
88
|
+
}
|
|
89
|
+
\`\`\`
|
|
90
|
+
|
|
91
|
+
### Prepare a request without sending it
|
|
92
|
+
|
|
93
|
+
\`\`\`swift
|
|
94
|
+
// prepare() returns the fetch definition and throws on error.
|
|
95
|
+
let fetchdef = try client.prepare(VMap([
|
|
96
|
+
("path", .string("/api/resource/{id}")),
|
|
97
|
+
("method", .string("DELETE")),
|
|
98
|
+
("params", .map([("id", .string("example"))])),
|
|
99
|
+
]))
|
|
100
|
+
|
|
101
|
+
print(fetchdef.entries["url"] ?? .noval)
|
|
102
|
+
print(fetchdef.entries["method"] ?? .noval)
|
|
103
|
+
print(fetchdef.entries["headers"] ?? .noval)
|
|
104
|
+
\`\`\`
|
|
105
|
+
|
|
106
|
+
### Use test mode
|
|
107
|
+
|
|
108
|
+
Create a mock client for unit testing — no server required:
|
|
109
|
+
|
|
110
|
+
\`\`\`swift
|
|
111
|
+
let client = ${SDK}.testSDK(nil, nil)
|
|
112
|
+
|
|
113
|
+
${testModeExample}
|
|
114
|
+
\`\`\`
|
|
115
|
+
|
|
116
|
+
### Use a custom fetch function
|
|
117
|
+
|
|
118
|
+
Replace the HTTP transport with your own \`SystemFetch\` closure:
|
|
119
|
+
|
|
120
|
+
\`\`\`swift
|
|
121
|
+
let fetch: SystemFetch = { url, _ in
|
|
122
|
+
let m = VMap()
|
|
123
|
+
m.entries["status"] = .int(200)
|
|
124
|
+
m.entries["statusText"] = .string("OK")
|
|
125
|
+
m.entries["headers"] = .map(VMap())
|
|
126
|
+
m.entries["json"] = .nat({ () -> Value in .map(VMap([("id", .string("mock01"))])) } as NativeCall0)
|
|
127
|
+
return .map(m)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
let system = VMap()
|
|
131
|
+
system.entries["fetch"] = .nat(fetch)
|
|
132
|
+
let options = VMap()
|
|
133
|
+
options.entries["base"] = .string("http://localhost:8080")
|
|
134
|
+
options.entries["system"] = .map(system)
|
|
135
|
+
let client = ${SDK}(options)
|
|
136
|
+
\`\`\`
|
|
137
|
+
|
|
138
|
+
### Run live tests
|
|
139
|
+
|
|
140
|
+
Create a \`.env.local\` file at the project root:
|
|
141
|
+
|
|
142
|
+
\`\`\`
|
|
143
|
+
${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
|
|
144
|
+
\`\`\`
|
|
145
|
+
|
|
146
|
+
Then run:
|
|
147
|
+
|
|
148
|
+
\`\`\`bash
|
|
149
|
+
cd swift && make test
|
|
150
|
+
\`\`\`
|
|
151
|
+
|
|
152
|
+
`)
|
|
153
|
+
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
export {
|
|
158
|
+
ReadmeHowto
|
|
159
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isPublished, repoInfo } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const ReadmeInstall = cmp(function ReadmeInstall(props: any) {
|
|
6
|
+
const { target, ctx$ } = props
|
|
7
|
+
const { model } = ctx$
|
|
8
|
+
|
|
9
|
+
if (isPublished(model, target.name)) {
|
|
10
|
+
Content(`Add the package as a dependency in your \`Package.swift\`:
|
|
11
|
+
|
|
12
|
+
\`\`\`swift
|
|
13
|
+
dependencies: [
|
|
14
|
+
.package(url: "<repo-url>", from: "0.0.1"),
|
|
15
|
+
],
|
|
16
|
+
\`\`\`
|
|
17
|
+
|
|
18
|
+
Or build from a source checkout — the SDK is a plain SwiftPM package:
|
|
19
|
+
|
|
20
|
+
\`\`\`bash
|
|
21
|
+
cd swift && swift build
|
|
22
|
+
\`\`\`
|
|
23
|
+
|
|
24
|
+
`)
|
|
25
|
+
return
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Publish pending: not yet on the SwiftPM registry (git-tag only). The
|
|
29
|
+
// generated SDK is a dependency-free SwiftPM package (Foundation + the
|
|
30
|
+
// vendored Voxgig Struct port), so install it from the git release tag or a
|
|
31
|
+
// local source checkout and build with SwiftPM.
|
|
32
|
+
const { releasesUrl } = repoInfo(model)
|
|
33
|
+
Content(`This package is not yet published to a SwiftPM registry. The generated SDK
|
|
34
|
+
is a dependency-free SwiftPM package (Foundation only, plus the vendored
|
|
35
|
+
Voxgig Struct port). Depend on it from the GitHub release tag
|
|
36
|
+
(\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl})) by adding it to
|
|
37
|
+
your \`Package.swift\`:
|
|
38
|
+
|
|
39
|
+
\`\`\`swift
|
|
40
|
+
dependencies: [
|
|
41
|
+
// From the git release tag:
|
|
42
|
+
.package(url: "<repo-url>", exact: "0.0.1"),
|
|
43
|
+
],
|
|
44
|
+
\`\`\`
|
|
45
|
+
|
|
46
|
+
Or build from a source checkout with SwiftPM:
|
|
47
|
+
|
|
48
|
+
\`\`\`bash
|
|
49
|
+
cd swift && swift build
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
`)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
ReadmeInstall
|
|
58
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
const ReadmeIntro = cmp(function ReadmeIntro(props: any) {
|
|
11
|
+
const { target, ctx$: { model } } = props
|
|
12
|
+
const info = (model.main && model.main.kit && model.main.kit.info) || {}
|
|
13
|
+
const tagline = info.tagline || ''
|
|
14
|
+
|
|
15
|
+
Content(`# ${model.Name} ${target.title} SDK
|
|
16
|
+
|
|
17
|
+
${tagline}
|
|
18
|
+
|
|
19
|
+
The ${target.title} SDK for the ${model.Name} API — an entity-oriented client following idiomatic Swift conventions.
|
|
20
|
+
|
|
21
|
+
`)
|
|
22
|
+
|
|
23
|
+
// Emphasise the entity-oriented design: the SDK surfaces the API as
|
|
24
|
+
// capitalised, semantic Entities with a small, uniform verb set rather
|
|
25
|
+
// than raw URL paths and query strings. The example entity name is
|
|
26
|
+
// derived from the model, never hardcoded.
|
|
27
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
28
|
+
const exampleEntity = Object.values(entity || {})
|
|
29
|
+
.find((e: any) => e.active !== false) as any
|
|
30
|
+
const example = exampleEntity
|
|
31
|
+
? `for example \`client.${exampleEntity.Name}()\` — each`
|
|
32
|
+
: 'each'
|
|
33
|
+
|
|
34
|
+
// Model-driven op list — only the operations the active entities actually
|
|
35
|
+
// expose (a read-only entity has just list+load); never claim
|
|
36
|
+
// create/update/remove exist when no entity has them.
|
|
37
|
+
const CANON_OPS = ['list', 'load', 'create', 'update', 'remove']
|
|
38
|
+
const opSet = new Set<string>()
|
|
39
|
+
Object.values(entity || {}).forEach((e: any) => {
|
|
40
|
+
if (!e || e.active === false) return
|
|
41
|
+
Object.keys(e.op || {}).forEach((o: string) => {
|
|
42
|
+
if (e.op[o] && e.op[o].active !== false) opSet.add(o)
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
const opNames = CANON_OPS.filter((o) => opSet.has(o))
|
|
46
|
+
.concat([...opSet].filter((o) => !CANON_OPS.includes(o)))
|
|
47
|
+
const opList = (opNames.length ? opNames : ['list', 'load'])
|
|
48
|
+
.map((o) => '`' + o + '`').join(', ')
|
|
49
|
+
|
|
50
|
+
Content(`The SDK exposes the API as capitalised, semantic **Entities** — ${example}
|
|
51
|
+
carrying a small, uniform set of operations (${opList}) instead of raw URL
|
|
52
|
+
paths and query strings. You work with named resources and verbs, which
|
|
53
|
+
keeps the cognitive load low.
|
|
54
|
+
|
|
55
|
+
> Other languages, the CLI, and MCP server live alongside this one — see
|
|
56
|
+
> the [top-level README](../README.md).
|
|
57
|
+
|
|
58
|
+
`)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
export {
|
|
63
|
+
ReadmeIntro
|
|
64
|
+
}
|