@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,135 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (c/src/host.h)
|
|
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 host: the lifecycle state machine (§5), extension points (§6),
|
|
5
|
+
* and resource capture (§8).
|
|
6
|
+
*
|
|
7
|
+
* TWO RULES SHAPE EVERY FUNCTION BELOW.
|
|
8
|
+
*
|
|
9
|
+
* Transitions are SEQUENTIAL (§5.2). One at a time, in call order,
|
|
10
|
+
* never interleaved; a transition triggered from inside a lifecycle
|
|
11
|
+
* callback is `plugin_reentrant`. A hard rule, because it is the only
|
|
12
|
+
* way the semantics can be identical in Go, in Ruby and in
|
|
13
|
+
* single-threaded JavaScript — and in C, which has no event loop to
|
|
14
|
+
* hide behind.
|
|
15
|
+
*
|
|
16
|
+
* Reconciliation is EAGER (§18's portability budget). A transition
|
|
17
|
+
* settles by running the state machine to a fixed point, not by
|
|
18
|
+
* suspending on a promise. */
|
|
19
|
+
|
|
20
|
+
#ifndef VOXGIG_PLUGIN_HOST_H
|
|
21
|
+
#define VOXGIG_PLUGIN_HOST_H
|
|
22
|
+
|
|
23
|
+
#include <stdbool.h>
|
|
24
|
+
|
|
25
|
+
#include "catalog.h"
|
|
26
|
+
#include "point.h"
|
|
27
|
+
#include "types.h"
|
|
28
|
+
#include "value.h"
|
|
29
|
+
|
|
30
|
+
typedef struct Host Host;
|
|
31
|
+
|
|
32
|
+
/* A scope release. C has no closures, so a release is a function plus
|
|
33
|
+
* its context — the same pairing `point.h` uses for bindings. */
|
|
34
|
+
typedef void (*ReleaseFn)(void *ctx);
|
|
35
|
+
|
|
36
|
+
typedef struct HostOptions {
|
|
37
|
+
Catalog *catalog;
|
|
38
|
+
Value *reserved; /* list of names */
|
|
39
|
+
Value *keys; /* {instance, default} */
|
|
40
|
+
Value *defaults; /* {name -> options} */
|
|
41
|
+
Value *profile;
|
|
42
|
+
/* {point -> {kind, mode, exclusive, default, pin}}; the chain base
|
|
43
|
+
* and provider default are functions, so they ride alongside. */
|
|
44
|
+
Value *points;
|
|
45
|
+
HookFn *basefns; /* parallel to `basepoints` */
|
|
46
|
+
Value *basepoints; /* list of point names having a base fn */
|
|
47
|
+
/* §11.3. `restart` (the default) treats provider replacement as an
|
|
48
|
+
* ordinary runtime operation. `hold` is the strict reading —
|
|
49
|
+
* deactivating a required instance is `plugin_dependency_held`. NOT
|
|
50
|
+
* the default, because a station that cannot swap a provider without
|
|
51
|
+
* a restart has lost the argument for having a plugin system. */
|
|
52
|
+
const char *dependency;
|
|
53
|
+
} HostOptions;
|
|
54
|
+
|
|
55
|
+
Host *makehost(HostOptions *opts);
|
|
56
|
+
|
|
57
|
+
Catalog *host_catalog(Host *h);
|
|
58
|
+
void host_define(Host *h, Definition *def);
|
|
59
|
+
|
|
60
|
+
/* --- the state machine --------------------------------------------- */
|
|
61
|
+
|
|
62
|
+
typedef struct DeclareSpec {
|
|
63
|
+
const char *definition;
|
|
64
|
+
Value *options;
|
|
65
|
+
Value *order;
|
|
66
|
+
bool haspos;
|
|
67
|
+
double pos;
|
|
68
|
+
const char *tag;
|
|
69
|
+
/* §9.1: set ONLY by `hostdeclare` — "the host declares those
|
|
70
|
+
* instances itself, after the user merge, and always wins". */
|
|
71
|
+
bool hostowned;
|
|
72
|
+
} DeclareSpec;
|
|
73
|
+
|
|
74
|
+
Inst *host_declare(Host *h, const char *ref, DeclareSpec *spec);
|
|
75
|
+
Inst *host_load(Host *h, const char *ref, DeclareSpec *spec);
|
|
76
|
+
Inst *host_activate(Host *h, const char *ref);
|
|
77
|
+
Inst *host_deactivate(Host *h, const char *ref);
|
|
78
|
+
void host_unload(Host *h, const char *ref);
|
|
79
|
+
Inst *host_ready(Host *h, const char *ref);
|
|
80
|
+
void host_close(Host *h);
|
|
81
|
+
void host_apply(Host *h, Value *doc, Value *profile);
|
|
82
|
+
void host_setoptions(Host *h, const char *ref, Value *patch);
|
|
83
|
+
const char *host_autotag(Host *h, const char *name);
|
|
84
|
+
|
|
85
|
+
/* --- observation ---------------------------------------------------- */
|
|
86
|
+
|
|
87
|
+
/* Introspection NEVER advances the state (§5.2). A status page must not
|
|
88
|
+
* be a way to accidentally import twenty packages. */
|
|
89
|
+
Value *host_list(Host *h);
|
|
90
|
+
Inst *host_instance(Host *h, const char *ref);
|
|
91
|
+
Value *host_observable(Host *h, Value *result, bool hasresult);
|
|
92
|
+
Value *host_trace(Host *h);
|
|
93
|
+
Value *host_order(Host *h, const char *point);
|
|
94
|
+
Value *host_positionof(Host *h, const char *ref, const char *point);
|
|
95
|
+
|
|
96
|
+
/* --- points --------------------------------------------------------- */
|
|
97
|
+
|
|
98
|
+
Value *host_emit(Host *h, const char *point, Value *arg);
|
|
99
|
+
Value *host_call(Host *h, const char *point, Value *arg);
|
|
100
|
+
Value *host_provider(Host *h, const char *point, Value *arg);
|
|
101
|
+
Value *host_shadowed(Host *h, const char *point);
|
|
102
|
+
Value *host_exports(Host *h, const char *spec);
|
|
103
|
+
Value *host_capability(Host *h, const char *name);
|
|
104
|
+
|
|
105
|
+
/* --- the instance api, as callbacks see it -------------------------- */
|
|
106
|
+
|
|
107
|
+
const char *inst_ref(Inst *i);
|
|
108
|
+
const char *inst_name(Inst *i);
|
|
109
|
+
const char *inst_tag(Inst *i);
|
|
110
|
+
Value *inst_options(Inst *i);
|
|
111
|
+
Value *inst_state(Inst *i);
|
|
112
|
+
Host *inst_host(Inst *i);
|
|
113
|
+
Inst *inst_of(Host *h, const char *ref);
|
|
114
|
+
|
|
115
|
+
void inst_bind(Inst *i, const char *point, HookFn hook, ChainFn chain,
|
|
116
|
+
void *ctx, Value *band);
|
|
117
|
+
void inst_export(Inst *i, const char *key, Value *value);
|
|
118
|
+
void inst_provides(Inst *i, Value *p);
|
|
119
|
+
/* Returns a handle a plugin can hand back early. The scope still holds
|
|
120
|
+
* the entry and unwinding it twice is a no-op — releasing early must
|
|
121
|
+
* not make teardown wrong. */
|
|
122
|
+
typedef struct ScopeEntry AcquireHandle;
|
|
123
|
+
AcquireHandle *inst_acquire(Inst *i);
|
|
124
|
+
void inst_giveback(Inst *i, AcquireHandle *handle);
|
|
125
|
+
void inst_release(Inst *i, ReleaseFn fn, void *ctx);
|
|
126
|
+
Value *inst_position(Inst *i, const char *point);
|
|
127
|
+
Host *inst_nest(Inst *i, HostOptions *opts);
|
|
128
|
+
|
|
129
|
+
/* The driver reads these to build §4.5's observable. */
|
|
130
|
+
Value *inst_status(Inst *i);
|
|
131
|
+
double inst_seq(Inst *i);
|
|
132
|
+
double inst_pos(Inst *i);
|
|
133
|
+
Host *inst_inner(Inst *i);
|
|
134
|
+
|
|
135
|
+
#endif
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (c/src/order.c)
|
|
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
|
+
#include <stdio.h>
|
|
21
|
+
#include <stdlib.h>
|
|
22
|
+
#include <string.h>
|
|
23
|
+
|
|
24
|
+
#include "order.h"
|
|
25
|
+
#include "ref.h"
|
|
26
|
+
|
|
27
|
+
static double bandof(Value *b) {
|
|
28
|
+
Value *o = vget(b, "order");
|
|
29
|
+
Value *band = vget(o, "band");
|
|
30
|
+
/* A NUMBER, not a numeric string. `order.band` accepting "1" was a
|
|
31
|
+
* surviving mutation in more than one port: the corpus pins the type
|
|
32
|
+
* because two ports disagreeing about whether "1" is a band is
|
|
33
|
+
* exactly the divergence a shared corpus exists to remove. */
|
|
34
|
+
return visnum(band) ? vasnum(band) : 0.0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
static double posof(Value *b) {
|
|
38
|
+
Value *p = vget(b, "pos");
|
|
39
|
+
return visnum(p) ? vasnum(p) : 0.0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Band first (lower runs first), then `pos` — the position the DOCUMENT
|
|
43
|
+
* visibly states, not the order instances happened to load and not the
|
|
44
|
+
* incarnation `seq`. */
|
|
45
|
+
typedef struct Ready { Value *binding; size_t seq; } Ready;
|
|
46
|
+
|
|
47
|
+
/* THE RANK IS TOTAL, and the third key is why. Band and pos can both
|
|
48
|
+
* tie — `declare` defaults `pos` to the registry size, so an unload
|
|
49
|
+
* followed by a fresh declare reuses a surviving instance's — and
|
|
50
|
+
* `qsort` is not stable, so on a libc that reorders equal elements the
|
|
51
|
+
* topological order would differ from every other port's. The
|
|
52
|
+
* DECLARATION SEQUENCE (the index `host_order` fed them in) breaks the
|
|
53
|
+
* last tie, which is what the stable-sort ports get for free. */
|
|
54
|
+
static int rank(const void *pa, const void *pb) {
|
|
55
|
+
const Ready *x = (const Ready *)pa;
|
|
56
|
+
const Ready *y = (const Ready *)pb;
|
|
57
|
+
double ab = bandof(x->binding), bb = bandof(y->binding);
|
|
58
|
+
if (ab != bb) return ab < bb ? -1 : 1;
|
|
59
|
+
double ap = posof(x->binding), bp = posof(y->binding);
|
|
60
|
+
if (ap != bp) return ap < bp ? -1 : 1;
|
|
61
|
+
if (x->seq != y->seq) return x->seq < y->seq ? -1 : 1;
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* Was a constraint actually declared? An ABSENT one and an EMPTY LIST
|
|
66
|
+
* are both "no constraint"; only a non-empty spelling is an edge. */
|
|
67
|
+
static bool declared(Value *spec) {
|
|
68
|
+
if (vislist(spec)) return 0 < vlen(spec);
|
|
69
|
+
if (visstr(spec)) return '\0' != vasstr(spec)[0];
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Matching is by REF, or by NAME across all of that definition's
|
|
74
|
+
* instances (§7) — which is the whole reason the two spellings exist. */
|
|
75
|
+
static Value *targets(Value *spec, Value *nodes) {
|
|
76
|
+
Value *hit = vlist();
|
|
77
|
+
Value *specs = vislist(spec) ? spec : NULL;
|
|
78
|
+
size_t sn = NULL == specs ? 1 : vlen(specs);
|
|
79
|
+
for (size_t si = 0; si < sn; si++) {
|
|
80
|
+
Value *oneval = NULL == specs ? spec : vat(specs, si);
|
|
81
|
+
if (!visstr(oneval)) continue;
|
|
82
|
+
const char *one = vasstr(oneval);
|
|
83
|
+
for (size_t i = 0; i < vlen(nodes); i++) {
|
|
84
|
+
const char *ref = vasstr(vget(vat(nodes, i), "ref"));
|
|
85
|
+
bool already = false;
|
|
86
|
+
for (size_t j = 0; j < vlen(hit); j++) {
|
|
87
|
+
if (0 == strcmp(vasstr(vat(hit, j)), ref)) { already = true; break; }
|
|
88
|
+
}
|
|
89
|
+
if (already) continue;
|
|
90
|
+
if (0 == strcmp(ref, one)) { vpush(hit, vstr(ref)); continue; }
|
|
91
|
+
if (0 == strcmp(refname(ref), one)) vpush(hit, vstr(ref));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return hit;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* A PIN IS NOT A CONSTRAINT (§7).
|
|
98
|
+
*
|
|
99
|
+
* Constraints and bands are negotiable by definition — they are what
|
|
100
|
+
* plugins and documents say they want, and the sort's job is to satisfy
|
|
101
|
+
* them all. A pin is the host stating a structural invariant of its own
|
|
102
|
+
* architecture, which is a different kind of claim and must not lose a
|
|
103
|
+
* tie to a document.
|
|
104
|
+
*
|
|
105
|
+
* So a pin PLACES the binding at the named end, and an ordering that
|
|
106
|
+
* would move it away is `plugin_order_pinned` — rejected, not honoured
|
|
107
|
+
* into a broken wrap. */
|
|
108
|
+
static Value *applypin(Value *order, Value *edges, Value *pin) {
|
|
109
|
+
if (!vismap(pin)) return order;
|
|
110
|
+
|
|
111
|
+
Value *out = vlist();
|
|
112
|
+
for (size_t i = 0; i < vlen(order); i++) vpush(out, vat(order, i));
|
|
113
|
+
|
|
114
|
+
/* SORTED, not insertion order. A pin map is data — it can arrive from
|
|
115
|
+
* a host's own construction options in any order, and two names
|
|
116
|
+
* pinned to the same end are order-sensitive. Sorted is the one order
|
|
117
|
+
* every language agrees on, and `order/pin#two-names` pins it. */
|
|
118
|
+
const char **names;
|
|
119
|
+
size_t pn = vsortedkeys(pin, &names);
|
|
120
|
+
for (size_t i = 0; i < pn; i++) {
|
|
121
|
+
Value *wantv = vget(pin, names[i]);
|
|
122
|
+
const char *want = visstr(wantv) ? vasstr(wantv) : "";
|
|
123
|
+
size_t idx = (size_t)-1;
|
|
124
|
+
for (size_t j = 0; j < vlen(out); j++) {
|
|
125
|
+
if (0 == strcmp(refname(vasstr(vat(out, j))), names[i])) { idx = j; break; }
|
|
126
|
+
}
|
|
127
|
+
if ((size_t)-1 == idx) continue;
|
|
128
|
+
|
|
129
|
+
/* `first`/`outermost` is index 0; `last`/`innermost` is the end.
|
|
130
|
+
* §6.2 makes the first chain binding outermost, which is why the
|
|
131
|
+
* vocabulary is positional and why the two spellings pair this
|
|
132
|
+
* way. */
|
|
133
|
+
bool wantfirst = 0 == strcmp(want, "first") || 0 == strcmp(want, "outermost");
|
|
134
|
+
Value *ref = vat(out, idx);
|
|
135
|
+
Value *moved = vlist();
|
|
136
|
+
if (wantfirst) vpush(moved, ref);
|
|
137
|
+
for (size_t j = 0; j < vlen(out); j++) {
|
|
138
|
+
if (j != idx) vpush(moved, vat(out, j));
|
|
139
|
+
}
|
|
140
|
+
if (!wantfirst) vpush(moved, ref);
|
|
141
|
+
out = moved;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Now check that the placement did not break a constraint. This is
|
|
145
|
+
* the half that makes a pin a rejection rather than an override: the
|
|
146
|
+
* host wins on position, but it does not get to silently discard a
|
|
147
|
+
* relationship a plugin declared. */
|
|
148
|
+
Value *at = vmap();
|
|
149
|
+
for (size_t i = 0; i < vlen(out); i++) {
|
|
150
|
+
vset(at, vasstr(vat(out, i)), vnum((double)i));
|
|
151
|
+
}
|
|
152
|
+
const char **froms;
|
|
153
|
+
size_t fn = vsortedkeys(edges, &froms);
|
|
154
|
+
for (size_t i = 0; i < fn; i++) {
|
|
155
|
+
Value *tos = vget(edges, froms[i]);
|
|
156
|
+
for (size_t j = 0; j < vlen(tos); j++) {
|
|
157
|
+
const char *to = vasstr(vat(tos, j));
|
|
158
|
+
double a = vasnum(vget(at, froms[i]));
|
|
159
|
+
double b = vasnum(vget(at, to));
|
|
160
|
+
if (a > b) {
|
|
161
|
+
size_t sz = strlen(froms[i]) + strlen(to) + 96;
|
|
162
|
+
char *text = (char *)arena_alloc(sz);
|
|
163
|
+
snprintf(text, sz,
|
|
164
|
+
"a pin would move a binding an ordering constrains: %s must precede %s",
|
|
165
|
+
froms[i], to);
|
|
166
|
+
Value *d = vmap();
|
|
167
|
+
vset(d, "before", vstr(froms[i]));
|
|
168
|
+
vset(d, "after", vstr(to));
|
|
169
|
+
fail("plugin_order_pinned", text, d);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
Value *resolveorder(Value *bindings, Value *pin) {
|
|
178
|
+
size_t n = vlen(bindings);
|
|
179
|
+
|
|
180
|
+
Value *byref = vmap();
|
|
181
|
+
for (size_t i = 0; i < n; i++) {
|
|
182
|
+
Value *b = vat(bindings, i);
|
|
183
|
+
vset(byref, vasstr(vget(b, "ref")), b);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/* Constraints are edges. A constraint naming an ABSENT binding is
|
|
187
|
+
* satisfied VACUOUSLY (§7) — a plugin ordered `after: 'test'` must
|
|
188
|
+
* load in a host with no test plugin. That is sdkgen's __after__
|
|
189
|
+
* behaviour, kept. */
|
|
190
|
+
Value *edges = vmap();
|
|
191
|
+
for (size_t i = 0; i < n; i++) {
|
|
192
|
+
vset(edges, vasstr(vget(vat(bindings, i), "ref")), vlist());
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
for (size_t i = 0; i < n; i++) {
|
|
196
|
+
Value *b = vat(bindings, i);
|
|
197
|
+
const char *bref = vasstr(vget(b, "ref"));
|
|
198
|
+
Value *o = vget(b, "order");
|
|
199
|
+
Value *after = vget(o, "after");
|
|
200
|
+
Value *before = vget(o, "before");
|
|
201
|
+
if (declared(after)) {
|
|
202
|
+
Value *ts = targets(after, bindings);
|
|
203
|
+
for (size_t j = 0; j < vlen(ts); j++) {
|
|
204
|
+
vpush(vget(edges, vasstr(vat(ts, j))), vstr(bref));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (declared(before)) {
|
|
208
|
+
Value *ts = targets(before, bindings);
|
|
209
|
+
for (size_t j = 0; j < vlen(ts); j++) {
|
|
210
|
+
vpush(vget(edges, bref), vat(ts, j));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* Stable topological sort. */
|
|
216
|
+
Value *indeg = vmap();
|
|
217
|
+
for (size_t i = 0; i < n; i++) {
|
|
218
|
+
vset(indeg, vasstr(vget(vat(bindings, i), "ref")), vnum(0));
|
|
219
|
+
}
|
|
220
|
+
const char **froms;
|
|
221
|
+
size_t fn = vkeys(edges, &froms);
|
|
222
|
+
for (size_t i = 0; i < fn; i++) {
|
|
223
|
+
Value *tos = vget(edges, froms[i]);
|
|
224
|
+
for (size_t j = 0; j < vlen(tos); j++) {
|
|
225
|
+
const char *to = vasstr(vat(tos, j));
|
|
226
|
+
vset(indeg, to, vnum(vasnum(vget(indeg, to)) + 1));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* `seq` is the index the binding arrived at, and it never repeats:
|
|
231
|
+
* a binding enters `ready` exactly once, either up front or when its
|
|
232
|
+
* last edge clears. */
|
|
233
|
+
Ready *ready = (Ready *)arena_alloc(sizeof(Ready) * (n + 1));
|
|
234
|
+
size_t rn = 0;
|
|
235
|
+
size_t seq = 0;
|
|
236
|
+
for (size_t i = 0; i < n; i++) {
|
|
237
|
+
Value *b = vat(bindings, i);
|
|
238
|
+
if (0 == vasnum(vget(indeg, vasstr(vget(b, "ref"))))) {
|
|
239
|
+
ready[rn].binding = b;
|
|
240
|
+
ready[rn].seq = seq++;
|
|
241
|
+
rn++;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
Value *out = vlist();
|
|
246
|
+
while (0 < rn) {
|
|
247
|
+
if (1 < rn) qsort(ready, rn, sizeof(Ready), rank);
|
|
248
|
+
Value *next = ready[0].binding;
|
|
249
|
+
for (size_t i = 1; i < rn; i++) ready[i - 1] = ready[i];
|
|
250
|
+
rn--;
|
|
251
|
+
|
|
252
|
+
const char *nref = vasstr(vget(next, "ref"));
|
|
253
|
+
vpush(out, vstr(nref));
|
|
254
|
+
Value *tos = vget(edges, nref);
|
|
255
|
+
for (size_t j = 0; j < vlen(tos); j++) {
|
|
256
|
+
const char *to = vasstr(vat(tos, j));
|
|
257
|
+
double d = vasnum(vget(indeg, to)) - 1;
|
|
258
|
+
vset(indeg, to, vnum(d));
|
|
259
|
+
if (0 == d) {
|
|
260
|
+
ready[rn].binding = vget(byref, to);
|
|
261
|
+
ready[rn].seq = seq++;
|
|
262
|
+
rn++;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
if (vlen(out) != n) {
|
|
268
|
+
Value *stuck = vlist();
|
|
269
|
+
size_t sz = 64;
|
|
270
|
+
for (size_t i = 0; i < n; i++) {
|
|
271
|
+
const char *ref = vasstr(vget(vat(bindings, i), "ref"));
|
|
272
|
+
bool placed = false;
|
|
273
|
+
for (size_t j = 0; j < vlen(out); j++) {
|
|
274
|
+
if (0 == strcmp(vasstr(vat(out, j)), ref)) { placed = true; break; }
|
|
275
|
+
}
|
|
276
|
+
if (!placed) { vpush(stuck, vstr(ref)); sz += strlen(ref) + 8; }
|
|
277
|
+
}
|
|
278
|
+
char *text = (char *)arena_alloc(sz);
|
|
279
|
+
size_t used = (size_t)snprintf(text, sz, "before/after constraints cycle: ");
|
|
280
|
+
for (size_t i = 0; i < vlen(stuck); i++) {
|
|
281
|
+
used += (size_t)snprintf(text + used, sz - used, "%s%s",
|
|
282
|
+
0 < i ? " -> " : "", vasstr(vat(stuck, i)));
|
|
283
|
+
}
|
|
284
|
+
fail("plugin_order_cycle", text, details1("cycle", stuck));
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
return applypin(out, edges, pin);
|
|
288
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (c/src/order.h)
|
|
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) — constraints, then bands, then declaration position.
|
|
5
|
+
* CONSTRAINTS BEAT BANDS so the correct tool wins when both are
|
|
6
|
+
* present; a band chosen by trial and error to fix an ordering bug is a
|
|
7
|
+
* bug wearing a number. See order.c. */
|
|
8
|
+
|
|
9
|
+
#ifndef VOXGIG_PLUGIN_ORDER_H
|
|
10
|
+
#define VOXGIG_PLUGIN_ORDER_H
|
|
11
|
+
|
|
12
|
+
#include "types.h"
|
|
13
|
+
#include "value.h"
|
|
14
|
+
|
|
15
|
+
/* [{ref, pos, order?}] plus an optional host pin -> [ref] */
|
|
16
|
+
Value *resolveorder(Value *bindings, Value *pin);
|
|
17
|
+
|
|
18
|
+
#endif
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (c/src/point.c)
|
|
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). See point.h for the closure representation. */
|
|
5
|
+
|
|
6
|
+
#include <stdio.h>
|
|
7
|
+
#include <stdlib.h>
|
|
8
|
+
#include <string.h>
|
|
9
|
+
|
|
10
|
+
#include "point.h"
|
|
11
|
+
|
|
12
|
+
/* The composition, walked by index rather than built as nested
|
|
13
|
+
* closures. `chain_next` advances one step and calls the binding there;
|
|
14
|
+
* the base runs when the bindings are exhausted. Identical to
|
|
15
|
+
* `b1(b2(b3(base)))` and it needs no allocation per layer. */
|
|
16
|
+
struct Chain {
|
|
17
|
+
Bound **bindings;
|
|
18
|
+
size_t n;
|
|
19
|
+
size_t i;
|
|
20
|
+
HookFn base;
|
|
21
|
+
void *basectx;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
Value *chain_next(Chain *c, Value *arg) {
|
|
25
|
+
if (NULL == c) return arg;
|
|
26
|
+
if (c->i >= c->n) {
|
|
27
|
+
return NULL == c->base ? arg : c->base(arg, c->basectx);
|
|
28
|
+
}
|
|
29
|
+
Bound *b = c->bindings[c->i];
|
|
30
|
+
Chain rest;
|
|
31
|
+
rest.bindings = c->bindings;
|
|
32
|
+
rest.n = c->n;
|
|
33
|
+
rest.i = c->i + 1;
|
|
34
|
+
rest.base = c->base;
|
|
35
|
+
rest.basectx = c->basectx;
|
|
36
|
+
return b->chain(&rest, arg, b->ctx);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
Value *point_call(Bound **bindings, size_t n, HookFn base, void *basectx,
|
|
40
|
+
Value *arg) {
|
|
41
|
+
Chain c;
|
|
42
|
+
c.bindings = bindings;
|
|
43
|
+
c.n = n;
|
|
44
|
+
c.i = 0;
|
|
45
|
+
c.base = base;
|
|
46
|
+
c.basectx = basectx;
|
|
47
|
+
return chain_next(&c, arg);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
Value *point_emit(Bound **bindings, size_t n, const char *mode, Value *arg,
|
|
51
|
+
Value **errors) {
|
|
52
|
+
if (NULL != errors) *errors = vlist();
|
|
53
|
+
|
|
54
|
+
if (0 == strcmp(mode, "bail")) {
|
|
55
|
+
/* Stops at the first binding that RETURNS A VALUE — the "handled,
|
|
56
|
+
* stop" case. A NULL DECLINES.
|
|
57
|
+
*
|
|
58
|
+
* JavaScript can tell null from undefined and almost nothing else
|
|
59
|
+
* in the target set can — Go, Python, Ruby, PHP, Lua, Java and C#
|
|
60
|
+
* each have exactly one way to say nothing, and C has one too.
|
|
61
|
+
* Making the distinction load-bearing would cost every one of them
|
|
62
|
+
* a wrapper type carried through the whole dispatch path, to
|
|
63
|
+
* express a difference their plugin authors cannot write. §18's
|
|
64
|
+
* budget settles it (§6.1). */
|
|
65
|
+
for (size_t i = 0; i < n; i++) {
|
|
66
|
+
Value *v = bindings[i]->hook(arg, bindings[i]->ctx);
|
|
67
|
+
if (!visnull(v)) return v;
|
|
68
|
+
}
|
|
69
|
+
return NULL;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
bool raising = 0 == strcmp(mode, "emit");
|
|
73
|
+
for (size_t i = 0; i < n; i++) {
|
|
74
|
+
if (raising) {
|
|
75
|
+
/* `emit` raises synchronously; the collecting modes gather. */
|
|
76
|
+
bindings[i]->hook(arg, bindings[i]->ctx);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
CatchFrame f;
|
|
80
|
+
if (0 == PLUGIN_TRY(&f)) {
|
|
81
|
+
bindings[i]->hook(arg, bindings[i]->ctx);
|
|
82
|
+
PLUGIN_END(&f);
|
|
83
|
+
}
|
|
84
|
+
else if (NULL != errors) {
|
|
85
|
+
Value *e = vmap();
|
|
86
|
+
vset(e, "code", vstr(plugin_caught()->code));
|
|
87
|
+
vset(e, "message", vstr(plugin_caught()->message));
|
|
88
|
+
vpush(*errors, e);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return NULL;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
static int provrank(const void *pa, const void *pb) {
|
|
95
|
+
Bound *a = *(Bound *const *)pa;
|
|
96
|
+
Bound *b = *(Bound *const *)pb;
|
|
97
|
+
/* HIGHEST band wins, unlike hook and chain. */
|
|
98
|
+
if (a->band != b->band) return a->band > b->band ? -1 : 1;
|
|
99
|
+
return strcmp(a->ref, b->ref);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
Bound *point_provider(Bound **bindings, size_t n, bool exclusive,
|
|
103
|
+
Value **shadowed) {
|
|
104
|
+
if (NULL != shadowed) *shadowed = vlist();
|
|
105
|
+
if (0 == n) return NULL;
|
|
106
|
+
|
|
107
|
+
Bound **ranked = (Bound **)arena_alloc(sizeof(Bound *) * n);
|
|
108
|
+
memcpy(ranked, bindings, sizeof(Bound *) * n);
|
|
109
|
+
|
|
110
|
+
if (exclusive && 1 < n) {
|
|
111
|
+
const char **refs = (const char **)arena_alloc(sizeof(char *) * n);
|
|
112
|
+
size_t sz = 96;
|
|
113
|
+
for (size_t i = 0; i < n; i++) { refs[i] = bindings[i]->ref; sz += strlen(refs[i]) + 4; }
|
|
114
|
+
/* Sorted, so the message names the same pair whatever order the
|
|
115
|
+
* bindings arrived in. */
|
|
116
|
+
for (size_t i = 0; i + 1 < n; i++) {
|
|
117
|
+
for (size_t j = i + 1; j < n; j++) {
|
|
118
|
+
if (0 < strcmp(refs[i], refs[j])) {
|
|
119
|
+
const char *t = refs[i]; refs[i] = refs[j]; refs[j] = t;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
Value *list = vlist();
|
|
124
|
+
for (size_t i = 0; i < n; i++) vpush(list, vstr(refs[i]));
|
|
125
|
+
char *text = (char *)arena_alloc(sz);
|
|
126
|
+
size_t used = (size_t)snprintf(text, sz,
|
|
127
|
+
"point is exclusive and has %zu bindings: ", n);
|
|
128
|
+
for (size_t i = 0; i < n; i++) {
|
|
129
|
+
used += (size_t)snprintf(text + used, sz - used, "%s%s",
|
|
130
|
+
0 < i ? ", " : "", refs[i]);
|
|
131
|
+
}
|
|
132
|
+
fail("plugin_point_exclusive", text, details1("refs", list));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (1 < n) qsort(ranked, n, sizeof(Bound *), provrank);
|
|
136
|
+
|
|
137
|
+
if (NULL != shadowed) {
|
|
138
|
+
for (size_t i = 1; i < n; i++) vpush(*shadowed, vstr(ranked[i]->ref));
|
|
139
|
+
}
|
|
140
|
+
return ranked[0];
|
|
141
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (c/src/point.h)
|
|
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 C IS A FUNCTION POINTER PLUS A CONTEXT, and that is the
|
|
15
|
+
* whole of what this header adds over the canonical. `chain` needs to
|
|
16
|
+
* hand a binding its `next`, which in every other port is a closure the
|
|
17
|
+
* composition builds; here `next` is an explicit `Chain *` the binding
|
|
18
|
+
* calls back into. Same composition, same order, no hidden state. */
|
|
19
|
+
|
|
20
|
+
#ifndef VOXGIG_PLUGIN_POINT_H
|
|
21
|
+
#define VOXGIG_PLUGIN_POINT_H
|
|
22
|
+
|
|
23
|
+
#include <stdbool.h>
|
|
24
|
+
|
|
25
|
+
#include "types.h"
|
|
26
|
+
#include "value.h"
|
|
27
|
+
|
|
28
|
+
/* The remaining composition, as seen by one chain binding. Opaque: a
|
|
29
|
+
* binding may CALL it and must not store it — a plugin that stashes
|
|
30
|
+
* `next` and calls it after deactivation is a bug the host cannot
|
|
31
|
+
* prevent, and saying so is better than pretending otherwise (§6.2). */
|
|
32
|
+
typedef struct Chain Chain;
|
|
33
|
+
|
|
34
|
+
/* A hook or provider binding. */
|
|
35
|
+
typedef Value *(*HookFn)(Value *arg, void *ctx);
|
|
36
|
+
/* A chain binding: it receives its `next` and the argument. */
|
|
37
|
+
typedef Value *(*ChainFn)(Chain *next, Value *arg, void *ctx);
|
|
38
|
+
|
|
39
|
+
typedef struct Bound {
|
|
40
|
+
const char *ref;
|
|
41
|
+
const char *point;
|
|
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 reader
|
|
45
|
+
* who then gets it backwards. */
|
|
46
|
+
double band;
|
|
47
|
+
HookFn hook;
|
|
48
|
+
ChainFn chain;
|
|
49
|
+
void *ctx;
|
|
50
|
+
} Bound;
|
|
51
|
+
|
|
52
|
+
/* Call the rest of the composition. */
|
|
53
|
+
Value *chain_next(Chain *c, Value *arg);
|
|
54
|
+
|
|
55
|
+
/* Fan-out. Return values are ignored except in `bail`.
|
|
56
|
+
*
|
|
57
|
+
* §6.1: "fan-out" is not one answer but four. In a language with
|
|
58
|
+
* asynchrony, "call every binding" hides a decision — start them all
|
|
59
|
+
* and wait, await each in turn, or do not wait — and a design that
|
|
60
|
+
* leaves it unsaid gets four different answers from four ports, in the
|
|
61
|
+
* concurrency behaviour of production code no corpus entry happens to
|
|
62
|
+
* cover. C has no asynchrony, so all four modes are sequential here and
|
|
63
|
+
* only the ERROR and RETURN handling distinguishes them.
|
|
64
|
+
*
|
|
65
|
+
* `errors` receives the collected raises for the gathering modes. */
|
|
66
|
+
Value *point_emit(Bound **bindings, size_t n, const char *mode, Value *arg,
|
|
67
|
+
Value **errors);
|
|
68
|
+
|
|
69
|
+
/* Composition: b1(b2(b3(base))), FIRST BINDING OUTERMOST (§6.2). */
|
|
70
|
+
Value *point_call(Bound **bindings, size_t n, HookFn base, void *basectx,
|
|
71
|
+
Value *arg);
|
|
72
|
+
|
|
73
|
+
/* At most one live implementation (§6.3). The winner is the highest
|
|
74
|
+
* band, ties broken by ref sort, and THE LOSERS ARE VISIBLE rather than
|
|
75
|
+
* silently ignored. Returns the winner (or NULL) and fills `shadowed`
|
|
76
|
+
* with the losing refs, in sorted order. */
|
|
77
|
+
Bound *point_provider(Bound **bindings, size_t n, bool exclusive,
|
|
78
|
+
Value **shadowed);
|
|
79
|
+
|
|
80
|
+
#endif
|