@voxgig/sdkgen 4.10.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +330 -0
- package/project/.sdk/model/target/c.aon +15 -2
- package/project/.sdk/model/target/cpp.aon +18 -0
- package/project/.sdk/model/target/lua.aon +17 -0
- package/project/.sdk/model/target/ocaml.aon +48 -5
- package/project/.sdk/model/target/zig.aon +30 -4
- package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
- package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
- package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
- package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
- package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
- package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
- package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
- package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
- package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
- package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
- package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
- package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
- package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
- package/project/.sdk/tm/c/Makefile +58 -9
- package/project/.sdk/tm/c/core/sdk.h +10 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
- package/project/.sdk/tm/c/feature/secrets.c +797 -0
- package/project/.sdk/tm/c/feature/secrets.h +46 -0
- package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
- package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
- package/project/.sdk/tm/cpp/Makefile +48 -4
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
- package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
- package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
- package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
- package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
- package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
- package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
- package/project/.sdk/tm/lua/Makefile +15 -4
- package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
- package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
- package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
- package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
- package/project/.sdk/tm/ocaml/Makefile +52 -8
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
- package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
- package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
- package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
- package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
- package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
- package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
- package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
- package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
- package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
- package/project/sdkgen-package.json +1 -1
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
(* VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (ocaml/src/json.ml) *)
|
|
2
|
+
(* Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0] *)
|
|
3
|
+
(* License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream. *)
|
|
4
|
+
(* Minimal JSON support for sekreto.
|
|
5
|
+
|
|
6
|
+
sekreto adds no third-party dependencies, so it carries just enough JSON
|
|
7
|
+
to read a vault's answer and write the CLI's own line of output. It is
|
|
8
|
+
deliberately not a general-purpose library.
|
|
9
|
+
|
|
10
|
+
A variant rather than a stringly-typed value: a vault answering `null`,
|
|
11
|
+
`false`, `0` and "no such key" means four different things, and a closed
|
|
12
|
+
value model keeps them apart at compile time rather than by convention.
|
|
13
|
+
`parse` answers `t option`, where `None` means "this text is not JSON"
|
|
14
|
+
and `Some Null` means "this text is the JSON literal null" - a
|
|
15
|
+
distinction the callers of fetchjson need, since only the first is a
|
|
16
|
+
malformed response.
|
|
17
|
+
|
|
18
|
+
A port of typescript/src/Json.ts, which is canonical. *)
|
|
19
|
+
|
|
20
|
+
type t =
|
|
21
|
+
| Null
|
|
22
|
+
| Bool of bool
|
|
23
|
+
| Num of float
|
|
24
|
+
| Str of string
|
|
25
|
+
| Arr of t list
|
|
26
|
+
| Obj of (string * t) list
|
|
27
|
+
|
|
28
|
+
(* Raised while reading malformed JSON; never escapes `parse`. *)
|
|
29
|
+
exception Json_error of string
|
|
30
|
+
|
|
31
|
+
(* How deep a response body may nest before it is refused.
|
|
32
|
+
|
|
33
|
+
A body arrives before any trust check has been made of what sent it, so
|
|
34
|
+
`[[[[[...` must not be allowed to recurse until the stack gives out. *)
|
|
35
|
+
let maxdepth = 128
|
|
36
|
+
|
|
37
|
+
(* Render a number the way every other port does: a whole number has no
|
|
38
|
+
fractional tail, so a JSON `1` read back and printed stays `1`.
|
|
39
|
+
|
|
40
|
+
The fractional case looks for the shortest rendering that reads back as
|
|
41
|
+
the same double, which is what every other port's float printer does. A
|
|
42
|
+
flat `%.17g` would print 0.1 as 0.10000000000000001. *)
|
|
43
|
+
let numstr (value : float) : string =
|
|
44
|
+
if Float.is_nan value || value = Float.infinity || value = Float.neg_infinity then "null"
|
|
45
|
+
else if Float.is_integer value && Float.abs value < 9007199254740992.0 then
|
|
46
|
+
Printf.sprintf "%.0f" value
|
|
47
|
+
else
|
|
48
|
+
let rec shortest digits =
|
|
49
|
+
if digits > 17 then Printf.sprintf "%.17g" value
|
|
50
|
+
else
|
|
51
|
+
let text = Printf.sprintf "%.*g" digits value in
|
|
52
|
+
if float_of_string text = value then text else shortest (digits + 1)
|
|
53
|
+
in
|
|
54
|
+
shortest 15
|
|
55
|
+
|
|
56
|
+
(* ---- accessors ------------------------------------------------------ *)
|
|
57
|
+
|
|
58
|
+
let asstr = function Str value -> Some value | _ -> None
|
|
59
|
+
let asnum = function Num value -> Some value | _ -> None
|
|
60
|
+
let asarr = function Arr value -> Some value | _ -> None
|
|
61
|
+
let asobj = function Obj value -> Some value | _ -> None
|
|
62
|
+
|
|
63
|
+
(* Walk nested objects; None the moment a step is not there. *)
|
|
64
|
+
let rec dig (value : t) (keys : string list) : t option =
|
|
65
|
+
match keys with
|
|
66
|
+
| [] -> Some value
|
|
67
|
+
| key :: rest -> (
|
|
68
|
+
match value with
|
|
69
|
+
| Obj entries -> (
|
|
70
|
+
match List.assoc_opt key entries with None -> None | Some found -> dig found rest)
|
|
71
|
+
| _ -> None)
|
|
72
|
+
|
|
73
|
+
let rec write (value : t) (out : Buffer.t) : unit =
|
|
74
|
+
match value with
|
|
75
|
+
| Null -> Buffer.add_string out "null"
|
|
76
|
+
| Bool entry -> Buffer.add_string out (if entry then "true" else "false")
|
|
77
|
+
| Num entry -> Buffer.add_string out (numstr entry)
|
|
78
|
+
| Str entry -> Buffer.add_string out (quote entry)
|
|
79
|
+
| Arr entries ->
|
|
80
|
+
Buffer.add_char out '[';
|
|
81
|
+
List.iteri
|
|
82
|
+
(fun index entry ->
|
|
83
|
+
if 0 < index then Buffer.add_char out ',';
|
|
84
|
+
write entry out)
|
|
85
|
+
entries;
|
|
86
|
+
Buffer.add_char out ']'
|
|
87
|
+
| Obj entries ->
|
|
88
|
+
Buffer.add_char out '{';
|
|
89
|
+
List.iteri
|
|
90
|
+
(fun index (key, entry) ->
|
|
91
|
+
if 0 < index then Buffer.add_char out ',';
|
|
92
|
+
Buffer.add_string out (quote key);
|
|
93
|
+
Buffer.add_char out ':';
|
|
94
|
+
write entry out)
|
|
95
|
+
entries;
|
|
96
|
+
Buffer.add_char out '}'
|
|
97
|
+
|
|
98
|
+
(* Render a string as a JSON string literal, quotes included.
|
|
99
|
+
|
|
100
|
+
Public, because the CLI assembles its one line of output field by field
|
|
101
|
+
rather than by printing a map - the language's own key order is not the
|
|
102
|
+
one every other port prints. *)
|
|
103
|
+
and quote (text : string) : string =
|
|
104
|
+
let out = Buffer.create (String.length text + 2) in
|
|
105
|
+
Buffer.add_char out '"';
|
|
106
|
+
String.iter
|
|
107
|
+
(fun ch ->
|
|
108
|
+
match ch with
|
|
109
|
+
| '"' -> Buffer.add_string out "\\\""
|
|
110
|
+
| '\\' -> Buffer.add_string out "\\\\"
|
|
111
|
+
| '\n' -> Buffer.add_string out "\\n"
|
|
112
|
+
| '\r' -> Buffer.add_string out "\\r"
|
|
113
|
+
| '\t' -> Buffer.add_string out "\\t"
|
|
114
|
+
| _ ->
|
|
115
|
+
if 0x20 > Char.code ch then Buffer.add_string out (Printf.sprintf "\\u%04x" (Char.code ch))
|
|
116
|
+
else Buffer.add_char out ch)
|
|
117
|
+
text;
|
|
118
|
+
Buffer.add_char out '"';
|
|
119
|
+
Buffer.contents out
|
|
120
|
+
|
|
121
|
+
(* Render a value as compact JSON: no spaces, no newlines. *)
|
|
122
|
+
let stringify (value : t) : string =
|
|
123
|
+
let out = Buffer.create 64 in
|
|
124
|
+
write value out;
|
|
125
|
+
Buffer.contents out
|
|
126
|
+
|
|
127
|
+
(* This value as the text a caller would print, or None when there is no
|
|
128
|
+
value at all. A JSON null is "no value": every provider here treats it as
|
|
129
|
+
a miss rather than as the string "null". *)
|
|
130
|
+
let text (value : t) : string option =
|
|
131
|
+
match value with
|
|
132
|
+
| Null -> None
|
|
133
|
+
| Str entry -> Some entry
|
|
134
|
+
| Num entry -> Some (numstr entry)
|
|
135
|
+
| Bool entry -> Some (if entry then "true" else "false")
|
|
136
|
+
| other -> Some (stringify other)
|
|
137
|
+
|
|
138
|
+
(* ---- constructors --------------------------------------------------- *)
|
|
139
|
+
|
|
140
|
+
let str value = Str value
|
|
141
|
+
let num value = Num value
|
|
142
|
+
let bool value = Bool value
|
|
143
|
+
let arr entries = Arr entries
|
|
144
|
+
|
|
145
|
+
(* An object, in the order given: a payload's field order is signed. *)
|
|
146
|
+
let obj (entries : (string * t) list) : t = Obj entries
|
|
147
|
+
|
|
148
|
+
(* ---- the parser ----------------------------------------------------- *)
|
|
149
|
+
|
|
150
|
+
type reader = { text : string; mutable at : int }
|
|
151
|
+
|
|
152
|
+
let done_ (r : reader) : bool = r.at >= String.length r.text
|
|
153
|
+
|
|
154
|
+
let skip (r : reader) : unit =
|
|
155
|
+
while
|
|
156
|
+
(not (done_ r))
|
|
157
|
+
&& match r.text.[r.at] with ' ' | '\t' | '\n' | '\r' -> true | _ -> false
|
|
158
|
+
do
|
|
159
|
+
r.at <- r.at + 1
|
|
160
|
+
done
|
|
161
|
+
|
|
162
|
+
let word (r : reader) (want : string) : unit =
|
|
163
|
+
let len = String.length want in
|
|
164
|
+
if r.at + len > String.length r.text || String.sub r.text r.at len <> want then
|
|
165
|
+
raise (Json_error (Printf.sprintf "sekreto: json: bad literal at %d" r.at));
|
|
166
|
+
r.at <- r.at + len
|
|
167
|
+
|
|
168
|
+
(* One code point as UTF-8. `\uXXXX` reads exactly four hex digits and
|
|
169
|
+
yields one code unit; no port recombines surrogate pairs. *)
|
|
170
|
+
let addutf8 (out : Buffer.t) (code : int) : unit =
|
|
171
|
+
if code < 0x80 then Buffer.add_char out (Char.chr code)
|
|
172
|
+
else if code < 0x800 then begin
|
|
173
|
+
Buffer.add_char out (Char.chr (0xc0 lor (code lsr 6)));
|
|
174
|
+
Buffer.add_char out (Char.chr (0x80 lor (code land 0x3f)))
|
|
175
|
+
end
|
|
176
|
+
else begin
|
|
177
|
+
Buffer.add_char out (Char.chr (0xe0 lor (code lsr 12)));
|
|
178
|
+
Buffer.add_char out (Char.chr (0x80 lor ((code lsr 6) land 0x3f)));
|
|
179
|
+
Buffer.add_char out (Char.chr (0x80 lor (code land 0x3f)))
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
let readstring (r : reader) : string =
|
|
183
|
+
if done_ r || '"' <> r.text.[r.at] then
|
|
184
|
+
raise (Json_error (Printf.sprintf "sekreto: json: expected string at %d" r.at));
|
|
185
|
+
r.at <- r.at + 1;
|
|
186
|
+
|
|
187
|
+
let out = Buffer.create 16 in
|
|
188
|
+
let finished = ref false in
|
|
189
|
+
|
|
190
|
+
while not !finished do
|
|
191
|
+
if done_ r then raise (Json_error "sekreto: json: unterminated string");
|
|
192
|
+
let ch = r.text.[r.at] in
|
|
193
|
+
r.at <- r.at + 1;
|
|
194
|
+
|
|
195
|
+
if '"' = ch then finished := true
|
|
196
|
+
else if '\\' <> ch then Buffer.add_char out ch
|
|
197
|
+
else begin
|
|
198
|
+
if done_ r then raise (Json_error "sekreto: json: unterminated string");
|
|
199
|
+
let escape = r.text.[r.at] in
|
|
200
|
+
r.at <- r.at + 1;
|
|
201
|
+
match escape with
|
|
202
|
+
| '"' -> Buffer.add_char out '"'
|
|
203
|
+
| '\\' -> Buffer.add_char out '\\'
|
|
204
|
+
| '/' -> Buffer.add_char out '/'
|
|
205
|
+
| 'b' -> Buffer.add_char out '\b'
|
|
206
|
+
| 'f' -> Buffer.add_char out '\012'
|
|
207
|
+
| 'n' -> Buffer.add_char out '\n'
|
|
208
|
+
| 'r' -> Buffer.add_char out '\r'
|
|
209
|
+
| 't' -> Buffer.add_char out '\t'
|
|
210
|
+
| 'u' ->
|
|
211
|
+
if r.at + 4 > String.length r.text then
|
|
212
|
+
raise (Json_error "sekreto: json: bad unicode escape");
|
|
213
|
+
let digits = String.sub r.text r.at 4 in
|
|
214
|
+
let code =
|
|
215
|
+
try int_of_string ("0x" ^ digits)
|
|
216
|
+
with _ -> raise (Json_error "sekreto: json: bad unicode escape")
|
|
217
|
+
in
|
|
218
|
+
addutf8 out code;
|
|
219
|
+
r.at <- r.at + 4
|
|
220
|
+
| other -> raise (Json_error (Printf.sprintf "sekreto: json: bad escape [%c]" other))
|
|
221
|
+
end
|
|
222
|
+
done;
|
|
223
|
+
|
|
224
|
+
Buffer.contents out
|
|
225
|
+
|
|
226
|
+
let readnumber (r : reader) : t =
|
|
227
|
+
let start = r.at in
|
|
228
|
+
|
|
229
|
+
if (not (done_ r)) && ('-' = r.text.[r.at] || '+' = r.text.[r.at]) then r.at <- r.at + 1;
|
|
230
|
+
|
|
231
|
+
while
|
|
232
|
+
(not (done_ r))
|
|
233
|
+
&&
|
|
234
|
+
match r.text.[r.at] with
|
|
235
|
+
| '0' .. '9' | '.' | 'e' | 'E' | '-' | '+' -> true
|
|
236
|
+
| _ -> false
|
|
237
|
+
do
|
|
238
|
+
r.at <- r.at + 1
|
|
239
|
+
done;
|
|
240
|
+
|
|
241
|
+
let span = String.sub r.text start (r.at - start) in
|
|
242
|
+
|
|
243
|
+
match float_of_string_opt span with
|
|
244
|
+
(* JSON has no infinity, and a token expiry computed from one blows up
|
|
245
|
+
later; 1e999 parses to infinity, so a non-finite result is refused. *)
|
|
246
|
+
| Some value when Float.is_nan value || Float.abs value = Float.infinity ->
|
|
247
|
+
raise (Json_error (Printf.sprintf "sekreto: json: non-finite number [%s]" span))
|
|
248
|
+
| Some value -> Num value
|
|
249
|
+
| None -> raise (Json_error (Printf.sprintf "sekreto: json: bad number [%s]" span))
|
|
250
|
+
|
|
251
|
+
(* Set a key, keeping its first position if it is already there. *)
|
|
252
|
+
let objset (entries : (string * t) list) (key : string) (value : t) : (string * t) list =
|
|
253
|
+
if List.mem_assoc key entries then
|
|
254
|
+
List.map (fun (k, v) -> if k = key then (k, value) else (k, v)) entries
|
|
255
|
+
else entries @ [ (key, value) ]
|
|
256
|
+
|
|
257
|
+
let rec readvalue (r : reader) (depth : int) : t =
|
|
258
|
+
if depth > maxdepth then raise (Json_error "sekreto: json: too deeply nested");
|
|
259
|
+
if done_ r then raise (Json_error "sekreto: json: unexpected end");
|
|
260
|
+
|
|
261
|
+
match r.text.[r.at] with
|
|
262
|
+
| '{' -> readobj r depth
|
|
263
|
+
| '[' -> readarr r depth
|
|
264
|
+
| '"' -> Str (readstring r)
|
|
265
|
+
| 't' ->
|
|
266
|
+
word r "true";
|
|
267
|
+
Bool true
|
|
268
|
+
| 'f' ->
|
|
269
|
+
word r "false";
|
|
270
|
+
Bool false
|
|
271
|
+
| 'n' ->
|
|
272
|
+
word r "null";
|
|
273
|
+
Null
|
|
274
|
+
| _ -> readnumber r
|
|
275
|
+
|
|
276
|
+
and readobj (r : reader) (depth : int) : t =
|
|
277
|
+
r.at <- r.at + 1;
|
|
278
|
+
skip r;
|
|
279
|
+
|
|
280
|
+
if (not (done_ r)) && '}' = r.text.[r.at] then begin
|
|
281
|
+
r.at <- r.at + 1;
|
|
282
|
+
Obj []
|
|
283
|
+
end
|
|
284
|
+
else begin
|
|
285
|
+
let out = ref [] in
|
|
286
|
+
let running = ref true in
|
|
287
|
+
|
|
288
|
+
while !running do
|
|
289
|
+
skip r;
|
|
290
|
+
let key = readstring r in
|
|
291
|
+
skip r;
|
|
292
|
+
|
|
293
|
+
if done_ r || ':' <> r.text.[r.at] then
|
|
294
|
+
raise (Json_error (Printf.sprintf "sekreto: json: expected ':' at %d" r.at));
|
|
295
|
+
r.at <- r.at + 1;
|
|
296
|
+
|
|
297
|
+
skip r;
|
|
298
|
+
out := objset !out key (readvalue r (depth + 1));
|
|
299
|
+
skip r;
|
|
300
|
+
|
|
301
|
+
if done_ r then raise (Json_error "sekreto: json: unterminated object");
|
|
302
|
+
if ',' = r.text.[r.at] then r.at <- r.at + 1
|
|
303
|
+
else if '}' = r.text.[r.at] then begin
|
|
304
|
+
r.at <- r.at + 1;
|
|
305
|
+
running := false
|
|
306
|
+
end
|
|
307
|
+
else raise (Json_error (Printf.sprintf "sekreto: json: expected ',' or '}' at %d" r.at))
|
|
308
|
+
done;
|
|
309
|
+
|
|
310
|
+
Obj !out
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
and readarr (r : reader) (depth : int) : t =
|
|
314
|
+
r.at <- r.at + 1;
|
|
315
|
+
skip r;
|
|
316
|
+
|
|
317
|
+
if (not (done_ r)) && ']' = r.text.[r.at] then begin
|
|
318
|
+
r.at <- r.at + 1;
|
|
319
|
+
Arr []
|
|
320
|
+
end
|
|
321
|
+
else begin
|
|
322
|
+
let out = ref [] in
|
|
323
|
+
let running = ref true in
|
|
324
|
+
|
|
325
|
+
while !running do
|
|
326
|
+
skip r;
|
|
327
|
+
out := readvalue r (depth + 1) :: !out;
|
|
328
|
+
skip r;
|
|
329
|
+
|
|
330
|
+
if done_ r then raise (Json_error "sekreto: json: unterminated array");
|
|
331
|
+
if ',' = r.text.[r.at] then r.at <- r.at + 1
|
|
332
|
+
else if ']' = r.text.[r.at] then begin
|
|
333
|
+
r.at <- r.at + 1;
|
|
334
|
+
running := false
|
|
335
|
+
end
|
|
336
|
+
else raise (Json_error (Printf.sprintf "sekreto: json: expected ',' or ']' at %d" r.at))
|
|
337
|
+
done;
|
|
338
|
+
|
|
339
|
+
Arr (List.rev !out)
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
(* Parse JSON text. None for anything unreadable - which the caller must
|
|
343
|
+
tell apart from a literal `null` body, since only the first means the
|
|
344
|
+
store could not answer coherently. No error escapes here. *)
|
|
345
|
+
let parse (text : string) : t option =
|
|
346
|
+
if "" = text then None
|
|
347
|
+
else
|
|
348
|
+
try
|
|
349
|
+
let r = { text; at = 0 } in
|
|
350
|
+
skip r;
|
|
351
|
+
let value = readvalue r 0 in
|
|
352
|
+
skip r;
|
|
353
|
+
if not (done_ r) then
|
|
354
|
+
raise (Json_error (Printf.sprintf "sekreto: json: trailing content at %d" r.at));
|
|
355
|
+
Some value
|
|
356
|
+
with _ -> None
|
|
357
|
+
|
|
358
|
+
(* ---- the same reads on an optional value ----------------------------
|
|
359
|
+
|
|
360
|
+
A provider walks a response body, which is `t option` because a store may
|
|
361
|
+
not have answered with JSON at all, without unwrapping at every step. *)
|
|
362
|
+
|
|
363
|
+
let odig (value : t option) (keys : string list) : t option =
|
|
364
|
+
match value with None -> None | Some found -> dig found keys
|
|
365
|
+
|
|
366
|
+
let otext (value : t option) : string option =
|
|
367
|
+
match value with None -> None | Some found -> text found
|
|
368
|
+
|
|
369
|
+
let oasstr (value : t option) : string option =
|
|
370
|
+
match value with None -> None | Some found -> asstr found
|
|
371
|
+
|
|
372
|
+
let oasarr (value : t option) : t list option =
|
|
373
|
+
match value with None -> None | Some found -> asarr found
|
|
374
|
+
|
|
375
|
+
let oasobj (value : t option) : (string * t) list option =
|
|
376
|
+
match value with None -> None | Some found -> asobj found
|