@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
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/inst.zig)
|
|
2
|
+
// Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
//! The instance and host records.
|
|
5
|
+
//!
|
|
6
|
+
//! THEY LIVE IN ONE FILE BECAUSE THE CYCLE IS REAL: a definition's
|
|
7
|
+
//! callbacks take an instance, an instance points at its host, and a
|
|
8
|
+
//! host holds a catalog of definitions. Zig resolves declarations
|
|
9
|
+
//! lazily, so it would in fact tolerate the cycle across files — but
|
|
10
|
+
//! `catalog.zig` importing `inst.zig` importing `catalog.zig` is a
|
|
11
|
+
//! readability trap, and gathering the declarations here is the same
|
|
12
|
+
//! shape `c` gets from a forward `typedef`, `ocaml` from `defs.ml` and
|
|
13
|
+
//! `haskell` from `Defs.hs`.
|
|
14
|
+
|
|
15
|
+
const std = @import("std");
|
|
16
|
+
const v = @import("value.zig");
|
|
17
|
+
const t = @import("types.zig");
|
|
18
|
+
const point = @import("point.zig");
|
|
19
|
+
|
|
20
|
+
/// A scope release. Zig has no closures, so a release is a function plus
|
|
21
|
+
/// its context — the same pairing `point.zig` uses for bindings.
|
|
22
|
+
pub const ReleaseFn = *const fn (?*anyopaque) void;
|
|
23
|
+
|
|
24
|
+
pub const ScopeEntry = struct {
|
|
25
|
+
fn_: ?ReleaseFn = null,
|
|
26
|
+
ctx: ?*anyopaque = null,
|
|
27
|
+
done: bool = false,
|
|
28
|
+
/// `acquire` and `release` both count toward `open`; a nested host's
|
|
29
|
+
/// teardown does NOT — a teardown is not an acquisition, and the
|
|
30
|
+
/// inner host keeps its own counter (`nest/open`).
|
|
31
|
+
counts: bool = true,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
pub const Inst = struct {
|
|
35
|
+
ref: []const u8,
|
|
36
|
+
def: *@import("catalog.zig").Definition,
|
|
37
|
+
status: []const u8 = "declared",
|
|
38
|
+
pos: f64 = 0,
|
|
39
|
+
seq: f64 = 0,
|
|
40
|
+
options: *v.Value,
|
|
41
|
+
state: *v.Value,
|
|
42
|
+
order: ?*v.Value = null,
|
|
43
|
+
/// §11.4's ALWAYS-RELUCTANT rebinding, made concrete: the provider
|
|
44
|
+
/// ref this instance's activation actually selected, per requirement
|
|
45
|
+
/// name. Recomputing the best candidate on every question silently
|
|
46
|
+
/// re-points a live consumer at any better-ranked newcomer, and then
|
|
47
|
+
/// losing the provider it was really using does not restart it.
|
|
48
|
+
selected: *v.Value,
|
|
49
|
+
/// §9.6's `active: false`. THE BAR OUTLIVES THE APPLY THAT SET IT: a
|
|
50
|
+
/// flag consulted only while `apply` ran let a later direct `ready`
|
|
51
|
+
/// bring the instance live, which is the config switch it exists to
|
|
52
|
+
/// be silently ignored.
|
|
53
|
+
barred: bool = false,
|
|
54
|
+
unmet: *v.Value,
|
|
55
|
+
scope: v.List(*ScopeEntry),
|
|
56
|
+
/// Declared in `define`, inserted only when activation SUCCEEDS
|
|
57
|
+
/// (§8.1). Holding them until then is what makes a failed activate
|
|
58
|
+
/// leave nothing behind.
|
|
59
|
+
bindings: v.List(point.Bound),
|
|
60
|
+
inner: ?*Host = null,
|
|
61
|
+
/// Declared in `define`, and VISIBLE while merely `loaded` (§11):
|
|
62
|
+
/// they are data, and hiding them would make the loaded state
|
|
63
|
+
/// useless for introspection.
|
|
64
|
+
exports: *v.Value,
|
|
65
|
+
provides: *v.Value,
|
|
66
|
+
owner: *Host,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
pub const HostOptions = struct {
|
|
70
|
+
catalog: ?*@import("catalog.zig").Catalog = null,
|
|
71
|
+
reserved: ?*v.Value = null,
|
|
72
|
+
keys: ?*v.Value = null,
|
|
73
|
+
defaults: ?*v.Value = null,
|
|
74
|
+
profile: ?*v.Value = null,
|
|
75
|
+
points: ?*v.Value = null,
|
|
76
|
+
bases: []const BaseFn = &[_]BaseFn{},
|
|
77
|
+
/// §11.3. `restart` (the default) treats provider replacement as an
|
|
78
|
+
/// ordinary runtime operation. `hold` is the strict reading —
|
|
79
|
+
/// deactivating a required instance is `plugin_dependency_held`. NOT
|
|
80
|
+
/// the default, because a station that cannot swap a provider
|
|
81
|
+
/// without a restart has lost the argument for having a plugin
|
|
82
|
+
/// system.
|
|
83
|
+
dependency: []const u8 = "",
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
pub const BaseFn = struct {
|
|
87
|
+
point: []const u8,
|
|
88
|
+
func: *const fn (?*v.Value, ?*anyopaque) t.Err!?*v.Value,
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
pub const Host = struct {
|
|
92
|
+
catalog: *@import("catalog.zig").Catalog,
|
|
93
|
+
reserved: ?*v.Value,
|
|
94
|
+
keys: ?*v.Value,
|
|
95
|
+
defaults: ?*v.Value,
|
|
96
|
+
profile: ?*v.Value,
|
|
97
|
+
points: *v.Value,
|
|
98
|
+
bases: []const BaseFn,
|
|
99
|
+
dependency: []const u8,
|
|
100
|
+
/// Set for the duration of a bulk teardown, so `held` knows this is
|
|
101
|
+
/// a coordinated operation rather than an ad-hoc deactivation.
|
|
102
|
+
coordinated: bool = false,
|
|
103
|
+
instances: v.List(*Inst),
|
|
104
|
+
log: *v.Value,
|
|
105
|
+
events: *v.Value,
|
|
106
|
+
seqn: f64 = 0,
|
|
107
|
+
open: f64 = 0,
|
|
108
|
+
intransition: bool = false,
|
|
109
|
+
/// WHICH callback is running, not merely that one is. §8.1 puts
|
|
110
|
+
/// resource capture in `activate` and §8.3 says `release` outside
|
|
111
|
+
/// `activate` is `plugin_release_scope` — and a boolean alone cannot
|
|
112
|
+
/// tell `activate` from `define`, so it admitted an acquire in
|
|
113
|
+
/// `define` whose scope `unload` would never unwind.
|
|
114
|
+
phase: []const u8 = "",
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
pub const DeclareSpec = struct {
|
|
118
|
+
definition: []const u8 = "",
|
|
119
|
+
options: ?*v.Value = null,
|
|
120
|
+
order: ?*v.Value = null,
|
|
121
|
+
pos: ?f64 = null,
|
|
122
|
+
tag: []const u8 = "",
|
|
123
|
+
/// §9.1: set ONLY by `hostdeclare` — "the host declares those
|
|
124
|
+
/// instances itself, after the user merge, and always wins".
|
|
125
|
+
hostowned: bool = false,
|
|
126
|
+
};
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/order.zig)
|
|
2
|
+
// Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
//! Ordering (§7) — one rule, one place.
|
|
5
|
+
//!
|
|
6
|
+
//! sdkgen grew two special cases in `makeOptions` (`test`, then
|
|
7
|
+
//! `station`) and the third was not far off. This sort is the whole
|
|
8
|
+
//! replacement, and the tiers are in this order for a reason:
|
|
9
|
+
//!
|
|
10
|
+
//! 1 constraints before/after edges, by ref or by name
|
|
11
|
+
//! 2 bands integer, lower first, default 0
|
|
12
|
+
//! 3 declaration ties break by `pos`
|
|
13
|
+
//!
|
|
14
|
+
//! CONSTRAINTS BEAT BANDS precisely so the correct tool wins when both
|
|
15
|
+
//! are present. A band expresses a genuine cross-cutting layer; a
|
|
16
|
+
//! constraint expresses a relationship between two specific things; and
|
|
17
|
+
//! a band chosen by trial and error to fix an ordering bug is a bug
|
|
18
|
+
//! wearing a number.
|
|
19
|
+
|
|
20
|
+
const std = @import("std");
|
|
21
|
+
const v = @import("value.zig");
|
|
22
|
+
const t = @import("types.zig");
|
|
23
|
+
const ref = @import("ref.zig");
|
|
24
|
+
|
|
25
|
+
/// A NUMBER, not a numeric string. `order.band` accepting "1" was a
|
|
26
|
+
/// surviving mutation in more than one port: the corpus pins the type
|
|
27
|
+
/// because two ports disagreeing about whether "1" is a band is exactly
|
|
28
|
+
/// the divergence a shared corpus exists to remove.
|
|
29
|
+
fn bandof(b: ?*v.Value) f64 {
|
|
30
|
+
const band = v.get(v.get(b, "order"), "band");
|
|
31
|
+
return if (v.isNum(band)) v.asNum(band) else 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
fn posof(b: ?*v.Value) f64 {
|
|
35
|
+
const p = v.get(b, "pos");
|
|
36
|
+
return if (v.isNum(p)) v.asNum(p) else 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// Band first (lower runs first), then `pos` — the position the DOCUMENT
|
|
40
|
+
/// visibly states, not the order instances happened to load and not the
|
|
41
|
+
/// incarnation `seq`.
|
|
42
|
+
fn lessRank(_: void, a: *v.Value, b: *v.Value) bool {
|
|
43
|
+
const ab = bandof(a);
|
|
44
|
+
const bb = bandof(b);
|
|
45
|
+
if (ab != bb) return ab < bb;
|
|
46
|
+
return posof(a) < posof(b);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// Was a constraint actually declared? An ABSENT one and an EMPTY LIST
|
|
50
|
+
/// are both "no constraint"; only a non-empty spelling is an edge.
|
|
51
|
+
fn declared(spec: ?*v.Value) bool {
|
|
52
|
+
if (v.isList(spec)) return v.len(spec) > 0;
|
|
53
|
+
if (v.isStr(spec)) return v.asStr(spec).len > 0;
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/// Matching is by REF, or by NAME across all of that definition's
|
|
58
|
+
/// instances (§7) — which is the whole reason the two spellings exist.
|
|
59
|
+
fn targets(spec: ?*v.Value, nodes: ?*v.Value) [][]const u8 {
|
|
60
|
+
var hit = v.List([]const u8).init(v.arena());
|
|
61
|
+
const specs: []*v.Value = if (v.isList(spec)) v.items(spec) else blk: {
|
|
62
|
+
const one = v.arena().alloc(*v.Value, 1) catch @panic("oom");
|
|
63
|
+
one[0] = spec orelse v.vnull();
|
|
64
|
+
break :blk one;
|
|
65
|
+
};
|
|
66
|
+
for (specs) |oneval| {
|
|
67
|
+
if (!v.isStr(oneval)) continue;
|
|
68
|
+
const one = v.asStr(oneval);
|
|
69
|
+
for (v.items(nodes)) |node| {
|
|
70
|
+
const r = v.asStr(v.get(node, "ref"));
|
|
71
|
+
var already = false;
|
|
72
|
+
for (hit.items) |x| {
|
|
73
|
+
if (std.mem.eql(u8, x, r)) {
|
|
74
|
+
already = true;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (already) continue;
|
|
79
|
+
if (std.mem.eql(u8, r, one) or std.mem.eql(u8, ref.refname(r), one)) {
|
|
80
|
+
hit.append(r) catch @panic("oom");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return hit.items;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/// A PIN IS NOT A CONSTRAINT (§7).
|
|
88
|
+
///
|
|
89
|
+
/// Constraints and bands are negotiable by definition — they are what
|
|
90
|
+
/// plugins and documents say they want, and the sort's job is to satisfy
|
|
91
|
+
/// them all. A pin is the host stating a structural invariant of its own
|
|
92
|
+
/// architecture, which is a different kind of claim and must not lose a
|
|
93
|
+
/// tie to a document.
|
|
94
|
+
///
|
|
95
|
+
/// So a pin PLACES the binding at the named end, and an ordering that
|
|
96
|
+
/// would move it away is `plugin_order_pinned` — rejected, not honoured
|
|
97
|
+
/// into a broken wrap.
|
|
98
|
+
fn applypin(order: *v.Value, edges: *v.Value, pin: ?*v.Value) t.Err!*v.Value {
|
|
99
|
+
if (!v.isMap(pin)) return order;
|
|
100
|
+
|
|
101
|
+
var out = v.List([]const u8).init(v.arena());
|
|
102
|
+
for (v.items(order)) |x| out.append(v.asStr(x)) catch @panic("oom");
|
|
103
|
+
|
|
104
|
+
// SORTED, not insertion order. A pin map is data — it can arrive
|
|
105
|
+
// from a host's own construction options in any order, and two names
|
|
106
|
+
// pinned to the same end are order-sensitive. Sorted is the one
|
|
107
|
+
// order every language agrees on, and `order/pin#two-names` pins it.
|
|
108
|
+
for (v.sortedKeys(pin)) |name| {
|
|
109
|
+
const want = v.asStr(v.get(pin, name));
|
|
110
|
+
var idx: ?usize = null;
|
|
111
|
+
for (out.items, 0..) |r, j| {
|
|
112
|
+
if (std.mem.eql(u8, ref.refname(r), name)) {
|
|
113
|
+
idx = j;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const i = idx orelse continue;
|
|
118
|
+
|
|
119
|
+
// `first`/`outermost` is index 0; `last`/`innermost` is the end.
|
|
120
|
+
// §6.2 makes the first chain binding outermost, which is why the
|
|
121
|
+
// vocabulary is positional and why the two spellings pair this
|
|
122
|
+
// way.
|
|
123
|
+
const wantfirst = std.mem.eql(u8, want, "first") or std.mem.eql(u8, want, "outermost");
|
|
124
|
+
const r = out.orderedRemove(i);
|
|
125
|
+
if (wantfirst) out.insert(0, r) catch @panic("oom") else out.append(r) catch @panic("oom");
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Now check that the placement did not break a constraint. This is
|
|
129
|
+
// the half that makes a pin a rejection rather than an override: the
|
|
130
|
+
// host wins on position, but it does not get to silently discard a
|
|
131
|
+
// relationship a plugin declared.
|
|
132
|
+
const index = v.vmap();
|
|
133
|
+
for (out.items, 0..) |r, i| v.set(index, r, v.vnum(@floatFromInt(i)));
|
|
134
|
+
for (v.sortedKeys(edges)) |from| {
|
|
135
|
+
for (v.items(v.get(edges, from))) |tov| {
|
|
136
|
+
const to = v.asStr(tov);
|
|
137
|
+
if (v.asNum(v.get(index, from)) > v.asNum(v.get(index, to))) {
|
|
138
|
+
const d = v.vmap();
|
|
139
|
+
v.set(d, "before", v.vstr(from));
|
|
140
|
+
v.set(d, "after", v.vstr(to));
|
|
141
|
+
return t.fail("plugin_order_pinned", v.print("a pin would move a binding an ordering constrains: {s} must precede {s}", .{ from, to }), d);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const result = v.vlist();
|
|
147
|
+
for (out.items) |r| v.push(result, v.vstr(r));
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
pub fn resolveorder(bindings: ?*v.Value, pin: ?*v.Value) t.Err!*v.Value {
|
|
152
|
+
const n = v.len(bindings);
|
|
153
|
+
|
|
154
|
+
const byref = v.vmap();
|
|
155
|
+
for (v.items(bindings)) |b| v.set(byref, v.asStr(v.get(b, "ref")), b);
|
|
156
|
+
|
|
157
|
+
// Constraints are edges. A constraint naming an ABSENT binding is
|
|
158
|
+
// satisfied VACUOUSLY (§7) — a plugin ordered `after: 'test'` must
|
|
159
|
+
// load in a host with no test plugin. That is sdkgen's __after__
|
|
160
|
+
// behaviour, kept.
|
|
161
|
+
const edges = v.vmap();
|
|
162
|
+
for (v.items(bindings)) |b| v.set(edges, v.asStr(v.get(b, "ref")), v.vlist());
|
|
163
|
+
|
|
164
|
+
for (v.items(bindings)) |b| {
|
|
165
|
+
const bref = v.asStr(v.get(b, "ref"));
|
|
166
|
+
const o = v.get(b, "order");
|
|
167
|
+
if (declared(v.get(o, "after"))) {
|
|
168
|
+
for (targets(v.get(o, "after"), bindings)) |x| v.push(v.get(edges, x), v.vstr(bref));
|
|
169
|
+
}
|
|
170
|
+
if (declared(v.get(o, "before"))) {
|
|
171
|
+
for (targets(v.get(o, "before"), bindings)) |x| v.push(v.get(edges, bref), v.vstr(x));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Stable topological sort.
|
|
176
|
+
const indeg = v.vmap();
|
|
177
|
+
for (v.items(bindings)) |b| v.set(indeg, v.asStr(v.get(b, "ref")), v.vnum(0));
|
|
178
|
+
for (v.keys(edges)) |from| {
|
|
179
|
+
for (v.items(v.get(edges, from))) |tov| {
|
|
180
|
+
const to = v.asStr(tov);
|
|
181
|
+
v.set(indeg, to, v.vnum(v.asNum(v.get(indeg, to)) + 1));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
var ready = v.List(*v.Value).init(v.arena());
|
|
186
|
+
for (v.items(bindings)) |b| {
|
|
187
|
+
if (v.asNum(v.get(indeg, v.asStr(v.get(b, "ref")))) == 0) ready.append(b) catch @panic("oom");
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
var out = v.List([]const u8).init(v.arena());
|
|
191
|
+
while (ready.items.len > 0) {
|
|
192
|
+
std.mem.sort(*v.Value, ready.items, {}, lessRank);
|
|
193
|
+
const next = ready.orderedRemove(0);
|
|
194
|
+
const nref = v.asStr(v.get(next, "ref"));
|
|
195
|
+
out.append(nref) catch @panic("oom");
|
|
196
|
+
for (v.items(v.get(edges, nref))) |tov| {
|
|
197
|
+
const to = v.asStr(tov);
|
|
198
|
+
const d = v.asNum(v.get(indeg, to)) - 1;
|
|
199
|
+
v.set(indeg, to, v.vnum(d));
|
|
200
|
+
if (d == 0) ready.append(v.get(byref, to)) catch @panic("oom");
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (out.items.len != n) {
|
|
205
|
+
const stuck = v.vlist();
|
|
206
|
+
var text = v.List(u8).init(v.arena());
|
|
207
|
+
text.appendSlice("before/after constraints cycle: ") catch @panic("oom");
|
|
208
|
+
for (v.items(bindings)) |b| {
|
|
209
|
+
const r = v.asStr(v.get(b, "ref"));
|
|
210
|
+
var placed = false;
|
|
211
|
+
for (out.items) |x| {
|
|
212
|
+
if (std.mem.eql(u8, x, r)) {
|
|
213
|
+
placed = true;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (placed) continue;
|
|
218
|
+
if (v.len(stuck) > 0) text.appendSlice(" -> ") catch @panic("oom");
|
|
219
|
+
text.appendSlice(r) catch @panic("oom");
|
|
220
|
+
v.push(stuck, v.vstr(r));
|
|
221
|
+
}
|
|
222
|
+
return t.fail("plugin_order_cycle", text.items, t.details1("cycle", stuck));
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const ordered = v.vlist();
|
|
226
|
+
for (out.items) |r| v.push(ordered, v.vstr(r));
|
|
227
|
+
return applypin(ordered, edges, pin);
|
|
228
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/plugin.zig)
|
|
2
|
+
// Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
//! THE ROOT A CONSUMER IMPORTS.
|
|
5
|
+
//!
|
|
6
|
+
//! Zig restricts a module's imports to the directory of its root source
|
|
7
|
+
//! file, so a host that takes this port as a named module
|
|
8
|
+
//! (`--dep plugin ... -Mplugin=<checkout>/zig/src/plugin.zig`) reaches
|
|
9
|
+
//! every file in `src/` through this one and through nothing else. The
|
|
10
|
+
//! test driver in `../test/` imports the files directly, because it
|
|
11
|
+
//! lives beside them; a consumer cannot, and this is what it gets
|
|
12
|
+
//! instead — the same role `index.ts` plays for the typescript port.
|
|
13
|
+
//!
|
|
14
|
+
//! EVERY MODULE, not the handful the first host happened to need: the
|
|
15
|
+
//! canonical surface is the whole of it (AGENTS.md, api parity), and a
|
|
16
|
+
//! root that exposed part of it would make the rest unreachable by
|
|
17
|
+
//! construction. A new file under `src/` is one line here.
|
|
18
|
+
|
|
19
|
+
pub const value = @import("value.zig");
|
|
20
|
+
pub const types = @import("types.zig");
|
|
21
|
+
pub const ref = @import("ref.zig");
|
|
22
|
+
pub const version = @import("version.zig");
|
|
23
|
+
pub const capability = @import("capability.zig");
|
|
24
|
+
pub const resolve = @import("resolve.zig");
|
|
25
|
+
pub const env = @import("env.zig");
|
|
26
|
+
pub const config = @import("config.zig");
|
|
27
|
+
pub const graph = @import("graph.zig");
|
|
28
|
+
pub const depend = @import("depend.zig");
|
|
29
|
+
pub const order = @import("order.zig");
|
|
30
|
+
pub const point = @import("point.zig");
|
|
31
|
+
pub const @"export" = @import("export.zig");
|
|
32
|
+
pub const catalog = @import("catalog.zig");
|
|
33
|
+
pub const inst = @import("inst.zig");
|
|
34
|
+
pub const host = @import("host.zig");
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/point.zig)
|
|
2
|
+
// Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
//! Extension points (§6). Three kinds, chosen because they are what the
|
|
5
|
+
//! two existing systems actually needed, and no more.
|
|
6
|
+
//!
|
|
7
|
+
//! A PLUGIN NEVER MUTATES THE HOST. That inversion is what makes
|
|
8
|
+
//! deactivation possible: sdkgen's `utility.fetcher = wrapped` is not
|
|
9
|
+
//! undoable, but "this instance holds slot 3 of the request chain" is
|
|
10
|
+
//! undoable in O(1). OSGi named it the whiteboard pattern in 2004, in a
|
|
11
|
+
//! paper called *Listeners Considered Harmful*, and for exactly this
|
|
12
|
+
//! reason.
|
|
13
|
+
//!
|
|
14
|
+
//! A CLOSURE IN ZIG IS A FUNCTION POINTER PLUS A CONTEXT, exactly as in
|
|
15
|
+
//! `c`. Zig has no closures: a function literal that captures is not a
|
|
16
|
+
//! value you can store. So `chain` gets an explicit `Chain *` to call
|
|
17
|
+
//! back into, and a binding's `ctx` is its instance — the same shape the
|
|
18
|
+
//! `c` port has, for the same reason, in a language forty years newer.
|
|
19
|
+
|
|
20
|
+
const std = @import("std");
|
|
21
|
+
const v = @import("value.zig");
|
|
22
|
+
const t = @import("types.zig");
|
|
23
|
+
|
|
24
|
+
/// The remaining composition, as seen by one chain binding. A binding
|
|
25
|
+
/// may CALL it and must not store it — a plugin that stashes `next` and
|
|
26
|
+
/// calls it after deactivation is a bug the host cannot prevent, and
|
|
27
|
+
/// saying so is better than pretending otherwise (§6.2).
|
|
28
|
+
pub const Chain = struct {
|
|
29
|
+
bindings: []Bound,
|
|
30
|
+
i: usize,
|
|
31
|
+
base: ?*const fn (?*v.Value, ?*anyopaque) t.Err!?*v.Value,
|
|
32
|
+
basectx: ?*anyopaque,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/// A binding answers with an optional: null DECLINES, a value answers.
|
|
36
|
+
pub const HookFn = *const fn (?*v.Value, ?*anyopaque) t.Err!?*v.Value;
|
|
37
|
+
pub const ChainFn = *const fn (*Chain, ?*v.Value, ?*anyopaque) t.Err!?*v.Value;
|
|
38
|
+
|
|
39
|
+
pub const Bound = struct {
|
|
40
|
+
ref: []const u8,
|
|
41
|
+
point: []const u8,
|
|
42
|
+
/// `provider` ranks by HIGHEST band, unlike hook and chain which run
|
|
43
|
+
/// lowest first. Kept as declared so the two rules stay visibly
|
|
44
|
+
/// different rather than one being derived from the other by a
|
|
45
|
+
/// reader who then gets it backwards.
|
|
46
|
+
band: f64 = 0,
|
|
47
|
+
hook: ?HookFn = null,
|
|
48
|
+
chain: ?ChainFn = null,
|
|
49
|
+
ctx: ?*anyopaque = null,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/// Call the rest of the composition.
|
|
53
|
+
pub fn chainNext(c: *Chain, arg: ?*v.Value) t.Err!?*v.Value {
|
|
54
|
+
if (c.i >= c.bindings.len) {
|
|
55
|
+
if (c.base) |b| return b(arg, c.basectx);
|
|
56
|
+
return arg;
|
|
57
|
+
}
|
|
58
|
+
const b = c.bindings[c.i];
|
|
59
|
+
var rest = Chain{ .bindings = c.bindings, .i = c.i + 1, .base = c.base, .basectx = c.basectx };
|
|
60
|
+
return b.chain.?(&rest, arg, b.ctx);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/// Composition: b1(b2(b3(base))), FIRST BINDING OUTERMOST (§6.2).
|
|
64
|
+
pub fn pointcall(
|
|
65
|
+
bindings: []Bound,
|
|
66
|
+
base: ?*const fn (?*v.Value, ?*anyopaque) t.Err!?*v.Value,
|
|
67
|
+
basectx: ?*anyopaque,
|
|
68
|
+
arg: ?*v.Value,
|
|
69
|
+
) t.Err!?*v.Value {
|
|
70
|
+
var c = Chain{ .bindings = bindings, .i = 0, .base = base, .basectx = basectx };
|
|
71
|
+
return chainNext(&c, arg);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
pub const EmitResult = struct { value: ?*v.Value, errors: *v.Value };
|
|
75
|
+
|
|
76
|
+
/// Fan-out. Return values are ignored except in `bail`.
|
|
77
|
+
///
|
|
78
|
+
/// §6.1: "fan-out" is not one answer but four. In a language with
|
|
79
|
+
/// asynchrony, "call every binding" hides a decision — start them all
|
|
80
|
+
/// and wait, await each in turn, or do not wait — and a design that
|
|
81
|
+
/// leaves it unsaid gets four different answers from four ports, in the
|
|
82
|
+
/// concurrency behaviour of production code no corpus entry happens to
|
|
83
|
+
/// cover. Zig has no asynchrony here, so all four modes are sequential
|
|
84
|
+
/// and only the ERROR and RETURN handling distinguishes them.
|
|
85
|
+
pub fn pointemit(bindings: []Bound, mode: []const u8, arg: ?*v.Value) t.Err!EmitResult {
|
|
86
|
+
const errors = v.vlist();
|
|
87
|
+
|
|
88
|
+
if (std.mem.eql(u8, mode, "bail")) {
|
|
89
|
+
// Stops at the first binding that RETURNS A VALUE — the
|
|
90
|
+
// "handled, stop" case. A null, AND A JSON NULL, BOTH DECLINE.
|
|
91
|
+
//
|
|
92
|
+
// JavaScript can tell null from undefined and almost nothing
|
|
93
|
+
// else in the target set can — Go, Python, Ruby, PHP, Lua, Java
|
|
94
|
+
// and C# each have exactly one way to say nothing, and zig has
|
|
95
|
+
// one too. Making the distinction load-bearing would cost every
|
|
96
|
+
// one of them a wrapper type carried through the whole dispatch
|
|
97
|
+
// path, to express a difference their plugin authors cannot
|
|
98
|
+
// write. §18's budget settles it (§6.1).
|
|
99
|
+
for (bindings) |b| {
|
|
100
|
+
const x = try b.hook.?(arg, b.ctx);
|
|
101
|
+
if (!v.isNull(x)) return .{ .value = x, .errors = errors };
|
|
102
|
+
}
|
|
103
|
+
return .{ .value = null, .errors = errors };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const raising = std.mem.eql(u8, mode, "emit");
|
|
107
|
+
for (bindings) |b| {
|
|
108
|
+
if (raising) {
|
|
109
|
+
// `emit` raises synchronously; the collecting modes gather.
|
|
110
|
+
_ = try b.hook.?(arg, b.ctx);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
_ = b.hook.?(arg, b.ctx) catch {
|
|
114
|
+
const e = t.take();
|
|
115
|
+
const rec = v.vmap();
|
|
116
|
+
v.set(rec, "code", v.vstr(e.code));
|
|
117
|
+
v.set(rec, "message", v.vstr(e.message));
|
|
118
|
+
v.push(errors, rec);
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return .{ .value = null, .errors = errors };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
fn lessProv(_: void, a: Bound, b: Bound) bool {
|
|
125
|
+
// HIGHEST band wins, unlike hook and chain; ties break by ref sort,
|
|
126
|
+
// which is a TOTAL order.
|
|
127
|
+
if (a.band != b.band) return a.band > b.band;
|
|
128
|
+
return std.mem.order(u8, a.ref, b.ref) == .lt;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
fn lessStr(_: void, a: []const u8, b: []const u8) bool {
|
|
132
|
+
return std.mem.order(u8, a, b) == .lt;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
pub const ProviderResult = struct { winner: ?Bound, shadowed: *v.Value };
|
|
136
|
+
|
|
137
|
+
/// At most one live implementation (§6.3). The winner is the highest
|
|
138
|
+
/// band, ties broken by ref sort, and THE LOSERS ARE VISIBLE rather than
|
|
139
|
+
/// silently ignored.
|
|
140
|
+
pub fn pointprovider(bindings: []Bound, exclusive: bool) t.Err!ProviderResult {
|
|
141
|
+
const shadowed = v.vlist();
|
|
142
|
+
if (bindings.len == 0) return .{ .winner = null, .shadowed = shadowed };
|
|
143
|
+
|
|
144
|
+
if (exclusive and bindings.len > 1) {
|
|
145
|
+
const refs = v.arena().alloc([]const u8, bindings.len) catch @panic("oom");
|
|
146
|
+
for (bindings, 0..) |b, i| refs[i] = b.ref;
|
|
147
|
+
// Sorted, so the message names the same pair whatever order the
|
|
148
|
+
// bindings arrived in.
|
|
149
|
+
std.mem.sort([]const u8, refs, {}, lessStr);
|
|
150
|
+
const list = v.vlist();
|
|
151
|
+
var names = v.List(u8).init(v.arena());
|
|
152
|
+
for (refs, 0..) |r, i| {
|
|
153
|
+
if (i > 0) names.appendSlice(", ") catch @panic("oom");
|
|
154
|
+
names.appendSlice(r) catch @panic("oom");
|
|
155
|
+
v.push(list, v.vstr(r));
|
|
156
|
+
}
|
|
157
|
+
return t.fail("plugin_point_exclusive", v.print("point is exclusive and has {d} bindings: {s}", .{ bindings.len, names.items }), t.details1("refs", list));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const ranked = v.arena().alloc(Bound, bindings.len) catch @panic("oom");
|
|
161
|
+
@memcpy(ranked, bindings);
|
|
162
|
+
std.mem.sort(Bound, ranked, {}, lessProv);
|
|
163
|
+
|
|
164
|
+
for (ranked[1..]) |b| v.push(shadowed, v.vstr(b.ref));
|
|
165
|
+
return .{ .winner = ranked[0], .shadowed = shadowed };
|
|
166
|
+
}
|