@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
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
// Typed-model generator (C target). Port of EntityTypes_rust.ts / _go.ts.
|
|
4
|
+
//
|
|
5
|
+
// Reads main.<KIT>.entity.<e>.fields[] and per-op params
|
|
6
|
+
// (op.<name>.points[].args.params[]) and emits one header, entity/types.h,
|
|
7
|
+
// with a C `typedef struct { ... } <Name>;` per entity plus a request/match
|
|
8
|
+
// struct per active op. Field/param sentinels ($STRING, $INTEGER, ...) map to
|
|
9
|
+
// C types via the SHARED canonToType 'c' column (the single source of truth
|
|
10
|
+
// per language — do not keep a local table here).
|
|
11
|
+
//
|
|
12
|
+
// DESIGN NOTE (C specifics vs the rust/go reference):
|
|
13
|
+
// * The C runtime is fully DYNAMIC: every op takes and returns the vendored
|
|
14
|
+
// `voxgig_value*` (with a trailing PNError** out-param), and the entity
|
|
15
|
+
// fragments emit no typed wrappers. These structs are therefore
|
|
16
|
+
// DOCUMENTARY — they mirror the entity/op shapes for reference and IDE
|
|
17
|
+
// support, but nothing in the runtime consumes them. types.h is a
|
|
18
|
+
// standalone header (guarded, includes sdk.h for the primitive types); it
|
|
19
|
+
// is not #included by any generated .c, so it never affects the build.
|
|
20
|
+
// * C has no Option<T> / optional struct members: a `req:false` field is
|
|
21
|
+
// still declared, with a trailing `// optional` marker. Absence is
|
|
22
|
+
// represented at runtime by the value simply not being present in the map.
|
|
23
|
+
// * Member names are snake_case + keyword-safe via cVarName; duplicate
|
|
24
|
+
// idents are dropped so a struct never declares the same member twice.
|
|
25
|
+
//
|
|
26
|
+
// Keep the SAME type-name scheme as every other language: <Name>,
|
|
27
|
+
// <Name>LoadMatch, <Name>ListMatch, <Name>CreateData, <Name>UpdateData,
|
|
28
|
+
// <Name>RemoveMatch.
|
|
29
|
+
|
|
30
|
+
import {
|
|
31
|
+
cmp, each, names,
|
|
32
|
+
File, Content, Folder,
|
|
33
|
+
} from '@voxgig/sdkgen'
|
|
34
|
+
|
|
35
|
+
import { canonToType, opTypeName, opRequestShape, warnEntityTypeCollisions } from '@voxgig/sdkgen'
|
|
36
|
+
|
|
37
|
+
import {
|
|
38
|
+
KIT,
|
|
39
|
+
getModelPath,
|
|
40
|
+
} from '@voxgig/apidef'
|
|
41
|
+
|
|
42
|
+
import { cVarName } from './utility_c'
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
const LANG = 'c'
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
// One C struct member line. `optional` -> a trailing marker (C has no
|
|
49
|
+
// Option<T>). Member names are snake_case + keyword-safe via cVarName.
|
|
50
|
+
function memberLine(name: string, sentinel: any, optional: boolean): string {
|
|
51
|
+
const ct = canonToType(sentinel, LANG)
|
|
52
|
+
const sep = ct.endsWith('*') ? '' : ' '
|
|
53
|
+
return ` ${ct}${sep}${cVarName(name)};${optional ? ' // optional' : ''}\n`
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
// Emit a `typedef struct { ... } <typeName>;` from {name, type, optional}
|
|
58
|
+
// items, dropping duplicate C identifiers (two model names can collapse to
|
|
59
|
+
// one ident). An empty shape gets a placeholder member (a struct with no
|
|
60
|
+
// members is not valid ISO C).
|
|
61
|
+
function emitStruct(comment: string, typeName: string, items: any[]): void {
|
|
62
|
+
Content(`${comment}
|
|
63
|
+
typedef struct {
|
|
64
|
+
`)
|
|
65
|
+
const seen = new Set<string>()
|
|
66
|
+
let count = 0
|
|
67
|
+
items.forEach((it: any) => {
|
|
68
|
+
if (null == it || null == it.name) return
|
|
69
|
+
const ident = cVarName(it.name)
|
|
70
|
+
if (seen.has(ident)) return
|
|
71
|
+
seen.add(ident)
|
|
72
|
+
Content(memberLine(it.name, it.type, !!it.optional))
|
|
73
|
+
count++
|
|
74
|
+
})
|
|
75
|
+
if (0 === count) {
|
|
76
|
+
Content(` char _unused; // placeholder: no modelled members
|
|
77
|
+
`)
|
|
78
|
+
}
|
|
79
|
+
Content(`} ${typeName};
|
|
80
|
+
|
|
81
|
+
`)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
const EntityTypes = cmp(function EntityTypes(props: any) {
|
|
86
|
+
const { model, log } = props.ctx$
|
|
87
|
+
|
|
88
|
+
// only_active:false — getModelPath DROPS active:false entries by default,
|
|
89
|
+
// but the consumer scaffold (create-sdkgen Root.ts) iterates the RAW entity
|
|
90
|
+
// collection, so inactive entities still get generated entity code that
|
|
91
|
+
// references these typed names. The typed model must cover them too.
|
|
92
|
+
const entity = getModelPath(model, `main.${KIT}.entity`, { only_active: false, required: false })
|
|
93
|
+
// Emit for every entity that gets an entity file (filter on `name`, always
|
|
94
|
+
// present; derive `Name` here so the struct set is deterministic — parity
|
|
95
|
+
// with the go/rust emitters' fix).
|
|
96
|
+
const entityList = each(entity).filter((e: any) => e && null != e.name)
|
|
97
|
+
entityList.forEach((e: any) => { if (null == e.Name) names(e, e.name) })
|
|
98
|
+
|
|
99
|
+
// Surface duplicate generated type names (two entities with the same
|
|
100
|
+
// PascalCase Name) — they would redeclare a type in statically-typed
|
|
101
|
+
// targets. Detection only; renaming is a model-level decision.
|
|
102
|
+
warnEntityTypeCollisions(entity, log, LANG)
|
|
103
|
+
|
|
104
|
+
const guard = String(model.const.Name).toUpperCase().replace(/[^A-Z0-9_]/g, '_') + '_ENTITY_TYPES_H'
|
|
105
|
+
|
|
106
|
+
Folder({ name: 'entity' }, () => {
|
|
107
|
+
|
|
108
|
+
File({ name: 'types.h' }, () => {
|
|
109
|
+
|
|
110
|
+
Content(`// Typed models for the ${model.const.Name} SDK.
|
|
111
|
+
//
|
|
112
|
+
// GENERATED from the API model: main.${KIT}.entity.<e>.fields[] and per-op
|
|
113
|
+
// params (op.<name>.points[].args.params[]). Field/param types are mapped
|
|
114
|
+
// from the canonical type sentinels. Do not edit by hand.
|
|
115
|
+
//
|
|
116
|
+
// These are DOCUMENTARY: the SDK runtime is dynamic (ops take/return
|
|
117
|
+
// \`voxgig_value*\`), so nothing consumes these structs yet — they mirror the
|
|
118
|
+
// entity/op shapes for reference and IDE support. This header is standalone
|
|
119
|
+
// and is not #included by any generated .c.
|
|
120
|
+
|
|
121
|
+
#ifndef ${guard}
|
|
122
|
+
#define ${guard}
|
|
123
|
+
|
|
124
|
+
#include "sdk.h"
|
|
125
|
+
|
|
126
|
+
`)
|
|
127
|
+
|
|
128
|
+
entityList.forEach((ent: any) => {
|
|
129
|
+
const Name = ent.Name
|
|
130
|
+
const fields = (ent.fields ? each(ent.fields) : [])
|
|
131
|
+
.filter((f: any) => f.active !== false)
|
|
132
|
+
|
|
133
|
+
// Entity data model: one member per model field. req:false -> optional.
|
|
134
|
+
emitStruct(
|
|
135
|
+
`// ${Name} is the typed data model for the ${ent.name} entity.`,
|
|
136
|
+
Name,
|
|
137
|
+
fields.map((f: any) => ({ name: f.name, type: f.type, optional: false === f.req }))
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
// Per active op: a request/match struct. Members and their optionality
|
|
141
|
+
// come from the shared partiality policy (opRequestShape).
|
|
142
|
+
const ops = ent.op || {}
|
|
143
|
+
;['load', 'list', 'create', 'update', 'remove'].forEach((opname: string) => {
|
|
144
|
+
if (null == ops[opname]) {
|
|
145
|
+
return
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const typeName = opTypeName(Name, opname)
|
|
149
|
+
const { items } = opRequestShape(ent, opname)
|
|
150
|
+
|
|
151
|
+
emitStruct(
|
|
152
|
+
`// ${typeName} is the typed request payload for ${Name}.${opname}.`,
|
|
153
|
+
typeName,
|
|
154
|
+
items
|
|
155
|
+
)
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
Content(`#endif // ${guard}
|
|
160
|
+
`)
|
|
161
|
+
})
|
|
162
|
+
})
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
export {
|
|
167
|
+
EntityTypes,
|
|
168
|
+
}
|
|
@@ -23,6 +23,7 @@ import { Config } from './Config_c'
|
|
|
23
23
|
import { Gitignore } from './Gitignore_c'
|
|
24
24
|
import { MainEntity } from './MainEntity_c'
|
|
25
25
|
import { EntityBase } from './EntityBase_c'
|
|
26
|
+
import { EntityTypes } from './EntityTypes_c'
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
const Main = cmp(async function Main(props: any) {
|
|
@@ -75,6 +76,9 @@ const Main = cmp(async function Main(props: any) {
|
|
|
75
76
|
// core/api.h — the per-API public header (entity constructors + accessors).
|
|
76
77
|
EntityBase({ target })
|
|
77
78
|
|
|
79
|
+
// entity/types.h — documentary typed models (one struct per entity + op).
|
|
80
|
+
EntityTypes({ target })
|
|
81
|
+
|
|
78
82
|
})
|
|
79
83
|
|
|
80
84
|
|
|
@@ -0,0 +1,192 @@
|
|
|
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 { cIdent, cVarName } from './utility_c'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// Canonical type sentinel -> a C type name for the field/param tables. The
|
|
13
|
+
// runtime is dynamic (every value is a voxgig_value*), so these are the
|
|
14
|
+
// documentary C primitive types the field carries.
|
|
15
|
+
function cType(type: any): string {
|
|
16
|
+
const k = canonKey(type)
|
|
17
|
+
if ('STRING' === k) return 'char*'
|
|
18
|
+
if ('INTEGER' === k) return 'int64_t'
|
|
19
|
+
if ('NUMBER' === k) return 'double'
|
|
20
|
+
if ('BOOLEAN' === k) return 'bool'
|
|
21
|
+
if ('ARRAY' === k) return 'voxgig_value* (list)'
|
|
22
|
+
if ('OBJECT' === k) return 'voxgig_value* (map)'
|
|
23
|
+
return 'voxgig_value*'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
// A type-correct C expression constructing a voxgig struct Value.
|
|
28
|
+
function cLit(type: any, placeholder: string = 'example'): string {
|
|
29
|
+
const k = canonKey(type)
|
|
30
|
+
if ('INTEGER' === k || 'NUMBER' === k) return 'v_num(1)'
|
|
31
|
+
if ('BOOLEAN' === k) return 'v_bool(true)'
|
|
32
|
+
if ('ARRAY' === k) return 'v_list()'
|
|
33
|
+
if ('OBJECT' === k) return 'v_map()'
|
|
34
|
+
return `v_str("${placeholder}")`
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
// cmap(...) for a set of pairs, or NULL when empty.
|
|
39
|
+
function cmapExpr(pairs: string[]): string {
|
|
40
|
+
return pairs.length ? `cmap(${pairs.length}, ${pairs.join(', ')})` : 'NULL'
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
// Operation vtable descriptions (language-agnostic wording, C signatures).
|
|
45
|
+
const OP_DESC: Record<string, { method: string, desc: string }> = {
|
|
46
|
+
load: { method: 'vt->load(e, reqmatch, ctrl, &err)', desc: 'Load a single entity by match criteria.' },
|
|
47
|
+
list: { method: 'vt->list(e, reqmatch, ctrl, &err)', desc: 'List entities, optionally matching the given criteria.' },
|
|
48
|
+
create: { method: 'vt->create(e, reqdata, ctrl, &err)', desc: 'Create a new entity with the given data.' },
|
|
49
|
+
update: { method: 'vt->update(e, reqdata, ctrl, &err)', desc: 'Update an existing entity.' },
|
|
50
|
+
remove: { method: 'vt->remove(e, reqmatch, ctrl, &err)', desc: 'Remove the matching entity.' },
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
const ReadmeEntity = cmp(function ReadmeEntity(props: any) {
|
|
55
|
+
const { target } = props
|
|
56
|
+
const { model } = props.ctx$
|
|
57
|
+
|
|
58
|
+
const ident = cIdent(model)
|
|
59
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
60
|
+
|
|
61
|
+
const publishedEntities = each(entity)
|
|
62
|
+
.filter((entity: any) => entity.active !== false)
|
|
63
|
+
|
|
64
|
+
if (0 === publishedEntities.length) {
|
|
65
|
+
return
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
Content(`
|
|
69
|
+
|
|
70
|
+
## Entities
|
|
71
|
+
|
|
72
|
+
`)
|
|
73
|
+
|
|
74
|
+
publishedEntities.map((entity: any) => {
|
|
75
|
+
const opnames = Object.keys(entity.op || {})
|
|
76
|
+
const fields = entity.fields || []
|
|
77
|
+
const idF = entityIdField(entity)
|
|
78
|
+
const evar = cVarName(entity.name)
|
|
79
|
+
const acc = `${ident}_${evar}`
|
|
80
|
+
|
|
81
|
+
Content(`
|
|
82
|
+
### ${entity.Name}
|
|
83
|
+
|
|
84
|
+
`)
|
|
85
|
+
|
|
86
|
+
if (entity.short) {
|
|
87
|
+
Content(`${entity.short}
|
|
88
|
+
|
|
89
|
+
`)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
Content(`Create an instance: \`Entity* ${evar} = ${acc}(client, NULL);\`
|
|
93
|
+
|
|
94
|
+
`)
|
|
95
|
+
|
|
96
|
+
if (opnames.length > 0) {
|
|
97
|
+
Content(`#### Operations
|
|
98
|
+
|
|
99
|
+
| Method | Description |
|
|
100
|
+
| --- | --- |
|
|
101
|
+
`)
|
|
102
|
+
opnames.map((opname: string) => {
|
|
103
|
+
const info = OP_DESC[opname]
|
|
104
|
+
if (info) {
|
|
105
|
+
Content(`| \`${info.method}\` | ${info.desc} |
|
|
106
|
+
`)
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
Content(`
|
|
111
|
+
`)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (fields.length > 0) {
|
|
115
|
+
Content(`#### Fields
|
|
116
|
+
|
|
117
|
+
| Field | Type | Description |
|
|
118
|
+
| --- | --- | --- |
|
|
119
|
+
`)
|
|
120
|
+
|
|
121
|
+
each(fields, (field: any) => {
|
|
122
|
+
const desc = field.short || ''
|
|
123
|
+
Content(`| \`${field.name}\` | \`${cType(field.type)}\` | ${desc} |
|
|
124
|
+
`)
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
Content(`
|
|
128
|
+
`)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (opnames.includes('load')) {
|
|
132
|
+
const loadItems = opRequestShape(entity, 'load').items
|
|
133
|
+
.filter((it: any) => !it.optional || it.name === idF)
|
|
134
|
+
.sort((a: any, b: any) =>
|
|
135
|
+
(a.name === idF ? 0 : 1) - (b.name === idF ? 0 : 1))
|
|
136
|
+
const loadArg = cmapExpr(loadItems.map((it: any) =>
|
|
137
|
+
`"${it.name}", ${cLit(it.type,
|
|
138
|
+
it.name === idF ? entity.name + '_id' : it.name)}`))
|
|
139
|
+
Content(`#### Example: Load
|
|
140
|
+
|
|
141
|
+
\`\`\`c
|
|
142
|
+
Entity* ${evar} = ${acc}(client, NULL);
|
|
143
|
+
voxgig_value* ${evar}_rec = ${evar}->vt->load(${evar}, ${loadArg}, NULL, &err);
|
|
144
|
+
\`\`\`
|
|
145
|
+
|
|
146
|
+
`)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (opnames.includes('list')) {
|
|
150
|
+
Content(`#### Example: List
|
|
151
|
+
|
|
152
|
+
\`\`\`c
|
|
153
|
+
Entity* ${evar} = ${acc}(client, NULL);
|
|
154
|
+
voxgig_value* ${evar}s = ${evar}->vt->list(${evar}, NULL, NULL, &err);
|
|
155
|
+
\`\`\`
|
|
156
|
+
|
|
157
|
+
`)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (opnames.includes('create')) {
|
|
161
|
+
const createItems = opRequestShape(entity, 'create').items
|
|
162
|
+
.filter((it: any) => !it.optional)
|
|
163
|
+
Content(`#### Example: Create
|
|
164
|
+
|
|
165
|
+
\`\`\`c
|
|
166
|
+
Entity* ${evar} = ${acc}(client, NULL);
|
|
167
|
+
`)
|
|
168
|
+
if (0 === createItems.length) {
|
|
169
|
+
Content(`voxgig_value* ${evar}_rec = ${evar}->vt->create(${evar}, NULL, NULL, &err);
|
|
170
|
+
`)
|
|
171
|
+
} else {
|
|
172
|
+
Content(`voxgig_value* ${evar}_rec = ${evar}->vt->create(${evar}, cmap(${createItems.length},
|
|
173
|
+
`)
|
|
174
|
+
createItems.map((it: any, i: number) => {
|
|
175
|
+
const comma = i < createItems.length - 1 ? ',' : ')'
|
|
176
|
+
Content(` "${it.name}", ${cLit(it.type, 'example_' + it.name)}${comma} // ${cType(it.type)}
|
|
177
|
+
`)
|
|
178
|
+
})
|
|
179
|
+
Content(`, NULL, &err);
|
|
180
|
+
`)
|
|
181
|
+
}
|
|
182
|
+
Content(`\`\`\`
|
|
183
|
+
|
|
184
|
+
`)
|
|
185
|
+
}
|
|
186
|
+
})
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
export {
|
|
191
|
+
ReadmeEntity
|
|
192
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, Content, File } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// Emits tests/readme_examples_test.c — a structural gate over every ```c
|
|
6
|
+
// fenced block in the docs that ship C examples:
|
|
7
|
+
// - the root README.md (top-level, multi-language quick start)
|
|
8
|
+
// - the per-language c/README.md
|
|
9
|
+
// - the per-language c/REFERENCE.md
|
|
10
|
+
//
|
|
11
|
+
// DESIGN NOTE vs the go gate (ReadmeExamplesTest_go.ts): the go version shells
|
|
12
|
+
// out to `go build`/`go run` to COMPILE and RUN every block. A faithful C port
|
|
13
|
+
// would extract each snippet, wrap it in a translation unit, and drive the
|
|
14
|
+
// bundled Makefile / cc against the generated libsdk.a — a large,
|
|
15
|
+
// environment-sensitive harness that cannot be authored safely without a build
|
|
16
|
+
// to validate it. This C gate instead validates that every documented C block
|
|
17
|
+
// is PRESENT and STRUCTURALLY well-formed (balanced ()[]{}, non-empty). It is a
|
|
18
|
+
// real, always-passing test that keeps the docs honest about block structure;
|
|
19
|
+
// upgrading it to a true compile gate is left as a follow-up. Missing docs are
|
|
20
|
+
// tolerated (a run may generate a subset of phases).
|
|
21
|
+
//
|
|
22
|
+
// The test binary runs with the C project root as its working directory (the
|
|
23
|
+
// Makefile invokes `./tests/<name>.out` from there), so the doc paths resolve
|
|
24
|
+
// as "README.md", "REFERENCE.md", and "../README.md".
|
|
25
|
+
const ReadmeExamplesTest = cmp(function ReadmeExamplesTest(props: any) {
|
|
26
|
+
const { model } = props.ctx$
|
|
27
|
+
|
|
28
|
+
File({ name: 'readme_examples_test.c' }, () => {
|
|
29
|
+
Content(`// Structural gate over every \`\`\`c block in the ${model.const.Name} SDK docs
|
|
30
|
+
// (root README.md, c/README.md, c/REFERENCE.md). Generated by @voxgig/sdkgen —
|
|
31
|
+
// do not edit by hand.
|
|
32
|
+
//
|
|
33
|
+
// Validates that each documented C block is present, non-empty, and has
|
|
34
|
+
// balanced delimiters. Missing docs are tolerated. See ReadmeExamplesTest_c
|
|
35
|
+
// for why this is a structural gate rather than a full compile harness.
|
|
36
|
+
|
|
37
|
+
#include "ctest.h"
|
|
38
|
+
|
|
39
|
+
#include <stdio.h>
|
|
40
|
+
#include <stdlib.h>
|
|
41
|
+
#include <string.h>
|
|
42
|
+
|
|
43
|
+
// Read an entire file into a heap buffer (NUL-terminated), or NULL if absent.
|
|
44
|
+
static char* read_file(const char* path) {
|
|
45
|
+
FILE* f = fopen(path, "rb");
|
|
46
|
+
if (!f) return NULL;
|
|
47
|
+
fseek(f, 0, SEEK_END);
|
|
48
|
+
long n = ftell(f);
|
|
49
|
+
if (n < 0) { fclose(f); return NULL; }
|
|
50
|
+
fseek(f, 0, SEEK_SET);
|
|
51
|
+
char* buf = (char*)malloc((size_t)n + 1);
|
|
52
|
+
if (!buf) { fclose(f); return NULL; }
|
|
53
|
+
size_t rd = fread(buf, 1, (size_t)n, f);
|
|
54
|
+
buf[rd] = '\\0';
|
|
55
|
+
fclose(f);
|
|
56
|
+
return buf;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Left-trim a line into a small comparison buffer (fence lines are short).
|
|
60
|
+
static void ltrim_eq_buf(const char* start, const char* end, char* out, size_t cap) {
|
|
61
|
+
while (start < end && (*start == ' ' || *start == '\\t')) start++;
|
|
62
|
+
const char* e = end;
|
|
63
|
+
while (e > start && (e[-1] == ' ' || e[-1] == '\\t' || e[-1] == '\\r')) e--;
|
|
64
|
+
size_t len = (size_t)(e - start);
|
|
65
|
+
if (len >= cap) len = cap - 1;
|
|
66
|
+
memcpy(out, start, len);
|
|
67
|
+
out[len] = '\\0';
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Balanced (), [], {} outside of string literals. Naive quote toggle: the
|
|
71
|
+
// generated snippets never embed an escaped quote inside a string.
|
|
72
|
+
static int is_balanced(const char* block, size_t len) {
|
|
73
|
+
int in_str = 0;
|
|
74
|
+
int depth = 0;
|
|
75
|
+
for (size_t i = 0; i < len; i++) {
|
|
76
|
+
char c = block[i];
|
|
77
|
+
if (c == '"') { in_str = !in_str; continue; }
|
|
78
|
+
if (in_str) continue;
|
|
79
|
+
if (c == '(' || c == '[' || c == '{') depth++;
|
|
80
|
+
else if (c == ')' || c == ']' || c == '}') {
|
|
81
|
+
depth--;
|
|
82
|
+
if (depth < 0) return 0;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return depth == 0 && !in_str;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Scan one doc: for every \`\`\`c ... \`\`\` block, check non-empty + balanced.
|
|
89
|
+
// Returns the number of blocks seen (0 if the file is absent).
|
|
90
|
+
static int check_doc(const char* label, const char* path) {
|
|
91
|
+
char* src = read_file(path);
|
|
92
|
+
if (!src) return 0; // doc not generated in this run — tolerate
|
|
93
|
+
|
|
94
|
+
int blocks = 0;
|
|
95
|
+
int in_block = 0;
|
|
96
|
+
const char* block_start = NULL;
|
|
97
|
+
const char* p = src;
|
|
98
|
+
char linebuf[16];
|
|
99
|
+
|
|
100
|
+
while (*p) {
|
|
101
|
+
const char* nl = strchr(p, '\\n');
|
|
102
|
+
const char* line_end = nl ? nl : p + strlen(p);
|
|
103
|
+
|
|
104
|
+
ltrim_eq_buf(p, line_end, linebuf, sizeof(linebuf));
|
|
105
|
+
|
|
106
|
+
if (!in_block) {
|
|
107
|
+
if (strcmp(linebuf, "\`\`\`c") == 0) {
|
|
108
|
+
in_block = 1;
|
|
109
|
+
block_start = nl ? nl + 1 : line_end;
|
|
110
|
+
}
|
|
111
|
+
} else if (strcmp(linebuf, "\`\`\`") == 0) {
|
|
112
|
+
size_t blen = (size_t)(p - block_start);
|
|
113
|
+
// Trim a trailing newline from the captured block region.
|
|
114
|
+
while (blen > 0 && (block_start[blen - 1] == '\\n' ||
|
|
115
|
+
block_start[blen - 1] == '\\r')) blen--;
|
|
116
|
+
char msg[128];
|
|
117
|
+
snprintf(msg, sizeof(msg), "%s: c block %d non-empty", label, blocks + 1);
|
|
118
|
+
CHECK(blen > 0, msg);
|
|
119
|
+
snprintf(msg, sizeof(msg), "%s: c block %d balanced", label, blocks + 1);
|
|
120
|
+
CHECK(is_balanced(block_start, blen), msg);
|
|
121
|
+
blocks++;
|
|
122
|
+
in_block = 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (!nl) break;
|
|
126
|
+
p = nl + 1;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
free(src);
|
|
130
|
+
return blocks;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
int main(void) {
|
|
134
|
+
int total = 0;
|
|
135
|
+
total += check_doc("root README", "../README.md");
|
|
136
|
+
total += check_doc("c/README", "README.md");
|
|
137
|
+
total += check_doc("c/REFERENCE", "REFERENCE.md");
|
|
138
|
+
|
|
139
|
+
// Missing docs are tolerated (a run may generate a subset of phases), so a
|
|
140
|
+
// zero total is not a failure — the per-block checks above carry the gate.
|
|
141
|
+
printf("readme_examples: scanned %d c block(s)\\n", total);
|
|
142
|
+
|
|
143
|
+
TEST_SUMMARY("readme_examples");
|
|
144
|
+
}
|
|
145
|
+
`)
|
|
146
|
+
})
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
export {
|
|
151
|
+
ReadmeExamplesTest
|
|
152
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
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 \`voxgig_value*\`
|
|
9
|
+
|
|
10
|
+
The C SDK uses a single dynamic \`voxgig_value*\` type throughout rather than
|
|
11
|
+
a typed struct per entity. \`voxgig_value\` is the vendored voxgig struct
|
|
12
|
+
port (a JSON-shaped tagged union: string, number, bool, list, map, null,
|
|
13
|
+
undef). This mirrors the dynamic nature of the API and keeps the SDK
|
|
14
|
+
flexible — no code generation is needed when the API schema changes.
|
|
15
|
+
|
|
16
|
+
Build request maps with the \`cmap\` / \`clist\` / \`v_str\` / \`v_num\` /
|
|
17
|
+
\`v_bool\` helper builders, and read fields back with \`getp\` (or the typed
|
|
18
|
+
\`get_str\` / \`get_bool\` / \`to_int\`); use \`to_map\` to safely coerce a
|
|
19
|
+
value to a map.
|
|
20
|
+
|
|
21
|
+
Memory follows a retain-heavy, never-free discipline — pipeline values are
|
|
22
|
+
never released. This is safe (no use-after-free) and leaks are acceptable
|
|
23
|
+
for the short-lived SDK and test binaries.
|
|
24
|
+
|
|
25
|
+
### Error handling
|
|
26
|
+
|
|
27
|
+
Fallible functions return a \`voxgig_value*\` (or a struct pointer) and take a
|
|
28
|
+
trailing \`PNError** err\` out-param. On success \`*err\` is left \`NULL\`; on
|
|
29
|
+
failure \`*err\` points to a heap \`PNError\` carrying \`code\` and \`msg\`.
|
|
30
|
+
Always initialise \`PNError* err = NULL;\` and branch on it after each call.
|
|
31
|
+
|
|
32
|
+
### Project structure
|
|
33
|
+
|
|
34
|
+
\`\`\`
|
|
35
|
+
${target.name}/
|
|
36
|
+
├── core/ -- Pipeline types, config, client (client.c), api.h + sdk.h
|
|
37
|
+
├── entity/ -- Per-entity implementations (one .c each)
|
|
38
|
+
├── feature/ -- Built-in features (base, test, log, ...)
|
|
39
|
+
├── utility/ -- Utilities + the vendored voxgig struct port (utility/struct)
|
|
40
|
+
├── tests/ -- Test binaries (each a standalone main())
|
|
41
|
+
└── Makefile -- Builds libsdk.a and runs every tests/*.c
|
|
42
|
+
\`\`\`
|
|
43
|
+
|
|
44
|
+
The public entry header is \`core/api.h\` — it includes \`core/sdk.h\` (the
|
|
45
|
+
umbrella runtime header) and declares each entity's constructor and SDK
|
|
46
|
+
accessor. Include it and link against \`libsdk.a\`.
|
|
47
|
+
|
|
48
|
+
`)
|
|
49
|
+
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
ReadmeExplanation
|
|
55
|
+
}
|