@voxgig/sdkgen 4.8.2 → 4.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/dist/action/doctor.d.ts +1 -0
- package/dist/action/doctor.js +50 -2
- package/dist/action/doctor.js.map +1 -1
- package/dist/helpers/naming.js +4 -2
- package/dist/helpers/naming.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/model/sdkgen.aon +21 -0
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +120 -18
- package/project/.sdk/model/target/c.aon +10 -0
- package/project/.sdk/model/target/clojure.aon +13 -0
- package/project/.sdk/model/target/cpp.aon +10 -0
- package/project/.sdk/model/target/csharp.aon +9 -0
- package/project/.sdk/model/target/dart.aon +10 -0
- package/project/.sdk/model/target/elixir.aon +9 -0
- package/project/.sdk/model/target/go.aon +13 -0
- package/project/.sdk/model/target/java.aon +9 -0
- package/project/.sdk/model/target/js.aon +7 -0
- package/project/.sdk/model/target/kotlin.aon +9 -0
- package/project/.sdk/model/target/lean.aon +17 -0
- package/project/.sdk/model/target/lua.aon +8 -0
- package/project/.sdk/model/target/ocaml.aon +9 -0
- package/project/.sdk/model/target/perl.aon +8 -0
- package/project/.sdk/model/target/php.aon +8 -0
- package/project/.sdk/model/target/py.aon +13 -0
- package/project/.sdk/model/target/rb.aon +8 -0
- package/project/.sdk/model/target/rust.aon +10 -0
- package/project/.sdk/model/target/scala.aon +21 -2
- package/project/.sdk/model/target/swift.aon +18 -0
- package/project/.sdk/model/target/ts.aon +13 -0
- package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
- package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
- package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
- package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
- package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
- package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
- package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
- package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
- package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
- package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
- package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
- package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
- package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
- package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
- package/project/.sdk/tm/c/Makefile +38 -3
- package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
- package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
- package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
- package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
- package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
- package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
- package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
- package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
- package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
- package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
- package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
- package/project/.sdk/tm/cpp/Makefile +5 -1
- package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
- package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
- package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
- package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
- package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
- package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
- package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
- package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
- package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
- package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
- package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
- package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
- package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
- package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
- package/project/.sdk/tm/dart/test/omni.dart +520 -0
- package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
- package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
- package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
- package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
- package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
- package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
- package/project/.sdk/tm/elixir/Makefile +11 -3
- package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
- package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
- package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
- package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
- package/project/.sdk/tm/go/core/context.go +32 -16
- package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
- package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
- package/project/.sdk/tm/go/test/omni/omni.go +897 -0
- package/project/.sdk/tm/go/test/omni/util.go +360 -0
- package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
- package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
- package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
- package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
- package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
- package/project/.sdk/tm/go/utility/make_options.go +8 -1
- package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
- package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
- package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
- package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
- package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
- package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
- package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
- package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
- package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
- package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
- package/project/.sdk/tm/js/test/omni.js +251 -0
- package/project/.sdk/tm/js/test/omni.test.js +105 -0
- package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
- package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
- package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
- package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
- package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
- package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
- package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
- package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
- package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
- package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
- package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
- package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
- package/project/.sdk/tm/lean/Makefile +12 -5
- package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
- package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
- package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
- package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
- package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
- package/project/.sdk/tm/lua/test/omni.lua +456 -0
- package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
- package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
- package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
- package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
- package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
- package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
- package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
- package/project/.sdk/tm/ocaml/Makefile +37 -12
- package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
- package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
- package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
- package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
- package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
- package/project/.sdk/tm/perl/t/omni.pm +647 -0
- package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
- package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
- package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
- package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
- package/project/.sdk/tm/php/test/Omni.php +691 -0
- package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
- package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
- package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
- package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
- package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
- package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
- package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
- package/project/.sdk/tm/py/test/omni.py +415 -0
- package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
- package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
- package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
- package/project/.sdk/tm/rb/test/omni.rb +505 -0
- package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
- package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
- package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
- package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
- package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
- package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
- package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
- package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
- package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
- package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
- package/project/.sdk/tm/scala/Makefile +16 -6
- package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
- package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
- package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
- package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
- package/project/.sdk/tm/ts/test/omni.ts +104 -32
- package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
- package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
- package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
- package/project/sdkgen-package.json +1 -1
- package/src/action/doctor.ts +66 -2
- package/src/helpers/naming.ts +4 -2
- package/project/.sdk/tm/c/tests/runner.h +0 -274
- package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
- package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
- package/project/.sdk/tm/dart/test/runner.dart +0 -406
- package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
- package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
- package/project/.sdk/tm/go/test/runner_test.go +0 -629
- package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
- package/project/.sdk/tm/java/test/StructRunner.java +0 -281
- package/project/.sdk/tm/js/test/runner.js +0 -387
- package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
- package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
- package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
- package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
- package/project/.sdk/tm/php/test/StructRunner.php +0 -275
- package/project/.sdk/tm/py/test/struct_runner.py +0 -411
- package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
- package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
- package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# VENDORED: @voxgig/omni sdk-20260904-1610-0 (elixir/lib/util.ex)
|
|
2
|
+
# Source: https://github.com/voxgig/omni @ 8c3e1b573a8d35796f7fc45e3226b977023cabf7 [tag: sdk-20260904-1610-0]
|
|
3
|
+
# License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
# Omni internal JSON utilities.
|
|
5
|
+
#
|
|
6
|
+
# Self-contained by design: the omni runner must be able to test *any*
|
|
7
|
+
# library, including libraries that provide these same operations.
|
|
8
|
+
|
|
9
|
+
defmodule Voxgig.Omni.Util do
|
|
10
|
+
@moduledoc "JSON value helpers for the omni test runner."
|
|
11
|
+
|
|
12
|
+
# Value is JSON null.
|
|
13
|
+
def nullmark, do: "__NULL__"
|
|
14
|
+
# Value is not present.
|
|
15
|
+
def undefmark, do: "__UNDEF__"
|
|
16
|
+
# Value exists (not undefined).
|
|
17
|
+
def existsmark, do: "__EXISTS__"
|
|
18
|
+
|
|
19
|
+
# Elixir has nil for null, so absence needs its own marker.
|
|
20
|
+
def absent, do: :"$omni_absent"
|
|
21
|
+
|
|
22
|
+
def isabsent(val), do: val == absent()
|
|
23
|
+
|
|
24
|
+
def ismap(val), do: is_map(val) and not is_struct(val)
|
|
25
|
+
|
|
26
|
+
def islist(val), do: is_list(val)
|
|
27
|
+
|
|
28
|
+
def isnode(val), do: ismap(val) or islist(val)
|
|
29
|
+
|
|
30
|
+
# A JSON number? Booleans are not numbers.
|
|
31
|
+
def isnum(val), do: is_number(val) and not is_boolean(val)
|
|
32
|
+
|
|
33
|
+
def isstr(val), do: is_binary(val)
|
|
34
|
+
|
|
35
|
+
def isnone(val), do: is_nil(val) or isabsent(val)
|
|
36
|
+
|
|
37
|
+
@doc "Deep copy a JSON value (Elixir values are immutable)."
|
|
38
|
+
def clone(val), do: val
|
|
39
|
+
|
|
40
|
+
@doc "Read a map entry. Returns the absence marker when missing."
|
|
41
|
+
def get(val, key) do
|
|
42
|
+
if ismap(val) do
|
|
43
|
+
Map.get(val, key, absent())
|
|
44
|
+
else
|
|
45
|
+
absent()
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def has(val, key), do: ismap(val) and Map.has_key?(val, key)
|
|
50
|
+
|
|
51
|
+
@doc "Read a value by path. Returns the absence marker when a step is missing."
|
|
52
|
+
def getpath(val, path) do
|
|
53
|
+
Enum.reduce_while(path, val, fn part, current ->
|
|
54
|
+
cond do
|
|
55
|
+
islist(current) ->
|
|
56
|
+
case Integer.parse(to_string(part)) do
|
|
57
|
+
{index, ""} when index >= 0 ->
|
|
58
|
+
if index < length(current) do
|
|
59
|
+
{:cont, Enum.at(current, index)}
|
|
60
|
+
else
|
|
61
|
+
{:halt, absent()}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
_ ->
|
|
65
|
+
{:halt, absent()}
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
ismap(current) ->
|
|
69
|
+
if Map.has_key?(current, to_string(part)) do
|
|
70
|
+
{:cont, Map.get(current, to_string(part))}
|
|
71
|
+
else
|
|
72
|
+
{:halt, absent()}
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
true ->
|
|
76
|
+
{:halt, absent()}
|
|
77
|
+
end
|
|
78
|
+
end)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
@doc "Depth-first walk: children first, then the containing node."
|
|
82
|
+
def walk(val, apply, path \\ []) do
|
|
83
|
+
next =
|
|
84
|
+
cond do
|
|
85
|
+
islist(val) ->
|
|
86
|
+
val
|
|
87
|
+
|> Enum.with_index()
|
|
88
|
+
|> Enum.map(fn {entry, index} -> walk(entry, apply, path ++ [to_string(index)]) end)
|
|
89
|
+
|
|
90
|
+
ismap(val) ->
|
|
91
|
+
Map.new(val, fn {key, entry} -> {key, walk(entry, apply, path ++ [key])} end)
|
|
92
|
+
|
|
93
|
+
true ->
|
|
94
|
+
val
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
apply.(next, path)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
@doc "Deep structural equality: numbers by value, bools never numbers."
|
|
101
|
+
def deepequal(a, b) do
|
|
102
|
+
cond do
|
|
103
|
+
is_boolean(a) or is_boolean(b) -> a === b
|
|
104
|
+
isnum(a) or isnum(b) -> isnum(a) and isnum(b) and a == b
|
|
105
|
+
isabsent(a) or isabsent(b) -> isabsent(a) and isabsent(b)
|
|
106
|
+
is_nil(a) or is_nil(b) -> is_nil(a) and is_nil(b)
|
|
107
|
+
islist(a) or islist(b) -> equal_lists(a, b)
|
|
108
|
+
ismap(a) or ismap(b) -> equal_maps(a, b)
|
|
109
|
+
true -> a === b
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
defp equal_lists(a, b) do
|
|
114
|
+
islist(a) and islist(b) and length(a) == length(b) and
|
|
115
|
+
Enum.all?(Enum.zip(a, b), fn {x, y} -> deepequal(x, y) end)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
defp equal_maps(a, b) do
|
|
119
|
+
ismap(a) and ismap(b) and map_size(a) == map_size(b) and
|
|
120
|
+
Enum.all?(a, fn {key, entry} ->
|
|
121
|
+
Map.has_key?(b, key) and deepequal(entry, Map.get(b, key))
|
|
122
|
+
end)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
@doc "Render a number the same way in every port: 5.0 prints as 5."
|
|
126
|
+
def numstr(val) do
|
|
127
|
+
asfloat = val / 1
|
|
128
|
+
|
|
129
|
+
cond do
|
|
130
|
+
asfloat == Float.round(asfloat) and abs(asfloat) < 9_007_199_254_740_992.0 ->
|
|
131
|
+
Integer.to_string(trunc(asfloat))
|
|
132
|
+
|
|
133
|
+
true ->
|
|
134
|
+
Float.to_string(asfloat)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
@doc "Render a string as a JSON string literal."
|
|
139
|
+
def quote_str(val) do
|
|
140
|
+
escaped =
|
|
141
|
+
val
|
|
142
|
+
|> String.to_charlist()
|
|
143
|
+
|> Enum.map(fn ch ->
|
|
144
|
+
case ch do
|
|
145
|
+
?" -> "\\\""
|
|
146
|
+
?\\ -> "\\\\"
|
|
147
|
+
?\n -> "\\n"
|
|
148
|
+
?\r -> "\\r"
|
|
149
|
+
?\t -> "\\t"
|
|
150
|
+
other when other < 0x20 -> "\\u" <> String.pad_leading(Integer.to_string(other, 16), 4, "0")
|
|
151
|
+
other -> <<other::utf8>>
|
|
152
|
+
end
|
|
153
|
+
end)
|
|
154
|
+
|> Enum.join()
|
|
155
|
+
|
|
156
|
+
"\"" <> escaped <> "\""
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
@doc "Compact JSON text with map keys sorted, identical in every port."
|
|
160
|
+
def jsonstr(val) do
|
|
161
|
+
cond do
|
|
162
|
+
isabsent(val) -> "undefined"
|
|
163
|
+
is_nil(val) -> "null"
|
|
164
|
+
is_boolean(val) -> if val, do: "true", else: "false"
|
|
165
|
+
isstr(val) -> quote_str(val)
|
|
166
|
+
isnum(val) -> numstr(val)
|
|
167
|
+
islist(val) -> "[" <> Enum.map_join(val, ",", &jsonstr/1) <> "]"
|
|
168
|
+
ismap(val) -> "{" <> map_body(val) <> "}"
|
|
169
|
+
true -> quote_str(inspect(val))
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
defp map_body(val) do
|
|
174
|
+
val
|
|
175
|
+
|> Map.keys()
|
|
176
|
+
|> Enum.sort()
|
|
177
|
+
|> Enum.map_join(",", fn key -> quote_str(to_string(key)) <> ":" <> jsonstr(Map.get(val, key)) end)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
@doc "Strings verbatim, everything else as compact JSON."
|
|
181
|
+
def stringify(val) do
|
|
182
|
+
if isstr(val), do: val, else: jsonstr(val)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
@doc "Render a path as a dotted string."
|
|
186
|
+
def pathify(path), do: Enum.join(path, ".")
|
|
187
|
+
end
|
|
@@ -3,23 +3,30 @@ package core
|
|
|
3
3
|
import (
|
|
4
4
|
"math/rand"
|
|
5
5
|
"strconv"
|
|
6
|
+
"sync"
|
|
6
7
|
|
|
7
8
|
vs "github.com/voxgig/struct"
|
|
8
9
|
)
|
|
9
10
|
|
|
10
11
|
type Context struct {
|
|
11
|
-
Id
|
|
12
|
-
Out
|
|
13
|
-
Ctrl
|
|
14
|
-
Meta
|
|
15
|
-
Client
|
|
16
|
-
Utility
|
|
17
|
-
Op
|
|
18
|
-
Point
|
|
19
|
-
Config
|
|
20
|
-
Entopts
|
|
21
|
-
Options
|
|
22
|
-
Opmap
|
|
12
|
+
Id string
|
|
13
|
+
Out map[string]any
|
|
14
|
+
Ctrl *Control
|
|
15
|
+
Meta map[string]any
|
|
16
|
+
Client *ProjectNameSDK
|
|
17
|
+
Utility *Utility
|
|
18
|
+
Op *Operation
|
|
19
|
+
Point map[string]any
|
|
20
|
+
Config map[string]any
|
|
21
|
+
Entopts map[string]any
|
|
22
|
+
Options map[string]any
|
|
23
|
+
Opmap map[string]*Operation
|
|
24
|
+
// Opmu guards Opmap. The map is a CACHE shared by inheritance across
|
|
25
|
+
// every context derived from the same root (see the Opmap block in
|
|
26
|
+
// NewContext), so two entity operations running on separate
|
|
27
|
+
// goroutines otherwise race resolveOp's read-then-write - the mutex
|
|
28
|
+
// travels WITH the map, inherited from the same base context.
|
|
29
|
+
Opmu *sync.Mutex
|
|
23
30
|
Response *Response
|
|
24
31
|
Result *Result
|
|
25
32
|
Spec *Spec
|
|
@@ -156,10 +163,14 @@ func NewContext(ctxmap map[string]any, basectx *Context) *Context {
|
|
|
156
163
|
}
|
|
157
164
|
if ctx.Opmap == nil && basectx != nil {
|
|
158
165
|
ctx.Opmap = basectx.Opmap
|
|
166
|
+
ctx.Opmu = basectx.Opmu
|
|
159
167
|
}
|
|
160
168
|
if ctx.Opmap == nil {
|
|
161
169
|
ctx.Opmap = map[string]*Operation{}
|
|
162
170
|
}
|
|
171
|
+
if ctx.Opmu == nil {
|
|
172
|
+
ctx.Opmu = &sync.Mutex{}
|
|
173
|
+
}
|
|
163
174
|
|
|
164
175
|
// Data
|
|
165
176
|
ctx.Data = ToMapAny(getCtxProp(ctxmap, "data"))
|
|
@@ -237,7 +248,10 @@ func (ctx *Context) resolveOp(opname string) *Operation {
|
|
|
237
248
|
}
|
|
238
249
|
cacheKey := entname + ":" + opname
|
|
239
250
|
|
|
240
|
-
|
|
251
|
+
ctx.Opmu.Lock()
|
|
252
|
+
cached, cachedok := ctx.Opmap[cacheKey]
|
|
253
|
+
ctx.Opmu.Unlock()
|
|
254
|
+
if op, ok := cached, cachedok; ok && op != nil {
|
|
241
255
|
return op
|
|
242
256
|
}
|
|
243
257
|
|
|
@@ -267,13 +281,15 @@ func (ctx *Context) resolveOp(opname string) *Operation {
|
|
|
267
281
|
}
|
|
268
282
|
|
|
269
283
|
op := NewOperation(map[string]any{
|
|
270
|
-
"entity":
|
|
271
|
-
"name":
|
|
272
|
-
"input":
|
|
284
|
+
"entity": entname,
|
|
285
|
+
"name": opname,
|
|
286
|
+
"input": input,
|
|
273
287
|
"points": targets,
|
|
274
288
|
})
|
|
275
289
|
|
|
290
|
+
ctx.Opmu.Lock()
|
|
276
291
|
ctx.Opmap[cacheKey] = op
|
|
292
|
+
ctx.Opmu.Unlock()
|
|
277
293
|
return op
|
|
278
294
|
}
|
|
279
295
|
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin 0.1.6 (go/plugin/capability.go)
|
|
2
|
+
// Source: https://github.com/voxgig/plugin @ 8d8968afc0a2008fbd795b41ab166307d989f02a [tag: sdk-20260904-1610-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
/* Capabilities (§11.1).
|
|
5
|
+
*
|
|
6
|
+
* A DEPENDENCY IS ON A CAPABILITY, NOT ON A REF — because it is a
|
|
7
|
+
* dependency on something that can do the job, and which instance is
|
|
8
|
+
* doing it is exactly the configuration detail a plugin must not care
|
|
9
|
+
* about.
|
|
10
|
+
*
|
|
11
|
+
* But A BINDING IS TO AN INSTANCE, not to a capability, which is what
|
|
12
|
+
* decides behaviour when the bound provider leaves while another match
|
|
13
|
+
* remains. */
|
|
14
|
+
|
|
15
|
+
package plugin
|
|
16
|
+
|
|
17
|
+
import (
|
|
18
|
+
"sort"
|
|
19
|
+
"strconv"
|
|
20
|
+
"strings"
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
type Provided struct {
|
|
24
|
+
Name string `json:"name"`
|
|
25
|
+
Version string `json:"version,omitempty"`
|
|
26
|
+
Priority *int `json:"priority,omitempty"`
|
|
27
|
+
Attrs map[string]any `json:"attrs,omitempty"`
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type Required struct {
|
|
31
|
+
Name string `json:"name"`
|
|
32
|
+
Range string `json:"range,omitempty"`
|
|
33
|
+
Match map[string]any `json:"match,omitempty"`
|
|
34
|
+
Optional bool `json:"optional,omitempty"`
|
|
35
|
+
// Policy is §11.3: `static` restarts the consumer when its SELECTED
|
|
36
|
+
// provider leaves, even though another still matches; `dynamic` says
|
|
37
|
+
// in writing that it can survive the swap. Static is the default
|
|
38
|
+
// because most plugins cannot, and the cost of wrongly assuming they
|
|
39
|
+
// can is a live instance holding a dead reference.
|
|
40
|
+
Policy string `json:"policy,omitempty"`
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
type Candidate struct {
|
|
44
|
+
Ref string `json:"ref"`
|
|
45
|
+
Pos int `json:"pos"`
|
|
46
|
+
Provides Provided `json:"provides"`
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ResolveCapability ranks the matching live providers and returns them
|
|
50
|
+
// best-first: highest `version`, then LOWEST `priority` (default 0),
|
|
51
|
+
// then declaration position `pos` ascending.
|
|
52
|
+
//
|
|
53
|
+
// `priority` is a field on the capability rather than §7's `order` band,
|
|
54
|
+
// because bands live on POINT BINDINGS: a provider may have several
|
|
55
|
+
// bindings with different bands, or none at all, so a rank reaching for
|
|
56
|
+
// one would be undefined in the common case.
|
|
57
|
+
//
|
|
58
|
+
// Without a total rank, "any provider satisfies" is true of the GRAPH
|
|
59
|
+
// and useless to the PLUGIN — two ports could bind different `store`
|
|
60
|
+
// instances, both resolve green, and behave differently, which is
|
|
61
|
+
// precisely the divergence a shared corpus exists to catch.
|
|
62
|
+
func ResolveCapability(req Required, candidates []Candidate) []Candidate {
|
|
63
|
+
hits := []Candidate{}
|
|
64
|
+
for _, c := range candidates {
|
|
65
|
+
if Matches(req, c.Provides) {
|
|
66
|
+
hits = append(hits, c)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// SortStable, because the canonical's comparator falls through to
|
|
70
|
+
// `pos` and JavaScript's sort is stable — a Go quicksort would
|
|
71
|
+
// reorder equal-`pos` candidates and diverge on nothing the corpus
|
|
72
|
+
// could name.
|
|
73
|
+
sort.SliceStable(hits, func(i, j int) bool {
|
|
74
|
+
a, b := hits[i], hits[j]
|
|
75
|
+
av, bv := a.Provides.Version, b.Provides.Version
|
|
76
|
+
if av != bv {
|
|
77
|
+
// An ABSENT version sorts last, whatever the other is: the
|
|
78
|
+
// canonical returns 1 for an absent `a` before it ever
|
|
79
|
+
// compares, so "no version" loses to every version rather
|
|
80
|
+
// than being read as 0.0.0.
|
|
81
|
+
if "" == av {
|
|
82
|
+
return false
|
|
83
|
+
}
|
|
84
|
+
if "" == bv {
|
|
85
|
+
return true
|
|
86
|
+
}
|
|
87
|
+
if c := compareversion(bv, av); 0 != c { // highest version FIRST
|
|
88
|
+
return 0 > c
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
ap, bp := priorityof(a.Provides), priorityof(b.Provides)
|
|
92
|
+
if ap != bp {
|
|
93
|
+
return ap < bp // lowest priority first
|
|
94
|
+
}
|
|
95
|
+
return a.Pos < b.Pos
|
|
96
|
+
})
|
|
97
|
+
return hits
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
func priorityof(p Provided) int {
|
|
101
|
+
if nil == p.Priority {
|
|
102
|
+
return 0
|
|
103
|
+
}
|
|
104
|
+
return *p.Priority
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
func Matches(req Required, prov Provided) bool {
|
|
108
|
+
if req.Name != prov.Name {
|
|
109
|
+
return false
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if "" != req.Range {
|
|
113
|
+
if "" == prov.Version {
|
|
114
|
+
return false
|
|
115
|
+
}
|
|
116
|
+
if !satisfiesq(prov.Version, req.Range) {
|
|
117
|
+
return false
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// `match` is checked against the provider's `attrs`, key by key. A
|
|
122
|
+
// key the provider does not carry is a miss, not a pass: a
|
|
123
|
+
// requirement asking for `transactional: true` must not be satisfied
|
|
124
|
+
// by a provider that never said.
|
|
125
|
+
if nil != req.Match {
|
|
126
|
+
attrs := prov.Attrs
|
|
127
|
+
if nil == attrs {
|
|
128
|
+
attrs = map[string]any{}
|
|
129
|
+
}
|
|
130
|
+
for k, want := range req.Match {
|
|
131
|
+
got, ok := attrs[k]
|
|
132
|
+
if !ok || !matchvalue(want, got) {
|
|
133
|
+
return false
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return true
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
func compareversion(a string, b string) int {
|
|
142
|
+
pa, pb := parts(a), parts(b)
|
|
143
|
+
for i := 0; i < 3; i++ {
|
|
144
|
+
x, y := at(pa, i), at(pb, i)
|
|
145
|
+
if x != y {
|
|
146
|
+
if x < y {
|
|
147
|
+
return -1
|
|
148
|
+
}
|
|
149
|
+
return 1
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return 0
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
func parts(v string) []int {
|
|
156
|
+
out := []int{}
|
|
157
|
+
for _, s := range strings.Split(v, ".") {
|
|
158
|
+
n, err := strconv.Atoi(s)
|
|
159
|
+
if nil != err {
|
|
160
|
+
n = 0
|
|
161
|
+
}
|
|
162
|
+
out = append(out, n)
|
|
163
|
+
}
|
|
164
|
+
return out
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* PARTIAL MATCH, RECURSING INTO MAPS (§11.1).
|
|
168
|
+
*
|
|
169
|
+
* §11.1 says `match` is "a partial match against `attrs`, with exactly
|
|
170
|
+
* the semantics voxgig/struct and the omni corpus already define for
|
|
171
|
+
* `match` — every leaf in the requirement must be present and equal in
|
|
172
|
+
* the capability, keys not mentioned are not checked."
|
|
173
|
+
*
|
|
174
|
+
* THE CANONICAL DID NOT IMPLEMENT THAT. It compared `attrs[k] !==
|
|
175
|
+
* req.match[k]`, which for any compound value is JavaScript reference
|
|
176
|
+
* identity: a requirement and a capability are declared in different
|
|
177
|
+
* places and are never the same object, so `match: {limits: {max: 5}}`
|
|
178
|
+
* could not be satisfied by ANY provider, including one declaring
|
|
179
|
+
* exactly that. The flat reading is invisible while every corpus entry
|
|
180
|
+
* is scalar, which is why P4 found it and P2 did not.
|
|
181
|
+
*
|
|
182
|
+
* Fixed in the canonical (AGENTS.md: change canonical first), pinned by
|
|
183
|
+
* `capability/nested`, and ported here. */
|
|
184
|
+
func matchvalue(want any, got any) bool {
|
|
185
|
+
switch w := want.(type) {
|
|
186
|
+
|
|
187
|
+
case map[string]any:
|
|
188
|
+
g, ok := got.(map[string]any)
|
|
189
|
+
if !ok {
|
|
190
|
+
return false
|
|
191
|
+
}
|
|
192
|
+
for k, wv := range w {
|
|
193
|
+
gv, present := g[k]
|
|
194
|
+
if !present || !matchvalue(wv, gv) {
|
|
195
|
+
return false
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return true
|
|
199
|
+
|
|
200
|
+
case []any:
|
|
201
|
+
g, ok := got.([]any)
|
|
202
|
+
if !ok || len(g) != len(w) {
|
|
203
|
+
return false
|
|
204
|
+
}
|
|
205
|
+
for i := range w {
|
|
206
|
+
if !matchvalue(w[i], g[i]) {
|
|
207
|
+
return false
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return true
|
|
211
|
+
|
|
212
|
+
default:
|
|
213
|
+
// GO HAS MANY NUMBER TYPES AND THE MODEL HAS ONE. Corpus JSON
|
|
214
|
+
// decodes every number as float64, but a Go host declaring
|
|
215
|
+
// `Attrs: map[string]any{"max": 5}` writes an int, and `any(5)
|
|
216
|
+
// == any(5.0)` is false — so an attribute that matched in every
|
|
217
|
+
// other port silently missed here. Canonical is type-strict
|
|
218
|
+
// between KINDS (`true` never matches `1`), not between Go's
|
|
219
|
+
// spellings of one kind.
|
|
220
|
+
if wn, wok := numval(want); wok {
|
|
221
|
+
if gn, gok := numval(got); gok {
|
|
222
|
+
return wn == gn
|
|
223
|
+
}
|
|
224
|
+
return false
|
|
225
|
+
}
|
|
226
|
+
return want == got
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// numval reports a value's numeric value, and whether it had one. `bool`
|
|
231
|
+
// is deliberately absent: Go does not make it numeric and neither does
|
|
232
|
+
// the model.
|
|
233
|
+
func numval(v any) (float64, bool) {
|
|
234
|
+
switch n := v.(type) {
|
|
235
|
+
case int:
|
|
236
|
+
return float64(n), true
|
|
237
|
+
case int8:
|
|
238
|
+
return float64(n), true
|
|
239
|
+
case int16:
|
|
240
|
+
return float64(n), true
|
|
241
|
+
case int32:
|
|
242
|
+
return float64(n), true
|
|
243
|
+
case int64:
|
|
244
|
+
return float64(n), true
|
|
245
|
+
case uint:
|
|
246
|
+
return float64(n), true
|
|
247
|
+
case uint8:
|
|
248
|
+
return float64(n), true
|
|
249
|
+
case uint16:
|
|
250
|
+
return float64(n), true
|
|
251
|
+
case uint32:
|
|
252
|
+
return float64(n), true
|
|
253
|
+
case uint64:
|
|
254
|
+
return float64(n), true
|
|
255
|
+
case float32:
|
|
256
|
+
return float64(n), true
|
|
257
|
+
case float64:
|
|
258
|
+
return n, true
|
|
259
|
+
}
|
|
260
|
+
return 0, false
|
|
261
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// VENDORED: @voxgig/plugin 0.1.6 (go/plugin/catalog.go)
|
|
2
|
+
// Source: https://github.com/voxgig/plugin @ 8d8968afc0a2008fbd795b41ab166307d989f02a [tag: sdk-20260904-1610-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
/* The definition catalog (§10.1).
|
|
5
|
+
*
|
|
6
|
+
* A definition is registered once and may back many instances. Option
|
|
7
|
+
* shapes are validated AT REGISTRATION, not when a document happens to
|
|
8
|
+
* exercise a key — so a malformed shape fails once, and in the same
|
|
9
|
+
* place everywhere (§9.4). */
|
|
10
|
+
|
|
11
|
+
package plugin
|
|
12
|
+
|
|
13
|
+
// Definition is what a plugin author writes.
|
|
14
|
+
//
|
|
15
|
+
// GO RETURNS ERRORS FROM LIFECYCLE CALLBACKS (§18, P4). The canonical
|
|
16
|
+
// throws; a Go callback returns `error`, and the host treats a non-nil
|
|
17
|
+
// return exactly as the canonical treats a throw — including
|
|
18
|
+
// `plugin_activate_failed`'s unwind and the `failed` status.
|
|
19
|
+
type Definition struct {
|
|
20
|
+
Name string
|
|
21
|
+
Shape any
|
|
22
|
+
Define func(inst *Inst) error
|
|
23
|
+
Activate func(inst *Inst) error
|
|
24
|
+
Deactivate func(inst *Inst) error
|
|
25
|
+
Close func(inst *Inst) error
|
|
26
|
+
Reconfigure func(inst *Inst, options map[string]any, previous map[string]any) error
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type Catalog struct {
|
|
30
|
+
defs map[string]Definition
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// MakeCatalog builds a catalog, adding each definition in turn.
|
|
34
|
+
//
|
|
35
|
+
// GO IS TIER S (§10.3): "package `init()` registration ... or an
|
|
36
|
+
// explicit list handed to makeHost", and both spellings land here. A Go
|
|
37
|
+
// developer's experience is "add the import, add one line to the config"
|
|
38
|
+
// rather than "write a factory".
|
|
39
|
+
func MakeCatalog(defs ...Definition) (*Catalog, error) {
|
|
40
|
+
c := &Catalog{defs: map[string]Definition{}}
|
|
41
|
+
for _, d := range defs {
|
|
42
|
+
if err := c.Add(d); nil != err {
|
|
43
|
+
return nil, err
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return c, nil
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
func (c *Catalog) Add(def Definition) error {
|
|
50
|
+
if !CheckName(def.Name) {
|
|
51
|
+
return Fail("plugin_definition_name", "invalid definition name: "+def.Name, nil)
|
|
52
|
+
}
|
|
53
|
+
// Validate the shape HERE. Deferring it to resolution time means a
|
|
54
|
+
// malformed shape surfaces at a different moment in every host that
|
|
55
|
+
// loads it, which is the divergence the stated domain exists to
|
|
56
|
+
// prevent.
|
|
57
|
+
if nil != def.Shape {
|
|
58
|
+
if err := CheckShape(def.Shape); nil != err {
|
|
59
|
+
return err
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
c.defs[def.Name] = def
|
|
63
|
+
return nil
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
func (c *Catalog) Get(name string) (Definition, bool) {
|
|
67
|
+
d, ok := c.defs[name]
|
|
68
|
+
return d, ok
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
func (c *Catalog) Has(name string) bool {
|
|
72
|
+
_, ok := c.defs[name]
|
|
73
|
+
return ok
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
func (c *Catalog) Names() []string {
|
|
77
|
+
return sortedkeys(c.defs)
|
|
78
|
+
}
|