@voxgig/sdkgen 4.8.1 → 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 +2 -2
- package/project/.sdk/model/feature/secrets.aon +120 -18
- package/project/.sdk/model/target/c.aon +10 -0
- package/project/.sdk/model/target/clojure.aon +13 -0
- package/project/.sdk/model/target/cpp.aon +10 -0
- package/project/.sdk/model/target/csharp.aon +9 -0
- package/project/.sdk/model/target/dart.aon +10 -0
- package/project/.sdk/model/target/elixir.aon +9 -0
- package/project/.sdk/model/target/go.aon +13 -0
- package/project/.sdk/model/target/java.aon +9 -0
- package/project/.sdk/model/target/js.aon +7 -0
- package/project/.sdk/model/target/kotlin.aon +9 -0
- package/project/.sdk/model/target/lean.aon +17 -0
- package/project/.sdk/model/target/lua.aon +8 -0
- package/project/.sdk/model/target/ocaml.aon +9 -0
- package/project/.sdk/model/target/perl.aon +8 -0
- package/project/.sdk/model/target/php.aon +8 -0
- package/project/.sdk/model/target/py.aon +13 -0
- package/project/.sdk/model/target/rb.aon +8 -0
- package/project/.sdk/model/target/rust.aon +10 -0
- package/project/.sdk/model/target/scala.aon +21 -2
- package/project/.sdk/model/target/swift.aon +18 -0
- package/project/.sdk/model/target/ts.aon +13 -0
- package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
- package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
- package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
- package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
- package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
- package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
- package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
- package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
- package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
- package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
- package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
- package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
- package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
- package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
- package/project/.sdk/tm/c/Makefile +38 -3
- package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
- package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
- package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
- package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
- package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
- package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
- package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
- package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
- package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
- package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
- package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
- package/project/.sdk/tm/cpp/Makefile +5 -1
- package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
- package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
- package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
- package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
- package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
- package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
- package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
- package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
- package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
- package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
- package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
- package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
- package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
- package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
- package/project/.sdk/tm/dart/test/omni.dart +520 -0
- package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
- package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
- package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
- package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
- package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
- package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
- package/project/.sdk/tm/elixir/Makefile +11 -3
- package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
- package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
- package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
- package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
- package/project/.sdk/tm/go/core/context.go +32 -16
- package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
- package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
- package/project/.sdk/tm/go/test/omni/omni.go +897 -0
- package/project/.sdk/tm/go/test/omni/util.go +360 -0
- package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
- package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
- package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
- package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
- package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
- package/project/.sdk/tm/go/utility/make_options.go +8 -1
- package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
- package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
- package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
- package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
- package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
- package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
- package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
- package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
- package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
- package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
- package/project/.sdk/tm/js/test/omni.js +251 -0
- package/project/.sdk/tm/js/test/omni.test.js +105 -0
- package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
- package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
- package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
- package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
- package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
- package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
- package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
- package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
- package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
- package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
- package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
- package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
- package/project/.sdk/tm/lean/Makefile +12 -5
- package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
- package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
- package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
- package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
- package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
- package/project/.sdk/tm/lua/test/omni.lua +456 -0
- package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
- package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
- package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
- package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
- package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
- package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
- package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
- package/project/.sdk/tm/ocaml/Makefile +37 -12
- package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
- package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
- package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
- package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
- package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
- package/project/.sdk/tm/perl/t/omni.pm +647 -0
- package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
- package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
- package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
- package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
- package/project/.sdk/tm/php/test/Omni.php +691 -0
- package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
- package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
- package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
- package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
- package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
- package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
- package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
- package/project/.sdk/tm/py/test/omni.py +415 -0
- package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
- package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
- package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
- package/project/.sdk/tm/rb/test/omni.rb +505 -0
- package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
- package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
- package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
- package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
- package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
- package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
- package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
- package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
- package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
- package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
- package/project/.sdk/tm/scala/Makefile +16 -6
- package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
- package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
- package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
- package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
- package/project/.sdk/tm/ts/test/omni.ts +104 -32
- package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
- package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
- package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
- package/project/sdkgen-package.json +1 -1
- package/src/action/doctor.ts +66 -2
- package/src/helpers/naming.ts +4 -2
- package/project/.sdk/tm/c/tests/runner.h +0 -274
- package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
- package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
- package/project/.sdk/tm/dart/test/runner.dart +0 -406
- package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
- package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
- package/project/.sdk/tm/go/test/runner_test.go +0 -629
- package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
- package/project/.sdk/tm/java/test/StructRunner.java +0 -281
- package/project/.sdk/tm/js/test/runner.js +0 -387
- package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
- package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
- package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
- package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
- package/project/.sdk/tm/php/test/StructRunner.php +0 -275
- package/project/.sdk/tm/py/test/struct_runner.py +0 -411
- package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
- package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
- package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
|
@@ -0,0 +1,691 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
declare(strict_types=1);
|
|
3
|
+
|
|
4
|
+
// The corpus test runner: vendored Voxgig\Omni driven through its NATIVE
|
|
5
|
+
// API (`Runner::makeRunner($specref, $provider)`), presented to the corpus
|
|
6
|
+
// tests in the struct-runner shape they already use (`$R['spec']`,
|
|
7
|
+
// `$R['runset']`, `$R['runsetflags']`, `$R['client']`). No compat shim is
|
|
8
|
+
// vendored: the adapter below IS the whole bridge, per language, per the
|
|
9
|
+
// vendor-tag rollout (docs/design/vendor-tag-rollout.md, Decision 4). It is
|
|
10
|
+
// the PHP peer of tm/py/test/omni.py and tm/go/test/omniresolver_test.go.
|
|
11
|
+
//
|
|
12
|
+
// PHP-specific decisions, each load-bearing:
|
|
13
|
+
//
|
|
14
|
+
// 1. SPEC PATH. omni expects a usable path; a relative one is absolutized
|
|
15
|
+
// against THIS file's directory (test/), so the existing
|
|
16
|
+
// '../../.sdk/test/test.json' constant works from any working directory.
|
|
17
|
+
//
|
|
18
|
+
// 2. CONTEXTS STAY MAPS ACROSS THE RUNNER - WITH REFERENCE SLOTS. omni
|
|
19
|
+
// sets `entry.ctx` to the contextified args[0], and `match: {ctx: ...}`
|
|
20
|
+
// reads THROUGH it with omni's own getpath, which walks PHP ARRAYS
|
|
21
|
+
// only - a typed ProjectNameContext there would make every ctx
|
|
22
|
+
// assertion read "absent". So contextify returns the MAP, a subject
|
|
23
|
+
// builds the typed context with `ctx_from_map` at the call site, runs
|
|
24
|
+
// the utility, and writes the observable state back with `sync_ctx`
|
|
25
|
+
// (go's maps-plus-sync idiom). PHP arrays are copy-on-write VALUE
|
|
26
|
+
// types, so a plain map's post-execution writes would be invisible to
|
|
27
|
+
// the copy `entry.ctx` holds - `ctxview` therefore makes every element
|
|
28
|
+
// a REFERENCE into one shared frame: all the copies omni hands around
|
|
29
|
+
// (args[0], entry.ctx, the subject's parameter) read and write the
|
|
30
|
+
// same slots. Keys a sync may CREATE (spec/result/response) are
|
|
31
|
+
// pre-seeded with omni's own Absent sentinel, which every match branch
|
|
32
|
+
// already treats as "genuinely missing" - so `__EXISTS__` still fails
|
|
33
|
+
// until the subject really produced the value.
|
|
34
|
+
//
|
|
35
|
+
// 3. NO-ARGUMENT ENTRIES. Corpus entries with no `in`, `args` or `ctx`
|
|
36
|
+
// mean "call the subject with NO argument". PHP cannot spell that
|
|
37
|
+
// against fixed-arity subjects (ArgumentCountError), so the upstream
|
|
38
|
+
// php compat shim's correction is ported here: such entries are
|
|
39
|
+
// rewritten IN MEMORY to `args: [Struct::undef()]` - the port's own
|
|
40
|
+
// no-value sentinel, which typifies as T_noval, the canonical reading.
|
|
41
|
+
//
|
|
42
|
+
// 4. THE EMPTY-MAP COLLAPSE (struct lane only). PHP is the one port that
|
|
43
|
+
// cannot tell `{}` from `[]` after `json_decode($json, true)`: both
|
|
44
|
+
// become `[]`, and the vendored struct reads `[]` as an empty LIST.
|
|
45
|
+
// The struct corpus carries hundreds of empty maps, so the struct-lane
|
|
46
|
+
// loader (`makeStructRunner`) decodes with objects preserved, converts
|
|
47
|
+
// to omni's array model, and keeps an empty map as a MARKER string
|
|
48
|
+
// resolved at the last boundary: to a real `stdClass` inside subject
|
|
49
|
+
// arguments, to `[]` everywhere the comparison looks (ported from
|
|
50
|
+
// upstream omni's php compat shim). The SDK lane (`makeRunner`) keeps
|
|
51
|
+
// omni's plain decode - the generated utilities speak arrays, exactly
|
|
52
|
+
// what the retired inline engine fed them.
|
|
53
|
+
//
|
|
54
|
+
// 5. THE VENDORED PHP PORT LACKS THE omni#54 RUNNER FIXES the TypeScript
|
|
55
|
+
// port has at this tag (omni#57 tracks porting them): jsonstr has no
|
|
56
|
+
// cycle guard and match clones its base. Both only bite on CYCLIC
|
|
57
|
+
// values, and this port's clone/fixjson walk ARRAYS only, passing
|
|
58
|
+
// objects through by reference - so decision 2 (JSON-only maps in
|
|
59
|
+
// entries, typed state kept out of them) is also what keeps every
|
|
60
|
+
// value the runner clones or stringifies acyclic. The errify half
|
|
61
|
+
// (non-Error throwables) cannot arise: PHP only throws \Throwable.
|
|
62
|
+
|
|
63
|
+
require_once __DIR__ . '/vendor/omni/Runner.php';
|
|
64
|
+
require_once __DIR__ . '/../utility/struct/Struct.php';
|
|
65
|
+
|
|
66
|
+
use Voxgig\Omni\Absent;
|
|
67
|
+
use Voxgig\Omni\OmniError;
|
|
68
|
+
use Voxgig\Omni\Runner as OmniRunner;
|
|
69
|
+
use Voxgig\Omni\Util as OmniUtil;
|
|
70
|
+
use Voxgig\Struct\Struct;
|
|
71
|
+
|
|
72
|
+
final class ProjectNameOmni
|
|
73
|
+
{
|
|
74
|
+
public const NULLMARK = OmniUtil::NULLMARK;
|
|
75
|
+
public const UNDEFMARK = OmniUtil::UNDEFMARK;
|
|
76
|
+
public const EXISTSMARK = OmniUtil::EXISTSMARK;
|
|
77
|
+
|
|
78
|
+
/** Stands in for an empty map between the struct-lane load and the call boundary. */
|
|
79
|
+
public const EMPTYMAPMARK = '__STRUCTCOMPAT_EMPTYMAP__';
|
|
80
|
+
|
|
81
|
+
/** The entry keys that supply an argument list. */
|
|
82
|
+
private const ARGKEYS = ['in', 'args', 'ctx'];
|
|
83
|
+
|
|
84
|
+
/** ctx keys `sync_ctx` may create, pre-seeded as reference slots. */
|
|
85
|
+
private const SYNCKEYS = ['spec', 'result', 'response'];
|
|
86
|
+
|
|
87
|
+
// ------------------------------------------------------------------
|
|
88
|
+
// The SDK (primary/feature) lane.
|
|
89
|
+
// ------------------------------------------------------------------
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* struct's makeRunner($testfile, $client) signature, backed by
|
|
93
|
+
* vendored omni. Also accepts an already-parsed spec value (omni's
|
|
94
|
+
* own capability), which keeps smoke tests free of fixture files.
|
|
95
|
+
*/
|
|
96
|
+
public static function makeRunner($testfile, $client): callable
|
|
97
|
+
{
|
|
98
|
+
$provider = self::sdkprovider($client);
|
|
99
|
+
$runner = OmniRunner::makeRunner(self::specref($testfile), $provider);
|
|
100
|
+
return self::structshape($runner, $provider, Struct::undef());
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** An omni provider over the live SDK instance. */
|
|
104
|
+
private static function sdkprovider($client): array
|
|
105
|
+
{
|
|
106
|
+
$provider = [];
|
|
107
|
+
|
|
108
|
+
// A subject resolves from the utility (camelCase or the php
|
|
109
|
+
// spelling) - the corpus tests pass explicit subjects, so this is
|
|
110
|
+
// only the fallback omni's own resolution path uses.
|
|
111
|
+
$provider['subject'] = function (string $name) use ($client) {
|
|
112
|
+
$utility = $client->get_utility();
|
|
113
|
+
$found = $utility->{$name} ?? null;
|
|
114
|
+
if (null === $found) {
|
|
115
|
+
$found = $utility->{self::snake($name)} ?? null;
|
|
116
|
+
}
|
|
117
|
+
return $found;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// A DEF.client entry becomes another SDK instance - rewrapped
|
|
121
|
+
// with the same provider shape, so `entry.client` selection keeps
|
|
122
|
+
// working and ctx_from_map can unwrap it. `defbuilt` marks it: only
|
|
123
|
+
// a DEF-built client may override a call site's own (a subject that
|
|
124
|
+
// constructed a special DEF.setup client must keep it, and the BASE
|
|
125
|
+
// provider is on every ctx entry).
|
|
126
|
+
$provider['client'] = function ($options) use ($client) {
|
|
127
|
+
$cls = get_class($client);
|
|
128
|
+
$def = self::sdkprovider($cls::test(null, is_array($options) ? $options : []));
|
|
129
|
+
$def['defbuilt'] = true;
|
|
130
|
+
return $def;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// Corpus contexts stay maps; see decision 2 above.
|
|
134
|
+
$provider['contextify'] = function ($val) {
|
|
135
|
+
return self::ctxview(is_array($val) ? $val : []);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
// Client options may reference the runner store. The vendored
|
|
139
|
+
// runner discards the return, so inject through the reference.
|
|
140
|
+
$provider['inject'] = function (&$options, $store) {
|
|
141
|
+
$options = Struct::inject($options, $store);
|
|
142
|
+
return $options;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
$provider['sdk'] = $client;
|
|
146
|
+
|
|
147
|
+
return $provider;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// ------------------------------------------------------------------
|
|
151
|
+
// The struct-corpus lane.
|
|
152
|
+
// ------------------------------------------------------------------
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* The struct corpus driven through the same vendored omni, with the
|
|
156
|
+
* php-only empty-map preservation (decision 4). Subjects are wrapped
|
|
157
|
+
* so results speak omni's value model (objects become maps, the
|
|
158
|
+
* struct no-value sentinel becomes omni's Absent).
|
|
159
|
+
*/
|
|
160
|
+
public static function makeStructRunner($testfile, $client): callable
|
|
161
|
+
{
|
|
162
|
+
$provider = self::sdkprovider($client);
|
|
163
|
+
$runner = OmniRunner::makeRunner(self::loadstructspec(self::specref($testfile)), $provider);
|
|
164
|
+
return self::structshape($runner, $provider, Struct::undef(), true);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** Present an omni runner in the struct-runner shape. */
|
|
168
|
+
private static function structshape(callable $runner, array $provider, $sentinel, bool $structlane = false): callable
|
|
169
|
+
{
|
|
170
|
+
return function (?string $name = null, $store = null) use ($runner, $provider, $sentinel, $structlane): array {
|
|
171
|
+
$runpack = $runner($name, null === $store ? [] : $store);
|
|
172
|
+
|
|
173
|
+
$omniflags = $runpack['runsetflags'];
|
|
174
|
+
|
|
175
|
+
$runsetflags = function ($testspec, ?array $flags = [], $testsubject = null) use ($omniflags, $sentinel, $structlane): void {
|
|
176
|
+
if ($structlane) {
|
|
177
|
+
$testspec = self::emptymaps($testspec);
|
|
178
|
+
$testsubject = self::wrapsubject($testsubject, $sentinel);
|
|
179
|
+
}
|
|
180
|
+
$omniflags(
|
|
181
|
+
self::undefargs($testspec, $sentinel),
|
|
182
|
+
$flags ?? [],
|
|
183
|
+
$testsubject
|
|
184
|
+
);
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
$runset = function ($testspec, $testsubject = null) use ($runsetflags): void {
|
|
188
|
+
$runsetflags($testspec, [], $testsubject);
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
return [
|
|
192
|
+
'spec' => $runpack['spec'],
|
|
193
|
+
'runset' => $runset,
|
|
194
|
+
'runsetflags' => $runsetflags,
|
|
195
|
+
'subject' => $runpack['subject'],
|
|
196
|
+
'client' => $provider,
|
|
197
|
+
];
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** A relative spec path is resolved against THIS directory (test/). */
|
|
202
|
+
private static function specref($testfile)
|
|
203
|
+
{
|
|
204
|
+
if (!is_string($testfile)) {
|
|
205
|
+
return $testfile;
|
|
206
|
+
}
|
|
207
|
+
if (1 === preg_match('/^(\/|[A-Za-z]:[\/\\\\])/', $testfile)) {
|
|
208
|
+
return $testfile;
|
|
209
|
+
}
|
|
210
|
+
return __DIR__ . DIRECTORY_SEPARATOR . $testfile;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// ------------------------------------------------------------------
|
|
214
|
+
// Context machinery (decision 2).
|
|
215
|
+
// ------------------------------------------------------------------
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* The backing frames of every live ctx view. A frame must OUTLIVE the
|
|
219
|
+
* function that builds its view: `return` dissolves a reference whose
|
|
220
|
+
* only other holder is a dying local (the refcount falls to one and
|
|
221
|
+
* PHP drops the is_ref flag), which silently turns the view back into
|
|
222
|
+
* an ordinary value array. Holding the frame here keeps each slot's
|
|
223
|
+
* refcount above one, so the reference elements survive the return -
|
|
224
|
+
* and every later copy.
|
|
225
|
+
*/
|
|
226
|
+
private static array $frames = [];
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* A ctx map whose elements are references into one shared frame, so
|
|
230
|
+
* every copy the runner hands around (args[0], entry.ctx, the
|
|
231
|
+
* subject's parameter) reads and writes the same slots.
|
|
232
|
+
*/
|
|
233
|
+
public static function ctxview(array $map): array
|
|
234
|
+
{
|
|
235
|
+
foreach (self::SYNCKEYS as $k) {
|
|
236
|
+
if (!array_key_exists($k, $map)) {
|
|
237
|
+
$map[$k] = Absent::mark();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
$fi = count(self::$frames);
|
|
242
|
+
self::$frames[$fi] = $map;
|
|
243
|
+
|
|
244
|
+
$view = [];
|
|
245
|
+
foreach (array_keys(self::$frames[$fi]) as $k) {
|
|
246
|
+
$view[$k] = &self::$frames[$fi][$k];
|
|
247
|
+
}
|
|
248
|
+
return $view;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Build the typed context a generated utility takes from the ctx MAP
|
|
253
|
+
* omni handed the subject. The map's `client` entry - the provider,
|
|
254
|
+
* or a DEF-built one - resolves back to the live SDK it wraps. (The
|
|
255
|
+
* engine half of the retired inline runner did this as
|
|
256
|
+
* make_ctx_from_map.)
|
|
257
|
+
*/
|
|
258
|
+
public static function ctx_from_map($ctxmap, $client, $utility)
|
|
259
|
+
{
|
|
260
|
+
if (!is_array($ctxmap)) {
|
|
261
|
+
$ctxmap = [];
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Only a DEF-built client overrides the caller's: the base
|
|
265
|
+
// provider is on every ctx entry, and a call site that
|
|
266
|
+
// constructed a special client (a DEF.setup options set) keeps it.
|
|
267
|
+
$mapclient = $ctxmap['client'] ?? null;
|
|
268
|
+
if (is_array($mapclient) && true === ($mapclient['defbuilt'] ?? null)
|
|
269
|
+
&& is_object($mapclient['sdk'] ?? null)) {
|
|
270
|
+
$client = $mapclient['sdk'];
|
|
271
|
+
$utility = $client->get_utility();
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// The typed constructors want plain data: drop the runner's
|
|
275
|
+
// bookkeeping (the provider array, unset Absent slots).
|
|
276
|
+
$clean = [];
|
|
277
|
+
foreach ($ctxmap as $k => $v) {
|
|
278
|
+
if ('client' === $k || 'utility' === $k || $v instanceof Absent) {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
$clean[$k] = $v;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
$ctx = new ProjectNameContext($clean, null);
|
|
285
|
+
|
|
286
|
+
$ctx->client = $client;
|
|
287
|
+
$ctx->utility = $utility;
|
|
288
|
+
|
|
289
|
+
if ($ctx->options === null) {
|
|
290
|
+
$ctx->options = $client->options_map();
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
if (isset($clean['spec']) && is_array($clean['spec'])) {
|
|
294
|
+
$ctx->spec = new ProjectNameSpec($clean['spec']);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (isset($clean['result']) && is_array($clean['result'])) {
|
|
298
|
+
$ctx->result = new ProjectNameResult($clean['result']);
|
|
299
|
+
if (isset($clean['result']['err']) && is_array($clean['result']['err'])) {
|
|
300
|
+
$msg = $clean['result']['err']['message'] ?? '';
|
|
301
|
+
$ctx->result->err = new ProjectNameError('', is_string($msg) ? $msg : '');
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
if (isset($clean['response']) && is_array($clean['response'])) {
|
|
306
|
+
$ctx->response = new ProjectNameResponse($clean['response']);
|
|
307
|
+
if (isset($clean['response']['body'])) {
|
|
308
|
+
$body_copy = $clean['response']['body'];
|
|
309
|
+
$ctx->response->json_func = function () use ($body_copy) { return $body_copy; };
|
|
310
|
+
$ctx->response->body = $body_copy;
|
|
311
|
+
}
|
|
312
|
+
if (isset($clean['response']['headers']) && is_array($clean['response']['headers'])) {
|
|
313
|
+
$lower_headers = [];
|
|
314
|
+
foreach ($clean['response']['headers'] as $k => $v) {
|
|
315
|
+
$lower_headers[strtolower((string) $k)] = $v;
|
|
316
|
+
}
|
|
317
|
+
$ctx->response->headers = $lower_headers;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return $ctx;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Write the OBSERVABLE state of a typed context back into the ctx map
|
|
326
|
+
* the entry holds - where a `match: {ctx: ...}` assertion reads. The
|
|
327
|
+
* subject mutated the typed context; the map is what the runner can
|
|
328
|
+
* walk. Writes land in the shared frame through the view's reference
|
|
329
|
+
* slots. (The retired engine did this per section, by hand, as
|
|
330
|
+
* "update entry ctx for match".)
|
|
331
|
+
*/
|
|
332
|
+
public static function sync_ctx(array $ctxmap, $ctx): void
|
|
333
|
+
{
|
|
334
|
+
if (null === $ctx) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
if ($ctx->spec !== null) {
|
|
339
|
+
$spec = [
|
|
340
|
+
'base' => $ctx->spec->base,
|
|
341
|
+
'prefix' => $ctx->spec->prefix,
|
|
342
|
+
'suffix' => $ctx->spec->suffix,
|
|
343
|
+
'path' => $ctx->spec->path,
|
|
344
|
+
'method' => $ctx->spec->method,
|
|
345
|
+
'params' => $ctx->spec->params,
|
|
346
|
+
'query' => $ctx->spec->query,
|
|
347
|
+
'headers' => $ctx->spec->headers,
|
|
348
|
+
'step' => $ctx->spec->step,
|
|
349
|
+
'alias' => $ctx->spec->alias_map,
|
|
350
|
+
];
|
|
351
|
+
if ($ctx->spec->body !== null) {
|
|
352
|
+
$spec['body'] = $ctx->spec->body;
|
|
353
|
+
}
|
|
354
|
+
if (is_string($ctx->spec->url ?? null) && '' !== $ctx->spec->url) {
|
|
355
|
+
$spec['url'] = $ctx->spec->url;
|
|
356
|
+
}
|
|
357
|
+
$ctxmap['spec'] = $spec;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if ($ctx->result !== null) {
|
|
361
|
+
$res = [
|
|
362
|
+
'ok' => $ctx->result->ok,
|
|
363
|
+
'status' => $ctx->result->status,
|
|
364
|
+
'statusText' => $ctx->result->status_text,
|
|
365
|
+
'headers' => $ctx->result->headers,
|
|
366
|
+
];
|
|
367
|
+
if ($ctx->result->body !== null) {
|
|
368
|
+
$res['body'] = $ctx->result->body;
|
|
369
|
+
}
|
|
370
|
+
if ($ctx->result->err !== null) {
|
|
371
|
+
$res['err'] = ['message' => ($ctx->result->err instanceof \Throwable)
|
|
372
|
+
? $ctx->result->err->getMessage() : (string) $ctx->result->err];
|
|
373
|
+
}
|
|
374
|
+
if ($ctx->result->resdata !== null) {
|
|
375
|
+
$res['resdata'] = $ctx->result->resdata;
|
|
376
|
+
}
|
|
377
|
+
$ctxmap['result'] = $res;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
if ($ctx->response !== null) {
|
|
381
|
+
$ctxmap['response'] = 'exists';
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/** A corpus argument shaped {"message","code"} as an SDK error value. */
|
|
386
|
+
public static function err_from_map($m): ?ProjectNameError
|
|
387
|
+
{
|
|
388
|
+
if (!is_array($m)) {
|
|
389
|
+
return null;
|
|
390
|
+
}
|
|
391
|
+
$msg = $m['message'] ?? '';
|
|
392
|
+
if (!is_string($msg) || '' === $msg) {
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
$code = $m['code'] ?? '';
|
|
396
|
+
return new ProjectNameError(is_string($code) ? $code : '', $msg);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/** (value, err) tuple convention -> value-or-throw, omni's shape. */
|
|
400
|
+
public static function unwrap(array $pair)
|
|
401
|
+
{
|
|
402
|
+
[$val, $err] = $pair;
|
|
403
|
+
if ($err !== null) {
|
|
404
|
+
if ($err instanceof \Throwable) {
|
|
405
|
+
throw $err;
|
|
406
|
+
}
|
|
407
|
+
throw new \Exception((string) $err);
|
|
408
|
+
}
|
|
409
|
+
return $val;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/** `makeContext` -> `make_context`: the SDK utility is snake_case. */
|
|
413
|
+
private static function snake(string $name): string
|
|
414
|
+
{
|
|
415
|
+
return strtolower(preg_replace('/([a-z0-9])([A-Z])/', '$1_$2', $name) ?? $name);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// ------------------------------------------------------------------
|
|
419
|
+
// No-argument entries (decision 3; ported from upstream omni's php
|
|
420
|
+
// compat shim).
|
|
421
|
+
// ------------------------------------------------------------------
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Rewrite entries carrying none of `in`, `args`, `ctx` to an explicit
|
|
425
|
+
* `args` of one no-value sentinel - in memory, for this port only.
|
|
426
|
+
* The corpus on disk is untouched.
|
|
427
|
+
*/
|
|
428
|
+
public static function undefargs($testspec, $sentinel)
|
|
429
|
+
{
|
|
430
|
+
if (null === $sentinel || !OmniUtil::ismap($testspec)) {
|
|
431
|
+
return $testspec;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
$set = $testspec['set'] ?? null;
|
|
435
|
+
if (!OmniUtil::islist($set)) {
|
|
436
|
+
return $testspec;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
$found = false;
|
|
440
|
+
foreach ($set as $entry) {
|
|
441
|
+
if (self::noargs($entry)) {
|
|
442
|
+
$found = true;
|
|
443
|
+
break;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
if (!$found) {
|
|
447
|
+
return $testspec;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
$patched = [];
|
|
451
|
+
foreach ($set as $entry) {
|
|
452
|
+
if (self::noargs($entry)) {
|
|
453
|
+
$entry['args'] = [$sentinel];
|
|
454
|
+
}
|
|
455
|
+
$patched[] = $entry;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
$out = $testspec;
|
|
459
|
+
$out['set'] = $patched;
|
|
460
|
+
return $out;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/** An entry that supplies no argument list at all. */
|
|
464
|
+
private static function noargs($entry): bool
|
|
465
|
+
{
|
|
466
|
+
if (!OmniUtil::ismap($entry) && self::EMPTYMAPMARK !== $entry) {
|
|
467
|
+
return false;
|
|
468
|
+
}
|
|
469
|
+
if (self::EMPTYMAPMARK === $entry) {
|
|
470
|
+
return true;
|
|
471
|
+
}
|
|
472
|
+
foreach (self::ARGKEYS as $key) {
|
|
473
|
+
if (array_key_exists($key, $entry)) {
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// ------------------------------------------------------------------
|
|
481
|
+
// The struct lane's empty-map preservation (decision 4; ported from
|
|
482
|
+
// upstream omni's php compat shim).
|
|
483
|
+
// ------------------------------------------------------------------
|
|
484
|
+
|
|
485
|
+
/** Load a struct-lane spec so that an empty map survives the decode. */
|
|
486
|
+
public static function loadstructspec($specref)
|
|
487
|
+
{
|
|
488
|
+
if (!is_string($specref)) {
|
|
489
|
+
return $specref;
|
|
490
|
+
}
|
|
491
|
+
$text = file_get_contents($specref);
|
|
492
|
+
if (false === $text) {
|
|
493
|
+
throw new OmniError('omni resolver: cannot read spec: ' . $specref);
|
|
494
|
+
}
|
|
495
|
+
return self::mapempty(json_decode($text, false, 512, JSON_THROW_ON_ERROR));
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/** Objects to arrays; an empty object becomes the marker. */
|
|
499
|
+
private static function mapempty($val)
|
|
500
|
+
{
|
|
501
|
+
if ($val instanceof \stdClass) {
|
|
502
|
+
$vars = get_object_vars($val);
|
|
503
|
+
if (0 === count($vars)) {
|
|
504
|
+
return self::EMPTYMAPMARK;
|
|
505
|
+
}
|
|
506
|
+
$out = [];
|
|
507
|
+
foreach ($vars as $key => $subval) {
|
|
508
|
+
$out[$key] = self::mapempty($subval);
|
|
509
|
+
}
|
|
510
|
+
return $out;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
if (is_array($val)) {
|
|
514
|
+
$out = [];
|
|
515
|
+
foreach ($val as $key => $subval) {
|
|
516
|
+
$out[$key] = self::mapempty($subval);
|
|
517
|
+
}
|
|
518
|
+
return $out;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
return $val;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Resolve the marker per side: argument positions keep it (resolved
|
|
526
|
+
* to a real stdClass inside the subject wrapper), everywhere else it
|
|
527
|
+
* becomes `[]`, which is what the array-model comparison will see.
|
|
528
|
+
*/
|
|
529
|
+
public static function emptymaps($testspec)
|
|
530
|
+
{
|
|
531
|
+
if (!OmniUtil::ismap($testspec)) {
|
|
532
|
+
return $testspec;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
$set = $testspec['set'] ?? null;
|
|
536
|
+
if (!OmniUtil::islist($set)) {
|
|
537
|
+
return $testspec;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
$patched = [];
|
|
541
|
+
foreach ($set as $entry) {
|
|
542
|
+
// A whole entry may be the marker - a degenerate `{}` entry.
|
|
543
|
+
if (self::EMPTYMAPMARK === $entry) {
|
|
544
|
+
$entry = [];
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
if (OmniUtil::ismap($entry)) {
|
|
548
|
+
foreach ($entry as $key => $val) {
|
|
549
|
+
if (in_array($key, self::ARGKEYS, true)) {
|
|
550
|
+
continue;
|
|
551
|
+
}
|
|
552
|
+
$entry[$key] = self::unmark($val);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
$patched[] = $entry;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
$out = $testspec;
|
|
559
|
+
$out['set'] = $patched;
|
|
560
|
+
return $out;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
/** Result side: the marker becomes `[]`. */
|
|
564
|
+
public static function unmark($val)
|
|
565
|
+
{
|
|
566
|
+
if (self::EMPTYMAPMARK === $val) {
|
|
567
|
+
return [];
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
if (is_array($val)) {
|
|
571
|
+
$out = [];
|
|
572
|
+
foreach ($val as $key => $subval) {
|
|
573
|
+
$out[$key] = self::unmark($subval);
|
|
574
|
+
}
|
|
575
|
+
return $out;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
return $val;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
/** Argument side: the marker becomes a real empty map. */
|
|
582
|
+
public static function argval($val)
|
|
583
|
+
{
|
|
584
|
+
if (self::EMPTYMAPMARK === $val) {
|
|
585
|
+
return new \stdClass();
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
if (is_array($val)) {
|
|
589
|
+
$out = [];
|
|
590
|
+
foreach ($val as $key => $subval) {
|
|
591
|
+
$out[$key] = self::argval($subval);
|
|
592
|
+
}
|
|
593
|
+
return $out;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
return $val;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/**
|
|
600
|
+
* The struct-lane OBJECT model: every map becomes a stdClass, lists
|
|
601
|
+
* stay PHP arrays - exactly what the retired engine's object-mode
|
|
602
|
+
* decode fed the struct utilities, so the subjects keep receiving the
|
|
603
|
+
* value shapes they always have. (Results go the other way, through
|
|
604
|
+
* structfix.)
|
|
605
|
+
*/
|
|
606
|
+
public static function objmodel($val)
|
|
607
|
+
{
|
|
608
|
+
if (is_array($val)) {
|
|
609
|
+
if (array_is_list($val)) {
|
|
610
|
+
$out = [];
|
|
611
|
+
foreach ($val as $subval) {
|
|
612
|
+
$out[] = self::objmodel($subval);
|
|
613
|
+
}
|
|
614
|
+
return $out;
|
|
615
|
+
}
|
|
616
|
+
$out = new \stdClass();
|
|
617
|
+
foreach ($val as $key => $subval) {
|
|
618
|
+
$out->{$key} = self::objmodel($subval);
|
|
619
|
+
}
|
|
620
|
+
return $out;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
return $val;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/**
|
|
627
|
+
* Normalise a struct result to omni's value model: objects become
|
|
628
|
+
* maps, and the struct no-value sentinel becomes omni's Absent. The
|
|
629
|
+
* sentinel is checked BEFORE the object walk (it is itself stdClass).
|
|
630
|
+
*/
|
|
631
|
+
public static function structfix($val, $sentinel)
|
|
632
|
+
{
|
|
633
|
+
if (null !== $sentinel && $val === $sentinel) {
|
|
634
|
+
return Absent::mark();
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
if (is_array($val)) {
|
|
638
|
+
$out = [];
|
|
639
|
+
foreach ($val as $key => $subval) {
|
|
640
|
+
$out[$key] = self::structfix($subval, $sentinel);
|
|
641
|
+
}
|
|
642
|
+
return $out;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
if (is_object($val) && !($val instanceof \Throwable)
|
|
646
|
+
&& !($val instanceof \Closure) && !OmniUtil::isabsent($val)) {
|
|
647
|
+
$out = [];
|
|
648
|
+
foreach (get_object_vars($val) as $key => $subval) {
|
|
649
|
+
$out[$key] = self::structfix($subval, $sentinel);
|
|
650
|
+
}
|
|
651
|
+
return $out;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
return $val;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/** A subject whose arguments and result speak the two value models. */
|
|
658
|
+
public static function wrapsubject($subject, $sentinel)
|
|
659
|
+
{
|
|
660
|
+
if (null === $subject || !is_callable($subject)) {
|
|
661
|
+
return $subject;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
return function (...$args) use ($subject, $sentinel) {
|
|
665
|
+
$args = self::objmodel(self::argval($args));
|
|
666
|
+
return self::structfix($subject(...$args), $sentinel);
|
|
667
|
+
};
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* Convert NULLMARK sentinels back into real nulls. The struct port's
|
|
672
|
+
* inject walks stdClass nodes as well as arrays, so the parent may be
|
|
673
|
+
* either; extra trailing parameters match struct's five-argument
|
|
674
|
+
* modifier convention.
|
|
675
|
+
*/
|
|
676
|
+
public static function nullModifier($val, $key, &$parent = null, $state = null, $store = null): void
|
|
677
|
+
{
|
|
678
|
+
if (is_object($parent) && !($parent instanceof \ArrayAccess)) {
|
|
679
|
+
if (OmniUtil::NULLMARK === $val) {
|
|
680
|
+
$parent->{$key} = null;
|
|
681
|
+
} elseif (is_string($val)) {
|
|
682
|
+
$parent->{$key} = str_replace(OmniUtil::NULLMARK, 'null', $val);
|
|
683
|
+
}
|
|
684
|
+
return;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
if (is_array($parent)) {
|
|
688
|
+
OmniRunner::nullmodifier($val, $key, $parent);
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
}
|