@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,212 @@
|
|
|
1
|
+
// VENDORED: @voxgig/omni 0.1.4 (javascript/src/util.js)
|
|
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
|
+
// This module is deliberately self-contained: the omni runner must be able
|
|
7
|
+
// to test *any* library, including libraries that provide these same
|
|
8
|
+
// operations, so it can never borrow them from the system under test.
|
|
9
|
+
// Zero third-party dependencies, by design.
|
|
10
|
+
|
|
11
|
+
const NULLMARK = '__NULL__' // Value is JSON null.
|
|
12
|
+
const UNDEFMARK = '__UNDEF__' // Value is not present (thus, undefined).
|
|
13
|
+
const EXISTSMARK = '__EXISTS__' // Value exists (not undefined).
|
|
14
|
+
|
|
15
|
+
// A map (JSON object)?
|
|
16
|
+
function ismap(val) {
|
|
17
|
+
return null != val && 'object' === typeof val && !Array.isArray(val)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// A list (JSON array)?
|
|
21
|
+
function islist(val) {
|
|
22
|
+
return Array.isArray(val)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// A container (map or list)?
|
|
26
|
+
function isnode(val) {
|
|
27
|
+
return ismap(val) || islist(val)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Deep copy a JSON value. Non-JSON values (functions, class instances) are
|
|
31
|
+
// passed through by reference - the runner only ever clones test data.
|
|
32
|
+
function clone(val) {
|
|
33
|
+
if (islist(val)) {
|
|
34
|
+
return val.map((entry) => clone(entry))
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (ismap(val)) {
|
|
38
|
+
const out = {}
|
|
39
|
+
for (const key of Object.keys(val)) {
|
|
40
|
+
out[key] = clone(val[key])
|
|
41
|
+
}
|
|
42
|
+
return out
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return val
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Read a value from a nested structure by path. Returns undefined when any
|
|
49
|
+
// step is missing.
|
|
50
|
+
function getpath(val, path) {
|
|
51
|
+
let current = val
|
|
52
|
+
|
|
53
|
+
for (const part of path) {
|
|
54
|
+
if (islist(current)) {
|
|
55
|
+
const index = 'number' === typeof part ? part : parseInt(String(part), 10)
|
|
56
|
+
if (isNaN(index) || index < 0 || index >= current.length) {
|
|
57
|
+
return undefined
|
|
58
|
+
}
|
|
59
|
+
current = current[index]
|
|
60
|
+
} else if (ismap(current)) {
|
|
61
|
+
const key = String(part)
|
|
62
|
+
if (!Object.prototype.hasOwnProperty.call(current, key)) {
|
|
63
|
+
return undefined
|
|
64
|
+
}
|
|
65
|
+
current = current[key]
|
|
66
|
+
} else {
|
|
67
|
+
return undefined
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return current
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Depth-first walk, applying `apply` to every node and leaf, children
|
|
75
|
+
// first, then the containing node. `apply` may replace the value.
|
|
76
|
+
function walk(val, apply, key, parent, path) {
|
|
77
|
+
const curpath = path || []
|
|
78
|
+
|
|
79
|
+
if (isnode(val)) {
|
|
80
|
+
if (islist(val)) {
|
|
81
|
+
for (let index = 0; index < val.length; index++) {
|
|
82
|
+
val[index] = walk(val[index], apply, index, val, [...curpath, index])
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
for (const childkey of Object.keys(val)) {
|
|
86
|
+
val[childkey] = walk(val[childkey], apply, childkey, val, [...curpath, childkey])
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return apply(key, val, parent, curpath)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Deep structural equality. Numbers compare by value, booleans never equal
|
|
95
|
+
// numbers, map key order is not significant.
|
|
96
|
+
function deepequal(a, b) {
|
|
97
|
+
if (a === b) {
|
|
98
|
+
return true
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (null == a || null == b) {
|
|
102
|
+
return (undefined === a && undefined === b) || (null === a && null === b)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const atype = typeof a
|
|
106
|
+
const btype = typeof b
|
|
107
|
+
|
|
108
|
+
if ('number' === atype && 'number' === btype) {
|
|
109
|
+
return a === b || (isNaN(a) && isNaN(b))
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (atype !== btype) {
|
|
113
|
+
return false
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (islist(a) && islist(b)) {
|
|
117
|
+
if (a.length !== b.length) {
|
|
118
|
+
return false
|
|
119
|
+
}
|
|
120
|
+
for (let index = 0; index < a.length; index++) {
|
|
121
|
+
if (!deepequal(a[index], b[index])) {
|
|
122
|
+
return false
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return true
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (ismap(a) && ismap(b)) {
|
|
129
|
+
const akeys = Object.keys(a)
|
|
130
|
+
const bkeys = Object.keys(b)
|
|
131
|
+
if (akeys.length !== bkeys.length) {
|
|
132
|
+
return false
|
|
133
|
+
}
|
|
134
|
+
for (const key of akeys) {
|
|
135
|
+
if (!Object.prototype.hasOwnProperty.call(b, key)) {
|
|
136
|
+
return false
|
|
137
|
+
}
|
|
138
|
+
if (!deepequal(a[key], b[key])) {
|
|
139
|
+
return false
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return true
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return false
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Compact JSON text with map keys sorted, so that messages are identical
|
|
149
|
+
// in every port regardless of local map ordering.
|
|
150
|
+
function jsonstr(val) {
|
|
151
|
+
if (undefined === val) {
|
|
152
|
+
return 'undefined'
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (null === val) {
|
|
156
|
+
return 'null'
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if ('string' === typeof val) {
|
|
160
|
+
return JSON.stringify(val)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if ('number' === typeof val) {
|
|
164
|
+
return Number.isFinite(val) ? String(val) : 'null'
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if ('boolean' === typeof val) {
|
|
168
|
+
return val ? 'true' : 'false'
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (islist(val)) {
|
|
172
|
+
return '[' + val.map((entry) => jsonstr(entry)).join(',') + ']'
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (ismap(val)) {
|
|
176
|
+
const keys = Object.keys(val).sort()
|
|
177
|
+
return '{' + keys.map((key) => JSON.stringify(key) + ':' + jsonstr(val[key])).join(',') + '}'
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if ('function' === typeof val) {
|
|
181
|
+
return '[Function' + (val.name ? ' ' + val.name : '') + ']'
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return JSON.stringify(String(val))
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Human readable form of a value: strings verbatim, everything else as
|
|
188
|
+
// compact JSON.
|
|
189
|
+
function stringify(val) {
|
|
190
|
+
return 'string' === typeof val ? val : jsonstr(val)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Render a path as a dotted string.
|
|
194
|
+
function pathify(path) {
|
|
195
|
+
return (path || []).map((part) => String(part)).join('.')
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
module.exports = {
|
|
199
|
+
NULLMARK,
|
|
200
|
+
UNDEFMARK,
|
|
201
|
+
EXISTSMARK,
|
|
202
|
+
clone,
|
|
203
|
+
deepequal,
|
|
204
|
+
getpath,
|
|
205
|
+
islist,
|
|
206
|
+
ismap,
|
|
207
|
+
isnode,
|
|
208
|
+
jsonstr,
|
|
209
|
+
pathify,
|
|
210
|
+
stringify,
|
|
211
|
+
walk,
|
|
212
|
+
}
|
|
@@ -33,7 +33,7 @@ class Utility private constructor(register: Boolean) {
|
|
|
33
33
|
lateinit var prepareAuth: (Context) -> Spec
|
|
34
34
|
lateinit var prepareBody: (Context) -> Any?
|
|
35
35
|
lateinit var prepareHeaders: (Context) -> MutableMap<String, Any?>
|
|
36
|
-
lateinit var prepareMethod: (Context) -> String
|
|
36
|
+
lateinit var prepareMethod: (Context) -> String?
|
|
37
37
|
lateinit var prepareParams: (Context) -> MutableMap<String, Any?>
|
|
38
38
|
lateinit var preparePath: (Context) -> String
|
|
39
39
|
lateinit var prepareQuery: (Context) -> MutableMap<String, Any?>
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
package KOTLINPACKAGE.sdktest
|
|
2
|
+
|
|
3
|
+
// The corpus test runner: vendored @voxgig/omni driven through its NATIVE
|
|
4
|
+
// API (voxgig.omni.makeRunner(spec, provider)), presented to the corpus
|
|
5
|
+
// tests in the struct-runner shape they already use (run.spec, run.runset,
|
|
6
|
+
// run.runsetflags, run.client). No compat shim is vendored: the adapter
|
|
7
|
+
// below IS the whole bridge, per language, per the vendor-tag rollout
|
|
8
|
+
// (docs/design/vendor-tag-rollout.md, Decision 4). It supersedes the
|
|
9
|
+
// engine half of RunnerSupport (runset/matchDeep) and the whole
|
|
10
|
+
// StructRunner class (support lives on in RunnerSupport).
|
|
11
|
+
//
|
|
12
|
+
// Kotlin-specific decisions, each load-bearing:
|
|
13
|
+
//
|
|
14
|
+
// 1. TWO VALUE MODELS. The vendored kotlin omni port has a sealed `Json`
|
|
15
|
+
// (Absent/Null/Bool/Num/Str/JList/JMap); the SDK runtime has plain
|
|
16
|
+
// `Any?` - LinkedHashMap, MutableList, String, Long/Double, Boolean,
|
|
17
|
+
// null, and Struct.UNDEF for "no value". `toStruct`/`toOmni` convert at
|
|
18
|
+
// the subject boundary. Integral numbers cross as Long, matching what
|
|
19
|
+
// the SDK's own Json parser feeds the utilities. Ported from the
|
|
20
|
+
// struct kotlin port's own omni bridge (voxgig/struct
|
|
21
|
+
// kotlin/src/test/kotlin/voxgig/struct/Omni.kt).
|
|
22
|
+
//
|
|
23
|
+
// 2. ZERO-ARGUMENT ENTRIES. The corpus carries entries with no `in`,
|
|
24
|
+
// `args` or `ctx`, meaning "call the subject with NO argument". The
|
|
25
|
+
// kotlin port already distinguishes that case natively - such an entry
|
|
26
|
+
// arrives as one `Json.Absent` argument - so no novalargs spec rewrite
|
|
27
|
+
// (go) and no compat shim (lua/php) is needed: `toStruct(Json.Absent)`
|
|
28
|
+
// IS `Struct.UNDEF`, the port's own no-value sentinel, and
|
|
29
|
+
// `toOmni(Struct.UNDEF)` is `Json.Absent` on the way out.
|
|
30
|
+
//
|
|
31
|
+
// 3. MUTATED ARGUMENTS CANNOT CROSS BY IDENTITY. `toStruct` builds new
|
|
32
|
+
// containers, so an in-place rewrite by the subject would be invisible
|
|
33
|
+
// to the runner - and `match: {args: ...}` asserts exactly that
|
|
34
|
+
// (minor/setpath, merge/integrity), as does every `match: {ctx: ...}`
|
|
35
|
+
// read of state a subject wrote back with `omniSyncCtx`. So the
|
|
36
|
+
// wrapped subject REFILLS omni's own (mutable) containers in place
|
|
37
|
+
// after the call (`writeback`), which the runner then matches against.
|
|
38
|
+
// Safe because the runner clones `entry.in` before handing it over.
|
|
39
|
+
//
|
|
40
|
+
// 4. CONTEXTS STAY MAPS ACROSS THE RUNNER. omni sets `entry.ctx` to
|
|
41
|
+
// args[0] and `match: {ctx: ...}` assertions read THROUGH it with
|
|
42
|
+
// omni's own getpath, which walks Json maps only. So the subjects
|
|
43
|
+
// receive the MAP, build the typed Context with
|
|
44
|
+
// OmniResolver.omniCtx(args[0], ...) at the call site, run the
|
|
45
|
+
// utility, and write the observable ctx state back into the same map
|
|
46
|
+
// with omniSyncCtx - which is what makes the live SDK reachable
|
|
47
|
+
// through ctx.client for the generated utilities (omni#56; the same
|
|
48
|
+
// idiom as the go and java resolvers). NOTE: this port's runner marks
|
|
49
|
+
// `ctx.client` with `Json.Bool(true)` - presence, not identity - so a
|
|
50
|
+
// DEF-built client can never be resolved back from the ctx map;
|
|
51
|
+
// sections that need a specially-optioned client construct it at the
|
|
52
|
+
// call site (makeSpec/prepareAuth), same as the retired engine did.
|
|
53
|
+
//
|
|
54
|
+
// 5. THE VENDORED KOTLIN PORT LACKS THE omni#54 RUNNER FIXES the
|
|
55
|
+
// TypeScript port has at this tag (voxgig/omni#64 landed them for
|
|
56
|
+
// js/go/py only): Util.jsonstr has no cycle guard, and the match base
|
|
57
|
+
// is rebuilt per check rather than guarded. Both only bite on CYCLIC
|
|
58
|
+
// values - and a `Json` value built by this resolver's `toOmni` from
|
|
59
|
+
// acyclic corpus data cannot be cyclic, because typed SDK state (a
|
|
60
|
+
// Context, a client) never enters the Json world (decision 4). The
|
|
61
|
+
// errify half (non-Error throwables) cannot arise: kotlin subjects
|
|
62
|
+
// fail by THROWING, and the errify hook below keeps the SDK error's
|
|
63
|
+
// code for `match: {err: {code: ...}}` assertions.
|
|
64
|
+
|
|
65
|
+
import java.nio.file.Paths
|
|
66
|
+
import java.util.LinkedHashMap
|
|
67
|
+
import kotlin.math.abs
|
|
68
|
+
import kotlin.math.floor
|
|
69
|
+
|
|
70
|
+
import voxgig.omni.Flags
|
|
71
|
+
import voxgig.omni.Json
|
|
72
|
+
import voxgig.omni.Provider
|
|
73
|
+
import voxgig.omni.RunPack
|
|
74
|
+
import voxgig.omni.Subject as OmniSubject
|
|
75
|
+
import voxgig.omni.errify as omniErrify
|
|
76
|
+
import voxgig.omni.loadspec
|
|
77
|
+
import voxgig.omni.makeRunner as makeOmniRunner
|
|
78
|
+
|
|
79
|
+
import KOTLINPACKAGE.core.Context
|
|
80
|
+
import KOTLINPACKAGE.core.Helpers
|
|
81
|
+
import KOTLINPACKAGE.core.ProjectNameSDK
|
|
82
|
+
import KOTLINPACKAGE.core.SdkError
|
|
83
|
+
import KOTLINPACKAGE.core.Utility
|
|
84
|
+
import KOTLINPACKAGE.utility.struct.Struct
|
|
85
|
+
|
|
86
|
+
@Suppress("UNCHECKED_CAST")
|
|
87
|
+
object OmniResolver {
|
|
88
|
+
|
|
89
|
+
// The sentinels, under the names the corpus tests already use.
|
|
90
|
+
const val NULLMARK = voxgig.omni.NULLMARK
|
|
91
|
+
const val UNDEFMARK = voxgig.omni.UNDEFMARK
|
|
92
|
+
const val EXISTSMARK = voxgig.omni.EXISTSMARK
|
|
93
|
+
|
|
94
|
+
/** The function under test, in this port's plain-value shape. */
|
|
95
|
+
fun interface Subject {
|
|
96
|
+
fun call(args: MutableList<Any?>): Any?
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Resolves one named section of the spec. */
|
|
100
|
+
fun interface NamedRunner {
|
|
101
|
+
fun runner(name: String, store: Any?): Run
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* What the runner returns for one named spec section - the struct-runner
|
|
106
|
+
* shape the corpus call sites consume. A failing entry throws
|
|
107
|
+
* voxgig.omni.OmniError, which fails the JUnit test with the entry named.
|
|
108
|
+
*/
|
|
109
|
+
class Run internal constructor(
|
|
110
|
+
private val pack: RunPack,
|
|
111
|
+
val client: ProjectNameSDK?,
|
|
112
|
+
) {
|
|
113
|
+
/** The resolved spec section, in this port's plain-value shape. */
|
|
114
|
+
val spec: MutableMap<String, Any?> =
|
|
115
|
+
toStruct(pack.spec) as? MutableMap<String, Any?> ?: linkedMapOf()
|
|
116
|
+
|
|
117
|
+
/** A named group of the resolved spec. */
|
|
118
|
+
fun set(name: String): Any? = spec[name]
|
|
119
|
+
|
|
120
|
+
/** Run one set of test entries with omni's default flags. */
|
|
121
|
+
fun runset(testspec: Any?, subject: Subject?) {
|
|
122
|
+
runsetflags(testspec, Flags(), subject)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Run one set of test entries with explicit flags. */
|
|
126
|
+
fun runsetflags(testspec: Any?, flags: Flags, subject: Subject?) {
|
|
127
|
+
val wrapped: OmniSubject? = if (null == subject) {
|
|
128
|
+
null
|
|
129
|
+
} else {
|
|
130
|
+
{ jargs ->
|
|
131
|
+
val pargs = jargs.mapTo(mutableListOf<Any?>()) { toStruct(it) }
|
|
132
|
+
val got = subject.call(pargs)
|
|
133
|
+
// Refill omni's own containers so `match.args` / `match.ctx`
|
|
134
|
+
// see in-place mutation (decision 3 above).
|
|
135
|
+
for (index in jargs.indices) {
|
|
136
|
+
writeback(jargs[index], pargs[index])
|
|
137
|
+
}
|
|
138
|
+
toOmni(got)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
pack.runsetflags(toOmni(testspec), flags, wrapped)
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* The struct runner's makeRunner(testfile, client) signature, backed by
|
|
147
|
+
* vendored omni. `testfile` is a spec path (absolutized against the
|
|
148
|
+
* working directory - omni's docs say a port must resolve the path
|
|
149
|
+
* itself) or an already-parsed spec value (omni's own capability), which
|
|
150
|
+
* keeps smoke tests free of fixture files.
|
|
151
|
+
*/
|
|
152
|
+
fun makeRunner(testfile: Any?, client: ProjectNameSDK?): NamedRunner {
|
|
153
|
+
val spec: Json = when (testfile) {
|
|
154
|
+
is Json -> testfile
|
|
155
|
+
is String -> loadspec(Paths.get(testfile).toAbsolutePath().normalize().toString())
|
|
156
|
+
else -> toOmni(testfile)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
val runner = makeOmniRunner(spec, sdkProvider(client))
|
|
160
|
+
|
|
161
|
+
return NamedRunner { name, store ->
|
|
162
|
+
Run(runner.runner(name, if (null == store) Json.Absent else toOmni(store)), client)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** omni's value model -> this port's (see decision 1 above). */
|
|
167
|
+
fun toStruct(value: Json): Any? = when (value) {
|
|
168
|
+
is Json.Absent -> Struct.UNDEF
|
|
169
|
+
is Json.Null -> null
|
|
170
|
+
is Json.Bool -> value.value
|
|
171
|
+
is Json.Num -> {
|
|
172
|
+
val d = value.value
|
|
173
|
+
// Integral JSON numbers become Long, exactly as the SDK's own
|
|
174
|
+
// zero-dep Json parser produces them - the utilities' arithmetic
|
|
175
|
+
// and string rendering are written against that contract.
|
|
176
|
+
if (d.isFinite() && floor(d) == d && abs(d) < 9007199254740992.0) d.toLong() else d
|
|
177
|
+
}
|
|
178
|
+
is Json.Str -> value.value
|
|
179
|
+
is Json.JList -> value.value.mapTo(mutableListOf()) { toStruct(it) }
|
|
180
|
+
is Json.JMap ->
|
|
181
|
+
LinkedHashMap<String, Any?>().also { out ->
|
|
182
|
+
value.value.forEach { (key, entry) -> out[key] = toStruct(entry) }
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* This port's value model -> omni's. A function or a sentinel has no
|
|
188
|
+
* JSON form and omni only ever stringifies one, so it becomes its own
|
|
189
|
+
* rendering rather than silently collapsing to null.
|
|
190
|
+
*/
|
|
191
|
+
fun toOmni(value: Any?): Json = when {
|
|
192
|
+
value is Json -> value
|
|
193
|
+
value === Struct.UNDEF -> Json.Absent
|
|
194
|
+
null == value -> Json.Null
|
|
195
|
+
value is Boolean -> Json.Bool(value)
|
|
196
|
+
value is Number -> Json.Num(value.toDouble())
|
|
197
|
+
value is String -> Json.Str(value)
|
|
198
|
+
value is List<*> -> Json.JList(value.mapTo(mutableListOf()) { toOmni(it) })
|
|
199
|
+
value is Map<*, *> ->
|
|
200
|
+
Json.JMap(
|
|
201
|
+
LinkedHashMap<String, Json>().also { out ->
|
|
202
|
+
value.forEach { (key, entry) -> out["$key"] = toOmni(entry) }
|
|
203
|
+
},
|
|
204
|
+
)
|
|
205
|
+
else -> Json.Str(Struct.stringify(value))
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** Refill omni's own container from the (possibly rewritten) argument. */
|
|
209
|
+
private fun writeback(target: Json, source: Any?) {
|
|
210
|
+
if (target is Json.JMap && source is Map<*, *>) {
|
|
211
|
+
target.value.clear()
|
|
212
|
+
source.forEach { (key, entry) -> target.value["$key"] = toOmni(entry) }
|
|
213
|
+
} else if (target is Json.JList && source is List<*>) {
|
|
214
|
+
target.value.clear()
|
|
215
|
+
source.forEach { entry -> target.value.add(toOmni(entry)) }
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/** Wrap a live client as an omni provider (see decision 4 above). */
|
|
220
|
+
private fun sdkProvider(client: ProjectNameSDK?): Provider = Provider(
|
|
221
|
+
// NO subject-by-name hook: the SDK's Utility fields are TYPED function
|
|
222
|
+
// properties (a Context in, a typed value out), so a generic name
|
|
223
|
+
// lookup cannot produce omni's (List<Json>) -> Json subject without a
|
|
224
|
+
// per-name adapter; every corpus call site passes its subject
|
|
225
|
+
// explicitly, so the hook would be dead weight (the java resolver's
|
|
226
|
+
// decision, unchanged here).
|
|
227
|
+
subject = null,
|
|
228
|
+
|
|
229
|
+
// A DEF.client entry becomes another live test SDK, wrapped the same
|
|
230
|
+
// way. (This port's runner cannot hand the provider back through the
|
|
231
|
+
// ctx map - see decision 4 - so a section needing that client also
|
|
232
|
+
// constructs it at the call site.)
|
|
233
|
+
client = { options ->
|
|
234
|
+
val opts = toStruct(options) as? MutableMap<String, Any?>
|
|
235
|
+
sdkProvider(ProjectNameSDK.testSDK(null, opts ?: linkedMapOf()))
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
contextify = null,
|
|
239
|
+
|
|
240
|
+
// Client options may reference the runner store.
|
|
241
|
+
inject = { options, store ->
|
|
242
|
+
val popts = toStruct(options)
|
|
243
|
+
Struct.inject(popts, toStruct(store))
|
|
244
|
+
toOmni(popts)
|
|
245
|
+
},
|
|
246
|
+
|
|
247
|
+
// Keep the SDK error's code beside its message, so a corpus
|
|
248
|
+
// `match: {err: {code: ...}}` can assert on it - the kotlin analogue
|
|
249
|
+
// of the omni#54 errify fix (see decision 5 above).
|
|
250
|
+
errify = { err ->
|
|
251
|
+
if (err is SdkError) {
|
|
252
|
+
val out = LinkedHashMap<String, Json>()
|
|
253
|
+
out["name"] = Json.str("SdkError")
|
|
254
|
+
out["message"] = Json.str(err.message)
|
|
255
|
+
if (err.code.isNotEmpty()) {
|
|
256
|
+
out["code"] = Json.str(err.code)
|
|
257
|
+
}
|
|
258
|
+
Json.JMap(out)
|
|
259
|
+
} else {
|
|
260
|
+
omniErrify(err)
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Build the typed Context a generated utility takes from the ctx MAP
|
|
267
|
+
* omni handed the subject (args[0]). (The engine half of the retired
|
|
268
|
+
* RunnerSupport.runset call sites did this as makeCtxFromMap + fixctx,
|
|
269
|
+
* per section, by hand.)
|
|
270
|
+
*/
|
|
271
|
+
fun omniCtx(arg: Any?, client: ProjectNameSDK?, utility: Utility?): Context {
|
|
272
|
+
val ctxmap = Helpers.toMapAny(arg) ?: linkedMapOf()
|
|
273
|
+
val ctx = RunnerSupport.makeCtxFromMap(ctxmap, client, utility)
|
|
274
|
+
RunnerSupport.fixctx(ctx, client)
|
|
275
|
+
return ctx
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Write the OBSERVABLE state of a typed context back into the ctx map
|
|
280
|
+
* the entry holds, which is where a `match: {ctx: ...}` assertion reads
|
|
281
|
+
* (through the wrapped subject's writeback - decision 3). The subject
|
|
282
|
+
* mutated the typed context; the map is what the runner can walk. (The
|
|
283
|
+
* retired engine call sites did this per section, by hand, as "update
|
|
284
|
+
* entry ctx for match".)
|
|
285
|
+
*/
|
|
286
|
+
fun omniSyncCtx(arg: Any?, ctx: Context?) {
|
|
287
|
+
val ctxmap = Helpers.toMapAny(arg)
|
|
288
|
+
if (null == ctxmap || null == ctx) {
|
|
289
|
+
return
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
val spec = ctx.spec
|
|
293
|
+
if (null != spec) {
|
|
294
|
+
val out = linkedMapOf<String, Any?>(
|
|
295
|
+
"base" to spec.base,
|
|
296
|
+
"prefix" to spec.prefix,
|
|
297
|
+
"suffix" to spec.suffix,
|
|
298
|
+
"path" to spec.path,
|
|
299
|
+
"method" to spec.method,
|
|
300
|
+
"params" to spec.params,
|
|
301
|
+
"query" to spec.query,
|
|
302
|
+
"headers" to spec.headers,
|
|
303
|
+
"step" to spec.step,
|
|
304
|
+
"alias" to spec.alias,
|
|
305
|
+
)
|
|
306
|
+
if (null != spec.body) {
|
|
307
|
+
out["body"] = spec.body
|
|
308
|
+
}
|
|
309
|
+
if (spec.url.isNotEmpty()) {
|
|
310
|
+
out["url"] = spec.url
|
|
311
|
+
}
|
|
312
|
+
ctxmap["spec"] = out
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
val result = ctx.result
|
|
316
|
+
if (null != result) {
|
|
317
|
+
val out = linkedMapOf<String, Any?>(
|
|
318
|
+
"ok" to result.ok,
|
|
319
|
+
"status" to result.status,
|
|
320
|
+
"statusText" to result.statusText,
|
|
321
|
+
"headers" to result.headers,
|
|
322
|
+
)
|
|
323
|
+
if (null != result.body) {
|
|
324
|
+
out["body"] = result.body
|
|
325
|
+
}
|
|
326
|
+
val err = result.err
|
|
327
|
+
if (null != err) {
|
|
328
|
+
out["err"] = linkedMapOf<String, Any?>("message" to err.message)
|
|
329
|
+
}
|
|
330
|
+
if (null != result.resdata) {
|
|
331
|
+
out["resdata"] = result.resdata
|
|
332
|
+
}
|
|
333
|
+
if (null != result.resmatch) {
|
|
334
|
+
out["resmatch"] = result.resmatch
|
|
335
|
+
}
|
|
336
|
+
ctxmap["result"] = out
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (null != ctx.response) {
|
|
340
|
+
ctxmap["response"] = "exists"
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
package KOTLINPACKAGE.sdktest
|
|
2
|
+
|
|
3
|
+
// Smoke tests for the vendored omni runner itself: a runner that cannot
|
|
4
|
+
// FAIL a bad entry would turn every corpus suite vacuously green, so pin
|
|
5
|
+
// the failure paths, not just the happy one. (The kotlin peer of
|
|
6
|
+
// tm/ts/test/omni.test.ts and tm/java/test/OmniSmokeTest.java.)
|
|
7
|
+
|
|
8
|
+
import org.junit.jupiter.api.Assertions.assertNotNull
|
|
9
|
+
import org.junit.jupiter.api.Assertions.assertThrows
|
|
10
|
+
import org.junit.jupiter.api.Assertions.assertTrue
|
|
11
|
+
import org.junit.jupiter.api.Test
|
|
12
|
+
|
|
13
|
+
import voxgig.omni.OmniError
|
|
14
|
+
|
|
15
|
+
import KOTLINPACKAGE.core.ProjectNameSDK
|
|
16
|
+
|
|
17
|
+
class OmniSmokeTest {
|
|
18
|
+
|
|
19
|
+
// A minimal in-memory spec: no fixture file, no OMNI block (lenient v0,
|
|
20
|
+
// like the shared corpus).
|
|
21
|
+
private fun smokeSpec(): MutableMap<String, Any?> = linkedMapOf(
|
|
22
|
+
"primary" to linkedMapOf<String, Any?>(
|
|
23
|
+
"smoke" to linkedMapOf<String, Any?>(
|
|
24
|
+
"basic" to linkedMapOf<String, Any?>(
|
|
25
|
+
"set" to mutableListOf<Any?>(
|
|
26
|
+
linkedMapOf<String, Any?>("in" to 1, "out" to 2),
|
|
27
|
+
linkedMapOf<String, Any?>("in" to 41, "out" to 42),
|
|
28
|
+
),
|
|
29
|
+
),
|
|
30
|
+
"bad" to linkedMapOf<String, Any?>(
|
|
31
|
+
"set" to mutableListOf<Any?>(
|
|
32
|
+
linkedMapOf<String, Any?>("in" to 1, "out" to 999),
|
|
33
|
+
),
|
|
34
|
+
),
|
|
35
|
+
"err" to linkedMapOf<String, Any?>(
|
|
36
|
+
"set" to mutableListOf<Any?>(
|
|
37
|
+
linkedMapOf<String, Any?>("in" to 0, "err" to "zero refused"),
|
|
38
|
+
),
|
|
39
|
+
),
|
|
40
|
+
),
|
|
41
|
+
),
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
private val smokeInc = OmniResolver.Subject { args ->
|
|
45
|
+
val n = (args[0] as Number).toInt()
|
|
46
|
+
if (0 == n) {
|
|
47
|
+
throw RuntimeException("smoke: zero refused")
|
|
48
|
+
}
|
|
49
|
+
n + 1
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private fun smokeRun(): OmniResolver.Run {
|
|
53
|
+
val runner = OmniResolver.makeRunner(smokeSpec(), ProjectNameSDK.testSDK())
|
|
54
|
+
val run = runner.runner("smoke", null)
|
|
55
|
+
assertNotNull(run.spec, "smoke spec section did not resolve")
|
|
56
|
+
return run
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@Test
|
|
60
|
+
fun runsetPassesACorrectSubject() {
|
|
61
|
+
val run = smokeRun()
|
|
62
|
+
run.runset(run.spec["basic"], smokeInc)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@Test
|
|
66
|
+
fun runsetFailsAWrongResult() {
|
|
67
|
+
val run = smokeRun()
|
|
68
|
+
|
|
69
|
+
val err = assertThrows(
|
|
70
|
+
OmniError::class.java,
|
|
71
|
+
{ run.runset(run.spec["bad"], smokeInc) },
|
|
72
|
+
"a wrong result went unreported - the corpus suites would be vacuously green",
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
assertTrue(
|
|
76
|
+
err.message.orEmpty().contains("result mismatch"),
|
|
77
|
+
"expected a result mismatch failure, got: ${err.message}",
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@Test
|
|
82
|
+
fun expectedErrorIsMatchedAndAMissingOneFails() {
|
|
83
|
+
val run = smokeRun()
|
|
84
|
+
|
|
85
|
+
// The erroring subject satisfies the expected-error entry.
|
|
86
|
+
run.runset(run.spec["err"], smokeInc)
|
|
87
|
+
|
|
88
|
+
// A subject that does NOT raise must fail that same entry.
|
|
89
|
+
val err = assertThrows(
|
|
90
|
+
OmniError::class.java,
|
|
91
|
+
{ run.runset(run.spec["err"], OmniResolver.Subject { args -> args[0] }) },
|
|
92
|
+
"a missing expected error went unreported",
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
assertTrue(
|
|
96
|
+
err.message.orEmpty().contains("expected error did not occur"),
|
|
97
|
+
"expected an expected-error failure, got: ${err.message}",
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
}
|