@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,1379 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin sdk-20260908-1556-0 (csharp/src/Host.cs)
|
|
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
|
+
using System;
|
|
5
|
+
using System.Collections.Generic;
|
|
6
|
+
|
|
7
|
+
namespace Voxgig.Plugin
|
|
8
|
+
{
|
|
9
|
+
/// <summary>
|
|
10
|
+
/// The host: the lifecycle state machine (§5), extension points (§6),
|
|
11
|
+
/// and resource capture (§8).
|
|
12
|
+
///
|
|
13
|
+
/// <para>TWO RULES SHAPE EVERY METHOD BELOW.</para>
|
|
14
|
+
///
|
|
15
|
+
/// <para>Transitions are SEQUENTIAL (§5.2). One at a time, in call
|
|
16
|
+
/// order, never interleaved; a transition triggered from inside a
|
|
17
|
+
/// lifecycle callback is <c>plugin_reentrant</c>. A hard rule, because
|
|
18
|
+
/// it is the only way the semantics can be identical in Go, in Csharp
|
|
19
|
+
/// and in single-threaded JavaScript.</para>
|
|
20
|
+
///
|
|
21
|
+
/// <para>Reconciliation is EAGER (§18's portability budget). A
|
|
22
|
+
/// transition settles by running the state machine to a fixed point,
|
|
23
|
+
/// not by suspending on a promise - which is also why nothing here is
|
|
24
|
+
/// <c>async</c>: a <c>Task</c>-returning callback would hand the host
|
|
25
|
+
/// something it is specified not to await.</para>
|
|
26
|
+
///
|
|
27
|
+
/// <para>THIS HOST IS NOT THREAD-SAFE, and that is the model rather
|
|
28
|
+
/// than an omission: §5.2 makes transitions sequential, and a lock
|
|
29
|
+
/// would only turn a concurrent call into a slow one that still
|
|
30
|
+
/// violated the ordering the corpus pins.</para>
|
|
31
|
+
/// </summary>
|
|
32
|
+
public sealed class Host
|
|
33
|
+
{
|
|
34
|
+
private readonly object opts;
|
|
35
|
+
private readonly string dependency;
|
|
36
|
+
private readonly object reserved;
|
|
37
|
+
private readonly object points;
|
|
38
|
+
private Catalog catalog = new Catalog();
|
|
39
|
+
|
|
40
|
+
private readonly SortedDictionary<string, Entry> inst =
|
|
41
|
+
new SortedDictionary<string, Entry>(StringComparer.Ordinal);
|
|
42
|
+
|
|
43
|
+
private readonly List<object> log = new List<object>();
|
|
44
|
+
|
|
45
|
+
/// §14: the lifecycle event record. <c>seq</c> distinguishes ONE
|
|
46
|
+
/// INCARNATION of stripe$test from the next, which is the whole
|
|
47
|
+
/// reason it is not <c>pos</c> (§4 rule 4).
|
|
48
|
+
private readonly List<object> events = new List<object>();
|
|
49
|
+
|
|
50
|
+
private double seqn;
|
|
51
|
+
private long open;
|
|
52
|
+
private bool transition;
|
|
53
|
+
|
|
54
|
+
/// <summary>
|
|
55
|
+
/// WHICH callback is running, not merely that one is. §8.1 puts
|
|
56
|
+
/// resource capture in <c>activate</c> and 8.3 says
|
|
57
|
+
/// <c>release</c> outside <c>activate</c> is
|
|
58
|
+
/// <c>plugin_release_scope</c> - and a bare flag cannot tell
|
|
59
|
+
/// <c>activate</c> from <c>define</c>.
|
|
60
|
+
/// </summary>
|
|
61
|
+
private string phase = "";
|
|
62
|
+
|
|
63
|
+
/// Set for the duration of a bulk teardown, so <c>Held</c> knows
|
|
64
|
+
/// this is a coordinated operation rather than an ad-hoc
|
|
65
|
+
/// deactivation.
|
|
66
|
+
private bool coordinated;
|
|
67
|
+
|
|
68
|
+
public Host(object options)
|
|
69
|
+
{
|
|
70
|
+
opts = null == options ? Types.NewMap() : options;
|
|
71
|
+
dependency = Types.Str(Types.Get(opts, "dependency")) ?? "restart";
|
|
72
|
+
reserved = Types.Get(opts, "reserved");
|
|
73
|
+
points = Types.Get(opts, "points");
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public static Host MakeHost(object options)
|
|
77
|
+
{
|
|
78
|
+
return new Host(options);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public void Define(Definition definition)
|
|
82
|
+
{
|
|
83
|
+
catalog.Add(definition);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public Catalog CatalogRef()
|
|
87
|
+
{
|
|
88
|
+
return catalog;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
public void CatalogRef(Catalog replacement)
|
|
92
|
+
{
|
|
93
|
+
catalog = replacement;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
public bool InTransition()
|
|
97
|
+
{
|
|
98
|
+
return transition;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
public string Phase()
|
|
102
|
+
{
|
|
103
|
+
return phase;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public bool HasPoint(string name)
|
|
107
|
+
{
|
|
108
|
+
return Types.Has(points, name);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public void OpenInc()
|
|
112
|
+
{
|
|
113
|
+
open++;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public void OpenDec()
|
|
117
|
+
{
|
|
118
|
+
open--;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// --- observation ------------------------------------------------
|
|
122
|
+
|
|
123
|
+
/// Introspection NEVER advances the state (§5.2). A status page
|
|
124
|
+
/// must not be a way to accidentally import twenty packages.
|
|
125
|
+
public SortedDictionary<string, object> List()
|
|
126
|
+
{
|
|
127
|
+
var out_ = Types.NewMap();
|
|
128
|
+
foreach (var pair in inst)
|
|
129
|
+
{
|
|
130
|
+
out_[pair.Key] = pair.Value.Status;
|
|
131
|
+
}
|
|
132
|
+
return out_;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/// <summary>
|
|
136
|
+
/// The instance record, or null when nothing is registered under
|
|
137
|
+
/// that ref. THE REF IS VALIDATED, not merely canonicalized:
|
|
138
|
+
/// looking an instance up by <c>"bad name"</c> is
|
|
139
|
+
/// <c>plugin_bad_name</c>, not a quiet miss.
|
|
140
|
+
/// </summary>
|
|
141
|
+
public Entry Instance(object eref)
|
|
142
|
+
{
|
|
143
|
+
return inst.TryGetValue(Refs.CanonRef(eref), out var e) ? e : null;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public List<object> Trace()
|
|
147
|
+
{
|
|
148
|
+
return new List<object>(events);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
public SortedDictionary<string, object> Observable(object result)
|
|
152
|
+
{
|
|
153
|
+
var out_ = Types.NewMap();
|
|
154
|
+
out_["status"] = List();
|
|
155
|
+
out_["open"] = (double)open;
|
|
156
|
+
out_["log"] = new List<object>(log);
|
|
157
|
+
out_["result"] = result;
|
|
158
|
+
return out_;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// --- the state machine ------------------------------------------
|
|
162
|
+
|
|
163
|
+
private void Guard()
|
|
164
|
+
{
|
|
165
|
+
if (!transition)
|
|
166
|
+
{
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
Types.Fail("plugin_reentrant",
|
|
170
|
+
"transition attempted from inside a lifecycle callback", null);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private Entry Need(object eref)
|
|
174
|
+
{
|
|
175
|
+
var r = Refs.CanonRef(eref);
|
|
176
|
+
if (!inst.TryGetValue(r, out var entry))
|
|
177
|
+
{
|
|
178
|
+
Types.Fail("plugin_not_loaded", "no such instance: " + r,
|
|
179
|
+
Types.Details("ref", r));
|
|
180
|
+
}
|
|
181
|
+
return entry;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
private void CheckReserved(string eref)
|
|
185
|
+
{
|
|
186
|
+
var list = Types.List(reserved);
|
|
187
|
+
if (null == list || 0 == list.Count)
|
|
188
|
+
{
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (!list.Contains(Refs.RefName(eref)))
|
|
192
|
+
{
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
Types.Fail("plugin_ref_reserved", "ref is reserved by the host: " + eref,
|
|
196
|
+
Types.Details("ref", eref));
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
private void Run(Entry entry, string callback, string at)
|
|
200
|
+
{
|
|
201
|
+
log.Add(entry.Ref + ":" + at);
|
|
202
|
+
var ev = Types.NewMap();
|
|
203
|
+
ev["ref"] = entry.Ref;
|
|
204
|
+
ev["event"] = at;
|
|
205
|
+
ev["seq"] = entry.Seq;
|
|
206
|
+
ev["status"] = entry.Status;
|
|
207
|
+
events.Add(ev);
|
|
208
|
+
|
|
209
|
+
var func = entry.Def.CallbackFor(callback);
|
|
210
|
+
if (null == func)
|
|
211
|
+
{
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
transition = true;
|
|
216
|
+
phase = at;
|
|
217
|
+
try
|
|
218
|
+
{
|
|
219
|
+
func(new Inst(this, entry));
|
|
220
|
+
}
|
|
221
|
+
catch (Exception e)
|
|
222
|
+
{
|
|
223
|
+
// §12: `plugin_define_failed` and its three siblings are "a
|
|
224
|
+
// callback raised; wraps the cause". AN ERROR THAT ALREADY
|
|
225
|
+
// CARRIES A CODE KEEPS IT - the code is the error's
|
|
226
|
+
// identity, and a plugin raising `store_unreachable` must
|
|
227
|
+
// not have it rewritten. Only a code-less error is wrapped.
|
|
228
|
+
if (0 != Types.CodeOf(e).Length)
|
|
229
|
+
{
|
|
230
|
+
throw;
|
|
231
|
+
}
|
|
232
|
+
Types.Fail("plugin_" + at + "_failed",
|
|
233
|
+
entry.Ref + " raised in " + at + ": " + e.Message,
|
|
234
|
+
Types.Details("ref", entry.Ref, "cause", e.Message));
|
|
235
|
+
}
|
|
236
|
+
finally
|
|
237
|
+
{
|
|
238
|
+
transition = false;
|
|
239
|
+
phase = "";
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/// <summary>
|
|
244
|
+
/// AUTO-TAGGING IS EXPLICIT (§4 rule 3). <c>Declare("stripe", tag:
|
|
245
|
+
/// "?")</c> assigns the LOWEST UNUSED POSITIVE INTEGER tag and
|
|
246
|
+
/// returns the assigned pair. Without <c>"?"</c>, a collision is
|
|
247
|
+
/// an error.
|
|
248
|
+
/// </summary>
|
|
249
|
+
private string AutoTag(string name)
|
|
250
|
+
{
|
|
251
|
+
var n = 1L;
|
|
252
|
+
while (true)
|
|
253
|
+
{
|
|
254
|
+
var cand = Refs.FormatRef(name, n.ToString(System.Globalization.CultureInfo.InvariantCulture));
|
|
255
|
+
if (!inst.ContainsKey(cand))
|
|
256
|
+
{
|
|
257
|
+
return cand;
|
|
258
|
+
}
|
|
259
|
+
n++;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
public Entry Declare(object eref, object spec)
|
|
264
|
+
{
|
|
265
|
+
var useref = eref;
|
|
266
|
+
if ("?".Equals(Types.Get(spec, "tag")))
|
|
267
|
+
{
|
|
268
|
+
useref = AutoTag(Refs.RefName(Refs.CanonRef(eref)));
|
|
269
|
+
}
|
|
270
|
+
var r = Refs.CanonRef(useref);
|
|
271
|
+
if (!Types.Truthy(Types.Get(spec, "hostowned")))
|
|
272
|
+
{
|
|
273
|
+
CheckReserved(r);
|
|
274
|
+
}
|
|
275
|
+
var defname = Types.Str(Types.Get(spec, "definition")) ?? Refs.RefName(r);
|
|
276
|
+
var definition = catalog.Get(defname);
|
|
277
|
+
if (null == definition)
|
|
278
|
+
{
|
|
279
|
+
Types.Fail("plugin_unknown_definition", "not in catalog: " + defname,
|
|
280
|
+
Types.Details("name", defname));
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
if (inst.TryGetValue(r, out var existing))
|
|
284
|
+
{
|
|
285
|
+
// §4 rule 1: a pair addresses at most one instance.
|
|
286
|
+
// Re-declaring the SAME definition is the idempotent case;
|
|
287
|
+
// a different one is a duplicate, not a silent overwrite
|
|
288
|
+
// (seneca) and not an impossibility (sdkgen).
|
|
289
|
+
if (existing.Def.Name != definition.Name)
|
|
290
|
+
{
|
|
291
|
+
Types.Fail("plugin_ref_duplicate", "instance already declared: " + r,
|
|
292
|
+
Types.Details("ref", r));
|
|
293
|
+
}
|
|
294
|
+
return existing;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
var entry = new Entry(r, definition);
|
|
298
|
+
var pos = Types.Num(Types.Get(spec, "pos"));
|
|
299
|
+
entry.Pos = pos ?? inst.Count;
|
|
300
|
+
entry.Seq = seqn;
|
|
301
|
+
entry.Options = Types.Get(spec, "options") ?? Types.NewMap();
|
|
302
|
+
entry.OrderBlock = Types.Get(spec, "order");
|
|
303
|
+
seqn++;
|
|
304
|
+
inst[r] = entry;
|
|
305
|
+
return entry;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/// <summary>
|
|
309
|
+
/// §9.1: a host that reserves a name MUST still be able to declare
|
|
310
|
+
/// the instance it reserved. THE BOUNDARY IS BY METHOD, NOT BY
|
|
311
|
+
/// CALLER, and that is a real limit: no language here can tell the
|
|
312
|
+
/// embedding host from a plugin holding the same host object. What
|
|
313
|
+
/// reservation protects is CONFIGURATION - documents, overlays,
|
|
314
|
+
/// <c>VOXGIG_PLUGIN_*</c>, construction options and ordinary
|
|
315
|
+
/// declare/load/options - and all of that still checks.
|
|
316
|
+
/// </summary>
|
|
317
|
+
public Entry HostDeclare(object eref, object spec)
|
|
318
|
+
{
|
|
319
|
+
Guard();
|
|
320
|
+
var owned = Types.NewMap();
|
|
321
|
+
var given = Types.Map(spec);
|
|
322
|
+
if (null != given)
|
|
323
|
+
{
|
|
324
|
+
foreach (var pair in given)
|
|
325
|
+
{
|
|
326
|
+
owned[pair.Key] = pair.Value;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
owned["hostowned"] = true;
|
|
330
|
+
return Declare(eref, owned);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
public Entry Load(object eref, object spec)
|
|
334
|
+
{
|
|
335
|
+
Guard();
|
|
336
|
+
var entry = Declare(eref, spec);
|
|
337
|
+
if ("declared" != entry.Status)
|
|
338
|
+
{
|
|
339
|
+
return entry; // idempotent trivially
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// PRESENCE, NOT TRUTH: an empty options map must CLEAR what
|
|
343
|
+
// the instance was declared with.
|
|
344
|
+
if (Types.Has(spec, "options") && null != Types.Get(spec, "options"))
|
|
345
|
+
{
|
|
346
|
+
entry.Options = Types.Get(spec, "options");
|
|
347
|
+
}
|
|
348
|
+
try
|
|
349
|
+
{
|
|
350
|
+
Run(entry, "define", "define");
|
|
351
|
+
}
|
|
352
|
+
catch (Exception)
|
|
353
|
+
{
|
|
354
|
+
entry.Status = "failed";
|
|
355
|
+
throw;
|
|
356
|
+
}
|
|
357
|
+
entry.Status = "loaded";
|
|
358
|
+
|
|
359
|
+
// AT LOAD, and before anything runs: a cycle through
|
|
360
|
+
// restart-causing requirements does not settle, and the only
|
|
361
|
+
// safe time to report a non-terminating reconcile is before it
|
|
362
|
+
// starts (§11.3). `provides` is populated by `define`, which
|
|
363
|
+
// has just run, so this is the first moment the graph is
|
|
364
|
+
// complete.
|
|
365
|
+
try
|
|
366
|
+
{
|
|
367
|
+
Depend.CheckCycle(GraphNodes());
|
|
368
|
+
}
|
|
369
|
+
catch (Exception)
|
|
370
|
+
{
|
|
371
|
+
entry.Status = "failed";
|
|
372
|
+
throw;
|
|
373
|
+
}
|
|
374
|
+
return entry;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/// The requirement graph as plain data, for the pure detector.
|
|
378
|
+
private List<Depend.Node> GraphNodes()
|
|
379
|
+
{
|
|
380
|
+
var out_ = new List<Depend.Node>();
|
|
381
|
+
foreach (var pair in inst)
|
|
382
|
+
{
|
|
383
|
+
var provides = new List<string>();
|
|
384
|
+
foreach (var p in pair.Value.Provides)
|
|
385
|
+
{
|
|
386
|
+
provides.Add(Types.Str(Types.Get(p, "name")));
|
|
387
|
+
}
|
|
388
|
+
out_.Add(new Depend.Node(pair.Key, provides,
|
|
389
|
+
Depend.Requirements(pair.Value.Options)));
|
|
390
|
+
}
|
|
391
|
+
return out_;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
public Entry Activate(object eref)
|
|
395
|
+
{
|
|
396
|
+
Guard();
|
|
397
|
+
var entry = Need(eref);
|
|
398
|
+
if ("live" == entry.Status)
|
|
399
|
+
{
|
|
400
|
+
return entry; // no-op returning success
|
|
401
|
+
}
|
|
402
|
+
if ("failed" == entry.Status)
|
|
403
|
+
{
|
|
404
|
+
Types.Fail("plugin_bad_state", "instance has failed: " + entry.Ref,
|
|
405
|
+
Types.Details("ref", entry.Ref));
|
|
406
|
+
}
|
|
407
|
+
// §9.6: `active: false` bars the instance from running, and
|
|
408
|
+
// the bar is on the INSTANCE rather than on the apply that set
|
|
409
|
+
// it. `ready` reaches this through `activate`, so one guard
|
|
410
|
+
// covers both verbs the design names.
|
|
411
|
+
if (entry.Barred)
|
|
412
|
+
{
|
|
413
|
+
Types.Fail("plugin_inactive",
|
|
414
|
+
"instance is barred by active: false: " + entry.Ref,
|
|
415
|
+
Types.Details("ref", entry.Ref));
|
|
416
|
+
}
|
|
417
|
+
if ("declared" == entry.Status)
|
|
418
|
+
{
|
|
419
|
+
Load(entry.Ref, null);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// A declared requirement that is not live means `pending`:
|
|
423
|
+
// activation is a STANDING REQUEST, not a one-shot event.
|
|
424
|
+
var unmet = UnmetOf(entry);
|
|
425
|
+
if (0 < unmet.Count)
|
|
426
|
+
{
|
|
427
|
+
entry.Unmet = unmet;
|
|
428
|
+
entry.Status = "pending";
|
|
429
|
+
return entry;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
try
|
|
433
|
+
{
|
|
434
|
+
Run(entry, "activate", "activate");
|
|
435
|
+
}
|
|
436
|
+
catch (Exception)
|
|
437
|
+
{
|
|
438
|
+
// Unwind whatever the partial activation captured, in
|
|
439
|
+
// reverse.
|
|
440
|
+
Unwind(entry);
|
|
441
|
+
entry.Status = "failed";
|
|
442
|
+
throw;
|
|
443
|
+
}
|
|
444
|
+
// §11.4: THE SELECTION IS MADE HERE, once, and remembered.
|
|
445
|
+
// Every later question - the cascade, `hold`, `unmet` - reads
|
|
446
|
+
// it back rather than re-ranking, which is what
|
|
447
|
+
// "always-reluctant" means.
|
|
448
|
+
foreach (var req in Depend.Requirements(entry.Options))
|
|
449
|
+
{
|
|
450
|
+
Chosen(entry, req, true);
|
|
451
|
+
}
|
|
452
|
+
entry.Status = "live";
|
|
453
|
+
Reconcile();
|
|
454
|
+
return entry;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
public Entry Deactivate(object eref)
|
|
458
|
+
{
|
|
459
|
+
Guard();
|
|
460
|
+
var entry = Need(eref);
|
|
461
|
+
if ("loaded" == entry.Status || "declared" == entry.Status)
|
|
462
|
+
{
|
|
463
|
+
return entry;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// §5.2: `unload` is THE ONLY TRANSITION OUT OF `failed`.
|
|
467
|
+
if ("failed" == entry.Status)
|
|
468
|
+
{
|
|
469
|
+
Types.Fail("plugin_bad_state", "instance has failed: " + entry.Ref,
|
|
470
|
+
Types.Details("ref", entry.Ref));
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
if ("pending" == entry.Status)
|
|
474
|
+
{
|
|
475
|
+
// DEACTIVATING A PENDING INSTANCE RUNS NO CALLBACK (§5.2).
|
|
476
|
+
// It never reached activate, so it holds no scope and no
|
|
477
|
+
// live bindings; running the definition's deactivate there
|
|
478
|
+
// would be teardown without matching setup, which plugins
|
|
479
|
+
// are not written to survive and which could fail an
|
|
480
|
+
// instance that had done nothing wrong. It cannot fail.
|
|
481
|
+
entry.Status = "loaded";
|
|
482
|
+
entry.Unmet = new List<string>();
|
|
483
|
+
return entry;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
Held(entry.Ref);
|
|
487
|
+
Cascade(entry.Ref, new SortedSet<string>(StringComparer.Ordinal));
|
|
488
|
+
|
|
489
|
+
try
|
|
490
|
+
{
|
|
491
|
+
Run(entry, "deactivate", "deactivate");
|
|
492
|
+
}
|
|
493
|
+
catch (Exception)
|
|
494
|
+
{
|
|
495
|
+
Unwind(entry);
|
|
496
|
+
entry.Status = "failed";
|
|
497
|
+
throw;
|
|
498
|
+
}
|
|
499
|
+
ReleaseCheck(entry, Unwind(entry));
|
|
500
|
+
entry.Status = "loaded";
|
|
501
|
+
Reconcile();
|
|
502
|
+
return entry;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
public void Unload(object eref)
|
|
506
|
+
{
|
|
507
|
+
Guard();
|
|
508
|
+
var entry = Need(eref);
|
|
509
|
+
if ("live" == entry.Status || "pending" == entry.Status)
|
|
510
|
+
{
|
|
511
|
+
if ("live" == entry.Status)
|
|
512
|
+
{
|
|
513
|
+
Held(entry.Ref);
|
|
514
|
+
Cascade(entry.Ref, new SortedSet<string>(StringComparer.Ordinal));
|
|
515
|
+
try
|
|
516
|
+
{
|
|
517
|
+
Run(entry, "deactivate", "deactivate");
|
|
518
|
+
}
|
|
519
|
+
catch (Exception)
|
|
520
|
+
{
|
|
521
|
+
// §5.2: ANY failure during a transition lands the
|
|
522
|
+
// instance in `failed`, with the scope STILL FULLY
|
|
523
|
+
// UNWOUND - and the instance STAYS REGISTERED,
|
|
524
|
+
// because `failed` is a state an operator has to
|
|
525
|
+
// be able to see.
|
|
526
|
+
Unwind(entry);
|
|
527
|
+
entry.Status = "failed";
|
|
528
|
+
throw;
|
|
529
|
+
}
|
|
530
|
+
ReleaseCheck(entry, Unwind(entry));
|
|
531
|
+
}
|
|
532
|
+
entry.Status = "loaded";
|
|
533
|
+
}
|
|
534
|
+
if ("loaded" == entry.Status || "failed" == entry.Status)
|
|
535
|
+
{
|
|
536
|
+
try
|
|
537
|
+
{
|
|
538
|
+
Run(entry, "close", "close");
|
|
539
|
+
}
|
|
540
|
+
finally
|
|
541
|
+
{
|
|
542
|
+
inst.Remove(entry.Ref);
|
|
543
|
+
}
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
546
|
+
inst.Remove(entry.Ref);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/// Runs the whole forward path in one call (§5.1).
|
|
550
|
+
public Entry Ready(object eref)
|
|
551
|
+
{
|
|
552
|
+
Guard();
|
|
553
|
+
var r = Refs.CanonRef(eref);
|
|
554
|
+
if (!inst.ContainsKey(r))
|
|
555
|
+
{
|
|
556
|
+
Declare(r, null);
|
|
557
|
+
}
|
|
558
|
+
if ("declared" == inst[r].Status)
|
|
559
|
+
{
|
|
560
|
+
Load(r, null);
|
|
561
|
+
}
|
|
562
|
+
return Activate(r);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/// <summary>
|
|
566
|
+
/// Bindings go live only when activation succeeds (§8.1), so the
|
|
567
|
+
/// teardown is the exact inverse: reverse order, always. §8.3: "A
|
|
568
|
+
/// failing release does not stop the rest. Every entry runs, in
|
|
569
|
+
/// reverse order, whatever any of them does; the errors are
|
|
570
|
+
/// collected and raised as one <c>plugin_release_failed</c>."
|
|
571
|
+
///
|
|
572
|
+
/// <para>A selection belongs to ONE activation (§11.4). Leaving
|
|
573
|
+
/// <c>live</c> by any door drops it, so the next activation ranks
|
|
574
|
+
/// afresh.</para>
|
|
575
|
+
/// </summary>
|
|
576
|
+
private List<Exception> Unwind(Entry entry)
|
|
577
|
+
{
|
|
578
|
+
entry.Selected = new SortedDictionary<string, string>(StringComparer.Ordinal);
|
|
579
|
+
var scope = entry.Scope;
|
|
580
|
+
entry.Scope = new List<Entry.ScopeFn>();
|
|
581
|
+
var errors = new List<Exception>();
|
|
582
|
+
for (var i = scope.Count - 1; 0 <= i; i--)
|
|
583
|
+
{
|
|
584
|
+
try
|
|
585
|
+
{
|
|
586
|
+
scope[i]();
|
|
587
|
+
}
|
|
588
|
+
catch (Exception e)
|
|
589
|
+
{
|
|
590
|
+
errors.Add(e);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
return errors;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
/// <summary>
|
|
597
|
+
/// §8.3: "A failed release ends the instance in <c>failed</c>,
|
|
598
|
+
/// exactly as a failed callback does (5.2) - a release that raised
|
|
599
|
+
/// may have leaked, and an instance that may be holding resources
|
|
600
|
+
/// it cannot account for must not be reactivated."
|
|
601
|
+
/// </summary>
|
|
602
|
+
private void ReleaseCheck(Entry entry, List<Exception> errors)
|
|
603
|
+
{
|
|
604
|
+
if (0 == errors.Count)
|
|
605
|
+
{
|
|
606
|
+
return;
|
|
607
|
+
}
|
|
608
|
+
entry.Status = "failed";
|
|
609
|
+
var causes = new List<string>();
|
|
610
|
+
foreach (var e in errors)
|
|
611
|
+
{
|
|
612
|
+
causes.Add(e.Message);
|
|
613
|
+
}
|
|
614
|
+
Types.Fail("plugin_release_failed",
|
|
615
|
+
"release failed for " + entry.Ref + ": " + string.Join("; ", causes),
|
|
616
|
+
Types.Details("ref", entry.Ref, "cause", Types.Strings(causes)));
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/// <summary>
|
|
620
|
+
/// A REQUIREMENT IS ON A CAPABILITY, not on a ref (§11.1). A bare
|
|
621
|
+
/// string is shorthand for <c>{name}</c>. A ref satisfies too,
|
|
622
|
+
/// because a host that genuinely needs a specific instance should
|
|
623
|
+
/// not have to invent a capability for it.
|
|
624
|
+
/// </summary>
|
|
625
|
+
private List<string> UnmetOf(Entry entry)
|
|
626
|
+
{
|
|
627
|
+
var out_ = new List<string>();
|
|
628
|
+
foreach (var req in Depend.Requirements(entry.Options))
|
|
629
|
+
{
|
|
630
|
+
if (!Depend.GatesActivation(req))
|
|
631
|
+
{
|
|
632
|
+
continue;
|
|
633
|
+
}
|
|
634
|
+
if (0 != ProvidersOf(req).Count)
|
|
635
|
+
{
|
|
636
|
+
continue;
|
|
637
|
+
}
|
|
638
|
+
out_.Add(Types.Str(Types.Get(req, "name")));
|
|
639
|
+
}
|
|
640
|
+
return out_;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/// <summary>
|
|
644
|
+
/// §11.4's always-reluctant selection, and the ONE place a
|
|
645
|
+
/// provider is picked for a live instance. If this instance
|
|
646
|
+
/// already selected a provider for <c>req</c> and that provider is
|
|
647
|
+
/// STILL a candidate, it keeps it - a better-ranked newcomer does
|
|
648
|
+
/// not take it. <c>remember</c> is false for the questions asked
|
|
649
|
+
/// ABOUT an instance rather than BY it: introspection must not
|
|
650
|
+
/// create a binding.
|
|
651
|
+
/// </summary>
|
|
652
|
+
private string Chosen(Entry entry, object req, bool remember)
|
|
653
|
+
{
|
|
654
|
+
var cands = ProvidersOf(req);
|
|
655
|
+
if (0 == cands.Count)
|
|
656
|
+
{
|
|
657
|
+
return null;
|
|
658
|
+
}
|
|
659
|
+
var name = Types.Str(Types.Get(req, "name"));
|
|
660
|
+
if (entry.Selected.TryGetValue(name, out var held))
|
|
661
|
+
{
|
|
662
|
+
foreach (var c in cands)
|
|
663
|
+
{
|
|
664
|
+
if (held == Types.Str(Types.Get(c, "ref")))
|
|
665
|
+
{
|
|
666
|
+
return held;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
var best = Types.Str(Types.Get(cands[0], "ref"));
|
|
671
|
+
if (remember)
|
|
672
|
+
{
|
|
673
|
+
entry.Selected[name] = best;
|
|
674
|
+
}
|
|
675
|
+
return best;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
private List<string> BoundProviders(Entry entry)
|
|
679
|
+
{
|
|
680
|
+
var out_ = new List<string>();
|
|
681
|
+
foreach (var req in Depend.Requirements(entry.Options))
|
|
682
|
+
{
|
|
683
|
+
if (!Depend.RestartsOnLoss(req))
|
|
684
|
+
{
|
|
685
|
+
continue;
|
|
686
|
+
}
|
|
687
|
+
var eref = Chosen(entry, req, false);
|
|
688
|
+
if (null != eref && !out_.Contains(eref))
|
|
689
|
+
{
|
|
690
|
+
out_.Add(eref);
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
return out_;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/// Live instances whose selected provider is <c>eref</c> and which
|
|
697
|
+
/// would be restarted by losing it.
|
|
698
|
+
private List<string> ConsumersOf(string eref)
|
|
699
|
+
{
|
|
700
|
+
var out_ = new List<string>();
|
|
701
|
+
foreach (var pair in new SortedDictionary<string, Entry>(inst, StringComparer.Ordinal))
|
|
702
|
+
{
|
|
703
|
+
if (pair.Key == eref || "live" != pair.Value.Status)
|
|
704
|
+
{
|
|
705
|
+
continue;
|
|
706
|
+
}
|
|
707
|
+
if (BoundProviders(pair.Value).Contains(eref))
|
|
708
|
+
{
|
|
709
|
+
out_.Add(pair.Key);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
return out_;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
/// <summary>
|
|
716
|
+
/// §11.3's <c>hold</c> asks a DIFFERENT question from the cascade,
|
|
717
|
+
/// and reading it off <c>ConsumersOf</c> answered the cascade's.
|
|
718
|
+
/// The cascade wants the edges that RESTART; <c>hold</c> says
|
|
719
|
+
/// "deactivating a REQUIRED instance is
|
|
720
|
+
/// <c>plugin_dependency_held</c>", and required is cardinality.
|
|
721
|
+
/// The two sets differ in both directions and each difference was
|
|
722
|
+
/// a real bug.
|
|
723
|
+
/// </summary>
|
|
724
|
+
private List<string> HoldersOf(string eref)
|
|
725
|
+
{
|
|
726
|
+
var out_ = new List<string>();
|
|
727
|
+
foreach (var pair in new SortedDictionary<string, Entry>(inst, StringComparer.Ordinal))
|
|
728
|
+
{
|
|
729
|
+
if (pair.Key == eref || "live" != pair.Value.Status)
|
|
730
|
+
{
|
|
731
|
+
continue;
|
|
732
|
+
}
|
|
733
|
+
foreach (var req in Depend.Requirements(pair.Value.Options))
|
|
734
|
+
{
|
|
735
|
+
if (!Depend.GatesActivation(req))
|
|
736
|
+
{
|
|
737
|
+
continue;
|
|
738
|
+
}
|
|
739
|
+
if (eref == Chosen(pair.Value, req, false))
|
|
740
|
+
{
|
|
741
|
+
out_.Add(pair.Key);
|
|
742
|
+
break;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
return out_;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
private List<object> ProvidersOf(object req)
|
|
750
|
+
{
|
|
751
|
+
var name = Types.Get(req, "name");
|
|
752
|
+
var want = Refs.Canon(Types.Str(name));
|
|
753
|
+
var cands = new List<object>();
|
|
754
|
+
foreach (var pair in inst)
|
|
755
|
+
{
|
|
756
|
+
var target = pair.Value;
|
|
757
|
+
if ("live" != target.Status)
|
|
758
|
+
{
|
|
759
|
+
continue;
|
|
760
|
+
}
|
|
761
|
+
// A ref satisfies directly.
|
|
762
|
+
if (pair.Key == want)
|
|
763
|
+
{
|
|
764
|
+
var cand = Types.NewMap();
|
|
765
|
+
cand["ref"] = pair.Key;
|
|
766
|
+
cand["pos"] = target.Pos;
|
|
767
|
+
var prov = Types.NewMap();
|
|
768
|
+
prov["name"] = name;
|
|
769
|
+
cand["provides"] = prov;
|
|
770
|
+
cands.Add(cand);
|
|
771
|
+
continue;
|
|
772
|
+
}
|
|
773
|
+
foreach (var prov in target.Provides)
|
|
774
|
+
{
|
|
775
|
+
if (!Types.Same(Types.Get(prov, "name"), name))
|
|
776
|
+
{
|
|
777
|
+
continue;
|
|
778
|
+
}
|
|
779
|
+
var cand = Types.NewMap();
|
|
780
|
+
cand["ref"] = pair.Key;
|
|
781
|
+
cand["pos"] = target.Pos;
|
|
782
|
+
cand["provides"] = prov;
|
|
783
|
+
cands.Add(cand);
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
return Capability.ResolveCapability(req, cands);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
/// <summary>
|
|
790
|
+
/// CONSUMERS GO DOWN FIRST, NOT AFTERWARDS (§11.3). The cascade is
|
|
791
|
+
/// part of the provider's own deactivation and runs BEFORE the
|
|
792
|
+
/// provider's <c>deactivate</c> callback and scope unwind, so a
|
|
793
|
+
/// consumer's teardown can still call the thing it depends on -
|
|
794
|
+
/// flushing a buffer to the store it is about to lose is exactly
|
|
795
|
+
/// what a <c>deactivate</c> callback is for.
|
|
796
|
+
/// </summary>
|
|
797
|
+
private void Cascade(string provider, SortedSet<string> seen)
|
|
798
|
+
{
|
|
799
|
+
if (seen.Contains(provider))
|
|
800
|
+
{
|
|
801
|
+
return;
|
|
802
|
+
}
|
|
803
|
+
seen.Add(provider);
|
|
804
|
+
|
|
805
|
+
foreach (var r in ConsumersOf(provider))
|
|
806
|
+
{
|
|
807
|
+
if (!inst.TryGetValue(r, out var consumer) || "live" != consumer.Status)
|
|
808
|
+
{
|
|
809
|
+
continue;
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
Cascade(r, seen); // deepest-first
|
|
813
|
+
var bad = false;
|
|
814
|
+
try
|
|
815
|
+
{
|
|
816
|
+
Run(consumer, "deactivate", "deactivate");
|
|
817
|
+
}
|
|
818
|
+
catch (Exception)
|
|
819
|
+
{
|
|
820
|
+
bad = true;
|
|
821
|
+
}
|
|
822
|
+
var errors = Unwind(consumer);
|
|
823
|
+
if (bad || 0 != errors.Count)
|
|
824
|
+
{
|
|
825
|
+
// §5.2: ANY failure during a transition lands the
|
|
826
|
+
// instance in `failed`. Marking it `pending` handed it
|
|
827
|
+
// straight back to `reconcile`, which would activate it
|
|
828
|
+
// again the moment the provider returned.
|
|
829
|
+
consumer.Status = "failed";
|
|
830
|
+
continue;
|
|
831
|
+
}
|
|
832
|
+
consumer.Status = "pending";
|
|
833
|
+
consumer.Unmet = UnmetOf(consumer);
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
/// <summary>
|
|
838
|
+
/// The hold check is A GUARD ON AD-HOC DEACTIVATION, NOT ON
|
|
839
|
+
/// COORDINATED TEARDOWN. In a bulk operation that is removing the
|
|
840
|
+
/// holders too it is suspended for exactly those holders, and the
|
|
841
|
+
/// teardown still runs consumers before providers.
|
|
842
|
+
/// </summary>
|
|
843
|
+
private void Held(string eref)
|
|
844
|
+
{
|
|
845
|
+
if ("hold" != dependency)
|
|
846
|
+
{
|
|
847
|
+
return;
|
|
848
|
+
}
|
|
849
|
+
if (coordinated)
|
|
850
|
+
{
|
|
851
|
+
return;
|
|
852
|
+
}
|
|
853
|
+
var holders = HoldersOf(eref);
|
|
854
|
+
if (0 == holders.Count)
|
|
855
|
+
{
|
|
856
|
+
return;
|
|
857
|
+
}
|
|
858
|
+
Types.Fail("plugin_dependency_held",
|
|
859
|
+
"instance is required by live consumers: " + eref,
|
|
860
|
+
Types.Details("ref", eref, "holders", Types.Strings(holders)));
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
/// <summary>
|
|
864
|
+
/// EAGER reconciliation: run to a fixed point rather than
|
|
865
|
+
/// scheduling. Two directions, and both are the reason
|
|
866
|
+
/// <c>pending</c> exists. Activation is a STANDING REQUEST, not a
|
|
867
|
+
/// one-shot event.
|
|
868
|
+
/// </summary>
|
|
869
|
+
private void Reconcile()
|
|
870
|
+
{
|
|
871
|
+
var moved = true;
|
|
872
|
+
var rounds = 0;
|
|
873
|
+
while (moved)
|
|
874
|
+
{
|
|
875
|
+
moved = false;
|
|
876
|
+
rounds++;
|
|
877
|
+
if (1000 < rounds)
|
|
878
|
+
{
|
|
879
|
+
break;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
// Losses first, so a cascade settles in one pass rather
|
|
883
|
+
// than alternating with re-activations.
|
|
884
|
+
foreach (var r in new List<string>(inst.Keys))
|
|
885
|
+
{
|
|
886
|
+
if (!inst.TryGetValue(r, out var entry) || "live" != entry.Status)
|
|
887
|
+
{
|
|
888
|
+
continue;
|
|
889
|
+
}
|
|
890
|
+
var lost = new List<object>();
|
|
891
|
+
foreach (var q in Depend.Requirements(entry.Options))
|
|
892
|
+
{
|
|
893
|
+
if (Depend.GatesActivation(q) && 0 == ProvidersOf(q).Count)
|
|
894
|
+
{
|
|
895
|
+
lost.Add(q);
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
if (0 == lost.Count)
|
|
899
|
+
{
|
|
900
|
+
continue;
|
|
901
|
+
}
|
|
902
|
+
// POLICY IS PER REQUIREMENT, not per instance (§11.3).
|
|
903
|
+
// A `dynamic` requirement whose provider is gone
|
|
904
|
+
// leaves the consumer LIVE and notified.
|
|
905
|
+
var restarts = false;
|
|
906
|
+
foreach (var q in lost)
|
|
907
|
+
{
|
|
908
|
+
if (Depend.RestartsOnLoss(q))
|
|
909
|
+
{
|
|
910
|
+
restarts = true;
|
|
911
|
+
break;
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
if (!restarts)
|
|
915
|
+
{
|
|
916
|
+
continue;
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
var bad = false;
|
|
920
|
+
try
|
|
921
|
+
{
|
|
922
|
+
Run(entry, "deactivate", "deactivate");
|
|
923
|
+
}
|
|
924
|
+
catch (Exception)
|
|
925
|
+
{
|
|
926
|
+
bad = true;
|
|
927
|
+
}
|
|
928
|
+
var errors = Unwind(entry);
|
|
929
|
+
if (bad || 0 != errors.Count)
|
|
930
|
+
{
|
|
931
|
+
entry.Status = "failed";
|
|
932
|
+
moved = true;
|
|
933
|
+
continue;
|
|
934
|
+
}
|
|
935
|
+
entry.Status = "pending";
|
|
936
|
+
entry.Unmet = UnmetOf(entry);
|
|
937
|
+
moved = true;
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
foreach (var r in new List<string>(inst.Keys))
|
|
941
|
+
{
|
|
942
|
+
if (!inst.TryGetValue(r, out var entry) || "pending" != entry.Status)
|
|
943
|
+
{
|
|
944
|
+
continue;
|
|
945
|
+
}
|
|
946
|
+
if (0 != UnmetOf(entry).Count)
|
|
947
|
+
{
|
|
948
|
+
continue;
|
|
949
|
+
}
|
|
950
|
+
try
|
|
951
|
+
{
|
|
952
|
+
Run(entry, "activate", "activate");
|
|
953
|
+
entry.Status = "live";
|
|
954
|
+
entry.Unmet = new List<string>();
|
|
955
|
+
moved = true;
|
|
956
|
+
}
|
|
957
|
+
catch (Exception)
|
|
958
|
+
{
|
|
959
|
+
Unwind(entry);
|
|
960
|
+
entry.Status = "failed";
|
|
961
|
+
moved = true;
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
// --- ordering ---------------------------------------------------
|
|
968
|
+
|
|
969
|
+
public List<string> Order(string point)
|
|
970
|
+
{
|
|
971
|
+
// Sorted by declaration SEQUENCE, which is what makes the §7
|
|
972
|
+
// sort's fall-through deterministic in a language whose maps
|
|
973
|
+
// have no insertion order. §7 breaks ties by `pos`; two
|
|
974
|
+
// instances CAN share one, and past that this was falling
|
|
975
|
+
// through to map order. `seq` is that order, made explicit.
|
|
976
|
+
var live = new List<Entry>();
|
|
977
|
+
foreach (var entry in inst.Values)
|
|
978
|
+
{
|
|
979
|
+
if ("live" == entry.Status)
|
|
980
|
+
{
|
|
981
|
+
live.Add(entry);
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
live = Types.StableSorted(live, (a, b) => a.Seq.CompareTo(b.Seq));
|
|
985
|
+
|
|
986
|
+
var bindings = new List<Order.Binding>();
|
|
987
|
+
foreach (var entry in live)
|
|
988
|
+
{
|
|
989
|
+
bindings.Add(new Order.Binding(entry.Ref, entry.Pos, entry.OrderBlock));
|
|
990
|
+
}
|
|
991
|
+
var pin = null == point ? null : Types.Get(Types.Get(points, point), "pin");
|
|
992
|
+
return Voxgig.Plugin.Order.ResolveOrder(bindings, pin);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
// --- points -----------------------------------------------------
|
|
996
|
+
|
|
997
|
+
/// <summary>
|
|
998
|
+
/// Live bindings on a point, in resolved order. Recomputed on any
|
|
999
|
+
/// change to the live set (§7) rather than cached at startup - the
|
|
1000
|
+
/// bug a host discovers only when something deactivates in
|
|
1001
|
+
/// production.
|
|
1002
|
+
/// </summary>
|
|
1003
|
+
private List<Point.Bound> BoundOn(string point)
|
|
1004
|
+
{
|
|
1005
|
+
var out_ = new List<Point.Bound>();
|
|
1006
|
+
foreach (var eref in Order(point))
|
|
1007
|
+
{
|
|
1008
|
+
if (!inst.TryGetValue(eref, out var entry))
|
|
1009
|
+
{
|
|
1010
|
+
continue;
|
|
1011
|
+
}
|
|
1012
|
+
// The band is the INSTANCE's ordering block (§7), stamped
|
|
1013
|
+
// by the host. A plugin passing its own would be ranking
|
|
1014
|
+
// itself above the order its document declared.
|
|
1015
|
+
var band = Types.AsInt(Types.Get(entry.OrderBlock, "band")) ?? 0;
|
|
1016
|
+
foreach (var b in entry.Bindings)
|
|
1017
|
+
{
|
|
1018
|
+
if (b.PointName != point)
|
|
1019
|
+
{
|
|
1020
|
+
continue;
|
|
1021
|
+
}
|
|
1022
|
+
out_.Add(b.WithBand(band));
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
return out_;
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
private object PointSpec(string point, string want)
|
|
1029
|
+
{
|
|
1030
|
+
if (!Types.Has(points, point))
|
|
1031
|
+
{
|
|
1032
|
+
Types.Fail("plugin_point_unknown", "no such point: " + point,
|
|
1033
|
+
Types.Details("point", point));
|
|
1034
|
+
}
|
|
1035
|
+
var spec = Types.Get(points, point);
|
|
1036
|
+
var kind = Types.Get(spec, "kind");
|
|
1037
|
+
if ("hook" == want)
|
|
1038
|
+
{
|
|
1039
|
+
// A point with no declared kind is a hook, which is what
|
|
1040
|
+
// makes `{}` the minimal point declaration.
|
|
1041
|
+
if (null != kind && !"hook".Equals(kind))
|
|
1042
|
+
{
|
|
1043
|
+
Types.Fail("plugin_point_kind", "point is not a hook: " + point,
|
|
1044
|
+
Types.Details("point", point, "kind", kind));
|
|
1045
|
+
}
|
|
1046
|
+
return spec;
|
|
1047
|
+
}
|
|
1048
|
+
if (!want.Equals(kind))
|
|
1049
|
+
{
|
|
1050
|
+
Types.Fail("plugin_point_kind", "point is not a " + want + ": " + point,
|
|
1051
|
+
Types.Details("point", point, "kind", kind));
|
|
1052
|
+
}
|
|
1053
|
+
return spec;
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
public object Emit(string point, object arg)
|
|
1057
|
+
{
|
|
1058
|
+
var spec = PointSpec(point, "hook");
|
|
1059
|
+
var mode = Types.Str(Types.Get(spec, "mode")) ?? "emit";
|
|
1060
|
+
return Point.Emit(BoundOn(point), mode, arg);
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
public object Call(string point, object[] args)
|
|
1064
|
+
{
|
|
1065
|
+
var spec = PointSpec(point, "chain");
|
|
1066
|
+
var base_ = Types.Get(spec, "base") as Point.NextFn;
|
|
1067
|
+
Point.NextFn basefn = null != base_
|
|
1068
|
+
? base_
|
|
1069
|
+
: (a => 0 < a.Length ? a[0] : null);
|
|
1070
|
+
return Point.Compose(BoundOn(point), basefn)(args);
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
public object Provider(string point, object[] args)
|
|
1074
|
+
{
|
|
1075
|
+
var spec = PointSpec(point, "provider");
|
|
1076
|
+
var pick = Point.Provider(BoundOn(point), spec);
|
|
1077
|
+
if (null == pick.Winner)
|
|
1078
|
+
{
|
|
1079
|
+
return Types.Get(spec, "default");
|
|
1080
|
+
}
|
|
1081
|
+
return pick.Winner.Func(null, args);
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
/// The losers are VISIBLE rather than silently ignored (§6.3).
|
|
1085
|
+
public List<string> Shadowed(string point)
|
|
1086
|
+
{
|
|
1087
|
+
if (!Types.Has(points, point))
|
|
1088
|
+
{
|
|
1089
|
+
return new List<string>();
|
|
1090
|
+
}
|
|
1091
|
+
return Point.Provider(BoundOn(point), Types.Get(points, point)).Shadowed;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
public object Exports(string spec)
|
|
1095
|
+
{
|
|
1096
|
+
var all = new List<Export.Exported>();
|
|
1097
|
+
foreach (var pair in inst)
|
|
1098
|
+
{
|
|
1099
|
+
var entry = pair.Value;
|
|
1100
|
+
// Exports of a `loaded` (not live) instance are VISIBLE (§11).
|
|
1101
|
+
if ("declared" == entry.Status || "failed" == entry.Status)
|
|
1102
|
+
{
|
|
1103
|
+
continue;
|
|
1104
|
+
}
|
|
1105
|
+
foreach (var x in entry.Exports)
|
|
1106
|
+
{
|
|
1107
|
+
all.Add(new Export.Exported(pair.Key, x.Key, x.Value));
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
return Export.ResolveExport(spec, all);
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
/// The live providers of a capability, best-first (§11.1).
|
|
1114
|
+
public List<string> CapabilityOf(string name)
|
|
1115
|
+
{
|
|
1116
|
+
var cands = new List<object>();
|
|
1117
|
+
foreach (var pair in inst)
|
|
1118
|
+
{
|
|
1119
|
+
var entry = pair.Value;
|
|
1120
|
+
if ("live" != entry.Status)
|
|
1121
|
+
{
|
|
1122
|
+
continue;
|
|
1123
|
+
}
|
|
1124
|
+
foreach (var prov in entry.Provides)
|
|
1125
|
+
{
|
|
1126
|
+
if (name != Types.Str(Types.Get(prov, "name")))
|
|
1127
|
+
{
|
|
1128
|
+
continue;
|
|
1129
|
+
}
|
|
1130
|
+
var cand = Types.NewMap();
|
|
1131
|
+
cand["ref"] = pair.Key;
|
|
1132
|
+
cand["pos"] = entry.Pos;
|
|
1133
|
+
cand["provides"] = prov;
|
|
1134
|
+
cands.Add(cand);
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
var req = Types.NewMap();
|
|
1138
|
+
req["name"] = name;
|
|
1139
|
+
var out_ = new List<string>();
|
|
1140
|
+
foreach (var c in Capability.ResolveCapability(req, cands))
|
|
1141
|
+
{
|
|
1142
|
+
out_.Add(Types.Str(Types.Get(c, "ref")));
|
|
1143
|
+
}
|
|
1144
|
+
return out_;
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
// --- documents --------------------------------------------------
|
|
1148
|
+
|
|
1149
|
+
/// <summary>
|
|
1150
|
+
/// §9.6: "load what is missing, UNLOAD WHAT IS GONE, patch what
|
|
1151
|
+
/// changed, and move activation state to match", with the stated
|
|
1152
|
+
/// ordering. FOUR PHASES, NOT ONE INTERLEAVED LOOP: an earlier
|
|
1153
|
+
/// draft walked the document once, which never looked at instances
|
|
1154
|
+
/// the new document had DROPPED - so an integration removed from a
|
|
1155
|
+
/// config reload stayed live with its bindings and resources.
|
|
1156
|
+
/// </summary>
|
|
1157
|
+
public void Apply(object doc, object profile)
|
|
1158
|
+
{
|
|
1159
|
+
Guard();
|
|
1160
|
+
var useprofile = profile ?? Types.Get(opts, "profile");
|
|
1161
|
+
|
|
1162
|
+
var input = Types.NewMap();
|
|
1163
|
+
input["doc"] = doc;
|
|
1164
|
+
input["profile"] = useprofile;
|
|
1165
|
+
input["keys"] = Types.Get(opts, "keys");
|
|
1166
|
+
input["reserved"] = reserved;
|
|
1167
|
+
var norm = Config.NormalizeConfig(input);
|
|
1168
|
+
|
|
1169
|
+
var want = new List<string>();
|
|
1170
|
+
foreach (var r in Types.List(norm["order"]))
|
|
1171
|
+
{
|
|
1172
|
+
want.Add(Types.Str(r));
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
var defaults = Types.Get(opts, "defaults");
|
|
1176
|
+
var optionsof = new SortedDictionary<string, object>(StringComparer.Ordinal);
|
|
1177
|
+
foreach (var eref in want)
|
|
1178
|
+
{
|
|
1179
|
+
var oin = Types.NewMap();
|
|
1180
|
+
oin["ref"] = eref;
|
|
1181
|
+
oin["doc"] = doc;
|
|
1182
|
+
oin["profile"] = useprofile;
|
|
1183
|
+
oin["shape"] = ShapeOf(eref);
|
|
1184
|
+
oin["hostdefaults"] = Types.Get(defaults, Refs.RefName(eref));
|
|
1185
|
+
optionsof[eref] = Config.ResolveOptions(oin);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
var instances = norm["instance"];
|
|
1189
|
+
|
|
1190
|
+
// --- phase 1: deactivations and unloads, REVERSE load order ----
|
|
1191
|
+
var drop = new List<string>();
|
|
1192
|
+
foreach (var pair in inst)
|
|
1193
|
+
{
|
|
1194
|
+
if ("declared" == pair.Value.Status || WantLive(instances, pair.Key))
|
|
1195
|
+
{
|
|
1196
|
+
continue;
|
|
1197
|
+
}
|
|
1198
|
+
drop.Add(pair.Key);
|
|
1199
|
+
}
|
|
1200
|
+
// Highest `pos` first, ref-descending for a tie, so a consumer
|
|
1201
|
+
// declared after its provider goes down first.
|
|
1202
|
+
drop.Sort((a, b) =>
|
|
1203
|
+
{
|
|
1204
|
+
var pa = inst[a].Pos;
|
|
1205
|
+
var pb = inst[b].Pos;
|
|
1206
|
+
if (pa != pb)
|
|
1207
|
+
{
|
|
1208
|
+
return pb.CompareTo(pa);
|
|
1209
|
+
}
|
|
1210
|
+
return string.CompareOrdinal(b, a);
|
|
1211
|
+
});
|
|
1212
|
+
foreach (var eref in drop)
|
|
1213
|
+
{
|
|
1214
|
+
Unload(eref);
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
// --- phase 2: declare and patch EVERYTHING, in load order ------
|
|
1218
|
+
foreach (var eref in want)
|
|
1219
|
+
{
|
|
1220
|
+
var ent = Types.Get(instances, eref);
|
|
1221
|
+
var spec = Types.NewMap();
|
|
1222
|
+
spec["options"] = optionsof[eref];
|
|
1223
|
+
spec["order"] = Types.Get(ent, "order");
|
|
1224
|
+
spec["pos"] = Types.Get(ent, "pos");
|
|
1225
|
+
var entry = Declare(eref, spec);
|
|
1226
|
+
// The bar is REASSERTED ON EVERY APPLY, in both directions
|
|
1227
|
+
// - a document that turns the instance back on clears it,
|
|
1228
|
+
// which is the whole point of a config switch.
|
|
1229
|
+
entry.Barred = !Types.Truthy(Types.Get(ent, "active"));
|
|
1230
|
+
// REPLACE rather than refill: `Inst.Options()` reads the
|
|
1231
|
+
// field back through the entry every time, so no callback
|
|
1232
|
+
// is holding a map that needs emptying in place.
|
|
1233
|
+
entry.Options = optionsof[eref];
|
|
1234
|
+
entry.OrderBlock = Types.Get(ent, "order");
|
|
1235
|
+
entry.Pos = Types.Num(Types.Get(ent, "pos")) ?? 0;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
// --- phase 3: loads, in load order -----------------------------
|
|
1239
|
+
// ONLY THE EAGER, ACTIVE ONES: "a document of twenty lazy
|
|
1240
|
+
// instances is twenty map entries and no executed code" (§9.6).
|
|
1241
|
+
foreach (var eref in want)
|
|
1242
|
+
{
|
|
1243
|
+
if (WantLive(instances, eref))
|
|
1244
|
+
{
|
|
1245
|
+
Load(eref, null);
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
// --- phase 4: activations, in load order -----------------------
|
|
1250
|
+
foreach (var eref in want)
|
|
1251
|
+
{
|
|
1252
|
+
if (WantLive(instances, eref))
|
|
1253
|
+
{
|
|
1254
|
+
Activate(eref);
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
/// <summary>
|
|
1260
|
+
/// Should this ref be LIVE after the apply? False for a ref the
|
|
1261
|
+
/// document declares lazy or inactive AND for one it does not name
|
|
1262
|
+
/// at all - which is what makes "unload what is gone" and "unload
|
|
1263
|
+
/// what was toggled off" one rule rather than two.
|
|
1264
|
+
/// </summary>
|
|
1265
|
+
private static bool WantLive(object instances, string eref)
|
|
1266
|
+
{
|
|
1267
|
+
var ent = Types.Get(instances, eref);
|
|
1268
|
+
return null != ent && Types.Truthy(Types.Get(ent, "active"))
|
|
1269
|
+
&& "eager".Equals(Types.Get(ent, "start"));
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
private object ShapeOf(string eref)
|
|
1273
|
+
{
|
|
1274
|
+
var definition = catalog.Get(Refs.RefName(eref));
|
|
1275
|
+
return null == definition ? null : definition.Shape;
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
public void Options(object eref, object patch)
|
|
1279
|
+
{
|
|
1280
|
+
Guard();
|
|
1281
|
+
var entry = Need(eref);
|
|
1282
|
+
var previous = entry.Options;
|
|
1283
|
+
|
|
1284
|
+
var merged = Types.NewMap();
|
|
1285
|
+
var prev = Types.Map(previous);
|
|
1286
|
+
if (null != prev)
|
|
1287
|
+
{
|
|
1288
|
+
foreach (var pair in prev)
|
|
1289
|
+
{
|
|
1290
|
+
merged[pair.Key] = pair.Value;
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
foreach (var k in Types.Keys(patch))
|
|
1294
|
+
{
|
|
1295
|
+
merged[k] = Types.Get(patch, k);
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
var input = Types.NewMap();
|
|
1299
|
+
input["ref"] = entry.Ref;
|
|
1300
|
+
input["shape"] = ShapeOf(entry.Ref);
|
|
1301
|
+
input["doc"] = Types.NewMap();
|
|
1302
|
+
input["patch"] = merged;
|
|
1303
|
+
entry.Options = Config.ResolveOptions(input);
|
|
1304
|
+
|
|
1305
|
+
if ("live" != entry.Status)
|
|
1306
|
+
{
|
|
1307
|
+
return;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
if (null != entry.Def.Reconfigure)
|
|
1311
|
+
{
|
|
1312
|
+
transition = true;
|
|
1313
|
+
try
|
|
1314
|
+
{
|
|
1315
|
+
entry.Def.Reconfigure(new Inst(this, entry), entry.Options, previous);
|
|
1316
|
+
}
|
|
1317
|
+
finally
|
|
1318
|
+
{
|
|
1319
|
+
transition = false;
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
else
|
|
1323
|
+
{
|
|
1324
|
+
// Always correct and sometimes expensive; `reconfigure`
|
|
1325
|
+
// exists to make the common case cheap (§9.4).
|
|
1326
|
+
Deactivate(entry.Ref);
|
|
1327
|
+
Activate(entry.Ref);
|
|
1328
|
+
}
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1331
|
+
public void Close()
|
|
1332
|
+
{
|
|
1333
|
+
// A bulk teardown removing the holders too, so `hold` is
|
|
1334
|
+
// suspended for exactly those holders (§11.3) - while the
|
|
1335
|
+
// consumers-first cascade still runs, which is the half that
|
|
1336
|
+
// matters.
|
|
1337
|
+
coordinated = true;
|
|
1338
|
+
try
|
|
1339
|
+
{
|
|
1340
|
+
var refs = new List<string>(inst.Keys);
|
|
1341
|
+
refs.Reverse();
|
|
1342
|
+
foreach (var eref in refs)
|
|
1343
|
+
{
|
|
1344
|
+
if (inst.ContainsKey(eref))
|
|
1345
|
+
{
|
|
1346
|
+
Unload(eref);
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
finally
|
|
1351
|
+
{
|
|
1352
|
+
coordinated = false;
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
/// The same record §6.6 gives a plugin about itself, reachable
|
|
1357
|
+
/// from outside for the corpus.
|
|
1358
|
+
public object PositionOf(string eref, string point)
|
|
1359
|
+
{
|
|
1360
|
+
var myref = Refs.Canon(eref);
|
|
1361
|
+
if (!inst.TryGetValue(myref, out var entry))
|
|
1362
|
+
{
|
|
1363
|
+
Types.Fail("plugin_not_loaded", "no such instance: " + eref,
|
|
1364
|
+
Types.Details("ref", eref));
|
|
1365
|
+
}
|
|
1366
|
+
var ranked = Order(point);
|
|
1367
|
+
var index = ranked.IndexOf(entry.Ref);
|
|
1368
|
+
var out_ = Types.NewMap();
|
|
1369
|
+
out_["index"] = (double)index;
|
|
1370
|
+
out_["count"] = (double)ranked.Count;
|
|
1371
|
+
// §6.2 composes b1(b2(b3(base))) with the FIRST binding
|
|
1372
|
+
// OUTERMOST, so these are not index 0 and index count-1 the
|
|
1373
|
+
// other way round.
|
|
1374
|
+
out_["outermost"] = 0 == index;
|
|
1375
|
+
out_["innermost"] = index == ranked.Count - 1;
|
|
1376
|
+
return out_;
|
|
1377
|
+
}
|
|
1378
|
+
}
|
|
1379
|
+
}
|