@voxgig/sdkgen 4.9.0 → 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/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/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/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 +2 -2
- 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 +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +2 -2
- 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 +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +2 -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 +2 -2
- package/project/.sdk/tm/go/test/omni/util.go +2 -2
- 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 +1 -1
- 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 +1 -1
- package/project/.sdk/tm/js/test/vendor/omni/util.js +1 -1
- 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 +2 -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 +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +1 -1
- package/project/.sdk/tm/py/pkg/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 +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +1 -1
- 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 +1 -1
- 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/test/vendor/omni/omni.zig +2 -2
- package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +2 -2
- package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +2 -2
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +2 -2
- 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/{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,1182 @@
|
|
|
1
|
+
# VENDORED: @voxgig/plugin sdk-20260908-1556-0 (elixir/lib/voxgig_plugin/host.ex)
|
|
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
|
+
defmodule Voxgig.Plugin.Host do
|
|
5
|
+
@moduledoc """
|
|
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 FUNCTION 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 suspending
|
|
19
|
+
on a promise.
|
|
20
|
+
|
|
21
|
+
THE HOST IS THE ONE MUTABLE THING IN THIS PORT, and it is an `Agent`
|
|
22
|
+
because elixir has no other way to hold state that outlives a call. Two
|
|
23
|
+
consequences are worth stating plainly, because both are easy to get
|
|
24
|
+
wrong and neither is visible from a green corpus.
|
|
25
|
+
|
|
26
|
+
CALLBACKS RUN OUTSIDE THE AGENT. Every function here executes in the
|
|
27
|
+
CALLER's process and reaches the agent only for short reads and writes;
|
|
28
|
+
a definition's `activate` is never invoked from inside `Agent.update`.
|
|
29
|
+
Running one there would deadlock the moment it called back into its own
|
|
30
|
+
host - which section 5.2 requires to raise `plugin_reentrant`, an answer
|
|
31
|
+
that cannot be given by a process waiting on itself.
|
|
32
|
+
|
|
33
|
+
THE AGENT IS NOT A CONCURRENCY BOUNDARY. It serializes individual reads
|
|
34
|
+
and writes and nothing larger: two processes calling `activate` at once
|
|
35
|
+
would interleave transitions, which section 5.2 forbids and which no
|
|
36
|
+
amount of process discipline here would fix, because the interleaving is
|
|
37
|
+
in the CALLER's control flow. The contract is sequential use; the agent
|
|
38
|
+
provides the mutable cell, not the ordering.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
import Kernel, except: [apply: 2, apply: 3]
|
|
42
|
+
|
|
43
|
+
alias Voxgig.Plugin.Capability
|
|
44
|
+
alias Voxgig.Plugin.Catalog
|
|
45
|
+
alias Voxgig.Plugin.Config
|
|
46
|
+
alias Voxgig.Plugin.Depend
|
|
47
|
+
alias Voxgig.Plugin.Export
|
|
48
|
+
alias Voxgig.Plugin.Inst
|
|
49
|
+
alias Voxgig.Plugin.Order
|
|
50
|
+
alias Voxgig.Plugin.Point
|
|
51
|
+
alias Voxgig.Plugin.Ref
|
|
52
|
+
alias Voxgig.Plugin.Types
|
|
53
|
+
|
|
54
|
+
defstruct [:pid]
|
|
55
|
+
|
|
56
|
+
def make_host(options \\ nil) do
|
|
57
|
+
opts = options || %{}
|
|
58
|
+
|
|
59
|
+
{:ok, pid} =
|
|
60
|
+
Agent.start_link(fn ->
|
|
61
|
+
%{
|
|
62
|
+
opts: opts,
|
|
63
|
+
dependency: Types.get(opts, "dependency") || "restart",
|
|
64
|
+
# Set for the duration of a bulk teardown, so `held` knows this
|
|
65
|
+
# is a coordinated operation rather than an ad-hoc deactivation.
|
|
66
|
+
coordinated: false,
|
|
67
|
+
catalog: Types.get(opts, "catalog") || Catalog.make_catalog(),
|
|
68
|
+
reserved: Types.get(opts, "reserved") || [],
|
|
69
|
+
points: Types.get(opts, "points") || %{},
|
|
70
|
+
inst: %{},
|
|
71
|
+
# Both accumulate at the HEAD and are reversed on the way out:
|
|
72
|
+
# appending to the tail of a list is O(n) here, and section 14's
|
|
73
|
+
# trace is written on every callback of every transition.
|
|
74
|
+
log: [],
|
|
75
|
+
events: [],
|
|
76
|
+
seqn: 0,
|
|
77
|
+
open: 0,
|
|
78
|
+
scopeid: 0,
|
|
79
|
+
intransition: false,
|
|
80
|
+
# WHICH callback is running, not merely that one is. Section 8.1
|
|
81
|
+
# puts resource capture in `activate` and 8.3 says `release`
|
|
82
|
+
# outside `activate` is `plugin_release_scope` - and
|
|
83
|
+
# `intransition` alone cannot tell `activate` from `define`, so
|
|
84
|
+
# it admitted an acquire in `define` whose scope `unload` would
|
|
85
|
+
# never unwind.
|
|
86
|
+
phase: nil
|
|
87
|
+
}
|
|
88
|
+
end)
|
|
89
|
+
|
|
90
|
+
%__MODULE__{pid: pid}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# --- the agent, and the only four ways this module touches it -------
|
|
94
|
+
|
|
95
|
+
defp read(%__MODULE__{pid: pid}, fun), do: Agent.get(pid, fun)
|
|
96
|
+
|
|
97
|
+
defp write(%__MODULE__{pid: pid}, fun), do: Agent.update(pid, fun)
|
|
98
|
+
|
|
99
|
+
defp swap(%__MODULE__{pid: pid}, fun), do: Agent.get_and_update(pid, fun)
|
|
100
|
+
|
|
101
|
+
defp ent(host, ref), do: read(host, &Map.get(&1.inst, ref))
|
|
102
|
+
|
|
103
|
+
@doc false
|
|
104
|
+
def field(host, ref, key), do: read(host, &get_in(&1.inst, [ref, key]))
|
|
105
|
+
|
|
106
|
+
@doc false
|
|
107
|
+
def entry_update(host, ref, fun) do
|
|
108
|
+
write(host, fn st -> %{st | inst: Map.update!(st.inst, ref, fun)} end)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
defp setfield(host, ref, key, value), do: entry_update(host, ref, &Map.put(&1, key, value))
|
|
112
|
+
|
|
113
|
+
defp refs(host), do: read(host, &(&1.inst |> Map.keys() |> Enum.sort()))
|
|
114
|
+
|
|
115
|
+
# --- what the instance api needs ------------------------------------
|
|
116
|
+
|
|
117
|
+
def intransition?(host), do: read(host, & &1.intransition)
|
|
118
|
+
|
|
119
|
+
def phase(host), do: read(host, & &1.phase)
|
|
120
|
+
|
|
121
|
+
def point?(host, name), do: read(host, &Map.has_key?(&1.points, name))
|
|
122
|
+
|
|
123
|
+
def catalog(host), do: read(host, & &1.catalog)
|
|
124
|
+
|
|
125
|
+
@doc """
|
|
126
|
+
Extend a LIVE host's catalog. The catalog is a value (see `Catalog`), so
|
|
127
|
+
a caller holding one just keeps the result of `Catalog.add/2`; this is
|
|
128
|
+
for the one that holds a host instead. Validation runs HERE, outside the
|
|
129
|
+
agent, so an invalid definition raises in the caller rather than killing
|
|
130
|
+
the process that holds the registry.
|
|
131
|
+
"""
|
|
132
|
+
def catalog_add(host, definition) do
|
|
133
|
+
updated = Catalog.add(catalog(host), definition)
|
|
134
|
+
write(host, &%{&1 | catalog: updated})
|
|
135
|
+
:ok
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def define(host, definition), do: catalog_add(host, definition)
|
|
139
|
+
|
|
140
|
+
@doc """
|
|
141
|
+
Register a scope entry and count it open. Returns its own release, which
|
|
142
|
+
is idempotent because releasing POPS THE ENTRY BY ID: a second call finds
|
|
143
|
+
nothing and does nothing, and so does one made after the whole scope
|
|
144
|
+
unwound.
|
|
145
|
+
"""
|
|
146
|
+
def scope_push(host, ref, fun, message) do
|
|
147
|
+
if "activate" != phase(host), do: Types.fail("plugin_release_scope", message)
|
|
148
|
+
|
|
149
|
+
id =
|
|
150
|
+
swap(host, fn st ->
|
|
151
|
+
entry = %{id: st.scopeid, fun: fun, open: 1}
|
|
152
|
+
|
|
153
|
+
{st.scopeid,
|
|
154
|
+
%{st
|
|
155
|
+
| scopeid: st.scopeid + 1,
|
|
156
|
+
open: st.open + 1,
|
|
157
|
+
inst: update_in(st.inst, [ref, "scope"], &(&1 ++ [entry]))}}
|
|
158
|
+
end)
|
|
159
|
+
|
|
160
|
+
fn -> scope_release(host, ref, id) end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
@doc false
|
|
164
|
+
def scope_uncounted(host, ref, fun) do
|
|
165
|
+
write(host, fn st ->
|
|
166
|
+
entry = %{id: st.scopeid, fun: fun, open: 0}
|
|
167
|
+
|
|
168
|
+
%{st
|
|
169
|
+
| scopeid: st.scopeid + 1,
|
|
170
|
+
inst: update_in(st.inst, [ref, "scope"], &(&1 ++ [entry]))}
|
|
171
|
+
end)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
defp scope_release(host, ref, id) do
|
|
175
|
+
fun =
|
|
176
|
+
swap(host, fn st ->
|
|
177
|
+
scope = get_in(st.inst, [ref, "scope"]) || []
|
|
178
|
+
|
|
179
|
+
case Enum.find(scope, &(&1.id == id)) do
|
|
180
|
+
nil ->
|
|
181
|
+
{nil, st}
|
|
182
|
+
|
|
183
|
+
one ->
|
|
184
|
+
{one.fun,
|
|
185
|
+
%{st
|
|
186
|
+
| open: st.open - one.open,
|
|
187
|
+
inst: put_in(st.inst, [ref, "scope"], Enum.reject(scope, &(&1.id == id)))}}
|
|
188
|
+
end
|
|
189
|
+
end)
|
|
190
|
+
|
|
191
|
+
if fun, do: fun.()
|
|
192
|
+
:ok
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# --- observation ----------------------------------------------------
|
|
196
|
+
|
|
197
|
+
@doc """
|
|
198
|
+
Introspection NEVER advances the state (section 5.2). A status page must
|
|
199
|
+
not be a way to accidentally import twenty packages.
|
|
200
|
+
"""
|
|
201
|
+
def list(host) do
|
|
202
|
+
read(host, fn st -> Map.new(st.inst, fn {ref, e} -> {ref, e["status"]} end) end)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def instance(host, ref), do: ent(host, Ref.canon_ref(ref))
|
|
206
|
+
|
|
207
|
+
def trace(host), do: read(host, &Enum.reverse(&1.events))
|
|
208
|
+
|
|
209
|
+
def observable(host, result \\ nil) do
|
|
210
|
+
read(host, fn st ->
|
|
211
|
+
%{"status" => Map.new(st.inst, fn {ref, e} -> {ref, e["status"]} end),
|
|
212
|
+
"open" => st.open,
|
|
213
|
+
"log" => Enum.reverse(st.log),
|
|
214
|
+
"result" => result}
|
|
215
|
+
end)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# --- the state machine ----------------------------------------------
|
|
219
|
+
|
|
220
|
+
defp guard(host) do
|
|
221
|
+
if intransition?(host) do
|
|
222
|
+
Types.fail("plugin_reentrant", "transition attempted from inside a lifecycle callback")
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
defp need(host, ref) do
|
|
227
|
+
r = Ref.canon_ref(ref)
|
|
228
|
+
entry = ent(host, r)
|
|
229
|
+
if is_nil(entry), do: Types.fail("plugin_not_loaded", "no such instance: #{r}", %{"ref" => r})
|
|
230
|
+
entry
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
defp checkreserved(host, ref) do
|
|
234
|
+
if Ref.refname(ref) in read(host, & &1.reserved) do
|
|
235
|
+
Types.fail("plugin_ref_reserved", "ref is reserved by the host: #{ref}", %{"ref" => ref})
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
defp run(host, ref, callback, at) do
|
|
240
|
+
entry = ent(host, ref)
|
|
241
|
+
fun = Types.get(entry["def"], callback)
|
|
242
|
+
|
|
243
|
+
write(host, fn st ->
|
|
244
|
+
%{st
|
|
245
|
+
| log: ["#{ref}:#{at}" | st.log],
|
|
246
|
+
events: [
|
|
247
|
+
%{"ref" => ref, "event" => at, "seq" => entry["seq"], "status" => entry["status"]}
|
|
248
|
+
| st.events
|
|
249
|
+
]}
|
|
250
|
+
end)
|
|
251
|
+
|
|
252
|
+
if is_function(fun, 1), do: invoke(host, ref, fun, at)
|
|
253
|
+
:ok
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
defp invoke(host, ref, fun, at) do
|
|
257
|
+
write(host, &%{&1 | intransition: true, phase: at})
|
|
258
|
+
|
|
259
|
+
try do
|
|
260
|
+
fun.(%Inst{host: host, ref: ref})
|
|
261
|
+
rescue
|
|
262
|
+
e ->
|
|
263
|
+
# Section 12: `plugin_define_failed` and its three siblings are "a
|
|
264
|
+
# callback raised; wraps the cause". AN ERROR THAT ALREADY CARRIES
|
|
265
|
+
# A CODE KEEPS IT - the code is the error's identity, and a plugin
|
|
266
|
+
# raising `store_unreachable` must not have it rewritten. Only a
|
|
267
|
+
# code-less error is wrapped.
|
|
268
|
+
if "" != Types.codeof(e) do
|
|
269
|
+
reraise(e, __STACKTRACE__)
|
|
270
|
+
else
|
|
271
|
+
Types.fail("plugin_#{at}_failed", "#{ref} raised in #{at}: #{Types.message(e)}",
|
|
272
|
+
%{"ref" => ref, "cause" => Types.message(e)})
|
|
273
|
+
end
|
|
274
|
+
after
|
|
275
|
+
write(host, &%{&1 | intransition: false, phase: nil})
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
# AUTO-TAGGING IS EXPLICIT (section 4 rule 3). `declare("stripe", %{"tag"
|
|
280
|
+
# => "?"})` assigns the LOWEST UNUSED POSITIVE INTEGER tag and returns the
|
|
281
|
+
# assigned pair. Without `"?"`, a collision is an error.
|
|
282
|
+
defp autotag(host, name) do
|
|
283
|
+
taken = read(host, & &1.inst)
|
|
284
|
+
|
|
285
|
+
Stream.iterate(1, &(&1 + 1))
|
|
286
|
+
|> Enum.find_value(fn n ->
|
|
287
|
+
cand = Ref.format_ref(name, Integer.to_string(n))
|
|
288
|
+
if Map.has_key?(taken, cand), do: nil, else: cand
|
|
289
|
+
end)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def declare(host, ref, spec \\ nil) do
|
|
293
|
+
spec = spec || %{}
|
|
294
|
+
|
|
295
|
+
ref =
|
|
296
|
+
if "?" == Types.get(spec, "tag"),
|
|
297
|
+
do: autotag(host, Ref.refname(Ref.canon_ref(ref))),
|
|
298
|
+
else: ref
|
|
299
|
+
|
|
300
|
+
r = Ref.canon_ref(ref)
|
|
301
|
+
if not Types.truthy(Types.get(spec, "hostowned")), do: checkreserved(host, r)
|
|
302
|
+
|
|
303
|
+
defname = Types.get(spec, "definition") || Ref.refname(r)
|
|
304
|
+
definition = Catalog.get(catalog(host), defname)
|
|
305
|
+
|
|
306
|
+
if is_nil(definition) do
|
|
307
|
+
Types.fail("plugin_unknown_definition", "not in catalog: #{defname}", %{"name" => defname})
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
existing = ent(host, r)
|
|
311
|
+
|
|
312
|
+
cond do
|
|
313
|
+
is_nil(existing) ->
|
|
314
|
+
newentry(host, r, spec, definition)
|
|
315
|
+
|
|
316
|
+
# Section 4 rule 1: a pair addresses at most one instance.
|
|
317
|
+
# Re-declaring the SAME definition is the idempotent case; a
|
|
318
|
+
# different one is a duplicate, not a silent overwrite (seneca) and
|
|
319
|
+
# not an impossibility (sdkgen).
|
|
320
|
+
Types.get(existing["def"], "name") != Types.get(definition, "name") ->
|
|
321
|
+
Types.fail("plugin_ref_duplicate", "instance already declared: #{r}", %{"ref" => r})
|
|
322
|
+
|
|
323
|
+
true ->
|
|
324
|
+
existing
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
defp newentry(host, r, spec, definition) do
|
|
329
|
+
pos = Types.get(spec, "pos")
|
|
330
|
+
|
|
331
|
+
swap(host, fn st ->
|
|
332
|
+
entry = %{
|
|
333
|
+
"ref" => r,
|
|
334
|
+
"def" => definition,
|
|
335
|
+
"status" => "declared",
|
|
336
|
+
"pos" => if(is_nil(pos), do: map_size(st.inst), else: pos),
|
|
337
|
+
# Section 14: `seq` distinguishes ONE INCARNATION of stripe$test
|
|
338
|
+
# from the next, which is the whole reason it is not `pos`.
|
|
339
|
+
"seq" => st.seqn,
|
|
340
|
+
"options" => Types.get(spec, "options") || %{},
|
|
341
|
+
"state" => %{},
|
|
342
|
+
"order" => Types.get(spec, "order"),
|
|
343
|
+
"unmet" => [],
|
|
344
|
+
"scope" => [],
|
|
345
|
+
# Section 11.4's ALWAYS-RELUCTANT rebinding made concrete: the
|
|
346
|
+
# provider ref this instance's activation actually chose, per
|
|
347
|
+
# requirement name. Re-ranking on every question silently
|
|
348
|
+
# re-points a live consumer at any better newcomer, and then
|
|
349
|
+
# losing the provider it was really using does not restart it.
|
|
350
|
+
"selected" => %{},
|
|
351
|
+
"bindings" => [],
|
|
352
|
+
"exports" => %{},
|
|
353
|
+
"provides" => [],
|
|
354
|
+
"inner" => nil,
|
|
355
|
+
"barred" => false
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
{entry, %{st | seqn: st.seqn + 1, inst: Map.put(st.inst, r, entry)}}
|
|
359
|
+
end)
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
@doc """
|
|
363
|
+
Section 9.1: a host that reserves a name MUST still be able to declare
|
|
364
|
+
the instance it reserved - "The host declares those instances itself,
|
|
365
|
+
after the user merge, and always wins."
|
|
366
|
+
|
|
367
|
+
THE BOUNDARY IS BY FUNCTION, NOT BY CALLER, and that is a real limit: no
|
|
368
|
+
language here can tell the embedding host from a plugin holding the same
|
|
369
|
+
host value. What reservation protects is CONFIGURATION - documents,
|
|
370
|
+
overlays, `VOXGIG_PLUGIN_*`, construction options and ordinary
|
|
371
|
+
declare/load/options - and all of that still checks.
|
|
372
|
+
"""
|
|
373
|
+
def hostdeclare(host, ref, spec \\ nil) do
|
|
374
|
+
guard(host)
|
|
375
|
+
declare(host, ref, Map.put(spec || %{}, "hostowned", true))
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
def load(host, ref, spec \\ nil) do
|
|
379
|
+
guard(host)
|
|
380
|
+
spec = spec || %{}
|
|
381
|
+
entry = declare(host, ref, spec)
|
|
382
|
+
r = entry["ref"]
|
|
383
|
+
|
|
384
|
+
if "declared" != entry["status"] do
|
|
385
|
+
# Idempotent trivially.
|
|
386
|
+
entry
|
|
387
|
+
else
|
|
388
|
+
options = Types.get(spec, "options")
|
|
389
|
+
if options, do: setfield(host, r, "options", options)
|
|
390
|
+
stage(host, r, fn -> run(host, r, "define", "define") end)
|
|
391
|
+
setfield(host, r, "status", "loaded")
|
|
392
|
+
|
|
393
|
+
# AT LOAD, and before anything runs: a cycle through
|
|
394
|
+
# restart-causing requirements does not settle, and the only safe
|
|
395
|
+
# time to report a non-terminating reconcile is before it starts
|
|
396
|
+
# (section 11.3). `provides` is populated by `define`, which has
|
|
397
|
+
# just run, so this is the first moment the graph is complete.
|
|
398
|
+
stage(host, r, fn -> Depend.checkcycle(graphnodes(host)) end)
|
|
399
|
+
ent(host, r)
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
# A step whose failure lands the instance in `failed` and re-raises.
|
|
404
|
+
defp stage(host, ref, fun) do
|
|
405
|
+
fun.()
|
|
406
|
+
rescue
|
|
407
|
+
e ->
|
|
408
|
+
setfield(host, ref, "status", "failed")
|
|
409
|
+
reraise(e, __STACKTRACE__)
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
# The requirement graph as plain data, for the pure detector.
|
|
413
|
+
defp graphnodes(host) do
|
|
414
|
+
read(host, fn st ->
|
|
415
|
+
st.inst
|
|
416
|
+
|> Map.keys()
|
|
417
|
+
|> Enum.sort()
|
|
418
|
+
|> Enum.map(fn r ->
|
|
419
|
+
e = st.inst[r]
|
|
420
|
+
|
|
421
|
+
%{ref: r,
|
|
422
|
+
provides: Enum.map(e["provides"], &Types.get(&1, "name")),
|
|
423
|
+
requires: Depend.requirements(e["options"])}
|
|
424
|
+
end)
|
|
425
|
+
end)
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
def activate(host, ref) do
|
|
429
|
+
guard(host)
|
|
430
|
+
entry = need(host, ref)
|
|
431
|
+
r = entry["ref"]
|
|
432
|
+
|
|
433
|
+
cond do
|
|
434
|
+
# A no-op returning success.
|
|
435
|
+
"live" == entry["status"] ->
|
|
436
|
+
entry
|
|
437
|
+
|
|
438
|
+
"failed" == entry["status"] ->
|
|
439
|
+
Types.fail("plugin_bad_state", "instance has failed: #{r}", %{"ref" => r})
|
|
440
|
+
|
|
441
|
+
# Section 9.6: `active: false` bars the instance from running, and
|
|
442
|
+
# the bar is on the INSTANCE rather than on the apply that set it.
|
|
443
|
+
# `ready` reaches this through `activate`, so one guard covers both
|
|
444
|
+
# verbs the design names.
|
|
445
|
+
Types.truthy(entry["barred"]) ->
|
|
446
|
+
Types.fail("plugin_inactive", "instance is barred by active: false: #{r}",
|
|
447
|
+
%{"ref" => r})
|
|
448
|
+
|
|
449
|
+
true ->
|
|
450
|
+
if "declared" == entry["status"], do: load(host, r)
|
|
451
|
+
toactive(host, r)
|
|
452
|
+
end
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
defp toactive(host, r) do
|
|
456
|
+
# A declared requirement that is not live means `pending`: activation
|
|
457
|
+
# is a STANDING REQUEST, not a one-shot event.
|
|
458
|
+
unmet = unmetof(host, r)
|
|
459
|
+
|
|
460
|
+
if [] != unmet do
|
|
461
|
+
setfield(host, r, "unmet", unmet)
|
|
462
|
+
setfield(host, r, "status", "pending")
|
|
463
|
+
ent(host, r)
|
|
464
|
+
else
|
|
465
|
+
try do
|
|
466
|
+
run(host, r, "activate", "activate")
|
|
467
|
+
rescue
|
|
468
|
+
e ->
|
|
469
|
+
# Unwind whatever the partial activation captured, in reverse.
|
|
470
|
+
unwind(host, r)
|
|
471
|
+
setfield(host, r, "status", "failed")
|
|
472
|
+
reraise(e, __STACKTRACE__)
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
# Section 11.4: THE SELECTION IS MADE HERE, once, and remembered.
|
|
476
|
+
# Every later question - the cascade, `hold`, `unmet` - reads it back
|
|
477
|
+
# rather than re-ranking, which is what "always-reluctant" means.
|
|
478
|
+
Enum.each(Depend.requirements(field(host, r, "options")), &chosen(host, r, &1, true))
|
|
479
|
+
setfield(host, r, "status", "live")
|
|
480
|
+
reconcile(host)
|
|
481
|
+
ent(host, r)
|
|
482
|
+
end
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
def deactivate(host, ref) do
|
|
486
|
+
guard(host)
|
|
487
|
+
entry = need(host, ref)
|
|
488
|
+
r = entry["ref"]
|
|
489
|
+
|
|
490
|
+
cond do
|
|
491
|
+
entry["status"] in ["loaded", "declared"] ->
|
|
492
|
+
entry
|
|
493
|
+
|
|
494
|
+
# Section 5.2: `unload` is THE ONLY TRANSITION OUT OF `failed`.
|
|
495
|
+
"failed" == entry["status"] ->
|
|
496
|
+
Types.fail("plugin_bad_state", "instance has failed: #{r}", %{"ref" => r})
|
|
497
|
+
|
|
498
|
+
# DEACTIVATING A PENDING INSTANCE RUNS NO CALLBACK (section 5.2). It
|
|
499
|
+
# never reached activate, so it holds no scope and no live bindings;
|
|
500
|
+
# running the definition's deactivate there would be teardown without
|
|
501
|
+
# matching setup, which plugins are not written to survive and which
|
|
502
|
+
# could fail an instance that had done nothing wrong. It cannot fail.
|
|
503
|
+
"pending" == entry["status"] ->
|
|
504
|
+
setfield(host, r, "status", "loaded")
|
|
505
|
+
setfield(host, r, "unmet", [])
|
|
506
|
+
ent(host, r)
|
|
507
|
+
|
|
508
|
+
true ->
|
|
509
|
+
held(host, r)
|
|
510
|
+
cascade(host, r, MapSet.new())
|
|
511
|
+
teardown(host, r)
|
|
512
|
+
setfield(host, r, "status", "loaded")
|
|
513
|
+
reconcile(host)
|
|
514
|
+
ent(host, r)
|
|
515
|
+
end
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
# The live half of leaving `live`: the callback, then the scope.
|
|
519
|
+
defp teardown(host, r) do
|
|
520
|
+
try do
|
|
521
|
+
run(host, r, "deactivate", "deactivate")
|
|
522
|
+
rescue
|
|
523
|
+
e ->
|
|
524
|
+
unwind(host, r)
|
|
525
|
+
setfield(host, r, "status", "failed")
|
|
526
|
+
reraise(e, __STACKTRACE__)
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
releasecheck(host, r, unwind(host, r))
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
def unload(host, ref) do
|
|
533
|
+
guard(host)
|
|
534
|
+
entry = need(host, ref)
|
|
535
|
+
r = entry["ref"]
|
|
536
|
+
|
|
537
|
+
if entry["status"] in ["live", "pending"] do
|
|
538
|
+
# Section 5.2: ANY failure during a transition lands the instance in
|
|
539
|
+
# `failed`, with the scope STILL FULLY UNWOUND - and the instance
|
|
540
|
+
# STAYS REGISTERED, because `failed` is a state an operator has to be
|
|
541
|
+
# able to see.
|
|
542
|
+
if "live" == entry["status"] do
|
|
543
|
+
held(host, r)
|
|
544
|
+
cascade(host, r, MapSet.new())
|
|
545
|
+
teardown(host, r)
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
setfield(host, r, "status", "loaded")
|
|
549
|
+
end
|
|
550
|
+
|
|
551
|
+
if field(host, r, "status") in ["loaded", "failed"] do
|
|
552
|
+
try do
|
|
553
|
+
run(host, r, "close", "close")
|
|
554
|
+
after
|
|
555
|
+
drop(host, r)
|
|
556
|
+
end
|
|
557
|
+
else
|
|
558
|
+
drop(host, r)
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
nil
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
defp drop(host, ref), do: write(host, fn st -> %{st | inst: Map.delete(st.inst, ref)} end)
|
|
565
|
+
|
|
566
|
+
@doc "Runs the whole forward path in one call (section 5.1)."
|
|
567
|
+
def ready(host, ref) do
|
|
568
|
+
guard(host)
|
|
569
|
+
r = Ref.canon_ref(ref)
|
|
570
|
+
if is_nil(ent(host, r)), do: declare(host, r)
|
|
571
|
+
if "declared" == field(host, r, "status"), do: load(host, r)
|
|
572
|
+
activate(host, r)
|
|
573
|
+
end
|
|
574
|
+
|
|
575
|
+
# Bindings go live only when activation succeeds (section 8.1), so the
|
|
576
|
+
# teardown is the exact inverse: reverse order, always.
|
|
577
|
+
#
|
|
578
|
+
# Returns the errors the scope raised. Section 8.3: "A failing release does
|
|
579
|
+
# not stop the rest. Every entry runs, in reverse order, whatever any of
|
|
580
|
+
# them does; the errors are collected and raised as one
|
|
581
|
+
# `plugin_release_failed`."
|
|
582
|
+
#
|
|
583
|
+
# A selection belongs to ONE activation (section 11.4). Leaving `live` by
|
|
584
|
+
# any door drops it, so the next activation ranks afresh - keeping it would
|
|
585
|
+
# make a consumer prefer a provider it never actually ran against.
|
|
586
|
+
defp unwind(host, ref) do
|
|
587
|
+
entries =
|
|
588
|
+
swap(host, fn st ->
|
|
589
|
+
scope = get_in(st.inst, [ref, "scope"])
|
|
590
|
+
|
|
591
|
+
{Enum.reverse(scope),
|
|
592
|
+
%{st
|
|
593
|
+
| open: st.open - Enum.reduce(scope, 0, &(&1.open + &2)),
|
|
594
|
+
inst:
|
|
595
|
+
update_in(st.inst, [ref], &Map.merge(&1, %{"scope" => [], "selected" => %{}}))}}
|
|
596
|
+
end)
|
|
597
|
+
|
|
598
|
+
Enum.reduce(entries, [], fn one, errors ->
|
|
599
|
+
try do
|
|
600
|
+
if one.fun, do: one.fun.()
|
|
601
|
+
errors
|
|
602
|
+
rescue
|
|
603
|
+
e -> errors ++ [e]
|
|
604
|
+
end
|
|
605
|
+
end)
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
# Section 8.3: "A failed release ends the instance in `failed`, exactly as
|
|
609
|
+
# a failed callback does (5.2) - a release that raised may have leaked, and
|
|
610
|
+
# an instance that may be holding resources it cannot account for must not
|
|
611
|
+
# be reactivated."
|
|
612
|
+
defp releasecheck(_host, _ref, []), do: :ok
|
|
613
|
+
|
|
614
|
+
defp releasecheck(host, ref, errors) do
|
|
615
|
+
setfield(host, ref, "status", "failed")
|
|
616
|
+
causes = Enum.map(errors, &Types.message/1)
|
|
617
|
+
|
|
618
|
+
Types.fail("plugin_release_failed",
|
|
619
|
+
"release failed for #{ref}: #{Enum.join(causes, "; ")}",
|
|
620
|
+
%{"ref" => ref, "cause" => causes})
|
|
621
|
+
end
|
|
622
|
+
|
|
623
|
+
# --- dependencies ---------------------------------------------------
|
|
624
|
+
|
|
625
|
+
# A REQUIREMENT IS ON A CAPABILITY, not on a ref (section 11.1). A bare
|
|
626
|
+
# string is shorthand for `{name}`. A ref satisfies too, because a host
|
|
627
|
+
# that genuinely needs a specific instance should not have to invent a
|
|
628
|
+
# capability for it.
|
|
629
|
+
defp unmetof(host, ref) do
|
|
630
|
+
field(host, ref, "options")
|
|
631
|
+
|> Depend.requirements()
|
|
632
|
+
|> Enum.filter(&Depend.gatesactivation/1)
|
|
633
|
+
|> Enum.filter(&([] == providersof(host, &1)))
|
|
634
|
+
|> Enum.map(&Types.get(&1, "name"))
|
|
635
|
+
end
|
|
636
|
+
|
|
637
|
+
# Section 11.4's always-reluctant selection, and the ONE place a provider
|
|
638
|
+
# is picked for a live instance. If this instance already selected a
|
|
639
|
+
# provider for `req` and that provider is STILL a candidate, it keeps it
|
|
640
|
+
# - a better-ranked newcomer does not take it.
|
|
641
|
+
#
|
|
642
|
+
# `remember` is false for the questions asked ABOUT an instance rather
|
|
643
|
+
# than BY it: introspection must not create a binding.
|
|
644
|
+
defp chosen(host, ref, req, remember) do
|
|
645
|
+
cands = providersof(host, req)
|
|
646
|
+
name = Types.get(req, "name")
|
|
647
|
+
held = Types.get(field(host, ref, "selected"), name)
|
|
648
|
+
|
|
649
|
+
cond do
|
|
650
|
+
[] == cands ->
|
|
651
|
+
nil
|
|
652
|
+
|
|
653
|
+
not is_nil(held) and Enum.any?(cands, &(Types.get(&1, "ref") == held)) ->
|
|
654
|
+
held
|
|
655
|
+
|
|
656
|
+
true ->
|
|
657
|
+
pick = Types.get(hd(cands), "ref")
|
|
658
|
+
|
|
659
|
+
if remember do
|
|
660
|
+
entry_update(host, ref, &Map.put(&1, "selected", Map.put(&1["selected"], name, pick)))
|
|
661
|
+
end
|
|
662
|
+
|
|
663
|
+
pick
|
|
664
|
+
end
|
|
665
|
+
end
|
|
666
|
+
|
|
667
|
+
# The instances currently SELECTED for this one's restart-causing
|
|
668
|
+
# requirements. A BINDING IS TO AN INSTANCE, not to a capability (section
|
|
669
|
+
# 11.1): the selected one going away restarts a `static` consumer even
|
|
670
|
+
# though a survivor is available.
|
|
671
|
+
defp boundproviders(host, ref) do
|
|
672
|
+
field(host, ref, "options")
|
|
673
|
+
|> Depend.requirements()
|
|
674
|
+
|> Enum.filter(&Depend.restartsonloss/1)
|
|
675
|
+
|> Enum.map(&chosen(host, ref, &1, false))
|
|
676
|
+
|> Enum.reject(&is_nil/1)
|
|
677
|
+
|> Enum.uniq()
|
|
678
|
+
end
|
|
679
|
+
|
|
680
|
+
# Live instances whose selected provider is `ref` and which would be
|
|
681
|
+
# restarted by losing it.
|
|
682
|
+
defp consumersof(host, ref) do
|
|
683
|
+
refs(host)
|
|
684
|
+
|> Enum.filter(fn r ->
|
|
685
|
+
r != ref and "live" == field(host, r, "status") and ref in boundproviders(host, r)
|
|
686
|
+
end)
|
|
687
|
+
end
|
|
688
|
+
|
|
689
|
+
# Section 11.3's `hold` asks a DIFFERENT question from the cascade, and
|
|
690
|
+
# reading it off `consumersof` answered the cascade's.
|
|
691
|
+
#
|
|
692
|
+
# The cascade wants the edges that RESTART - mandatory-static and
|
|
693
|
+
# optional-static - because a restart is what it performs. `hold` says
|
|
694
|
+
# "deactivating a REQUIRED instance is `plugin_dependency_held`", and
|
|
695
|
+
# required is cardinality: `gatesactivation`, not `restartsonloss`. The
|
|
696
|
+
# two sets differ in both directions and each difference was a real bug.
|
|
697
|
+
#
|
|
698
|
+
# A MANDATORY-DYNAMIC consumer was excluded, so the strictest policy let
|
|
699
|
+
# a provider go that a live consumer could not do without - `dynamic`
|
|
700
|
+
# promises survival of a SWAP, and under `hold` there is no swap, so the
|
|
701
|
+
# consumer falls back to `pending`.
|
|
702
|
+
#
|
|
703
|
+
# An OPTIONAL-STATIC consumer was included, so `hold` refused a
|
|
704
|
+
# deactivation on behalf of an instance that had said in writing it does
|
|
705
|
+
# not need the thing.
|
|
706
|
+
defp holdersof(host, ref) do
|
|
707
|
+
refs(host)
|
|
708
|
+
|> Enum.filter(fn r ->
|
|
709
|
+
r != ref and "live" == field(host, r, "status") and
|
|
710
|
+
Enum.any?(Depend.requirements(field(host, r, "options")), fn req ->
|
|
711
|
+
Depend.gatesactivation(req) and ref == chosen(host, r, req, false)
|
|
712
|
+
end)
|
|
713
|
+
end)
|
|
714
|
+
end
|
|
715
|
+
|
|
716
|
+
defp providersof(host, req) do
|
|
717
|
+
name = Types.get(req, "name")
|
|
718
|
+
want = Ref.canon(name)
|
|
719
|
+
|
|
720
|
+
cands =
|
|
721
|
+
read(host, fn st ->
|
|
722
|
+
st.inst
|
|
723
|
+
|> Map.keys()
|
|
724
|
+
|> Enum.sort()
|
|
725
|
+
|> Enum.flat_map(fn ref ->
|
|
726
|
+
target = st.inst[ref]
|
|
727
|
+
|
|
728
|
+
cond do
|
|
729
|
+
"live" != target["status"] ->
|
|
730
|
+
[]
|
|
731
|
+
|
|
732
|
+
# A ref satisfies directly.
|
|
733
|
+
ref == want ->
|
|
734
|
+
[%{"ref" => ref, "pos" => target["pos"], "provides" => %{"name" => name}}]
|
|
735
|
+
|
|
736
|
+
true ->
|
|
737
|
+
target["provides"]
|
|
738
|
+
|> Enum.filter(&(Types.get(&1, "name") == name))
|
|
739
|
+
|> Enum.map(&%{"ref" => ref, "pos" => target["pos"], "provides" => &1})
|
|
740
|
+
end
|
|
741
|
+
end)
|
|
742
|
+
end)
|
|
743
|
+
|
|
744
|
+
Capability.resolve_capability(req, cands)
|
|
745
|
+
end
|
|
746
|
+
|
|
747
|
+
# CONSUMERS GO DOWN FIRST, NOT AFTERWARDS (section 11.3).
|
|
748
|
+
#
|
|
749
|
+
# The cascade is part of the provider's own deactivation and runs BEFORE
|
|
750
|
+
# the provider's `deactivate` callback and scope unwind, so a consumer's
|
|
751
|
+
# teardown can still call the thing it depends on - flushing a buffer to
|
|
752
|
+
# the store it is about to lose is exactly what a `deactivate` callback
|
|
753
|
+
# is for, and a cascade that fired after the provider was already gone
|
|
754
|
+
# would make that impossible.
|
|
755
|
+
defp cascade(host, ref, seen) do
|
|
756
|
+
if MapSet.member?(seen, ref) do
|
|
757
|
+
seen
|
|
758
|
+
else
|
|
759
|
+
Enum.reduce(consumersof(host, ref), MapSet.put(seen, ref), fn r, acc ->
|
|
760
|
+
if "live" == field(host, r, "status"), do: drop_consumer(host, r, acc), else: acc
|
|
761
|
+
end)
|
|
762
|
+
end
|
|
763
|
+
end
|
|
764
|
+
|
|
765
|
+
defp drop_consumer(host, r, seen) do
|
|
766
|
+
# Deepest-first.
|
|
767
|
+
seen = cascade(host, r, seen)
|
|
768
|
+
bad = failed?(fn -> run(host, r, "deactivate", "deactivate") end)
|
|
769
|
+
errors = unwind(host, r)
|
|
770
|
+
|
|
771
|
+
if bad or [] != errors do
|
|
772
|
+
# Section 5.2: ANY failure during a transition lands the instance in
|
|
773
|
+
# `failed`. Marking it `pending` handed it straight back to
|
|
774
|
+
# `reconcile`, which would activate it again the moment the provider
|
|
775
|
+
# returned.
|
|
776
|
+
setfield(host, r, "status", "failed")
|
|
777
|
+
else
|
|
778
|
+
setfield(host, r, "status", "pending")
|
|
779
|
+
setfield(host, r, "unmet", unmetof(host, r))
|
|
780
|
+
end
|
|
781
|
+
|
|
782
|
+
seen
|
|
783
|
+
end
|
|
784
|
+
|
|
785
|
+
defp failed?(fun) do
|
|
786
|
+
fun.()
|
|
787
|
+
false
|
|
788
|
+
rescue
|
|
789
|
+
_ -> true
|
|
790
|
+
end
|
|
791
|
+
|
|
792
|
+
# The hold check is A GUARD ON AD-HOC DEACTIVATION, NOT ON COORDINATED
|
|
793
|
+
# TEARDOWN. In a bulk operation that is removing the holders too -
|
|
794
|
+
# `close`, or an `apply` plan whose own steps deactivate them - it is
|
|
795
|
+
# suspended for exactly those holders, and the teardown still runs
|
|
796
|
+
# consumers before providers.
|
|
797
|
+
defp held(host, ref) do
|
|
798
|
+
if "hold" == read(host, & &1.dependency) and not read(host, & &1.coordinated) do
|
|
799
|
+
holders = holdersof(host, ref)
|
|
800
|
+
|
|
801
|
+
if [] != holders do
|
|
802
|
+
Types.fail("plugin_dependency_held",
|
|
803
|
+
"instance is required by live consumers: #{ref}",
|
|
804
|
+
%{"ref" => ref, "holders" => holders})
|
|
805
|
+
end
|
|
806
|
+
end
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
# EAGER reconciliation: run to a fixed point rather than scheduling.
|
|
810
|
+
#
|
|
811
|
+
# Two directions, and both are the reason `pending` exists. Activation is
|
|
812
|
+
# a STANDING REQUEST, not a one-shot event.
|
|
813
|
+
defp reconcile(host), do: reconcile(host, 0)
|
|
814
|
+
|
|
815
|
+
defp reconcile(_host, rounds) when 1000 < rounds, do: :ok
|
|
816
|
+
|
|
817
|
+
defp reconcile(host, rounds) do
|
|
818
|
+
# Losses first, so a cascade settles in one pass rather than
|
|
819
|
+
# alternating with re-activations.
|
|
820
|
+
lost = losspass(host)
|
|
821
|
+
gained = gainpass(host)
|
|
822
|
+
if lost or gained, do: reconcile(host, rounds + 1), else: :ok
|
|
823
|
+
end
|
|
824
|
+
|
|
825
|
+
defp losspass(host) do
|
|
826
|
+
Enum.reduce(refs(host), false, fn r, moved ->
|
|
827
|
+
if "live" != field(host, r, "status") or not restartable?(host, r) do
|
|
828
|
+
moved
|
|
829
|
+
else
|
|
830
|
+
bad = failed?(fn -> run(host, r, "deactivate", "deactivate") end)
|
|
831
|
+
errors = unwind(host, r)
|
|
832
|
+
|
|
833
|
+
if bad or [] != errors do
|
|
834
|
+
setfield(host, r, "status", "failed")
|
|
835
|
+
else
|
|
836
|
+
setfield(host, r, "status", "pending")
|
|
837
|
+
setfield(host, r, "unmet", unmetof(host, r))
|
|
838
|
+
end
|
|
839
|
+
|
|
840
|
+
true
|
|
841
|
+
end
|
|
842
|
+
end)
|
|
843
|
+
end
|
|
844
|
+
|
|
845
|
+
# POLICY IS PER REQUIREMENT, not per instance (section 11.3). A `dynamic`
|
|
846
|
+
# requirement whose provider is gone leaves the consumer LIVE and
|
|
847
|
+
# notified.
|
|
848
|
+
defp restartable?(host, r) do
|
|
849
|
+
field(host, r, "options")
|
|
850
|
+
|> Depend.requirements()
|
|
851
|
+
|> Enum.filter(&Depend.gatesactivation/1)
|
|
852
|
+
|> Enum.filter(&([] == providersof(host, &1)))
|
|
853
|
+
|> Enum.any?(&Depend.restartsonloss/1)
|
|
854
|
+
end
|
|
855
|
+
|
|
856
|
+
defp gainpass(host) do
|
|
857
|
+
Enum.reduce(refs(host), false, fn r, moved ->
|
|
858
|
+
if "pending" != field(host, r, "status") or [] != unmetof(host, r) do
|
|
859
|
+
moved
|
|
860
|
+
else
|
|
861
|
+
try do
|
|
862
|
+
run(host, r, "activate", "activate")
|
|
863
|
+
setfield(host, r, "status", "live")
|
|
864
|
+
setfield(host, r, "unmet", [])
|
|
865
|
+
rescue
|
|
866
|
+
_ ->
|
|
867
|
+
unwind(host, r)
|
|
868
|
+
setfield(host, r, "status", "failed")
|
|
869
|
+
end
|
|
870
|
+
|
|
871
|
+
true
|
|
872
|
+
end
|
|
873
|
+
end)
|
|
874
|
+
end
|
|
875
|
+
|
|
876
|
+
# --- ordering -------------------------------------------------------
|
|
877
|
+
|
|
878
|
+
def order(host, point \\ nil) do
|
|
879
|
+
bindings =
|
|
880
|
+
read(host, fn st ->
|
|
881
|
+
st.inst
|
|
882
|
+
|> Map.keys()
|
|
883
|
+
|> Enum.filter(&("live" == st.inst[&1]["status"]))
|
|
884
|
+
# Sorted by declaration SEQUENCE, which is what makes the section 7
|
|
885
|
+
# sort's fall-through deterministic in a language whose maps have
|
|
886
|
+
# no insertion order. Section 7 breaks ties by `pos`; two instances
|
|
887
|
+
# CAN share one - `declare` defaults `pos` to the registry size, so
|
|
888
|
+
# an unload followed by a fresh declare reuses a surviving
|
|
889
|
+
# instance's - and past that this was falling through to map order.
|
|
890
|
+
# `seq` is that order, made explicit.
|
|
891
|
+
|> Enum.sort_by(&st.inst[&1]["seq"])
|
|
892
|
+
|> Enum.map(&%{ref: &1, pos: st.inst[&1]["pos"], order: st.inst[&1]["order"]})
|
|
893
|
+
end)
|
|
894
|
+
|
|
895
|
+
pin = if point, do: Types.get(pointat(host, point), "pin"), else: nil
|
|
896
|
+
Order.resolve_order(bindings, pin)
|
|
897
|
+
end
|
|
898
|
+
|
|
899
|
+
# --- points ---------------------------------------------------------
|
|
900
|
+
|
|
901
|
+
defp pointat(host, point), do: read(host, &Map.get(&1.points, point))
|
|
902
|
+
|
|
903
|
+
# Live bindings on a point, in resolved order. Recomputed on any change
|
|
904
|
+
# to the live set (section 7) rather than cached at startup - the bug a
|
|
905
|
+
# host discovers only when something deactivates in production.
|
|
906
|
+
defp bound(host, point) do
|
|
907
|
+
Enum.flat_map(order(host, point), fn ref ->
|
|
908
|
+
entry = ent(host, ref)
|
|
909
|
+
# The band is the INSTANCE's ordering block (section 7), stamped by
|
|
910
|
+
# the host. A plugin passing its own would be ranking itself above
|
|
911
|
+
# the order its document declared.
|
|
912
|
+
band = Types.asint(Types.get(entry["order"] || %{}, "band")) || 0
|
|
913
|
+
|
|
914
|
+
entry["bindings"]
|
|
915
|
+
|> Enum.filter(&(&1.point == point))
|
|
916
|
+
|> Enum.map(&Map.put(&1, :band, band))
|
|
917
|
+
end)
|
|
918
|
+
end
|
|
919
|
+
|
|
920
|
+
defp pointspec(host, point, want) do
|
|
921
|
+
spec = pointat(host, point)
|
|
922
|
+
|
|
923
|
+
if is_nil(spec) do
|
|
924
|
+
Types.fail("plugin_point_unknown", "no such point: #{point}", %{"point" => point})
|
|
925
|
+
end
|
|
926
|
+
|
|
927
|
+
kind = Types.get(spec, "kind")
|
|
928
|
+
|
|
929
|
+
cond do
|
|
930
|
+
# A point with no declared kind is a hook, which is what makes `%{}`
|
|
931
|
+
# the minimal point declaration.
|
|
932
|
+
"hook" == want and (is_nil(kind) or "hook" == kind) ->
|
|
933
|
+
spec
|
|
934
|
+
|
|
935
|
+
"hook" != want and kind == want ->
|
|
936
|
+
spec
|
|
937
|
+
|
|
938
|
+
true ->
|
|
939
|
+
Types.fail("plugin_point_kind", "point is not a #{want}: #{point}",
|
|
940
|
+
%{"point" => point, "kind" => kind})
|
|
941
|
+
end
|
|
942
|
+
end
|
|
943
|
+
|
|
944
|
+
def emit(host, point, arg \\ nil) do
|
|
945
|
+
spec = pointspec(host, point, "hook")
|
|
946
|
+
Point.point_emit(bound(host, point), Types.get(spec, "mode") || "emit", arg)
|
|
947
|
+
end
|
|
948
|
+
|
|
949
|
+
def call(host, point, arg \\ nil) do
|
|
950
|
+
spec = pointspec(host, point, "chain")
|
|
951
|
+
base = Types.get(spec, "base") || fn value -> value end
|
|
952
|
+
Point.compose(bound(host, point), base).(arg)
|
|
953
|
+
end
|
|
954
|
+
|
|
955
|
+
def provider(host, point, arg \\ nil) do
|
|
956
|
+
spec = pointspec(host, point, "provider")
|
|
957
|
+
pick = Point.point_provider(bound(host, point), spec)
|
|
958
|
+
if is_nil(pick.winner), do: Types.get(spec, "default"), else: pick.winner.fn.(nil, arg)
|
|
959
|
+
end
|
|
960
|
+
|
|
961
|
+
@doc "The losers are VISIBLE rather than silently ignored (section 6.3)."
|
|
962
|
+
def shadowed(host, point) do
|
|
963
|
+
spec = pointat(host, point)
|
|
964
|
+
if is_nil(spec), do: [], else: Point.point_provider(bound(host, point), spec).shadowed
|
|
965
|
+
end
|
|
966
|
+
|
|
967
|
+
def exports(host, spec) do
|
|
968
|
+
all =
|
|
969
|
+
read(host, fn st ->
|
|
970
|
+
st.inst
|
|
971
|
+
|> Map.keys()
|
|
972
|
+
|> Enum.sort()
|
|
973
|
+
|> Enum.flat_map(fn ref ->
|
|
974
|
+
entry = st.inst[ref]
|
|
975
|
+
|
|
976
|
+
# Exports of a `loaded` (not live) instance are VISIBLE (11).
|
|
977
|
+
if entry["status"] in ["declared", "failed"] do
|
|
978
|
+
[]
|
|
979
|
+
else
|
|
980
|
+
entry["exports"]
|
|
981
|
+
|> Map.keys()
|
|
982
|
+
|> Enum.sort()
|
|
983
|
+
|> Enum.map(&%{ref: ref, key: &1, value: entry["exports"][&1]})
|
|
984
|
+
end
|
|
985
|
+
end)
|
|
986
|
+
end)
|
|
987
|
+
|
|
988
|
+
Export.resolve_export(spec, all)
|
|
989
|
+
end
|
|
990
|
+
|
|
991
|
+
@doc "The live providers of a capability, best-first (section 11.1)."
|
|
992
|
+
def capability(host, name) do
|
|
993
|
+
cands =
|
|
994
|
+
read(host, fn st ->
|
|
995
|
+
st.inst
|
|
996
|
+
|> Map.keys()
|
|
997
|
+
|> Enum.sort()
|
|
998
|
+
|> Enum.flat_map(fn ref ->
|
|
999
|
+
entry = st.inst[ref]
|
|
1000
|
+
|
|
1001
|
+
if "live" != entry["status"] do
|
|
1002
|
+
[]
|
|
1003
|
+
else
|
|
1004
|
+
entry["provides"]
|
|
1005
|
+
|> Enum.filter(&(Types.get(&1, "name") == name))
|
|
1006
|
+
|> Enum.map(&%{"ref" => ref, "pos" => entry["pos"], "provides" => &1})
|
|
1007
|
+
end
|
|
1008
|
+
end)
|
|
1009
|
+
end)
|
|
1010
|
+
|
|
1011
|
+
%{"name" => name} |> Capability.resolve_capability(cands) |> Enum.map(&Types.get(&1, "ref"))
|
|
1012
|
+
end
|
|
1013
|
+
|
|
1014
|
+
# --- documents ------------------------------------------------------
|
|
1015
|
+
|
|
1016
|
+
@doc """
|
|
1017
|
+
Section 9.6: "load what is missing, UNLOAD WHAT IS GONE, patch what
|
|
1018
|
+
changed, and move activation state to match", with the stated ordering -
|
|
1019
|
+
"deactivations and unloads first (reverse load order), then loads, then
|
|
1020
|
+
activations in load order".
|
|
1021
|
+
|
|
1022
|
+
FOUR PHASES, NOT ONE INTERLEAVED LOOP. An earlier draft walked the
|
|
1023
|
+
document once, which never looked at instances the new document had
|
|
1024
|
+
DROPPED - so an integration removed from a config reload stayed live with
|
|
1025
|
+
its bindings and resources.
|
|
1026
|
+
"""
|
|
1027
|
+
def apply(host, doc, profile \\ nil) do
|
|
1028
|
+
guard(host)
|
|
1029
|
+
opts = read(host, & &1.opts)
|
|
1030
|
+
profile = profile || Types.get(opts, "profile")
|
|
1031
|
+
|
|
1032
|
+
norm =
|
|
1033
|
+
Config.normalize_config(%{
|
|
1034
|
+
"doc" => doc,
|
|
1035
|
+
"profile" => profile,
|
|
1036
|
+
"keys" => Types.get(opts, "keys"),
|
|
1037
|
+
"reserved" => read(host, & &1.reserved)
|
|
1038
|
+
})
|
|
1039
|
+
|
|
1040
|
+
want = norm["order"]
|
|
1041
|
+
defaults = Types.get(opts, "defaults") || %{}
|
|
1042
|
+
|
|
1043
|
+
optionsof =
|
|
1044
|
+
Map.new(want, fn ref ->
|
|
1045
|
+
{ref,
|
|
1046
|
+
Config.resolve_options(%{
|
|
1047
|
+
"ref" => ref,
|
|
1048
|
+
"doc" => doc,
|
|
1049
|
+
"profile" => profile,
|
|
1050
|
+
"shape" => shapeof(host, ref),
|
|
1051
|
+
"hostdefaults" => Types.get(defaults, Ref.refname(ref))
|
|
1052
|
+
})}
|
|
1053
|
+
end)
|
|
1054
|
+
|
|
1055
|
+
# Should this ref be LIVE after the apply? False for a ref the document
|
|
1056
|
+
# declares lazy or inactive AND for one it does not name at all - which
|
|
1057
|
+
# is what makes "unload what is gone" and "unload what was toggled off"
|
|
1058
|
+
# one rule rather than two.
|
|
1059
|
+
wantlive = fn ref ->
|
|
1060
|
+
e = Types.get(norm["instance"], ref)
|
|
1061
|
+
not is_nil(e) and Types.truthy(e["active"]) and "eager" == e["start"]
|
|
1062
|
+
end
|
|
1063
|
+
|
|
1064
|
+
dropphase(host, wantlive)
|
|
1065
|
+
Enum.each(want, &declarephase(host, &1, norm, optionsof))
|
|
1066
|
+
# ONLY THE EAGER, ACTIVE ONES: "a document of twenty lazy instances is
|
|
1067
|
+
# twenty map entries and no executed code" (9.6).
|
|
1068
|
+
Enum.each(want, fn ref -> if wantlive.(ref), do: load(host, ref) end)
|
|
1069
|
+
Enum.each(want, fn ref -> if wantlive.(ref), do: activate(host, ref) end)
|
|
1070
|
+
nil
|
|
1071
|
+
end
|
|
1072
|
+
|
|
1073
|
+
# Phase 1: deactivations and unloads, REVERSE load order.
|
|
1074
|
+
defp dropphase(host, wantlive) do
|
|
1075
|
+
refs(host)
|
|
1076
|
+
|> Enum.reject(&("declared" == field(host, &1, "status") or wantlive.(&1)))
|
|
1077
|
+
# Highest `pos` first, ref-descending for a tie, so a consumer declared
|
|
1078
|
+
# after its provider goes down first.
|
|
1079
|
+
|> Enum.sort(fn a, b ->
|
|
1080
|
+
pa = field(host, a, "pos")
|
|
1081
|
+
pb = field(host, b, "pos")
|
|
1082
|
+
if pa == pb, do: a > b, else: pa > pb
|
|
1083
|
+
end)
|
|
1084
|
+
|> Enum.each(&unload(host, &1))
|
|
1085
|
+
end
|
|
1086
|
+
|
|
1087
|
+
# Phase 2: declare and patch EVERYTHING, in load order.
|
|
1088
|
+
defp declarephase(host, ref, norm, optionsof) do
|
|
1089
|
+
ent = Types.get(norm["instance"], ref)
|
|
1090
|
+
declare(host, ref, %{"options" => optionsof[ref], "order" => ent["order"], "pos" => ent["pos"]})
|
|
1091
|
+
|
|
1092
|
+
entry_update(host, ref, fn e ->
|
|
1093
|
+
Map.merge(e, %{
|
|
1094
|
+
# The bar is REASSERTED ON EVERY APPLY, in both directions - a
|
|
1095
|
+
# document that turns the instance back on clears it, which is the
|
|
1096
|
+
# whole point of a config switch.
|
|
1097
|
+
"barred" => not Types.truthy(ent["active"]),
|
|
1098
|
+
"options" => optionsof[ref],
|
|
1099
|
+
"order" => ent["order"],
|
|
1100
|
+
"pos" => ent["pos"]
|
|
1101
|
+
})
|
|
1102
|
+
end)
|
|
1103
|
+
end
|
|
1104
|
+
|
|
1105
|
+
defp shapeof(host, ref) do
|
|
1106
|
+
Types.get(Catalog.get(catalog(host), Ref.refname(ref)), "shape")
|
|
1107
|
+
end
|
|
1108
|
+
|
|
1109
|
+
def options(host, ref, patch) do
|
|
1110
|
+
guard(host)
|
|
1111
|
+
entry = need(host, ref)
|
|
1112
|
+
r = entry["ref"]
|
|
1113
|
+
previous = entry["options"]
|
|
1114
|
+
|
|
1115
|
+
resolved =
|
|
1116
|
+
Config.resolve_options(%{
|
|
1117
|
+
"ref" => r,
|
|
1118
|
+
"shape" => shapeof(host, r),
|
|
1119
|
+
"doc" => %{},
|
|
1120
|
+
"patch" => Map.merge(previous, patch || %{})
|
|
1121
|
+
})
|
|
1122
|
+
|
|
1123
|
+
setfield(host, r, "options", resolved)
|
|
1124
|
+
if "live" == entry["status"], do: reconfigure(host, r, entry["def"], resolved, previous)
|
|
1125
|
+
nil
|
|
1126
|
+
end
|
|
1127
|
+
|
|
1128
|
+
defp reconfigure(host, r, definition, resolved, previous) do
|
|
1129
|
+
fun = Types.get(definition, "reconfigure")
|
|
1130
|
+
|
|
1131
|
+
if is_function(fun, 3) do
|
|
1132
|
+
write(host, &%{&1 | intransition: true})
|
|
1133
|
+
|
|
1134
|
+
try do
|
|
1135
|
+
fun.(%Inst{host: host, ref: r}, resolved, previous)
|
|
1136
|
+
after
|
|
1137
|
+
write(host, &%{&1 | intransition: false})
|
|
1138
|
+
end
|
|
1139
|
+
else
|
|
1140
|
+
# Always correct and sometimes expensive; `reconfigure` exists to
|
|
1141
|
+
# make the common case cheap (section 9.4).
|
|
1142
|
+
deactivate(host, r)
|
|
1143
|
+
activate(host, r)
|
|
1144
|
+
end
|
|
1145
|
+
end
|
|
1146
|
+
|
|
1147
|
+
def close(host) do
|
|
1148
|
+
# A bulk teardown removing the holders too, so `hold` is suspended for
|
|
1149
|
+
# exactly those holders (section 11.3) - while the consumers-first
|
|
1150
|
+
# cascade still runs, which is the half that matters.
|
|
1151
|
+
write(host, &%{&1 | coordinated: true})
|
|
1152
|
+
|
|
1153
|
+
try do
|
|
1154
|
+
host |> refs() |> Enum.reverse() |> Enum.each(&unload(host, &1))
|
|
1155
|
+
after
|
|
1156
|
+
write(host, &%{&1 | coordinated: false})
|
|
1157
|
+
end
|
|
1158
|
+
end
|
|
1159
|
+
|
|
1160
|
+
@doc """
|
|
1161
|
+
The same record section 6.6 gives a plugin about itself, reachable from
|
|
1162
|
+
outside for the corpus.
|
|
1163
|
+
"""
|
|
1164
|
+
def positionof(host, ref, point) do
|
|
1165
|
+
entry = ent(host, Ref.canon(ref))
|
|
1166
|
+
|
|
1167
|
+
if is_nil(entry) do
|
|
1168
|
+
Types.fail("plugin_not_loaded", "no such instance: #{ref}", %{"ref" => ref})
|
|
1169
|
+
end
|
|
1170
|
+
|
|
1171
|
+
ranked = order(host, point)
|
|
1172
|
+
index = Enum.find_index(ranked, &(&1 == entry["ref"])) || -1
|
|
1173
|
+
|
|
1174
|
+
%{"index" => index,
|
|
1175
|
+
"count" => length(ranked),
|
|
1176
|
+
# Section 6.2 composes b1(b2(b3(base))) with the FIRST binding
|
|
1177
|
+
# OUTERMOST, so these are not index 0 and index count-1 the other way
|
|
1178
|
+
# round.
|
|
1179
|
+
"outermost" => 0 == index,
|
|
1180
|
+
"innermost" => index == length(ranked) - 1}
|
|
1181
|
+
end
|
|
1182
|
+
end
|