@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,491 @@
|
|
|
1
|
+
// The corpus test runner: vendored @voxgig/omni driven through its NATIVE
|
|
2
|
+
// API (Voxgig.Omni.Runner.MakeRunner(specref, provider)), presented to the
|
|
3
|
+
// corpus tests in the struct-runner shape they already use (run.Spec,
|
|
4
|
+
// run.RunSet, run.RunSetFlags, run.Client). No compat shim is vendored:
|
|
5
|
+
// the adapter below IS the whole bridge, per language, per the vendor-tag
|
|
6
|
+
// rollout (docs/design/vendor-tag-rollout.md, Decision 4). It supersedes
|
|
7
|
+
// the engine half of Runner.cs (TestRunner.RunSet/MatchDeep/MatchString)
|
|
8
|
+
// and the whole StructRunner engine (support lives on in Runner.cs).
|
|
9
|
+
//
|
|
10
|
+
// C#-specific decisions, each load-bearing:
|
|
11
|
+
//
|
|
12
|
+
// 1. CONTEXTS STAY MAPS ACROSS THE RUNNER. omni sets `entry.ctx` to the
|
|
13
|
+
// contextified args[0] and `match: {ctx: ...}` assertions read THROUGH
|
|
14
|
+
// it with omni's own GetPath, which walks JSON maps only. A typed
|
|
15
|
+
// Context there would make every ctx assertion read "absent". So the
|
|
16
|
+
// subjects receive the MAP, build the typed Context with
|
|
17
|
+
// OmniResolver.OmniCtx(args[0], ...) at the call site, run the
|
|
18
|
+
// utility, and write the observable ctx state back into the same map
|
|
19
|
+
// with OmniSyncCtx - which is what makes the live SDK reachable
|
|
20
|
+
// through ctx.Client for the generated utilities (the ts resolver
|
|
21
|
+
// gets both for free from prototype delegation; maps-plus-sync is the
|
|
22
|
+
// same idiom the go and java resolvers use for the same contract,
|
|
23
|
+
// omni#56).
|
|
24
|
+
//
|
|
25
|
+
// 2. ZERO-ARGUMENT ENTRIES. The corpus carries entries with no `in`,
|
|
26
|
+
// `args` or `ctx`, meaning "call the subject with NO argument". The
|
|
27
|
+
// vendored C# port already distinguishes that case natively - such an
|
|
28
|
+
// entry arrives as one `Absent.Mark` argument (C# has no `undefined`,
|
|
29
|
+
// so absence is a sentinel) - which is why C# needs no novalargs spec
|
|
30
|
+
// rewrite (go) and no compat shim (lua/php). The resolver's ONE
|
|
31
|
+
// conversion is the sentinel swap at the call boundary: Absent.Mark ->
|
|
32
|
+
// StructUtils.NONE on the way in (a whole argument only - a parsed
|
|
33
|
+
// corpus value never contains one), NONE -> Absent.Mark on the way
|
|
34
|
+
// out, walked, because a reader can leave NONE inside a partially
|
|
35
|
+
// resolved node. Ported from omni's own csharp/compat/Struct.cs
|
|
36
|
+
// (register 4.12), which this resolver replaces.
|
|
37
|
+
//
|
|
38
|
+
// 3. NUMBERS. omni's Util.Parse reads every JSON number as `double`;
|
|
39
|
+
// the struct port's own loader gave `long` for anything integral, and
|
|
40
|
+
// the library branches on that (`Typify` answers Integer or Decimal by
|
|
41
|
+
// it). So the resolved spec is normalised ONCE, integral double ->
|
|
42
|
+
// long, before any subject sees it (FixNums, the go resolver's
|
|
43
|
+
// fixnums). Nothing is needed on the way out: omni's DeepEqual already
|
|
44
|
+
// compares long against double numerically.
|
|
45
|
+
//
|
|
46
|
+
// 4. THE VENDORED C# PORT LACKS THE omni#54 JsonStr CYCLE GUARD the
|
|
47
|
+
// TypeScript port has at this tag (voxgig/omni#64 landed the runner
|
|
48
|
+
// fixes for js/go/py only). It only bites on CYCLIC values, and the
|
|
49
|
+
// port's Clone/FixJson/JsonStr pass non-JSON values (a typed Context,
|
|
50
|
+
// an SDK client) through without walking them - so decision 1 above
|
|
51
|
+
// (JSON-only maps in entries, typed state kept out of them) is also
|
|
52
|
+
// what keeps every value the runner clones or stringifies acyclic.
|
|
53
|
+
// The match-clone half is absent by construction (this port never
|
|
54
|
+
// cloned its match base), and the errify half (non-Error throwables)
|
|
55
|
+
// cannot arise: C# subjects fail by THROWING an Exception, and the
|
|
56
|
+
// Errify hook below keeps the SDK error's code for
|
|
57
|
+
// `match: {err: {code: ...}}` assertions.
|
|
58
|
+
|
|
59
|
+
using System.Globalization;
|
|
60
|
+
using System.Runtime.CompilerServices;
|
|
61
|
+
|
|
62
|
+
using Voxgig.Omni;
|
|
63
|
+
using Voxgig.Struct;
|
|
64
|
+
|
|
65
|
+
// `Util` alone would resolve to the SDK's ProjectNameSdk.Util namespace,
|
|
66
|
+
// not the vendored omni Util class - alias it explicitly.
|
|
67
|
+
using OmniUtil = Voxgig.Omni.Util;
|
|
68
|
+
|
|
69
|
+
using ProjectNameSdk;
|
|
70
|
+
|
|
71
|
+
namespace ProjectNameSdk.Test;
|
|
72
|
+
|
|
73
|
+
public static class OmniResolver
|
|
74
|
+
{
|
|
75
|
+
// The sentinels, under the names the corpus tests already use.
|
|
76
|
+
public const string NULLMARK = Runner.NULLMARK;
|
|
77
|
+
public const string UNDEFMARK = Runner.UNDEFMARK;
|
|
78
|
+
public const string EXISTSMARK = Runner.EXISTSMARK;
|
|
79
|
+
|
|
80
|
+
/// <summary>The function under test, in omni's native argument shape.</summary>
|
|
81
|
+
public delegate object? Subject(params object?[] args);
|
|
82
|
+
|
|
83
|
+
/// <summary>Resolves one named section of the spec.</summary>
|
|
84
|
+
public delegate Run NamedRunner(string name, object? store = null);
|
|
85
|
+
|
|
86
|
+
private static string SourceDir([CallerFilePath] string path = "")
|
|
87
|
+
=> Path.GetDirectoryName(path)!;
|
|
88
|
+
|
|
89
|
+
/// <summary>
|
|
90
|
+
/// The struct runner's makeRunner(testfile, client) signature, backed
|
|
91
|
+
/// by vendored omni. `testfile` is a spec path (a relative path is
|
|
92
|
+
/// absolutized against THIS file's directory, not the process working
|
|
93
|
+
/// directory - dotnet test runs from bin/ - and omni's docs say a port
|
|
94
|
+
/// must resolve the path itself) or an already-parsed spec value
|
|
95
|
+
/// (omni's own capability), which keeps smoke tests free of fixture
|
|
96
|
+
/// files.
|
|
97
|
+
/// </summary>
|
|
98
|
+
public static NamedRunner MakeRunner(object testfile, object? client)
|
|
99
|
+
{
|
|
100
|
+
var provider = SdkProvider(client);
|
|
101
|
+
|
|
102
|
+
RunnerPack runner;
|
|
103
|
+
if (testfile is string path)
|
|
104
|
+
{
|
|
105
|
+
if (!Path.IsPathRooted(path))
|
|
106
|
+
{
|
|
107
|
+
path = Path.GetFullPath(Path.Combine(SourceDir(), path));
|
|
108
|
+
}
|
|
109
|
+
runner = Runner.MakeRunner(path, provider);
|
|
110
|
+
}
|
|
111
|
+
else
|
|
112
|
+
{
|
|
113
|
+
runner = Runner.MakeRunner(testfile, provider);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return (name, store) => new Run(runner.Run(name, store), client);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/// <summary>
|
|
120
|
+
/// What the runner returns for one named spec section - the
|
|
121
|
+
/// struct-runner shape the corpus call sites consume. A failing entry
|
|
122
|
+
/// throws <see cref="OmniError"/>, which fails the xUnit test with the
|
|
123
|
+
/// entry named.
|
|
124
|
+
/// </summary>
|
|
125
|
+
public sealed class Run
|
|
126
|
+
{
|
|
127
|
+
/// <summary>The resolved spec section (numbers normalised, decision 3).</summary>
|
|
128
|
+
public Dictionary<string, object?> Spec { get; }
|
|
129
|
+
|
|
130
|
+
/// <summary>
|
|
131
|
+
/// The SDK this runner was built with. omni's own RunPack carries
|
|
132
|
+
/// the PROVIDER in that slot, which has none of the SDK's members,
|
|
133
|
+
/// so the client is handed back instead (omni#56).
|
|
134
|
+
/// </summary>
|
|
135
|
+
public object? Client { get; }
|
|
136
|
+
|
|
137
|
+
private readonly RunPack pack;
|
|
138
|
+
|
|
139
|
+
internal Run(RunPack pack, object? client)
|
|
140
|
+
{
|
|
141
|
+
this.pack = pack;
|
|
142
|
+
Client = client;
|
|
143
|
+
Spec = FixNums(pack.Spec) as Dictionary<string, object?>
|
|
144
|
+
?? new Dictionary<string, object?>();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/// <summary>A named group of the resolved spec.</summary>
|
|
148
|
+
public object? Set(string setname)
|
|
149
|
+
=> Spec.TryGetValue(setname, out var v) ? v : null;
|
|
150
|
+
|
|
151
|
+
/// <summary>Run one set of test entries with omni's default flags.</summary>
|
|
152
|
+
public void RunSet(object? testspec, Subject? subject = null)
|
|
153
|
+
{
|
|
154
|
+
RunSetFlags(testspec, null, subject);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/// <summary>Run one set of test entries with explicit flags.</summary>
|
|
158
|
+
public void RunSetFlags(object? testspec, Dictionary<string, bool>? flags,
|
|
159
|
+
Subject? subject = null)
|
|
160
|
+
{
|
|
161
|
+
Voxgig.Omni.Subject? wrapped = null;
|
|
162
|
+
if (null != subject)
|
|
163
|
+
{
|
|
164
|
+
wrapped = args =>
|
|
165
|
+
{
|
|
166
|
+
var sargs = new object?[args?.Length ?? 0];
|
|
167
|
+
for (var i = 0; i < sargs.Length; i++)
|
|
168
|
+
{
|
|
169
|
+
// The sentinel swap at the call boundary (decision 2).
|
|
170
|
+
sargs[i] = OmniUtil.IsAbsent(args![i]) ? StructUtils.NONE : args[i];
|
|
171
|
+
}
|
|
172
|
+
return ToOmni(subject(sargs));
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
var omniflags = new Flags();
|
|
177
|
+
if (null != flags && flags.TryGetValue("null", out var donull))
|
|
178
|
+
{
|
|
179
|
+
omniflags.Null = donull;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
pack.RunSetFlags(testspec, omniflags, wrapped);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// ------------------------------------------------------------------
|
|
187
|
+
// The two value models (decisions 2 and 3)
|
|
188
|
+
// ------------------------------------------------------------------
|
|
189
|
+
|
|
190
|
+
/// <summary>
|
|
191
|
+
/// This port's model -> omni's. Walked, because NONE CAN sit inside a
|
|
192
|
+
/// result - a reader leaves it in a partially resolved node - and ANY
|
|
193
|
+
/// list becomes a List<object?>: KeysOf returns a List<string>,
|
|
194
|
+
/// which omni's IsList does not recognise. (Subject ARGUMENTS are never
|
|
195
|
+
/// walked: containers must cross by identity so `match.args` sees
|
|
196
|
+
/// in-place mutation, e.g. setpath.)
|
|
197
|
+
/// </summary>
|
|
198
|
+
internal static object? ToOmni(object? val)
|
|
199
|
+
{
|
|
200
|
+
if (ReferenceEquals(val, StructUtils.NONE))
|
|
201
|
+
{
|
|
202
|
+
return Absent.Mark;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (null == val || val is string || val is bool || OmniUtil.IsNum(val))
|
|
206
|
+
{
|
|
207
|
+
return val;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (val is IDictionary<string, object?> map)
|
|
211
|
+
{
|
|
212
|
+
var outmap = new Dictionary<string, object?>(map.Count);
|
|
213
|
+
foreach (var pair in map)
|
|
214
|
+
{
|
|
215
|
+
outmap[pair.Key] = ToOmni(pair.Value);
|
|
216
|
+
}
|
|
217
|
+
return outmap;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Every list shape, not just IList<object?>. A non-generic IList
|
|
221
|
+
// covers List<string>, List<List<object?>> and the rest.
|
|
222
|
+
if (val is System.Collections.IList list)
|
|
223
|
+
{
|
|
224
|
+
var outlist = new List<object?>(list.Count);
|
|
225
|
+
for (var index = 0; index < list.Count; index++)
|
|
226
|
+
{
|
|
227
|
+
outlist.Add(ToOmni(list[index]));
|
|
228
|
+
}
|
|
229
|
+
return outlist;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// A non-generic dictionary (rare, but the generic pattern does not
|
|
233
|
+
// catch every shape a port might hand back).
|
|
234
|
+
if (val is System.Collections.IDictionary raw)
|
|
235
|
+
{
|
|
236
|
+
var outmap = new Dictionary<string, object?>();
|
|
237
|
+
foreach (System.Collections.DictionaryEntry entry in raw)
|
|
238
|
+
{
|
|
239
|
+
outmap[Convert.ToString(entry.Key, CultureInfo.InvariantCulture) ?? ""] =
|
|
240
|
+
ToOmni(entry.Value);
|
|
241
|
+
}
|
|
242
|
+
return outmap;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return val;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/// <summary>
|
|
249
|
+
/// omni's number model -> this port's: an integral JSON double becomes
|
|
250
|
+
/// the long the struct port's own loader produced (decision 3). Walked
|
|
251
|
+
/// copies; applied once to the resolved spec.
|
|
252
|
+
/// </summary>
|
|
253
|
+
internal static object? FixNums(object? val)
|
|
254
|
+
{
|
|
255
|
+
switch (val)
|
|
256
|
+
{
|
|
257
|
+
case double number:
|
|
258
|
+
if (!double.IsNaN(number) && !double.IsInfinity(number) &&
|
|
259
|
+
Math.Floor(number) == number &&
|
|
260
|
+
number >= -9.2233720368547758E18 && number <= 9.2233720368547758E18)
|
|
261
|
+
{
|
|
262
|
+
return (long)number;
|
|
263
|
+
}
|
|
264
|
+
return val;
|
|
265
|
+
|
|
266
|
+
case IDictionary<string, object?> map:
|
|
267
|
+
{
|
|
268
|
+
var outmap = new Dictionary<string, object?>(map.Count);
|
|
269
|
+
foreach (var pair in map)
|
|
270
|
+
{
|
|
271
|
+
outmap[pair.Key] = FixNums(pair.Value);
|
|
272
|
+
}
|
|
273
|
+
return outmap;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
case IList<object?> list:
|
|
277
|
+
{
|
|
278
|
+
var outlist = new List<object?>(list.Count);
|
|
279
|
+
foreach (var entry in list)
|
|
280
|
+
{
|
|
281
|
+
outlist.Add(FixNums(entry));
|
|
282
|
+
}
|
|
283
|
+
return outlist;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
default:
|
|
287
|
+
return val;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// ------------------------------------------------------------------
|
|
292
|
+
// Provider bookkeeping
|
|
293
|
+
// ------------------------------------------------------------------
|
|
294
|
+
|
|
295
|
+
// DefProviders marks the providers a spec's DEF.client block built -
|
|
296
|
+
// the only ones OmniCtx lets override a call site's explicit client
|
|
297
|
+
// (the base provider rides on EVERY ctx entry, and letting it win
|
|
298
|
+
// would defeat sections that deliberately construct a
|
|
299
|
+
// differently-optioned client). Guarded: xUnit may run tests
|
|
300
|
+
// concurrently.
|
|
301
|
+
private static readonly object ProviderLock = new();
|
|
302
|
+
private static readonly Dictionary<Provider, object?> ProviderClients = new();
|
|
303
|
+
private static readonly HashSet<Provider> DefProviders = new();
|
|
304
|
+
|
|
305
|
+
private static void RegisterProvider(Provider provider, object? client)
|
|
306
|
+
{
|
|
307
|
+
lock (ProviderLock)
|
|
308
|
+
{
|
|
309
|
+
ProviderClients[provider] = client;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
private static void MarkDefProvider(Provider provider)
|
|
314
|
+
{
|
|
315
|
+
lock (ProviderLock)
|
|
316
|
+
{
|
|
317
|
+
DefProviders.Add(provider);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
private static object? DefProviderClient(Provider provider)
|
|
322
|
+
{
|
|
323
|
+
lock (ProviderLock)
|
|
324
|
+
{
|
|
325
|
+
return DefProviders.Contains(provider) &&
|
|
326
|
+
ProviderClients.TryGetValue(provider, out var client) ? client : null;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Wrap a live client as an omni provider. No subject-by-name hook: the
|
|
331
|
+
// C# Utility members are TYPED delegates (a Func taking a Context), so
|
|
332
|
+
// a generic name lookup cannot produce omni's (object[]) subject
|
|
333
|
+
// without a per-name adapter - and every generated call site passes
|
|
334
|
+
// its subject explicitly. DEF.client entries still resolve: the Client
|
|
335
|
+
// hook builds another live test SDK.
|
|
336
|
+
private static Provider SdkProvider(object? client)
|
|
337
|
+
{
|
|
338
|
+
var provider = new Provider
|
|
339
|
+
{
|
|
340
|
+
// A DEF.client entry becomes another live test SDK, wrapped
|
|
341
|
+
// the same way and marked as DEF-built so OmniCtx resolves it
|
|
342
|
+
// back. The options arrive from omni's raw parse: normalise
|
|
343
|
+
// the numbers before the SDK sees them (decision 3).
|
|
344
|
+
Client = options =>
|
|
345
|
+
{
|
|
346
|
+
var opts = FixNums(options) as Dictionary<string, object?>
|
|
347
|
+
?? new Dictionary<string, object?>();
|
|
348
|
+
var sub = SdkProvider(ProjectNameSDK.TestSDK(null, opts));
|
|
349
|
+
MarkDefProvider(sub);
|
|
350
|
+
return sub;
|
|
351
|
+
},
|
|
352
|
+
|
|
353
|
+
// Client options may reference the runner store.
|
|
354
|
+
Inject = (options, store) => StructUtils.Inject(options, store),
|
|
355
|
+
|
|
356
|
+
// Keep the SDK error's code beside its message, so a corpus
|
|
357
|
+
// `match: {err: {code: ...}}` can assert on it - the C#
|
|
358
|
+
// analogue of the omni#54 errify fix (decision 4).
|
|
359
|
+
Errify = err =>
|
|
360
|
+
{
|
|
361
|
+
if (err is ProjectNameError sdkerr)
|
|
362
|
+
{
|
|
363
|
+
var outmap = new Dictionary<string, object?>
|
|
364
|
+
{
|
|
365
|
+
["name"] = "ProjectNameError",
|
|
366
|
+
["message"] = sdkerr.Message,
|
|
367
|
+
};
|
|
368
|
+
if (!string.IsNullOrEmpty(sdkerr.Code))
|
|
369
|
+
{
|
|
370
|
+
outmap["code"] = sdkerr.Code;
|
|
371
|
+
}
|
|
372
|
+
return outmap;
|
|
373
|
+
}
|
|
374
|
+
return Runner.Errify(err);
|
|
375
|
+
},
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
RegisterProvider(provider, client);
|
|
379
|
+
|
|
380
|
+
return provider;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// ------------------------------------------------------------------
|
|
384
|
+
// Typed-context bridging (decision 1)
|
|
385
|
+
// ------------------------------------------------------------------
|
|
386
|
+
|
|
387
|
+
/// <summary>
|
|
388
|
+
/// Build the typed Context a generated utility takes from the ctx MAP
|
|
389
|
+
/// omni handed the subject (args[0]). The map's `client` entry - an
|
|
390
|
+
/// omni provider when a DEF entry selected one - resolves back to the
|
|
391
|
+
/// live SDK it wraps; otherwise the given client is used. (The engine
|
|
392
|
+
/// half of the retired TestRunner.RunSet call sites did this as
|
|
393
|
+
/// MakeCtxFromMap + FixCtx, per section, by hand.)
|
|
394
|
+
/// </summary>
|
|
395
|
+
public static Context OmniCtx(object? arg, ProjectNameSDK client, Utility utility)
|
|
396
|
+
{
|
|
397
|
+
var ctxmap = arg as Dictionary<string, object?>
|
|
398
|
+
?? new Dictionary<string, object?>();
|
|
399
|
+
|
|
400
|
+
// Only a DEF-built client overrides the caller's: the base
|
|
401
|
+
// provider is on every ctx entry, and a call site that constructed
|
|
402
|
+
// a special client (a DEF.setup options set) must keep it.
|
|
403
|
+
if (ctxmap.TryGetValue("client", out var p) && p is Provider prov &&
|
|
404
|
+
DefProviderClient(prov) is ProjectNameSDK live)
|
|
405
|
+
{
|
|
406
|
+
client = live;
|
|
407
|
+
utility = live.GetUtility();
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
var ctx = TestRunner.MakeCtxFromMap(ctxmap, client, utility);
|
|
411
|
+
TestRunner.FixCtx(ctx, client);
|
|
412
|
+
return ctx;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/// <summary>
|
|
416
|
+
/// Write the OBSERVABLE state of a typed context back into the ctx map
|
|
417
|
+
/// the entry holds, which is where a `match: {ctx: ...}` assertion
|
|
418
|
+
/// reads. The subject mutated the typed context; the map is what the
|
|
419
|
+
/// runner can walk. (The retired engine call sites did this per
|
|
420
|
+
/// section, by hand, as "update entry ctx for match".)
|
|
421
|
+
/// </summary>
|
|
422
|
+
public static void OmniSyncCtx(object? arg, Context? ctx)
|
|
423
|
+
{
|
|
424
|
+
if (arg is not Dictionary<string, object?> ctxmap || null == ctx)
|
|
425
|
+
{
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
if (null != ctx.Spec)
|
|
430
|
+
{
|
|
431
|
+
var spec = new Dictionary<string, object?>
|
|
432
|
+
{
|
|
433
|
+
["base"] = ctx.Spec.Base,
|
|
434
|
+
["prefix"] = ctx.Spec.Prefix,
|
|
435
|
+
["suffix"] = ctx.Spec.Suffix,
|
|
436
|
+
["path"] = ctx.Spec.Path,
|
|
437
|
+
["method"] = ctx.Spec.Method,
|
|
438
|
+
["params"] = ctx.Spec.Params,
|
|
439
|
+
["query"] = ctx.Spec.Query,
|
|
440
|
+
["headers"] = ctx.Spec.Headers,
|
|
441
|
+
["step"] = ctx.Spec.Step,
|
|
442
|
+
["alias"] = ctx.Spec.Alias,
|
|
443
|
+
};
|
|
444
|
+
if (null != ctx.Spec.Body)
|
|
445
|
+
{
|
|
446
|
+
spec["body"] = ctx.Spec.Body;
|
|
447
|
+
}
|
|
448
|
+
if (!string.IsNullOrEmpty(ctx.Spec.Url))
|
|
449
|
+
{
|
|
450
|
+
spec["url"] = ctx.Spec.Url;
|
|
451
|
+
}
|
|
452
|
+
ctxmap["spec"] = spec;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
if (null != ctx.Result)
|
|
456
|
+
{
|
|
457
|
+
var res = new Dictionary<string, object?>
|
|
458
|
+
{
|
|
459
|
+
["ok"] = ctx.Result.Ok,
|
|
460
|
+
["status"] = ctx.Result.Status,
|
|
461
|
+
["statusText"] = ctx.Result.StatusText,
|
|
462
|
+
["headers"] = ctx.Result.Headers,
|
|
463
|
+
};
|
|
464
|
+
if (null != ctx.Result.Body)
|
|
465
|
+
{
|
|
466
|
+
res["body"] = ctx.Result.Body;
|
|
467
|
+
}
|
|
468
|
+
if (null != ctx.Result.Err)
|
|
469
|
+
{
|
|
470
|
+
res["err"] = new Dictionary<string, object?>
|
|
471
|
+
{
|
|
472
|
+
["message"] = ctx.Result.Err.Message,
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
if (null != ctx.Result.Resdata)
|
|
476
|
+
{
|
|
477
|
+
res["resdata"] = ctx.Result.Resdata;
|
|
478
|
+
}
|
|
479
|
+
if (null != ctx.Result.Resmatch)
|
|
480
|
+
{
|
|
481
|
+
res["resmatch"] = ctx.Result.Resmatch;
|
|
482
|
+
}
|
|
483
|
+
ctxmap["result"] = res;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
if (null != ctx.Response)
|
|
487
|
+
{
|
|
488
|
+
ctxmap["response"] = "exists";
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// Smoke tests for the vendored omni runner itself: a runner that cannot
|
|
2
|
+
// FAIL a bad entry would turn every corpus suite vacuously green, so pin
|
|
3
|
+
// the failure paths, not just the happy one. (The C# peer of
|
|
4
|
+
// tm/ts/test/omni.test.ts and tm/go/test/omnismoke_test.go.)
|
|
5
|
+
|
|
6
|
+
using Xunit;
|
|
7
|
+
|
|
8
|
+
using Voxgig.Omni;
|
|
9
|
+
|
|
10
|
+
using ProjectNameSdk;
|
|
11
|
+
|
|
12
|
+
namespace ProjectNameSdk.Test;
|
|
13
|
+
|
|
14
|
+
public class OmniSmokeTest
|
|
15
|
+
{
|
|
16
|
+
// A minimal in-memory spec: no fixture file, no OMNI block (lenient
|
|
17
|
+
// v0, like the shared corpus).
|
|
18
|
+
private static Dictionary<string, object?> SmokeSpec()
|
|
19
|
+
{
|
|
20
|
+
return new Dictionary<string, object?>
|
|
21
|
+
{
|
|
22
|
+
["primary"] = new Dictionary<string, object?>
|
|
23
|
+
{
|
|
24
|
+
["smoke"] = new Dictionary<string, object?>
|
|
25
|
+
{
|
|
26
|
+
["basic"] = new Dictionary<string, object?>
|
|
27
|
+
{
|
|
28
|
+
["set"] = new List<object?>
|
|
29
|
+
{
|
|
30
|
+
new Dictionary<string, object?> { ["in"] = 1, ["out"] = 2 },
|
|
31
|
+
new Dictionary<string, object?> { ["in"] = 41, ["out"] = 42 },
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
["bad"] = new Dictionary<string, object?>
|
|
35
|
+
{
|
|
36
|
+
["set"] = new List<object?>
|
|
37
|
+
{
|
|
38
|
+
new Dictionary<string, object?> { ["in"] = 1, ["out"] = 999 },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
["err"] = new Dictionary<string, object?>
|
|
42
|
+
{
|
|
43
|
+
["set"] = new List<object?>
|
|
44
|
+
{
|
|
45
|
+
new Dictionary<string, object?> { ["in"] = 0, ["err"] = "zero refused" },
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
private static object? SmokeInc(params object?[] args)
|
|
54
|
+
{
|
|
55
|
+
var n = Convert.ToInt64(args[0]);
|
|
56
|
+
if (0 == n)
|
|
57
|
+
{
|
|
58
|
+
throw new InvalidOperationException("smoke: zero refused");
|
|
59
|
+
}
|
|
60
|
+
return n + 1;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private static OmniResolver.Run SmokeRun()
|
|
64
|
+
{
|
|
65
|
+
var runner = OmniResolver.MakeRunner(SmokeSpec(),
|
|
66
|
+
ProjectNameSDK.TestSDK(null, null));
|
|
67
|
+
var run = runner("smoke");
|
|
68
|
+
Assert.NotNull(run.Spec);
|
|
69
|
+
return run;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
[Fact]
|
|
73
|
+
public void RunsetPassesACorrectSubject()
|
|
74
|
+
{
|
|
75
|
+
var run = SmokeRun();
|
|
76
|
+
run.RunSet(run.Set("basic"), SmokeInc);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
[Fact]
|
|
80
|
+
public void RunsetFailsAWrongResult()
|
|
81
|
+
{
|
|
82
|
+
var run = SmokeRun();
|
|
83
|
+
|
|
84
|
+
var err = Assert.Throws<OmniError>(() =>
|
|
85
|
+
run.RunSet(run.Set("bad"), SmokeInc));
|
|
86
|
+
|
|
87
|
+
Assert.True(err.Message.Contains("result mismatch"),
|
|
88
|
+
"expected a result mismatch failure, got: " + err.Message);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
[Fact]
|
|
92
|
+
public void ExpectedErrorIsMatchedAndAMissingOneFails()
|
|
93
|
+
{
|
|
94
|
+
var run = SmokeRun();
|
|
95
|
+
|
|
96
|
+
// The erroring subject satisfies the expected-error entry.
|
|
97
|
+
run.RunSet(run.Set("err"), SmokeInc);
|
|
98
|
+
|
|
99
|
+
// A subject that does NOT raise must fail that same entry.
|
|
100
|
+
var err = Assert.Throws<OmniError>(() =>
|
|
101
|
+
run.RunSet(run.Set("err"), args => args[0]));
|
|
102
|
+
|
|
103
|
+
Assert.True(err.Message.Contains("expected error did not occur"),
|
|
104
|
+
"expected an expected-error failure, got: " + err.Message);
|
|
105
|
+
}
|
|
106
|
+
}
|