@voxgig/sdkgen 1.3.14 → 1.3.17
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.map +1 -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 +107 -24
- package/dist/helpers/canonType.js.map +1 -1
- package/dist/helpers/collectDeps.js.map +1 -1
- package/dist/helpers/getMatchEntries.js.map +1 -1
- package/dist/helpers/naming.d.ts +5 -1
- package/dist/helpers/naming.js +37 -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 +3 -1
- package/dist/helpers/opShape.js +91 -3
- 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 +7 -1
- 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 +7 -6
- package/project/.sdk/model/target/haskell.aontu +6 -3
- 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 +168 -0
- 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 +152 -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/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/ReadmeEntity_clojure.ts +182 -0
- package/project/.sdk/src/cmp/clojure/ReadmeExamplesTest_clojure.ts +54 -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/Main_cpp.ts +5 -0
- package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +170 -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/TestEntity_cpp.ts +5 -1
- package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +196 -0
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +6 -0
- package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +174 -0
- package/project/.sdk/src/cmp/csharp/ReadmeExamplesTest_csharp.ts +198 -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/Test_csharp.ts +4 -0
- package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +43 -29
- package/project/.sdk/src/cmp/dart/Entity_dart.ts +8 -0
- 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/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 +165 -0
- 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 +126 -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/EntityTypes_go.ts +12 -3
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -1
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +10 -3
- package/project/.sdk/src/cmp/go/utility_go.ts +3 -2
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +240 -43
- package/project/.sdk/src/cmp/go-cli/fragment/main.fragment.go +27 -5
- package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +191 -30
- package/project/.sdk/src/cmp/haskell/ReadmeEntity_haskell.ts +181 -0
- package/project/.sdk/src/cmp/haskell/ReadmeExamplesTest_haskell.ts +125 -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 +207 -0
- package/project/.sdk/src/cmp/java/Main_java.ts +6 -0
- package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +175 -0
- package/project/.sdk/src/cmp/java/ReadmeExamplesTest_java.ts +186 -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/Test_java.ts +4 -0
- package/project/.sdk/src/cmp/js/EntityTypes_js.ts +25 -8
- package/project/.sdk/src/cmp/js/MainEntity_js.ts +4 -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 +6 -5
- 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 +201 -0
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +6 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +175 -0
- package/project/.sdk/src/cmp/kotlin/ReadmeExamplesTest_kotlin.ts +173 -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/Test_kotlin.ts +4 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +1 -1
- package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +19 -5
- package/project/.sdk/src/cmp/lua/Main_lua.ts +14 -2
- 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/TestEntity_lua.ts +7 -2
- 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 +111 -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/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/Test_perl.ts +4 -0
- package/project/.sdk/src/cmp/php/EntityTypes_php.ts +23 -6
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -1
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +7 -2
- package/project/.sdk/src/cmp/py/EntityTypes_py.ts +32 -7
- package/project/.sdk/src/cmp/py/Entity_py.ts +2 -10
- 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/TestEntity_py.ts +7 -2
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +19 -5
- 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/TestEntity_rb.ts +7 -2
- package/project/.sdk/src/cmp/rust/EntityBase_rust.ts +4 -0
- package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +152 -0
- package/project/.sdk/src/cmp/rust/Entity_rust.ts +1 -1
- package/project/.sdk/src/cmp/rust/Main_rust.ts +5 -0
- package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +163 -0
- package/project/.sdk/src/cmp/rust/ReadmeExamplesTest_rust.ts +132 -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/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 +202 -0
- 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 +163 -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/TestEntity_scala.ts +38 -10
- package/project/.sdk/src/cmp/scala/Test_scala.ts +8 -0
- package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +152 -0
- package/project/.sdk/src/cmp/swift/Main_swift.ts +5 -0
- package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +176 -0
- package/project/.sdk/src/cmp/swift/ReadmeExamplesTest_swift.ts +170 -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/Test_swift.ts +4 -0
- package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +19 -5
- package/project/.sdk/src/cmp/ts/MainEntity_ts.ts +4 -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 +13 -11
- 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 +1 -1
- package/project/.sdk/src/cmp/zig/Main_zig.ts +10 -4
- package/project/.sdk/src/cmp/zig/Package_zig.ts +53 -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/dart/lib/utility/MakeRequestUtility.dart +4 -1
- package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +7 -1
- 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/utility/struct/voxgigstruct.go +3 -1
- package/project/.sdk/tm/haskell/test/Harness.hs +8 -3
- package/project/.sdk/tm/js/Makefile +1 -1
- package/project/.sdk/tm/js/jsconfig.json +12 -0
- package/project/.sdk/tm/ocaml/Makefile +5 -1
- package/project/.sdk/tm/php/utility/struct/Struct.php +1 -1
- package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +1 -1
- package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +8 -59
- package/project/.sdk/tm/ts/Makefile +1 -1
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -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 +116 -25
- package/src/helpers/naming.ts +47 -0
- package/src/helpers/opExample.ts +43 -20
- package/src/helpers/opShape.ts +102 -3
- package/src/sdkgen.ts +8 -2
- package/src/tsconfig.json +2 -0
- package/project/.sdk/tm/zig/build.zig.zon +0 -11
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
cmp,
|
|
31
31
|
each,
|
|
32
32
|
isAuthActive,
|
|
33
|
+
entityDataIdField,
|
|
33
34
|
} from '@voxgig/sdkgen'
|
|
34
35
|
|
|
35
36
|
|
|
@@ -314,6 +315,7 @@ const generateCreate: OpGen = (ctx, step, index) => {
|
|
|
314
315
|
|
|
315
316
|
const generateList: OpGen = (ctx, step, index) => {
|
|
316
317
|
const { entity, flow } = ctx
|
|
318
|
+
const hasDataId = null != entityDataIdField(entity)
|
|
317
319
|
const ref = step.input.ref ?? entity.name + '_ref01'
|
|
318
320
|
const entvar = step.input.entvar ?? ref + '_ent'
|
|
319
321
|
const matchvar = step.input.matchvar ?? (ref + '_match' + (step.input.suffix ?? ''))
|
|
@@ -348,12 +350,18 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
348
350
|
const hasRefData = validRef && allSteps.some(s => 'create' === s.op &&
|
|
349
351
|
((s.input.ref ?? entity.name + '_ref01') === validRef))
|
|
350
352
|
|
|
351
|
-
|
|
353
|
+
// Guard on a DATA id field (entityDataIdField), NOT entity.id (the load-MATCH
|
|
354
|
+
// key): an entity can have a match id in its path while its RESPONSE record
|
|
355
|
+
// has no `id` field (e.g. Multichannel's Template — data fields meta/status/…,
|
|
356
|
+
// no id). Then `${validRef}_data.id` is undefined and select(list, { id:
|
|
357
|
+
// undefined }) spuriously matches id-less records, so ItemExists/ItemNotExists
|
|
358
|
+
// are meaningless. Emit them only when `.id` is a real data field.
|
|
359
|
+
if ('ItemExists' === validator.apply && hasRefData && hasDataId) {
|
|
352
360
|
Content(`
|
|
353
361
|
assert(!isempty(select(${listvar}, { id: ${validRef}_data.id })))
|
|
354
362
|
`)
|
|
355
363
|
}
|
|
356
|
-
else if ('ItemNotExists' === validator.apply && hasRefData) {
|
|
364
|
+
else if ('ItemNotExists' === validator.apply && hasRefData && hasDataId) {
|
|
357
365
|
Content(`
|
|
358
366
|
assert(isempty(select(${listvar}, { id: ${validRef}_data.id })))
|
|
359
367
|
`)
|
|
@@ -524,6 +532,14 @@ const generateRemove: OpGen = (ctx, step, index) => {
|
|
|
524
532
|
const needsEnt = !priorSteps.some(s =>
|
|
525
533
|
['create', 'list', 'load', 'update', 'remove'].includes(s.op))
|
|
526
534
|
|
|
535
|
+
// "Remove what you created" needs the created record's id. An entity with
|
|
536
|
+
// no DATA id field (entityDataIdField null — e.g. Multichannel's Template)
|
|
537
|
+
// returns records without `.id`, so `${srcdatavar}.id` is absent (a py
|
|
538
|
+
// KeyError; a silent nil elsewhere). Skip the flow-remove step for those —
|
|
539
|
+
// the remove op is still exercised by the direct() test.
|
|
540
|
+
if (null == entityDataIdField(entity)) {
|
|
541
|
+
return
|
|
542
|
+
}
|
|
527
543
|
Content(`
|
|
528
544
|
// REMOVE
|
|
529
545
|
`)
|
|
@@ -93,14 +93,32 @@ pub fn make_config() Value {
|
|
|
93
93
|
pub fn make_feature(name: []const u8) Feature {
|
|
94
94
|
`)
|
|
95
95
|
|
|
96
|
+
// The factory must be able to instantiate any built-in feature by name,
|
|
97
|
+
// not just the ones the current API model configures — a caller can enable
|
|
98
|
+
// a shipped feature (e.g. netsim) purely through runtime options even when
|
|
99
|
+
// the API def does not list it. The built-in set mirrors the feature
|
|
100
|
+
// templates in tm/zig/feature/ (excluding `base`, the fallback, and
|
|
101
|
+
// `support`, a helper module). Any model feature not already built in is
|
|
102
|
+
// appended so bespoke features still resolve.
|
|
103
|
+
const builtinFeatures = [
|
|
104
|
+
'audit', 'cache', 'clienttrack', 'debug', 'idempotency', 'log',
|
|
105
|
+
'metrics', 'netsim', 'paging', 'proxy', 'ratelimit', 'rbac',
|
|
106
|
+
'retry', 'streaming', 'telemetry', 'test', 'timeout',
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
const featureNames: string[] = [...builtinFeatures]
|
|
96
110
|
each(feature, (f: any) => {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
Content(` if (std.mem.eql(u8, name, "${f.name}")) return @import("../feature/${f.name}.zig").${fname}Feature.make();
|
|
100
|
-
`)
|
|
111
|
+
if (f.name !== 'base' && !featureNames.includes(f.name)) {
|
|
112
|
+
featureNames.push(f.name)
|
|
101
113
|
}
|
|
102
114
|
})
|
|
103
115
|
|
|
116
|
+
featureNames.forEach((name: string) => {
|
|
117
|
+
const fname = name.charAt(0).toUpperCase() + name.slice(1)
|
|
118
|
+
Content(` if (std.mem.eql(u8, name, "${name}")) return @import("../feature/${name}.zig").${fname}Feature.make();
|
|
119
|
+
`)
|
|
120
|
+
})
|
|
121
|
+
|
|
104
122
|
Content(` return @import("../feature/base.zig").BaseFeature.make();
|
|
105
123
|
}
|
|
106
124
|
`)
|
|
@@ -48,7 +48,7 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
48
48
|
({ indent }: any) => {
|
|
49
49
|
const arg = ('create' === opname || 'update' === opname) ?
|
|
50
50
|
'reqdata' : 'reqmatch'
|
|
51
|
-
Content({ indent }, `pub fn ${opname}(self:
|
|
51
|
+
Content({ indent }, `pub fn ${opname}(self: *${cls}, _${arg}: Value, _ctrl: Value) OpResult {
|
|
52
52
|
_ = _${arg};
|
|
53
53
|
_ = _ctrl;
|
|
54
54
|
return .{ .err = h.unsupported_op("${opname}", self.name) };
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
import { Config } from './Config_zig'
|
|
22
22
|
import { Gitignore } from './Gitignore_zig'
|
|
23
23
|
import { MainEntity } from './MainEntity_zig'
|
|
24
|
+
import { Package } from './Package_zig'
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
const Main = cmp(async function Main(props: any) {
|
|
@@ -30,16 +31,21 @@ const Main = cmp(async function Main(props: any) {
|
|
|
30
31
|
|
|
31
32
|
const entity: ModelEntity = getModelPath(model, `main.${KIT}.entity`)
|
|
32
33
|
|
|
34
|
+
// build.zig.zon — the package manifest, stamped with the model package name.
|
|
35
|
+
Package({ target })
|
|
36
|
+
|
|
33
37
|
Gitignore({})
|
|
34
38
|
|
|
35
39
|
// Copy tm/zig files with replacements. The tm src/ subtree only stages the
|
|
36
40
|
// per-feature custom-source dirs (target add), so it is excluded here
|
|
37
|
-
// exactly like the go/rust targets.
|
|
38
|
-
// (
|
|
39
|
-
//
|
|
41
|
+
// exactly like the go/rust targets. build.zig.zon is generated by Package
|
|
42
|
+
// (above), so it is excluded from the verbatim copy. The SDK source lives at
|
|
43
|
+
// the tree root (core/, feature/, utility/, entity/, test/) — Zig's
|
|
44
|
+
// idiomatic src/ is not used, to keep the exclude rule identical to the
|
|
45
|
+
// reference targets.
|
|
40
46
|
Copy({
|
|
41
47
|
from: 'tm/' + target.name,
|
|
42
|
-
exclude: [/src
|
|
48
|
+
exclude: [/src\//, /build\.zig\.zon$/],
|
|
43
49
|
replace: {
|
|
44
50
|
...props.ctx$.stdrep,
|
|
45
51
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
|
|
2
|
+
import {
|
|
3
|
+
Content,
|
|
4
|
+
File,
|
|
5
|
+
cmp,
|
|
6
|
+
} from '@voxgig/sdkgen'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
import type {
|
|
10
|
+
Model,
|
|
11
|
+
} from '@voxgig/apidef'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
import { zigModuleName } from './utility_zig'
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// build.zig.zon — the Zig package manifest. Zig has no central package
|
|
18
|
+
// registry, so there are no external registry dependencies to declare: the
|
|
19
|
+
// voxgig struct port is vendored in-tree (utility/voxgigstruct) and wired as a
|
|
20
|
+
// local module by build.zig. This generator only stamps the manifest with the
|
|
21
|
+
// model-derived package name (the go/rust Package generators emit go.mod /
|
|
22
|
+
// Cargo.toml the same way).
|
|
23
|
+
//
|
|
24
|
+
// The `.paths` allow-list mirrors the (registry-less) template: it only
|
|
25
|
+
// matters when packaging for a registry, which zig does not do, so it is kept
|
|
26
|
+
// stable. `.name` is a plain string here (matching the target's zig toolchain
|
|
27
|
+
// pin) rather than the newer enum-literal + fingerprint form.
|
|
28
|
+
const Package = cmp(async function Package(props: any) {
|
|
29
|
+
const ctx$ = props.ctx$
|
|
30
|
+
const model: Model = ctx$.model
|
|
31
|
+
|
|
32
|
+
const name = zigModuleName(model)
|
|
33
|
+
|
|
34
|
+
File({ name: 'build.zig.zon' }, () => {
|
|
35
|
+
Content(`.{
|
|
36
|
+
.name = "${name}",
|
|
37
|
+
.version = "0.0.1",
|
|
38
|
+
.dependencies = .{},
|
|
39
|
+
.paths = .{
|
|
40
|
+
"src",
|
|
41
|
+
"test",
|
|
42
|
+
"build.zig",
|
|
43
|
+
"build.zig.zon",
|
|
44
|
+
},
|
|
45
|
+
}
|
|
46
|
+
`)
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
Package
|
|
53
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
import { zigVarName } from './utility_zig'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// Canonical type sentinel -> a zig type name for the field/param tables.
|
|
13
|
+
// (The shared canonToType helper has no zig column, so map locally.) Every
|
|
14
|
+
// value is dynamically a `Value`, so the type column is documentary.
|
|
15
|
+
function zigType(type: any): string {
|
|
16
|
+
const k = canonKey(type)
|
|
17
|
+
if ('STRING' === k) return '[]const u8'
|
|
18
|
+
if ('INTEGER' === k) return 'i64'
|
|
19
|
+
if ('NUMBER' === k) return 'f64'
|
|
20
|
+
if ('BOOLEAN' === k) return 'bool'
|
|
21
|
+
if ('ARRAY' === k) return 'Value (array)'
|
|
22
|
+
if ('OBJECT' === k) return 'Value (object)'
|
|
23
|
+
return 'Value'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
// A type-correct zig expression constructing a voxgig struct Value.
|
|
28
|
+
function zigLit(type: any, placeholder: string = 'example'): string {
|
|
29
|
+
const k = canonKey(type)
|
|
30
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
|
|
31
|
+
if ('BOOLEAN' === k) return 'h.vbool(true)'
|
|
32
|
+
if ('ARRAY' === k) return 'h.olist()'
|
|
33
|
+
if ('OBJECT' === k) return 'h.omap()'
|
|
34
|
+
return `h.vstr("${placeholder}")`
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
// Operation method descriptions (language-agnostic wording, zig signatures).
|
|
39
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
40
|
+
load: { method: 'load(reqmatch, ctrl)', desc: 'Load a single entity by match criteria.' },
|
|
41
|
+
list: { method: 'list(reqmatch, ctrl)', desc: 'List entities, optionally matching the given criteria.' },
|
|
42
|
+
create: { method: 'create(reqdata, ctrl)', desc: 'Create a new entity with the given data.' },
|
|
43
|
+
update: { method: 'update(reqdata, ctrl)', desc: 'Update an existing entity.' },
|
|
44
|
+
remove: { method: 'remove(reqmatch, ctrl)', desc: 'Remove the matching entity.' },
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
49
|
+
const { target } = props
|
|
50
|
+
const { model } = props.ctx$
|
|
51
|
+
|
|
52
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
53
|
+
|
|
54
|
+
const publishedEntities = each(entity)
|
|
55
|
+
.filter((entity: any) => entity.active !== false)
|
|
56
|
+
|
|
57
|
+
if (0 === publishedEntities.length) {
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
Content(`
|
|
62
|
+
|
|
63
|
+
## Entities
|
|
64
|
+
|
|
65
|
+
`)
|
|
66
|
+
|
|
67
|
+
publishedEntities.map((entity: any) => {
|
|
68
|
+
const opnames = Object.keys(entity.op || {})
|
|
69
|
+
const fields = entity.fields || []
|
|
70
|
+
const idF = entityIdField(entity)
|
|
71
|
+
const eVar = zigVarName(entity.name)
|
|
72
|
+
const method = zigVarName(entity.name)
|
|
73
|
+
|
|
74
|
+
Content(`
|
|
75
|
+
### ${entity.Name}
|
|
76
|
+
|
|
77
|
+
`)
|
|
78
|
+
|
|
79
|
+
if (entity.short) {
|
|
80
|
+
Content(`${entity.short}
|
|
81
|
+
|
|
82
|
+
`)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
Content(`Create an instance: \`const ${eVar} = client.${method}(h.vnull());\`
|
|
86
|
+
|
|
87
|
+
`)
|
|
88
|
+
|
|
89
|
+
if (opnames.length > 0) {
|
|
90
|
+
Content(`#### Operations
|
|
91
|
+
|
|
92
|
+
| Method | Description |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
`)
|
|
95
|
+
opnames.map((opname: string) => {
|
|
96
|
+
const info = OP_DESC[opname]
|
|
97
|
+
if (info) {
|
|
98
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
99
|
+
`)
|
|
100
|
+
}
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
Content(`
|
|
104
|
+
Each operation returns an \`OpResult\` — \`switch\` on it: \`.ok => |data|\`
|
|
105
|
+
carries the result \`Value\`, \`.err => |e|\` carries the branded error.
|
|
106
|
+
|
|
107
|
+
`)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (fields.length > 0) {
|
|
111
|
+
Content(`#### Fields
|
|
112
|
+
|
|
113
|
+
| Field | Type | Description |
|
|
114
|
+
| --- | --- | --- |
|
|
115
|
+
`)
|
|
116
|
+
|
|
117
|
+
each(fields, (field: any) => {
|
|
118
|
+
const desc = field.short || ''
|
|
119
|
+
Content(`| \`${field.name}\` | \`${zigType(field.type)}\` | ${desc} |
|
|
120
|
+
`)
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
Content(`
|
|
124
|
+
`)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (opnames.includes('load')) {
|
|
128
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
129
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
130
|
+
.sort((a: any, b: any) =>
|
|
131
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
132
|
+
const loadArg = 0 < loadItems.length
|
|
133
|
+
? `h.jo(&.{${loadItems.map((it: any) =>
|
|
134
|
+
`.{ "${it.name}", ${zigLit(it.type,
|
|
135
|
+
it.name === idF ? entity.name + '_id' : it.name)} }`).join(', ')}})`
|
|
136
|
+
: 'h.vnull()'
|
|
137
|
+
Content(`#### Example: Load
|
|
138
|
+
|
|
139
|
+
\`\`\`zig
|
|
140
|
+
switch (client.${method}(h.vnull()).load(${loadArg}, h.vnull())) {
|
|
141
|
+
.ok => |${eVar}| std.debug.print("{s}\\n", .{h.stringify(${eVar})}),
|
|
142
|
+
.err => |e| std.debug.print("load failed: {s}\\n", .{e.msg}),
|
|
143
|
+
}
|
|
144
|
+
\`\`\`
|
|
145
|
+
|
|
146
|
+
`)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (opnames.includes('list')) {
|
|
150
|
+
Content(`#### Example: List
|
|
151
|
+
|
|
152
|
+
\`\`\`zig
|
|
153
|
+
switch (client.${method}(h.vnull()).list(h.vnull(), h.vnull())) {
|
|
154
|
+
.ok => |${eVar}s| std.debug.print("{s}\\n", .{h.stringify(${eVar}s)}),
|
|
155
|
+
.err => |e| std.debug.print("list failed: {s}\\n", .{e.msg}),
|
|
156
|
+
}
|
|
157
|
+
\`\`\`
|
|
158
|
+
|
|
159
|
+
`)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (opnames.includes('create')) {
|
|
163
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
164
|
+
.filter((it: any) => !it.optional)
|
|
165
|
+
Content(`#### Example: Create
|
|
166
|
+
|
|
167
|
+
\`\`\`zig
|
|
168
|
+
switch (client.${method}(h.vnull()).create(h.jo(&.{
|
|
169
|
+
`)
|
|
170
|
+
createItems.map((it: any) => {
|
|
171
|
+
Content(` .{ "${it.name}", ${zigLit(it.type, 'example_' + it.name)} }, // ${zigType(it.type)}
|
|
172
|
+
`)
|
|
173
|
+
})
|
|
174
|
+
Content(`}), h.vnull())) {
|
|
175
|
+
.ok => |${eVar}| std.debug.print("{s}\\n", .{h.stringify(${eVar})}),
|
|
176
|
+
.err => |e| std.debug.print("create failed: {s}\\n", .{e.msg}),
|
|
177
|
+
}
|
|
178
|
+
\`\`\`
|
|
179
|
+
|
|
180
|
+
`)
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
export {
|
|
187
|
+
ReadmeEntity
|
|
188
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// Validates the documented README/REFERENCE quick-start examples for the Zig
|
|
6
|
+
// SDK.
|
|
7
|
+
//
|
|
8
|
+
// DESIGN NOTE vs the go/rust gates (ReadmeExamplesTest_go.ts /
|
|
9
|
+
// ReadmeExamplesTest_rust.ts): the go version shells out to `go build`/`go run`
|
|
10
|
+
// to compile and run every fenced block; the rust version reads the doc files
|
|
11
|
+
// and checks that each block is structurally well-formed. Zig's test harness
|
|
12
|
+
// uses an EXPLICIT test-file list in build.zig (no auto-discovery of test/*.zig
|
|
13
|
+
// and no per-block temp compilation), and the doc files are not on the package
|
|
14
|
+
// path at test time — so neither a filesystem scan nor a per-snippet compile can
|
|
15
|
+
// be authored safely without a build to validate against.
|
|
16
|
+
//
|
|
17
|
+
// Instead this gate emits a real, always-compiling zig `test` block INTO the
|
|
18
|
+
// shared generated_test.zig (the only generated test file build.zig picks up).
|
|
19
|
+
// It exercises the exact top-level entry points the docs advertise — the
|
|
20
|
+
// test-mode constructor and the `direct()` escape hatch — so the documented
|
|
21
|
+
// quick-start surface is guaranteed to exist and run. Upgrading it to a true
|
|
22
|
+
// per-block compile gate is left as a follow-up.
|
|
23
|
+
const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
|
|
24
|
+
const { ctx$: { model } } = props
|
|
25
|
+
|
|
26
|
+
Content(`
|
|
27
|
+
// Documented quick-start surface (README.md / REFERENCE.md). Exercises the
|
|
28
|
+
// test-mode constructor and the direct() escape hatch exactly as documented.
|
|
29
|
+
test "readme_quickstart_surface" {
|
|
30
|
+
// \`sdk.test_sdk(...)\` — the documented mock constructor.
|
|
31
|
+
const client = sdk.test_sdk(vnull(), vnull());
|
|
32
|
+
try std.testing.expect(std.mem.eql(u8, client.mode, "test"));
|
|
33
|
+
|
|
34
|
+
// \`client.direct(...)\` — the documented escape hatch. It always returns a
|
|
35
|
+
// result map carrying an \`ok\` flag (never an error union).
|
|
36
|
+
const result = client.direct(h.jo(&.{
|
|
37
|
+
.{ "path", h.vstr("/api/resource/{id}") },
|
|
38
|
+
.{ "method", h.vstr("GET") },
|
|
39
|
+
.{ "params", h.jo(&.{.{ "id", h.vstr("example") }}) },
|
|
40
|
+
}));
|
|
41
|
+
try std.testing.expect(result == .object);
|
|
42
|
+
try std.testing.expect(h.get_bool(result, "ok") != null);
|
|
43
|
+
|
|
44
|
+
// \`client.prepare(...)\` — build a request without sending it.
|
|
45
|
+
const fetchdef = client.prepare(h.jo(&.{
|
|
46
|
+
.{ "path", h.vstr("/api/resource/{id}") },
|
|
47
|
+
.{ "method", h.vstr("GET") },
|
|
48
|
+
.{ "params", h.jo(&.{.{ "id", h.vstr("example") }}) },
|
|
49
|
+
})) catch h.vnull();
|
|
50
|
+
_ = fetchdef;
|
|
51
|
+
}
|
|
52
|
+
`)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
ReadmeExamplesTest
|
|
58
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
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 \`Value\`
|
|
9
|
+
|
|
10
|
+
The Zig SDK uses a single dynamic \`Value\` type throughout rather than a
|
|
11
|
+
typed struct per entity. \`Value\` is the vendored voxgig struct port's
|
|
12
|
+
\`JsonValue\` (a JSON-shaped tagged union: \`.string\`, \`.integer\`,
|
|
13
|
+
\`.float\`, \`.bool\`, \`.array\`, \`.object\`, \`.null\`). This mirrors the
|
|
14
|
+
dynamic nature of the API and keeps the SDK flexible — no code generation is
|
|
15
|
+
needed when the API schema changes.
|
|
16
|
+
|
|
17
|
+
Build request maps with the \`h.jo\` / \`h.ja\` helpers and read fields back
|
|
18
|
+
with \`h.getp\` (or the typed \`h.get_str\` / \`h.get_bool\` / \`h.to_int\`
|
|
19
|
+
accessors); use \`h.to_map\` to safely coerce a value to a map.
|
|
20
|
+
|
|
21
|
+
### Module structure
|
|
22
|
+
|
|
23
|
+
\`\`\`
|
|
24
|
+
${target.name}/
|
|
25
|
+
├── root.zig -- Module root (re-exports the public surface)
|
|
26
|
+
├── build.zig -- Build + test wiring
|
|
27
|
+
├── core/ -- Pipeline types, config, client (sdk.zig)
|
|
28
|
+
├── entity/ -- Per-entity clients (one file each)
|
|
29
|
+
├── feature/ -- Built-in features (base, test, log)
|
|
30
|
+
├── utility/ -- Utilities + the vendored voxgig struct port
|
|
31
|
+
└── test/ -- Test suites
|
|
32
|
+
\`\`\`
|
|
33
|
+
|
|
34
|
+
The public API is re-exported from \`root.zig\`, so \`@import("sdk")\` reaches
|
|
35
|
+
the SDK client, \`Value\`, and the \`h\` (helpers) namespace directly. Import
|
|
36
|
+
entity or utility modules only when needed.
|
|
37
|
+
|
|
38
|
+
`)
|
|
39
|
+
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
export {
|
|
44
|
+
ReadmeExplanation
|
|
45
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
nom,
|
|
8
|
+
} from '@voxgig/apidef'
|
|
9
|
+
|
|
10
|
+
import { zigVarName } from './utility_zig'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
// A type-correct zig expression constructing a voxgig struct Value.
|
|
14
|
+
function zigLit(type: any): string {
|
|
15
|
+
const k = canonKey(type)
|
|
16
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
|
|
17
|
+
if ('BOOLEAN' === k) return 'h.vbool(true)'
|
|
18
|
+
if ('ARRAY' === k) return 'h.olist()'
|
|
19
|
+
if ('OBJECT' === k) return 'h.omap()'
|
|
20
|
+
return 'h.vstr("example")'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
const ReadmeHowto = cmp(function ReadmeHowto(props: any) {
|
|
25
|
+
const { target, ctx$: { model } } = props
|
|
26
|
+
|
|
27
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
28
|
+
// Pick an entity with a real op (prefer a read op). primaryOp is null only
|
|
29
|
+
// when NO entity exposes any op (a direct()-only SDK).
|
|
30
|
+
const { entity: exampleEntity, primaryOp } = pickExampleEntity(entity)
|
|
31
|
+
const eName = exampleEntity ? nom(exampleEntity, 'Name') : 'Entity'
|
|
32
|
+
const eVar = exampleEntity ? zigVarName(exampleEntity.name) : 'entity'
|
|
33
|
+
const method = exampleEntity ? zigVarName(exampleEntity.name) : 'entity'
|
|
34
|
+
const idF = exampleEntity ? entityIdField(exampleEntity) : null
|
|
35
|
+
const isMatchOp = 'load' === primaryOp || 'remove' === primaryOp
|
|
36
|
+
let testArg = 'h.vnull()'
|
|
37
|
+
if (exampleEntity && isMatchOp) {
|
|
38
|
+
testArg = idF ? `h.jo(&.{.{ "${idF}", h.vstr("test01") }})` : 'h.vnull()'
|
|
39
|
+
} else if (exampleEntity && ('create' === primaryOp || 'update' === primaryOp)) {
|
|
40
|
+
const items = opRequestShape(exampleEntity, primaryOp).items
|
|
41
|
+
.filter((it: any) => it.name !== idF && it.name !== 'id')
|
|
42
|
+
const required = items.filter((it: any) => !it.optional)
|
|
43
|
+
const chosen = required.length ? required : items.slice(0, 3)
|
|
44
|
+
testArg = 0 < chosen.length
|
|
45
|
+
? `h.jo(&.{${chosen.map((it: any) => `.{ "${it.name}", ${zigLit(it.type)} }`).join(', ')}})`
|
|
46
|
+
: 'h.omap()'
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// The op-driven test-mode line. A direct()-only SDK shows a direct() call.
|
|
50
|
+
const testModeExample = primaryOp
|
|
51
|
+
? `// Entity ops return an OpResult — .ok carries the record, .err the error.
|
|
52
|
+
switch (client.${method}(h.vnull()).${primaryOp}(${testArg}, h.vnull())) {
|
|
53
|
+
.ok => |${eVar}| std.debug.print("{s}\\n", .{h.stringify(${eVar})}), // the mock record
|
|
54
|
+
.err => |e| std.debug.print("${primaryOp} failed: {s}\\n", .{e.msg}),
|
|
55
|
+
}`
|
|
56
|
+
: `const result = client.direct(h.jo(&.{
|
|
57
|
+
.{ "path", h.vstr("/api/resource") },
|
|
58
|
+
.{ "method", h.vstr("GET") },
|
|
59
|
+
}));
|
|
60
|
+
std.debug.print("{s}\\n", .{h.stringify(result)});`
|
|
61
|
+
|
|
62
|
+
const apikeyEnvLine = isAuthActive(model)
|
|
63
|
+
? `\n${envName(model)}_APIKEY=<your-key>`
|
|
64
|
+
: ''
|
|
65
|
+
|
|
66
|
+
Content(`### Make a direct HTTP request
|
|
67
|
+
|
|
68
|
+
For endpoints not covered by entity methods:
|
|
69
|
+
|
|
70
|
+
\`\`\`zig
|
|
71
|
+
const result = client.direct(h.jo(&.{
|
|
72
|
+
.{ "path", h.vstr("/api/resource/{id}") },
|
|
73
|
+
.{ "method", h.vstr("GET") },
|
|
74
|
+
.{ "params", h.jo(&.{.{ "id", h.vstr("example") }}) },
|
|
75
|
+
}));
|
|
76
|
+
|
|
77
|
+
if (h.get_bool(result, "ok") orelse false) {
|
|
78
|
+
std.debug.print("{d}\\n", .{h.to_int(h.getp(result, "status"))}); // 200
|
|
79
|
+
std.debug.print("{s}\\n", .{h.stringify(h.getp(result, "data"))}); // response body
|
|
80
|
+
} else {
|
|
81
|
+
// A non-2xx response carries status + data (the error body); a
|
|
82
|
+
// transport-level failure carries err instead. Only one is present.
|
|
83
|
+
std.debug.print("{s}\\n", .{h.get_str(result, "err") orelse ""});
|
|
84
|
+
}
|
|
85
|
+
\`\`\`
|
|
86
|
+
|
|
87
|
+
### Prepare a request without sending it
|
|
88
|
+
|
|
89
|
+
\`\`\`zig
|
|
90
|
+
// prepare() returns the fetch definition (an error union — use \`catch\`/\`try\`).
|
|
91
|
+
const fetchdef = client.prepare(h.jo(&.{
|
|
92
|
+
.{ "path", h.vstr("/api/resource/{id}") },
|
|
93
|
+
.{ "method", h.vstr("DELETE") },
|
|
94
|
+
.{ "params", h.jo(&.{.{ "id", h.vstr("example") }}) },
|
|
95
|
+
})) catch unreachable;
|
|
96
|
+
|
|
97
|
+
std.debug.print("{s}\\n", .{h.get_str(fetchdef, "url") orelse ""});
|
|
98
|
+
std.debug.print("{s}\\n", .{h.get_str(fetchdef, "method") orelse ""});
|
|
99
|
+
std.debug.print("{s}\\n", .{h.stringify(h.getp(fetchdef, "headers"))});
|
|
100
|
+
\`\`\`
|
|
101
|
+
|
|
102
|
+
### Use test mode
|
|
103
|
+
|
|
104
|
+
Create a mock client for unit testing — no server required:
|
|
105
|
+
|
|
106
|
+
\`\`\`zig
|
|
107
|
+
const client = sdk.test_sdk(h.vnull(), h.vnull());
|
|
108
|
+
|
|
109
|
+
${testModeExample}
|
|
110
|
+
\`\`\`
|
|
111
|
+
|
|
112
|
+
### Point at a different server
|
|
113
|
+
|
|
114
|
+
Override the base URL to reach a local or staging server:
|
|
115
|
+
|
|
116
|
+
\`\`\`zig
|
|
117
|
+
const client = sdk.${model.const.Name}SDK.new(h.jo(&.{
|
|
118
|
+
.{ "base", h.vstr("http://localhost:8080") },
|
|
119
|
+
}));
|
|
120
|
+
\`\`\`
|
|
121
|
+
|
|
122
|
+
### Run live tests
|
|
123
|
+
|
|
124
|
+
Create a \`.env.local\` file at the project root:
|
|
125
|
+
|
|
126
|
+
\`\`\`
|
|
127
|
+
${envName(model)}_TEST_LIVE=TRUE${apikeyEnvLine}
|
|
128
|
+
\`\`\`
|
|
129
|
+
|
|
130
|
+
Then run:
|
|
131
|
+
|
|
132
|
+
\`\`\`bash
|
|
133
|
+
cd ${target.name} && zig build test
|
|
134
|
+
\`\`\`
|
|
135
|
+
|
|
136
|
+
`)
|
|
137
|
+
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
export {
|
|
142
|
+
ReadmeHowto
|
|
143
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, installCommand, 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(`\`\`\`bash
|
|
11
|
+
${installCommand(model, target.name)}
|
|
12
|
+
\`\`\`
|
|
13
|
+
|
|
14
|
+
Or build it from a source checkout:
|
|
15
|
+
|
|
16
|
+
\`\`\`bash
|
|
17
|
+
cd ${target.name} && zig build
|
|
18
|
+
\`\`\`
|
|
19
|
+
|
|
20
|
+
`)
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Zig has no central package registry — the release IS the git tag. Depend
|
|
25
|
+
// on it via the Zig package manager (a git-tagged url in build.zig.zon) or
|
|
26
|
+
// build from a local source checkout.
|
|
27
|
+
const { releasesUrl } = repoInfo(model)
|
|
28
|
+
Content(`Zig has no central package registry, so this package is distributed as a
|
|
29
|
+
git tag (\`${target.name}/vX.Y.Z\`, see [Releases](${releasesUrl})). Add it to
|
|
30
|
+
your \`build.zig.zon\` dependencies, or build from a source checkout:
|
|
31
|
+
|
|
32
|
+
\`\`\`bash
|
|
33
|
+
cd ${target.name} && zig build
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
To depend on it from another project, add the tagged archive to
|
|
37
|
+
\`build.zig.zon\`:
|
|
38
|
+
|
|
39
|
+
\`\`\`zig
|
|
40
|
+
.dependencies = .{
|
|
41
|
+
.sdk = .{
|
|
42
|
+
.url = "<repo-url>/archive/refs/tags/${target.name}/vX.Y.Z.tar.gz",
|
|
43
|
+
// .hash = "...", // filled in by \`zig fetch\`
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
\`\`\`
|
|
47
|
+
|
|
48
|
+
`)
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
export {
|
|
53
|
+
ReadmeInstall
|
|
54
|
+
}
|