@voxgig/sdkgen 4.8.3 → 4.10.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/helpers/manifest.d.ts +2 -1
- package/dist/helpers/manifest.js +75 -1
- package/dist/helpers/manifest.js.map +1 -1
- package/dist/helpers/modelNames.d.ts +7 -0
- package/dist/helpers/modelNames.js +232 -0
- package/dist/helpers/modelNames.js.map +1 -0
- package/dist/helpers/naming.d.ts +2 -1
- package/dist/helpers/naming.js +45 -1
- package/dist/helpers/naming.js.map +1 -1
- package/dist/sdkgen.d.ts +3 -2
- package/dist/sdkgen.js +12 -3
- package/dist/sdkgen.js.map +1 -1
- package/dist/testkit.d.ts +2 -0
- package/dist/testkit.js +80 -24
- package/dist/testkit.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility.js +17 -7
- package/dist/utility.js.map +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +671 -0
- package/project/.sdk/model/target/clojure.aon +10 -0
- package/project/.sdk/model/target/csharp.aon +5 -0
- package/project/.sdk/model/target/elixir.aon +6 -0
- package/project/.sdk/model/target/java.aon +5 -0
- package/project/.sdk/model/target/js.aon +5 -0
- package/project/.sdk/model/target/kotlin.aon +7 -0
- package/project/.sdk/model/target/perl.aon +5 -0
- package/project/.sdk/model/target/php.aon +5 -0
- package/project/.sdk/model/target/rb.aon +5 -0
- package/project/.sdk/model/target/rust.aon +5 -0
- package/project/.sdk/model/target/scala.aon +38 -2
- package/project/.sdk/model/target/swift.aon +10 -0
- package/project/.sdk/model/target/zig.aon +9 -0
- package/project/.sdk/src/cmp/clojure/Config_clojure.ts +51 -4
- package/project/.sdk/src/cmp/clojure/Main_clojure.ts +43 -1
- package/project/.sdk/src/cmp/clojure/Package_clojure.ts +17 -1
- package/project/.sdk/src/cmp/clojure/featureextra_clojure.ts +130 -0
- package/project/.sdk/src/cmp/csharp/Config_csharp.ts +70 -0
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +9 -1
- package/project/.sdk/src/cmp/csharp/Package_csharp.ts +25 -1
- package/project/.sdk/src/cmp/elixir/Config_elixir.ts +68 -2
- package/project/.sdk/src/cmp/elixir/Main_elixir.ts +16 -0
- package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +14 -1
- package/project/.sdk/src/cmp/java/Config_java.ts +84 -2
- package/project/.sdk/src/cmp/java/Main_java.ts +10 -1
- package/project/.sdk/src/cmp/js/Config_js.ts +75 -8
- package/project/.sdk/src/cmp/js/Main_js.ts +66 -2
- package/project/.sdk/src/cmp/js/fragment/Config.data.fragment.js +18 -1
- package/project/.sdk/src/cmp/js/fragment/Config.fragment.js +18 -1
- package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +7 -0
- package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +63 -1
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +32 -2
- package/project/.sdk/src/cmp/perl/Config_perl.ts +129 -3
- package/project/.sdk/src/cmp/perl/Main_perl.ts +41 -1
- package/project/.sdk/src/cmp/perl/Package_perl.ts +13 -1
- package/project/.sdk/src/cmp/perl/fragment/Main.fragment.pm +1 -0
- package/project/.sdk/src/cmp/php/Config_php.ts +105 -1
- package/project/.sdk/src/cmp/php/Gitignore_php.ts +4 -2
- package/project/.sdk/src/cmp/php/Main_php.ts +16 -1
- package/project/.sdk/src/cmp/rb/Config_rb.ts +92 -2
- package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +11 -1
- package/project/.sdk/src/cmp/rb/Main_rb.ts +7 -1
- package/project/.sdk/src/cmp/rust/Main_rust.ts +99 -1
- package/project/.sdk/src/cmp/rust/Package_rust.ts +72 -6
- package/project/.sdk/src/cmp/scala/Config_scala.ts +44 -0
- package/project/.sdk/src/cmp/scala/Main_scala.ts +68 -1
- package/project/.sdk/src/cmp/swift/Config_swift.ts +62 -1
- package/project/.sdk/src/cmp/swift/Main_swift.ts +35 -1
- package/project/.sdk/src/cmp/swift/Package_swift.ts +81 -11
- package/project/.sdk/src/cmp/swift/fragment/Main.fragment.swift +58 -44
- package/project/.sdk/src/cmp/swift/utility_swift.ts +22 -0
- package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
- package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
- package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
- package/project/.sdk/tm/clojure/Makefile +3 -0
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +503 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +84 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +44 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +240 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +199 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +111 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +46 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +122 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +1018 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +106 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +157 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +77 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +92 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +46 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +177 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +90 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +40 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +111 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +297 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +192 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +261 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +165 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +111 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +107 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +61 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +88 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +115 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +214 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +80 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +93 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +63 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +99 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +142 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +25 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +196 -0
- package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +113 -0
- package/project/.sdk/tm/clojure/src/sdk/core.clj +9 -0
- package/project/.sdk/tm/clojure/src/sdk/features.clj +13 -1
- package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +547 -0
- package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +103 -14
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +889 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +196 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +70 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +505 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +52 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +285 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +55 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +228 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +102 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +256 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +1379 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +177 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +326 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +295 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +113 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +177 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +198 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +95 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +351 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +196 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +325 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +195 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +192 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +75 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +112 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +167 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +221 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +213 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +155 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +169 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +172 -0
- package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +240 -0
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +192 -0
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +503 -0
- package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +775 -0
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +1702 -0
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
- package/project/.sdk/tm/csharp/utility/MakeOptions.cs +10 -0
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +118 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +56 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +320 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +205 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +166 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +13 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +73 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +185 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +1182 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +139 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +132 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +179 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +99 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +129 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +59 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +190 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +136 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +42 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +368 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +257 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +160 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +127 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +96 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +124 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +162 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +627 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +134 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +125 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +152 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +80 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +101 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +176 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +67 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +536 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +662 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +824 -0
- package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +1072 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
- 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 +4 -4
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +4 -5
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +3 -3
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +3 -4
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +5 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +31 -2
- package/project/.sdk/tm/go/feature/secrets_feature.go +16 -0
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +123 -0
- package/project/.sdk/tm/go/test/omni/omni.go +8 -3
- package/project/.sdk/tm/go/test/omni/util.go +25 -4
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
- package/project/.sdk/tm/java/feature/SecretsFeature.java +766 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +181 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +64 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +433 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +54 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +292 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +49 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +204 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +93 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +244 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +1196 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +173 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +339 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +274 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +94 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +37 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +172 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +171 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +89 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +232 -0
- package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +198 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +142 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +229 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +302 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +21 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +698 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +100 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +294 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +164 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +161 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +103 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +143 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +186 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +192 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +139 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +143 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +80 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +138 -0
- package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +243 -0
- package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +986 -0
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
- package/project/.sdk/tm/java/utility/MakeOptions.java +7 -0
- package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +431 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +119 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +42 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +323 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +196 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +120 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +48 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +150 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +949 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +35 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +165 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +94 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +106 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +59 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +79 -0
- package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +100 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +574 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +56 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +188 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +135 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +128 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +67 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +115 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +139 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +93 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +99 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +111 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +105 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +157 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +119 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +39 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +40 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +21 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +42 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +18 -0
- package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +151 -0
- package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +946 -0
- package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +18 -3
- package/project/.sdk/tm/js/test/vendor/omni/util.js +25 -8
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +659 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +117 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +40 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +322 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +227 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +163 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +57 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +179 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +1131 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +241 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +180 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +64 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +124 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +125 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +66 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +171 -0
- package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +132 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +359 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +21 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +308 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +525 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +126 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +205 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +251 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +145 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +130 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +77 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +119 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +156 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +219 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +114 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +114 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +118 -0
- package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +220 -0
- package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +1148 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
- package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
- 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/test/vendor/omni/omni.ml +2 -2
- package/project/.sdk/tm/perl/Makefile +6 -1
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +141 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +65 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +346 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +216 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +176 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +59 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +157 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +1139 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +187 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +100 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +119 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +71 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +251 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +122 -0
- package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +70 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +263 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +159 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +180 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +92 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +138 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +213 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +173 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +132 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +132 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +102 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +132 -0
- package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +190 -0
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +124 -0
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +301 -0
- package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +605 -0
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +675 -0
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +957 -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 +670 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +226 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +75 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +444 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +262 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +202 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +74 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +195 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +1514 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +260 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +129 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +169 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +79 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +348 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +163 -0
- package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +40 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +274 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +170 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +163 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +106 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +144 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +194 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +113 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +131 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +150 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +101 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +146 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +161 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +129 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +322 -0
- package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +724 -0
- package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +1067 -0
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
- 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 +4 -2
- 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 +3 -3
- 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 +3 -4
- 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 +4 -6
- 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 +21 -1
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +16 -2
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +27 -12
- package/project/.sdk/tm/rb/Makefile +7 -1
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +118 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +55 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +315 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +197 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +143 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +52 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +147 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +1079 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +169 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +93 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +112 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +56 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +99 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +106 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +24 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +111 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +200 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +130 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +121 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +66 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +107 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +137 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +136 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +97 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +104 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +113 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +127 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +210 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +465 -0
- package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +30 -0
- package/project/.sdk/tm/rb/feature/secrets_feature.rb +561 -0
- package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +842 -0
- package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
- package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +130 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +114 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +416 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +245 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +200 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +90 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +231 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +1565 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +18 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +226 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +137 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +148 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +83 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +132 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +433 -0
- package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +174 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +146 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +230 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +328 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +184 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +172 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +102 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +153 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +228 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +537 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +300 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +137 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +148 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +165 -0
- package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +150 -0
- package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +144 -0
- package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +51 -0
- package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +637 -0
- package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +677 -0
- package/project/.sdk/tm/rust/feature/secrets.rs +961 -0
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +1509 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
- package/project/.sdk/tm/scala/Makefile +8 -3
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +556 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +96 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +270 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +216 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +144 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +59 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +149 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +1089 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +156 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +169 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +47 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +107 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +131 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +53 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +110 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +157 -0
- package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +136 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +302 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +20 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +281 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +473 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +123 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +216 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +225 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +124 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +104 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +68 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +97 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +131 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +209 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +98 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +90 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +95 -0
- package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +214 -0
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +971 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
- package/project/.sdk/tm/scala/utility/Make.scala +7 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/SecretsFeature.swift +669 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +98 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +87 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +298 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +209 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +191 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +63 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +158 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +1141 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +192 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +183 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +130 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +141 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +59 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +125 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +198 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +139 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +271 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +173 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +139 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +198 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +86 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +129 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +175 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +310 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +140 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +118 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +105 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +111 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +297 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +120 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +452 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +25 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +689 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +755 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +9 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +30 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/feature/secrets/SecretsFeatureTest.swift +1030 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
- 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/utility/StructUtility.ts +2 -2
- 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/Makefile +15 -1
- package/project/.sdk/tm/zig/build.zig +23 -5
- package/project/.sdk/tm/zig/core/helpers.zig +52 -11
- package/project/.sdk/tm/zig/core/mem.zig +17 -1
- package/project/.sdk/tm/zig/core/utility.zig +23 -19
- package/project/.sdk/tm/zig/feature/audit.zig +2 -2
- package/project/.sdk/tm/zig/feature/cache.zig +2 -2
- package/project/.sdk/tm/zig/feature/debug.zig +5 -5
- package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
- package/project/.sdk/tm/zig/feature/paging.zig +2 -2
- package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
- package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
- package/project/.sdk/tm/zig/feature/support.zig +3 -3
- package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
- package/project/.sdk/tm/zig/feature/test.zig +10 -5
- package/project/.sdk/tm/zig/test/fh.zig +10 -10
- package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
- package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
- package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
- package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
- package/project/.sdk/tm/zig/test/primary_utility_test.zig +144 -154
- package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
- package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
- package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
- package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
- package/project/sdkgen-package.json +1 -4
- package/src/helpers/manifest.ts +81 -1
- package/src/helpers/modelNames.ts +284 -0
- package/src/helpers/naming.ts +45 -1
- package/src/sdkgen.ts +11 -1
- package/src/testkit.ts +115 -26
- package/src/utility.ts +17 -7
- package/project/.sdk/model/target/dart.aon +0 -58
- package/project/.sdk/model/target/lean.aon +0 -91
- package/project/.sdk/model/target/seneca-provider.aon +0 -120
- package/project/.sdk/src/cmp/dart/Config_dart.ts +0 -176
- package/project/.sdk/src/cmp/dart/EntityBase_dart.ts +0 -34
- package/project/.sdk/src/cmp/dart/EntityOperation_dart.ts +0 -43
- package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +0 -207
- package/project/.sdk/src/cmp/dart/Entity_dart.ts +0 -87
- package/project/.sdk/src/cmp/dart/Gitignore_dart.ts +0 -34
- package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +0 -33
- package/project/.sdk/src/cmp/dart/Main_dart.ts +0 -106
- package/project/.sdk/src/cmp/dart/Package_dart.ts +0 -82
- package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +0 -177
- package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +0 -238
- package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +0 -53
- package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +0 -152
- package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +0 -59
- package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +0 -65
- package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +0 -151
- package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +0 -63
- package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +0 -225
- package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +0 -397
- package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +0 -24
- package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +0 -106
- package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +0 -78
- package/project/.sdk/src/cmp/dart/SdkError_dart.ts +0 -42
- package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +0 -516
- package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +0 -628
- package/project/.sdk/src/cmp/dart/Test_dart.ts +0 -116
- package/project/.sdk/src/cmp/dart/fragment/Config.data.fragment.dart +0 -79
- package/project/.sdk/src/cmp/dart/fragment/Config.fragment.dart +0 -51
- package/project/.sdk/src/cmp/dart/fragment/Direct.test.fragment.dart +0 -25
- package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +0 -29
- package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +0 -28
- package/project/.sdk/src/cmp/dart/fragment/EntityBase.fragment.dart +0 -302
- package/project/.sdk/src/cmp/dart/fragment/EntityCreateOp.fragment.dart +0 -98
- package/project/.sdk/src/cmp/dart/fragment/EntityListOp.fragment.dart +0 -90
- package/project/.sdk/src/cmp/dart/fragment/EntityLoadOp.fragment.dart +0 -102
- package/project/.sdk/src/cmp/dart/fragment/EntityRemoveOp.fragment.dart +0 -108
- package/project/.sdk/src/cmp/dart/fragment/EntityUpdateOp.fragment.dart +0 -102
- package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +0 -338
- package/project/.sdk/src/cmp/dart/fragment/SdkError.fragment.dart +0 -26
- package/project/.sdk/src/cmp/dart/tsconfig.json +0 -15
- package/project/.sdk/src/cmp/dart/utility_dart.ts +0 -155
- package/project/.sdk/src/cmp/lean/Config_lean.ts +0 -93
- package/project/.sdk/src/cmp/lean/Entity_lean.ts +0 -9
- package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +0 -18
- package/project/.sdk/src/cmp/lean/Main_lean.ts +0 -120
- package/project/.sdk/src/cmp/lean/Package_lean.ts +0 -93
- package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +0 -29
- package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +0 -19
- package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +0 -25
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +0 -39
- package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +0 -25
- package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +0 -24
- package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +0 -22
- package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +0 -50
- package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +0 -40
- package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +0 -16
- package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +0 -23
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +0 -19
- package/project/.sdk/src/cmp/lean/Test_lean.ts +0 -261
- package/project/.sdk/src/cmp/lean/utility_lean.ts +0 -129
- package/project/.sdk/src/cmp/seneca-provider/Extras_seneca-provider.ts +0 -4080
- package/project/.sdk/src/cmp/seneca-provider/Gitignore_seneca-provider.ts +0 -161
- package/project/.sdk/src/cmp/seneca-provider/Main_seneca-provider.ts +0 -1011
- package/project/.sdk/tm/dart/LICENSE +0 -22
- package/project/.sdk/tm/dart/Makefile +0 -50
- package/project/.sdk/tm/dart/lib/Context.dart +0 -150
- package/project/.sdk/tm/dart/lib/Control.dart +0 -15
- package/project/.sdk/tm/dart/lib/Operation.dart +0 -31
- package/project/.sdk/tm/dart/lib/Point.dart +0 -51
- package/project/.sdk/tm/dart/lib/Response.dart +0 -32
- package/project/.sdk/tm/dart/lib/Result.dart +0 -39
- package/project/.sdk/tm/dart/lib/Spec.dart +0 -49
- package/project/.sdk/tm/dart/lib/feature/audit/AuditFeature.dart +0 -103
- package/project/.sdk/tm/dart/lib/feature/base/BaseFeature.dart +0 -76
- package/project/.sdk/tm/dart/lib/feature/cache/CacheFeature.dart +0 -152
- package/project/.sdk/tm/dart/lib/feature/clienttrack/ClienttrackFeature.dart +0 -104
- package/project/.sdk/tm/dart/lib/feature/cost/CostFeature.dart +0 -446
- package/project/.sdk/tm/dart/lib/feature/debug/DebugFeature.dart +0 -153
- package/project/.sdk/tm/dart/lib/feature/idempotency/IdempotencyFeature.dart +0 -92
- package/project/.sdk/tm/dart/lib/feature/log/LogFeature.dart +0 -85
- package/project/.sdk/tm/dart/lib/feature/metrics/MetricsFeature.dart +0 -103
- package/project/.sdk/tm/dart/lib/feature/netsim/NetsimFeature.dart +0 -186
- package/project/.sdk/tm/dart/lib/feature/paging/PagingFeature.dart +0 -240
- package/project/.sdk/tm/dart/lib/feature/proxy/ProxyFeature.dart +0 -118
- package/project/.sdk/tm/dart/lib/feature/ratelimit/RatelimitFeature.dart +0 -103
- package/project/.sdk/tm/dart/lib/feature/rbac/RbacFeature.dart +0 -121
- package/project/.sdk/tm/dart/lib/feature/retry/RetryFeature.dart +0 -155
- package/project/.sdk/tm/dart/lib/feature/streaming/StreamingFeature.dart +0 -97
- package/project/.sdk/tm/dart/lib/feature/telemetry/TelemetryFeature.dart +0 -136
- package/project/.sdk/tm/dart/lib/feature/test/TestFeature.dart +0 -328
- package/project/.sdk/tm/dart/lib/feature/timeout/TimeoutFeature.dart +0 -104
- package/project/.sdk/tm/dart/lib/utility/CleanUtility.dart +0 -12
- package/project/.sdk/tm/dart/lib/utility/DoneUtility.dart +0 -18
- package/project/.sdk/tm/dart/lib/utility/ErrUtility.dart +0 -46
- package/project/.sdk/tm/dart/lib/utility/FeatureAddUtility.dart +0 -35
- package/project/.sdk/tm/dart/lib/utility/FeatureHookUtility.dart +0 -20
- package/project/.sdk/tm/dart/lib/utility/FeatureInitUtility.dart +0 -9
- package/project/.sdk/tm/dart/lib/utility/FetcherUtility.dart +0 -104
- package/project/.sdk/tm/dart/lib/utility/GraphqlUtility.dart +0 -162
- package/project/.sdk/tm/dart/lib/utility/MakeContextUtility.dart +0 -6
- package/project/.sdk/tm/dart/lib/utility/MakeErrorUtility.dart +0 -71
- package/project/.sdk/tm/dart/lib/utility/MakeFetchDefUtility.dart +0 -42
- package/project/.sdk/tm/dart/lib/utility/MakeOptionsUtility.dart +0 -233
- package/project/.sdk/tm/dart/lib/utility/MakePointUtility.dart +0 -130
- package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +0 -66
- package/project/.sdk/tm/dart/lib/utility/MakeResponseUtility.dart +0 -59
- package/project/.sdk/tm/dart/lib/utility/MakeResultUtility.dart +0 -49
- package/project/.sdk/tm/dart/lib/utility/MakeSpecUtility.dart +0 -77
- package/project/.sdk/tm/dart/lib/utility/MakeUrlUtility.dart +0 -51
- package/project/.sdk/tm/dart/lib/utility/ParamUtility.dart +0 -56
- package/project/.sdk/tm/dart/lib/utility/PrepareAuthUtility.dart +0 -46
- package/project/.sdk/tm/dart/lib/utility/PrepareBodyUtility.dart +0 -19
- package/project/.sdk/tm/dart/lib/utility/PrepareHeadersUtility.dart +0 -11
- package/project/.sdk/tm/dart/lib/utility/PrepareMethodUtility.dart +0 -30
- package/project/.sdk/tm/dart/lib/utility/PrepareParamsUtility.dart +0 -23
- package/project/.sdk/tm/dart/lib/utility/PreparePathUtility.dart +0 -9
- package/project/.sdk/tm/dart/lib/utility/PrepareQueryUtility.dart +0 -18
- package/project/.sdk/tm/dart/lib/utility/ResultBasicUtility.dart +0 -29
- package/project/.sdk/tm/dart/lib/utility/ResultBodyUtility.dart +0 -15
- package/project/.sdk/tm/dart/lib/utility/ResultHeadersUtility.dart +0 -18
- package/project/.sdk/tm/dart/lib/utility/StructUtility.dart +0 -127
- package/project/.sdk/tm/dart/lib/utility/TransformRequestUtility.dart +0 -28
- package/project/.sdk/tm/dart/lib/utility/TransformResponseUtility.dart +0 -44
- package/project/.sdk/tm/dart/lib/utility/Utility.dart +0 -239
- package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +0 -2462
- package/project/.sdk/tm/dart/src/feature/README.md +0 -3
- package/project/.sdk/tm/dart/src/feature/proxy/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/ratelimit/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/rbac/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/retry/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/streaming/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/telemetry/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/dart/src/feature/timeout/.gitkeep +0 -0
- package/project/.sdk/tm/dart/test/custom_test.dart +0 -65
- package/project/.sdk/tm/dart/test/exists_test.dart +0 -12
- package/project/.sdk/tm/dart/test/feature/harness.dart +0 -329
- package/project/.sdk/tm/dart/test/feature_test.dart +0 -1193
- package/project/.sdk/tm/dart/test/harness.dart +0 -153
- package/project/.sdk/tm/dart/test/netsim_test.dart +0 -48
- package/project/.sdk/tm/dart/test/omni.dart +0 -520
- package/project/.sdk/tm/dart/test/omni_smoke_test.dart +0 -143
- package/project/.sdk/tm/dart/test/pipeline_test.dart +0 -608
- package/project/.sdk/tm/dart/test/primary_test.dart +0 -476
- package/project/.sdk/tm/dart/test/sdk-test-control.json +0 -19
- package/project/.sdk/tm/dart/test/struct_test.dart +0 -468
- package/project/.sdk/tm/dart/test/utility.dart +0 -198
- package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +0 -7
- package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +0 -653
- package/project/.sdk/tm/dart/test/vendor/omni/util.dart +0 -232
- package/project/.sdk/tm/lean/LICENSE +0 -21
- package/project/.sdk/tm/lean/Makefile +0 -32
- package/project/.sdk/tm/lean/VERSION +0 -1
- package/project/.sdk/tm/lean/src/SdkFeature.lean +0 -171
- package/project/.sdk/tm/lean/src/SdkFeatures.lean +0 -787
- package/project/.sdk/tm/lean/src/SdkJson.lean +0 -134
- package/project/.sdk/tm/lean/src/SdkRuntime.lean +0 -374
- package/project/.sdk/tm/lean/src/SdkUtility.lean +0 -809
- package/project/.sdk/tm/lean/src/VoxgigStruct.lean +0 -2880
- package/project/.sdk/tm/lean/src/Vregex.lean +0 -412
- package/project/.sdk/tm/lean/src/feature/README.md +0 -5
- package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/cost/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
- package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
- package/project/.sdk/tm/lean/test/OmniResolver.lean +0 -358
- package/project/.sdk/tm/lean/test/OmniSmoke.lean +0 -174
- package/project/.sdk/tm/lean/test/StructCorpus.lean +0 -368
- package/project/.sdk/tm/lean/test/TFeature.lean +0 -281
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +0 -227
- package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +0 -997
- package/project/.sdk/tm/seneca-provider/CODE_OF_CONDUCT.md +0 -132
- package/project/.sdk/tm/seneca-provider/LICENSE +0 -21
- package/project/.sdk/tm/seneca-provider/Makefile +0 -15
- package/project/.sdk/tm/seneca-provider/src/tsconfig.json +0 -18
- package/project/.sdk/tm/seneca-provider/test/tsconfig.json +0 -16
- package/project/.sdk/tm/seneca-provider/tsfmt.json +0 -3
- package/project/.sdk/tm/zig/test/struct_runner.zig +0 -465
- /package/project/.sdk/tm/{dart/src/feature/audit → clojure/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/base → csharp/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/cache → elixir/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/clienttrack → java/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/cost → kotlin/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/debug → perl/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/idempotency → php/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/log → rb/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/metrics → rust/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/netsim → scala/src/feature/secrets}/.gitkeep +0 -0
- /package/project/.sdk/tm/{dart/src/feature/paging → swift/src/feature/secrets}/.gitkeep +0 -0
|
@@ -0,0 +1,1079 @@
|
|
|
1
|
+
# VENDORED: @voxgig/plugin sdk-20260908-1556-0 (ruby/lib/voxgig_plugin/host.rb)
|
|
2
|
+
# Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
|
|
3
|
+
# License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
# The host: the lifecycle state machine (section 5), extension points
|
|
7
|
+
# (section 6), and resource capture (section 8).
|
|
8
|
+
#
|
|
9
|
+
# TWO RULES SHAPE EVERY METHOD BELOW.
|
|
10
|
+
#
|
|
11
|
+
# Transitions are SEQUENTIAL (section 5.2). One at a time, in call order,
|
|
12
|
+
# never interleaved; a transition triggered from inside a lifecycle
|
|
13
|
+
# callback is `plugin_reentrant`. A hard rule, because it is the only way
|
|
14
|
+
# the semantics can be identical in Go, in Ruby and in single-threaded
|
|
15
|
+
# JavaScript.
|
|
16
|
+
#
|
|
17
|
+
# Reconciliation is EAGER (section 18's portability budget). A transition
|
|
18
|
+
# settles by running the state machine to a fixed point, not by
|
|
19
|
+
# suspending on a promise.
|
|
20
|
+
|
|
21
|
+
require_relative 'types'
|
|
22
|
+
require_relative 'ref'
|
|
23
|
+
require_relative 'catalog'
|
|
24
|
+
require_relative 'order'
|
|
25
|
+
require_relative 'point'
|
|
26
|
+
require_relative 'export'
|
|
27
|
+
require_relative 'capability'
|
|
28
|
+
require_relative 'config'
|
|
29
|
+
require_relative 'depend'
|
|
30
|
+
|
|
31
|
+
module VoxgigPlugin
|
|
32
|
+
# What a definition's callbacks see. Deliberately not the internal
|
|
33
|
+
# record: a plugin that could reach `status` could also write it.
|
|
34
|
+
class Inst
|
|
35
|
+
attr_reader :ref, :name, :tag
|
|
36
|
+
|
|
37
|
+
def initialize(host, entry)
|
|
38
|
+
@host = host
|
|
39
|
+
@entry = entry
|
|
40
|
+
@ref = entry['ref']
|
|
41
|
+
parsed = VoxgigPlugin.parse_ref(entry['ref'])
|
|
42
|
+
@name = parsed['name']
|
|
43
|
+
@tag = parsed['tag']
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def options
|
|
47
|
+
@entry['options']
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def state
|
|
51
|
+
@entry['state']
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def host
|
|
55
|
+
@host
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Foreign resources the host did not hand out are registered
|
|
59
|
+
# explicitly (section 8.3); host calls are recorded automatically.
|
|
60
|
+
#
|
|
61
|
+
# SYMMETRIC WITH `acquire`, and it has to be: `open` counts the
|
|
62
|
+
# resources CURRENTLY HELD, so an entry that is registered and then
|
|
63
|
+
# unwound must leave the count where it found it.
|
|
64
|
+
def release(&fn)
|
|
65
|
+
# Section 8.3: "`inst.release` outside `activate` is
|
|
66
|
+
# `plugin_release_scope`". `intransition?` is true in `define` too,
|
|
67
|
+
# and a scope entry registered there is never unwound.
|
|
68
|
+
unless @host.phase == 'activate'
|
|
69
|
+
VoxgigPlugin.fail_with('plugin_release_scope',
|
|
70
|
+
'release called outside activate')
|
|
71
|
+
end
|
|
72
|
+
host = @host
|
|
73
|
+
done = [false]
|
|
74
|
+
@entry['scope'] << lambda {
|
|
75
|
+
unless done[0]
|
|
76
|
+
done[0] = true
|
|
77
|
+
host.open_dec
|
|
78
|
+
fn.call
|
|
79
|
+
end
|
|
80
|
+
}
|
|
81
|
+
host.open_inc
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# The synthetic counter the driver owns, so "what is open" is data
|
|
85
|
+
# rather than an assertion each port words differently.
|
|
86
|
+
#
|
|
87
|
+
# Returns its own release, so a plugin can hand one back early. The
|
|
88
|
+
# scope still holds the entry and unwinding it twice is a no-op -
|
|
89
|
+
# releasing early must not make teardown wrong.
|
|
90
|
+
def acquire
|
|
91
|
+
# Section 8.1: resources are "acquired during `activate` - the
|
|
92
|
+
# scope's actual job". Same reason as `release` above.
|
|
93
|
+
unless @host.phase == 'activate'
|
|
94
|
+
VoxgigPlugin.fail_with('plugin_release_scope',
|
|
95
|
+
'acquire called outside activate')
|
|
96
|
+
end
|
|
97
|
+
host = @host
|
|
98
|
+
done = [false]
|
|
99
|
+
rel = lambda {
|
|
100
|
+
unless done[0]
|
|
101
|
+
done[0] = true
|
|
102
|
+
host.open_dec
|
|
103
|
+
end
|
|
104
|
+
}
|
|
105
|
+
@entry['scope'] << rel
|
|
106
|
+
host.open_inc
|
|
107
|
+
rel
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Bind into a host point. Declared in `define`; the host inserts it
|
|
111
|
+
# only after `activate` returns successfully (section 8.1), which is
|
|
112
|
+
# why a failing activate leaves no live binding behind.
|
|
113
|
+
def bind(point, fn, band = nil)
|
|
114
|
+
# Section 12 has carried `plugin_bind_scope` - "binding declared
|
|
115
|
+
# outside `define`" - since before anything raised it. Section 8.1
|
|
116
|
+
# puts binding DECLARATION in `define` and INSERTION at a
|
|
117
|
+
# successful activate, and the guard was the half nobody wrote: a
|
|
118
|
+
# binding added from `activate` went live without being part of the
|
|
119
|
+
# loaded definition, and a deactivate/activate cycle appended it
|
|
120
|
+
# again.
|
|
121
|
+
unless @host.phase == 'define'
|
|
122
|
+
VoxgigPlugin.fail_with('plugin_bind_scope',
|
|
123
|
+
"bind called outside define: #{point}",
|
|
124
|
+
{ 'ref' => @ref, 'point' => point })
|
|
125
|
+
end
|
|
126
|
+
unless @host.point?(point)
|
|
127
|
+
VoxgigPlugin.fail_with('plugin_point_unknown', "no such point: #{point}",
|
|
128
|
+
{ 'point' => point })
|
|
129
|
+
end
|
|
130
|
+
@entry['bindings'] << { 'ref' => @ref, 'point' => point, 'fn' => fn,
|
|
131
|
+
'band' => band || 0 }
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Published for other plugins and for the application (section 11).
|
|
135
|
+
def export(key, value)
|
|
136
|
+
@entry['exports'][key] = value
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# What this instance can do for others (section 11.1).
|
|
140
|
+
def provides(prov)
|
|
141
|
+
@entry['provides'] << prov
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Where this binding landed (section 6.6) - the plugin-side
|
|
145
|
+
# counterpart to a host pin. THE HOST DOES NOT POLICE THIS; it just
|
|
146
|
+
# makes the fact available. Verification tells a plugin it was
|
|
147
|
+
# misplaced; a pin (section 7) stops the misplacement from being
|
|
148
|
+
# expressible at all. The two are not substitutes.
|
|
149
|
+
def position(point)
|
|
150
|
+
@host.positionof(@ref, point)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# AN INSTANCE MAY ITSELF BE A HOST (section 6.5), and THE OUTER ONE
|
|
154
|
+
# OWNS THE INNER ONE'S LIFETIME. Registering the teardown in the
|
|
155
|
+
# instance scope is what makes that true rather than aspirational.
|
|
156
|
+
def nest(nestopts = nil)
|
|
157
|
+
unless @host.intransition?
|
|
158
|
+
VoxgigPlugin.fail_with('plugin_release_scope',
|
|
159
|
+
'nest called outside a lifecycle callback')
|
|
160
|
+
end
|
|
161
|
+
inner = Host.new(nestopts)
|
|
162
|
+
@entry['scope'] << -> { inner.close }
|
|
163
|
+
@entry['inner'] = inner
|
|
164
|
+
inner
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
class Host
|
|
169
|
+
attr_reader :catalog
|
|
170
|
+
|
|
171
|
+
def initialize(options = nil)
|
|
172
|
+
@opts = options || {}
|
|
173
|
+
@dependency = @opts['dependency'] || 'restart'
|
|
174
|
+
# Set for the duration of a bulk teardown, so `held` knows this is
|
|
175
|
+
# a coordinated operation rather than an ad-hoc deactivation.
|
|
176
|
+
@coordinated = false
|
|
177
|
+
|
|
178
|
+
@catalog = @opts['catalog'] || VoxgigPlugin.make_catalog
|
|
179
|
+
@reserved = @opts['reserved'] || []
|
|
180
|
+
@points = @opts['points'] || {}
|
|
181
|
+
|
|
182
|
+
@inst = {}
|
|
183
|
+
@log = []
|
|
184
|
+
# Section 14: the lifecycle event record. `seq` distinguishes ONE
|
|
185
|
+
# INCARNATION of stripe$test from the next, which is the whole
|
|
186
|
+
# reason it is not `pos` (section 4 rule 4).
|
|
187
|
+
@events = []
|
|
188
|
+
@seqn = 0
|
|
189
|
+
@open = 0
|
|
190
|
+
@intransition = false
|
|
191
|
+
# WHICH callback is running, not merely that one is. Section 8.1
|
|
192
|
+
# puts resource capture in `activate` and 8.3 says `release`
|
|
193
|
+
# outside `activate` is `plugin_release_scope` - and
|
|
194
|
+
# `@intransition` alone cannot tell `activate` from `define`, so it
|
|
195
|
+
# admitted an acquire in `define` whose scope `unload` would never
|
|
196
|
+
# unwind.
|
|
197
|
+
@phase = nil
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def intransition?
|
|
201
|
+
@intransition
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def phase
|
|
205
|
+
@phase
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def point?(name)
|
|
209
|
+
@points.key?(name)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def open_inc
|
|
213
|
+
@open += 1
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def open_dec
|
|
217
|
+
@open -= 1
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
# --- observation ------------------------------------------------
|
|
221
|
+
|
|
222
|
+
# Introspection NEVER advances the state (section 5.2). A status page
|
|
223
|
+
# must not be a way to accidentally import twenty packages.
|
|
224
|
+
def list
|
|
225
|
+
@inst.keys.sort.each_with_object({}) { |r, o| o[r] = @inst[r]['status'] }
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def instance(ref)
|
|
229
|
+
@inst[VoxgigPlugin.canon_ref(ref)]
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def trace
|
|
233
|
+
@events.dup
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def observable(result = nil)
|
|
237
|
+
{ 'status' => list, 'open' => @open, 'log' => @log.dup,
|
|
238
|
+
'result' => result }
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
# --- the state machine ------------------------------------------
|
|
242
|
+
|
|
243
|
+
def guard
|
|
244
|
+
return unless @intransition
|
|
245
|
+
|
|
246
|
+
VoxgigPlugin.fail_with(
|
|
247
|
+
'plugin_reentrant',
|
|
248
|
+
'transition attempted from inside a lifecycle callback'
|
|
249
|
+
)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def need(ref)
|
|
253
|
+
r = VoxgigPlugin.canon_ref(ref)
|
|
254
|
+
entry = @inst[r]
|
|
255
|
+
if entry.nil?
|
|
256
|
+
VoxgigPlugin.fail_with('plugin_not_loaded', "no such instance: #{r}",
|
|
257
|
+
{ 'ref' => r })
|
|
258
|
+
end
|
|
259
|
+
entry
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def checkreserved(ref)
|
|
263
|
+
return if @reserved.empty?
|
|
264
|
+
return unless @reserved.include?(VoxgigPlugin.refname(ref))
|
|
265
|
+
|
|
266
|
+
VoxgigPlugin.fail_with('plugin_ref_reserved',
|
|
267
|
+
"ref is reserved by the host: #{ref}",
|
|
268
|
+
{ 'ref' => ref })
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def run(entry, callback, at)
|
|
272
|
+
fn = entry['def'][callback]
|
|
273
|
+
@log << "#{entry['ref']}:#{at}"
|
|
274
|
+
@events << { 'ref' => entry['ref'], 'event' => at,
|
|
275
|
+
'seq' => entry['seq'], 'status' => entry['status'] }
|
|
276
|
+
return unless fn.respond_to?(:call)
|
|
277
|
+
|
|
278
|
+
@intransition = true
|
|
279
|
+
@phase = at
|
|
280
|
+
begin
|
|
281
|
+
fn.call(Inst.new(self, entry))
|
|
282
|
+
rescue StandardError => e
|
|
283
|
+
# Section 12: `plugin_define_failed` and its three siblings are
|
|
284
|
+
# "a callback raised; wraps the cause". AN ERROR THAT ALREADY
|
|
285
|
+
# CARRIES A CODE KEEPS IT - the code is the error's identity, and
|
|
286
|
+
# a plugin raising `store_unreachable` must not have it
|
|
287
|
+
# rewritten. Only a code-less error is wrapped.
|
|
288
|
+
raise if e.respond_to?(:code) && e.code
|
|
289
|
+
|
|
290
|
+
VoxgigPlugin.fail_with("plugin_#{at}_failed",
|
|
291
|
+
"#{entry['ref']} raised in #{at}: #{e.message}",
|
|
292
|
+
{ 'ref' => entry['ref'], 'cause' => e.message })
|
|
293
|
+
ensure
|
|
294
|
+
@intransition = false
|
|
295
|
+
@phase = nil
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
# AUTO-TAGGING IS EXPLICIT (section 4 rule 3). `declare('stripe',
|
|
300
|
+
# {'tag' => '?'})` assigns the LOWEST UNUSED POSITIVE INTEGER tag and
|
|
301
|
+
# returns the assigned pair. Without `'?'`, a collision is an error.
|
|
302
|
+
def autotag(name)
|
|
303
|
+
n = 1
|
|
304
|
+
loop do
|
|
305
|
+
cand = VoxgigPlugin.format_ref(name, n.to_s)
|
|
306
|
+
return cand unless @inst.key?(cand)
|
|
307
|
+
|
|
308
|
+
n += 1
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def declare(ref, spec = nil)
|
|
313
|
+
spec ||= {}
|
|
314
|
+
ref = autotag(VoxgigPlugin.refname(VoxgigPlugin.canon_ref(ref))) if spec['tag'] == '?'
|
|
315
|
+
r = VoxgigPlugin.canon_ref(ref)
|
|
316
|
+
checkreserved(r) unless spec['hostowned']
|
|
317
|
+
defname = spec['definition'] || VoxgigPlugin.refname(r)
|
|
318
|
+
definition = @catalog.get(defname)
|
|
319
|
+
if definition.nil?
|
|
320
|
+
VoxgigPlugin.fail_with('plugin_unknown_definition',
|
|
321
|
+
"not in catalog: #{defname}", { 'name' => defname })
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
existing = @inst[r]
|
|
325
|
+
unless existing.nil?
|
|
326
|
+
# Section 4 rule 1: a pair addresses at most one instance.
|
|
327
|
+
# Re-declaring the SAME definition is the idempotent case; a
|
|
328
|
+
# different one is a duplicate, not a silent overwrite (seneca)
|
|
329
|
+
# and not an impossibility (sdkgen).
|
|
330
|
+
if existing['def']['name'] != definition['name']
|
|
331
|
+
VoxgigPlugin.fail_with('plugin_ref_duplicate',
|
|
332
|
+
"instance already declared: #{r}", { 'ref' => r })
|
|
333
|
+
end
|
|
334
|
+
return existing
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
entry = {
|
|
338
|
+
'ref' => r, 'def' => definition, 'status' => 'declared',
|
|
339
|
+
'pos' => spec['pos'].nil? ? @inst.length : spec['pos'],
|
|
340
|
+
'seq' => @seqn,
|
|
341
|
+
'options' => spec['options'] || {},
|
|
342
|
+
'state' => {}, 'order' => spec['order'], 'unmet' => [], 'scope' => [],
|
|
343
|
+
# Section 11.4's ALWAYS-RELUCTANT rebinding made concrete: the
|
|
344
|
+
# provider ref this instance's activation actually chose, per
|
|
345
|
+
# requirement name. Re-ranking on every question silently
|
|
346
|
+
# re-points a live consumer at any better newcomer, and then
|
|
347
|
+
# losing the provider it was really using does not restart it.
|
|
348
|
+
'selected' => {},
|
|
349
|
+
'bindings' => [], 'exports' => {}, 'provides' => [], 'inner' => nil
|
|
350
|
+
}
|
|
351
|
+
@seqn += 1
|
|
352
|
+
@inst[r] = entry
|
|
353
|
+
entry
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
# Section 9.1: a host that reserves a name MUST still be able to
|
|
357
|
+
# declare the instance it reserved - "The host declares those
|
|
358
|
+
# instances itself, after the user merge, and always wins."
|
|
359
|
+
#
|
|
360
|
+
# THE BOUNDARY IS BY METHOD, NOT BY CALLER, and that is a real limit:
|
|
361
|
+
# no language here can tell the embedding host from a plugin holding
|
|
362
|
+
# the same host object. What reservation protects is CONFIGURATION -
|
|
363
|
+
# documents, overlays, `VOXGIG_PLUGIN_*`, construction options and
|
|
364
|
+
# ordinary declare/load/options - and all of that still checks.
|
|
365
|
+
def hostdeclare(ref, spec = nil)
|
|
366
|
+
guard
|
|
367
|
+
declare(ref, (spec || {}).merge('hostowned' => true))
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
def load(ref, spec = nil)
|
|
371
|
+
guard
|
|
372
|
+
spec ||= {}
|
|
373
|
+
entry = declare(ref, spec)
|
|
374
|
+
return entry if entry['status'] != 'declared' # idempotent trivially
|
|
375
|
+
|
|
376
|
+
entry['options'] = spec['options'] if spec['options']
|
|
377
|
+
begin
|
|
378
|
+
run(entry, 'define', 'define')
|
|
379
|
+
rescue StandardError
|
|
380
|
+
entry['status'] = 'failed'
|
|
381
|
+
raise
|
|
382
|
+
end
|
|
383
|
+
entry['status'] = 'loaded'
|
|
384
|
+
|
|
385
|
+
# AT LOAD, and before anything runs: a cycle through
|
|
386
|
+
# restart-causing requirements does not settle, and the only safe
|
|
387
|
+
# time to report a non-terminating reconcile is before it starts
|
|
388
|
+
# (section 11.3). `provides` is populated by `define`, which has
|
|
389
|
+
# just run, so this is the first moment the graph is complete.
|
|
390
|
+
begin
|
|
391
|
+
VoxgigPlugin.checkcycle(graphnodes)
|
|
392
|
+
rescue StandardError
|
|
393
|
+
entry['status'] = 'failed'
|
|
394
|
+
raise
|
|
395
|
+
end
|
|
396
|
+
entry
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
# The requirement graph as plain data, for the pure detector.
|
|
400
|
+
def graphnodes
|
|
401
|
+
@inst.keys.sort.map do |r|
|
|
402
|
+
{ 'ref' => r,
|
|
403
|
+
'provides' => @inst[r]['provides'].map { |p| p['name'] },
|
|
404
|
+
'requires' => VoxgigPlugin.requirements(@inst[r]['options']) }
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
def activate(ref)
|
|
409
|
+
guard
|
|
410
|
+
entry = need(ref)
|
|
411
|
+
return entry if entry['status'] == 'live' # no-op returning success
|
|
412
|
+
|
|
413
|
+
if entry['status'] == 'failed'
|
|
414
|
+
VoxgigPlugin.fail_with('plugin_bad_state',
|
|
415
|
+
"instance has failed: #{entry['ref']}",
|
|
416
|
+
{ 'ref' => entry['ref'] })
|
|
417
|
+
end
|
|
418
|
+
# Section 9.6: `active: false` bars the instance from running, and
|
|
419
|
+
# the bar is on the INSTANCE rather than on the apply that set it.
|
|
420
|
+
# `ready` reaches this through `activate`, so one guard covers both
|
|
421
|
+
# verbs the design names.
|
|
422
|
+
if entry['barred']
|
|
423
|
+
VoxgigPlugin.fail_with('plugin_inactive',
|
|
424
|
+
"instance is barred by active: false: #{entry['ref']}",
|
|
425
|
+
{ 'ref' => entry['ref'] })
|
|
426
|
+
end
|
|
427
|
+
load(entry['ref']) if entry['status'] == 'declared'
|
|
428
|
+
|
|
429
|
+
# A declared requirement that is not live means `pending`:
|
|
430
|
+
# activation is a STANDING REQUEST, not a one-shot event.
|
|
431
|
+
unmet = unmetof(entry)
|
|
432
|
+
unless unmet.empty?
|
|
433
|
+
entry['unmet'] = unmet
|
|
434
|
+
entry['status'] = 'pending'
|
|
435
|
+
return entry
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
begin
|
|
439
|
+
run(entry, 'activate', 'activate')
|
|
440
|
+
rescue StandardError
|
|
441
|
+
# Unwind whatever the partial activation captured, in reverse.
|
|
442
|
+
unwind(entry)
|
|
443
|
+
entry['status'] = 'failed'
|
|
444
|
+
raise
|
|
445
|
+
end
|
|
446
|
+
# Section 11.4: THE SELECTION IS MADE HERE, once, and remembered.
|
|
447
|
+
# Every later question - the cascade, `hold`, `unmet` - reads it
|
|
448
|
+
# back rather than re-ranking, which is what "always-reluctant"
|
|
449
|
+
# means.
|
|
450
|
+
VoxgigPlugin.requirements(entry['options']).each do |req|
|
|
451
|
+
chosen(entry, req, true)
|
|
452
|
+
end
|
|
453
|
+
entry['status'] = 'live'
|
|
454
|
+
reconcile
|
|
455
|
+
entry
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
def deactivate(ref)
|
|
459
|
+
guard
|
|
460
|
+
entry = need(ref)
|
|
461
|
+
return entry if %w[loaded declared].include?(entry['status'])
|
|
462
|
+
|
|
463
|
+
# Section 5.2: `unload` is THE ONLY TRANSITION OUT OF `failed`.
|
|
464
|
+
if entry['status'] == 'failed'
|
|
465
|
+
VoxgigPlugin.fail_with('plugin_bad_state',
|
|
466
|
+
"instance has failed: #{entry['ref']}",
|
|
467
|
+
{ 'ref' => entry['ref'] })
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
if entry['status'] == 'pending'
|
|
471
|
+
# DEACTIVATING A PENDING INSTANCE RUNS NO CALLBACK (section 5.2).
|
|
472
|
+
# It never reached activate, so it holds no scope and no live
|
|
473
|
+
# bindings; running the definition's deactivate there would be
|
|
474
|
+
# teardown without matching setup, which plugins are not written
|
|
475
|
+
# to survive and which could fail an instance that had done
|
|
476
|
+
# nothing wrong. It cannot fail.
|
|
477
|
+
entry['status'] = 'loaded'
|
|
478
|
+
entry['unmet'] = []
|
|
479
|
+
return entry
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
held(entry)
|
|
483
|
+
cascade(entry, {})
|
|
484
|
+
|
|
485
|
+
begin
|
|
486
|
+
run(entry, 'deactivate', 'deactivate')
|
|
487
|
+
rescue StandardError
|
|
488
|
+
unwind(entry)
|
|
489
|
+
entry['status'] = 'failed'
|
|
490
|
+
raise
|
|
491
|
+
end
|
|
492
|
+
releasecheck(entry, unwind(entry))
|
|
493
|
+
entry['status'] = 'loaded'
|
|
494
|
+
reconcile
|
|
495
|
+
entry
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
def unload(ref)
|
|
499
|
+
guard
|
|
500
|
+
entry = need(ref)
|
|
501
|
+
if %w[live pending].include?(entry['status'])
|
|
502
|
+
if entry['status'] == 'live'
|
|
503
|
+
held(entry)
|
|
504
|
+
cascade(entry, {})
|
|
505
|
+
begin
|
|
506
|
+
run(entry, 'deactivate', 'deactivate')
|
|
507
|
+
rescue StandardError
|
|
508
|
+
# Section 5.2: ANY failure during a transition lands the
|
|
509
|
+
# instance in `failed`, with the scope STILL FULLY UNWOUND -
|
|
510
|
+
# and the instance STAYS REGISTERED, because `failed` is a
|
|
511
|
+
# state an operator has to be able to see.
|
|
512
|
+
unwind(entry)
|
|
513
|
+
entry['status'] = 'failed'
|
|
514
|
+
raise
|
|
515
|
+
end
|
|
516
|
+
releasecheck(entry, unwind(entry))
|
|
517
|
+
end
|
|
518
|
+
entry['status'] = 'loaded'
|
|
519
|
+
end
|
|
520
|
+
if %w[loaded failed].include?(entry['status'])
|
|
521
|
+
begin
|
|
522
|
+
run(entry, 'close', 'close')
|
|
523
|
+
ensure
|
|
524
|
+
@inst.delete(entry['ref'])
|
|
525
|
+
end
|
|
526
|
+
return
|
|
527
|
+
end
|
|
528
|
+
@inst.delete(entry['ref'])
|
|
529
|
+
end
|
|
530
|
+
|
|
531
|
+
# Runs the whole forward path in one call (section 5.1).
|
|
532
|
+
def ready(ref)
|
|
533
|
+
guard
|
|
534
|
+
r = VoxgigPlugin.canon_ref(ref)
|
|
535
|
+
declare(r) unless @inst.key?(r)
|
|
536
|
+
load(r) if @inst[r]['status'] == 'declared'
|
|
537
|
+
activate(r)
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
# Bindings go live only when activation succeeds (section 8.1), so
|
|
541
|
+
# the teardown is the exact inverse: reverse order, always.
|
|
542
|
+
# Returns the errors the scope raised. Section 8.3: "A failing
|
|
543
|
+
# release does not stop the rest. Every entry runs, in reverse order,
|
|
544
|
+
# whatever any of them does; the errors are collected and raised as
|
|
545
|
+
# one `plugin_release_failed`."
|
|
546
|
+
# A selection belongs to ONE activation (section 11.4). Leaving
|
|
547
|
+
# `live` by any door drops it, so the next activation ranks afresh -
|
|
548
|
+
# keeping it would make a consumer prefer a provider it never
|
|
549
|
+
# actually ran against.
|
|
550
|
+
def unwind(entry)
|
|
551
|
+
entry['selected'] = {}
|
|
552
|
+
errors = []
|
|
553
|
+
entry['scope'].reverse_each do |fn|
|
|
554
|
+
fn.call
|
|
555
|
+
rescue StandardError => e
|
|
556
|
+
errors << e
|
|
557
|
+
end
|
|
558
|
+
entry['scope'] = []
|
|
559
|
+
errors
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
# Section 8.3: "A failed release ends the instance in `failed`,
|
|
563
|
+
# exactly as a failed callback does (5.2) - a release that raised may
|
|
564
|
+
# have leaked, and an instance that may be holding resources it
|
|
565
|
+
# cannot account for must not be reactivated."
|
|
566
|
+
def releasecheck(entry, errors)
|
|
567
|
+
return if errors.empty?
|
|
568
|
+
|
|
569
|
+
entry['status'] = 'failed'
|
|
570
|
+
causes = errors.map(&:message)
|
|
571
|
+
VoxgigPlugin.fail_with('plugin_release_failed',
|
|
572
|
+
"release failed for #{entry['ref']}: #{causes.join('; ')}",
|
|
573
|
+
{ 'ref' => entry['ref'], 'cause' => causes })
|
|
574
|
+
end
|
|
575
|
+
|
|
576
|
+
# A REQUIREMENT IS ON A CAPABILITY, not on a ref (section 11.1). A
|
|
577
|
+
# bare string is shorthand for `{name}`. A ref satisfies too, because
|
|
578
|
+
# a host that genuinely needs a specific instance should not have to
|
|
579
|
+
# invent a capability for it.
|
|
580
|
+
def unmetof(entry)
|
|
581
|
+
VoxgigPlugin.requirements(entry['options'])
|
|
582
|
+
.select { |r| VoxgigPlugin.gatesactivation(r) }
|
|
583
|
+
.select { |r| providersof(r).empty? }
|
|
584
|
+
.map { |r| r['name'] }
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
# The instance currently SELECTED for each of this one's
|
|
588
|
+
# restart-causing requirements. A BINDING IS TO AN INSTANCE, not to a
|
|
589
|
+
# capability (section 11.1): the selected one going away restarts a
|
|
590
|
+
# `static` consumer even though a survivor is available.
|
|
591
|
+
# Section 11.4's always-reluctant selection, and the ONE place a
|
|
592
|
+
# provider is picked for a live instance. If this instance already
|
|
593
|
+
# selected a provider for `req` and that provider is STILL a
|
|
594
|
+
# candidate, it keeps it - a better-ranked newcomer does not take it.
|
|
595
|
+
# `remember` is false for the questions asked ABOUT an instance
|
|
596
|
+
# rather than BY it: introspection must not create a binding.
|
|
597
|
+
def chosen(entry, req, remember)
|
|
598
|
+
cands = providersof(req)
|
|
599
|
+
return nil if cands.empty?
|
|
600
|
+
|
|
601
|
+
held = entry['selected'][req['name']]
|
|
602
|
+
return held if !held.nil? && cands.any? { |c| c['ref'] == held }
|
|
603
|
+
|
|
604
|
+
entry['selected'][req['name']] = cands[0]['ref'] if remember
|
|
605
|
+
cands[0]['ref']
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
def boundproviders(entry)
|
|
609
|
+
out = []
|
|
610
|
+
VoxgigPlugin.requirements(entry['options']).each do |req|
|
|
611
|
+
next unless VoxgigPlugin.restartsonloss(req)
|
|
612
|
+
|
|
613
|
+
ref = chosen(entry, req, false)
|
|
614
|
+
out << ref if !ref.nil? && !out.include?(ref)
|
|
615
|
+
end
|
|
616
|
+
out
|
|
617
|
+
end
|
|
618
|
+
|
|
619
|
+
# Live instances whose selected provider is `ref` and which would be
|
|
620
|
+
# restarted by losing it.
|
|
621
|
+
def consumersof(ref)
|
|
622
|
+
@inst.keys.sort.select do |r|
|
|
623
|
+
c = @inst[r]
|
|
624
|
+
r != ref && c['status'] == 'live' && boundproviders(c).include?(ref)
|
|
625
|
+
end
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
# Section 11.3's `hold` asks a DIFFERENT question from the cascade,
|
|
629
|
+
# and reading it off `consumersof` answered the cascade's.
|
|
630
|
+
#
|
|
631
|
+
# The cascade wants the edges that RESTART - mandatory-static and
|
|
632
|
+
# optional-static - because a restart is what it performs. `hold`
|
|
633
|
+
# says "deactivating a REQUIRED instance is
|
|
634
|
+
# `plugin_dependency_held`", and required is cardinality:
|
|
635
|
+
# `gatesactivation`, not `restartsonloss`. The two sets differ in
|
|
636
|
+
# both directions and each difference was a real bug.
|
|
637
|
+
#
|
|
638
|
+
# A MANDATORY-DYNAMIC consumer was excluded, so the strictest policy
|
|
639
|
+
# let a provider go that a live consumer could not do without -
|
|
640
|
+
# `dynamic` promises survival of a SWAP, and under `hold` there is
|
|
641
|
+
# no swap, so the consumer falls back to `pending`.
|
|
642
|
+
#
|
|
643
|
+
# An OPTIONAL-STATIC consumer was included, so `hold` refused a
|
|
644
|
+
# deactivation on behalf of an instance that had said in writing it
|
|
645
|
+
# does not need the thing.
|
|
646
|
+
def holdersof(ref)
|
|
647
|
+
@inst.keys.sort.select do |r|
|
|
648
|
+
c = @inst[r]
|
|
649
|
+
next false if r == ref || c['status'] != 'live'
|
|
650
|
+
|
|
651
|
+
VoxgigPlugin.requirements(c['options']).any? do |req|
|
|
652
|
+
next false unless VoxgigPlugin.gatesactivation(req)
|
|
653
|
+
|
|
654
|
+
chosen(c, req, false) == ref
|
|
655
|
+
end
|
|
656
|
+
end
|
|
657
|
+
end
|
|
658
|
+
|
|
659
|
+
def providersof(req)
|
|
660
|
+
cands = []
|
|
661
|
+
want = VoxgigPlugin.canon(req['name'])
|
|
662
|
+
@inst.keys.sort.each do |ref|
|
|
663
|
+
target = @inst[ref]
|
|
664
|
+
next unless target['status'] == 'live'
|
|
665
|
+
|
|
666
|
+
# A ref satisfies directly.
|
|
667
|
+
if ref == want
|
|
668
|
+
cands << { 'ref' => ref, 'pos' => target['pos'],
|
|
669
|
+
'provides' => { 'name' => req['name'] } }
|
|
670
|
+
next
|
|
671
|
+
end
|
|
672
|
+
target['provides'].each do |prov|
|
|
673
|
+
cands << { 'ref' => ref, 'pos' => target['pos'], 'provides' => prov } \
|
|
674
|
+
if prov['name'] == req['name']
|
|
675
|
+
end
|
|
676
|
+
end
|
|
677
|
+
VoxgigPlugin.resolve_capability(req, cands)
|
|
678
|
+
end
|
|
679
|
+
|
|
680
|
+
# CONSUMERS GO DOWN FIRST, NOT AFTERWARDS (section 11.3).
|
|
681
|
+
#
|
|
682
|
+
# The cascade is part of the provider's own deactivation and runs
|
|
683
|
+
# BEFORE the provider's `deactivate` callback and scope unwind, so a
|
|
684
|
+
# consumer's teardown can still call the thing it depends on -
|
|
685
|
+
# flushing a buffer to the store it is about to lose is exactly what
|
|
686
|
+
# a `deactivate` callback is for, and a cascade that fired after the
|
|
687
|
+
# provider was already gone would make that impossible.
|
|
688
|
+
def cascade(provider, seen)
|
|
689
|
+
return if seen[provider['ref']]
|
|
690
|
+
|
|
691
|
+
seen[provider['ref']] = true
|
|
692
|
+
|
|
693
|
+
consumersof(provider['ref']).each do |r|
|
|
694
|
+
consumer = @inst[r]
|
|
695
|
+
next unless consumer['status'] == 'live'
|
|
696
|
+
|
|
697
|
+
cascade(consumer, seen) # deepest-first
|
|
698
|
+
bad = false
|
|
699
|
+
begin
|
|
700
|
+
run(consumer, 'deactivate', 'deactivate')
|
|
701
|
+
rescue StandardError
|
|
702
|
+
bad = true
|
|
703
|
+
end
|
|
704
|
+
errors = unwind(consumer)
|
|
705
|
+
if bad || !errors.empty?
|
|
706
|
+
# Section 5.2: ANY failure during a transition lands the
|
|
707
|
+
# instance in `failed`. Marking it `pending` handed it straight
|
|
708
|
+
# back to `reconcile`, which would activate it again the moment
|
|
709
|
+
# the provider returned.
|
|
710
|
+
consumer['status'] = 'failed'
|
|
711
|
+
next
|
|
712
|
+
end
|
|
713
|
+
consumer['status'] = 'pending'
|
|
714
|
+
consumer['unmet'] = unmetof(consumer)
|
|
715
|
+
end
|
|
716
|
+
end
|
|
717
|
+
|
|
718
|
+
# The hold check is A GUARD ON AD-HOC DEACTIVATION, NOT ON
|
|
719
|
+
# COORDINATED TEARDOWN. In a bulk operation that is removing the
|
|
720
|
+
# holders too - `close`, or an `apply` plan whose own steps
|
|
721
|
+
# deactivate them - it is suspended for exactly those holders, and
|
|
722
|
+
# the teardown still runs consumers before providers.
|
|
723
|
+
def held(entry)
|
|
724
|
+
return unless @dependency == 'hold'
|
|
725
|
+
return if @coordinated
|
|
726
|
+
|
|
727
|
+
holders = holdersof(entry['ref'])
|
|
728
|
+
return if holders.empty?
|
|
729
|
+
|
|
730
|
+
VoxgigPlugin.fail_with('plugin_dependency_held',
|
|
731
|
+
"instance is required by live consumers: #{entry['ref']}",
|
|
732
|
+
{ 'ref' => entry['ref'], 'holders' => holders })
|
|
733
|
+
end
|
|
734
|
+
|
|
735
|
+
# EAGER reconciliation: run to a fixed point rather than scheduling.
|
|
736
|
+
#
|
|
737
|
+
# Two directions, and both are the reason `pending` exists.
|
|
738
|
+
# Activation is a STANDING REQUEST, not a one-shot event.
|
|
739
|
+
def reconcile
|
|
740
|
+
moved = true
|
|
741
|
+
rounds = 0
|
|
742
|
+
while moved
|
|
743
|
+
moved = false
|
|
744
|
+
rounds += 1
|
|
745
|
+
break if rounds > 1000
|
|
746
|
+
|
|
747
|
+
# Losses first, so a cascade settles in one pass rather than
|
|
748
|
+
# alternating with re-activations.
|
|
749
|
+
@inst.keys.sort.each do |r|
|
|
750
|
+
entry = @inst[r]
|
|
751
|
+
next unless entry['status'] == 'live'
|
|
752
|
+
|
|
753
|
+
lost = VoxgigPlugin.requirements(entry['options'])
|
|
754
|
+
.select { |q| VoxgigPlugin.gatesactivation(q) }
|
|
755
|
+
.select { |q| providersof(q).empty? }
|
|
756
|
+
next if lost.empty?
|
|
757
|
+
# POLICY IS PER REQUIREMENT, not per instance (section 11.3). A
|
|
758
|
+
# `dynamic` requirement whose provider is gone leaves the
|
|
759
|
+
# consumer LIVE and notified.
|
|
760
|
+
next unless lost.any? { |q| VoxgigPlugin.restartsonloss(q) }
|
|
761
|
+
|
|
762
|
+
bad = false
|
|
763
|
+
begin
|
|
764
|
+
run(entry, 'deactivate', 'deactivate')
|
|
765
|
+
rescue StandardError
|
|
766
|
+
bad = true
|
|
767
|
+
end
|
|
768
|
+
errors = unwind(entry)
|
|
769
|
+
if bad || !errors.empty?
|
|
770
|
+
entry['status'] = 'failed'
|
|
771
|
+
moved = true
|
|
772
|
+
next
|
|
773
|
+
end
|
|
774
|
+
entry['status'] = 'pending'
|
|
775
|
+
entry['unmet'] = unmetof(entry)
|
|
776
|
+
moved = true
|
|
777
|
+
end
|
|
778
|
+
|
|
779
|
+
@inst.keys.sort.each do |r|
|
|
780
|
+
entry = @inst[r]
|
|
781
|
+
next unless entry['status'] == 'pending'
|
|
782
|
+
next unless unmetof(entry).empty?
|
|
783
|
+
|
|
784
|
+
begin
|
|
785
|
+
run(entry, 'activate', 'activate')
|
|
786
|
+
entry['status'] = 'live'
|
|
787
|
+
entry['unmet'] = []
|
|
788
|
+
moved = true
|
|
789
|
+
rescue StandardError
|
|
790
|
+
unwind(entry)
|
|
791
|
+
entry['status'] = 'failed'
|
|
792
|
+
moved = true
|
|
793
|
+
end
|
|
794
|
+
end
|
|
795
|
+
end
|
|
796
|
+
end
|
|
797
|
+
|
|
798
|
+
# --- ordering ---------------------------------------------------
|
|
799
|
+
|
|
800
|
+
def order(point = nil)
|
|
801
|
+
# Sorted by declaration SEQUENCE, which is what makes the section 7
|
|
802
|
+
# sort's fall-through deterministic in a language whose maps have
|
|
803
|
+
# no insertion order. Section 7 breaks ties by `pos`; two instances
|
|
804
|
+
# CAN share one - `declare` defaults `pos` to the registry size, so
|
|
805
|
+
# an unload followed by a fresh declare reuses a surviving
|
|
806
|
+
# instance's - and past that this was falling through to hash
|
|
807
|
+
# order. `seq` is that order, made explicit.
|
|
808
|
+
bindings = @inst.keys.select { |r| @inst[r]['status'] == 'live' }
|
|
809
|
+
.sort_by { |r| @inst[r]['seq'] }
|
|
810
|
+
.map do |r|
|
|
811
|
+
{ 'ref' => r, 'pos' => @inst[r]['pos'], 'order' => @inst[r]['order'] }
|
|
812
|
+
end
|
|
813
|
+
spec = point ? @points[point] : nil
|
|
814
|
+
VoxgigPlugin.resolve_order(bindings, spec ? spec['pin'] : nil)
|
|
815
|
+
end
|
|
816
|
+
|
|
817
|
+
# --- points -----------------------------------------------------
|
|
818
|
+
|
|
819
|
+
# Live bindings on a point, in resolved order. Recomputed on any
|
|
820
|
+
# change to the live set (section 7) rather than cached at startup -
|
|
821
|
+
# the bug a host discovers only when something deactivates in
|
|
822
|
+
# production.
|
|
823
|
+
def bound(point)
|
|
824
|
+
out = []
|
|
825
|
+
order(point).each do |ref|
|
|
826
|
+
entry = @inst[ref]
|
|
827
|
+
# The band is the INSTANCE's ordering block (section 7), stamped
|
|
828
|
+
# by the host. A plugin passing its own would be ranking itself
|
|
829
|
+
# above the order its document declared.
|
|
830
|
+
block = entry['order'] || {}
|
|
831
|
+
band = block['band'].is_a?(Integer) ? block['band'] : 0
|
|
832
|
+
entry['bindings'].each do |b|
|
|
833
|
+
out << b.merge('band' => band) if b['point'] == point
|
|
834
|
+
end
|
|
835
|
+
end
|
|
836
|
+
out
|
|
837
|
+
end
|
|
838
|
+
|
|
839
|
+
def pointspec(point, want)
|
|
840
|
+
spec = @points[point]
|
|
841
|
+
if spec.nil?
|
|
842
|
+
VoxgigPlugin.fail_with('plugin_point_unknown', "no such point: #{point}",
|
|
843
|
+
{ 'point' => point })
|
|
844
|
+
end
|
|
845
|
+
kind = spec['kind']
|
|
846
|
+
if want == 'hook'
|
|
847
|
+
# A point with no declared kind is a hook, which is what makes
|
|
848
|
+
# `{}` the minimal point declaration.
|
|
849
|
+
if kind && kind != 'hook'
|
|
850
|
+
VoxgigPlugin.fail_with('plugin_point_kind', "point is not a hook: #{point}",
|
|
851
|
+
{ 'point' => point, 'kind' => kind })
|
|
852
|
+
end
|
|
853
|
+
return spec
|
|
854
|
+
end
|
|
855
|
+
unless kind == want
|
|
856
|
+
VoxgigPlugin.fail_with('plugin_point_kind',
|
|
857
|
+
"point is not a #{want}: #{point}",
|
|
858
|
+
{ 'point' => point, 'kind' => kind })
|
|
859
|
+
end
|
|
860
|
+
spec
|
|
861
|
+
end
|
|
862
|
+
|
|
863
|
+
def emit(point, arg = nil)
|
|
864
|
+
spec = pointspec(point, 'hook')
|
|
865
|
+
VoxgigPlugin.point_emit(bound(point), spec['mode'] || 'emit', arg)
|
|
866
|
+
end
|
|
867
|
+
|
|
868
|
+
def call(point, *args)
|
|
869
|
+
spec = pointspec(point, 'chain')
|
|
870
|
+
base = spec['base'] || ->(*a) { a[0] }
|
|
871
|
+
VoxgigPlugin.compose(bound(point), base).call(*args)
|
|
872
|
+
end
|
|
873
|
+
|
|
874
|
+
def provider(point, *args)
|
|
875
|
+
spec = pointspec(point, 'provider')
|
|
876
|
+
pick = VoxgigPlugin.point_provider(bound(point), spec)
|
|
877
|
+
return spec['default'] if pick['winner'].nil?
|
|
878
|
+
|
|
879
|
+
pick['winner']['fn'].call(*args)
|
|
880
|
+
end
|
|
881
|
+
|
|
882
|
+
# The losers are VISIBLE rather than silently ignored (section 6.3).
|
|
883
|
+
def shadowed(point)
|
|
884
|
+
spec = @points[point]
|
|
885
|
+
return [] if spec.nil?
|
|
886
|
+
|
|
887
|
+
VoxgigPlugin.point_provider(bound(point), spec)['shadowed']
|
|
888
|
+
end
|
|
889
|
+
|
|
890
|
+
def exports(spec)
|
|
891
|
+
all = []
|
|
892
|
+
@inst.keys.sort.each do |ref|
|
|
893
|
+
entry = @inst[ref]
|
|
894
|
+
# Exports of a `loaded` (not live) instance are VISIBLE (11).
|
|
895
|
+
next if %w[declared failed].include?(entry['status'])
|
|
896
|
+
|
|
897
|
+
entry['exports'].keys.sort.each do |k|
|
|
898
|
+
all << { 'ref' => ref, 'key' => k, 'value' => entry['exports'][k] }
|
|
899
|
+
end
|
|
900
|
+
end
|
|
901
|
+
VoxgigPlugin.resolve_export(spec, all)
|
|
902
|
+
end
|
|
903
|
+
|
|
904
|
+
# The live providers of a capability, best-first (section 11.1).
|
|
905
|
+
def capability(name)
|
|
906
|
+
cands = []
|
|
907
|
+
@inst.keys.sort.each do |ref|
|
|
908
|
+
entry = @inst[ref]
|
|
909
|
+
next unless entry['status'] == 'live'
|
|
910
|
+
|
|
911
|
+
entry['provides'].each do |prov|
|
|
912
|
+
cands << { 'ref' => ref, 'pos' => entry['pos'], 'provides' => prov } \
|
|
913
|
+
if prov['name'] == name
|
|
914
|
+
end
|
|
915
|
+
end
|
|
916
|
+
VoxgigPlugin.resolve_capability({ 'name' => name }, cands).map { |c| c['ref'] }
|
|
917
|
+
end
|
|
918
|
+
|
|
919
|
+
# --- documents --------------------------------------------------
|
|
920
|
+
|
|
921
|
+
# Section 9.6: "load what is missing, UNLOAD WHAT IS GONE, patch
|
|
922
|
+
# what changed, and move activation state to match", with the stated
|
|
923
|
+
# ordering - "deactivations and unloads first (reverse load order),
|
|
924
|
+
# then loads, then activations in load order".
|
|
925
|
+
#
|
|
926
|
+
# FOUR PHASES, NOT ONE INTERLEAVED LOOP. An earlier draft walked the
|
|
927
|
+
# document once, which never looked at instances the new document had
|
|
928
|
+
# DROPPED - so an integration removed from a config reload stayed live
|
|
929
|
+
# with its bindings and resources.
|
|
930
|
+
def apply(doc, profile = nil)
|
|
931
|
+
guard
|
|
932
|
+
profile ||= @opts['profile']
|
|
933
|
+
norm = VoxgigPlugin.normalize_config(
|
|
934
|
+
{ 'doc' => doc, 'profile' => profile,
|
|
935
|
+
'keys' => @opts['keys'], 'reserved' => @reserved }
|
|
936
|
+
)
|
|
937
|
+
|
|
938
|
+
want = norm['order']
|
|
939
|
+
defaults = @opts['defaults'] || {}
|
|
940
|
+
optionsof = {}
|
|
941
|
+
want.each do |ref|
|
|
942
|
+
optionsof[ref] = VoxgigPlugin.resolve_options(
|
|
943
|
+
{ 'ref' => ref, 'doc' => doc, 'profile' => profile,
|
|
944
|
+
'shape' => shapeof(ref),
|
|
945
|
+
'hostdefaults' => defaults[VoxgigPlugin.refname(ref)] }
|
|
946
|
+
)
|
|
947
|
+
end
|
|
948
|
+
|
|
949
|
+
# Should this ref be LIVE after the apply? False for a ref the
|
|
950
|
+
# document declares lazy or inactive AND for one it does not name
|
|
951
|
+
# at all - which is what makes "unload what is gone" and "unload
|
|
952
|
+
# what was toggled off" one rule rather than two.
|
|
953
|
+
wantlive = lambda do |ref|
|
|
954
|
+
ent = norm['instance'][ref]
|
|
955
|
+
!ent.nil? && ent['active'] && ent['start'] == 'eager'
|
|
956
|
+
end
|
|
957
|
+
|
|
958
|
+
# --- phase 1: deactivations and unloads, REVERSE load order ----
|
|
959
|
+
drop = @inst.keys.reject do |r|
|
|
960
|
+
@inst[r]['status'] == 'declared' || wantlive.call(r)
|
|
961
|
+
end
|
|
962
|
+
# Highest `pos` first, ref-descending for a tie, so a consumer
|
|
963
|
+
# declared after its provider goes down first.
|
|
964
|
+
drop = drop.sort_by { |r| [-@inst[r]['pos'], r] }
|
|
965
|
+
.chunk_while { |a, b| @inst[a]['pos'] == @inst[b]['pos'] }
|
|
966
|
+
.flat_map(&:reverse)
|
|
967
|
+
drop.each { |ref| unload(ref) }
|
|
968
|
+
|
|
969
|
+
# --- phase 2: declare and patch EVERYTHING, in load order ------
|
|
970
|
+
want.each do |ref|
|
|
971
|
+
ent = norm['instance'][ref]
|
|
972
|
+
# NO OPTIONS HERE, and the omission is the fix rather than an
|
|
973
|
+
# oversight. `declare` ADOPTS the options map it is handed as the
|
|
974
|
+
# instance's own, so passing the resolved map made target and
|
|
975
|
+
# source THE SAME MAP in the refill below - which cleared its own
|
|
976
|
+
# source and left a first-time instance with no options at all.
|
|
977
|
+
# `declare` makes its own empty map and the refill fills it, so
|
|
978
|
+
# both paths are now one path.
|
|
979
|
+
declare(ref, { 'order' => ent['order'], 'pos' => ent['pos'] })
|
|
980
|
+
# The bar is REASSERTED ON EVERY APPLY, in both directions - a
|
|
981
|
+
# document that turns the instance back on clears it, which is
|
|
982
|
+
# the whole point of a config switch.
|
|
983
|
+
@inst[ref]['barred'] = !ent['active']
|
|
984
|
+
# REFILL rather than REBIND. A definition's callbacks close over
|
|
985
|
+
# the options map they were handed at `define`.
|
|
986
|
+
refill(@inst[ref]['options'], optionsof[ref])
|
|
987
|
+
@inst[ref]['order'] = ent['order']
|
|
988
|
+
@inst[ref]['pos'] = ent['pos']
|
|
989
|
+
end
|
|
990
|
+
|
|
991
|
+
# --- phase 3: loads, in load order -----------------------------
|
|
992
|
+
# ONLY THE EAGER, ACTIVE ONES: "a document of twenty lazy instances
|
|
993
|
+
# is twenty map entries and no executed code" (9.6).
|
|
994
|
+
want.each { |ref| load(ref) if wantlive.call(ref) }
|
|
995
|
+
|
|
996
|
+
# --- phase 4: activations, in load order -----------------------
|
|
997
|
+
want.each { |ref| activate(ref) if wantlive.call(ref) }
|
|
998
|
+
end
|
|
999
|
+
|
|
1000
|
+
def shapeof(ref)
|
|
1001
|
+
definition = @catalog.get(VoxgigPlugin.refname(ref))
|
|
1002
|
+
definition ? definition['shape'] : nil
|
|
1003
|
+
end
|
|
1004
|
+
|
|
1005
|
+
def options(ref, patch)
|
|
1006
|
+
guard
|
|
1007
|
+
entry = need(ref)
|
|
1008
|
+
previous = entry['options'].dup
|
|
1009
|
+
refill(entry['options'], VoxgigPlugin.resolve_options(
|
|
1010
|
+
{ 'ref' => entry['ref'],
|
|
1011
|
+
'shape' => shapeof(entry['ref']),
|
|
1012
|
+
'doc' => {},
|
|
1013
|
+
'patch' => previous.merge(patch || {}) }
|
|
1014
|
+
))
|
|
1015
|
+
return unless entry['status'] == 'live'
|
|
1016
|
+
|
|
1017
|
+
reconfigure = entry['def']['reconfigure']
|
|
1018
|
+
if reconfigure.respond_to?(:call)
|
|
1019
|
+
@intransition = true
|
|
1020
|
+
begin
|
|
1021
|
+
reconfigure.call(Inst.new(self, entry), entry['options'], previous)
|
|
1022
|
+
ensure
|
|
1023
|
+
@intransition = false
|
|
1024
|
+
end
|
|
1025
|
+
else
|
|
1026
|
+
# Always correct and sometimes expensive; `reconfigure` exists to
|
|
1027
|
+
# make the common case cheap (section 9.4).
|
|
1028
|
+
deactivate(entry['ref'])
|
|
1029
|
+
activate(entry['ref'])
|
|
1030
|
+
end
|
|
1031
|
+
end
|
|
1032
|
+
|
|
1033
|
+
# Empty the target and refill it, so callers holding the reference
|
|
1034
|
+
# see the new values.
|
|
1035
|
+
def refill(target, source)
|
|
1036
|
+
target.clear
|
|
1037
|
+
(source || {}).each { |k, v| target[k] = v }
|
|
1038
|
+
end
|
|
1039
|
+
|
|
1040
|
+
def close
|
|
1041
|
+
# A bulk teardown removing the holders too, so `hold` is suspended
|
|
1042
|
+
# for exactly those holders (section 11.3) - while the
|
|
1043
|
+
# consumers-first cascade still runs, which is the half that
|
|
1044
|
+
# matters.
|
|
1045
|
+
@coordinated = true
|
|
1046
|
+
begin
|
|
1047
|
+
@inst.keys.sort.reverse.each { |r| unload(r) }
|
|
1048
|
+
ensure
|
|
1049
|
+
@coordinated = false
|
|
1050
|
+
end
|
|
1051
|
+
end
|
|
1052
|
+
|
|
1053
|
+
# The same record section 6.6 gives a plugin about itself, reachable
|
|
1054
|
+
# from outside for the corpus.
|
|
1055
|
+
def positionof(ref, point)
|
|
1056
|
+
entry = @inst[VoxgigPlugin.canon(ref)]
|
|
1057
|
+
if entry.nil?
|
|
1058
|
+
VoxgigPlugin.fail_with('plugin_not_loaded', "no such instance: #{ref}",
|
|
1059
|
+
{ 'ref' => ref })
|
|
1060
|
+
end
|
|
1061
|
+
ranked = order(point)
|
|
1062
|
+
index = ranked.index(entry['ref']) || -1
|
|
1063
|
+
{ 'index' => index, 'count' => ranked.length,
|
|
1064
|
+
# Section 6.2 composes b1(b2(b3(base))) with the FIRST binding
|
|
1065
|
+
# OUTERMOST, so these are not index 0 and index count-1 the other
|
|
1066
|
+
# way round.
|
|
1067
|
+
'outermost' => index.zero?,
|
|
1068
|
+
'innermost' => index == ranked.length - 1 }
|
|
1069
|
+
end
|
|
1070
|
+
|
|
1071
|
+
def define(definition)
|
|
1072
|
+
@catalog.add(definition)
|
|
1073
|
+
end
|
|
1074
|
+
end
|
|
1075
|
+
|
|
1076
|
+
def self.make_host(options = nil)
|
|
1077
|
+
Host.new(options)
|
|
1078
|
+
end
|
|
1079
|
+
end
|