@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
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
// VENDORED: @voxgig/omni 0.1.2 (typescript/compat/struct.ts), import path adapted ('../src' -> './index').
|
|
2
|
-
// Source: https://github.com/voxgig/omni @ 5956cc4e5ecdaeebd11eab8bb4b9462dfc76e018
|
|
3
|
-
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
-
// Drop-in replacement for the in-situ test runner in the voxgig/struct
|
|
5
|
-
// repository (`typescript/test/runner.ts`).
|
|
6
|
-
//
|
|
7
|
-
// struct's own runner and omni's runner implement the same spec format;
|
|
8
|
-
// this module exposes omni behind struct's exact runner API, so a struct
|
|
9
|
-
// port switches over by changing one import:
|
|
10
|
-
//
|
|
11
|
-
// -import { makeRunner, nullModifier, NULLMARK } from './runner'
|
|
12
|
-
// +import { makeRunner, nullModifier, NULLMARK } from './omni'
|
|
13
|
-
//
|
|
14
|
-
// where `./omni` is a small resolver in the port's test directory that
|
|
15
|
-
// locates a local omni checkout. Everything else - the corpus, the SDK,
|
|
16
|
-
// the test file - is unchanged. This is the TypeScript peer of
|
|
17
|
-
// javascript/compat/struct.js and python/voxgig_omni/compat/struct.py.
|
|
18
|
-
|
|
19
|
-
import { dirname, isAbsolute, join, sep } from 'node:path'
|
|
20
|
-
import { fileURLToPath } from 'node:url'
|
|
21
|
-
|
|
22
|
-
import { EXISTSMARK, NULLMARK, UNDEFMARK, makeRunner as omnimakerunner, nullmodifier } from './index'
|
|
23
|
-
|
|
24
|
-
import type { Json, Provider, Subject } from './index'
|
|
25
|
-
|
|
26
|
-
// struct's data model is JSON-shaped `any` at its boundaries, and so is
|
|
27
|
-
// its SDK; these aliases say that on purpose rather than by omission.
|
|
28
|
-
export type StructSDK = any
|
|
29
|
-
export type StructUtility = any
|
|
30
|
-
|
|
31
|
-
// struct's runner API, name for name.
|
|
32
|
-
export type StructSubject = (...args: any[]) => any
|
|
33
|
-
|
|
34
|
-
export type StructRunSet = (testspec: any, testsubject?: StructSubject) => Promise<void>
|
|
35
|
-
|
|
36
|
-
export type StructRunSetFlags = (
|
|
37
|
-
testspec: any,
|
|
38
|
-
flags: Record<string, any>,
|
|
39
|
-
testsubject?: StructSubject,
|
|
40
|
-
) => Promise<void>
|
|
41
|
-
|
|
42
|
-
export type StructRunPack = {
|
|
43
|
-
spec: any
|
|
44
|
-
runset: StructRunSet
|
|
45
|
-
runsetflags: StructRunSetFlags
|
|
46
|
-
subject?: StructSubject
|
|
47
|
-
client: StructProvider
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export type StructRunner = (name: string, store?: any) => Promise<StructRunPack>
|
|
51
|
-
|
|
52
|
-
// An omni provider that is also a struct client: test code reaches through
|
|
53
|
-
// the runpack's `client` as an SDK (`client.utility().struct`), so the
|
|
54
|
-
// wrapper forwards `utility()` and `tester()` alongside the four hooks.
|
|
55
|
-
export type StructProvider = Provider & {
|
|
56
|
-
utility: () => StructUtility
|
|
57
|
-
tester: (options?: any) => any
|
|
58
|
-
sdk: StructSDK
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// The directory this shim was loaded from: dist/compat when built, compat
|
|
62
|
-
// when run from source. Its parent is the port root, so every frame from
|
|
63
|
-
// inside omni is skipped when locating the caller.
|
|
64
|
-
//
|
|
65
|
-
// It is derived from __dirname rather than matched against a known path,
|
|
66
|
-
// so it holds wherever the package sits - a checkout, or
|
|
67
|
-
// node_modules/@voxgig/omni. The trailing separator matters: without it a
|
|
68
|
-
// sibling whose name merely EXTENDS this one (`omni-js-extra` beside
|
|
69
|
-
// `omni-js`) would read as inside.
|
|
70
|
-
const OMNIDIR = dirname(__dirname)
|
|
71
|
-
|
|
72
|
-
// A relative test-file path is resolved against the first stack frame
|
|
73
|
-
// outside omni - the caller.
|
|
74
|
-
//
|
|
75
|
-
// PREFER AN ABSOLUTE PATH. This heuristic guesses at what "relative to"
|
|
76
|
-
// means, and the guess is wrong whenever a consumer's test FILES sit at a
|
|
77
|
-
// different depth from the module that loads the runner. struct's TypeScript
|
|
78
|
-
// port is exactly that shape: its loader compiles to `dist-test/` and its
|
|
79
|
-
// test files to `dist-test/utility/`, so the same relative string resolved
|
|
80
|
-
// one directory too deep and read `typescript/build/test/test.json`. That
|
|
81
|
-
// port now resolves the path itself, in `test/omni.ts`, and never reaches
|
|
82
|
-
// this. (An earlier version of this comment asserted it already did - it did
|
|
83
|
-
// not; this shim shipped before any consumer had proved it.)
|
|
84
|
-
// A stack frame's file, as a filesystem path.
|
|
85
|
-
//
|
|
86
|
-
// An ESM caller's frame reports a file:// URL rather than a path, and
|
|
87
|
-
// `dirname('file:///a/b.mjs')` yields 'file:/a', so a relative spec path
|
|
88
|
-
// resolved against it died on `ENOENT ... 'file:/.../fib.json'`. Frames
|
|
89
|
-
// that name no path at all - node: internals, data: URLs, eval - are
|
|
90
|
-
// skipped rather than mistaken for the caller.
|
|
91
|
-
function framepath(frame: any): string | null {
|
|
92
|
-
const file = 'function' === typeof frame.getFileName ? frame.getFileName() : null
|
|
93
|
-
if (null == file) {
|
|
94
|
-
return null
|
|
95
|
-
}
|
|
96
|
-
if (file.startsWith('file://')) {
|
|
97
|
-
try {
|
|
98
|
-
return fileURLToPath(file)
|
|
99
|
-
} catch {
|
|
100
|
-
return null
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return isAbsolute(file) ? file : null
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function callerdir(): string {
|
|
107
|
-
const original = Error.prepareStackTrace
|
|
108
|
-
Error.prepareStackTrace = (_err, stack) => stack
|
|
109
|
-
const holder: any = {}
|
|
110
|
-
Error.captureStackTrace(holder, callerdir)
|
|
111
|
-
const stack: any = holder.stack
|
|
112
|
-
Error.prepareStackTrace = original
|
|
113
|
-
|
|
114
|
-
for (const frame of stack) {
|
|
115
|
-
const file = framepath(frame)
|
|
116
|
-
if (file && !file.startsWith(OMNIDIR + sep)) {
|
|
117
|
-
return dirname(file)
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return process.cwd()
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Wrap a struct SDK client as an omni provider.
|
|
125
|
-
function structprovider(sdk: StructSDK): StructProvider {
|
|
126
|
-
return {
|
|
127
|
-
// struct resolves a subject from the utility, or from utility.struct.
|
|
128
|
-
subject: (name: string): Subject | undefined => {
|
|
129
|
-
const utility = sdk.utility()
|
|
130
|
-
return utility[name] || (utility.struct && utility.struct[name])
|
|
131
|
-
},
|
|
132
|
-
|
|
133
|
-
// A DEF.client entry becomes another SDK instance.
|
|
134
|
-
client: async (options: Json) => structprovider(await sdk.tester(options)),
|
|
135
|
-
|
|
136
|
-
// struct's SDK supplies its own context wrapper.
|
|
137
|
-
contextify: (val: Json): Json => {
|
|
138
|
-
const utility = sdk.utility()
|
|
139
|
-
const hook =
|
|
140
|
-
'function' === typeof utility.contextify
|
|
141
|
-
? utility.contextify
|
|
142
|
-
: 'function' === typeof utility.makeContext
|
|
143
|
-
? utility.makeContext
|
|
144
|
-
: null
|
|
145
|
-
const ctx = null == hook ? val : hook.call(utility, val)
|
|
146
|
-
if (null != ctx && 'object' === typeof ctx) {
|
|
147
|
-
;(ctx as any).utility = utility
|
|
148
|
-
}
|
|
149
|
-
return ctx
|
|
150
|
-
},
|
|
151
|
-
|
|
152
|
-
// Client options may reference the runner store.
|
|
153
|
-
inject: (options: Json, store: Json): Json => {
|
|
154
|
-
const structutils = sdk.utility().struct
|
|
155
|
-
if (structutils && 'function' === typeof structutils.inject) {
|
|
156
|
-
return structutils.inject(options, store)
|
|
157
|
-
}
|
|
158
|
-
return options
|
|
159
|
-
},
|
|
160
|
-
|
|
161
|
-
utility: () => sdk.utility(),
|
|
162
|
-
tester: (options?: any) => sdk.tester(options),
|
|
163
|
-
sdk,
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// struct's makeRunner(testfile, client) signature, backed by omni.
|
|
168
|
-
async function makeRunner(testfile: string, client: StructSDK): Promise<StructRunner> {
|
|
169
|
-
const specpath = isAbsolute(testfile) ? testfile : join(callerdir(), testfile)
|
|
170
|
-
const provider = structprovider(client)
|
|
171
|
-
const runner = await omnimakerunner(specpath, provider)
|
|
172
|
-
|
|
173
|
-
return async function structrunner(name: string, store?: any): Promise<StructRunPack> {
|
|
174
|
-
const runpack = await runner(name, store)
|
|
175
|
-
|
|
176
|
-
return {
|
|
177
|
-
spec: runpack.spec,
|
|
178
|
-
runset: runpack.runset,
|
|
179
|
-
runsetflags: runpack.runsetflags,
|
|
180
|
-
subject: runpack.subject,
|
|
181
|
-
client: provider,
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
const nullModifier = nullmodifier
|
|
187
|
-
|
|
188
|
-
export { EXISTSMARK, NULLMARK, UNDEFMARK, makeRunner, nullModifier, structprovider }
|
|
@@ -1,464 +0,0 @@
|
|
|
1
|
-
// Test runner for Zig — loads build/test/test.json and drives specs
|
|
2
|
-
// against subject functions, mirroring the TS/Go runner pattern.
|
|
3
|
-
|
|
4
|
-
const std = @import("std");
|
|
5
|
-
const regex = @import("../utility/voxgigstruct/regex.zig");
|
|
6
|
-
const voxgig_struct = @import("voxgig-struct");
|
|
7
|
-
|
|
8
|
-
const Allocator = std.mem.Allocator;
|
|
9
|
-
const StdJsonValue = std.json.Value;
|
|
10
|
-
const JsonValue = voxgig_struct.JsonValue;
|
|
11
|
-
|
|
12
|
-
pub const NULLMARK = "__NULL__";
|
|
13
|
-
pub const UNDEFMARK = "__UNDEF__";
|
|
14
|
-
pub const EXISTSMARK = "__EXISTS__";
|
|
15
|
-
|
|
16
|
-
pub const TEST_JSON_FILE = "../.sdk/test/test.json";
|
|
17
|
-
|
|
18
|
-
// Subject that takes only a std.json.Value (for simple is* functions).
|
|
19
|
-
pub const Subject = *const fn (StdJsonValue) StdJsonValue;
|
|
20
|
-
|
|
21
|
-
// Subject that takes an allocator and our JsonValue type.
|
|
22
|
-
pub const AllocSubject = *const fn (Allocator, JsonValue) JsonValue;
|
|
23
|
-
|
|
24
|
-
/// A subject that receives the whole corpus ENTRY and returns std.json.
|
|
25
|
-
///
|
|
26
|
-
/// `published` is an out-parameter for the context the subject built. std.json
|
|
27
|
-
/// maps cannot be mutated in place safely from here — a put may reallocate the
|
|
28
|
-
/// backing store and the caller would never see it — so a section that needs a
|
|
29
|
-
/// `match: ctx.*` assertion hands its ctx back through this instead.
|
|
30
|
-
pub const EntrySubject = *const fn (
|
|
31
|
-
Allocator,
|
|
32
|
-
StdJsonValue,
|
|
33
|
-
*?StdJsonValue,
|
|
34
|
-
/// The SDK's own error message. Zig errors carry no payload, so
|
|
35
|
-
/// @errorName gives the tag ("Sdk") and never the text the corpus matches
|
|
36
|
-
/// on. A subject that fails writes ctx.pending_err's message here.
|
|
37
|
-
*?[]const u8,
|
|
38
|
-
) anyerror!StdJsonValue;
|
|
39
|
-
|
|
40
|
-
pub const Spec = struct {
|
|
41
|
-
data: StdJsonValue,
|
|
42
|
-
|
|
43
|
-
pub fn get(self: Spec, key: []const u8) ?StdJsonValue {
|
|
44
|
-
return switch (self.data) {
|
|
45
|
-
.object => |obj| obj.get(key),
|
|
46
|
-
else => null,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
pub const RunPack = struct {
|
|
52
|
-
spec: Spec,
|
|
53
|
-
allocator: Allocator,
|
|
54
|
-
file_data: []const u8,
|
|
55
|
-
/// Cases actually executed, so a suite can assert it ran something.
|
|
56
|
-
ran: usize = 0,
|
|
57
|
-
parsed: std.json.Parsed(StdJsonValue),
|
|
58
|
-
|
|
59
|
-
/// Run all entries in testspec.set against the subject function (no alloc, std types).
|
|
60
|
-
pub fn runset(self: RunPack, testspec: StdJsonValue, subject: Subject) !void {
|
|
61
|
-
try self.runsetflags(testspec, .{}, subject);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/// Run with flags (e.g. .{ .null_flag = false }).
|
|
65
|
-
pub fn runsetflags(self: RunPack, testspec: StdJsonValue, flags: Flags, subject: Subject) !void {
|
|
66
|
-
_ = self;
|
|
67
|
-
const set = switch (testspec) {
|
|
68
|
-
.object => |obj| obj.get("set") orelse return error.NoSetInSpec,
|
|
69
|
-
else => return error.SpecNotObject,
|
|
70
|
-
};
|
|
71
|
-
const entries = switch (set) {
|
|
72
|
-
.array => |arr| arr.items,
|
|
73
|
-
else => return error.SetNotArray,
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
for (entries) |entry_val| {
|
|
77
|
-
const entry = switch (entry_val) {
|
|
78
|
-
.object => |obj| obj,
|
|
79
|
-
else => continue,
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const in_val: StdJsonValue = entry.get("in") orelse .null;
|
|
83
|
-
const raw_out = entry.get("out");
|
|
84
|
-
const expected: StdJsonValue = if (raw_out) |o| o else if (flags.null_flag) StdJsonValue{ .string = NULLMARK } else .null;
|
|
85
|
-
const err_field = entry.get("err");
|
|
86
|
-
|
|
87
|
-
const result = subject(in_val);
|
|
88
|
-
if (err_field != null) continue;
|
|
89
|
-
try checkResult(expected, result);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/// Run all entries against an allocator-aware subject (uses our JsonValue type).
|
|
94
|
-
pub fn runsetAlloc(self: RunPack, testspec: StdJsonValue, subject: AllocSubject) !void {
|
|
95
|
-
try self.runsetAllocFlags(testspec, .{}, subject);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/// Run with flags against an allocator-aware subject.
|
|
99
|
-
pub fn runsetAllocFlags(self: RunPack, testspec: StdJsonValue, flags: Flags, subject: AllocSubject) !void {
|
|
100
|
-
const set = switch (testspec) {
|
|
101
|
-
.object => |obj| obj.get("set") orelse return error.NoSetInSpec,
|
|
102
|
-
else => return error.SpecNotObject,
|
|
103
|
-
};
|
|
104
|
-
const entries = switch (set) {
|
|
105
|
-
.array => |arr| arr.items,
|
|
106
|
-
else => return error.SetNotArray,
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
for (entries, 0..) |entry_val, entry_idx| {
|
|
110
|
-
const entry = switch (entry_val) {
|
|
111
|
-
.object => |obj| obj,
|
|
112
|
-
else => continue,
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
const has_in = entry.get("in") != null;
|
|
116
|
-
const in_val_std: StdJsonValue = entry.get("in") orelse
|
|
117
|
-
if (flags.undef_as_null) .null else StdJsonValue{ .string = UNDEFMARK };
|
|
118
|
-
|
|
119
|
-
const raw_out = entry.get("out");
|
|
120
|
-
const expected: StdJsonValue = if (raw_out) |o| o else if (flags.null_flag) StdJsonValue{ .string = NULLMARK } else .null;
|
|
121
|
-
|
|
122
|
-
const err_field = entry.get("err");
|
|
123
|
-
_ = has_in;
|
|
124
|
-
|
|
125
|
-
// Use an arena allocator for each test case.
|
|
126
|
-
var arena = std.heap.ArenaAllocator.init(self.allocator);
|
|
127
|
-
defer arena.deinit();
|
|
128
|
-
const alloc = arena.allocator();
|
|
129
|
-
|
|
130
|
-
// Convert std.json input to our JsonValue type.
|
|
131
|
-
const in_val = voxgig_struct.fromStdJson(alloc, in_val_std) catch .null;
|
|
132
|
-
|
|
133
|
-
const result_jval = subject(alloc, in_val);
|
|
134
|
-
|
|
135
|
-
if (err_field != null) continue;
|
|
136
|
-
|
|
137
|
-
// Convert our result back to std.json for comparison.
|
|
138
|
-
const result = voxgig_struct.toStdJson(alloc, result_jval) catch StdJsonValue{ .null = {} };
|
|
139
|
-
|
|
140
|
-
checkResult(expected, result) catch |e| {
|
|
141
|
-
std.debug.print(" [test entry {d}]\n", .{entry_idx});
|
|
142
|
-
return e;
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/// Drive a section whose entries carry ctx/args/match/err.
|
|
148
|
-
///
|
|
149
|
-
/// The subject receives the whole ENTRY, not the resolved args, because an
|
|
150
|
-
/// args-style section has to publish the context it builds back onto the
|
|
151
|
-
/// entry — a `match: ctx.*` assertion reads it from there.
|
|
152
|
-
pub fn runsetEntry(self: *RunPack, testspec: StdJsonValue, subject: EntrySubject) !void {
|
|
153
|
-
const set_val = switch (testspec) {
|
|
154
|
-
.object => |obj| obj.get("set") orelse return,
|
|
155
|
-
else => return,
|
|
156
|
-
};
|
|
157
|
-
if (set_val != .array) return;
|
|
158
|
-
|
|
159
|
-
var failures: usize = 0;
|
|
160
|
-
|
|
161
|
-
for (set_val.array.items, 0..) |entry_val, entry_idx| {
|
|
162
|
-
if (entry_val != .object) continue;
|
|
163
|
-
const entry = entry_val.object;
|
|
164
|
-
|
|
165
|
-
var arena = std.heap.ArenaAllocator.init(self.allocator);
|
|
166
|
-
defer arena.deinit();
|
|
167
|
-
const alloc = arena.allocator();
|
|
168
|
-
|
|
169
|
-
const err_field = entry.get("err");
|
|
170
|
-
|
|
171
|
-
self.ran += 1;
|
|
172
|
-
var published: ?StdJsonValue = null;
|
|
173
|
-
var errmsg: ?[]const u8 = null;
|
|
174
|
-
|
|
175
|
-
const res = subject(alloc, entry_val, &published, &errmsg) catch |e| {
|
|
176
|
-
// An expected error: match its text, then any `match` block.
|
|
177
|
-
if (err_field) |ef| {
|
|
178
|
-
const msg = errmsg orelse @errorName(e);
|
|
179
|
-
if (ef == .bool and ef.bool) continue;
|
|
180
|
-
if (matchval(alloc, ef, StdJsonValue{ .string = msg })) continue;
|
|
181
|
-
std.debug.print("\n ERROR MATCH [entry {d}]: [{s}] <=> [{s}]\n", .{
|
|
182
|
-
entry_idx, fmtJson(ef), msg,
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
failures += 1;
|
|
186
|
-
continue;
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
if (err_field != null) {
|
|
190
|
-
std.debug.print("\n expected an error [entry {d}]\n", .{entry_idx});
|
|
191
|
-
failures += 1;
|
|
192
|
-
continue;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
var matched = false;
|
|
196
|
-
|
|
197
|
-
if (entry.get("match")) |m| {
|
|
198
|
-
var subj = std.json.ObjectMap.init(alloc);
|
|
199
|
-
subj.put("out", res) catch {};
|
|
200
|
-
if (entry.get("in")) |v| subj.put("in", v) catch {};
|
|
201
|
-
if (published) |p| {
|
|
202
|
-
subj.put("ctx", p) catch {};
|
|
203
|
-
} else if (entry.get("ctx")) |v| {
|
|
204
|
-
subj.put("ctx", v) catch {};
|
|
205
|
-
}
|
|
206
|
-
const subjval = StdJsonValue{ .object = subj };
|
|
207
|
-
|
|
208
|
-
var path = std.ArrayList([]const u8).init(alloc);
|
|
209
|
-
doMatch(alloc, m, subjval, &path) catch {
|
|
210
|
-
std.debug.print(" [entry {d}]\n", .{entry_idx});
|
|
211
|
-
failures += 1;
|
|
212
|
-
continue;
|
|
213
|
-
};
|
|
214
|
-
matched = true;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
const raw_out = entry.get("out");
|
|
218
|
-
|
|
219
|
-
if (raw_out) |o| {
|
|
220
|
-
if (jsonEqual(o, res)) continue;
|
|
221
|
-
if (o == .string and std.mem.eql(u8, o.string, NULLMARK) and res == .null) continue;
|
|
222
|
-
std.debug.print("\n FAIL [entry {d}]: expected {s} got {s}\n", .{
|
|
223
|
-
entry_idx, fmtJson(o), fmtJson(res),
|
|
224
|
-
});
|
|
225
|
-
failures += 1;
|
|
226
|
-
} else if (!matched) {
|
|
227
|
-
// NO `out` MEANS EXPECT NULL, not "assert nothing". The
|
|
228
|
-
// reference sets a missing out to the null marker before
|
|
229
|
-
// running, so an entry like {"ctx": {"opname": "bad"}} asserts
|
|
230
|
-
// that the utility yields nothing.
|
|
231
|
-
if (res == .null) continue;
|
|
232
|
-
std.debug.print("\n FAIL [entry {d}]: expected null got {s}\n", .{
|
|
233
|
-
entry_idx, fmtJson(res),
|
|
234
|
-
});
|
|
235
|
-
failures += 1;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
if (0 < failures) return error.SectionFailed;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
pub fn deinit(self: *RunPack) void {
|
|
243
|
-
self.parsed.deinit();
|
|
244
|
-
self.allocator.free(self.file_data);
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
pub const Flags = struct {
|
|
249
|
-
null_flag: bool = true,
|
|
250
|
-
undef_as_null: bool = true,
|
|
251
|
-
};
|
|
252
|
-
|
|
253
|
-
/// Load test.json and return a named top-level spec section.
|
|
254
|
-
///
|
|
255
|
-
/// makeRunner is this with "struct" baked in. The primary-utility suite needs
|
|
256
|
-
/// "primary" from the same file, and duplicating the load would give the two
|
|
257
|
-
/// suites separate copies of a corpus that is meant to be shared.
|
|
258
|
-
pub fn makeRunnerFor(allocator: Allocator, section: []const u8) !RunPack {
|
|
259
|
-
const data = try std.fs.cwd().readFileAlloc(allocator, TEST_JSON_FILE, 10 * 1024 * 1024);
|
|
260
|
-
const parsed = try std.json.parseFromSlice(StdJsonValue, allocator, data, .{});
|
|
261
|
-
const root = parsed.value;
|
|
262
|
-
|
|
263
|
-
const spec_val = switch (root) {
|
|
264
|
-
.object => |obj| obj.get(section) orelse return error.NoSectionInTestJson,
|
|
265
|
-
else => return error.TestJsonNotObject,
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
return RunPack{
|
|
269
|
-
.spec = Spec{ .data = spec_val },
|
|
270
|
-
.allocator = allocator,
|
|
271
|
-
.file_data = data,
|
|
272
|
-
.parsed = parsed,
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
/// Load test.json and return the "struct" spec.
|
|
277
|
-
pub fn makeRunner(allocator: Allocator) !RunPack {
|
|
278
|
-
const path = TEST_JSON_FILE;
|
|
279
|
-
const data = try std.fs.cwd().readFileAlloc(allocator, path, 10 * 1024 * 1024);
|
|
280
|
-
const parsed = try std.json.parseFromSlice(StdJsonValue, allocator, data, .{});
|
|
281
|
-
const root = parsed.value;
|
|
282
|
-
|
|
283
|
-
const spec_val = switch (root) {
|
|
284
|
-
.object => |obj| obj.get("struct") orelse return error.NoStructInTestJson,
|
|
285
|
-
else => return error.TestJsonNotObject,
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
return RunPack{
|
|
289
|
-
.spec = Spec{ .data = spec_val },
|
|
290
|
-
.allocator = allocator,
|
|
291
|
-
.file_data = data,
|
|
292
|
-
.parsed = parsed,
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// ---- Corpus matching: matchval / doMatch ----
|
|
297
|
-
//
|
|
298
|
-
// The primary corpus asserts with `match` as often as with `out`, and its
|
|
299
|
-
// error expectations are regexes. runsetAlloc resolved only `in`, had no
|
|
300
|
-
// match support and silently skipped any entry carrying `err` — so it could
|
|
301
|
-
// drive the struct corpus but not this one. Semantics are the reference's:
|
|
302
|
-
// exact equality first, then __UNDEF__/__EXISTS__ markers, then a /regex/, and
|
|
303
|
-
// finally a case-insensitive substring.
|
|
304
|
-
|
|
305
|
-
fn stringifyAlloc(alloc: Allocator, v: StdJsonValue) []const u8 {
|
|
306
|
-
var buf = std.ArrayList(u8).init(alloc);
|
|
307
|
-
if (v == .string) return v.string;
|
|
308
|
-
std.json.stringify(v, .{}, buf.writer()) catch return "";
|
|
309
|
-
return buf.items;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
pub fn matchval(alloc: Allocator, check: StdJsonValue, base: StdJsonValue) bool {
|
|
313
|
-
if (jsonEqual(check, base)) return true;
|
|
314
|
-
|
|
315
|
-
if (check == .string) {
|
|
316
|
-
const c = check.string;
|
|
317
|
-
if (std.mem.eql(u8, c, UNDEFMARK)) return base == .null;
|
|
318
|
-
if (std.mem.eql(u8, c, EXISTSMARK)) return base != .null;
|
|
319
|
-
|
|
320
|
-
const basestr = stringifyAlloc(alloc, base);
|
|
321
|
-
|
|
322
|
-
// A /pattern/ is a regex over the stringified base.
|
|
323
|
-
if (2 <= c.len and c[0] == '/' and c[c.len - 1] == '/') {
|
|
324
|
-
const pat = c[1 .. c.len - 1];
|
|
325
|
-
var re = regex.compile(alloc, pat) orelse return false;
|
|
326
|
-
defer re.deinit();
|
|
327
|
-
return re.isMatch(basestr);
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
// Otherwise a case-insensitive substring, as the reference does.
|
|
331
|
-
const lc_base = std.ascii.allocLowerString(alloc, basestr) catch return false;
|
|
332
|
-
const lc_check = std.ascii.allocLowerString(alloc, c) catch return false;
|
|
333
|
-
return std.mem.indexOf(u8, lc_base, lc_check) != null;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
return false;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
fn getPath(base: StdJsonValue, path: []const []const u8) StdJsonValue {
|
|
340
|
-
var cur = base;
|
|
341
|
-
for (path) |seg| {
|
|
342
|
-
switch (cur) {
|
|
343
|
-
.object => |o| cur = o.get(seg) orelse return StdJsonValue{ .null = {} },
|
|
344
|
-
.array => |a| {
|
|
345
|
-
const idx = std.fmt.parseInt(usize, seg, 10) catch return StdJsonValue{ .null = {} };
|
|
346
|
-
if (idx >= a.items.len) return StdJsonValue{ .null = {} };
|
|
347
|
-
cur = a.items[idx];
|
|
348
|
-
},
|
|
349
|
-
else => return StdJsonValue{ .null = {} },
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
return cur;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
/// Walk `check`; every LEAF must matchval against the same path in `base`.
|
|
356
|
-
pub fn doMatch(
|
|
357
|
-
alloc: Allocator,
|
|
358
|
-
check: StdJsonValue,
|
|
359
|
-
base: StdJsonValue,
|
|
360
|
-
path: *std.ArrayList([]const u8),
|
|
361
|
-
) !void {
|
|
362
|
-
switch (check) {
|
|
363
|
-
.object => |o| {
|
|
364
|
-
var it = o.iterator();
|
|
365
|
-
while (it.next()) |kv| {
|
|
366
|
-
try path.append(kv.key_ptr.*);
|
|
367
|
-
try doMatch(alloc, kv.value_ptr.*, base, path);
|
|
368
|
-
_ = path.pop();
|
|
369
|
-
}
|
|
370
|
-
},
|
|
371
|
-
.array => |a| {
|
|
372
|
-
for (a.items, 0..) |item, i| {
|
|
373
|
-
const seg = try std.fmt.allocPrint(alloc, "{d}", .{i});
|
|
374
|
-
try path.append(seg);
|
|
375
|
-
try doMatch(alloc, item, base, path);
|
|
376
|
-
_ = path.pop();
|
|
377
|
-
}
|
|
378
|
-
},
|
|
379
|
-
else => {
|
|
380
|
-
const baseval = getPath(base, path.items);
|
|
381
|
-
if (!matchval(alloc, check, baseval)) {
|
|
382
|
-
std.debug.print("\n MATCH: {s}: [{s}] <=> [{s}]\n", .{
|
|
383
|
-
joinPath(alloc, path.items),
|
|
384
|
-
fmtJson(check),
|
|
385
|
-
fmtJson(baseval),
|
|
386
|
-
});
|
|
387
|
-
return error.MatchMismatch;
|
|
388
|
-
}
|
|
389
|
-
},
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
fn joinPath(alloc: Allocator, parts: []const []const u8) []const u8 {
|
|
394
|
-
return std.mem.join(alloc, ".", parts) catch "?";
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// ---- Result comparison (operates on std.json.Value) ----
|
|
398
|
-
|
|
399
|
-
fn checkResult(expected: StdJsonValue, result: StdJsonValue) !void {
|
|
400
|
-
if (jsonEqual(expected, result)) return;
|
|
401
|
-
|
|
402
|
-
if (expected == .string) {
|
|
403
|
-
if (std.mem.eql(u8, expected.string, NULLMARK)) {
|
|
404
|
-
if (result == .null) return;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
std.debug.print("\n FAIL: expected {s} got {s}\n", .{
|
|
409
|
-
fmtJson(expected),
|
|
410
|
-
fmtJson(result),
|
|
411
|
-
});
|
|
412
|
-
return error.ResultMismatch;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
fn fmtJson(val: StdJsonValue) []const u8 {
|
|
416
|
-
// Best-effort one-line representation for diagnostic output. Uses the
|
|
417
|
-
// process-wide page allocator so the lifetime is OK for a print-and-die.
|
|
418
|
-
var buf = std.ArrayList(u8).init(std.heap.page_allocator);
|
|
419
|
-
std.json.stringify(val, .{}, buf.writer()) catch return "?";
|
|
420
|
-
return buf.items;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
/// Deep equality for std.json.Value.
|
|
424
|
-
pub fn jsonEqual(a: StdJsonValue, b: StdJsonValue) bool {
|
|
425
|
-
const TagType = std.meta.Tag(StdJsonValue);
|
|
426
|
-
const tag_a: TagType = a;
|
|
427
|
-
const tag_b: TagType = b;
|
|
428
|
-
|
|
429
|
-
// Allow integer/float cross-comparison for numeric equality.
|
|
430
|
-
if ((tag_a == .integer or tag_a == .float) and (tag_b == .integer or tag_b == .float)) {
|
|
431
|
-
const fa: f64 = if (tag_a == .integer) @floatFromInt(a.integer) else a.float;
|
|
432
|
-
const fb: f64 = if (tag_b == .integer) @floatFromInt(b.integer) else b.float;
|
|
433
|
-
return fa == fb;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
if (tag_a != tag_b) return false;
|
|
437
|
-
|
|
438
|
-
return switch (a) {
|
|
439
|
-
.null => true,
|
|
440
|
-
.bool => |av| av == b.bool,
|
|
441
|
-
.integer => |av| av == b.integer,
|
|
442
|
-
.float => |av| av == b.float,
|
|
443
|
-
.string => |av| std.mem.eql(u8, av, b.string),
|
|
444
|
-
.number_string => |av| std.mem.eql(u8, av, b.number_string),
|
|
445
|
-
.array => |av| {
|
|
446
|
-
const bv = b.array;
|
|
447
|
-
if (av.items.len != bv.items.len) return false;
|
|
448
|
-
for (av.items, bv.items) |ai, bi| {
|
|
449
|
-
if (!jsonEqual(ai, bi)) return false;
|
|
450
|
-
}
|
|
451
|
-
return true;
|
|
452
|
-
},
|
|
453
|
-
.object => |av| {
|
|
454
|
-
const bv = b.object;
|
|
455
|
-
if (av.count() != bv.count()) return false;
|
|
456
|
-
var it = av.iterator();
|
|
457
|
-
while (it.next()) |kv| {
|
|
458
|
-
const bval = bv.get(kv.key_ptr.*) orelse return false;
|
|
459
|
-
if (!jsonEqual(kv.value_ptr.*, bval)) return false;
|
|
460
|
-
}
|
|
461
|
-
return true;
|
|
462
|
-
},
|
|
463
|
-
};
|
|
464
|
-
}
|