@voxgig/sdkgen 4.8.2 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/model/target/zig.aon +9 -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/src/cmp/zig/Package_zig.ts +15 -11
- package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -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 +208 -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 +150 -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 +442 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +714 -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 +902 -0
- package/project/.sdk/tm/go/test/omni/util.go +381 -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 +628 -0
- package/project/.sdk/tm/js/test/vendor/omni/util.js +229 -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 +76 -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 +151 -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 +90 -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 +475 -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 +580 -0
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +252 -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/Makefile +15 -1
- package/project/.sdk/tm/zig/build.zig +23 -5
- package/project/.sdk/tm/zig/core/helpers.zig +52 -11
- package/project/.sdk/tm/zig/core/mem.zig +17 -1
- package/project/.sdk/tm/zig/core/utility.zig +23 -19
- package/project/.sdk/tm/zig/feature/audit.zig +2 -2
- package/project/.sdk/tm/zig/feature/cache.zig +2 -2
- package/project/.sdk/tm/zig/feature/debug.zig +5 -5
- package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
- package/project/.sdk/tm/zig/feature/paging.zig +2 -2
- package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
- package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
- package/project/.sdk/tm/zig/feature/support.zig +3 -3
- package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
- package/project/.sdk/tm/zig/feature/test.zig +10 -5
- package/project/.sdk/tm/zig/test/fh.zig +10 -10
- package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
- package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
- package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
- package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
- package/project/.sdk/tm/zig/test/primary_utility_test.zig +145 -155
- package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
- package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
- package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
- package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
- 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
- package/project/.sdk/tm/zig/test/struct_runner.zig +0 -464
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
// The corpus test runner: vendored @voxgig/omni driven through its NATIVE
|
|
2
|
+
// API (voxgig.omni.Runner.makeRunner / RunPack.runsetflagsargs), presented to
|
|
3
|
+
// the corpus drivers in the shape they already use (run.spec, run.set,
|
|
4
|
+
// run.runset, run.runsetargs, run.compare). No compatibility shim is
|
|
5
|
+
// vendored: the adapter below IS the whole bridge, per language, per the
|
|
6
|
+
// vendor-tag rollout (docs/design/vendor-tag-rollout.md, Decision 4).
|
|
7
|
+
//
|
|
8
|
+
// It supersedes, IN PLACE, the hand-written corpus ENGINE that used to live
|
|
9
|
+
// fused inside sdktest/StructCorpus.scala (`object Runner`'s jsonRead,
|
|
10
|
+
// fixJson, eqv, matchval, doMatch, resolveArgs, checkResult, handleError and
|
|
11
|
+
// runSet). Both corpus drivers keep their file names — StructCorpus.scala
|
|
12
|
+
// and PrimaryCorpus.scala — so no emitted call site moved and there is no
|
|
13
|
+
// orphan file for `doctor prune` to delete. It is the Scala peer of
|
|
14
|
+
// tm/java/test/OmniResolver.java, tm/rust/tests/omni_resolver/mod.rs and
|
|
15
|
+
// tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift.
|
|
16
|
+
//
|
|
17
|
+
// Lives in the DEFAULT package alongside SdkTestMain / Runner /
|
|
18
|
+
// SdkTestSupport, which is where scala-cli's generated test mains live.
|
|
19
|
+
//
|
|
20
|
+
// Scala-specific decisions, each load-bearing:
|
|
21
|
+
//
|
|
22
|
+
// 1. TWO VALUE MODELS, ONE CONVERSION PAIR. omni's `Json` is a closed,
|
|
23
|
+
// IMMUTABLE enum (ListMap-backed); this SDK's struct port uses a MUTABLE
|
|
24
|
+
// `Value` ADT (ArrayBuffer / LinkedHashMap). Every crossing is an explicit
|
|
25
|
+
// `tostruct` / `toomni`. `Json.Absent` <-> `Noval` and `Json.Null` <->
|
|
26
|
+
// `VNull` keep apart the two no-value states the corpus distinguishes —
|
|
27
|
+
// which is also why Scala needs neither go's `novalargs` spec rewrite nor
|
|
28
|
+
// lua/php's compat shim for the corpus's ZERO-ARGUMENT entries: an entry
|
|
29
|
+
// with no `in`/`args`/`ctx` arrives from omni as one `Json.Absent`
|
|
30
|
+
// argument and becomes exactly this port's own `Noval`, which is what the
|
|
31
|
+
// retired hand-written `resolveArgs` produced for the same entry.
|
|
32
|
+
//
|
|
33
|
+
// 2. ARGUMENTS ARE WRITTEN BACK. `SubjectArgs` (List[Json] => (List[Json],
|
|
34
|
+
// Json)) is the channel omni provides for a subject that MUTATES its
|
|
35
|
+
// arguments, which `match: {args: ...}` then asserts on —
|
|
36
|
+
// `struct/minor/setpath` (7 entries) and `struct/merge/integrity` (6) turn
|
|
37
|
+
// on it. Decision 1 handed the subject a CONVERTED COPY, so EVERY subject
|
|
38
|
+
// here runs through `runsetflagsargs` and the wrapper converts the
|
|
39
|
+
// (possibly mutated) `Value` arguments back into omni's own list after the
|
|
40
|
+
// call. A dynamic port's shim gets this free from shared object identity;
|
|
41
|
+
// Scala cannot, because omni's Json has no mutable variant.
|
|
42
|
+
//
|
|
43
|
+
// 3. `match: {ctx: ...}` IS RETARGETED ONTO `match: {args: {"0": ...}}`.
|
|
44
|
+
// The one place this port cannot follow canonical omni as written, and a
|
|
45
|
+
// VALUE-SEMANTICS consequence, not a choice. omni's `resolveargs` stores
|
|
46
|
+
// `entry.ctx` and `args[0]` as two COPIES of the contextified map, and
|
|
47
|
+
// `checkresult` reads `entry.get("ctx")` for the ctx base — so a subject's
|
|
48
|
+
// post-call writes (decision 2) can never reach the copy `entry.ctx`
|
|
49
|
+
// holds, and eight `primary` entries assert exactly that post-call state.
|
|
50
|
+
// args[0] IS the ctx of a ctx entry (omni itself sets
|
|
51
|
+
// `args = List(entry.get("ctx"))`), so moving the assertion from `ctx` to
|
|
52
|
+
// `args.0` reads the SAME map, post-call, and preserves every leaf:
|
|
53
|
+
// nothing is dropped, weakened or skipped. `retargetctx` below does that
|
|
54
|
+
// rewrite on the spec handed to the engine. Rust and Swift face the
|
|
55
|
+
// identical problem and answer it identically; the upstream fix is for the
|
|
56
|
+
// port's `drive` to re-point `entry.ctx` at the returned `args[0]`, the way
|
|
57
|
+
// JS object identity does implicitly — a follow-up, not a hand-edit of a
|
|
58
|
+
// vendored file.
|
|
59
|
+
//
|
|
60
|
+
// 4. NUMBERS NEED NOTHING HERE. omni's parser reads every JSON number as
|
|
61
|
+
// Double and this port's `VNum` is also Double. The PRIMARY corpus still
|
|
62
|
+
// narrows an integral Double to a java.lang.Long on its own Java bridge
|
|
63
|
+
// (PrimaryCorpus.toJava) — that is a struct-to-SDK concern, not an
|
|
64
|
+
// omni-to-struct one, and it stays where it was.
|
|
65
|
+
//
|
|
66
|
+
// 5. KEY ORDER SURVIVES. omni's Scala port models a map as an insertion-
|
|
67
|
+
// ordered `ListMap`, and this port's `VMap` is a `LinkedHashMap`, so the
|
|
68
|
+
// round trip preserves author order. (The Rust port needed a sortedness
|
|
69
|
+
// tripwire because its omni maps are `BTreeMap`; Scala needs none.)
|
|
70
|
+
//
|
|
71
|
+
// 6. FAILURES ARE ACCUMULATED, NOT RAISED. omni stops a GROUP at its first
|
|
72
|
+
// bad entry and throws an `OmniError`; the corpus mains report the whole
|
|
73
|
+
// corpus in one banner at the end and exit non-zero. `drive` records the
|
|
74
|
+
// message and carries on, so one run still names every broken group.
|
|
75
|
+
//
|
|
76
|
+
// 7. ABSENCE HAS TWO KINDS, AND ONLY ONE OF THEM IS BENIGN. Every group is
|
|
77
|
+
// looked up as an `OmniGroup`, which keeps the PARENT node beside the
|
|
78
|
+
// group, because the parent is what tells them apart:
|
|
79
|
+
//
|
|
80
|
+
// * the whole SECTION is missing — a project corpus that predates it.
|
|
81
|
+
// Fleet-wide this is real and load-bearing: `struct.nullsem` is absent
|
|
82
|
+
// from every project corpus checked (399 of 399), so failing on it
|
|
83
|
+
// would turn the fleet red for a corpus-version skew nobody caused.
|
|
84
|
+
// SKIPPED, and NAMED in the banner.
|
|
85
|
+
//
|
|
86
|
+
// * the section IS carried and the GROUP is gone. Nothing legitimate
|
|
87
|
+
// does that: across 691 project corpora, every group these drivers ask
|
|
88
|
+
// for is present and non-empty whenever its section is. It is a corpus
|
|
89
|
+
// regression, so it FAILS. It used to be a skip, and for the four
|
|
90
|
+
// single-node groups `compare` drives it was not even that — `compare`
|
|
91
|
+
// had no guard at all, so deleting `struct/merge/basic`,
|
|
92
|
+
// `struct/inject/basic` or `struct/transform/basic` left a run
|
|
93
|
+
// BIT-IDENTICAL to a healthy one (`PASS 1216 FAIL 0`, exit 0): the
|
|
94
|
+
// absent node became `Noval` on both sides, `fixjson` rendered both as
|
|
95
|
+
// NULLMARK, and NULLMARK deep-equals NULLMARK.
|
|
96
|
+
//
|
|
97
|
+
// 8. THE PASS COUNT IS WHAT THE ENGINE RAN, NOT WHAT THE CORPUS DECLARES.
|
|
98
|
+
// `drive` counts the times omni invoked the subject wrapper — omni calls
|
|
99
|
+
// it exactly once per entry — and reports THAT. A count read off the spec
|
|
100
|
+
// cannot tell a working engine from a disconnected one: with the
|
|
101
|
+
// `runsetflagsargs` call commented out, the old `report.pass(entrycount)`
|
|
102
|
+
// still printed `PASS 1216 FAIL 0` and exited 0. A number that survives
|
|
103
|
+
// the engine being unplugged is worse than no number, because it reads as
|
|
104
|
+
// evidence. The declared count is kept only as a TRIPWIRE: if the engine
|
|
105
|
+
// ran a different number of entries than the group declares, that
|
|
106
|
+
// mismatch is itself a failure.
|
|
107
|
+
|
|
108
|
+
import scala.collection.immutable.ListMap
|
|
109
|
+
import scala.collection.mutable.{ArrayBuffer, LinkedHashMap}
|
|
110
|
+
|
|
111
|
+
import voxgig.omni.{
|
|
112
|
+
Flags,
|
|
113
|
+
Json as OJson,
|
|
114
|
+
OmniError,
|
|
115
|
+
Provider,
|
|
116
|
+
RunPack,
|
|
117
|
+
RunnerPack,
|
|
118
|
+
Runner as OmniRunner,
|
|
119
|
+
Util as OmniUtil
|
|
120
|
+
}
|
|
121
|
+
import voxgig.omni.{
|
|
122
|
+
EXISTSMARK as OMNI_EXISTSMARK,
|
|
123
|
+
NULLMARK as OMNI_NULLMARK,
|
|
124
|
+
UNDEFMARK as OMNI_UNDEFMARK
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
import voxgig.struct.{
|
|
128
|
+
Noval,
|
|
129
|
+
VBool,
|
|
130
|
+
VFunc,
|
|
131
|
+
VList,
|
|
132
|
+
VMap,
|
|
133
|
+
VNull,
|
|
134
|
+
VNum,
|
|
135
|
+
VSentinel,
|
|
136
|
+
VStr,
|
|
137
|
+
Value
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
import SCALAPACKAGE.core.SdkError
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
// Pass/fail/skip accumulator shared by every section of one corpus run
|
|
144
|
+
// (decision 6). `prefix` is the banner the main prints, so the two mains stay
|
|
145
|
+
// distinguishable in a mixed log.
|
|
146
|
+
final class OmniReport(val prefix: String) {
|
|
147
|
+
|
|
148
|
+
var passed: Int = 0
|
|
149
|
+
val failures = ArrayBuffer.empty[String]
|
|
150
|
+
val skipped = ArrayBuffer.empty[String]
|
|
151
|
+
|
|
152
|
+
def pass(n: Int): Unit = { passed += n }
|
|
153
|
+
|
|
154
|
+
def fail(label: String, msg: String): Unit =
|
|
155
|
+
failures.append("FAIL " + label + " - " + msg.replace('\n', ' '))
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* A group that did not run for a reason that is NOT a defect. `why` is
|
|
159
|
+
* carried into the banner beside the label, because "skipped" on its own
|
|
160
|
+
* cannot be read: a section this corpus predates and a group that declares
|
|
161
|
+
* no entries are different facts and the reader has to be able to tell.
|
|
162
|
+
*/
|
|
163
|
+
def skip(label: String, why: String): Unit =
|
|
164
|
+
skipped.append(label + " (" + why + ")")
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* A run that checked NOTHING is a failure, not a pass. Every group of a
|
|
168
|
+
* section this project's corpus does not carry is skipped (see
|
|
169
|
+
* OmniRun.drive), so a corpus whose whole section went missing would
|
|
170
|
+
* otherwise finish green with zero checks — the exact silent-pass this
|
|
171
|
+
* migration exists to prevent. The corpus mains call this before finish().
|
|
172
|
+
*/
|
|
173
|
+
def requireran(what: String): Unit =
|
|
174
|
+
if (0 == passed && failures.isEmpty) {
|
|
175
|
+
fail(what, "no corpus entries ran at all - the section is missing or " +
|
|
176
|
+
"empty (skipped: " + skipped.mkString(", ") + ")")
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** Print the banner; the process exit code (0 clean, 1 on any failure). */
|
|
180
|
+
def finish(): Int = {
|
|
181
|
+
failures.foreach(println)
|
|
182
|
+
// Each entry carries its own reason now, so the header does not claim
|
|
183
|
+
// one: "absent from this corpus" was wrong for a group that is present
|
|
184
|
+
// and declares no entries.
|
|
185
|
+
if (skipped.nonEmpty) {
|
|
186
|
+
println("SKIPPED (nothing ran, and why): " + skipped.mkString(", "))
|
|
187
|
+
}
|
|
188
|
+
println(s"\n${prefix}PASS $passed FAIL ${failures.length}")
|
|
189
|
+
if (failures.nonEmpty) 1 else 0
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* One named corpus group: the node the drivers hand to the engine, the PATH
|
|
196
|
+
* that named it, and the PARENT it was looked up in. The parent is not
|
|
197
|
+
* decoration — it is the only thing that separates a section this project's
|
|
198
|
+
* corpus does not carry (benign) from a group that vanished out of a section
|
|
199
|
+
* it does carry (a regression). See decision 7.
|
|
200
|
+
*/
|
|
201
|
+
final case class OmniGroup(path: List[String], node: OJson, parent: OJson) {
|
|
202
|
+
def pathname: String = path.mkString(".")
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
/** What the runner returns for one named spec section. */
|
|
207
|
+
final class OmniRun(
|
|
208
|
+
pack: RunPack,
|
|
209
|
+
val all: OJson,
|
|
210
|
+
val report: OmniReport,
|
|
211
|
+
val sectionname: String = "") {
|
|
212
|
+
|
|
213
|
+
/** The resolved section. */
|
|
214
|
+
val spec: OJson = pack.spec
|
|
215
|
+
|
|
216
|
+
/** A raw node of the resolved section, by path. */
|
|
217
|
+
def set(keys: String*): OJson = keys.foldLeft(spec)((node, key) => node.get(key))
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* The same lookup, keeping the PARENT so the two kinds of absence stay
|
|
221
|
+
* distinguishable (decision 7). Every group a corpus driver runs comes
|
|
222
|
+
* through here.
|
|
223
|
+
*/
|
|
224
|
+
def group(keys: String*): OmniGroup = {
|
|
225
|
+
val parent = keys.dropRight(1).foldLeft(spec)((node, key) => node.get(key))
|
|
226
|
+
// The section name leads the path, so a message naming the group names
|
|
227
|
+
// it the way the corpus file does — `struct.merge.basic`, not `basic`.
|
|
228
|
+
val path = if (sectionname.isEmpty) keys.toList else sectionname :: keys.toList
|
|
229
|
+
OmniGroup(path, if (keys.isEmpty) spec else parent.get(keys.last), parent)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Run one group whose subject takes the single corpus argument. The
|
|
234
|
+
* converted argument is written back after the call (decision 2), so
|
|
235
|
+
* `match: {args: ...}` sees what the subject did to it.
|
|
236
|
+
*/
|
|
237
|
+
def runset(label: String, grp: OmniGroup, nulls: Boolean = true)(
|
|
238
|
+
subject: Value => Value): Unit =
|
|
239
|
+
drive(label, grp, nulls, args => {
|
|
240
|
+
val input = OmniResolver.tostruct(args.headOption.getOrElse(OJson.Absent))
|
|
241
|
+
val out = subject(input)
|
|
242
|
+
val back = OmniResolver.toomni(input)
|
|
243
|
+
(if (args.isEmpty) List(back) else back :: args.tail, OmniResolver.toomni(out))
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Run one group whose subject takes omni's WHOLE argument list — the shape
|
|
248
|
+
* the `primary` suite needs, where a ctx entry arrives as args(0), a MAP,
|
|
249
|
+
* which the call site turns into a typed Context and writes observable
|
|
250
|
+
* state back into (decisions 2 and 3).
|
|
251
|
+
*/
|
|
252
|
+
def runsetargs(label: String, grp: OmniGroup, nulls: Boolean = true)(
|
|
253
|
+
subject: Seq[Value] => Value): Unit =
|
|
254
|
+
drive(label, grp, nulls, args => {
|
|
255
|
+
val input = args.map(OmniResolver.tostruct)
|
|
256
|
+
val out = subject(input)
|
|
257
|
+
(input.map(OmniResolver.toomni), OmniResolver.toomni(out))
|
|
258
|
+
})
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Compare one expected/actual pair directly, for the handful of corpus
|
|
262
|
+
* nodes that are a single `{in, out}` object rather than a `set` and so
|
|
263
|
+
* never reach omni at all (`merge/basic`, `inject/basic`,
|
|
264
|
+
* `transform/basic`, `walk/log`). Both sides go through omni's own
|
|
265
|
+
* `fixjson`, which is exactly what it does to everything it runs.
|
|
266
|
+
*
|
|
267
|
+
* The group is required, not just its label: unlike `drive`, which hands a
|
|
268
|
+
* node to the engine, the CALL SITE here reads the node to build both
|
|
269
|
+
* sides. An absent or hollowed-out node therefore does not compare nothing
|
|
270
|
+
* — it compares `Noval` with `Noval`, which `fixjson` renders as NULLMARK
|
|
271
|
+
* on both sides, and NULLMARK deep-equals NULLMARK. That is a PASS with no
|
|
272
|
+
* subject and no data behind it, which is why the shape check below runs
|
|
273
|
+
* before the comparison and both sides are by-name (decision 7).
|
|
274
|
+
*/
|
|
275
|
+
def compare(label: String, grp: OmniGroup, expected: => Value, actual: => Value,
|
|
276
|
+
nulls: Boolean = true): Unit = {
|
|
277
|
+
|
|
278
|
+
if (absent(label, grp)) return
|
|
279
|
+
|
|
280
|
+
if (!grp.node.ismap || !grp.node.has("in") || !grp.node.has("out")) {
|
|
281
|
+
report.fail(label, "corpus node " + grp.pathname + " carries no in/out " +
|
|
282
|
+
"pair - there is nothing to compare, and both sides would read as null")
|
|
283
|
+
return
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
try {
|
|
287
|
+
val want = OmniResolver.fixjson(OmniResolver.toomni(expected), nulls)
|
|
288
|
+
val got = OmniResolver.fixjson(OmniResolver.toomni(actual), nulls)
|
|
289
|
+
if (OmniUtil.deepequal(want, got)) report.pass(1)
|
|
290
|
+
else report.fail(label,
|
|
291
|
+
s"Expected: ${OmniUtil.stringify(want)}, got: ${OmniUtil.stringify(got)}")
|
|
292
|
+
}
|
|
293
|
+
catch { case e: Throwable => report.fail(label, OmniResolver.errtext(e)) }
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Hand one group to omni and record the outcome (decisions 6, 7 and 8).
|
|
297
|
+
private def drive(
|
|
298
|
+
label: String,
|
|
299
|
+
grp: OmniGroup,
|
|
300
|
+
nulls: Boolean,
|
|
301
|
+
call: List[OJson] => (List[OJson], OJson)): Unit = {
|
|
302
|
+
|
|
303
|
+
if (absent(label, grp)) return
|
|
304
|
+
|
|
305
|
+
val declared = OmniResolver.entrycount(grp.node)
|
|
306
|
+
val flags = Flags(nulls = nulls, name = Some(label))
|
|
307
|
+
|
|
308
|
+
// What the ENGINE actually ran. omni's own drive loop invokes this
|
|
309
|
+
// wrapper exactly once per entry, so `ran` counts real work; the
|
|
310
|
+
// declared count is only the tripwire it is checked against
|
|
311
|
+
// (decision 8).
|
|
312
|
+
var ran = 0
|
|
313
|
+
val counted: List[OJson] => (List[OJson], OJson) = args => { ran += 1; call(args) }
|
|
314
|
+
|
|
315
|
+
try {
|
|
316
|
+
pack.runsetflagsargs(OmniResolver.retargetctx(grp.node), flags, counted)
|
|
317
|
+
|
|
318
|
+
if (ran != declared) {
|
|
319
|
+
report.fail(label, "the engine ran " + ran + " of the " + declared +
|
|
320
|
+
" entries " + grp.pathname + " declares - the pass count reports " +
|
|
321
|
+
"what RAN, so it will not paper over the gap")
|
|
322
|
+
}
|
|
323
|
+
else if (0 == declared) report.skip(label, "declares no entries")
|
|
324
|
+
else report.pass(ran)
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
case e: OmniError => report.fail(label, e.text)
|
|
328
|
+
case e: Throwable => report.fail(label, OmniResolver.errtext(e))
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* The two kinds of absence (decision 7). Returns true when the group did
|
|
334
|
+
* not run and the outcome has already been recorded.
|
|
335
|
+
*/
|
|
336
|
+
private def absent(label: String, grp: OmniGroup): Boolean =
|
|
337
|
+
if (!grp.node.isabsent) false
|
|
338
|
+
else if (grp.parent.isabsent) {
|
|
339
|
+
// The whole section is missing: a project corpus older than the
|
|
340
|
+
// section. Real fleet-wide (struct.nullsem), and not a defect — but
|
|
341
|
+
// NAMED in the banner, never passed over in silence.
|
|
342
|
+
report.skip(label, "section absent from this corpus")
|
|
343
|
+
true
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
// The section is carried and the group is not. Nothing legitimate does
|
|
347
|
+
// that, so it is a corpus regression: a skip here would let the group
|
|
348
|
+
// stop running behind a green banner.
|
|
349
|
+
report.fail(label, "corpus group " + grp.pathname + " is absent from a " +
|
|
350
|
+
"section this corpus DOES carry - the group stopped running and " +
|
|
351
|
+
"checked nothing")
|
|
352
|
+
true
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
object OmniResolver {
|
|
358
|
+
|
|
359
|
+
// The sentinels, under the names the corpus drivers already use.
|
|
360
|
+
val NULLMARK: String = OMNI_NULLMARK
|
|
361
|
+
val UNDEFMARK: String = OMNI_UNDEFMARK
|
|
362
|
+
val EXISTSMARK: String = OMNI_EXISTSMARK
|
|
363
|
+
|
|
364
|
+
// ---- the two value models (decision 1) ---------------------------------
|
|
365
|
+
|
|
366
|
+
/** omni's model -> this SDK's struct model. */
|
|
367
|
+
def tostruct(val0: OJson): Value = val0 match {
|
|
368
|
+
case OJson.Absent => Noval
|
|
369
|
+
case OJson.Null => VNull
|
|
370
|
+
case OJson.Bool(flag) => VBool(flag)
|
|
371
|
+
case OJson.Num(num) => VNum(num)
|
|
372
|
+
case OJson.Str(text) => VStr(text)
|
|
373
|
+
case OJson.JList(xs) => VList(ArrayBuffer.from(xs.map(tostruct)))
|
|
374
|
+
case OJson.JMap(xs) =>
|
|
375
|
+
val out = LinkedHashMap.empty[String, Value]
|
|
376
|
+
xs.foreach { case (key, entry) => out.put(key, tostruct(entry)) }
|
|
377
|
+
VMap(out)
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* This SDK's struct model -> omni's.
|
|
382
|
+
*
|
|
383
|
+
* `VFunc` and `VSentinel` have no JSON shape at all. They reach here only
|
|
384
|
+
* when a corpus entry puts a callable in data (`getelem` with a callable
|
|
385
|
+
* `alt`, `$APPLY`, a user `$FORMAT`) or a walker returns SKIP/DELETE, and
|
|
386
|
+
* in every such case the corpus asserts on what the call RETURNED, not on
|
|
387
|
+
* the callable. `Json.Absent` is the honest answer — it is what omni's own
|
|
388
|
+
* model says about a value that is not JSON, and omni's `fixjson` then
|
|
389
|
+
* renders it as NULLMARK under the null flag, the same place the retired
|
|
390
|
+
* hand-written `fixJson` put it.
|
|
391
|
+
*/
|
|
392
|
+
def toomni(val0: Value): OJson = val0 match {
|
|
393
|
+
case Noval => OJson.Absent
|
|
394
|
+
case VNull => OJson.Null
|
|
395
|
+
case VBool(flag) => OJson.Bool(flag)
|
|
396
|
+
case VNum(num) => OJson.Num(num)
|
|
397
|
+
case VStr(text) => OJson.Str(text)
|
|
398
|
+
case VList(buf) => OJson.JList(buf.toList.map(toomni))
|
|
399
|
+
case VMap(map) =>
|
|
400
|
+
OJson.JMap(ListMap.from(map.toSeq.map { case (key, entry) => (key, toomni(entry)) }))
|
|
401
|
+
case VFunc(_) => OJson.Absent
|
|
402
|
+
case VSentinel(_) => OJson.Absent
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// ---- spec access -------------------------------------------------------
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Load the shared corpus. omni's docs say a port must resolve the spec path
|
|
409
|
+
* itself, so it is absolutized against the working directory here.
|
|
410
|
+
*/
|
|
411
|
+
def loadspec(path: String): OJson =
|
|
412
|
+
OmniRunner.loadspec(
|
|
413
|
+
java.nio.file.Paths.get(path).toAbsolutePath.normalize.toString)
|
|
414
|
+
|
|
415
|
+
/** How many entries a group declares. */
|
|
416
|
+
def entrycount(node: OJson): Int =
|
|
417
|
+
node.get("set").aslist.map(_.length).getOrElse(0)
|
|
418
|
+
|
|
419
|
+
/** omni's own null normalisation, for values that never reach the engine. */
|
|
420
|
+
def fixjson(val0: OJson, nulls: Boolean): OJson = OmniRunner.fixjson(val0, nulls)
|
|
421
|
+
|
|
422
|
+
def errtext(err: Throwable): String = err match {
|
|
423
|
+
case e: OmniError => e.text
|
|
424
|
+
case e => Option(e.getMessage).getOrElse(String.valueOf(e))
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// ---- the runner --------------------------------------------------------
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Wrap a live SDK client as an omni provider.
|
|
431
|
+
*
|
|
432
|
+
* Only `errify` is hooked. There is no subject-by-name hook: this port's
|
|
433
|
+
* utilities are typed methods on `Utility`, so a generic name lookup cannot
|
|
434
|
+
* produce omni's `List[Json] => Json` subject without a per-name adapter,
|
|
435
|
+
* and every call site passes its subject explicitly. The corpus carries no
|
|
436
|
+
* `DEF.client` block for the sections these mains drive — a section that
|
|
437
|
+
* needs differently-optioned defaults declares `DEF.setup`, which
|
|
438
|
+
* PrimaryCorpus reads directly to build its own client.
|
|
439
|
+
*
|
|
440
|
+
* `errify` keeps the SDK error's CODE beside its message, so a corpus
|
|
441
|
+
* `match: {err: {code: ...}}` can assert on it rather than pattern-matching
|
|
442
|
+
* prose (the Scala analogue of the java/csharp resolvers' same hook).
|
|
443
|
+
*/
|
|
444
|
+
def sdkProvider(): Provider = Provider(
|
|
445
|
+
errify = Some((err: Throwable) => err match {
|
|
446
|
+
case e: SdkError =>
|
|
447
|
+
var out = ListMap(
|
|
448
|
+
"name" -> OJson.Str("SdkError"),
|
|
449
|
+
"message" -> OJson.Str(String.valueOf(e.getMessage)))
|
|
450
|
+
if (e.code != null && e.code.nonEmpty) {
|
|
451
|
+
out = out.updated("code", OJson.Str(e.code))
|
|
452
|
+
}
|
|
453
|
+
OJson.JMap(out)
|
|
454
|
+
case other => OmniRunner.errify(other)
|
|
455
|
+
})
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
/** A runner over an already-parsed spec (omni's own capability, which keeps
|
|
459
|
+
* the smoke test free of a fixture file). */
|
|
460
|
+
def makeRunner(spec: OJson): RunnerPack = OmniRunner.makeRunner(spec, sdkProvider())
|
|
461
|
+
|
|
462
|
+
/** A runner over the shared corpus at `path`. */
|
|
463
|
+
def makeRunner(path: String): RunnerPack = makeRunner(loadspec(path))
|
|
464
|
+
|
|
465
|
+
/** Resolve one named section (`primary.<name>`, then `<name>`). */
|
|
466
|
+
def section(pack: RunnerPack, all: OJson, name: String, report: OmniReport): OmniRun =
|
|
467
|
+
new OmniRun(pack.runner(name), all, report, name)
|
|
468
|
+
|
|
469
|
+
// ---- decision 3 --------------------------------------------------------
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* Retarget `match: {ctx: ...}` onto `match: {args: {"0": ...}}`, and only
|
|
473
|
+
* when the entry HAS a ctx or args (so args(0) IS that map) and the check
|
|
474
|
+
* does not already assert on `args`. See decision 3 above.
|
|
475
|
+
*/
|
|
476
|
+
def retargetctx(testspec: OJson): OJson = testspec.get("set").aslist match {
|
|
477
|
+
case None => testspec
|
|
478
|
+
case Some(entries) =>
|
|
479
|
+
val out = entries.map { entry =>
|
|
480
|
+
val check = entry.get("match")
|
|
481
|
+
if (entry.ismap && check.ismap && check.has("ctx") && !check.has("args") &&
|
|
482
|
+
(entry.has("ctx") || entry.has("args"))) {
|
|
483
|
+
var newcheck = ListMap.empty[String, OJson]
|
|
484
|
+
check.asmap.get.foreach { case (key, sub) =>
|
|
485
|
+
// Drop the original leaf: it would read the stale pre-call copy
|
|
486
|
+
// omni keeps in `entry.ctx`.
|
|
487
|
+
if ("ctx" != key) newcheck = newcheck.updated(key, sub)
|
|
488
|
+
}
|
|
489
|
+
newcheck = newcheck.updated("args",
|
|
490
|
+
OJson.JMap(ListMap("0" -> check.get("ctx"))))
|
|
491
|
+
entry.set("match", OJson.JMap(newcheck))
|
|
492
|
+
}
|
|
493
|
+
else entry
|
|
494
|
+
}
|
|
495
|
+
testspec.set("set", OJson.JList(out))
|
|
496
|
+
}
|
|
497
|
+
}
|