@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,147 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/ref.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
|
+
//! Identity: name+tag, written `name$tag` (§4).
|
|
5
|
+
//!
|
|
6
|
+
//! The four pure functions, and the whole of what `ref` pins. They are
|
|
7
|
+
//! the first thing a new port implements and the first corpus section
|
|
8
|
+
//! it passes.
|
|
9
|
+
|
|
10
|
+
const std = @import("std");
|
|
11
|
+
const v = @import("value.zig");
|
|
12
|
+
const t = @import("types.zig");
|
|
13
|
+
|
|
14
|
+
const MAX_REF = 1024;
|
|
15
|
+
|
|
16
|
+
fn isNameHead(c: u8) bool {
|
|
17
|
+
return (c >= 'a' and c <= 'z') or (c >= 'A' and c <= 'Z') or c == '@';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
fn isNameBody(c: u8) bool {
|
|
21
|
+
return (c >= 'a' and c <= 'z') or (c >= 'A' and c <= 'Z') or
|
|
22
|
+
(c >= '0' and c <= '9') or
|
|
23
|
+
c == '.' or c == '~' or c == '_' or c == '-' or c == '/';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
fn isTagChar(c: u8) bool {
|
|
27
|
+
return (c >= 'a' and c <= 'z') or (c >= 'A' and c <= 'Z') or
|
|
28
|
+
(c >= '0' and c <= '9') or
|
|
29
|
+
c == '.' or c == '~' or c == '_' or c == '-';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
fn namely(name: []const u8) bool {
|
|
33
|
+
if (name.len == 0 or name.len > MAX_REF) return false;
|
|
34
|
+
if (!isNameHead(name[0])) return false;
|
|
35
|
+
for (name[1..]) |c| {
|
|
36
|
+
if (!isNameBody(c)) return false;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
fn tagly(tag: []const u8) bool {
|
|
42
|
+
// The empty tag is an ordinary tag (§4 rule 2). The single-instance
|
|
43
|
+
// case writes no tag and never learns tags exist.
|
|
44
|
+
if (tag.len == 0) return true;
|
|
45
|
+
if (tag.len > MAX_REF) return false;
|
|
46
|
+
for (tag) |c| {
|
|
47
|
+
if (!isTagChar(c)) return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/// A non-string is not a name. Every port has to answer this the same
|
|
53
|
+
/// way, and `ref/name` pins it for numbers, nulls and maps alike.
|
|
54
|
+
pub fn checkname(name: ?*const v.Value) bool {
|
|
55
|
+
return v.isStr(name) and namely(v.asStr(name));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/// The asymmetry with a name is deliberate: a tag MAY start with a digit
|
|
59
|
+
/// because auto-tagging assigns integer tags (`stripe$1`), and a tag
|
|
60
|
+
/// admits neither `@` nor `/` because a name is a package specifier and
|
|
61
|
+
/// a tag is not.
|
|
62
|
+
pub fn checktag(tag: ?*const v.Value) bool {
|
|
63
|
+
return v.isStr(tag) and tagly(v.asStr(tag));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const Split = struct { name: []const u8, tag: []const u8 };
|
|
67
|
+
|
|
68
|
+
/// Split on the FIRST `$`. Nothing in the grammar decides this — `$` is
|
|
69
|
+
/// in neither character class — so the corpus is the arbiter (§4 rule
|
|
70
|
+
/// 5), and it picks the split that blames the part actually at fault:
|
|
71
|
+
/// `a$b$c` is a good name with a bad tag, not the reverse.
|
|
72
|
+
fn split(s: []const u8) Split {
|
|
73
|
+
const cut = std.mem.indexOfScalar(u8, s, '$') orelse return .{ .name = s, .tag = "" };
|
|
74
|
+
return .{ .name = s[0..cut], .tag = s[cut + 1 ..] };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
pub fn parseref(str: ?*const v.Value) t.Err!*v.Value {
|
|
78
|
+
if (!v.isStr(str)) return t.fail("plugin_bad_name", "ref must be a string", null);
|
|
79
|
+
const sp = split(v.asStr(str));
|
|
80
|
+
if (!namely(sp.name)) {
|
|
81
|
+
return t.fail("plugin_bad_name", v.print("invalid plugin name: {s}", .{sp.name}), t.details1("name", v.vstr(sp.name)));
|
|
82
|
+
}
|
|
83
|
+
if (!tagly(sp.tag)) {
|
|
84
|
+
return t.fail("plugin_bad_tag", v.print("invalid plugin tag: {s}", .{sp.tag}), t.details2("name", v.vstr(sp.name), "tag", v.vstr(sp.tag)));
|
|
85
|
+
}
|
|
86
|
+
const out = v.vmap();
|
|
87
|
+
v.set(out, "name", v.vstr(sp.name));
|
|
88
|
+
v.set(out, "tag", v.vstr(sp.tag));
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/// An empty tag NEVER writes the separator, which is the half of
|
|
93
|
+
/// canonicalization formatref owns: parse tolerates `stripe$`, format
|
|
94
|
+
/// never produces it, so a round trip is idempotent.
|
|
95
|
+
pub fn formatref(name: ?*v.Value, tag: ?*v.Value) t.Err![]const u8 {
|
|
96
|
+
const tagok = v.isNull(tag) or v.isStr(tag);
|
|
97
|
+
const tg = if (v.isStr(tag)) v.asStr(tag) else "";
|
|
98
|
+
|
|
99
|
+
if (!checkname(name)) {
|
|
100
|
+
const shown = if (v.isStr(name)) v.asStr(name) else "";
|
|
101
|
+
return t.fail("plugin_bad_name", v.print("invalid plugin name: {s}", .{shown}), t.details1("name", if (v.isNull(name)) v.vnull() else name));
|
|
102
|
+
}
|
|
103
|
+
if (!tagok or !tagly(tg)) {
|
|
104
|
+
return t.fail("plugin_bad_tag", v.print("invalid plugin tag: {s}", .{tg}), t.details2("name", name, "tag", if (v.isNull(tag)) v.vstr("") else tag));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (tg.len == 0) return v.asStr(name);
|
|
108
|
+
return v.print("{s}${s}", .{ v.asStr(name), tg });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/// The canonical spelling. §4 rule 5: canonicalize before comparison.
|
|
112
|
+
pub fn canonref(str: ?*const v.Value) t.Err![]const u8 {
|
|
113
|
+
const r = try parseref(str);
|
|
114
|
+
return formatref(v.get(r, "name"), v.get(r, "tag"));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
pub fn canonrefs(str: []const u8) t.Err![]const u8 {
|
|
118
|
+
return canonref(v.vstr(str));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/// The canonical ref this string denotes, or null if it denotes none —
|
|
122
|
+
/// the TOLERANT half of `canonref`, and the one a requirement name needs
|
|
123
|
+
/// (§11.1). Capability names are free-form, so `2fa` is a good one and
|
|
124
|
+
/// no ref could be called that; `canonref` FAILS on those, and asking it
|
|
125
|
+
/// "is this a ref?" made a legal document kill the host.
|
|
126
|
+
///
|
|
127
|
+
/// An optional, so a caller cannot mistake "not a ref" for "the empty
|
|
128
|
+
/// ref" — and infallible, because it answers rather than raises.
|
|
129
|
+
pub fn tryref(str: []const u8) ?[]const u8 {
|
|
130
|
+
const sp = split(str);
|
|
131
|
+
if (!namely(sp.name) or !tagly(sp.tag)) return null;
|
|
132
|
+
if (sp.tag.len == 0) return sp.name;
|
|
133
|
+
return v.print("{s}${s}", .{ sp.name, sp.tag });
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/// `canonref` for internal callers that want the input back unchanged
|
|
137
|
+
/// when it is not well formed. NEVER use where a bad ref must be
|
|
138
|
+
/// reported — the corpus pins plugin_bad_name at every public entry.
|
|
139
|
+
pub fn canon(str: []const u8) []const u8 {
|
|
140
|
+
return tryref(str) orelse str;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/// The name half, for internal callers that only compare.
|
|
144
|
+
pub fn refname(str: []const u8) []const u8 {
|
|
145
|
+
const sp = split(str);
|
|
146
|
+
return if (namely(sp.name)) sp.name else str;
|
|
147
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/resolve.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
|
+
//! Dynamic resolution (§10.2) — name to candidate module ids.
|
|
5
|
+
//!
|
|
6
|
+
//! PURE. It returns the ids a host WOULD try, in order; it does not load
|
|
7
|
+
//! anything. That separation is what lets the corpus pin resolution in
|
|
8
|
+
//! every language including those with no dynamic loading at all — zig
|
|
9
|
+
//! among them — and it is why §15.4 puts real module loading in per-port
|
|
10
|
+
//! integration tests rather than here.
|
|
11
|
+
|
|
12
|
+
const std = @import("std");
|
|
13
|
+
const v = @import("value.zig");
|
|
14
|
+
|
|
15
|
+
fn pushuniq(out: *v.Value, id: []const u8) void {
|
|
16
|
+
for (v.items(out)) |x| {
|
|
17
|
+
if (std.mem.eql(u8, v.asStr(x), id)) return;
|
|
18
|
+
}
|
|
19
|
+
v.push(out, v.vstr(id));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const DEFAULT_PREFIX = [_][]const u8{ "@voxgig/plugin-", "voxgig-plugin-", "plugin-", "" };
|
|
23
|
+
|
|
24
|
+
pub fn resolvecandidates(name: ?*v.Value, sources: ?*v.Value) *v.Value {
|
|
25
|
+
const out = v.vlist();
|
|
26
|
+
const n = if (v.isStr(name)) v.asStr(name) else "";
|
|
27
|
+
|
|
28
|
+
// A SCOPED NAME RESOLVES VERBATIM ONLY (§10.2). `@acme/thing` is
|
|
29
|
+
// already a package id; prefixing it produces
|
|
30
|
+
// `@voxgig/plugin-@acme/thing`, which is not a thing that can exist.
|
|
31
|
+
if (n.len > 0 and n[0] == '@') {
|
|
32
|
+
v.push(out, v.vstr(n));
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (!(v.isList(sources) and v.len(sources) > 0)) {
|
|
37
|
+
for (DEFAULT_PREFIX) |p| pushuniq(out, v.print("{s}{s}", .{ p, n }));
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
for (v.items(sources)) |src| {
|
|
42
|
+
const kind = v.asStr(v.get(src, "kind"));
|
|
43
|
+
if (std.mem.eql(u8, kind, "module")) {
|
|
44
|
+
const prefix = v.get(src, "prefix");
|
|
45
|
+
if (v.isList(prefix) and v.len(prefix) > 0) {
|
|
46
|
+
for (v.items(prefix)) |p| pushuniq(out, v.print("{s}{s}", .{ v.asStr(p), n }));
|
|
47
|
+
} else {
|
|
48
|
+
pushuniq(out, n);
|
|
49
|
+
}
|
|
50
|
+
} else if (std.mem.eql(u8, kind, "path")) {
|
|
51
|
+
var dir = v.asStr(v.get(src, "dir"));
|
|
52
|
+
// Trailing slashes are trimmed, so `lib/` and `lib` give one
|
|
53
|
+
// id rather than two spellings of it.
|
|
54
|
+
while (dir.len > 0 and dir[dir.len - 1] == '/') dir = dir[0 .. dir.len - 1];
|
|
55
|
+
pushuniq(out, v.print("{s}/{s}", .{ dir, n }));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/// A MODULE PATH IS NOT A NAME (§10.2). The ref grammar starts a name
|
|
63
|
+
/// with a letter or `@`, so `./local/thing` is not a ref and never
|
|
64
|
+
/// reaches candidate generation — seneca allows a path where a plugin
|
|
65
|
+
/// name goes, and this design deliberately does not, because a ref is an
|
|
66
|
+
/// ADDRESS WITHIN A HOST and a path is a LOCATION ON A DISK.
|
|
67
|
+
///
|
|
68
|
+
/// Loading from an explicit location bypasses candidate generation
|
|
69
|
+
/// entirely: `from` is passed to the resolver verbatim.
|
|
70
|
+
pub fn resolvefrom(from: ?*v.Value) *v.Value {
|
|
71
|
+
const out = v.vlist();
|
|
72
|
+
v.push(out, if (v.isNull(from)) v.vnull() else from);
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/types.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
|
+
//! Errors, and the raise mechanism (§12).
|
|
5
|
+
//!
|
|
6
|
+
//! ZIG ERRORS ARE VALUES WITHOUT PAYLOADS, and that is this port's one
|
|
7
|
+
//! big decision. There is no `throw` carrying an object and no
|
|
8
|
+
//! `setjmp`; there is `error.Plugin` and an explicit `try` at every
|
|
9
|
+
//! call. So the DIAGNOSTIC TRAVELS BESIDE THE ERROR: `fail` parks a
|
|
10
|
+
//! `PluginError` in `pending` and returns `error.Plugin`, and every
|
|
11
|
+
//! handler reads it with `take()` as its first act.
|
|
12
|
+
//!
|
|
13
|
+
//! THAT DISCIPLINE IS LOAD-BEARING. `pending` holds one error; a
|
|
14
|
+
//! handler that calls something fallible before reading it gets the
|
|
15
|
+
//! second error's payload with the first error's control flow. Every
|
|
16
|
+
//! `catch` in this port takes first and works afterwards, and that is
|
|
17
|
+
//! the thing to check when adding one.
|
|
18
|
+
//!
|
|
19
|
+
//! The upside is what `c` pays `volatile` for and does not get: an
|
|
20
|
+
//! explicit `try` means the compiler will not let a fallible call be
|
|
21
|
+
//! ignored, so the "missed check continues silently past a failure"
|
|
22
|
+
//! failure mode `c`'s longjmp exists to prevent cannot happen here at
|
|
23
|
+
//! all.
|
|
24
|
+
//!
|
|
25
|
+
//! Ports compare by CODE and never by message: wording is a port's own
|
|
26
|
+
//! business. The FORMAT is pinned, because a parseable message is what
|
|
27
|
+
//! makes a log searchable across twenty languages.
|
|
28
|
+
|
|
29
|
+
const std = @import("std");
|
|
30
|
+
const v = @import("value.zig");
|
|
31
|
+
|
|
32
|
+
pub const Err = error{Plugin};
|
|
33
|
+
|
|
34
|
+
pub const PluginError = struct {
|
|
35
|
+
code: []const u8,
|
|
36
|
+
text: []const u8,
|
|
37
|
+
details: *v.Value,
|
|
38
|
+
message: []const u8,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
var pending: ?PluginError = null;
|
|
42
|
+
|
|
43
|
+
/// §12's detail fields render in a FIXED ORDER — part of the contract,
|
|
44
|
+
/// not a formatting preference, because otherwise each port invents its
|
|
45
|
+
/// own and message parity is gone.
|
|
46
|
+
const detail_order = [_][]const u8{
|
|
47
|
+
"host", "ref", "name", "tag", "point", "key", "capability",
|
|
48
|
+
"range", "version", "match", "candidates", "cycle", "holders", "refs",
|
|
49
|
+
"path", "cause",
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
pub fn formatError(code: []const u8, text: []const u8, details: ?*v.Value) []const u8 {
|
|
53
|
+
// Values render as COMPACT JSON, so a value containing a space or a
|
|
54
|
+
// bracket cannot break the parse and a list renders as an array. The
|
|
55
|
+
// bracket is absent entirely when no field applies.
|
|
56
|
+
var tail = v.List(u8).init(v.arena());
|
|
57
|
+
for (detail_order) |k| {
|
|
58
|
+
if (!v.has(details, k)) continue;
|
|
59
|
+
if (tail.items.len > 0) tail.append(' ') catch @panic("oom");
|
|
60
|
+
tail.appendSlice(k) catch @panic("oom");
|
|
61
|
+
tail.append('=') catch @panic("oom");
|
|
62
|
+
tail.appendSlice(v.json(v.get(details, k))) catch @panic("oom");
|
|
63
|
+
}
|
|
64
|
+
if (tail.items.len == 0) return v.print("plugin/{s}: {s}", .{ code, text });
|
|
65
|
+
return v.print("plugin/{s}: {s} [{s}]", .{ code, text, tail.items });
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/// Raise. Use as `return fail(...)` or `try` through it.
|
|
69
|
+
pub fn fail(code: []const u8, text: []const u8, details: ?*v.Value) Err {
|
|
70
|
+
const d = details orelse v.vmap();
|
|
71
|
+
pending = .{
|
|
72
|
+
.code = v.dupe(code),
|
|
73
|
+
.text = v.dupe(text),
|
|
74
|
+
.details = d,
|
|
75
|
+
.message = formatError(code, text, d),
|
|
76
|
+
};
|
|
77
|
+
return error.Plugin;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/// Read and clear the parked error. THE FIRST THING EVERY HANDLER DOES.
|
|
81
|
+
pub fn take() PluginError {
|
|
82
|
+
const e = pending orelse PluginError{
|
|
83
|
+
.code = "plugin_bad_state",
|
|
84
|
+
.text = "error raised with no diagnostic",
|
|
85
|
+
.details = v.vmap(),
|
|
86
|
+
.message = "plugin/plugin_bad_state: error raised with no diagnostic",
|
|
87
|
+
};
|
|
88
|
+
pending = null;
|
|
89
|
+
return e;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/// Re-park an error a handler has already taken, so it can be
|
|
93
|
+
/// propagated unchanged.
|
|
94
|
+
pub fn reraise(e: PluginError) Err {
|
|
95
|
+
pending = e;
|
|
96
|
+
return error.Plugin;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
pub fn details1(k: []const u8, val: ?*v.Value) *v.Value {
|
|
100
|
+
const d = v.vmap();
|
|
101
|
+
v.set(d, k, val);
|
|
102
|
+
return d;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
pub fn details2(k1: []const u8, v1: ?*v.Value, k2: []const u8, v2: ?*v.Value) *v.Value {
|
|
106
|
+
const d = v.vmap();
|
|
107
|
+
v.set(d, k1, v1);
|
|
108
|
+
v.set(d, k2, v2);
|
|
109
|
+
return d;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// Deep merge, struct's semantics: maps merge, everything else
|
|
113
|
+
/// replaces. §16 permits voxgig/struct for this and zig has no port of
|
|
114
|
+
/// it.
|
|
115
|
+
pub fn mergeValue(a: ?*v.Value, b: ?*v.Value) ?*v.Value {
|
|
116
|
+
if (!v.isMap(a) or !v.isMap(b)) return b orelse a;
|
|
117
|
+
const out = v.vmap();
|
|
118
|
+
for (v.keys(a)) |k| v.set(out, k, v.get(a, k));
|
|
119
|
+
for (v.keys(b)) |k| {
|
|
120
|
+
const bv = v.get(b, k);
|
|
121
|
+
const av = v.get(out, k);
|
|
122
|
+
if (v.isMap(av) and v.isMap(bv)) v.set(out, k, mergeValue(av, bv)) else v.set(out, k, bv);
|
|
123
|
+
}
|
|
124
|
+
return out;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/// §11.1's partial match: every leaf in `want` must be present and
|
|
128
|
+
/// equal in `have`; keys not mentioned are not checked.
|
|
129
|
+
pub fn matchValue(want: ?*v.Value, have: ?*v.Value) bool {
|
|
130
|
+
if (v.isNull(want)) return true;
|
|
131
|
+
if (v.isMap(want)) {
|
|
132
|
+
if (!v.isMap(have)) return false;
|
|
133
|
+
for (v.keys(want)) |k| {
|
|
134
|
+
if (!v.has(have, k)) return false;
|
|
135
|
+
if (!matchValue(v.get(want, k), v.get(have, k))) return false;
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
return v.same(want, have);
|
|
140
|
+
}
|