@voxgig/sdkgen 4.10.0 → 4.11.0
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/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +330 -0
- package/project/.sdk/model/target/c.aon +15 -2
- package/project/.sdk/model/target/cpp.aon +18 -0
- package/project/.sdk/model/target/lua.aon +17 -0
- package/project/.sdk/model/target/ocaml.aon +48 -5
- package/project/.sdk/model/target/zig.aon +30 -4
- package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
- package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
- package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
- package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
- package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
- package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
- package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
- package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
- package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
- package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
- package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
- package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
- package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
- package/project/.sdk/tm/c/Makefile +58 -9
- package/project/.sdk/tm/c/core/sdk.h +10 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
- package/project/.sdk/tm/c/feature/secrets.c +797 -0
- package/project/.sdk/tm/c/feature/secrets.h +46 -0
- package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
- package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
- package/project/.sdk/tm/cpp/Makefile +48 -4
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
- package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
- package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
- package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
- package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
- package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
- package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
- package/project/.sdk/tm/lua/Makefile +15 -4
- package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
- package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
- package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
- package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
- package/project/.sdk/tm/ocaml/Makefile +52 -8
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
- package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
- package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
- package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
- package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
- package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
- package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
- package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
- package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
- package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
- package/project/sdkgen-package.json +1 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
Content,
|
|
4
4
|
File,
|
|
5
|
+
Folder,
|
|
5
6
|
cmp,
|
|
6
7
|
configDefinition,
|
|
7
8
|
configReprSetting,
|
|
@@ -26,6 +27,312 @@ import {
|
|
|
26
27
|
} from './utility_c'
|
|
27
28
|
|
|
28
29
|
|
|
30
|
+
// PLUGIN DEFINITIONS PER FEATURE (the c peer of Config_go's featurePlugins
|
|
31
|
+
// map and Main_rust's generated plugins.rs).
|
|
32
|
+
//
|
|
33
|
+
// Upstream sekreto retired its self-registration registry for voxgig/plugin
|
|
34
|
+
// definitions: a provider kind the caller did not pass in `sek_options.
|
|
35
|
+
// plugins` is unknown to that Sekreto. So the model's choice of plugin
|
|
36
|
+
// groups IS the SDK's provider vocabulary, and the generated code names each
|
|
37
|
+
// active group's constructor symbol (`def: c:` in model/feature/secrets.aon
|
|
38
|
+
// - `sek_plugin_hashicorp`, the `Definition *(void)` each vendored kind
|
|
39
|
+
// file defines) and nothing else. A symbol named here whose file the plugin
|
|
40
|
+
// trim removed is an unresolved reference at link time - a loud failure,
|
|
41
|
+
// which is the right kind.
|
|
42
|
+
//
|
|
43
|
+
// One entry per ACTIVE feature that declares a `plugin` map at all, read
|
|
44
|
+
// with `only_active: false` (pluginExcludesFor's subtlety: the feature
|
|
45
|
+
// object a component is handed has already been filtered, so a feature
|
|
46
|
+
// whose groups are all off would otherwise look like one with no plugin
|
|
47
|
+
// machinery, and its kinds.c - which the Makefile reads as the feature's
|
|
48
|
+
// WIRING - would not be emitted).
|
|
49
|
+
function pluginDefinitions(model: Model, target: any):
|
|
50
|
+
Record<string, { syms: string[], groups: number }> {
|
|
51
|
+
const out: Record<string, { syms: string[], groups: number }> = {}
|
|
52
|
+
const feature = targetFeatures(model, target)
|
|
53
|
+
|
|
54
|
+
each(feature, (f: any) => {
|
|
55
|
+
const declared = getModelPath(model,
|
|
56
|
+
`main.${KIT}.feature.${f.name}.plugin`,
|
|
57
|
+
{ required: false, only_active: false }) || {}
|
|
58
|
+
if (0 === Object.keys(declared).length) return
|
|
59
|
+
|
|
60
|
+
const syms = new Set<string>()
|
|
61
|
+
let groups = 0
|
|
62
|
+
each(declared, (plugin: any) => {
|
|
63
|
+
// Filter on `active` HERE rather than trusting the feature object to
|
|
64
|
+
// arrive filtered (Config_go's note): getting this wrong names a
|
|
65
|
+
// constructor for a file the trim just deleted.
|
|
66
|
+
if (true !== plugin.active) return
|
|
67
|
+
const defs = Object.keys(plugin.def?.[target.name] || {})
|
|
68
|
+
if (0 < defs.length) groups++
|
|
69
|
+
for (const sym of defs) syms.add(sym)
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
out[f.name] = { syms: Array.from(syms).sort(), groups }
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
return out
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
// feature/<name>/kinds.c - GENERATED, one per plugin-bearing active feature.
|
|
80
|
+
//
|
|
81
|
+
// It cannot live in core/config.c: that translation unit must not name the
|
|
82
|
+
// vendored voxgig/plugin's `Definition` type, which is why sdk.h types the
|
|
83
|
+
// accessor as void** (the same reason go hides its list behind []any). It
|
|
84
|
+
// sits one level ABOVE the vendored sekreto/, plugin/ and plugins/
|
|
85
|
+
// directories on purpose: the vendoring guard fails any non-vendored file
|
|
86
|
+
// inside a vendor dir, and this one is generated.
|
|
87
|
+
//
|
|
88
|
+
// Beside it goes feature/<name>/kinds.mk, the feature's BUILD WIRING: a
|
|
89
|
+
// generated make fragment that tm/c/Makefile reads through
|
|
90
|
+
// `-include $(wildcard feature/*/kinds.mk)`. The Makefile itself names no
|
|
91
|
+
// feature (the `nothing left behind names a dropped feature` guard holds a
|
|
92
|
+
// trimmed template tree to that), so everything a payload needs from the
|
|
93
|
+
// build is stated here, from the model: the vendored cores to compile, the
|
|
94
|
+
// suite to run, and - only when a plugin group is active - the plugin layer
|
|
95
|
+
// with the external libraries it brings. A tree whose model never
|
|
96
|
+
// activated the feature has no fragment, compiles none of the payload and
|
|
97
|
+
// links libc alone. Both files are emitted for an active feature with NO
|
|
98
|
+
// active group as well - an [env, memory] chain still needs the sekreto
|
|
99
|
+
// core - with an empty definitions list and no plugin layer.
|
|
100
|
+
//
|
|
101
|
+
// For `secrets` it additionally carries `secrets_rawfetch`, the
|
|
102
|
+
// token-exchange transport of last resort (go's rawExchangeFetch). The c
|
|
103
|
+
// core ships no HTTP client (utility/fetcher.c), and the decision for this
|
|
104
|
+
// target is to bundle one INSIDE the gated feature: libcurl, compiled in
|
|
105
|
+
// only when a plugin group is active, so that an SDK without secrets - or
|
|
106
|
+
// with secrets and a chain of built-ins - still ships zero external
|
|
107
|
+
// dependencies. The Makefile adds -lcurl on the same condition (a kind file
|
|
108
|
+
// present), so the two cannot disagree. With no group active the exchange
|
|
109
|
+
// still works through a caller-supplied options.system.fetch, which every
|
|
110
|
+
// live c request already lives under; only the fallback is missing, and it
|
|
111
|
+
// says so.
|
|
112
|
+
const FeaturePlugins = cmp(async function FeaturePlugins(props: any) {
|
|
113
|
+
const ctx$ = props.ctx$
|
|
114
|
+
const target = props.target
|
|
115
|
+
const model: Model = ctx$.model
|
|
116
|
+
|
|
117
|
+
const defs = pluginDefinitions(model, target)
|
|
118
|
+
if (0 === Object.keys(defs).length) return
|
|
119
|
+
|
|
120
|
+
Folder({ name: 'feature' }, () => {
|
|
121
|
+
for (const fname of Object.keys(defs).sort()) {
|
|
122
|
+
const { syms, groups } = defs[fname]
|
|
123
|
+
|
|
124
|
+
Folder({ name: fname }, () => {
|
|
125
|
+
// The build wiring (see above). Paths are SDK-root-relative, as the
|
|
126
|
+
// Makefile's own globs are. `feature/<name>.c` is NOT listed: the
|
|
127
|
+
// Makefile's feature/*.c glob already compiles every feature's own
|
|
128
|
+
// file, and its headers are on INC through the generic payload
|
|
129
|
+
// -I paths.
|
|
130
|
+
File({ name: 'kinds.mk' }, () => {
|
|
131
|
+
Content(`# Generated beside kinds.c: what the \`${fname}\` feature needs from the
|
|
132
|
+
# build, read by the Makefile through \`-include $(wildcard feature/*/kinds.mk)\`.
|
|
133
|
+
# Without this file none of the feature's vendored payload is compiled or
|
|
134
|
+
# linked. Do not hand-edit - change the model and regenerate.
|
|
135
|
+
|
|
136
|
+
# The vendored cores every chain needs (sekreto and the voxgig/plugin host it
|
|
137
|
+
# is built on), and the feature's gated suite.
|
|
138
|
+
FEATURE_SRCS += $(wildcard feature/${fname}/sekreto/*.c feature/${fname}/plugin/*.c)
|
|
139
|
+
FEATURE_TEST_SRCS += $(wildcard tests/feature/${fname}/*.c)
|
|
140
|
+
`)
|
|
141
|
+
if (0 === groups) {
|
|
142
|
+
Content(`
|
|
143
|
+
# No plugin group is active: the plugin layer (the kinds, the socket HTTP
|
|
144
|
+
# client and its OpenSSL binding, the encoders, the clock and the
|
|
145
|
+
# child-process launcher) is on disk but NOT compiled, and nothing beyond
|
|
146
|
+
# libc is linked. A chain of built-ins needs none of it.
|
|
147
|
+
`)
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
Content(`
|
|
151
|
+
# A plugin group is active: the selected kinds and the five shared helpers
|
|
152
|
+
# they call (the socket HTTP client and its OpenSSL binding, the encoders,
|
|
153
|
+
# the clock and the child-process launcher), with the two external
|
|
154
|
+
# libraries they bring - OpenSSL for the vault kinds' TLS, libcurl for the
|
|
155
|
+
# token-exchange transport of last resort in kinds.c.
|
|
156
|
+
FEATURE_SRCS += $(wildcard feature/${fname}/plugins/*.c)
|
|
157
|
+
LDLIBS += -lssl -lcrypto -lcurl
|
|
158
|
+
`)
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
File({ name: 'kinds.c' }, () => {
|
|
163
|
+
Content(`// Generated: the plugin definitions the model selected for the \`${fname}\`
|
|
164
|
+
// feature's provider chain (the c peer of go's core.FeaturePlugins), read
|
|
165
|
+
// back by core/config.c's feature_plugins("${fname}", &n).
|
|
166
|
+
//
|
|
167
|
+
// GENERATED beside kinds.mk, the build wiring tm/c/Makefile includes. Do
|
|
168
|
+
// not hand-edit - change the model's plugin groups and regenerate.
|
|
169
|
+
|
|
170
|
+
#include "sdk.h"
|
|
171
|
+
|
|
172
|
+
#include "sekreto.h"
|
|
173
|
+
|
|
174
|
+
#include <stddef.h>
|
|
175
|
+
#include <stdlib.h>
|
|
176
|
+
#include <string.h>
|
|
177
|
+
|
|
178
|
+
// One prototype per selected kind: the \`Definition *(void)\` constructor
|
|
179
|
+
// its vendored file defines (plugins/sekretoplugins.h declares all ten;
|
|
180
|
+
// naming only these keeps the link line the boundary upstream intends).
|
|
181
|
+
${syms.map((sym: string) => `Definition* ${sym}(void);
|
|
182
|
+
`).join('')}
|
|
183
|
+
${0 === syms.length ?
|
|
184
|
+
`// No plugin group is active: the chain can name the four built-in kinds
|
|
185
|
+
// (env, memory, dotenv, file) and a custom provider, and nothing else.
|
|
186
|
+
void** ${fname}_plugins(size_t* n) {
|
|
187
|
+
*n = 0;
|
|
188
|
+
return NULL;
|
|
189
|
+
}
|
|
190
|
+
` :
|
|
191
|
+
`static void* ${fname.toUpperCase()}_KINDS[${syms.length}];
|
|
192
|
+
|
|
193
|
+
void** ${fname}_plugins(size_t* n) {
|
|
194
|
+
${syms.map((sym: string, i: number) => ` ${fname.toUpperCase()}_KINDS[${i}] = ${sym}();
|
|
195
|
+
`).join('')} *n = ${syms.length};
|
|
196
|
+
return ${fname.toUpperCase()}_KINDS;
|
|
197
|
+
}
|
|
198
|
+
`}`)
|
|
199
|
+
|
|
200
|
+
if ('secrets' !== fname) return
|
|
201
|
+
|
|
202
|
+
if (0 === groups) {
|
|
203
|
+
Content(`
|
|
204
|
+
// THE EXCHANGE TRANSPORT OF LAST RESORT, when no plugin group is active:
|
|
205
|
+
// there is none. The c core ships no HTTP client, and libcurl is bundled
|
|
206
|
+
// with the plugin groups only (see tm/c/Makefile), so a token purchase
|
|
207
|
+
// needs options.system.fetch - the seam every live c request already uses.
|
|
208
|
+
// Reached only by an exchange whose caller supplied no transport; a chain
|
|
209
|
+
// that resolves a static credential never comes here.
|
|
210
|
+
voxgig_value* secrets_rawfetch(Context* ctx, const char* url,
|
|
211
|
+
voxgig_value* fetchdef, PNError** err) {
|
|
212
|
+
(void)url; (void)fetchdef;
|
|
213
|
+
*err = context_make_error(ctx, "secrets_no_transport",
|
|
214
|
+
"secrets: the token exchange has no HTTP transport: this SDK selected no "
|
|
215
|
+
"secrets plugin group, so libcurl is not linked; supply "
|
|
216
|
+
"options.system.fetch or activate a plugin group");
|
|
217
|
+
return NULL;
|
|
218
|
+
}
|
|
219
|
+
`)
|
|
220
|
+
return
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
Content(`
|
|
224
|
+
// THE EXCHANGE TRANSPORT OF LAST RESORT (go's rawExchangeFetch): plain
|
|
225
|
+
// libcurl, answering the same transport-shaped map the system.fetch seam
|
|
226
|
+
// promises ({status, statusText, headers, json(), body}). It exists so an
|
|
227
|
+
// exchange works with ordinary SDK options - requiring a custom transport
|
|
228
|
+
// for the COMMON case would refuse every live token purchase before a
|
|
229
|
+
// request was made. Deliberately NOT the SDK transport: that is what the
|
|
230
|
+
// secrets feature wraps, and sending the token request back through it
|
|
231
|
+
// would recurse on the first expiry.
|
|
232
|
+
//
|
|
233
|
+
// libcurl is linked because a plugin group is active in this model; the
|
|
234
|
+
// Makefile adds -lcurl on exactly that condition.
|
|
235
|
+
|
|
236
|
+
#include <curl/curl.h>
|
|
237
|
+
|
|
238
|
+
typedef struct {
|
|
239
|
+
char* data;
|
|
240
|
+
size_t len;
|
|
241
|
+
} SecretsBuf;
|
|
242
|
+
|
|
243
|
+
static size_t secrets_curl_write(char* ptr, size_t size, size_t nmemb, void* ud) {
|
|
244
|
+
SecretsBuf* b = (SecretsBuf*)ud;
|
|
245
|
+
size_t add = size * nmemb;
|
|
246
|
+
char* grown = (char*)realloc(b->data, b->len + add + 1);
|
|
247
|
+
if (NULL == grown) return 0;
|
|
248
|
+
b->data = grown;
|
|
249
|
+
memcpy(b->data + b->len, ptr, add);
|
|
250
|
+
b->len += add;
|
|
251
|
+
b->data[b->len] = '\\0';
|
|
252
|
+
return add;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
voxgig_value* secrets_rawfetch(Context* ctx, const char* url,
|
|
256
|
+
voxgig_value* fetchdef, PNError** err) {
|
|
257
|
+
static bool inited = false;
|
|
258
|
+
*err = NULL;
|
|
259
|
+
if (!inited) {
|
|
260
|
+
curl_global_init(CURL_GLOBAL_DEFAULT);
|
|
261
|
+
inited = true;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
CURL* curl = curl_easy_init();
|
|
265
|
+
if (NULL == curl) {
|
|
266
|
+
*err = context_make_error(ctx, "secrets_transport", "secrets: curl_easy_init failed");
|
|
267
|
+
return NULL;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
const char* method = get_str(fetchdef, "method");
|
|
271
|
+
if (NULL == method || '\\0' == method[0]) method = "POST";
|
|
272
|
+
|
|
273
|
+
struct curl_slist* hdrs = NULL;
|
|
274
|
+
voxgig_value* headers = getp(fetchdef, "headers");
|
|
275
|
+
if (voxgig_is_map(headers)) {
|
|
276
|
+
voxgig_map* hm = voxgig_as_map(headers);
|
|
277
|
+
for (size_t i = 0; i < hm->len; i++) {
|
|
278
|
+
if (!voxgig_is_string(hm->entries[i].value)) continue;
|
|
279
|
+
size_t klen = strlen(hm->entries[i].key);
|
|
280
|
+
const char* v = voxgig_as_string(hm->entries[i].value);
|
|
281
|
+
char* line = (char*)malloc(klen + 2 + strlen(v) + 1);
|
|
282
|
+
sprintf(line, "%s: %s", hm->entries[i].key, v);
|
|
283
|
+
hdrs = curl_slist_append(hdrs, line);
|
|
284
|
+
free(line);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
SecretsBuf body = {NULL, 0};
|
|
289
|
+
curl_easy_setopt(curl, CURLOPT_URL, url);
|
|
290
|
+
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, method);
|
|
291
|
+
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, hdrs);
|
|
292
|
+
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L);
|
|
293
|
+
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, secrets_curl_write);
|
|
294
|
+
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body);
|
|
295
|
+
const char* reqbody = get_str(fetchdef, "body");
|
|
296
|
+
if (NULL != reqbody) {
|
|
297
|
+
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, reqbody);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
CURLcode rc = curl_easy_perform(curl);
|
|
301
|
+
long status = 0;
|
|
302
|
+
if (CURLE_OK == rc) {
|
|
303
|
+
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status);
|
|
304
|
+
}
|
|
305
|
+
curl_slist_free_all(hdrs);
|
|
306
|
+
curl_easy_cleanup(curl);
|
|
307
|
+
|
|
308
|
+
if (CURLE_OK != rc) {
|
|
309
|
+
char msg[512];
|
|
310
|
+
snprintf(msg, sizeof(msg), "secrets: token exchange transport failed: %s (URL was: \\"%s\\")",
|
|
311
|
+
curl_easy_strerror(rc), url);
|
|
312
|
+
free(body.data);
|
|
313
|
+
*err = context_make_error(ctx, "secrets_transport", msg);
|
|
314
|
+
return NULL;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const char* text = body.data ? body.data : "";
|
|
318
|
+
voxgig_value* parsed = json_parse(text);
|
|
319
|
+
voxgig_value* out = cmap(5,
|
|
320
|
+
"status", v_num((double)status),
|
|
321
|
+
"statusText", v_str(status >= 400 ? "ERR" : "OK"),
|
|
322
|
+
"headers", v_map(),
|
|
323
|
+
"json", json_thunk(parsed),
|
|
324
|
+
"body", v_str(text));
|
|
325
|
+
free(body.data);
|
|
326
|
+
return out;
|
|
327
|
+
}
|
|
328
|
+
`)
|
|
329
|
+
})
|
|
330
|
+
})
|
|
331
|
+
}
|
|
332
|
+
})
|
|
333
|
+
})
|
|
334
|
+
|
|
335
|
+
|
|
29
336
|
// core/config.c: make_config() builds the embedded API model as a Value;
|
|
30
337
|
// make_feature(name) is the N-feature-safe factory the client uses to
|
|
31
338
|
// instantiate features named in the options (mirrors Config_rust).
|
|
@@ -226,11 +533,41 @@ Feature* make_feature(const char* name) {
|
|
|
226
533
|
|
|
227
534
|
Content(` return feature_base_new();
|
|
228
535
|
}
|
|
536
|
+
`)
|
|
537
|
+
|
|
538
|
+
// The plugin-definitions accessor (sdk.h feature_plugins), EMITTED
|
|
539
|
+
// UNCONDITIONALLY so the prototype in sdk.h always has a definition,
|
|
540
|
+
// and EMPTY unless a plugin-bearing feature is active: each such
|
|
541
|
+
// feature's list lives in its generated feature/<name>/kinds.c (see
|
|
542
|
+
// FeaturePlugins above), which this dispatches to by name, so this
|
|
543
|
+
// translation unit never names the vendored plugin's types.
|
|
544
|
+
const plugged = Object.keys(pluginDefinitions(model, target)).sort()
|
|
545
|
+
|
|
546
|
+
Content(`
|
|
547
|
+
`)
|
|
548
|
+
for (const fname of plugged) {
|
|
549
|
+
Content(`void** ${fname}_plugins(size_t* n);
|
|
550
|
+
`)
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
Content(`
|
|
554
|
+
void** feature_plugins(const char* name, size_t* n) {
|
|
555
|
+
`)
|
|
556
|
+
for (const fname of plugged) {
|
|
557
|
+
Content(` if (strcmp(name, "${fname}") == 0) return ${fname}_plugins(n);
|
|
558
|
+
`)
|
|
559
|
+
}
|
|
560
|
+
Content(` (void)name;
|
|
561
|
+
*n = 0;
|
|
562
|
+
return NULL;
|
|
563
|
+
}
|
|
229
564
|
`)
|
|
230
565
|
})
|
|
231
566
|
})
|
|
232
567
|
|
|
233
568
|
|
|
234
569
|
export {
|
|
235
|
-
Config
|
|
570
|
+
Config,
|
|
571
|
+
FeaturePlugins,
|
|
572
|
+
pluginDefinitions,
|
|
236
573
|
}
|
|
@@ -4,6 +4,8 @@ import * as Path from 'node:path'
|
|
|
4
4
|
import {
|
|
5
5
|
cmp, each,
|
|
6
6
|
File, Copy, Folder, Fragment,
|
|
7
|
+
pluginExcludes,
|
|
8
|
+
targetFeatures,
|
|
7
9
|
} from '@voxgig/sdkgen'
|
|
8
10
|
|
|
9
11
|
|
|
@@ -19,7 +21,7 @@ import {
|
|
|
19
21
|
|
|
20
22
|
|
|
21
23
|
import { Package } from './Package_c'
|
|
22
|
-
import { Config } from './Config_c'
|
|
24
|
+
import { Config, FeaturePlugins } from './Config_c'
|
|
23
25
|
import { Gitignore } from './Gitignore_c'
|
|
24
26
|
import { MainEntity } from './MainEntity_c'
|
|
25
27
|
import { EntityBase } from './EntityBase_c'
|
|
@@ -33,15 +35,62 @@ const Main = cmp(async function Main(props: any) {
|
|
|
33
35
|
|
|
34
36
|
const entity: ModelEntity = getModelPath(model, `main.${KIT}.entity`)
|
|
35
37
|
|
|
38
|
+
// THE PLUGIN TRIM FOR A FEATURE THAT IS ITSELF OFF (Main_scala's
|
|
39
|
+
// inactivePluginExcludes, for the same reason one target over).
|
|
40
|
+
//
|
|
41
|
+
// pluginExcludes(model) below walks only the model's ACTIVE features, so
|
|
42
|
+
// a `secrets` declared `active: false` keeps every declared group's
|
|
43
|
+
// vendored kind file in the tree. For c that is not merely untidy: the
|
|
44
|
+
// Makefile decides whether to compile the plugin layer - and to link
|
|
45
|
+
// OpenSSL and libcurl - from whether a KIND FILE is present under
|
|
46
|
+
// feature/secrets/plugins/, so the files have to go. Every declared group
|
|
47
|
+
// of an inactive feature goes, not only the groups marked inactive: a
|
|
48
|
+
// feature that is off has no active plugins whatever its `plugin` map
|
|
49
|
+
// says (targetFeatures drops it before Config ever reads a group). The
|
|
50
|
+
// feature's own source and the vendored cores are left to the Makefile's
|
|
51
|
+
// wiring gate (feature/secrets/kinds.c is generated only for an active
|
|
52
|
+
// feature; without it nothing of the feature is compiled) and to
|
|
53
|
+
// `target add`, which trims the whole container for a real project.
|
|
54
|
+
//
|
|
55
|
+
// Rooting matches pluginExcludes': c's declared paths are
|
|
56
|
+
// target-root-relative, which is this Copy's root, and the other
|
|
57
|
+
// targets' paths in the same list cannot match anything in a c tree.
|
|
58
|
+
const feature = targetFeatures(model, target)
|
|
59
|
+
const esc = (s: string) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
60
|
+
const allfeature = getModelPath(model, `main.${KIT}.feature`,
|
|
61
|
+
{ required: false, only_active: false }) || {}
|
|
62
|
+
const inactivePluginExcludes: RegExp[] = []
|
|
63
|
+
for (const fname of Object.keys(allfeature)) {
|
|
64
|
+
if (null != (feature as any)[fname]) continue
|
|
65
|
+
const groups = getModelPath(model, `main.${KIT}.feature.${fname}.plugin`,
|
|
66
|
+
{ required: false, only_active: false }) || {}
|
|
67
|
+
for (const gname of Object.keys(groups)) {
|
|
68
|
+
for (const one of (groups[gname].path || [])) {
|
|
69
|
+
const pat = esc(String(one))
|
|
70
|
+
inactivePluginExcludes.push(new RegExp('(^|/)' +
|
|
71
|
+
pat.replace(/\\\/$/, '') + (/\/$/.test(String(one)) ? '/' : '$')))
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
36
76
|
Package({ target })
|
|
37
77
|
|
|
38
78
|
Gitignore({})
|
|
39
79
|
|
|
40
80
|
// Copy tm/c files with replacements. The tm src/ subtree only stages the
|
|
41
81
|
// per-feature custom-source dirs (target add), so it is excluded here.
|
|
82
|
+
//
|
|
83
|
+
// pluginExcludes: the generate-time plugin trim (an INACTIVE plugin
|
|
84
|
+
// group's declared files stay out of the tree - the model's `path`
|
|
85
|
+
// entries are target-root-relative, which is this Copy's root). c has
|
|
86
|
+
// `srcfeature: false`, so the per-feature Copy in cmp/Feature.ts - where
|
|
87
|
+
// pluginExcludesFor normally applies this trim - never runs for it, and
|
|
88
|
+
// this whole-tree Copy is the ONLY copy the target has: without the
|
|
89
|
+
// exclude an active secrets feature would ship every inactive kind, and
|
|
90
|
+
// the Makefile would compile and link them all (Main_go.ts precedent).
|
|
42
91
|
Copy({
|
|
43
92
|
from: 'tm/' + target.name,
|
|
44
|
-
exclude: [/src
|
|
93
|
+
exclude: [/src\//, ...pluginExcludes(model), ...inactivePluginExcludes],
|
|
45
94
|
replace: {
|
|
46
95
|
...props.ctx$.stdrep,
|
|
47
96
|
}
|
|
@@ -73,6 +122,12 @@ const Main = cmp(async function Main(props: any) {
|
|
|
73
122
|
Config({ target })
|
|
74
123
|
})
|
|
75
124
|
|
|
125
|
+
// feature/<name>/kinds.c — the plugin definitions an active plugin-bearing
|
|
126
|
+
// feature selected, and the Makefile's wiring gate for that feature's
|
|
127
|
+
// vendored payload (see Config_c). Nothing is emitted when no such
|
|
128
|
+
// feature is active.
|
|
129
|
+
FeaturePlugins({ target })
|
|
130
|
+
|
|
76
131
|
// core/api.h — the per-API public header (entity constructors + accessors).
|
|
77
132
|
EntityBase({ target })
|
|
78
133
|
|
|
@@ -5,8 +5,18 @@ import {
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
// C has no package manifest — the build is driven by the template Makefile
|
|
8
|
-
// (copied verbatim). Package is a no-op for the C target,
|
|
9
|
-
// component can call it uniformly across targets.
|
|
8
|
+
// (tm/c/Makefile, copied verbatim). Package is a no-op for the C target,
|
|
9
|
+
// kept so the Main component can call it uniformly across targets.
|
|
10
|
+
//
|
|
11
|
+
// This is also why the secrets feature's build model is not emitted from
|
|
12
|
+
// here, unlike Package_rust's rustls dependency table or Package_swift's
|
|
13
|
+
// targets: the Makefile is feature-agnostic (a trimmed template tree must
|
|
14
|
+
// name no feature) and `-include`s a GENERATED feature/<name>/kinds.mk that
|
|
15
|
+
// Config_c emits only when the model activates the feature for this
|
|
16
|
+
// target - the vendored payload to compile, the suite to run, and the
|
|
17
|
+
// plugin layer with its OpenSSL and libcurl only when a plugin group is
|
|
18
|
+
// active. Nothing here has to restate the model's choice, so nothing here
|
|
19
|
+
// can drift from it.
|
|
10
20
|
const Package = cmp(async function Package(_props: any) {
|
|
11
21
|
// intentionally empty
|
|
12
22
|
})
|