@voxgig/sdkgen 4.10.0 → 4.12.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/dist/action/resolve.js +75 -1
- package/dist/action/resolve.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility.js +17 -0
- package/dist/utility.js.map +1 -1
- package/package.json +4 -3
- 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/c/tests/vendor/omni/json.c +1 -1
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +1 -1
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +1 -1
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +1 -1
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +1 -1
- package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +1 -1
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +1 -1
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +1 -1
- 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/cpp/test/vendor/omni/json.hpp +1 -1
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +1 -1
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +1 -1
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +1 -1
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +1 -1
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +1 -1
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +1 -1
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +1 -1
- 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/elixir/test/vendor/omni/json.ex +1 -1
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +1 -1
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +1 -1
- 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/go/test/omni/omni.go +1 -1
- package/project/.sdk/tm/go/test/omni/util.go +1 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
- package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
- package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +1 -1
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +1 -1
- package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +1 -1
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +1 -1
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +1 -1
- package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
- package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +1 -1
- package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
- package/project/.sdk/tm/js/src/utility/TransformRequestUtility.js +49 -1
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
- package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +1 -1
- package/project/.sdk/tm/js/test/vendor/omni/util.js +1 -1
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +1 -1
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +1 -1
- package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +1 -1
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +1 -1
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +1 -1
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
- 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/lua/test/vendor/omni/json.lua +1 -1
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +1 -1
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +1 -1
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +1 -1
- package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
- package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
- 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/ocaml/test/vendor/omni/omni.ml +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +25 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +1 -1
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
- package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
- package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +1 -1
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +1 -1
- package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +1 -1
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +1 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +1 -1
- 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/rb/test/vendor/omni/runner.rb +1 -1
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +1 -1
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +1 -1
- package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +1 -1
- 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/rust/tests/vendor/omni/json.rs +1 -1
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +1 -1
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +1 -1
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1 -1
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +1 -1
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
- package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +1 -1
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +1 -1
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +1 -1
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +1 -1
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +1 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +1 -1
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +1 -1
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +1 -1
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +107 -1
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2 -2
- package/project/.sdk/tm/ts/src/utility/TransformRequestUtility.ts +49 -1
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
- 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/.sdk/tm/zig/test/vendor/omni/omni.zig +1 -1
- package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +1 -1
- package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +1 -1
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +1 -1
- package/project/sdkgen-package.json +1 -1
- package/src/action/resolve.ts +85 -1
- package/src/utility.ts +17 -0
|
@@ -0,0 +1,1200 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (cpp/src/host.cpp)
|
|
2
|
+
// Source: https://github.com/voxgig/plugin @ 91c4936555a4ce198669ca2c578b91e27e92e5ec [tag: sdk-20260911-2013-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). See host.hpp for the two rules that shape
|
|
6
|
+
* every method here. */
|
|
7
|
+
|
|
8
|
+
#include "host.hpp"
|
|
9
|
+
|
|
10
|
+
#include <algorithm>
|
|
11
|
+
|
|
12
|
+
#include "capability.hpp"
|
|
13
|
+
#include "config.hpp"
|
|
14
|
+
#include "depend.hpp"
|
|
15
|
+
#include "export.hpp"
|
|
16
|
+
#include "graph.hpp"
|
|
17
|
+
#include "order.hpp"
|
|
18
|
+
#include "ref.hpp"
|
|
19
|
+
|
|
20
|
+
namespace plugin {
|
|
21
|
+
|
|
22
|
+
/* ------------------------------------------------------------------ */
|
|
23
|
+
/* construction and registry helpers */
|
|
24
|
+
/* ------------------------------------------------------------------ */
|
|
25
|
+
|
|
26
|
+
Host::Host(const HostOptions& opts)
|
|
27
|
+
: catalog_(opts.catalog ? opts.catalog : makecatalog()),
|
|
28
|
+
reserved_(opts.reserved),
|
|
29
|
+
keys_(opts.keys),
|
|
30
|
+
defaults_(opts.defaults),
|
|
31
|
+
profile_(opts.profile),
|
|
32
|
+
points_(ismap(opts.points) ? opts.points : vmap()),
|
|
33
|
+
bases_(opts.bases),
|
|
34
|
+
dependency_(opts.dependency.empty() ? "restart" : opts.dependency) {}
|
|
35
|
+
|
|
36
|
+
HostPtr makehost(const HostOptions& opts) { return std::make_shared<Host>(opts); }
|
|
37
|
+
|
|
38
|
+
InstPtr Host::find(const std::string& ref) const {
|
|
39
|
+
for (const auto& e : instances_) {
|
|
40
|
+
if (e->ref_ == ref) return e;
|
|
41
|
+
}
|
|
42
|
+
return nullptr;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* Every instance ref, SORTED — the deterministic walk §4 rule 4
|
|
46
|
+
* requires in a language whose containers have no inherent order. */
|
|
47
|
+
std::vector<std::string> Host::sortedrefs() const {
|
|
48
|
+
std::vector<std::string> refs;
|
|
49
|
+
refs.reserve(instances_.size());
|
|
50
|
+
for (const auto& e : instances_) refs.push_back(e->ref_);
|
|
51
|
+
std::sort(refs.begin(), refs.end());
|
|
52
|
+
return refs;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* ------------------------------------------------------------------ */
|
|
56
|
+
/* observation */
|
|
57
|
+
/* ------------------------------------------------------------------ */
|
|
58
|
+
|
|
59
|
+
V Host::list() const {
|
|
60
|
+
V out = vmap();
|
|
61
|
+
for (const auto& r : sortedrefs()) set(out, r, vstr(find(r)->status_));
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
InstPtr Host::instance(const std::string& ref) const {
|
|
66
|
+
/* The VALIDATING canonicalizer, not the forgiving one: a lookup with
|
|
67
|
+
* a malformed ref is `plugin_bad_name`, not a miss
|
|
68
|
+
* (`declare/lookup#malformed`). Rust and swift both wrote this with
|
|
69
|
+
* `canon` and failed that entry. */
|
|
70
|
+
return find(canonref(ref));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
V Host::observable(const V& result, bool hasresult) const {
|
|
74
|
+
V out = vmap();
|
|
75
|
+
set(out, "status", list());
|
|
76
|
+
set(out, "open", vnum(open_));
|
|
77
|
+
V lg = vlist();
|
|
78
|
+
for (size_t i = 0; i < len(log_); i++) push(lg, at(log_, i));
|
|
79
|
+
set(out, "log", lg);
|
|
80
|
+
set(out, "result", (!hasresult || !result) ? vnull() : result);
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
std::string Inst::name() const { return refname(ref_); }
|
|
85
|
+
|
|
86
|
+
std::string Inst::tag() const {
|
|
87
|
+
size_t cut = ref_.find('$');
|
|
88
|
+
return std::string::npos == cut ? "" : ref_.substr(cut + 1);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* ------------------------------------------------------------------ */
|
|
92
|
+
/* guards */
|
|
93
|
+
/* ------------------------------------------------------------------ */
|
|
94
|
+
|
|
95
|
+
void Host::guard() const {
|
|
96
|
+
if (intransition_) {
|
|
97
|
+
fail("plugin_reentrant",
|
|
98
|
+
"transition attempted from inside a lifecycle callback");
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
InstPtr Host::need(const std::string& ref) const {
|
|
103
|
+
const std::string r = canonref(ref);
|
|
104
|
+
InstPtr e = find(r);
|
|
105
|
+
if (!e) {
|
|
106
|
+
fail("plugin_not_loaded", "no such instance: " + r,
|
|
107
|
+
details1("ref", vstr(r)));
|
|
108
|
+
}
|
|
109
|
+
return e;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
void Host::checkreserved(const std::string& ref) const {
|
|
113
|
+
if (!islist(reserved_) || 0 == len(reserved_)) return;
|
|
114
|
+
const std::string name = refname(ref);
|
|
115
|
+
for (size_t i = 0; i < len(reserved_); i++) {
|
|
116
|
+
if (isstr(at(reserved_, i)) && asstr(at(reserved_, i)) == name) {
|
|
117
|
+
fail("plugin_ref_reserved", "ref is reserved by the host: " + ref,
|
|
118
|
+
details1("ref", vstr(ref)));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* ------------------------------------------------------------------ */
|
|
124
|
+
/* scope */
|
|
125
|
+
/* ------------------------------------------------------------------ */
|
|
126
|
+
|
|
127
|
+
/* A selection belongs to ONE activation (§11.4). Leaving `live` by any
|
|
128
|
+
* door drops it, so the next activation ranks afresh — keeping it would
|
|
129
|
+
* make a consumer prefer a provider it never actually ran against.
|
|
130
|
+
*
|
|
131
|
+
* Returns the errors the scope raised. §8.3: "A failing release does
|
|
132
|
+
* not stop the rest. Every entry runs, in reverse order, whatever any
|
|
133
|
+
* of them does; the errors are collected and raised as one
|
|
134
|
+
* `plugin_release_failed`." */
|
|
135
|
+
V Host::unwind(const InstPtr& e) {
|
|
136
|
+
e->selected_ = vmap();
|
|
137
|
+
V errors = vlist();
|
|
138
|
+
for (size_t k = e->scope_.size(); 0 < k; k--) {
|
|
139
|
+
AcquireHandle s = e->scope_[k - 1];
|
|
140
|
+
if (s->done) continue;
|
|
141
|
+
s->done = true;
|
|
142
|
+
if (s->counts) open_ -= 1;
|
|
143
|
+
if (!s->fn) continue;
|
|
144
|
+
try {
|
|
145
|
+
s->fn();
|
|
146
|
+
}
|
|
147
|
+
catch (const PluginError& err) {
|
|
148
|
+
push(errors, vstr(err.message));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
e->scope_.clear();
|
|
152
|
+
return errors;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* §8.3: "A failed release ends the instance in `failed`, exactly as a
|
|
156
|
+
* failed callback does (§5.2) — a release that raised may have leaked,
|
|
157
|
+
* and an instance that may be holding resources it cannot account for
|
|
158
|
+
* must not be reactivated." */
|
|
159
|
+
void Host::releasecheck(const InstPtr& e, const V& errors) {
|
|
160
|
+
if (0 == len(errors)) return;
|
|
161
|
+
e->status_ = "failed";
|
|
162
|
+
std::string why;
|
|
163
|
+
for (size_t i = 0; i < len(errors); i++) {
|
|
164
|
+
if (0 < i) why += "; ";
|
|
165
|
+
why += asstr(at(errors, i));
|
|
166
|
+
}
|
|
167
|
+
V d = vmap();
|
|
168
|
+
set(d, "ref", vstr(e->ref_));
|
|
169
|
+
set(d, "cause", errors);
|
|
170
|
+
fail("plugin_release_failed", "release failed for " + e->ref_ + ": " + why, d);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* ------------------------------------------------------------------ */
|
|
174
|
+
/* the instance api */
|
|
175
|
+
/* ------------------------------------------------------------------ */
|
|
176
|
+
|
|
177
|
+
AcquireHandle Inst::acquire() {
|
|
178
|
+
/* §8.1: resources are "acquired during `activate` — the scope's
|
|
179
|
+
* actual job". */
|
|
180
|
+
if ("activate" != owner_->phase_) {
|
|
181
|
+
fail("plugin_release_scope", "acquire called outside activate");
|
|
182
|
+
}
|
|
183
|
+
auto s = std::make_shared<ScopeEntry>();
|
|
184
|
+
scope_.push_back(s);
|
|
185
|
+
owner_->open_ += 1;
|
|
186
|
+
return s;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* Hand a resource back before teardown. Idempotent, and the scope keeps
|
|
190
|
+
* the entry: unwinding it again must be a no-op, or releasing early
|
|
191
|
+
* would make teardown wrong. */
|
|
192
|
+
void Inst::giveback(const AcquireHandle& handle) {
|
|
193
|
+
if (!handle || handle->done) return;
|
|
194
|
+
handle->done = true;
|
|
195
|
+
if (handle->counts) owner_->open_ -= 1;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
void Inst::release(Release fn) {
|
|
199
|
+
/* §8.3: "`inst.release` outside `activate` is `plugin_release_scope`".
|
|
200
|
+
* Being in a transition is true in `define` too, and a scope entry
|
|
201
|
+
* registered there is never unwound — `unload` on a merely `loaded`
|
|
202
|
+
* instance does not unwind, because a loaded instance is not supposed
|
|
203
|
+
* to hold anything. */
|
|
204
|
+
if ("activate" != owner_->phase_) {
|
|
205
|
+
fail("plugin_release_scope", "release called outside activate");
|
|
206
|
+
}
|
|
207
|
+
/* SYMMETRIC WITH `acquire`, and it has to be: `open` counts the
|
|
208
|
+
* resources CURRENTLY HELD, so an entry that is registered and then
|
|
209
|
+
* unwound must leave the count where it found it. Incrementing on
|
|
210
|
+
* registration and never decrementing made every `release` a
|
|
211
|
+
* permanent leak in the counter. */
|
|
212
|
+
auto s = std::make_shared<ScopeEntry>();
|
|
213
|
+
s->fn = std::move(fn);
|
|
214
|
+
scope_.push_back(s);
|
|
215
|
+
owner_->open_ += 1;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
void Inst::bind(const std::string& point, Hook hook, ChainFn chain,
|
|
219
|
+
const V& band) {
|
|
220
|
+
Host* h = owner_;
|
|
221
|
+
/* §12's `plugin_bind_scope`: "binding declared outside `define`". §8.1
|
|
222
|
+
* puts binding declaration in `define` and insertion at a SUCCESSFUL
|
|
223
|
+
* activate, and the guard was the half that never got written — so a
|
|
224
|
+
* binding added from `activate` went live without being part of the
|
|
225
|
+
* loaded definition, and a deactivate/activate cycle appended it
|
|
226
|
+
* again. The code was in the table before anything raised it. */
|
|
227
|
+
if ("define" != h->phase_) {
|
|
228
|
+
V d = vmap();
|
|
229
|
+
set(d, "ref", vstr(ref_));
|
|
230
|
+
set(d, "point", vstr(point));
|
|
231
|
+
fail("plugin_bind_scope", "bind called outside define: " + point, d);
|
|
232
|
+
}
|
|
233
|
+
if (!has(h->points_, point)) {
|
|
234
|
+
fail("plugin_point_unknown", "no such point: " + point,
|
|
235
|
+
details1("point", vstr(point)));
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
Bound b;
|
|
239
|
+
b.ref = ref_;
|
|
240
|
+
b.point = point;
|
|
241
|
+
b.band = isnum(band) ? asnum(band) : 0.0;
|
|
242
|
+
b.hook = std::move(hook);
|
|
243
|
+
b.chain = std::move(chain);
|
|
244
|
+
bindings_.push_back(std::move(b));
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
void Inst::bindhook(const std::string& point, Hook hook, const V& band) {
|
|
248
|
+
bind(point, std::move(hook), nullptr, band);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
void Inst::bindchain(const std::string& point, ChainFn chain, const V& band) {
|
|
252
|
+
bind(point, nullptr, std::move(chain), band);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
void Inst::exportvalue(const std::string& key, const V& value) {
|
|
256
|
+
set(exports_, key, value);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
void Inst::provides(const V& p) { push(provides_, p); }
|
|
260
|
+
|
|
261
|
+
HostPtr Inst::nest(const HostOptions& opts) {
|
|
262
|
+
if (!owner_->intransition_) {
|
|
263
|
+
fail("plugin_release_scope", "nest called outside a lifecycle callback");
|
|
264
|
+
}
|
|
265
|
+
/* AN INSTANCE MAY ITSELF BE A HOST (§6.5), and THE OUTER ONE OWNS THE
|
|
266
|
+
* INNER ONE'S LIFETIME. Registering the teardown in the instance
|
|
267
|
+
* scope is what makes that true rather than aspirational: the inner
|
|
268
|
+
* host closes when the outer instance deactivates, in the same
|
|
269
|
+
* reverse unwind as every other resource.
|
|
270
|
+
*
|
|
271
|
+
* It does NOT count toward `open` — a teardown is not an acquisition
|
|
272
|
+
* (`nest/open`). */
|
|
273
|
+
HostPtr inner = makehost(opts);
|
|
274
|
+
auto s = std::make_shared<ScopeEntry>();
|
|
275
|
+
s->counts = false;
|
|
276
|
+
s->fn = [inner]() { inner->close(); };
|
|
277
|
+
scope_.push_back(s);
|
|
278
|
+
inner_ = inner;
|
|
279
|
+
return inner;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
V Inst::position(const std::string& point) const {
|
|
283
|
+
return owner_->positionof(ref_, point);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/* ------------------------------------------------------------------ */
|
|
287
|
+
/* running a callback */
|
|
288
|
+
/* ------------------------------------------------------------------ */
|
|
289
|
+
|
|
290
|
+
/* Restores `intransition` and `phase` however the callback leaves —
|
|
291
|
+
* return or throw. In c this is two assignments repeated on both paths;
|
|
292
|
+
* here it is the destructor's job, which is the point of having one. */
|
|
293
|
+
namespace {
|
|
294
|
+
struct PhaseGuard {
|
|
295
|
+
bool* intransition;
|
|
296
|
+
std::string* phase;
|
|
297
|
+
PhaseGuard(bool* t, std::string* p, const std::string& at)
|
|
298
|
+
: intransition(t), phase(p) {
|
|
299
|
+
*intransition = true;
|
|
300
|
+
*phase = at;
|
|
301
|
+
}
|
|
302
|
+
~PhaseGuard() {
|
|
303
|
+
*intransition = false;
|
|
304
|
+
phase->clear();
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
} // namespace
|
|
308
|
+
|
|
309
|
+
void Host::run(const InstPtr& e, const std::string& at) {
|
|
310
|
+
const Lifecycle* fn = definitioncallback(e->def_, at);
|
|
311
|
+
|
|
312
|
+
push(log_, vstr(e->ref_ + ":" + at));
|
|
313
|
+
|
|
314
|
+
V ev = vmap();
|
|
315
|
+
set(ev, "ref", vstr(e->ref_));
|
|
316
|
+
set(ev, "event", vstr(at));
|
|
317
|
+
set(ev, "seq", vnum(e->seq_));
|
|
318
|
+
set(ev, "status", vstr(e->status_));
|
|
319
|
+
push(events_, ev);
|
|
320
|
+
|
|
321
|
+
if (nullptr == fn || !*fn) return;
|
|
322
|
+
|
|
323
|
+
try {
|
|
324
|
+
PhaseGuard g(&intransition_, &phase_, at);
|
|
325
|
+
(*fn)(*e);
|
|
326
|
+
}
|
|
327
|
+
catch (const PluginError& err) {
|
|
328
|
+
/* §12: `plugin_define_failed` and its three siblings are "a callback
|
|
329
|
+
* raised; wraps the cause". AN ERROR THAT ALREADY CARRIES A CODE
|
|
330
|
+
* KEEPS IT — the code is the error's identity, and a plugin that
|
|
331
|
+
* raised `store_unreachable` must not have it rewritten. Only a
|
|
332
|
+
* code-less error is wrapped, which is the ordinary case for a
|
|
333
|
+
* callback that let a library error escape. */
|
|
334
|
+
if (!err.code.empty() && "plugin_bare" != err.code) throw;
|
|
335
|
+
V d = vmap();
|
|
336
|
+
set(d, "ref", vstr(e->ref_));
|
|
337
|
+
set(d, "cause", vstr(err.text));
|
|
338
|
+
fail("plugin_" + at + "_failed",
|
|
339
|
+
e->ref_ + " raised in " + at + ": " + err.text, d);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/* ------------------------------------------------------------------ */
|
|
344
|
+
/* requirements and providers */
|
|
345
|
+
/* ------------------------------------------------------------------ */
|
|
346
|
+
|
|
347
|
+
V Host::providersof(const V& req) const {
|
|
348
|
+
V cands = vlist();
|
|
349
|
+
/* ASK WHETHER THE NAME IS A REF, do not assume it. A requirement name
|
|
350
|
+
* is a CAPABILITY name first (§11.1) and capability names are
|
|
351
|
+
* free-form, so `2fa` and `my cap` are legal ones that no ref could
|
|
352
|
+
* be called — and `canonref` RAISES on those, which made a perfectly
|
|
353
|
+
* legal document kill the host right here. */
|
|
354
|
+
V rname = get(req, "name");
|
|
355
|
+
std::string asref;
|
|
356
|
+
bool isaref = isstr(rname) && tryref(asstr(rname), asref);
|
|
357
|
+
|
|
358
|
+
for (const auto& r : sortedrefs()) {
|
|
359
|
+
InstPtr t = find(r);
|
|
360
|
+
if ("live" != t->status_) continue;
|
|
361
|
+
/* A ref satisfies directly. */
|
|
362
|
+
if (isaref && r == asref) {
|
|
363
|
+
V prov = vmap();
|
|
364
|
+
set(prov, "name", rname);
|
|
365
|
+
V c = vmap();
|
|
366
|
+
set(c, "ref", vstr(r));
|
|
367
|
+
set(c, "pos", vnum(t->pos_));
|
|
368
|
+
set(c, "provides", prov);
|
|
369
|
+
push(cands, c);
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
for (size_t j = 0; j < len(t->provides_); j++) {
|
|
373
|
+
V p = at(t->provides_, j);
|
|
374
|
+
if (same(get(p, "name"), rname)) {
|
|
375
|
+
V c = vmap();
|
|
376
|
+
set(c, "ref", vstr(r));
|
|
377
|
+
set(c, "pos", vnum(t->pos_));
|
|
378
|
+
set(c, "provides", p);
|
|
379
|
+
push(cands, c);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return resolvecapability(req, cands);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
V Host::unmetof(const InstPtr& e) const {
|
|
387
|
+
V out = vlist();
|
|
388
|
+
V reqs = requirements(e->options_);
|
|
389
|
+
for (size_t i = 0; i < len(reqs); i++) {
|
|
390
|
+
V r = at(reqs, i);
|
|
391
|
+
if (!gatesactivation(r)) continue;
|
|
392
|
+
if (0 == len(providersof(r))) push(out, get(r, "name"));
|
|
393
|
+
}
|
|
394
|
+
return out;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/* §11.4's always-reluctant selection, and the ONE place a provider is
|
|
398
|
+
* chosen for a live instance. "A satisfied requirement is not re-bound
|
|
399
|
+
* while it stays satisfied" is a statement about a REMEMBERED choice.
|
|
400
|
+
*
|
|
401
|
+
* `remember` is false for the questions asked ABOUT an instance rather
|
|
402
|
+
* than BY it — introspection must not create a binding. */
|
|
403
|
+
std::string Host::chosen(const InstPtr& e, const V& req, bool remember) const {
|
|
404
|
+
V cands = providersof(req);
|
|
405
|
+
if (0 == len(cands)) return "";
|
|
406
|
+
const std::string name = asstr(get(req, "name"));
|
|
407
|
+
V heldv = get(e->selected_, name);
|
|
408
|
+
if (isstr(heldv)) {
|
|
409
|
+
for (size_t i = 0; i < len(cands); i++) {
|
|
410
|
+
if (asstr(get(at(cands, i), "ref")) == asstr(heldv)) return asstr(heldv);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
const std::string first = asstr(get(at(cands, 0), "ref"));
|
|
414
|
+
if (remember) set(e->selected_, name, vstr(first));
|
|
415
|
+
return first;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/* The instance currently SELECTED for each of this one's
|
|
419
|
+
* restart-causing requirements. A BINDING IS TO AN INSTANCE, not to a
|
|
420
|
+
* capability (§11.1): the selected one going away restarts a `static`
|
|
421
|
+
* consumer even though a survivor is available. */
|
|
422
|
+
V Host::boundproviders(const InstPtr& e) const {
|
|
423
|
+
V out = vlist();
|
|
424
|
+
V reqs = requirements(e->options_);
|
|
425
|
+
for (size_t i = 0; i < len(reqs); i++) {
|
|
426
|
+
V r = at(reqs, i);
|
|
427
|
+
if (!restartsonloss(r)) continue;
|
|
428
|
+
const std::string ref = chosen(e, r, false);
|
|
429
|
+
if (ref.empty()) continue;
|
|
430
|
+
bool dup = false;
|
|
431
|
+
for (size_t j = 0; j < len(out); j++) {
|
|
432
|
+
if (asstr(at(out, j)) == ref) { dup = true; break; }
|
|
433
|
+
}
|
|
434
|
+
if (!dup) push(out, vstr(ref));
|
|
435
|
+
}
|
|
436
|
+
return out;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
V Host::consumersof(const std::string& ref) const {
|
|
440
|
+
V out = vlist();
|
|
441
|
+
for (const auto& r : sortedrefs()) {
|
|
442
|
+
if (r == ref) continue;
|
|
443
|
+
InstPtr c = find(r);
|
|
444
|
+
if ("live" != c->status_) continue;
|
|
445
|
+
V bp = boundproviders(c);
|
|
446
|
+
for (size_t j = 0; j < len(bp); j++) {
|
|
447
|
+
if (asstr(at(bp, j)) == ref) { push(out, vstr(r)); break; }
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
return out;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/* §11.3's `hold` asks a DIFFERENT question from the cascade.
|
|
454
|
+
*
|
|
455
|
+
* The cascade wants the edges that RESTART — mandatory-static and
|
|
456
|
+
* optional-static. `hold` says "deactivating a REQUIRED instance is
|
|
457
|
+
* `plugin_dependency_held`", and `required` is CARDINALITY:
|
|
458
|
+
* `gatesactivation`, not `restartsonloss`. The two sets differ in both
|
|
459
|
+
* directions and each difference was a real bug. */
|
|
460
|
+
V Host::holdersof(const std::string& ref) const {
|
|
461
|
+
V out = vlist();
|
|
462
|
+
for (const auto& r : sortedrefs()) {
|
|
463
|
+
if (r == ref) continue;
|
|
464
|
+
InstPtr c = find(r);
|
|
465
|
+
if ("live" != c->status_) continue;
|
|
466
|
+
V reqs = requirements(c->options_);
|
|
467
|
+
for (size_t j = 0; j < len(reqs); j++) {
|
|
468
|
+
V req = at(reqs, j);
|
|
469
|
+
if (!gatesactivation(req)) continue;
|
|
470
|
+
if (chosen(c, req, false) == ref) { push(out, vstr(r)); break; }
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
return out;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/* The hold check is A GUARD ON AD-HOC DEACTIVATION, NOT ON COORDINATED
|
|
477
|
+
* TEARDOWN. In a bulk operation that is removing the holders too, it is
|
|
478
|
+
* suspended — otherwise `close()` under `hold` would raise on the first
|
|
479
|
+
* provider it reached whenever a document happened to list a consumer
|
|
480
|
+
* after it, which is the policy refusing the one teardown it has no
|
|
481
|
+
* reason to object to. */
|
|
482
|
+
void Host::held(const InstPtr& e) const {
|
|
483
|
+
if ("hold" != dependency_) return;
|
|
484
|
+
if (coordinated_) return;
|
|
485
|
+
V holders = holdersof(e->ref_);
|
|
486
|
+
if (0 == len(holders)) return;
|
|
487
|
+
V d = vmap();
|
|
488
|
+
set(d, "ref", vstr(e->ref_));
|
|
489
|
+
set(d, "holders", holders);
|
|
490
|
+
fail("plugin_dependency_held",
|
|
491
|
+
"instance is required by live consumers: " + e->ref_, d);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/* The requirement graph as plain data, for the pure detector. */
|
|
495
|
+
V Host::graphnodes() const {
|
|
496
|
+
V out = vlist();
|
|
497
|
+
for (const auto& r : sortedrefs()) {
|
|
498
|
+
InstPtr e = find(r);
|
|
499
|
+
V provides = vlist();
|
|
500
|
+
for (size_t j = 0; j < len(e->provides_); j++) {
|
|
501
|
+
push(provides, get(at(e->provides_, j), "name"));
|
|
502
|
+
}
|
|
503
|
+
V node = vmap();
|
|
504
|
+
set(node, "ref", vstr(r));
|
|
505
|
+
set(node, "provides", provides);
|
|
506
|
+
set(node, "requires", requirements(e->options_));
|
|
507
|
+
push(out, node);
|
|
508
|
+
}
|
|
509
|
+
return out;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/* ------------------------------------------------------------------ */
|
|
513
|
+
/* ordering and points */
|
|
514
|
+
/* ------------------------------------------------------------------ */
|
|
515
|
+
|
|
516
|
+
V Host::order(const std::string& point) const {
|
|
517
|
+
/* Sorted by declaration SEQUENCE, which is what makes the §7 sort's
|
|
518
|
+
* fall-through deterministic in a language whose containers have no
|
|
519
|
+
* insertion order. §7 breaks ties by `pos`; two instances CAN share
|
|
520
|
+
* one — `declare` defaults `pos` to the registry size, so an unload
|
|
521
|
+
* followed by a fresh declare reuses a surviving instance's — and
|
|
522
|
+
* past that the canonical was falling through to map order. `seq` is
|
|
523
|
+
* that order, made explicit. Found by review of the go port. */
|
|
524
|
+
std::vector<InstPtr> live;
|
|
525
|
+
for (const auto& e : instances_) {
|
|
526
|
+
if ("live" == e->status_) live.push_back(e);
|
|
527
|
+
}
|
|
528
|
+
std::sort(live.begin(), live.end(),
|
|
529
|
+
[](const InstPtr& a, const InstPtr& b) { return a->seq_ < b->seq_; });
|
|
530
|
+
|
|
531
|
+
V bindings = vlist();
|
|
532
|
+
for (const auto& e : live) {
|
|
533
|
+
V b = vmap();
|
|
534
|
+
set(b, "ref", vstr(e->ref_));
|
|
535
|
+
set(b, "pos", vnum(e->pos_));
|
|
536
|
+
if (!isnull(e->order_)) set(b, "order", e->order_);
|
|
537
|
+
push(bindings, b);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
V spec = point.empty() ? nullptr : get(points_, point);
|
|
541
|
+
return resolveorder(bindings, ismap(spec) ? get(spec, "pin") : nullptr);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
V Host::positionof(const std::string& ref, const std::string& point) const {
|
|
545
|
+
V ranked = order(point);
|
|
546
|
+
const std::string r = canonref(ref);
|
|
547
|
+
double index = -1;
|
|
548
|
+
for (size_t i = 0; i < len(ranked); i++) {
|
|
549
|
+
if (asstr(at(ranked, i)) == r) { index = static_cast<double>(i); break; }
|
|
550
|
+
}
|
|
551
|
+
V out = vmap();
|
|
552
|
+
set(out, "index", vnum(index));
|
|
553
|
+
set(out, "count", vnum(static_cast<double>(len(ranked))));
|
|
554
|
+
/* §6.2 composes b1(b2(b3(base))) with the FIRST binding OUTERMOST, so
|
|
555
|
+
* these are not index 0 and count-1 the other way round. Getting this
|
|
556
|
+
* backwards is the exact error the positional pin vocabulary exists
|
|
557
|
+
* to prevent. */
|
|
558
|
+
set(out, "outermost", vbool(0 == index));
|
|
559
|
+
set(out, "innermost", vbool(index == static_cast<double>(len(ranked)) - 1));
|
|
560
|
+
return out;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
/* Live bindings on a point, in resolved order. Recomputed on any change
|
|
564
|
+
* to the live set (§7) rather than cached at startup — the bug a host
|
|
565
|
+
* discovers only when something deactivates in production. */
|
|
566
|
+
std::vector<Bound> Host::boundon(const std::string& point) const {
|
|
567
|
+
V ranked = order(point);
|
|
568
|
+
std::vector<Bound> out;
|
|
569
|
+
for (size_t i = 0; i < len(ranked); i++) {
|
|
570
|
+
InstPtr e = find(asstr(at(ranked, i)));
|
|
571
|
+
if (!e) continue;
|
|
572
|
+
/* The band is the INSTANCE's ordering block (§7), stamped by the
|
|
573
|
+
* host. A plugin passing its own would be ranking itself above the
|
|
574
|
+
* order its document declared. */
|
|
575
|
+
V band = get(e->order_, "band");
|
|
576
|
+
double bandv = isnum(band) ? asnum(band) : 0.0;
|
|
577
|
+
for (const auto& b : e->bindings_) {
|
|
578
|
+
if (b.point != point) continue;
|
|
579
|
+
Bound copy = b;
|
|
580
|
+
copy.band = bandv;
|
|
581
|
+
out.push_back(copy);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
return out;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
V Host::pointspec(const std::string& point) const {
|
|
588
|
+
if (!has(points_, point)) {
|
|
589
|
+
fail("plugin_point_unknown", "no such point: " + point,
|
|
590
|
+
details1("point", vstr(point)));
|
|
591
|
+
}
|
|
592
|
+
V spec = get(points_, point);
|
|
593
|
+
return ismap(spec) ? spec : vmap();
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
static void checkkind(const V& spec, const std::string& point,
|
|
597
|
+
const std::string& want) {
|
|
598
|
+
V kind = get(spec, "kind");
|
|
599
|
+
bool given = isstr(kind);
|
|
600
|
+
bool ok = given ? (asstr(kind) == want) : ("hook" == want);
|
|
601
|
+
if (ok) return;
|
|
602
|
+
V d = vmap();
|
|
603
|
+
set(d, "point", vstr(point));
|
|
604
|
+
set(d, "kind", given ? kind : vnull());
|
|
605
|
+
fail("plugin_point_kind", "point is not a " + want + ": " + point, d);
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
V Host::emit(const std::string& point, const V& arg) {
|
|
609
|
+
V spec = pointspec(point);
|
|
610
|
+
checkkind(spec, point, "hook");
|
|
611
|
+
auto bindings = boundon(point);
|
|
612
|
+
V mode = get(spec, "mode");
|
|
613
|
+
const std::string m = isstr(mode) ? asstr(mode) : "emit";
|
|
614
|
+
V errors;
|
|
615
|
+
V out = pointemit(bindings, m, arg, errors);
|
|
616
|
+
if ("emit" == m) return nullptr;
|
|
617
|
+
if ("bail" == m) return out;
|
|
618
|
+
return errors;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
V Host::call(const std::string& point, const V& arg) {
|
|
622
|
+
V spec = pointspec(point);
|
|
623
|
+
checkkind(spec, point, "chain");
|
|
624
|
+
auto bindings = boundon(point);
|
|
625
|
+
/* The host owns the base and a plugin cannot replace it (§6.2). One
|
|
626
|
+
* that wants to SUBSTITUTE rather than wrap binds innermost and
|
|
627
|
+
* simply does not call `next`. */
|
|
628
|
+
auto it = bases_.find(point);
|
|
629
|
+
return pointcall(bindings, bases_.end() == it ? Hook() : it->second, arg);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
V Host::provider(const std::string& point, const V& arg) {
|
|
633
|
+
V spec = pointspec(point);
|
|
634
|
+
checkkind(spec, point, "provider");
|
|
635
|
+
auto bindings = boundon(point);
|
|
636
|
+
V shadow;
|
|
637
|
+
long winner = pointprovider(bindings, truthy(get(spec, "exclusive")), shadow);
|
|
638
|
+
if (0 > winner) return get(spec, "default");
|
|
639
|
+
return bindings[static_cast<size_t>(winner)].hook(arg);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
V Host::trace() const {
|
|
643
|
+
V out = vlist();
|
|
644
|
+
for (size_t i = 0; i < len(events_); i++) push(out, at(events_, i));
|
|
645
|
+
return out;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
V Host::shadowed(const std::string& point) const {
|
|
649
|
+
if (!has(points_, point)) return vlist();
|
|
650
|
+
V spec = get(points_, point);
|
|
651
|
+
auto bindings = boundon(point);
|
|
652
|
+
V shadow;
|
|
653
|
+
pointprovider(bindings, ismap(spec) && truthy(get(spec, "exclusive")), shadow);
|
|
654
|
+
return shadow ? shadow : vlist();
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
V Host::exports(const std::string& spec) const {
|
|
658
|
+
V all = vlist();
|
|
659
|
+
for (const auto& r : sortedrefs()) {
|
|
660
|
+
InstPtr e = find(r);
|
|
661
|
+
/* Exports of a `loaded` (not live) instance are VISIBLE (§11). */
|
|
662
|
+
if ("declared" == e->status_ || "failed" == e->status_) continue;
|
|
663
|
+
for (const auto& k : keys(e->exports_)) {
|
|
664
|
+
V ex = vmap();
|
|
665
|
+
set(ex, "ref", vstr(r));
|
|
666
|
+
set(ex, "key", vstr(k));
|
|
667
|
+
set(ex, "value", get(e->exports_, k));
|
|
668
|
+
push(all, ex);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
return resolveexport(vstr(spec), all);
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
V Host::capability(const std::string& name) const {
|
|
675
|
+
V cands = vlist();
|
|
676
|
+
for (const auto& r : sortedrefs()) {
|
|
677
|
+
InstPtr e = find(r);
|
|
678
|
+
if ("live" != e->status_) continue;
|
|
679
|
+
for (size_t j = 0; j < len(e->provides_); j++) {
|
|
680
|
+
V p = at(e->provides_, j);
|
|
681
|
+
if (isstr(get(p, "name")) && asstr(get(p, "name")) == name) {
|
|
682
|
+
V c = vmap();
|
|
683
|
+
set(c, "ref", vstr(r));
|
|
684
|
+
set(c, "pos", vnum(e->pos_));
|
|
685
|
+
set(c, "provides", p);
|
|
686
|
+
push(cands, c);
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
V req = vmap();
|
|
691
|
+
set(req, "name", vstr(name));
|
|
692
|
+
V ranked = resolvecapability(req, cands);
|
|
693
|
+
V out = vlist();
|
|
694
|
+
for (size_t i = 0; i < len(ranked); i++) push(out, get(at(ranked, i), "ref"));
|
|
695
|
+
return out;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/* ------------------------------------------------------------------ */
|
|
699
|
+
/* the state machine */
|
|
700
|
+
/* ------------------------------------------------------------------ */
|
|
701
|
+
|
|
702
|
+
std::string Host::autotag(const std::string& name) const {
|
|
703
|
+
/* AUTO-TAGGING IS EXPLICIT (§4 rule 3): the LOWEST UNUSED POSITIVE
|
|
704
|
+
* INTEGER tag. It needs a host because it must know what is already
|
|
705
|
+
* declared, which is why it cannot live in the pure `ref` section. */
|
|
706
|
+
for (int n = 1;; n++) {
|
|
707
|
+
const std::string cand = formatref(vstr(name), vstr(std::to_string(n)));
|
|
708
|
+
if (!find(cand)) return cand;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
InstPtr Host::declare(const std::string& ref, const DeclareSpec& spec) {
|
|
713
|
+
std::string r;
|
|
714
|
+
if ("?" == spec.tag) r = autotag(refname(canonref(ref)));
|
|
715
|
+
else r = canonref(ref);
|
|
716
|
+
|
|
717
|
+
if (!spec.hostowned) checkreserved(r);
|
|
718
|
+
|
|
719
|
+
const std::string defname =
|
|
720
|
+
spec.definition.empty() ? refname(r) : spec.definition;
|
|
721
|
+
DefinitionPtr def = catalog_->get(defname);
|
|
722
|
+
if (!def) {
|
|
723
|
+
fail("plugin_unknown_definition", "not in catalog: " + defname,
|
|
724
|
+
details1("name", vstr(defname)));
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
InstPtr existing = find(r);
|
|
728
|
+
if (existing) {
|
|
729
|
+
/* §4 rule 1: a pair addresses at most one instance. Re-declaring the
|
|
730
|
+
* SAME definition is the idempotent case; a different one is a
|
|
731
|
+
* duplicate, not a silent overwrite (seneca) and not an
|
|
732
|
+
* impossibility (sdkgen). */
|
|
733
|
+
if (existing->def_->name != def->name) {
|
|
734
|
+
fail("plugin_ref_duplicate", "instance already declared: " + r,
|
|
735
|
+
details1("ref", vstr(r)));
|
|
736
|
+
}
|
|
737
|
+
return existing;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
auto e = std::make_shared<Inst>();
|
|
741
|
+
e->ref_ = r;
|
|
742
|
+
e->def_ = def;
|
|
743
|
+
e->status_ = "declared";
|
|
744
|
+
e->pos_ = spec.haspos ? spec.pos : static_cast<double>(instances_.size());
|
|
745
|
+
e->seq_ = seqn_++;
|
|
746
|
+
/* NO OPTIONS ADOPTED HERE. `apply` resolves options and hands the map
|
|
747
|
+
* over; adopting the caller's map made target and source THE SAME MAP
|
|
748
|
+
* in the refill that follows, which cleared its own source and left a
|
|
749
|
+
* first-time instance with no options at all. */
|
|
750
|
+
e->options_ = ismap(spec.options) ? spec.options : vmap();
|
|
751
|
+
e->order_ = spec.order;
|
|
752
|
+
e->owner_ = this;
|
|
753
|
+
instances_.push_back(e);
|
|
754
|
+
return e;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
InstPtr Host::load(const std::string& ref, const DeclareSpec& spec) {
|
|
758
|
+
guard();
|
|
759
|
+
InstPtr e = declare(ref, spec);
|
|
760
|
+
if ("declared" != e->status_) return e; /* idempotent */
|
|
761
|
+
/* PRESENT AND NOT NULL, not merely present. Every driver builds its
|
|
762
|
+
* command spec with all four keys and a null for each absent one, so
|
|
763
|
+
* a presence test reads an omitted `options` as an authored empty and
|
|
764
|
+
* wipes the real ones. */
|
|
765
|
+
if (ismap(spec.options)) e->options_ = spec.options;
|
|
766
|
+
|
|
767
|
+
try {
|
|
768
|
+
run(e, "define");
|
|
769
|
+
}
|
|
770
|
+
catch (const PluginError&) {
|
|
771
|
+
e->status_ = "failed";
|
|
772
|
+
throw;
|
|
773
|
+
}
|
|
774
|
+
e->status_ = "loaded";
|
|
775
|
+
|
|
776
|
+
/* AT LOAD, and before anything runs: a cycle through restart-causing
|
|
777
|
+
* requirements does not settle, and the only safe time to report a
|
|
778
|
+
* non-terminating reconcile is before it starts (§11.3). `provides`
|
|
779
|
+
* is populated by `define`, which has just run, so this is the first
|
|
780
|
+
* moment the graph is complete. */
|
|
781
|
+
try {
|
|
782
|
+
checkcycle(graphnodes());
|
|
783
|
+
}
|
|
784
|
+
catch (const PluginError&) {
|
|
785
|
+
e->status_ = "failed";
|
|
786
|
+
throw;
|
|
787
|
+
}
|
|
788
|
+
return e;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
/* CONSUMERS GO DOWN FIRST, NOT AFTERWARDS (§11.3).
|
|
792
|
+
*
|
|
793
|
+
* The cascade is part of the provider's own deactivation and runs
|
|
794
|
+
* BEFORE the provider's `deactivate` callback and scope unwind, so a
|
|
795
|
+
* consumer's teardown can still call the thing it depends on — flushing
|
|
796
|
+
* a buffer to the store it is about to lose is exactly what a
|
|
797
|
+
* `deactivate` callback is for. */
|
|
798
|
+
void Host::cascade(const InstPtr& provider, const V& seen) {
|
|
799
|
+
if (has(seen, provider->ref_)) return;
|
|
800
|
+
set(seen, provider->ref_, vbool(true));
|
|
801
|
+
|
|
802
|
+
V cons = consumersof(provider->ref_);
|
|
803
|
+
for (size_t i = 0; i < len(cons); i++) {
|
|
804
|
+
InstPtr c = find(asstr(at(cons, i)));
|
|
805
|
+
if (!c || "live" != c->status_) continue;
|
|
806
|
+
cascade(c, seen); /* deepest-first */
|
|
807
|
+
bool bad = false;
|
|
808
|
+
try {
|
|
809
|
+
run(c, "deactivate");
|
|
810
|
+
}
|
|
811
|
+
catch (const PluginError&) {
|
|
812
|
+
bad = true;
|
|
813
|
+
}
|
|
814
|
+
V errors = unwind(c);
|
|
815
|
+
if (bad || 0 < len(errors)) {
|
|
816
|
+
/* §5.2: ANY failure during a transition lands the instance in
|
|
817
|
+
* `failed`, and a cascaded consumer is not an exception. Marking
|
|
818
|
+
* it `pending` instead handed it straight back to `reconcile`,
|
|
819
|
+
* which would activate it again the moment the provider returned
|
|
820
|
+
* — the one thing `failed` exists to stop. */
|
|
821
|
+
c->status_ = "failed";
|
|
822
|
+
continue;
|
|
823
|
+
}
|
|
824
|
+
c->status_ = "pending";
|
|
825
|
+
c->unmet_ = unmetof(c);
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
InstPtr Host::activate(const std::string& ref) {
|
|
830
|
+
guard();
|
|
831
|
+
InstPtr e = need(ref);
|
|
832
|
+
if ("live" == e->status_) return e; /* no-op returning success */
|
|
833
|
+
if ("failed" == e->status_) {
|
|
834
|
+
fail("plugin_bad_state", "instance has failed: " + e->ref_,
|
|
835
|
+
details1("ref", vstr(e->ref_)));
|
|
836
|
+
}
|
|
837
|
+
/* §9.6: `active: false` bars the instance from running, and the bar
|
|
838
|
+
* is on the INSTANCE rather than on the apply that set it. `ready`
|
|
839
|
+
* reaches this through `activate`, which is why one guard covers both
|
|
840
|
+
* verbs the design names. */
|
|
841
|
+
if (e->barred_) {
|
|
842
|
+
fail("plugin_inactive", "instance is barred by active: false: " + e->ref_,
|
|
843
|
+
details1("ref", vstr(e->ref_)));
|
|
844
|
+
}
|
|
845
|
+
if ("declared" == e->status_) load(e->ref_, DeclareSpec());
|
|
846
|
+
|
|
847
|
+
/* A declared requirement that is not live means `pending`: activation
|
|
848
|
+
* is a STANDING REQUEST, not a one-shot event. */
|
|
849
|
+
V unmet = unmetof(e);
|
|
850
|
+
if (0 < len(unmet)) {
|
|
851
|
+
e->unmet_ = unmet;
|
|
852
|
+
e->status_ = "pending";
|
|
853
|
+
return e;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
try {
|
|
857
|
+
run(e, "activate");
|
|
858
|
+
}
|
|
859
|
+
catch (const PluginError&) {
|
|
860
|
+
/* Unwind whatever the partial activation captured, in reverse. */
|
|
861
|
+
unwind(e);
|
|
862
|
+
e->status_ = "failed";
|
|
863
|
+
throw;
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
/* §11.4: THE SELECTION IS MADE HERE, once, and remembered. Every
|
|
867
|
+
* later question — the cascade, `hold`, `unmet` — reads it back
|
|
868
|
+
* rather than re-ranking, which is what "always-reluctant" means. */
|
|
869
|
+
V reqs = requirements(e->options_);
|
|
870
|
+
for (size_t i = 0; i < len(reqs); i++) chosen(e, at(reqs, i), true);
|
|
871
|
+
e->status_ = "live";
|
|
872
|
+
reconcile();
|
|
873
|
+
return e;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
InstPtr Host::deactivate(const std::string& ref) {
|
|
877
|
+
guard();
|
|
878
|
+
InstPtr e = need(ref);
|
|
879
|
+
if ("loaded" == e->status_ || "declared" == e->status_) return e;
|
|
880
|
+
|
|
881
|
+
/* §5.2: `unload` is THE ONLY TRANSITION OUT OF `failed`. Falling
|
|
882
|
+
* through here ran the definition's `deactivate` on an instance that
|
|
883
|
+
* never completed activation and, if that callback happened to
|
|
884
|
+
* succeed, returned it to `loaded` — from where it could be activated
|
|
885
|
+
* again, which is precisely what `failed` exists to prevent. */
|
|
886
|
+
if ("failed" == e->status_) {
|
|
887
|
+
fail("plugin_bad_state", "instance has failed: " + e->ref_,
|
|
888
|
+
details1("ref", vstr(e->ref_)));
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
if ("pending" == e->status_) {
|
|
892
|
+
/* DEACTIVATING A PENDING INSTANCE RUNS NO CALLBACK (§5.2). It never
|
|
893
|
+
* reached activate, so it holds no scope and no live bindings;
|
|
894
|
+
* running the definition's deactivate there would be teardown
|
|
895
|
+
* without matching setup. It cannot fail. */
|
|
896
|
+
e->status_ = "loaded";
|
|
897
|
+
e->unmet_ = vlist();
|
|
898
|
+
return e;
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
held(e);
|
|
902
|
+
cascade(e, vmap());
|
|
903
|
+
|
|
904
|
+
try {
|
|
905
|
+
run(e, "deactivate");
|
|
906
|
+
}
|
|
907
|
+
catch (const PluginError&) {
|
|
908
|
+
unwind(e);
|
|
909
|
+
e->status_ = "failed";
|
|
910
|
+
throw;
|
|
911
|
+
}
|
|
912
|
+
releasecheck(e, unwind(e));
|
|
913
|
+
e->status_ = "loaded";
|
|
914
|
+
reconcile();
|
|
915
|
+
return e;
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
void Host::unload(const std::string& ref) {
|
|
919
|
+
guard();
|
|
920
|
+
InstPtr e = need(ref);
|
|
921
|
+
if ("live" == e->status_ || "pending" == e->status_) {
|
|
922
|
+
if ("live" == e->status_) {
|
|
923
|
+
held(e);
|
|
924
|
+
cascade(e, vmap());
|
|
925
|
+
try {
|
|
926
|
+
run(e, "deactivate");
|
|
927
|
+
}
|
|
928
|
+
catch (const PluginError&) {
|
|
929
|
+
/* §5.2: ANY failure during a transition lands the instance in
|
|
930
|
+
* `failed`, with the scope STILL FULLY UNWOUND. An earlier
|
|
931
|
+
* draft let the raise propagate straight out of `unload`, which
|
|
932
|
+
* left the instance `live` and its scope untouched — reporting
|
|
933
|
+
* a failure while leaking exactly the resources the failure was
|
|
934
|
+
* about. */
|
|
935
|
+
unwind(e);
|
|
936
|
+
e->status_ = "failed";
|
|
937
|
+
throw;
|
|
938
|
+
}
|
|
939
|
+
releasecheck(e, unwind(e));
|
|
940
|
+
}
|
|
941
|
+
e->status_ = "loaded";
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
auto drop = [this, &e]() {
|
|
945
|
+
auto it = std::find(instances_.begin(), instances_.end(), e);
|
|
946
|
+
if (instances_.end() != it) instances_.erase(it);
|
|
947
|
+
};
|
|
948
|
+
|
|
949
|
+
if ("loaded" == e->status_ || "failed" == e->status_) {
|
|
950
|
+
try {
|
|
951
|
+
run(e, "close");
|
|
952
|
+
}
|
|
953
|
+
catch (const PluginError&) {
|
|
954
|
+
drop();
|
|
955
|
+
throw;
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
drop();
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
InstPtr Host::ready(const std::string& ref) {
|
|
962
|
+
/* Runs the whole forward path in one call (§5.1). §15.2's verb list
|
|
963
|
+
* omits this; §5.1 defines it and §15.3's `declare` row requires the
|
|
964
|
+
* corpus to pin it, so the list was incomplete rather than excluding
|
|
965
|
+
* it (DOCS.md §4.2). */
|
|
966
|
+
guard();
|
|
967
|
+
const std::string r = canonref(ref);
|
|
968
|
+
if (!find(r)) declare(r, DeclareSpec());
|
|
969
|
+
if ("declared" == find(r)->status_) load(r, DeclareSpec());
|
|
970
|
+
return activate(r);
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
/* EAGER reconciliation: run to a fixed point rather than scheduling.
|
|
974
|
+
*
|
|
975
|
+
* Two directions, and both are the reason `pending` exists. Activation
|
|
976
|
+
* is a STANDING REQUEST, not a one-shot event: a pending instance whose
|
|
977
|
+
* requirement arrives activates without being asked again, and a LIVE
|
|
978
|
+
* instance whose requirement is lost goes back to pending —
|
|
979
|
+
* recursively, through its own consumers. */
|
|
980
|
+
void Host::reconcile() {
|
|
981
|
+
bool moved = true;
|
|
982
|
+
int rounds = 0;
|
|
983
|
+
while (moved) {
|
|
984
|
+
moved = false;
|
|
985
|
+
if (1000 < ++rounds) break;
|
|
986
|
+
|
|
987
|
+
/* Losses first, so a cascade settles in one pass rather than
|
|
988
|
+
* alternating with re-activations. */
|
|
989
|
+
for (const auto& r : sortedrefs()) {
|
|
990
|
+
InstPtr e = find(r);
|
|
991
|
+
if (!e || "live" != e->status_) continue;
|
|
992
|
+
V reqs = requirements(e->options_);
|
|
993
|
+
V lost = vlist();
|
|
994
|
+
for (size_t j = 0; j < len(reqs); j++) {
|
|
995
|
+
V q = at(reqs, j);
|
|
996
|
+
if (!gatesactivation(q)) continue;
|
|
997
|
+
if (0 == len(providersof(q))) push(lost, q);
|
|
998
|
+
}
|
|
999
|
+
if (0 == len(lost)) continue;
|
|
1000
|
+
/* POLICY IS PER REQUIREMENT, not per instance (§11.3): only the
|
|
1001
|
+
* definition that has the requirement knows what it can cope
|
|
1002
|
+
* with, and one instance may hold both a `static` and a `dynamic`
|
|
1003
|
+
* one. A `dynamic` requirement whose provider is gone leaves the
|
|
1004
|
+
* consumer LIVE and notified. */
|
|
1005
|
+
bool anyrestart = false;
|
|
1006
|
+
for (size_t j = 0; j < len(lost); j++) {
|
|
1007
|
+
if (restartsonloss(at(lost, j))) { anyrestart = true; break; }
|
|
1008
|
+
}
|
|
1009
|
+
if (!anyrestart) continue;
|
|
1010
|
+
|
|
1011
|
+
bool bad = false;
|
|
1012
|
+
try {
|
|
1013
|
+
run(e, "deactivate");
|
|
1014
|
+
}
|
|
1015
|
+
catch (const PluginError&) {
|
|
1016
|
+
bad = true;
|
|
1017
|
+
}
|
|
1018
|
+
V errors = unwind(e);
|
|
1019
|
+
if (bad || 0 < len(errors)) {
|
|
1020
|
+
e->status_ = "failed";
|
|
1021
|
+
moved = true;
|
|
1022
|
+
continue;
|
|
1023
|
+
}
|
|
1024
|
+
e->status_ = "pending";
|
|
1025
|
+
e->unmet_ = unmetof(e);
|
|
1026
|
+
moved = true;
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
for (const auto& r : sortedrefs()) {
|
|
1030
|
+
InstPtr e = find(r);
|
|
1031
|
+
if (!e || "pending" != e->status_) continue;
|
|
1032
|
+
if (0 < len(unmetof(e))) continue;
|
|
1033
|
+
try {
|
|
1034
|
+
run(e, "activate");
|
|
1035
|
+
V reqs = requirements(e->options_);
|
|
1036
|
+
for (size_t j = 0; j < len(reqs); j++) chosen(e, at(reqs, j), true);
|
|
1037
|
+
e->status_ = "live";
|
|
1038
|
+
e->unmet_ = vlist();
|
|
1039
|
+
moved = true;
|
|
1040
|
+
}
|
|
1041
|
+
catch (const PluginError&) {
|
|
1042
|
+
unwind(e);
|
|
1043
|
+
e->status_ = "failed";
|
|
1044
|
+
moved = true;
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
/* ------------------------------------------------------------------ */
|
|
1051
|
+
/* documents */
|
|
1052
|
+
/* ------------------------------------------------------------------ */
|
|
1053
|
+
|
|
1054
|
+
/* Empty the target and refill it, so callers holding the reference see
|
|
1055
|
+
* the new values. A definition's callbacks close over the options map
|
|
1056
|
+
* they were handed at `define`; replacing the reference would leave
|
|
1057
|
+
* every binding reading the values the first apply gave it. */
|
|
1058
|
+
static void refill(const V& target, const V& source) {
|
|
1059
|
+
for (const auto& k : keys(target)) del(target, k);
|
|
1060
|
+
for (const auto& k : keys(source)) set(target, k, get(source, k));
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
V Host::shapeof(const std::string& ref) const {
|
|
1064
|
+
DefinitionPtr d = catalog_->get(refname(ref));
|
|
1065
|
+
return d ? d->shape : nullptr;
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
void Host::apply(const V& doc, const V& profile) {
|
|
1069
|
+
guard();
|
|
1070
|
+
V in = vmap();
|
|
1071
|
+
set(in, "doc", doc);
|
|
1072
|
+
set(in, "profile", isnull(profile) ? profile_ : profile);
|
|
1073
|
+
set(in, "keys", keys_);
|
|
1074
|
+
set(in, "reserved", reserved_);
|
|
1075
|
+
V norm = normalizeconfig(in);
|
|
1076
|
+
|
|
1077
|
+
V want = get(norm, "order");
|
|
1078
|
+
V optionsof = vmap();
|
|
1079
|
+
for (size_t i = 0; i < len(want); i++) {
|
|
1080
|
+
const std::string ref = asstr(at(want, i));
|
|
1081
|
+
V oin = vmap();
|
|
1082
|
+
set(oin, "ref", vstr(ref));
|
|
1083
|
+
set(oin, "doc", doc);
|
|
1084
|
+
set(oin, "profile", isnull(profile) ? profile_ : profile);
|
|
1085
|
+
set(oin, "shape", shapeof(ref));
|
|
1086
|
+
if (ismap(defaults_)) set(oin, "hostdefaults", get(defaults_, refname(ref)));
|
|
1087
|
+
set(optionsof, ref, resolveoptions(oin));
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
/* --- phase 1: deactivations and unloads, in REVERSE load order --- */
|
|
1091
|
+
V instancespec = get(norm, "instance");
|
|
1092
|
+
std::vector<std::string> drop;
|
|
1093
|
+
for (const auto& e : instances_) {
|
|
1094
|
+
if ("declared" == e->status_) continue;
|
|
1095
|
+
V ent = get(instancespec, e->ref_);
|
|
1096
|
+
bool wantlive = ismap(ent) && truthy(get(ent, "active")) &&
|
|
1097
|
+
"eager" == asstr(get(ent, "start"));
|
|
1098
|
+
if (!wantlive) drop.push_back(e->ref_);
|
|
1099
|
+
}
|
|
1100
|
+
/* Reverse load order: highest `pos` first, ref-descending for a tie,
|
|
1101
|
+
* so a consumer declared after its provider goes down first. */
|
|
1102
|
+
std::sort(drop.begin(), drop.end(),
|
|
1103
|
+
[this](const std::string& a, const std::string& b) {
|
|
1104
|
+
InstPtr x = find(a), y = find(b);
|
|
1105
|
+
if (x->pos_ != y->pos_) return x->pos_ > y->pos_;
|
|
1106
|
+
return a > b;
|
|
1107
|
+
});
|
|
1108
|
+
for (const auto& r : drop) unload(r);
|
|
1109
|
+
|
|
1110
|
+
/* --- phase 2: declare and patch EVERYTHING, in load order -------- */
|
|
1111
|
+
for (size_t i = 0; i < len(want); i++) {
|
|
1112
|
+
const std::string ref = asstr(at(want, i));
|
|
1113
|
+
V ent = get(instancespec, ref);
|
|
1114
|
+
DeclareSpec spec;
|
|
1115
|
+
spec.order = get(ent, "order");
|
|
1116
|
+
spec.haspos = true;
|
|
1117
|
+
spec.pos = asnum(get(ent, "pos"));
|
|
1118
|
+
declare(ref, spec);
|
|
1119
|
+
InstPtr e = find(ref);
|
|
1120
|
+
/* The bar is REASSERTED ON EVERY APPLY, in both directions — a
|
|
1121
|
+
* document that turns the instance back on clears it, which is the
|
|
1122
|
+
* whole point of a config switch. */
|
|
1123
|
+
e->barred_ = !truthy(get(ent, "active"));
|
|
1124
|
+
refill(e->options_, get(optionsof, ref));
|
|
1125
|
+
e->order_ = get(ent, "order");
|
|
1126
|
+
e->pos_ = asnum(get(ent, "pos"));
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
/* --- phase 3: loads, then phase 4: activations, in load order ---- */
|
|
1130
|
+
for (int phase = 0; phase < 2; phase++) {
|
|
1131
|
+
for (size_t i = 0; i < len(want); i++) {
|
|
1132
|
+
const std::string ref = asstr(at(want, i));
|
|
1133
|
+
V ent = get(instancespec, ref);
|
|
1134
|
+
bool wantlive = truthy(get(ent, "active")) &&
|
|
1135
|
+
"eager" == asstr(get(ent, "start"));
|
|
1136
|
+
if (!wantlive) continue;
|
|
1137
|
+
if (0 == phase) load(ref, DeclareSpec());
|
|
1138
|
+
else activate(ref);
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
void Host::setoptions(const std::string& ref, const V& patch) {
|
|
1144
|
+
guard();
|
|
1145
|
+
InstPtr e = need(ref);
|
|
1146
|
+
V previous = clone(e->options_);
|
|
1147
|
+
V in = vmap();
|
|
1148
|
+
set(in, "ref", vstr(e->ref_));
|
|
1149
|
+
set(in, "shape", shapeof(e->ref_));
|
|
1150
|
+
set(in, "doc", vmap());
|
|
1151
|
+
set(in, "patch", mergevalue(previous, patch));
|
|
1152
|
+
refill(e->options_, resolveoptions(in));
|
|
1153
|
+
|
|
1154
|
+
if ("live" != e->status_) return;
|
|
1155
|
+
if (e->def_->reconfigure) {
|
|
1156
|
+
PhaseGuard g(&intransition_, &phase_, "reconfigure");
|
|
1157
|
+
e->def_->reconfigure(*e, e->options_, previous);
|
|
1158
|
+
return;
|
|
1159
|
+
}
|
|
1160
|
+
/* Always correct and sometimes expensive; `reconfigure` exists to
|
|
1161
|
+
* make the common case cheap (§9.4). */
|
|
1162
|
+
deactivate(e->ref_);
|
|
1163
|
+
activate(e->ref_);
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
void Host::close() {
|
|
1167
|
+
/* A bulk teardown removing the holders too, so `hold` is suspended
|
|
1168
|
+
* for exactly those holders (§11.3) — while the consumers-first
|
|
1169
|
+
* cascade still runs, which is the half that matters. */
|
|
1170
|
+
/* A COORDINATED FLAG THAT SURVIVES A RAISE IS A DISABLED GUARD. The
|
|
1171
|
+
canonical wraps the teardown in `try/finally`; here an unload that
|
|
1172
|
+
raises would skip the reset and leave the host permanently
|
|
1173
|
+
`coordinated`, so a caller that catches the error and carries on under
|
|
1174
|
+
`dependency: "hold"` gets ad-hoc deactivation with the holder check
|
|
1175
|
+
silently off.
|
|
1176
|
+
|
|
1177
|
+
RAII rather than a try/catch: the flag is cleared by a destructor,
|
|
1178
|
+
so it is cleared on the throwing path without the path being
|
|
1179
|
+
written down twice. */
|
|
1180
|
+
struct Coordinating {
|
|
1181
|
+
bool* flag;
|
|
1182
|
+
explicit Coordinating(bool* f) : flag(f) { *flag = true; }
|
|
1183
|
+
~Coordinating() { *flag = false; }
|
|
1184
|
+
} coordinating(&coordinated_);
|
|
1185
|
+
std::vector<std::string> refs;
|
|
1186
|
+
for (const auto& e : instances_) refs.push_back(e->ref_);
|
|
1187
|
+
/* Reverse load order. */
|
|
1188
|
+
std::sort(refs.begin(), refs.end(),
|
|
1189
|
+
[this](const std::string& a, const std::string& b) {
|
|
1190
|
+
InstPtr x = find(a), y = find(b);
|
|
1191
|
+
if (!x || !y) return false;
|
|
1192
|
+
if (x->pos_ != y->pos_) return x->pos_ > y->pos_;
|
|
1193
|
+
return a > b;
|
|
1194
|
+
});
|
|
1195
|
+
for (const auto& r : refs) {
|
|
1196
|
+
if (find(r)) unload(r);
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
} // namespace plugin
|