@voxgig/sdkgen 4.8.2 → 4.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/dist/action/doctor.d.ts +1 -0
- package/dist/action/doctor.js +50 -2
- package/dist/action/doctor.js.map +1 -1
- package/dist/helpers/naming.js +4 -2
- package/dist/helpers/naming.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/model/sdkgen.aon +21 -0
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +120 -18
- package/project/.sdk/model/target/c.aon +10 -0
- package/project/.sdk/model/target/clojure.aon +13 -0
- package/project/.sdk/model/target/cpp.aon +10 -0
- package/project/.sdk/model/target/csharp.aon +9 -0
- package/project/.sdk/model/target/dart.aon +10 -0
- package/project/.sdk/model/target/elixir.aon +9 -0
- package/project/.sdk/model/target/go.aon +13 -0
- package/project/.sdk/model/target/java.aon +9 -0
- package/project/.sdk/model/target/js.aon +7 -0
- package/project/.sdk/model/target/kotlin.aon +9 -0
- package/project/.sdk/model/target/lean.aon +17 -0
- package/project/.sdk/model/target/lua.aon +8 -0
- package/project/.sdk/model/target/ocaml.aon +9 -0
- package/project/.sdk/model/target/perl.aon +8 -0
- package/project/.sdk/model/target/php.aon +8 -0
- package/project/.sdk/model/target/py.aon +13 -0
- package/project/.sdk/model/target/rb.aon +8 -0
- package/project/.sdk/model/target/rust.aon +10 -0
- package/project/.sdk/model/target/scala.aon +21 -2
- package/project/.sdk/model/target/swift.aon +18 -0
- package/project/.sdk/model/target/ts.aon +13 -0
- package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
- package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
- package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
- package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
- package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
- package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
- package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
- package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
- package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
- package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
- package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
- package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
- package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
- package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
- package/project/.sdk/tm/c/Makefile +38 -3
- package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
- package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
- package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
- package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
- package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
- package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
- package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
- package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
- package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
- package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
- package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
- package/project/.sdk/tm/cpp/Makefile +5 -1
- package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
- package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
- package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
- package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
- package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
- package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
- package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
- package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
- package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
- package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
- package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
- package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
- package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
- package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
- package/project/.sdk/tm/dart/test/omni.dart +520 -0
- package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
- package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
- package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
- package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
- package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
- package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
- package/project/.sdk/tm/elixir/Makefile +11 -3
- package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
- package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
- package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
- package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
- package/project/.sdk/tm/go/core/context.go +32 -16
- package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
- package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
- package/project/.sdk/tm/go/test/omni/omni.go +897 -0
- package/project/.sdk/tm/go/test/omni/util.go +360 -0
- package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
- package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
- package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
- package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
- package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
- package/project/.sdk/tm/go/utility/make_options.go +8 -1
- package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
- package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
- package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
- package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
- package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
- package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
- package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
- package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
- package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
- package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
- package/project/.sdk/tm/js/test/omni.js +251 -0
- package/project/.sdk/tm/js/test/omni.test.js +105 -0
- package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
- package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
- package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
- package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
- package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
- package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
- package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
- package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
- package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
- package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
- package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
- package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
- package/project/.sdk/tm/lean/Makefile +12 -5
- package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
- package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
- package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
- package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
- package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
- package/project/.sdk/tm/lua/test/omni.lua +456 -0
- package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
- package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
- package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
- package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
- package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
- package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
- package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
- package/project/.sdk/tm/ocaml/Makefile +37 -12
- package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
- package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
- package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
- package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
- package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
- package/project/.sdk/tm/perl/t/omni.pm +647 -0
- package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
- package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
- package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
- package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
- package/project/.sdk/tm/php/test/Omni.php +691 -0
- package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
- package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
- package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
- package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
- package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
- package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
- package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
- package/project/.sdk/tm/py/test/omni.py +415 -0
- package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
- package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
- package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
- package/project/.sdk/tm/rb/test/omni.rb +505 -0
- package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
- package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
- package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
- package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
- package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
- package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
- package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
- package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
- package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
- package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
- package/project/.sdk/tm/scala/Makefile +16 -6
- package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
- package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
- package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
- package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
- package/project/.sdk/tm/ts/test/omni.ts +104 -32
- package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
- package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
- package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
- package/project/sdkgen-package.json +1 -1
- package/src/action/doctor.ts +66 -2
- package/src/helpers/naming.ts +4 -2
- package/project/.sdk/tm/c/tests/runner.h +0 -274
- package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
- package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
- package/project/.sdk/tm/dart/test/runner.dart +0 -406
- package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
- package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
- package/project/.sdk/tm/go/test/runner_test.go +0 -629
- package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
- package/project/.sdk/tm/java/test/StructRunner.java +0 -281
- package/project/.sdk/tm/js/test/runner.js +0 -387
- package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
- package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
- package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
- package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
- package/project/.sdk/tm/php/test/StructRunner.php +0 -275
- package/project/.sdk/tm/py/test/struct_runner.py +0 -411
- package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
- package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
- package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
|
@@ -1,28 +1,56 @@
|
|
|
1
1
|
// Struct utility tests — run the shared `struct` corpus subtree from
|
|
2
|
-
// ../.sdk/test/test.json against the vendored voxgig struct port
|
|
3
|
-
//
|
|
2
|
+
// ../.sdk/test/test.json against the vendored voxgig struct port.
|
|
3
|
+
//
|
|
4
|
+
// The corpus is driven by the VENDORED omni runner through the adapter in
|
|
5
|
+
// tests/omni_resolver/mod.rs (which superseded the hand-written
|
|
6
|
+
// tests/struct_runner/mod.rs). Group labels, null flags and subjects are
|
|
7
|
+
// unchanged; the engine underneath them is now the shared one.
|
|
4
8
|
|
|
5
|
-
mod
|
|
9
|
+
mod omni_resolver;
|
|
6
10
|
|
|
7
11
|
use std::cell::RefCell;
|
|
8
12
|
use std::rc::Rc;
|
|
9
13
|
|
|
10
|
-
use
|
|
14
|
+
use omni_resolver::*;
|
|
11
15
|
|
|
12
16
|
use RUSTCRATE::utility::voxgigstruct::ordered_map::OrderedMap;
|
|
13
17
|
use RUSTCRATE::utility::voxgigstruct::value::Value;
|
|
14
18
|
use RUSTCRATE::utility::voxgigstruct::*;
|
|
15
19
|
|
|
16
20
|
|
|
21
|
+
/// Groups this SDK's corpus subset does not carry, so a run over it reports
|
|
22
|
+
/// zero checks for them BY DESIGN.
|
|
23
|
+
///
|
|
24
|
+
/// `Run::report` holds this list to the corpus in both directions: a group
|
|
25
|
+
/// that goes absent without being named here fails the suite, and a name
|
|
26
|
+
/// here that is no longer absent fails it too. Nothing else stops a renamed
|
|
27
|
+
/// or deleted group from taking its whole check count away while `cargo
|
|
28
|
+
/// test` still prints `ok`.
|
|
29
|
+
///
|
|
30
|
+
/// `sentinels` is the Group A null-unification block (UNDEF_SPEC.md): the
|
|
31
|
+
/// subjects below are wired and ready, and the entries arrive with the
|
|
32
|
+
/// corpus refresh that adds `struct.sentinels`.
|
|
33
|
+
const EXPECTED_SKIPS: &[&str] = &[
|
|
34
|
+
"sentinels-getprop_unify",
|
|
35
|
+
"sentinels-getelem_absent",
|
|
36
|
+
"sentinels-haskey_unify",
|
|
37
|
+
"sentinels-isempty_unify",
|
|
38
|
+
"sentinels-isnode_unify",
|
|
39
|
+
"sentinels-stringify_null",
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
|
|
17
43
|
#[test]
|
|
18
44
|
fn struct_utility() {
|
|
19
|
-
let
|
|
20
|
-
|
|
21
|
-
|
|
45
|
+
let mut run = Run::section("struct");
|
|
46
|
+
// A detached handle on the resolved section, so a `set!` argument does
|
|
47
|
+
// not borrow `run` while `run` is borrowed mutably by the call.
|
|
48
|
+
let s = run.spec.clone();
|
|
49
|
+
let all = run.all.clone();
|
|
22
50
|
|
|
23
51
|
macro_rules! set {
|
|
24
52
|
($cat:expr, $name:expr) => {
|
|
25
|
-
|
|
53
|
+
jpath(&s, &[$cat, $name])
|
|
26
54
|
};
|
|
27
55
|
}
|
|
28
56
|
|
|
@@ -211,6 +239,28 @@ fn struct_utility() {
|
|
|
211
239
|
|v| Value::str(stringify(&v, None, false)),
|
|
212
240
|
);
|
|
213
241
|
|
|
242
|
+
// -------- nullsem (does a PRESENT key holding JSON null read as "no
|
|
243
|
+
// value"?) — the peer of go's `nullsem` subtest and py's test_nullsem.
|
|
244
|
+
// null_flag is false throughout so a stored null survives into the
|
|
245
|
+
// subject rather than being normalised to a sentinel string.
|
|
246
|
+
run.run_set(&set!("nullsem", "getprop"), false, "nullsem-getprop", |vin| {
|
|
247
|
+
let alt = vget(&vin, "alt");
|
|
248
|
+
get_prop(&vget(&vin, "val"), &vget(&vin, "key"), alt)
|
|
249
|
+
});
|
|
250
|
+
run.run_set(&set!("nullsem", "getelem"), false, "nullsem-getelem", |vin| {
|
|
251
|
+
let alt = vget(&vin, "alt");
|
|
252
|
+
get_elem(&vget(&vin, "val"), &vget(&vin, "key"), alt)
|
|
253
|
+
});
|
|
254
|
+
run.run_set(&set!("nullsem", "getpath"), false, "nullsem-getpath", |vin| {
|
|
255
|
+
get_path(&vget(&vin, "store"), &vget(&vin, "path"), None)
|
|
256
|
+
});
|
|
257
|
+
run.run_set(&set!("nullsem", "haskey"), false, "nullsem-haskey", |vin| {
|
|
258
|
+
b(has_key(&vget(&vin, "src"), &vget(&vin, "key")))
|
|
259
|
+
});
|
|
260
|
+
run.run_set(&set!("nullsem", "keysof"), false, "nullsem-keysof", |v| {
|
|
261
|
+
keys_of(&v)
|
|
262
|
+
});
|
|
263
|
+
|
|
214
264
|
// -------- walk ---------------------------------------------------
|
|
215
265
|
run.run_set(&set!("walk", "basic"), true, "walk-basic", |vin| {
|
|
216
266
|
let mut walkpath = |_k: &Value, val: &Value, _p: &Value, path: &[String]| -> Value {
|
|
@@ -223,7 +273,7 @@ fn struct_utility() {
|
|
|
223
273
|
});
|
|
224
274
|
// walk.log — three runs (after-only / before-only / both) of a logging callback.
|
|
225
275
|
{
|
|
226
|
-
let log_spec =
|
|
276
|
+
let log_spec = tostruct(&jpath(&s, &["walk", "log"]));
|
|
227
277
|
let input = clone(&vget(&log_spec, "in"));
|
|
228
278
|
let want = vget(&log_spec, "out");
|
|
229
279
|
let mk_log = |inp: &Value, before: bool, after: bool| -> Value {
|
|
@@ -377,8 +427,7 @@ fn struct_utility() {
|
|
|
377
427
|
});
|
|
378
428
|
// merge.basic is a single { in, out } object (not a `set`); handle inline.
|
|
379
429
|
{
|
|
380
|
-
let
|
|
381
|
-
let basic = vget(&mb, "basic");
|
|
430
|
+
let basic = tostruct(&jpath(&s, &["merge", "basic"]));
|
|
382
431
|
let bin = clone(&vget(&basic, "in"));
|
|
383
432
|
let bout = fix_json(&vget(&basic, "out"), true);
|
|
384
433
|
let got = fix_json(&merge(&bin, None), true);
|
|
@@ -455,7 +504,7 @@ fn struct_utility() {
|
|
|
455
504
|
// -------- inject -------------------------------------------------
|
|
456
505
|
{
|
|
457
506
|
// inject.basic is a single { in: {val, store}, out } object.
|
|
458
|
-
let basic =
|
|
507
|
+
let basic = tostruct(&jpath(&s, &["inject", "basic"]));
|
|
459
508
|
let bin = vget(&basic, "in");
|
|
460
509
|
let bout = fix_json(&vget(&basic, "out"), true);
|
|
461
510
|
let got = fix_json(
|
|
@@ -504,7 +553,7 @@ fn struct_utility() {
|
|
|
504
553
|
|
|
505
554
|
// -------- transform ---------------------------------------------
|
|
506
555
|
{
|
|
507
|
-
let basic =
|
|
556
|
+
let basic = tostruct(&jpath(&s, &["transform", "basic"]));
|
|
508
557
|
let bin = vget(&basic, "in");
|
|
509
558
|
let bout = fix_json(&vget(&basic, "out"), true);
|
|
510
559
|
let got = match transform(
|
|
@@ -620,7 +669,7 @@ fn struct_utility() {
|
|
|
620
669
|
Value::map_of([("zed".to_string(), Value::str(format!("ZED{foo_s}_{bar_s}")))])
|
|
621
670
|
}
|
|
622
671
|
{
|
|
623
|
-
let check =
|
|
672
|
+
let check = tostruct(&jpath(&all, &["primary", "check"]));
|
|
624
673
|
// resolve clients from DEF.client (options are inject()'d against {} — a no-op here)
|
|
625
674
|
let def_clients = vget_path(&check, &["DEF", "client"]);
|
|
626
675
|
let mut clients: OrderedMap<Value> = OrderedMap::new();
|
|
@@ -657,20 +706,9 @@ fn struct_utility() {
|
|
|
657
706
|
}
|
|
658
707
|
|
|
659
708
|
// -------- report -------------------------------------------------
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
for f in run.failures.iter().take(60) {
|
|
664
|
-
msg.push_str(" - ");
|
|
665
|
-
msg.push_str(f);
|
|
666
|
-
msg.push('\n');
|
|
667
|
-
}
|
|
668
|
-
if n > 60 {
|
|
669
|
-
msg.push_str(&format!(" ... and {} more\n", n - 60));
|
|
670
|
-
}
|
|
671
|
-
panic!("{msg}");
|
|
672
|
-
}
|
|
673
|
-
eprintln!("corpus: {} checks passed", run.passed);
|
|
709
|
+
// Strict: any group that went absent, any expected skip that did not
|
|
710
|
+
// happen, and any corpus group nothing here drives, is a FAILURE.
|
|
711
|
+
run.report("corpus", EXPECTED_SKIPS);
|
|
674
712
|
}
|
|
675
713
|
|
|
676
714
|
// Function values embedded in data: `get_elem` with a callable `alt`, and
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
// VENDORED: @voxgig/omni sdk-20260904-1610-0 (rust/src/json.rs)
|
|
2
|
+
// Source: https://github.com/voxgig/omni @ 8c3e1b573a8d35796f7fc45e3226b977023cabf7 [tag: sdk-20260904-1610-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
//! The omni JSON value model, with a small in-tree parser.
|
|
5
|
+
//!
|
|
6
|
+
//! The omni runner must be able to test *any* library, and must add no
|
|
7
|
+
//! third-party dependencies, so it carries its own JSON support rather
|
|
8
|
+
//! than borrowing serde or the system under test.
|
|
9
|
+
|
|
10
|
+
use std::collections::BTreeMap;
|
|
11
|
+
use std::fmt;
|
|
12
|
+
|
|
13
|
+
/// A JSON value. `Absent` is the marker for "no value at all", as distinct
|
|
14
|
+
/// from `Null`.
|
|
15
|
+
#[derive(Clone, Debug, PartialEq)]
|
|
16
|
+
pub enum Json {
|
|
17
|
+
Absent,
|
|
18
|
+
Null,
|
|
19
|
+
Bool(bool),
|
|
20
|
+
Num(f64),
|
|
21
|
+
Str(String),
|
|
22
|
+
List(Vec<Json>),
|
|
23
|
+
Map(BTreeMap<String, Json>),
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
impl Json {
|
|
27
|
+
/// A map (JSON object)?
|
|
28
|
+
pub fn ismap(&self) -> bool {
|
|
29
|
+
matches!(self, Json::Map(_))
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/// A list (JSON array)?
|
|
33
|
+
pub fn islist(&self) -> bool {
|
|
34
|
+
matches!(self, Json::List(_))
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// A container (map or list)?
|
|
38
|
+
pub fn isnode(&self) -> bool {
|
|
39
|
+
self.ismap() || self.islist()
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/// Absent (no value at all)?
|
|
43
|
+
pub fn isabsent(&self) -> bool {
|
|
44
|
+
matches!(self, Json::Absent)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/// Null (a JSON null)?
|
|
48
|
+
pub fn isnull(&self) -> bool {
|
|
49
|
+
matches!(self, Json::Null)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/// Absent or null?
|
|
53
|
+
pub fn isnone(&self) -> bool {
|
|
54
|
+
self.isabsent() || self.isnull()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/// A JSON number? Booleans are not numbers.
|
|
58
|
+
pub fn isnum(&self) -> bool {
|
|
59
|
+
matches!(self, Json::Num(_))
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
pub fn asnum(&self) -> Option<f64> {
|
|
63
|
+
match self {
|
|
64
|
+
Json::Num(num) => Some(*num),
|
|
65
|
+
_ => None,
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
pub fn asstr(&self) -> Option<&str> {
|
|
70
|
+
match self {
|
|
71
|
+
Json::Str(text) => Some(text),
|
|
72
|
+
_ => None,
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
pub fn asmap(&self) -> Option<&BTreeMap<String, Json>> {
|
|
77
|
+
match self {
|
|
78
|
+
Json::Map(map) => Some(map),
|
|
79
|
+
_ => None,
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
pub fn aslist(&self) -> Option<&Vec<Json>> {
|
|
84
|
+
match self {
|
|
85
|
+
Json::List(list) => Some(list),
|
|
86
|
+
_ => None,
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/// Read a map entry. Returns `Absent` when missing.
|
|
91
|
+
pub fn get(&self, key: &str) -> Json {
|
|
92
|
+
match self {
|
|
93
|
+
Json::Map(map) => map.get(key).cloned().unwrap_or(Json::Absent),
|
|
94
|
+
_ => Json::Absent,
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/// Is a map key present at all (even with a null value)?
|
|
99
|
+
pub fn has(&self, key: &str) -> bool {
|
|
100
|
+
match self {
|
|
101
|
+
Json::Map(map) => map.contains_key(key),
|
|
102
|
+
_ => false,
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/// Build a map value.
|
|
107
|
+
pub fn map(entries: Vec<(&str, Json)>) -> Json {
|
|
108
|
+
let mut out = BTreeMap::new();
|
|
109
|
+
for (key, val) in entries {
|
|
110
|
+
out.insert(key.to_string(), val);
|
|
111
|
+
}
|
|
112
|
+
Json::Map(out)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/// Build a list value.
|
|
116
|
+
pub fn list(entries: Vec<Json>) -> Json {
|
|
117
|
+
Json::List(entries)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/// Build a string value.
|
|
121
|
+
pub fn str(text: &str) -> Json {
|
|
122
|
+
Json::Str(text.to_string())
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
impl fmt::Display for Json {
|
|
127
|
+
fn fmt(&self, out: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
128
|
+
write!(out, "{}", super::util::jsonstr(self))
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
impl From<f64> for Json {
|
|
133
|
+
fn from(val: f64) -> Json {
|
|
134
|
+
Json::Num(val)
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
impl From<i64> for Json {
|
|
139
|
+
fn from(val: i64) -> Json {
|
|
140
|
+
Json::Num(val as f64)
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
impl From<usize> for Json {
|
|
145
|
+
fn from(val: usize) -> Json {
|
|
146
|
+
Json::Num(val as f64)
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
impl From<bool> for Json {
|
|
151
|
+
fn from(val: bool) -> Json {
|
|
152
|
+
Json::Bool(val)
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
impl From<&str> for Json {
|
|
157
|
+
fn from(val: &str) -> Json {
|
|
158
|
+
Json::Str(val.to_string())
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
impl From<String> for Json {
|
|
163
|
+
fn from(val: String) -> Json {
|
|
164
|
+
Json::Str(val)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/// Maximum nesting depth the parser will follow. Omni specs are trusted
|
|
169
|
+
/// input, so this is crash-safety, not a security boundary: past this
|
|
170
|
+
/// depth the recursive parser would overflow the stack and abort the
|
|
171
|
+
/// process, so it returns an error instead. 1024 is far beyond any real
|
|
172
|
+
/// spec, and low enough that reaching the limit itself fits comfortably
|
|
173
|
+
/// in a default (2MiB) test-thread stack even in debug builds.
|
|
174
|
+
const MAX_DEPTH: usize = 1024;
|
|
175
|
+
|
|
176
|
+
/// Parse JSON text into a [`Json`] value.
|
|
177
|
+
pub fn parse(text: &str) -> Result<Json, String> {
|
|
178
|
+
let chars: Vec<char> = text.chars().collect();
|
|
179
|
+
let mut pos = 0usize;
|
|
180
|
+
|
|
181
|
+
skipws(&chars, &mut pos);
|
|
182
|
+
let val = parseval(&chars, &mut pos, 0)?;
|
|
183
|
+
skipws(&chars, &mut pos);
|
|
184
|
+
|
|
185
|
+
if pos < chars.len() {
|
|
186
|
+
return Err(format!("omni: trailing JSON content at {}", pos));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
Ok(val)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
fn skipws(chars: &[char], pos: &mut usize) {
|
|
193
|
+
while *pos < chars.len() {
|
|
194
|
+
let char = chars[*pos];
|
|
195
|
+
if char == ' ' || char == '\t' || char == '\n' || char == '\r' {
|
|
196
|
+
*pos += 1;
|
|
197
|
+
} else {
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
fn parseval(chars: &[char], pos: &mut usize, depth: usize) -> Result<Json, String> {
|
|
204
|
+
if depth > MAX_DEPTH {
|
|
205
|
+
return Err(format!("omni: JSON nested too deeply at {}", pos));
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if *pos >= chars.len() {
|
|
209
|
+
return Err("omni: unexpected end of JSON".to_string());
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
match chars[*pos] {
|
|
213
|
+
'{' => parsemap(chars, pos, depth),
|
|
214
|
+
'[' => parselist(chars, pos, depth),
|
|
215
|
+
'"' => Ok(Json::Str(parsestr(chars, pos)?)),
|
|
216
|
+
't' => parseword(chars, pos, "true", Json::Bool(true)),
|
|
217
|
+
'f' => parseword(chars, pos, "false", Json::Bool(false)),
|
|
218
|
+
'n' => parseword(chars, pos, "null", Json::Null),
|
|
219
|
+
_ => parsenum(chars, pos),
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
fn parseword(chars: &[char], pos: &mut usize, word: &str, val: Json) -> Result<Json, String> {
|
|
224
|
+
for expect in word.chars() {
|
|
225
|
+
if *pos >= chars.len() || chars[*pos] != expect {
|
|
226
|
+
return Err(format!("omni: bad JSON literal at {}", pos));
|
|
227
|
+
}
|
|
228
|
+
*pos += 1;
|
|
229
|
+
}
|
|
230
|
+
Ok(val)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
fn parsemap(chars: &[char], pos: &mut usize, depth: usize) -> Result<Json, String> {
|
|
234
|
+
let mut out = BTreeMap::new();
|
|
235
|
+
*pos += 1; // {
|
|
236
|
+
|
|
237
|
+
skipws(chars, pos);
|
|
238
|
+
if *pos < chars.len() && chars[*pos] == '}' {
|
|
239
|
+
*pos += 1;
|
|
240
|
+
return Ok(Json::Map(out));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
loop {
|
|
244
|
+
skipws(chars, pos);
|
|
245
|
+
let key = parsestr(chars, pos)?;
|
|
246
|
+
skipws(chars, pos);
|
|
247
|
+
|
|
248
|
+
if *pos >= chars.len() || chars[*pos] != ':' {
|
|
249
|
+
return Err(format!("omni: expected ':' at {}", pos));
|
|
250
|
+
}
|
|
251
|
+
*pos += 1;
|
|
252
|
+
|
|
253
|
+
skipws(chars, pos);
|
|
254
|
+
let val = parseval(chars, pos, depth + 1)?;
|
|
255
|
+
out.insert(key, val);
|
|
256
|
+
|
|
257
|
+
skipws(chars, pos);
|
|
258
|
+
if *pos >= chars.len() {
|
|
259
|
+
return Err("omni: unterminated JSON object".to_string());
|
|
260
|
+
}
|
|
261
|
+
if chars[*pos] == ',' {
|
|
262
|
+
*pos += 1;
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
if chars[*pos] == '}' {
|
|
266
|
+
*pos += 1;
|
|
267
|
+
return Ok(Json::Map(out));
|
|
268
|
+
}
|
|
269
|
+
return Err(format!("omni: expected ',' or '}}' at {}", pos));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
fn parselist(chars: &[char], pos: &mut usize, depth: usize) -> Result<Json, String> {
|
|
274
|
+
let mut out = Vec::new();
|
|
275
|
+
*pos += 1; // [
|
|
276
|
+
|
|
277
|
+
skipws(chars, pos);
|
|
278
|
+
if *pos < chars.len() && chars[*pos] == ']' {
|
|
279
|
+
*pos += 1;
|
|
280
|
+
return Ok(Json::List(out));
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
loop {
|
|
284
|
+
skipws(chars, pos);
|
|
285
|
+
out.push(parseval(chars, pos, depth + 1)?);
|
|
286
|
+
|
|
287
|
+
skipws(chars, pos);
|
|
288
|
+
if *pos >= chars.len() {
|
|
289
|
+
return Err("omni: unterminated JSON array".to_string());
|
|
290
|
+
}
|
|
291
|
+
if chars[*pos] == ',' {
|
|
292
|
+
*pos += 1;
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
if chars[*pos] == ']' {
|
|
296
|
+
*pos += 1;
|
|
297
|
+
return Ok(Json::List(out));
|
|
298
|
+
}
|
|
299
|
+
return Err(format!("omni: expected ',' or ']' at {}", pos));
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
fn parsestr(chars: &[char], pos: &mut usize) -> Result<String, String> {
|
|
304
|
+
if *pos >= chars.len() || chars[*pos] != '"' {
|
|
305
|
+
return Err(format!("omni: expected string at {}", pos));
|
|
306
|
+
}
|
|
307
|
+
*pos += 1;
|
|
308
|
+
|
|
309
|
+
let mut out = String::new();
|
|
310
|
+
|
|
311
|
+
while *pos < chars.len() {
|
|
312
|
+
let char = chars[*pos];
|
|
313
|
+
*pos += 1;
|
|
314
|
+
|
|
315
|
+
if char == '"' {
|
|
316
|
+
return Ok(out);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
if char != '\\' {
|
|
320
|
+
out.push(char);
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
if *pos >= chars.len() {
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
let escape = chars[*pos];
|
|
329
|
+
*pos += 1;
|
|
330
|
+
|
|
331
|
+
match escape {
|
|
332
|
+
'"' => out.push('"'),
|
|
333
|
+
'\\' => out.push('\\'),
|
|
334
|
+
'/' => out.push('/'),
|
|
335
|
+
'b' => out.push('\u{8}'),
|
|
336
|
+
'f' => out.push('\u{c}'),
|
|
337
|
+
'n' => out.push('\n'),
|
|
338
|
+
'r' => out.push('\r'),
|
|
339
|
+
't' => out.push('\t'),
|
|
340
|
+
'u' => {
|
|
341
|
+
let mut code = 0u32;
|
|
342
|
+
for _ in 0..4 {
|
|
343
|
+
if *pos >= chars.len() {
|
|
344
|
+
return Err("omni: bad JSON unicode escape".to_string());
|
|
345
|
+
}
|
|
346
|
+
let digit = chars[*pos]
|
|
347
|
+
.to_digit(16)
|
|
348
|
+
.ok_or_else(|| "omni: bad JSON unicode escape".to_string())?;
|
|
349
|
+
code = code * 16 + digit;
|
|
350
|
+
*pos += 1;
|
|
351
|
+
}
|
|
352
|
+
out.push(char::from_u32(code).unwrap_or('\u{fffd}'));
|
|
353
|
+
}
|
|
354
|
+
_ => return Err(format!("omni: bad JSON escape at {}", pos)),
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
Err("omni: unterminated JSON string".to_string())
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
fn parsenum(chars: &[char], pos: &mut usize) -> Result<Json, String> {
|
|
362
|
+
let start = *pos;
|
|
363
|
+
|
|
364
|
+
if *pos < chars.len() && (chars[*pos] == '-' || chars[*pos] == '+') {
|
|
365
|
+
*pos += 1;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
while *pos < chars.len() {
|
|
369
|
+
let char = chars[*pos];
|
|
370
|
+
if char.is_ascii_digit()
|
|
371
|
+
|| char == '.'
|
|
372
|
+
|| char == 'e'
|
|
373
|
+
|| char == 'E'
|
|
374
|
+
|| char == '-'
|
|
375
|
+
|| char == '+'
|
|
376
|
+
{
|
|
377
|
+
*pos += 1;
|
|
378
|
+
} else {
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
let text: String = chars[start..*pos].iter().collect();
|
|
384
|
+
text.parse::<f64>()
|
|
385
|
+
.map(Json::Num)
|
|
386
|
+
.map_err(|_| format!("omni: bad JSON number [{}] at {}", text, start))
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
#[cfg(test)]
|
|
390
|
+
mod tests {
|
|
391
|
+
use super::*;
|
|
392
|
+
|
|
393
|
+
// Deeply nested input must produce a parse error, not overflow the
|
|
394
|
+
// stack and abort the process.
|
|
395
|
+
#[test]
|
|
396
|
+
fn parse_rejects_deep_nesting() {
|
|
397
|
+
let deep = "[".repeat(MAX_DEPTH * 4);
|
|
398
|
+
let err = parse(&deep).expect_err("deep nesting must be rejected");
|
|
399
|
+
assert!(err.contains("nested too deeply"), "unexpected error: {}", err);
|
|
400
|
+
|
|
401
|
+
let deepmap = "{\"a\":".repeat(MAX_DEPTH * 4);
|
|
402
|
+
let err = parse(&deepmap).expect_err("deep nesting must be rejected");
|
|
403
|
+
assert!(err.contains("nested too deeply"), "unexpected error: {}", err);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// Reasonable nesting still parses.
|
|
407
|
+
#[test]
|
|
408
|
+
fn parse_allows_reasonable_nesting() {
|
|
409
|
+
let text = format!("{}1{}", "[".repeat(64), "]".repeat(64));
|
|
410
|
+
assert!(parse(&text).is_ok());
|
|
411
|
+
}
|
|
412
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// VENDORED: @voxgig/omni sdk-20260904-1610-0 (rust/src/lib.rs)
|
|
2
|
+
// Source: https://github.com/voxgig/omni @ 8c3e1b573a8d35796f7fc45e3226b977023cabf7 [tag: sdk-20260904-1610-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
//! voxgig_omni - the shared multi-language test runner.
|
|
5
|
+
//!
|
|
6
|
+
//! A test spec is plain JSON. The same spec file drives the same tests in
|
|
7
|
+
//! every language that ships an omni port, so behaviour is defined once and
|
|
8
|
+
//! verified everywhere.
|
|
9
|
+
//!
|
|
10
|
+
//! ```no_run
|
|
11
|
+
//! use std::rc::Rc;
|
|
12
|
+
//! use voxgig_omni::{make_runner, Json, Provider, Subject};
|
|
13
|
+
//!
|
|
14
|
+
//! let runner = make_runner("../spec/fib.json", Provider::default()).unwrap();
|
|
15
|
+
//! let pack = runner.runner("fib", None).unwrap();
|
|
16
|
+
//! let double: Subject = Rc::new(|args: &[Json]| {
|
|
17
|
+
//! Ok(Json::Num(args[0].asnum().unwrap_or(0.0) * 2.0))
|
|
18
|
+
//! });
|
|
19
|
+
//! pack.runset(&pack.set("basic"), Some(&double)).unwrap();
|
|
20
|
+
//! ```
|
|
21
|
+
|
|
22
|
+
pub mod json;
|
|
23
|
+
pub mod regex;
|
|
24
|
+
pub mod runner;
|
|
25
|
+
pub mod util;
|
|
26
|
+
|
|
27
|
+
pub use json::{parse, Json};
|
|
28
|
+
pub use regex::Regex;
|
|
29
|
+
pub use runner::{
|
|
30
|
+
errify, fixjson, loadspec, make_runner, matchcheck, matchval, nullmodifier, numtext,
|
|
31
|
+
resolvespec, Flags, OmniError, Provider, RunPack, Runner, SpecRef, Subject, SubjectArgs,
|
|
32
|
+
CAPABILITIES,
|
|
33
|
+
SPECVERSION,
|
|
34
|
+
};
|
|
35
|
+
pub use util::{
|
|
36
|
+
clone, deepequal, getpath, jsonstr, numstr, pathify, stringify, walk, EXISTSMARK, NULLMARK,
|
|
37
|
+
UNDEFMARK,
|
|
38
|
+
};
|