diff --git a/.ghjk/lock.json b/.ghjk/lock.json index f46b7e3d5e..dc28719b40 100644 --- a/.ghjk/lock.json +++ b/.ghjk/lock.json @@ -1082,37 +1082,37 @@ "ty": "denoFile@v1", "key": "dev-gate6", "desc": "Launch the typegate from a locally found meta bin.", - "envKey": "bciqcljozrbuwh7aum6v6soif6qr2nvpwr7gbyxrmob3ybh4bsxpqfyy" + "envKey": "bciqk7rioqxzcpzf572poq2vwefpcmqnboofojgkgonvpih3q6wwyldq" }, "dev-gate5": { "ty": "denoFile@v1", "key": "dev-gate5", "desc": "Launch the typegate from the latests published image.", - "envKey": "bciqcljozrbuwh7aum6v6soif6qr2nvpwr7gbyxrmob3ybh4bsxpqfyy" + "envKey": "bciqk7rioqxzcpzf572poq2vwefpcmqnboofojgkgonvpih3q6wwyldq" }, "dev-gate4": { "ty": "denoFile@v1", "key": "dev-gate4", "desc": "Launch the typegate from the locally built typegate image.", - "envKey": "bciqcljozrbuwh7aum6v6soif6qr2nvpwr7gbyxrmob3ybh4bsxpqfyy" + "envKey": "bciqk7rioqxzcpzf572poq2vwefpcmqnboofojgkgonvpih3q6wwyldq" }, "dev-gate3": { "ty": "denoFile@v1", "key": "dev-gate3", "desc": "Launch the typegate from meta-cli cmd.", - "envKey": "bciqcljozrbuwh7aum6v6soif6qr2nvpwr7gbyxrmob3ybh4bsxpqfyy" + "envKey": "bciqk7rioqxzcpzf572poq2vwefpcmqnboofojgkgonvpih3q6wwyldq" }, "dev-gate2": { "ty": "denoFile@v1", "key": "dev-gate2", "desc": "Launch the typegate in sync mode.", - "envKey": "bciqgfe63ayh7e7kzg4f47bmaleew7jcdukchs3cg45tvdiwoxotxzfy" + "envKey": "bciqe4fan2davv7bngzw6aygwwbrd7vjviea4rylpwikafl4kqyaxyuq" }, "dev-gate1": { "ty": "denoFile@v1", "key": "dev-gate1", "desc": "Launch the typegate in single-instance mode.", - "envKey": "bciqcljozrbuwh7aum6v6soif6qr2nvpwr7gbyxrmob3ybh4bsxpqfyy" + "envKey": "bciqk7rioqxzcpzf572poq2vwefpcmqnboofojgkgonvpih3q6wwyldq" }, "dev-eg-tgraphs": { "ty": "denoFile@v1", @@ -1561,7 +1561,7 @@ } ] }, - "bciqcljozrbuwh7aum6v6soif6qr2nvpwr7gbyxrmob3ybh4bsxpqfyy": { + "bciqk7rioqxzcpzf572poq2vwefpcmqnboofojgkgonvpih3q6wwyldq": { "provides": [ { "ty": "posix.envVar", @@ -1596,7 +1596,7 @@ { "ty": "posix.envVar", "key": "LOG_LEVEL", - "val": "DEBUG" + "val": "DEBUG,substantial=ERROR" }, { "ty": "posix.envVar", @@ -1629,7 +1629,7 @@ } ] }, - "bciqgfe63ayh7e7kzg4f47bmaleew7jcdukchs3cg45tvdiwoxotxzfy": { + "bciqe4fan2davv7bngzw6aygwwbrd7vjviea4rylpwikafl4kqyaxyuq": { "provides": [ { "ty": "posix.envVar", @@ -1664,7 +1664,7 @@ { "ty": "posix.envVar", "key": "LOG_LEVEL", - "val": "DEBUG" + "val": "DEBUG,substantial=ERROR" }, { "ty": "posix.envVar", diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8e5aae951a..bc3a39ce3c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -152,6 +152,7 @@ repos: exclude: tests/metagen/typegraphs/sample/rs/client.rs - id: clippy args: + - "--workspace" - "--locked" - "--all-features" - "--all-targets" diff --git a/Cargo.lock b/Cargo.lock index 54ad24769e..67ce24b1fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1462,15 +1462,6 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" -[[package]] -name = "client_rs_static" -version = "0.0.1" -dependencies = [ - "reqwest", - "serde", - "serde_json", -] - [[package]] name = "clipboard-win" version = "5.4.0" @@ -3600,6 +3591,7 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.71", + "unicode-xid", ] [[package]] @@ -6070,7 +6062,7 @@ dependencies = [ "socket2 0.5.7", "widestring", "windows-sys 0.48.0", - "winreg 0.50.0", + "winreg", ] [[package]] @@ -6968,6 +6960,7 @@ dependencies = [ "heck 0.5.0", "indexmap 2.6.0", "log", + "normpath", "once_cell", "pretty_assertions", "regex", @@ -6978,6 +6971,20 @@ dependencies = [ "tokio", ] +[[package]] +name = "metagen-client" +version = "0.5.0-rc.6" +dependencies = [ + "derive_more 1.0.0", + "futures", + "lazy_static 1.5.0", + "mime_guess", + "reqwest", + "serde", + "serde_json", + "tokio-util 0.7.11", +] + [[package]] name = "metagen_fdk_rust_static" version = "0.0.1" @@ -7106,6 +7113,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -9605,9 +9622,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.4" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64 0.22.1", "bytes", @@ -9620,12 +9637,14 @@ dependencies = [ "http-body 1.0.1", "http-body-util", "hyper 1.4.1", + "hyper-rustls", "hyper-tls", "hyper-util", "ipnet", "js-sys", "log", "mime", + "mime_guess", "native-tls", "once_cell", "percent-encoding", @@ -9634,16 +9653,18 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 0.1.2", + "sync_wrapper 1.0.1", "system-configuration", "tokio", "tokio-native-tls", + "tokio-util 0.7.11", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", - "winreg 0.52.0", + "windows-registry", ] [[package]] @@ -10125,6 +10146,27 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "sample_client" +version = "0.5.0-rc.6" +dependencies = [ + "metagen-client", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "sample_client_upload" +version = "0.5.0-rc.6" +dependencies = [ + "metagen-client", + "serde", + "serde_json", + "tokio", + "tokio-util 0.7.11", +] + [[package]] name = "saturating" version = "0.1.0" @@ -11775,6 +11817,9 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "synstructure" @@ -11821,20 +11866,20 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -13464,6 +13509,19 @@ dependencies = [ "wasmparser 0.219.0", ] +[[package]] +name = "wasm-streams" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "wasmparser" version = "0.217.0" @@ -14130,7 +14188,7 @@ checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" dependencies = [ "windows-implement", "windows-interface", - "windows-result", + "windows-result 0.1.2", "windows-targets 0.52.6", ] @@ -14156,6 +14214,17 @@ dependencies = [ "syn 2.0.71", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result 0.2.0", + "windows-strings", + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.1.2" @@ -14165,6 +14234,25 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -14341,16 +14429,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "winres" version = "0.1.12" diff --git a/Cargo.toml b/Cargo.toml index 81d6052c74..1486a1d40f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,19 +5,21 @@ members = [ "src/meta-cli", "src/metagen", "src/metagen/src/fdk_rust/static", - "src/metagen/src/client_rs/static", "src/mt_deno", "src/typegate/engine", "src/typegate/standalone", "src/typegraph/core", "src/xtask", - "src/substantial" -] + "src/substantial", + "src/metagen-client-rs", + "tests/metagen/typegraphs/sample/rs", + "tests/metagen/typegraphs/sample/rs_upload", + ] exclude = [ "tests/runtimes/wasm_reflected/rust", "tests/runtimes/wasm_wire/rust", - "tests/metagen/typegraphs/sample/rs", + "tests/metagen/typegraphs/sample/rs_upload", "src/pyrt_wit_wire", ] @@ -32,6 +34,7 @@ mt_deno = { path = "src/mt_deno/" } common = { path = "src/common/" } substantial = { path = "src/substantial/" } metagen = { path = "src/metagen/" } +metagen-client = { path = "src/metagen-client-rs" } typegate_engine = { path = "src/typegate/engine" } # cli diff --git a/deno.lock b/deno.lock index 103675a2c7..979dcd749f 100644 --- a/deno.lock +++ b/deno.lock @@ -4,65 +4,48 @@ "specifiers": { "jsr:@david/dax@0.41.0": "jsr:@david/dax@0.41.0", "jsr:@david/which@^0.4.1": "jsr:@david/which@0.4.1", - "jsr:@std/archive@^0.225.0": "jsr:@std/archive@0.225.1", "jsr:@std/assert@^0.221.0": "jsr:@std/assert@0.221.0", - "jsr:@std/assert@^1.0.2": "jsr:@std/assert@1.0.4", "jsr:@std/assert@^1.0.4": "jsr:@std/assert@1.0.6", "jsr:@std/assert@^1.0.6": "jsr:@std/assert@1.0.6", - "jsr:@std/async@^1.0.3": "jsr:@std/async@1.0.3", + "jsr:@std/async@^1.0.3": "jsr:@std/async@1.0.5", "jsr:@std/bytes@^0.221.0": "jsr:@std/bytes@0.221.0", "jsr:@std/bytes@^1.0.2": "jsr:@std/bytes@1.0.2", - "jsr:@std/bytes@^1.0.2-rc.3": "jsr:@std/bytes@1.0.2", - "jsr:@std/cli@^1.0.3": "jsr:@std/cli@1.0.4", - "jsr:@std/cli@^1.0.4": "jsr:@std/cli@1.0.4", + "jsr:@std/cli@^1.0.3": "jsr:@std/cli@1.0.5", + "jsr:@std/cli@^1.0.4": "jsr:@std/cli@1.0.5", "jsr:@std/collections@^1.0.5": "jsr:@std/collections@1.0.5", "jsr:@std/crypto@^1.0.2": "jsr:@std/crypto@1.0.3", - "jsr:@std/crypto@^1.0.2-rc.1": "jsr:@std/crypto@1.0.2", "jsr:@std/crypto@^1.0.3": "jsr:@std/crypto@1.0.3", - "jsr:@std/encoding@^1.0.2": "jsr:@std/encoding@1.0.3", + "jsr:@std/encoding@^1.0.2": "jsr:@std/encoding@1.0.4", "jsr:@std/fmt@^0.221.0": "jsr:@std/fmt@0.221.0", - "jsr:@std/fmt@^1.0.0": "jsr:@std/fmt@1.0.1", - "jsr:@std/fmt@^1.0.1": "jsr:@std/fmt@1.0.1", + "jsr:@std/fmt@^1.0.0": "jsr:@std/fmt@1.0.2", + "jsr:@std/fmt@^1.0.2": "jsr:@std/fmt@1.0.2", "jsr:@std/fs@0.221.0": "jsr:@std/fs@0.221.0", - "jsr:@std/fs@^1.0.0-rc.5": "jsr:@std/fs@1.0.1", "jsr:@std/fs@^1.0.1": "jsr:@std/fs@1.0.3", - "jsr:@std/fs@^1.0.2": "jsr:@std/fs@1.0.3", "jsr:@std/fs@^1.0.3": "jsr:@std/fs@1.0.3", - "jsr:@std/http@^1.0.3": "jsr:@std/http@1.0.4", - "jsr:@std/internal@^1.0.1": "jsr:@std/internal@1.0.1", + "jsr:@std/http@^1.0.3": "jsr:@std/http@1.0.5", "jsr:@std/internal@^1.0.3": "jsr:@std/internal@1.0.4", "jsr:@std/internal@^1.0.4": "jsr:@std/internal@1.0.4", "jsr:@std/io@0.221.0": "jsr:@std/io@0.221.0", "jsr:@std/io@^0.221.0": "jsr:@std/io@0.221.0", - "jsr:@std/io@^0.224.3": "jsr:@std/io@0.224.5", - "jsr:@std/io@^0.224.4": "jsr:@std/io@0.224.5", - "jsr:@std/io@^0.224.5": "jsr:@std/io@0.224.6", - "jsr:@std/io@^0.224.6": "jsr:@std/io@0.224.6", - "jsr:@std/log@^0.224.5": "jsr:@std/log@0.224.6", + "jsr:@std/io@^0.224.7": "jsr:@std/io@0.224.7", + "jsr:@std/log@^0.224.5": "jsr:@std/log@0.224.7", "jsr:@std/path@0.221.0": "jsr:@std/path@0.221.0", "jsr:@std/path@^0.221.0": "jsr:@std/path@0.221.0", "jsr:@std/path@^1.0.2": "jsr:@std/path@1.0.4", - "jsr:@std/path@^1.0.3": "jsr:@std/path@1.0.4", "jsr:@std/path@^1.0.4": "jsr:@std/path@1.0.4", - "jsr:@std/semver@^1.0.1": "jsr:@std/semver@1.0.2", + "jsr:@std/semver@^1.0.1": "jsr:@std/semver@1.0.3", "jsr:@std/streams@0.221.0": "jsr:@std/streams@0.221.0", "jsr:@std/streams@1": "jsr:@std/streams@1.0.4", - "jsr:@std/streams@^1.0.2": "jsr:@std/streams@1.0.4", "jsr:@std/testing@^1.0.1": "jsr:@std/testing@1.0.2", - "jsr:@std/url@^0.225.0": "jsr:@std/url@0.225.0", - "jsr:@std/uuid@^1.0.1": "jsr:@std/uuid@1.0.2", + "jsr:@std/uuid@^1.0.1": "jsr:@std/uuid@1.0.3", "jsr:@std/yaml@^1.0.4": "jsr:@std/yaml@1.0.5", - "jsr:@typegraph/sdk@0.4.10-rc1": "jsr:@typegraph/sdk@0.4.10-rc1", "npm:@noble/hashes@1.4.0": "npm:@noble/hashes@1.4.0", "npm:@sentry/node@7.70.0": "npm:@sentry/node@7.70.0", "npm:@types/node": "npm:@types/node@18.16.19", "npm:chance@1.1.11": "npm:chance@1.1.11", "npm:graphql@16.8.1": "npm:graphql@16.8.1", - "npm:json-schema-faker@0.5.3": "npm:json-schema-faker@0.5.3", "npm:lodash@4.17.21": "npm:lodash@4.17.21", - "npm:mathjs@11.11.1": "npm:mathjs@11.11.1", "npm:multiformats@13.1.0": "npm:multiformats@13.1.0", - "npm:pg@8.12.0": "npm:pg@8.12.0", "npm:validator@13.12.0": "npm:validator@13.12.0", "npm:zod-validation-error@3.3.0": "npm:zod-validation-error@3.3.0_zod@3.23.8", "npm:zod@3.23.8": "npm:zod@3.23.8" @@ -82,41 +65,17 @@ "@david/which@0.4.1": { "integrity": "896a682b111f92ab866cc70c5b4afab2f5899d2f9bde31ed00203b9c250f225e" }, - "@std/archive@0.225.0": { - "integrity": "cacdf278ee1c8cd89e67917bd0588c5eab16ef21b0e884c721bd0eef5179cf6f", - "dependencies": [ - "jsr:@std/io@^0.224.4" - ] - }, - "@std/archive@0.225.1": { - "integrity": "5316b97c0641e01b1e5cf3cce7e1c7056271f23ea81a519da862414c9659fe1d", - "dependencies": [ - "jsr:@std/io@^0.224.6" - ] - }, "@std/assert@0.221.0": { "integrity": "a5f1aa6e7909dbea271754fd4ab3f4e687aeff4873b4cef9a320af813adb489a" }, - "@std/assert@1.0.2": { - "integrity": "ccacec332958126deaceb5c63ff8b4eaf9f5ed0eac9feccf124110435e59e49c", - "dependencies": [ - "jsr:@std/internal@^1.0.1" - ] - }, - "@std/assert@1.0.4": { - "integrity": "d4c767ea578e5bc09c15b6e503376003e5b2d1f4c0cdf08524a92101ff4d7b96", - "dependencies": [ - "jsr:@std/internal@^1.0.3" - ] - }, "@std/assert@1.0.6": { "integrity": "1904c05806a25d94fe791d6d883b685c9e2dcd60e4f9fc30f4fc5cf010c72207", "dependencies": [ "jsr:@std/internal@^1.0.4" ] }, - "@std/async@1.0.3": { - "integrity": "6ed64678db43451683c6c176a21426a2ccd21ba0269ebb2c36133ede3f165792" + "@std/async@1.0.5": { + "integrity": "31d68214bfbb31bd4c6022401d484e3964147c76c9220098baa703a39b6c2da6" }, "@std/bytes@0.221.0": { "integrity": "64a047011cf833890a4a2ab7293ac55a1b4f5a050624ebc6a0159c357de91966" @@ -124,35 +83,23 @@ "@std/bytes@1.0.2": { "integrity": "fbdee322bbd8c599a6af186a1603b3355e59a5fb1baa139f8f4c3c9a1b3e3d57" }, - "@std/cli@1.0.3": { - "integrity": "9a0488b5d2e58d29dce106a941eecec7181fae996bf0d2225563f1ca7e4b100c" - }, - "@std/cli@1.0.4": { - "integrity": "79ca75add572a99a8ba93ae37ccbd8d43fb4e2b635a8a7ebebb4f2d092048764" + "@std/cli@1.0.5": { + "integrity": "c93cce26ffd26f617c15a12874e1bfeabc90b1eee86017c9639093734c2bf587" }, "@std/collections@1.0.5": { "integrity": "ab9eac23b57a0c0b89ba45134e61561f69f3d001f37235a248ed40be260c0c10" }, - "@std/crypto@1.0.2": { - "integrity": "bb515dbcd4d67aacf0ffece643a434811ea06e5b544f03c33ba58552fbdb87c7" - }, "@std/crypto@1.0.3": { "integrity": "a2a32f51ddef632d299e3879cd027c630dcd4d1d9a5285d6e6788072f4e51e7f" }, - "@std/encoding@1.0.2": { - "integrity": "7ed640c777e3275550e2cd937c440acdbebfdcd2d13ef67052f0536bf43e707f" - }, - "@std/encoding@1.0.3": { - "integrity": "5dbc2d7f5aa6062de7e19862ea856ac7a0dcce0b6fb46bb7b332d3bdcd4408b7" + "@std/encoding@1.0.4": { + "integrity": "2266cd516b32369e3dc5695717c96bf88343a1f761d6e6187a02a2bbe2af86ae" }, "@std/fmt@0.221.0": { "integrity": "379fed69bdd9731110f26b9085aeb740606b20428ce6af31ef6bd45ef8efa62a" }, - "@std/fmt@1.0.0": { - "integrity": "8a95c9fdbb61559418ccbc0f536080cf43341655e1444f9d375a66886ceaaa3d" - }, - "@std/fmt@1.0.1": { - "integrity": "ef76c37faa7720faa8c20fd8cc74583f9b1e356dfd630c8714baa716a45856ab" + "@std/fmt@1.0.2": { + "integrity": "87e9dfcdd3ca7c066e0c3c657c1f987c82888eb8103a3a3baa62684ffeb0f7a7" }, "@std/fs@0.221.0": { "integrity": "028044450299de8ed5a716ade4e6d524399f035513b85913794f4e81f07da286", @@ -161,44 +108,14 @@ "jsr:@std/path@^0.221.0" ] }, - "@std/fs@1.0.1": { - "integrity": "d6914ca2c21abe591f733b31dbe6331e446815e513e2451b3b9e472daddfefcb", - "dependencies": [ - "jsr:@std/path@^1.0.2" - ] - }, - "@std/fs@1.0.2": { - "integrity": "af57555c7a224a6f147d5cced5404692974f7a628ced8eda67e0d22d92d474ec", - "dependencies": [ - "jsr:@std/path@^1.0.3" - ] - }, "@std/fs@1.0.3": { "integrity": "3cb839b1360b0a42d8b367c3093bfe4071798e6694fa44cf1963e04a8edba4fe", "dependencies": [ "jsr:@std/path@^1.0.4" ] }, - "@std/http@1.0.3": { - "integrity": "bff3770c4df4711567de1711fe988d28db9535be0c9b0f1d2de8d0fb97e8b44c", - "dependencies": [ - "jsr:@std/cli@^1.0.3", - "jsr:@std/encoding@^1.0.2", - "jsr:@std/fmt@^1.0.0", - "jsr:@std/media-types@^1.0.2", - "jsr:@std/net@^1.0.0", - "jsr:@std/path@^1.0.2", - "jsr:@std/streams@^1.0.2" - ] - }, - "@std/http@1.0.4": { - "integrity": "1a8142217907d49c4687f90ef3d257e7df2baf344c5122c322d7316df09df453" - }, - "@std/internal@1.0.1": { - "integrity": "6f8c7544d06a11dd256c8d6ba54b11ed870aac6c5aeafff499892662c57673e6" - }, - "@std/internal@1.0.3": { - "integrity": "208e9b94a3d5649bd880e9ca38b885ab7651ab5b5303a56ed25de4755fb7b11e" + "@std/http@1.0.5": { + "integrity": "afa1cf4f0c19e224534df3288a84de4fdfffe8a26308dfe3794166e4fafe0f3d" }, "@std/internal@1.0.4": { "integrity": "62e8e4911527e5e4f307741a795c0b0a9e6958d0b3790716ae71ce085f755422" @@ -210,27 +127,15 @@ "jsr:@std/bytes@^0.221.0" ] }, - "@std/io@0.224.5": { - "integrity": "cb84fe655d1273fca94efcff411465027a8b0b4225203f19d6ee98d9c8920a2d", - "dependencies": [ - "jsr:@std/bytes@^1.0.2-rc.3" - ] + "@std/io@0.224.7": { + "integrity": "a70848793c44a7c100926571a8c9be68ba85487bfcd4d0540d86deabe1123dc9" }, - "@std/io@0.224.6": { - "integrity": "eefe034a370be34daf066c8634dd645635d099bb21eccf110f0bdc28d9040891", + "@std/log@0.224.7": { + "integrity": "021941e5cd16de60cb11599c9b36f892aea95987fe66c753922808da27909e18", "dependencies": [ - "jsr:@std/bytes@^1.0.2" - ] - }, - "@std/log@0.224.5": { - "integrity": "4612a45189438441bbd923a4cad1cce5c44c6c4a039195a3e8d831ce38894eee" - }, - "@std/log@0.224.6": { - "integrity": "c34e7b69fe84b2152ce2b0a1b5e211b26e6a1ce6a6b68a217b9342fd13ed95a4", - "dependencies": [ - "jsr:@std/fmt@^1.0.1", - "jsr:@std/fs@^1.0.2", - "jsr:@std/io@^0.224.6" + "jsr:@std/fmt@^1.0.2", + "jsr:@std/fs@^1.0.3", + "jsr:@std/io@^0.224.7" ] }, "@std/path@0.221.0": { @@ -239,20 +144,11 @@ "jsr:@std/assert@^0.221.0" ] }, - "@std/path@1.0.2": { - "integrity": "a452174603f8c620bd278a380c596437a9eef50c891c64b85812f735245d9ec7" - }, - "@std/path@1.0.3": { - "integrity": "cd89d014ce7eb3742f2147b990f6753ee51d95276bfc211bc50c860c1bc7df6f" - }, "@std/path@1.0.4": { "integrity": "48dd5d8389bcfcd619338a01bdf862cb7799933390146a54ae59356a0acc7105" }, - "@std/semver@1.0.1": { - "integrity": "f0c9b41b70e27e8cdfe9252b486c55a727d66ead72625e0fa1aae75f45ca15e1" - }, - "@std/semver@1.0.2": { - "integrity": "1e5fd337c687ca64c0809253eca4d4815874ced59b04f0882da5ff9a302f8129" + "@std/semver@1.0.3": { + "integrity": "7c139c6076a080eeaa4252c78b95ca5302818d7eafab0470d34cafd9930c13c8" }, "@std/streams@0.221.0": { "integrity": "47f2f74634b47449277c0ee79fe878da4424b66bd8975c032e3afdca88986e61", @@ -260,12 +156,6 @@ "jsr:@std/io@^0.221.0" ] }, - "@std/streams@1.0.2": { - "integrity": "187c3c875675221f5355807a735e51b0f8769caade2cbca6d7f4fa710ea4ace4", - "dependencies": [ - "jsr:@std/bytes@^1.0.2-rc.3" - ] - }, "@std/streams@1.0.4": { "integrity": "a1a5b01c74ca1d2dcaacfe1d4bbb91392e765946d82a3471bd95539adc6da83a", "dependencies": [ @@ -281,21 +171,8 @@ "jsr:@std/path@^1.0.4" ] }, - "@std/url@0.225.0": { - "integrity": "fc854cc8a720e9c974904071140b462880d8347030006f43193935ae06c7a0f9", - "dependencies": [ - "jsr:@std/path@^1.0.2" - ] - }, - "@std/uuid@1.0.1": { - "integrity": "26f834b1e1f95b581f5f654f6b2c34c2031832fb4f598dbb1332520aa63a6740", - "dependencies": [ - "jsr:@std/bytes@^1.0.2-rc.3", - "jsr:@std/crypto@^1.0.2-rc.1" - ] - }, - "@std/uuid@1.0.2": { - "integrity": "2224284cdb031b54a9b2b1640254e2e78bd4541e956297d651cdd6f7a8157f4d", + "@std/uuid@1.0.3": { + "integrity": "843b5adb6ab387344751c4255629dba484ca4a3e998c3566d709404855cd62b7", "dependencies": [ "jsr:@std/bytes@^1.0.2", "jsr:@std/crypto@^1.0.3" @@ -303,18 +180,9 @@ }, "@std/yaml@1.0.5": { "integrity": "71ba3d334305ee2149391931508b2c293a8490f94a337eef3a09cade1a2a2742" - }, - "@typegraph/sdk@0.4.10-rc1": { - "integrity": "e9cbe5d456e6caa022e06a2d907cc64d3722220d01d22bb402a790052e069178" } }, "npm": { - "@babel/runtime@7.25.0": { - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", - "dependencies": { - "regenerator-runtime": "regenerator-runtime@0.14.1" - } - }, "@noble/hashes@1.4.0": { "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dependencies": {} @@ -325,7 +193,7 @@ "@sentry/core": "@sentry/core@7.70.0", "@sentry/types": "@sentry/types@7.70.0", "@sentry/utils": "@sentry/utils@7.70.0", - "tslib": "tslib@2.6.3" + "tslib": "tslib@2.7.0" } }, "@sentry/core@7.70.0": { @@ -333,7 +201,7 @@ "dependencies": { "@sentry/types": "@sentry/types@7.70.0", "@sentry/utils": "@sentry/utils@7.70.0", - "tslib": "tslib@2.6.3" + "tslib": "tslib@2.7.0" } }, "@sentry/node@7.70.0": { @@ -346,7 +214,7 @@ "cookie": "cookie@0.5.0", "https-proxy-agent": "https-proxy-agent@5.0.1", "lru_map": "lru_map@0.3.3", - "tslib": "tslib@2.6.3" + "tslib": "tslib@2.7.0" } }, "@sentry/types@7.70.0": { @@ -357,7 +225,7 @@ "integrity": "sha512-0cChMH0lsGp+5I3D4wOHWwjFN19HVrGUs7iWTLTO5St3EaVbdeLbI1vFXHxMxvopbwgpeZafbreHw/loIdZKpw==", "dependencies": { "@sentry/types": "@sentry/types@7.70.0", - "tslib": "tslib@2.6.3" + "tslib": "tslib@2.7.0" } }, "@types/node@18.16.19": { @@ -370,24 +238,10 @@ "debug": "debug@4.3.6" } }, - "argparse@1.0.10": { - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "sprintf-js@1.0.3" - } - }, - "call-me-maybe@1.0.2": { - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dependencies": {} - }, "chance@1.1.11": { "integrity": "sha512-kqTg3WWywappJPqtgrdvbA380VoXO2eu9VCV895JgbyHsaErXdyHK9LOZ911OvAk6L0obK7kDk9CGs8+oBawVA==", "dependencies": {} }, - "complex.js@2.1.1": { - "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", - "dependencies": {} - }, "cookie@0.5.0": { "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dependencies": {} @@ -398,26 +252,6 @@ "ms": "ms@2.1.2" } }, - "decimal.js@10.4.3": { - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dependencies": {} - }, - "escape-latex@1.2.0": { - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", - "dependencies": {} - }, - "esprima@4.0.1": { - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dependencies": {} - }, - "format-util@1.0.5": { - "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==", - "dependencies": {} - }, - "fraction.js@4.3.4": { - "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", - "dependencies": {} - }, "graphql@16.8.1": { "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", "dependencies": {} @@ -429,36 +263,6 @@ "debug": "debug@4.3.6" } }, - "javascript-natural-sort@0.7.1": { - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", - "dependencies": {} - }, - "js-yaml@3.14.1": { - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "argparse@1.0.10", - "esprima": "esprima@4.0.1" - } - }, - "json-schema-faker@0.5.3": { - "integrity": "sha512-BeIrR0+YSrTbAR9dOMnjbFl1MvHyXnq+Wpdw1FpWZDHWKLzK229hZ5huyPcmzFUfVq1ODwf40WdGVoE266UBUg==", - "dependencies": { - "json-schema-ref-parser": "json-schema-ref-parser@6.1.0", - "jsonpath-plus": "jsonpath-plus@7.2.0" - } - }, - "json-schema-ref-parser@6.1.0": { - "integrity": "sha512-pXe9H1m6IgIpXmE5JSb8epilNTGsmTb2iPohAXpOdhqGFbQjNeHHsZxU+C8w6T81GZxSPFLeUoqDJmzxx5IGuw==", - "dependencies": { - "call-me-maybe": "call-me-maybe@1.0.2", - "js-yaml": "js-yaml@3.14.1", - "ono": "ono@4.0.11" - } - }, - "jsonpath-plus@7.2.0": { - "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==", - "dependencies": {} - }, "lodash@4.17.21": { "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dependencies": {} @@ -467,20 +271,6 @@ "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", "dependencies": {} }, - "mathjs@11.11.1": { - "integrity": "sha512-uWrwMrhU31TCqHKmm1yFz0C352njGUVr/I1UnpMOxI/VBTTbCktx/mREUXx5Vyg11xrFdg/F3wnMM7Ql/csVsQ==", - "dependencies": { - "@babel/runtime": "@babel/runtime@7.25.0", - "complex.js": "complex.js@2.1.1", - "decimal.js": "decimal.js@10.4.3", - "escape-latex": "escape-latex@1.2.0", - "fraction.js": "fraction.js@4.3.4", - "javascript-natural-sort": "javascript-natural-sort@0.7.1", - "seedrandom": "seedrandom@3.0.5", - "tiny-emitter": "tiny-emitter@2.1.0", - "typed-function": "typed-function@4.2.1" - } - }, "ms@2.1.2": { "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dependencies": {} @@ -489,115 +279,14 @@ "integrity": "sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==", "dependencies": {} }, - "ono@4.0.11": { - "integrity": "sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==", - "dependencies": { - "format-util": "format-util@1.0.5" - } - }, - "pg-cloudflare@1.1.1": { - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", - "dependencies": {} - }, - "pg-connection-string@2.6.4": { - "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==", - "dependencies": {} - }, - "pg-int8@1.0.1": { - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "dependencies": {} - }, - "pg-pool@3.6.2_pg@8.12.0": { - "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", - "dependencies": { - "pg": "pg@8.12.0" - } - }, - "pg-protocol@1.6.1": { - "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==", - "dependencies": {} - }, - "pg-types@2.2.0": { - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "pg-int8@1.0.1", - "postgres-array": "postgres-array@2.0.0", - "postgres-bytea": "postgres-bytea@1.0.0", - "postgres-date": "postgres-date@1.0.7", - "postgres-interval": "postgres-interval@1.2.0" - } - }, - "pg@8.12.0": { - "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", - "dependencies": { - "pg-cloudflare": "pg-cloudflare@1.1.1", - "pg-connection-string": "pg-connection-string@2.6.4", - "pg-pool": "pg-pool@3.6.2_pg@8.12.0", - "pg-protocol": "pg-protocol@1.6.1", - "pg-types": "pg-types@2.2.0", - "pgpass": "pgpass@1.0.5" - } - }, - "pgpass@1.0.5": { - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "dependencies": { - "split2": "split2@4.2.0" - } - }, - "postgres-array@2.0.0": { - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "dependencies": {} - }, - "postgres-bytea@1.0.0": { - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "dependencies": {} - }, - "postgres-date@1.0.7": { - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "dependencies": {} - }, - "postgres-interval@1.2.0": { - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "xtend@4.0.2" - } - }, - "regenerator-runtime@0.14.1": { - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dependencies": {} - }, - "seedrandom@3.0.5": { - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dependencies": {} - }, - "split2@4.2.0": { - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dependencies": {} - }, - "sprintf-js@1.0.3": { - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dependencies": {} - }, - "tiny-emitter@2.1.0": { - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "dependencies": {} - }, - "tslib@2.6.3": { - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dependencies": {} - }, - "typed-function@4.2.1": { - "integrity": "sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA==", + "tslib@2.7.0": { + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dependencies": {} }, "validator@13.12.0": { "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", "dependencies": {} }, - "xtend@4.0.2": { - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dependencies": {} - }, "zod-validation-error@3.3.0_zod@3.23.8": { "integrity": "sha512-Syib9oumw1NTqEv4LT0e6U83Td9aVRk9iTXPUQr1otyV1PuXQKOvOwhMNqZIq5hluzHP2pMgnOmHEo7kPdI2mw==", "dependencies": { @@ -611,14 +300,9 @@ } }, "redirects": { - "https://cdn.pika.dev/big.js/^5.2.2": "https://cdn.skypack.dev/big.js@^5.2.2", - "https://esm.sh/@aws-sdk/s3-request-presigner": "https://esm.sh/@aws-sdk/s3-request-presigner@3.645.0", - "https://github.com/levibostian/deno-udd/raw/ignore-prerelease/mod.ts": "https://raw.githubusercontent.com/levibostian/deno-udd/ignore-prerelease/mod.ts", - "https://raw.githubusercontent.com/metatypedev/ghjk/v0.2.1//mod.ts": "https://raw.githubusercontent.com/metatypedev/ghjk/v0.2.1/mod.ts" + "https://github.com/levibostian/deno-udd/raw/ignore-prerelease/mod.ts": "https://raw.githubusercontent.com/levibostian/deno-udd/ignore-prerelease/mod.ts" }, "remote": { - "https://cdn.skypack.dev/-/big.js@v5.2.2-sUR8fKsGHRxsJyqyvOSP/dist=es2019,mode=imports/optimized/bigjs.js": "b6d8e6af0c1f7bdc7e8cd0890819ecee2dcbb0776ec4089eae281de8ebd7b2bd", - "https://cdn.skypack.dev/big.js@^5.2.2": "f74e8935c06af6664d64a5534d1d6db1ab66649df8164696117ab5a1cd10714e", "https://deno.land/std@0.116.0/_util/assert.ts": "2f868145a042a11d5ad0a3c748dcf580add8a0dbc0e876eaa0026303a5488f58", "https://deno.land/std@0.116.0/_util/os.ts": "dfb186cc4e968c770ab6cc3288bd65f4871be03b93beecae57d657232ecffcac", "https://deno.land/std@0.116.0/fs/walk.ts": "31464d75099aa3fc7764212576a8772dfabb2692783e6eabb910f874a26eac54", @@ -723,9 +407,6 @@ "https://deno.land/std@0.140.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9", "https://deno.land/std@0.140.0/path/win32.ts": "31811536855e19ba37a999cd8d1b62078235548d67902ece4aa6b814596dd757", "https://deno.land/std@0.140.0/streams/conversion.ts": "712585bfa0172a97fb68dd46e784ae8ad59d11b88079d6a4ab098ff42e697d21", - "https://deno.land/std@0.150.0/media_types/_util.ts": "ce9b4fc4ba1c447dafab619055e20fd88236ca6bdd7834a21f98bd193c3fbfa1", - "https://deno.land/std@0.150.0/media_types/mod.ts": "2d4b6f32a087029272dc59e0a55ae3cc4d1b27b794ccf528e94b1925795b3118", - "https://deno.land/std@0.150.0/media_types/vendor/mime-db.v1.52.0.ts": "724cee25fa40f1a52d3937d6b4fbbfdd7791ff55e1b7ac08d9319d5632c7f5af", "https://deno.land/std@0.161.0/encoding/base64.ts": "c57868ca7fa2fbe919f57f88a623ad34e3d970d675bdc1ff3a9d02bba7409db2", "https://deno.land/std@0.166.0/_util/asserts.ts": "d0844e9b62510f89ce1f9878b046f6a57bf88f208a10304aab50efcb48365272", "https://deno.land/std@0.166.0/_util/os.ts": "8a33345f74990e627b9dfe2de9b040004b08ea5146c7c9e8fe9a29070d193934", @@ -1013,207 +694,6 @@ "https://deno.land/std@0.213.0/url/join.ts": "00c7e9088cafaa24963ce4081119e58b3afe2c58f033701383f359ea02620dd2", "https://deno.land/std@0.213.0/url/mod.ts": "e2621f6a0db6fdbe7fbbd240064095bb203014657e5e1ab81db1c44d80dce6c9", "https://deno.land/std@0.213.0/url/normalize.ts": "6328c75df0fab300f74bc4a1c255062a0db882240e15ab646606d0009e7e40d7", - "https://deno.land/std@0.219.0/assert/assert.ts": "bec068b2fccdd434c138a555b19a2c2393b71dfaada02b7d568a01541e67cdc5", - "https://deno.land/std@0.219.0/assert/assertion_error.ts": "9f689a101ee586c4ce92f52fa7ddd362e86434ffdf1f848e45987dc7689976b8", - "https://deno.land/std@0.219.0/bytes/concat.ts": "9cac3b4376afbef98ff03588eb3cf948e0d1eb6c27cfe81a7651ab6dd3adc54a", - "https://deno.land/std@0.219.0/bytes/copy.ts": "f29c03168853720dfe82eaa57793d0b9e3543ebfe5306684182f0f1e3bfd422a", - "https://deno.land/std@0.219.0/cli/mod.ts": "58f75df8ce43fb8266bdd26ec4465f73176b910316d72eb8e090b6a0549391da", - "https://deno.land/std@0.219.0/cli/parse_args.ts": "475b3edc8105c9acea09b83b100afc383d7bddbba9828da3f0c4adced006607a", - "https://deno.land/std@0.219.0/cli/prompt_secret.ts": "831cfb4efa83bfaf9bfd320ddbfd619e03cd87e81260909f93ca199ebe214ec2", - "https://deno.land/std@0.219.0/cli/spinner.ts": "005395c4e00b1086bfa2ae44e8c9413c1231c4741a08a55aa0d3c9ea267cecb5", - "https://deno.land/std@0.219.0/fmt/colors.ts": "d239d84620b921ea520125d778947881f62c50e78deef2657073840b8af9559a", - "https://deno.land/std@0.219.0/fmt/duration.ts": "606f8c2bbbadd7f7a122868a478c9ad31f2e66b1e19e0a9769655585414fced6", - "https://deno.land/std@0.219.0/fs/_create_walk_entry.ts": "5d9d2aaec05bcf09a06748b1684224d33eba7a4de24cf4cf5599991ca6b5b412", - "https://deno.land/std@0.219.0/fs/_get_file_info_type.ts": "da7bec18a7661dba360a1db475b826b18977582ce6fc9b25f3d4ee0403fe8cbd", - "https://deno.land/std@0.219.0/fs/_is_same_path.ts": "709c95868345fea051c58b9e96af95cff94e6ae98dfcff2b66dee0c212c4221f", - "https://deno.land/std@0.219.0/fs/_is_subdir.ts": "c68b309d46cc8568ed83c000f608a61bbdba0943b7524e7a30f9e450cf67eecd", - "https://deno.land/std@0.219.0/fs/_to_path_string.ts": "29bfc9c6c112254961d75cbf6ba814d6de5349767818eb93090cecfa9665591e", - "https://deno.land/std@0.219.0/fs/copy.ts": "dc0f68c4b6c3b090bfdb909387e309f6169b746bd713927c9507c9ef545d71f6", - "https://deno.land/std@0.219.0/fs/empty_dir.ts": "4f01e6d56e2aa8d90ad60f20bc25601f516b00f6c3044cdf6863a058791d91aa", - "https://deno.land/std@0.219.0/fs/ensure_dir.ts": "dffff68de0d10799b5aa9e39dec4e327e12bbd29e762292193684542648c4aeb", - "https://deno.land/std@0.219.0/fs/ensure_file.ts": "ac5cfde94786b0284d2c8e9f7f9425269bea1b2140612b4aea1f20b508870f59", - "https://deno.land/std@0.219.0/fs/ensure_link.ts": "d42af2edefeaa9817873ec6e46dc5d209ac4d744f8c69c5ecc2dffade78465b6", - "https://deno.land/std@0.219.0/fs/ensure_symlink.ts": "1f64d7bdd191f7d9b71264e191902fcae5cec86305d54659897944caea70f814", - "https://deno.land/std@0.219.0/fs/eol.ts": "c9807291f78361d49fd986a9be04654610c615c5e2ec63d748976197d30ff206", - "https://deno.land/std@0.219.0/fs/exists.ts": "d2757ef764eaf5c6c5af7228e8447db2de42ab084a2dae540097f905723d83f5", - "https://deno.land/std@0.219.0/fs/expand_glob.ts": "a1ce02b05ed7b96985b0665067c9f1018f3f2ade7ee0fb0d629231050260b158", - "https://deno.land/std@0.219.0/fs/mod.ts": "107f5afa4424c2d3ce2f7e9266173198da30302c69af662c720115fe504dc5ee", - "https://deno.land/std@0.219.0/fs/move.ts": "39e0d7ccb88a566d20b949712020e766b15ef1ec19159573d11f949bd677909c", - "https://deno.land/std@0.219.0/fs/walk.ts": "78e1d01a9f75715614bf8d6e58bd77d9fafb1222c41194e607cd3849d7a0e771", - "https://deno.land/std@0.219.0/io/_common.ts": "36705cdb4dfcd338d6131bca1b16e48a4d5bf0d1dada6ce397268e88c17a5835", - "https://deno.land/std@0.219.0/io/_constants.ts": "3c7ad4695832e6e4a32e35f218c70376b62bc78621ef069a4a0a3d55739f8856", - "https://deno.land/std@0.219.0/io/buffer.ts": "4d1f805f350433e418002accec798bc6c33ce18f614afa65f987c202d7b2234e", - "https://deno.land/std@0.219.0/io/iterate_reader.ts": "1e5e4fea22d8965afb7df4ee9ab9adda0a0fc581adbea31bc2f2d25453f8a6e9", - "https://deno.land/std@0.219.0/io/reader_from_stream_reader.ts": "a75bbc93f39df8b0e372cc1fbdc416a7cbf2a39fc4c09ddb057f1241100191c5", - "https://deno.land/std@0.219.0/io/to_readable_stream.ts": "ed03a44a1ec1cc55a85a857acf6cac472035298f6f3b6207ea209f93b4aefb39", - "https://deno.land/std@0.219.0/io/to_writable_stream.ts": "ef422e0425963c8a1e0481674e66c3023da50f0acbe5ef51ec9789efc3c1e2ed", - "https://deno.land/std@0.219.0/io/types.ts": "acecb3074c730b5ff487ba4fe9ce51e67bd982aa07c95e5f5679b7b2f24ad129", - "https://deno.land/std@0.219.0/io/write_all.ts": "24aac2312bb21096ae3ae0b102b22c26164d3249dff96dbac130958aa736f038", - "https://deno.land/std@0.219.0/path/_common/assert_path.ts": "dbdd757a465b690b2cc72fc5fb7698c51507dec6bfafce4ca500c46b76ff7bd8", - "https://deno.land/std@0.219.0/path/_common/basename.ts": "569744855bc8445f3a56087fd2aed56bdad39da971a8d92b138c9913aecc5fa2", - "https://deno.land/std@0.219.0/path/_common/common.ts": "ef73c2860694775fe8ffcbcdd387f9f97c7a656febf0daa8c73b56f4d8a7bd4c", - "https://deno.land/std@0.219.0/path/_common/constants.ts": "dc5f8057159f4b48cd304eb3027e42f1148cf4df1fb4240774d3492b5d12ac0c", - "https://deno.land/std@0.219.0/path/_common/dirname.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", - "https://deno.land/std@0.219.0/path/_common/format.ts": "92500e91ea5de21c97f5fe91e178bae62af524b72d5fcd246d6d60ae4bcada8b", - "https://deno.land/std@0.219.0/path/_common/from_file_url.ts": "d672bdeebc11bf80e99bf266f886c70963107bdd31134c4e249eef51133ceccf", - "https://deno.land/std@0.219.0/path/_common/glob_to_reg_exp.ts": "6cac16d5c2dc23af7d66348a7ce430e5de4e70b0eede074bdbcf4903f4374d8d", - "https://deno.land/std@0.219.0/path/_common/normalize.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", - "https://deno.land/std@0.219.0/path/_common/normalize_string.ts": "dfdf657a1b1a7db7999f7c575ee7e6b0551d9c20f19486c6c3f5ff428384c965", - "https://deno.land/std@0.219.0/path/_common/relative.ts": "faa2753d9b32320ed4ada0733261e3357c186e5705678d9dd08b97527deae607", - "https://deno.land/std@0.219.0/path/_common/strip_trailing_separators.ts": "7024a93447efcdcfeaa9339a98fa63ef9d53de363f1fbe9858970f1bba02655a", - "https://deno.land/std@0.219.0/path/_common/to_file_url.ts": "7f76adbc83ece1bba173e6e98a27c647712cab773d3f8cbe0398b74afc817883", - "https://deno.land/std@0.219.0/path/_interface.ts": "a1419fcf45c0ceb8acdccc94394e3e94f99e18cfd32d509aab514c8841799600", - "https://deno.land/std@0.219.0/path/_os.ts": "8fb9b90fb6b753bd8c77cfd8a33c2ff6c5f5bc185f50de8ca4ac6a05710b2c15", - "https://deno.land/std@0.219.0/path/basename.ts": "5d341aadb7ada266e2280561692c165771d071c98746fcb66da928870cd47668", - "https://deno.land/std@0.219.0/path/common.ts": "03e52e22882402c986fe97ca3b5bb4263c2aa811c515ce84584b23bac4cc2643", - "https://deno.land/std@0.219.0/path/constants.ts": "0c206169ca104938ede9da48ac952de288f23343304a1c3cb6ec7625e7325f36", - "https://deno.land/std@0.219.0/path/dirname.ts": "85bd955bf31d62c9aafdd7ff561c4b5fb587d11a9a5a45e2b01aedffa4238a7c", - "https://deno.land/std@0.219.0/path/extname.ts": "593303db8ae8c865cbd9ceec6e55d4b9ac5410c1e276bfd3131916591b954441", - "https://deno.land/std@0.219.0/path/format.ts": "42a2f3201343df77061207e6aaf78c95bafce7f711dcb7fe1e5840311c505778", - "https://deno.land/std@0.219.0/path/from_file_url.ts": "911833ae4fd10a1c84f6271f36151ab785955849117dc48c6e43b929504ee069", - "https://deno.land/std@0.219.0/path/glob_to_regexp.ts": "7f30f0a21439cadfdae1be1bf370880b415e676097fda584a63ce319053b5972", - "https://deno.land/std@0.219.0/path/is_absolute.ts": "4791afc8bfd0c87f0526eaa616b0d16e7b3ab6a65b62942e50eac68de4ef67d7", - "https://deno.land/std@0.219.0/path/is_glob.ts": "a65f6195d3058c3050ab905705891b412ff942a292bcbaa1a807a74439a14141", - "https://deno.land/std@0.219.0/path/join.ts": "ae2ec5ca44c7e84a235fd532e4a0116bfb1f2368b394db1c4fb75e3c0f26a33a", - "https://deno.land/std@0.219.0/path/join_globs.ts": "5b3bf248b93247194f94fa6947b612ab9d3abd571ca8386cf7789038545e54a0", - "https://deno.land/std@0.219.0/path/mod.ts": "2821a1bb3a4148a0ffe79c92aa41aa9319fef73c6d6f5178f52b2c720d3eb02d", - "https://deno.land/std@0.219.0/path/normalize.ts": "4155743ccceeed319b350c1e62e931600272fad8ad00c417b91df093867a8352", - "https://deno.land/std@0.219.0/path/normalize_glob.ts": "cc89a77a7d3b1d01053b9dcd59462b75482b11e9068ae6c754b5cf5d794b374f", - "https://deno.land/std@0.219.0/path/parse.ts": "65e8e285f1a63b714e19ef24b68f56e76934c3df0b6e65fd440d3991f4f8aefb", - "https://deno.land/std@0.219.0/path/posix/_util.ts": "1e3937da30f080bfc99fe45d7ed23c47dd8585c5e473b2d771380d3a6937cf9d", - "https://deno.land/std@0.219.0/path/posix/basename.ts": "39ee27a29f1f35935d3603ccf01d53f3d6e0c5d4d0f84421e65bd1afeff42843", - "https://deno.land/std@0.219.0/path/posix/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", - "https://deno.land/std@0.219.0/path/posix/constants.ts": "93481efb98cdffa4c719c22a0182b994e5a6aed3047e1962f6c2c75b7592bef1", - "https://deno.land/std@0.219.0/path/posix/dirname.ts": "6535d2bdd566118963537b9dda8867ba9e2a361015540dc91f5afbb65c0cce8b", - "https://deno.land/std@0.219.0/path/posix/extname.ts": "8d36ae0082063c5e1191639699e6f77d3acf501600a3d87b74943f0ae5327427", - "https://deno.land/std@0.219.0/path/posix/format.ts": "185e9ee2091a42dd39e2a3b8e4925370ee8407572cee1ae52838aed96310c5c1", - "https://deno.land/std@0.219.0/path/posix/from_file_url.ts": "951aee3a2c46fd0ed488899d024c6352b59154c70552e90885ed0c2ab699bc40", - "https://deno.land/std@0.219.0/path/posix/glob_to_regexp.ts": "76f012fcdb22c04b633f536c0b9644d100861bea36e9da56a94b9c589a742e8f", - "https://deno.land/std@0.219.0/path/posix/is_absolute.ts": "cebe561ad0ae294f0ce0365a1879dcfca8abd872821519b4fcc8d8967f888ede", - "https://deno.land/std@0.219.0/path/posix/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", - "https://deno.land/std@0.219.0/path/posix/join.ts": "744fadcbee7047688696455c7cbb368a9625ffde67fc3058a61c98948fcd04de", - "https://deno.land/std@0.219.0/path/posix/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", - "https://deno.land/std@0.219.0/path/posix/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", - "https://deno.land/std@0.219.0/path/posix/normalize.ts": "baeb49816a8299f90a0237d214cef46f00ba3e95c0d2ceb74205a6a584b58a91", - "https://deno.land/std@0.219.0/path/posix/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", - "https://deno.land/std@0.219.0/path/posix/parse.ts": "0b1fc4cb890dbb699ec1d2c232d274843b4a7142e1ad976b69fe51c954eb6080", - "https://deno.land/std@0.219.0/path/posix/relative.ts": "3907d6eda41f0ff723d336125a1ad4349112cd4d48f693859980314d5b9da31c", - "https://deno.land/std@0.219.0/path/posix/resolve.ts": "08b699cfeee10cb6857ccab38fa4b2ec703b0ea33e8e69964f29d02a2d5257cf", - "https://deno.land/std@0.219.0/path/posix/to_file_url.ts": "7aa752ba66a35049e0e4a4be5a0a31ac6b645257d2e031142abb1854de250aaf", - "https://deno.land/std@0.219.0/path/posix/to_namespaced_path.ts": "28b216b3c76f892a4dca9734ff1cc0045d135532bfd9c435ae4858bfa5a2ebf0", - "https://deno.land/std@0.219.0/path/relative.ts": "ab739d727180ed8727e34ed71d976912461d98e2b76de3d3de834c1066667add", - "https://deno.land/std@0.219.0/path/resolve.ts": "a6f977bdb4272e79d8d0ed4333e3d71367cc3926acf15ac271f1d059c8494d8d", - "https://deno.land/std@0.219.0/path/to_file_url.ts": "88f049b769bce411e2d2db5bd9e6fd9a185a5fbd6b9f5ad8f52bef517c4ece1b", - "https://deno.land/std@0.219.0/path/to_namespaced_path.ts": "b706a4103b104cfadc09600a5f838c2ba94dbcdb642344557122dda444526e40", - "https://deno.land/std@0.219.0/path/windows/_util.ts": "d5f47363e5293fced22c984550d5e70e98e266cc3f31769e1710511803d04808", - "https://deno.land/std@0.219.0/path/windows/basename.ts": "e2dbf31d1d6385bfab1ce38c333aa290b6d7ae9e0ecb8234a654e583cf22f8fe", - "https://deno.land/std@0.219.0/path/windows/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", - "https://deno.land/std@0.219.0/path/windows/constants.ts": "5afaac0a1f67b68b0a380a4ef391bf59feb55856aa8c60dfc01bd3b6abb813f5", - "https://deno.land/std@0.219.0/path/windows/dirname.ts": "33e421be5a5558a1346a48e74c330b8e560be7424ed7684ea03c12c21b627bc9", - "https://deno.land/std@0.219.0/path/windows/extname.ts": "165a61b00d781257fda1e9606a48c78b06815385e7d703232548dbfc95346bef", - "https://deno.land/std@0.219.0/path/windows/format.ts": "bbb5ecf379305b472b1082cd2fdc010e44a0020030414974d6029be9ad52aeb6", - "https://deno.land/std@0.219.0/path/windows/from_file_url.ts": "ced2d587b6dff18f963f269d745c4a599cf82b0c4007356bd957cb4cb52efc01", - "https://deno.land/std@0.219.0/path/windows/glob_to_regexp.ts": "e45f1f89bf3fc36f94ab7b3b9d0026729829fabc486c77f414caebef3b7304f8", - "https://deno.land/std@0.219.0/path/windows/is_absolute.ts": "4a8f6853f8598cf91a835f41abed42112cebab09478b072e4beb00ec81f8ca8a", - "https://deno.land/std@0.219.0/path/windows/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", - "https://deno.land/std@0.219.0/path/windows/join.ts": "8d03530ab89195185103b7da9dfc6327af13eabdcd44c7c63e42e27808f50ecf", - "https://deno.land/std@0.219.0/path/windows/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", - "https://deno.land/std@0.219.0/path/windows/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", - "https://deno.land/std@0.219.0/path/windows/normalize.ts": "78126170ab917f0ca355a9af9e65ad6bfa5be14d574c5fb09bb1920f52577780", - "https://deno.land/std@0.219.0/path/windows/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", - "https://deno.land/std@0.219.0/path/windows/parse.ts": "dbdfe2bc6db482d755b5f63f7207cd019240fcac02ad2efa582adf67ff10553a", - "https://deno.land/std@0.219.0/path/windows/relative.ts": "3e1abc7977ee6cc0db2730d1f9cb38be87b0ce4806759d271a70e4997fc638d7", - "https://deno.land/std@0.219.0/path/windows/resolve.ts": "8dae1dadfed9d46ff46cc337c9525c0c7d959fb400a6308f34595c45bdca1972", - "https://deno.land/std@0.219.0/path/windows/to_file_url.ts": "40e560ee4854fe5a3d4d12976cef2f4e8914125c81b11f1108e127934ced502e", - "https://deno.land/std@0.219.0/path/windows/to_namespaced_path.ts": "4ffa4fb6fae321448d5fe810b3ca741d84df4d7897e61ee29be961a6aac89a4c", - "https://deno.land/std@0.219.0/semver/_constants.ts": "5ef89c5f33e6095546ae3e57920592feefcb8372d4cc05542f6bf15a1977e3c9", - "https://deno.land/std@0.219.0/semver/_shared.ts": "5c53a675225cba9ad74ae2e17c124e333728fc2b551a13e8a32b99433b90c1c2", - "https://deno.land/std@0.219.0/semver/can_parse.ts": "d4a26f74be078f3ab10293b07bf022021a2f362b3e21b58422c214e7268110b2", - "https://deno.land/std@0.219.0/semver/compare.ts": "e8871844a35cc8fe16e883c16e5237e06a93aa4830ae10d06501abe63586fc57", - "https://deno.land/std@0.219.0/semver/constants.ts": "a0daa58502949654af044928f86288d8b27bd1880218e9faba7733ec0bde63ab", - "https://deno.land/std@0.219.0/semver/difference.ts": "be4f01b7745406408a16b708185a48c1c652cc87e0244b12a5ca75c5585db668", - "https://deno.land/std@0.219.0/semver/equals.ts": "8b9b18260c9a55feee9d3f9250fba345be922380f2e8f8009e455c394ce5e81d", - "https://deno.land/std@0.219.0/semver/format.ts": "26d3a357ac5abd73dee0fe7dbbac6107fbdce0a844370c7b1bcb673c92e46bf6", - "https://deno.land/std@0.219.0/semver/format_range.ts": "6ad2d0c27aac63dfb7efca6286a6ab7742accfb986cc53662047740f17dacfe5", - "https://deno.land/std@0.219.0/semver/greater_or_equal.ts": "89c26f68070896944676eb9704cbb617febc6ed693720282741d6859c3d1fe80", - "https://deno.land/std@0.219.0/semver/greater_than.ts": "d8c4a227cd28ea80a1de9c80215d7f3f95786fe1b196f0cb5ec91d6567adad27", - "https://deno.land/std@0.219.0/semver/increment.ts": "427a043be71d6481e45c1a3939b955e800924d70779cb297b872d9cbf9f0e46d", - "https://deno.land/std@0.219.0/semver/is_range.ts": "15dd9a8d6a8dee56dea6799d8c8210e06c0a38cc1a9aa6152aeea39ce45e2111", - "https://deno.land/std@0.219.0/semver/is_semver.ts": "57914027d6141e593eb04418aaabbfd6f4562a1c53c6c33a1743fa50ada8d849", - "https://deno.land/std@0.219.0/semver/less_or_equal.ts": "7dbf8190f37f3281048c30cf11e072a7af18685534ae88d295baa170b485bd90", - "https://deno.land/std@0.219.0/semver/less_than.ts": "b0c7902c54cecadcc7c1c80afc2f6a0f1bf0b3f53c8d2bfd11f01a3a414cccfe", - "https://deno.land/std@0.219.0/semver/max_satisfying.ts": "03e5182a7424c308ddbb410e4b927da0dabc4e07d4b5a72f7e9b26fb18a02152", - "https://deno.land/std@0.219.0/semver/min_satisfying.ts": "b6fadc9af17278289481c416e1eb135614f88063f4fc2b7b72b43eb3baa2f08f", - "https://deno.land/std@0.219.0/semver/mod.ts": "6e1f8854cec50c027037a597d3dd54af72e063f763ec0cbc4ea1e534a627ffae", - "https://deno.land/std@0.219.0/semver/not_equals.ts": "17147a6f68b9d14f4643c1e2150378ccf6954710309f9618f75b411752a8e13d", - "https://deno.land/std@0.219.0/semver/parse.ts": "b64052ff8ce0b0bba9ed97b835a224c828fc7ad227585c3e8c2bac72a07bf572", - "https://deno.land/std@0.219.0/semver/parse_range.ts": "5190afffc90cc14410ce2478fb81ed83b55d7e96b6fbbd69fc715c457082ec94", - "https://deno.land/std@0.219.0/semver/range_intersects.ts": "2c358f7c27b51960a9889be5462ec1cac44feeb5e40041a5c5a03700c0ddc017", - "https://deno.land/std@0.219.0/semver/range_max.ts": "4c43d018841ba67d018e515f0aef32658dab611a39fdc74e31b1e48709be281c", - "https://deno.land/std@0.219.0/semver/range_min.ts": "37c5e3dac7bd63812ae249add9ea815a351826f510d2baf391c225d1d8272d17", - "https://deno.land/std@0.219.0/semver/test_range.ts": "72ba2af827e4ad94db9a29e22e86cbec9b3f8519fc36fd6ce0d4308717536c70", - "https://deno.land/std@0.219.0/semver/try_parse.ts": "7e2a3594212445d9d6f6154f02288d66a0c0b79ce3e859c41f3d47e29dfa439a", - "https://deno.land/std@0.219.0/semver/try_parse_range.ts": "4f211f0ff4f5fdaa85622ab96c360123bbcf0e5a91a57eb7a8258af6b7a3c704", - "https://deno.land/std@0.219.0/semver/types.ts": "13e1e0c64a4ac76f0add74afee6240c92a7dba184e63e0bd4cb456afed8c7291", - "https://deno.land/std@0.219.0/streams/_common.ts": "948735ef6d140cd6916dca861197b88fc57db52c2f923c392b7a14033d8fed4b", - "https://deno.land/std@0.219.0/streams/buffer.ts": "e012de72a53ad17c56512488e9afb6f4b6ed046b32fc1415ae7a4e6fc0efce38", - "https://deno.land/std@0.219.0/streams/byte_slice_stream.ts": "5bbdcadb118390affa9b3d0a0f73ef8e83754f59bb89df349add669dd9369713", - "https://deno.land/std@0.219.0/streams/delimiter_stream.ts": "4e4050740ff27a8824defa6c96126229ef9d794c4ace4ef9cabb10b5ad4a5d14", - "https://deno.land/std@0.219.0/streams/early_zip_readable_streams.ts": "21f5cf6dd36381c6a50c31a7727b5bd219f6382bbb7a413418595c3e466c4d14", - "https://deno.land/std@0.219.0/streams/iterate_reader.ts": "a50bed95514736c3c554e4c69ea2d8d2699252e4e74507769999d22c3886c777", - "https://deno.land/std@0.219.0/streams/limited_bytes_transform_stream.ts": "b22a45a337374e863c4eb1867ec6b8ad3e68620a6c52fe837746060ea610e6f1", - "https://deno.land/std@0.219.0/streams/limited_transform_stream.ts": "4c47da5ca38a30fa9f33b0f1a61d4548e7f52a9a58c294b0f430f680e44cc543", - "https://deno.land/std@0.219.0/streams/merge_readable_streams.ts": "73eed8ff54c9111b8b974b11a5a11c1ed0b7800e0157c39277ccac3ed14721e2", - "https://deno.land/std@0.219.0/streams/mod.ts": "d56624832b9649b680c74ab9c77e746e8be81ae1a24756cc04623e25a0d43ce9", - "https://deno.land/std@0.219.0/streams/readable_stream_from_reader.ts": "4289a63836f73901441c1879f2be76eea2a983920f4b10a4a9b8a6d8c29ece56", - "https://deno.land/std@0.219.0/streams/reader_from_iterable.ts": "82f1ecef32ec70c7841ca2a54b09c73167d940f0578bec91e874bb8cd42ba8f3", - "https://deno.land/std@0.219.0/streams/reader_from_stream_reader.ts": "dda702bd365a133be8bdbc5a1ba96c67b350c3504410632f3a833895bfc7bae3", - "https://deno.land/std@0.219.0/streams/text_delimiter_stream.ts": "94dfc900204e306496c1b58c80473db57b6097afdcb8ea9eaff453a193a659f1", - "https://deno.land/std@0.219.0/streams/text_line_stream.ts": "21f33d3922e019ec1a1676474beb543929cb564ec99b69cd2654e029e0f45bd5", - "https://deno.land/std@0.219.0/streams/to_array_buffer.ts": "1a9c07c4a396ce557ab205c44415815ab13b614fed94a12f62b80f8e650c726d", - "https://deno.land/std@0.219.0/streams/to_blob.ts": "bf5daaae50fa8f57e0c8bfd7474ebac16ac09e130e3d01ef2947ae5153912b4a", - "https://deno.land/std@0.219.0/streams/to_json.ts": "b6a908d0da7cd30956e5fbbfa7460747e50b8f307d1041282ed6fe9070d579ee", - "https://deno.land/std@0.219.0/streams/to_text.ts": "6f93593bdfc2cea5cca39755ea5caf0d4092580c0a713dfe04a1e85c60df331f", - "https://deno.land/std@0.219.0/streams/to_transform_stream.ts": "4c4836455ef89bab9ece55975ee3a819f07d3d8b0e43101ec7f4ed033c8a2b61", - "https://deno.land/std@0.219.0/streams/writable_stream_from_writer.ts": "62f2712d3a7bebd981fca8bd5140192c37450f9c4aa94283f7ca833e46bc7485", - "https://deno.land/std@0.219.0/streams/writer_from_stream_writer.ts": "b0e39ef607dfdc5abdfb627edf61a9672809463e2bb022afcbaf0cd006c40feb", - "https://deno.land/std@0.219.0/streams/zip_readable_streams.ts": "53eb10d7557539b489bd858907aab6dd28247f074b3446573801de3150cb932e", - "https://deno.land/std@0.219.0/yaml/_dumper/dumper.ts": "5a7b9b18e5b3f5e88b84d040c530b1f8e814c3565dfff7b7a5d16279bdf15ca4", - "https://deno.land/std@0.219.0/yaml/_dumper/dumper_state.ts": "ea262b459dc891c4828a0f814841abfe12d160d319c4b57eb11ed0c768cfcb6b", - "https://deno.land/std@0.219.0/yaml/_error.ts": "f38cdebdb69cde16903d9aa2f3b8a3dd9d13e5f7f3570bf662bfaca69fef669e", - "https://deno.land/std@0.219.0/yaml/_loader/loader.ts": "959c2ab7bbf5fb565bc3f3344f5e92b2712d39ea77a1e57039591696335c6d29", - "https://deno.land/std@0.219.0/yaml/_loader/loader_state.ts": "ee216de6040551940b85473c3185fdb7a6f3030b77153f87a6b7f63f82e489ea", - "https://deno.land/std@0.219.0/yaml/_mark.ts": "1d9d071f8c62d19f284ca4a5aae41680e67653a06a2a4b0eccf931fc5719afa1", - "https://deno.land/std@0.219.0/yaml/_state.ts": "f3b1c1fd11860302f1f33e35e9ce089bf069d4943e8d67516cd6bedbba058c13", - "https://deno.land/std@0.219.0/yaml/_type/binary.ts": "26216e8f306e62401ba00e306e93cdd5fb88da361cdaa567e63ee216dc3ebf93", - "https://deno.land/std@0.219.0/yaml/_type/bool.ts": "121743b23ba82a27ad6a3ec6298c7f5b0908f90e52707f8644a91f7ad51ed2ef", - "https://deno.land/std@0.219.0/yaml/_type/float.ts": "73295b7d8cc24edadfea5041e2255a6332e3491715e884e3bb7d03b563a90a81", - "https://deno.land/std@0.219.0/yaml/_type/function.ts": "bbf705058942bf3370604b37eb77a10aadd72f986c237c9f69b43378a42202c1", - "https://deno.land/std@0.219.0/yaml/_type/int.ts": "c2dc88438a60fccc8d2226042bd18b9967753adaf6bd145feb8b99d567e432ce", - "https://deno.land/std@0.219.0/yaml/_type/map.ts": "ae2acb1cb837fb8e96c75c98611cfd45af847d0114ab5336333c318e7d4b12f4", - "https://deno.land/std@0.219.0/yaml/_type/merge.ts": "ad0d971f91d2fb9f4ab3eba0c837eae357b1804d6b798adc99dc917bc5306b11", - "https://deno.land/std@0.219.0/yaml/_type/mod.ts": "e8929d7b1c969a74f76338d4eb380ef8c4a26cd6441117d521f076b766e9c265", - "https://deno.land/std@0.219.0/yaml/_type/nil.ts": "cbe4387d02d5933322c21b25d8955c5e6228c492e391a6fb82dcf4f498cc421c", - "https://deno.land/std@0.219.0/yaml/_type/omap.ts": "cda915105ab22ba9e1d6317adacee8eec2d8ddaf864cc2f814e3e476946e72c6", - "https://deno.land/std@0.219.0/yaml/_type/pairs.ts": "f97d7dc2b3fa18e246763f44147f6df0d6036c7e122af3e7b6692e4a6b0e289f", - "https://deno.land/std@0.219.0/yaml/_type/regexp.ts": "e49eb9e1c9356fd142bc15f7f323820d411fcc537b5ba3896df9a8b812d270a4", - "https://deno.land/std@0.219.0/yaml/_type/seq.ts": "2deffc7f970869bc01a1541b4961d076329a1c2b30b95e07918f3132db7c3fe2", - "https://deno.land/std@0.219.0/yaml/_type/set.ts": "be8a9e7237a7ffc92dfbe7f5e552d84b7eeba60f3f73cc77fc3c59d3506c74ea", - "https://deno.land/std@0.219.0/yaml/_type/str.ts": "88f0a1ba12295520cd57e96cd78d53aa0787d53c7a1c506155f418c496c2f550", - "https://deno.land/std@0.219.0/yaml/_type/timestamp.ts": "57a6bb4a0f0bd5eab85a1f0ee5ac8820fd3125ea939dc8a037de997a2b6ad05d", - "https://deno.land/std@0.219.0/yaml/_type/undefined.ts": "9d215953c65740f1764e0bdca021007573473f0c49e087f00d9ff02817ecfc97", - "https://deno.land/std@0.219.0/yaml/_utils.ts": "91bbe28b5e7000b9594e40ff5353f8fe7a7ba914eec917e1202cbaf5ac931c58", - "https://deno.land/std@0.219.0/yaml/mod.ts": "54e9bfad77c8cd58f49b65f4d568045ff08989ed36318a2ca733a43cb6f1bc00", - "https://deno.land/std@0.219.0/yaml/parse.ts": "f45278d9ebccb789af4eceeffa5c291e194bcf1fa9aab1b34ff52c2bd4a9d886", - "https://deno.land/std@0.219.0/yaml/schema.ts": "dae089ffa1ac4a2b031176aa019e126be6f7230a3011de38463ead8639b14739", - "https://deno.land/std@0.219.0/yaml/schema/core.ts": "1222f9401e2a0c1d38e63d753da98be333e61a6032335e9c46a68bd45ecce85a", - "https://deno.land/std@0.219.0/yaml/schema/default.ts": "b77c71cfd453951dd828e5f2f02f9f37335c9c0a49c8051d1a9653fa82357740", - "https://deno.land/std@0.219.0/yaml/schema/extended.ts": "996da59626409047b5c1a2d68bdbeead43914cedede47c5923e80ae4febe7d24", - "https://deno.land/std@0.219.0/yaml/schema/failsafe.ts": "24b2b630cef6fcce7de6d29db651523b0f49e5691d690931c42ecf4823837fdb", - "https://deno.land/std@0.219.0/yaml/schema/json.ts": "0fb9268282d266c24d963e75ef77f51accbbb74f40713a99e83ad621a81bc9ae", - "https://deno.land/std@0.219.0/yaml/schema/mod.ts": "9bf7ff80c2a246f781bdcab979211d0389760831a974cf5883bf2016567e3507", - "https://deno.land/std@0.219.0/yaml/stringify.ts": "580f8b2fa56e3233424520d8242f4fc0edf41ac54a6a6d2f6f8e0b6e99cd63c0", - "https://deno.land/std@0.219.0/yaml/type.ts": "708dde5f20b01cc1096489b7155b6af79a217d585afb841128e78c3c2391eb5c", "https://deno.land/std@0.221.0/assert/assert.ts": "bec068b2fccdd434c138a555b19a2c2393b71dfaada02b7d568a01541e67cdc5", "https://deno.land/std@0.221.0/assert/assertion_error.ts": "9f689a101ee586c4ce92f52fa7ddd362e86434ffdf1f848e45987dc7689976b8", "https://deno.land/std@0.221.0/console/_data.json": "cf2cc9d039a192b3adbfe64627167c7e6212704c888c25c769fc8f1709e1e1b8", @@ -1222,304 +702,6 @@ "https://deno.land/std@0.221.0/fmt/colors.ts": "d239d84620b921ea520125d778947881f62c50e78deef2657073840b8af9559a", "https://deno.land/std@0.221.0/text/closest_string.ts": "8a91ee8b6d69ff96addcb7c251dad53b476ac8be9c756a0ef786abe9e13a93a5", "https://deno.land/std@0.221.0/text/levenshtein_distance.ts": "24be5cc88326bbba83ca7c1ea89259af0050cffda2817ff3a6d240ad6495eae2", - "https://deno.land/std@0.224.0/archive/_common.ts": "5fcad5f7280cec1d20540b4a6e43ea9a6fd63daf9c4cf8a58c6321d07c32e317", - "https://deno.land/std@0.224.0/archive/untar.ts": "bd39dbeda737f6fd9409b5923d7172f8abd7826508f09c4a1c38886574f6da4a", - "https://deno.land/std@0.224.0/assert/_constants.ts": "a271e8ef5a573f1df8e822a6eb9d09df064ad66a4390f21b3e31f820a38e0975", - "https://deno.land/std@0.224.0/assert/assert.ts": "09d30564c09de846855b7b071e62b5974b001bb72a4b797958fe0660e7849834", - "https://deno.land/std@0.224.0/assert/assert_almost_equals.ts": "9e416114322012c9a21fa68e187637ce2d7df25bcbdbfd957cd639e65d3cf293", - "https://deno.land/std@0.224.0/assert/assert_array_includes.ts": "14c5094471bc8e4a7895fc6aa5a184300d8a1879606574cb1cd715ef36a4a3c7", - "https://deno.land/std@0.224.0/assert/assert_equals.ts": "3bbca947d85b9d374a108687b1a8ba3785a7850436b5a8930d81f34a32cb8c74", - "https://deno.land/std@0.224.0/assert/assert_exists.ts": "43420cf7f956748ae6ed1230646567b3593cb7a36c5a5327269279c870c5ddfd", - "https://deno.land/std@0.224.0/assert/assert_false.ts": "3e9be8e33275db00d952e9acb0cd29481a44fa0a4af6d37239ff58d79e8edeff", - "https://deno.land/std@0.224.0/assert/assert_greater.ts": "5e57b201fd51b64ced36c828e3dfd773412c1a6120c1a5a99066c9b261974e46", - "https://deno.land/std@0.224.0/assert/assert_greater_or_equal.ts": "9870030f997a08361b6f63400273c2fb1856f5db86c0c3852aab2a002e425c5b", - "https://deno.land/std@0.224.0/assert/assert_instance_of.ts": "e22343c1fdcacfaea8f37784ad782683ec1cf599ae9b1b618954e9c22f376f2c", - "https://deno.land/std@0.224.0/assert/assert_is_error.ts": "f856b3bc978a7aa6a601f3fec6603491ab6255118afa6baa84b04426dd3cc491", - "https://deno.land/std@0.224.0/assert/assert_less.ts": "60b61e13a1982865a72726a5fa86c24fad7eb27c3c08b13883fb68882b307f68", - "https://deno.land/std@0.224.0/assert/assert_less_or_equal.ts": "d2c84e17faba4afe085e6c9123a63395accf4f9e00150db899c46e67420e0ec3", - "https://deno.land/std@0.224.0/assert/assert_match.ts": "ace1710dd3b2811c391946954234b5da910c5665aed817943d086d4d4871a8b7", - "https://deno.land/std@0.224.0/assert/assert_not_equals.ts": "78d45dd46133d76ce624b2c6c09392f6110f0df9b73f911d20208a68dee2ef29", - "https://deno.land/std@0.224.0/assert/assert_not_instance_of.ts": "3434a669b4d20cdcc5359779301a0588f941ffdc2ad68803c31eabdb4890cf7a", - "https://deno.land/std@0.224.0/assert/assert_not_match.ts": "df30417240aa2d35b1ea44df7e541991348a063d9ee823430e0b58079a72242a", - "https://deno.land/std@0.224.0/assert/assert_not_strict_equals.ts": "37f73880bd672709373d6dc2c5f148691119bed161f3020fff3548a0496f71b8", - "https://deno.land/std@0.224.0/assert/assert_object_match.ts": "411450fd194fdaabc0089ae68f916b545a49d7b7e6d0026e84a54c9e7eed2693", - "https://deno.land/std@0.224.0/assert/assert_rejects.ts": "4bee1d6d565a5b623146a14668da8f9eb1f026a4f338bbf92b37e43e0aa53c31", - "https://deno.land/std@0.224.0/assert/assert_strict_equals.ts": "b4f45f0fd2e54d9029171876bd0b42dd9ed0efd8f853ab92a3f50127acfa54f5", - "https://deno.land/std@0.224.0/assert/assert_string_includes.ts": "496b9ecad84deab72c8718735373feb6cdaa071eb91a98206f6f3cb4285e71b8", - "https://deno.land/std@0.224.0/assert/assert_throws.ts": "c6508b2879d465898dab2798009299867e67c570d7d34c90a2d235e4553906eb", - "https://deno.land/std@0.224.0/assert/assertion_error.ts": "ba8752bd27ebc51f723702fac2f54d3e94447598f54264a6653d6413738a8917", - "https://deno.land/std@0.224.0/assert/equal.ts": "bddf07bb5fc718e10bb72d5dc2c36c1ce5a8bdd3b647069b6319e07af181ac47", - "https://deno.land/std@0.224.0/assert/fail.ts": "0eba674ffb47dff083f02ced76d5130460bff1a9a68c6514ebe0cdea4abadb68", - "https://deno.land/std@0.224.0/assert/mod.ts": "48b8cb8a619ea0b7958ad7ee9376500fe902284bb36f0e32c598c3dc34cbd6f3", - "https://deno.land/std@0.224.0/assert/unimplemented.ts": "8c55a5793e9147b4f1ef68cd66496b7d5ba7a9e7ca30c6da070c1a58da723d73", - "https://deno.land/std@0.224.0/assert/unreachable.ts": "5ae3dbf63ef988615b93eb08d395dda771c96546565f9e521ed86f6510c29e19", - "https://deno.land/std@0.224.0/async/_util.ts": "3e94e674c974c5c9277f6b3ba2d4e8403c320ba5cebb891f50afa3af4b8e0ac9", - "https://deno.land/std@0.224.0/async/abortable.ts": "ea6ddb98c1c6f066d5b26c8fd030e2d5afa54571182674aa07929c39dfa8c5b2", - "https://deno.land/std@0.224.0/async/deadline.ts": "008929d69b1efdd11b1fa55784bb4882add6adf8722868b26e87f68e35efc573", - "https://deno.land/std@0.224.0/async/debounce.ts": "e7bcccb17b6fe34646ac5d37c2a6d3830ca049e7e3534d2aace4001596f42eff", - "https://deno.land/std@0.224.0/async/delay.ts": "f90dd685b97c2f142b8069082993e437b1602b8e2561134827eeb7c12b95c499", - "https://deno.land/std@0.224.0/async/mod.ts": "ae2b6869ad7563f825e037e02c263507da4a55563b4a0bcd9079d2c3eb2670a2", - "https://deno.land/std@0.224.0/async/mux_async_iterator.ts": "8d960e951c7bf6cb682522c2ebf5bd3e738b27c6a7ac9500ab64d27054930972", - "https://deno.land/std@0.224.0/async/pool.ts": "2b972e3643444b73f6a8bcdd19799a2d0821b28a45fbe47fd333223eb84327f0", - "https://deno.land/std@0.224.0/async/retry.ts": "29025b09259c22123c599b8c957aeff2755854272954776dc9a5846c72ea4cfe", - "https://deno.land/std@0.224.0/async/tee.ts": "34373c58950b7ac5950632dc8c9908076abeefcc9032d6299fff92194c284fbd", - "https://deno.land/std@0.224.0/bytes/concat.ts": "86161274b5546a02bdb3154652418efe7af8c9310e8d54107a68aaa148e0f5ed", - "https://deno.land/std@0.224.0/bytes/copy.ts": "08d85062240a7223e6ec4e2af193ad1a50c59a43f0d86ac3a7b16f3e0d77c028", - "https://deno.land/std@0.224.0/collections/_utils.ts": "b2ec8ada31b5a72ebb1d99774b849b4c09fe4b3a38d07794bd010bd218a16e0b", - "https://deno.land/std@0.224.0/collections/chunk.ts": "e6e533d6ae047f2082892831d463426f79cdd0d3f09ce298317a8469abf8467e", - "https://deno.land/std@0.224.0/collections/deep_merge.ts": "04f8d2a6cfa15c7580e788689bcb5e162512b9ccb18bab1241824b432a78551e", - "https://deno.land/std@0.224.0/collections/distinct.ts": "42d81633e4ccd5ea89118cb08f875bbfc683ac6620df2fa60f3d07270b177f4d", - "https://deno.land/std@0.224.0/collections/distinct_by.ts": "e895705decb0ce88b31c6679fd4e2bd08ac6d47cde7d00bf2016e3c2bac565a7", - "https://deno.land/std@0.224.0/collections/filter_keys.ts": "bf8eaae2769e6ddd34f23ba1912f7feda2b6f374253c07a6630e9a2e384ba611", - "https://deno.land/std@0.224.0/collections/filter_values.ts": "ad8fae5751977598f8c794d65f0d42c9f9e47a7d774cf82b2449cd78ff4f729a", - "https://deno.land/std@0.224.0/collections/map_keys.ts": "2fd91963117d2376ea6dbbe473d77c20ede79b72437ed0dac36161b1af62f058", - "https://deno.land/std@0.224.0/collections/map_values.ts": "91d6ece4b4dc4b94abc378f51e0e309e7f7f18b2ce4c335dab673a31ebd17c75", - "https://deno.land/std@0.224.0/crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs": "7cd490ae1553c97459bd02de4c3f0a552768a85621949b2366003f3cf84b99d7", - "https://deno.land/std@0.224.0/crypto/_wasm/mod.ts": "e89fbbc3c4722602ff975dd85f18273c7741ec766a9b68f6de4fd1d9876409f8", - "https://deno.land/std@0.224.0/crypto/crypto.ts": "e58d78f3db111a499261dbab037ec78cc89da0516a50e1f0205665980a3417e3", - "https://deno.land/std@0.224.0/crypto/mod.ts": "9148fb70ca3d64977e9487b2002d3b1026e8ad8a2078774b807586ba3c77e3bb", - "https://deno.land/std@0.224.0/crypto/timing_safe_equal.ts": "bc3622b5aec05e2d8b735bf60633425c34333c06cfb6c4a9f102e4a0f3931ced", - "https://deno.land/std@0.224.0/crypto/unstable_keystack.ts": "c2a6f6ed67a4e78745e3c9b490ebb7c12f6066f5c2fe0c69d353961909dc82dd", - "https://deno.land/std@0.224.0/encoding/_util.ts": "beacef316c1255da9bc8e95afb1fa56ed69baef919c88dc06ae6cb7a6103d376", - "https://deno.land/std@0.224.0/encoding/base64.ts": "dd59695391584c8ffc5a296ba82bcdba6dd8a84d41a6a539fbee8e5075286eaf", - "https://deno.land/std@0.224.0/encoding/base64url.ts": "ef40e0f18315ab539f17cebcc32839779e018d86dea9df39d94d302f342a1713", - "https://deno.land/std@0.224.0/encoding/hex.ts": "6270f25e5d85f99fcf315278670ba012b04b7c94b67715b53f30d03249687c07", - "https://deno.land/std@0.224.0/flags/mod.ts": "88553267f34519c8982212185339efdb2d2e62c159ec558f47eb50c8952a6be3", - "https://deno.land/std@0.224.0/fmt/colors.ts": "508563c0659dd7198ba4bbf87e97f654af3c34eb56ba790260f252ad8012e1c5", - "https://deno.land/std@0.224.0/fs/_create_walk_entry.ts": "5d9d2aaec05bcf09a06748b1684224d33eba7a4de24cf4cf5599991ca6b5b412", - "https://deno.land/std@0.224.0/fs/_get_file_info_type.ts": "da7bec18a7661dba360a1db475b826b18977582ce6fc9b25f3d4ee0403fe8cbd", - "https://deno.land/std@0.224.0/fs/_is_same_path.ts": "709c95868345fea051c58b9e96af95cff94e6ae98dfcff2b66dee0c212c4221f", - "https://deno.land/std@0.224.0/fs/_is_subdir.ts": "c68b309d46cc8568ed83c000f608a61bbdba0943b7524e7a30f9e450cf67eecd", - "https://deno.land/std@0.224.0/fs/_to_path_string.ts": "29bfc9c6c112254961d75cbf6ba814d6de5349767818eb93090cecfa9665591e", - "https://deno.land/std@0.224.0/fs/copy.ts": "7ab12a16adb65d155d4943c88081ca16ce3b0b5acada64c1ce93800653678039", - "https://deno.land/std@0.224.0/fs/empty_dir.ts": "e400e96e1d2c8c558a5a1712063bd43939e00619c1d1cc29959babc6f1639418", - "https://deno.land/std@0.224.0/fs/ensure_dir.ts": "51a6279016c65d2985f8803c848e2888e206d1b510686a509fa7cc34ce59d29f", - "https://deno.land/std@0.224.0/fs/ensure_file.ts": "67608cf550529f3d4aa1f8b6b36bf817bdc40b14487bf8f60e61cbf68f507cf3", - "https://deno.land/std@0.224.0/fs/ensure_link.ts": "5c98503ebfa9cc05e2f2efaa30e91e60b4dd5b43ebbda82f435c0a5c6e3ffa01", - "https://deno.land/std@0.224.0/fs/ensure_symlink.ts": "cafe904cebacb9a761977d6dbf5e3af938be946a723bb394080b9a52714fafe4", - "https://deno.land/std@0.224.0/fs/eol.ts": "18c4ac009d0318504c285879eb7f47942643f13619e0ff070a0edc59353306bd", - "https://deno.land/std@0.224.0/fs/exists.ts": "3d38cb7dcbca3cf313be343a7b8af18a87bddb4b5ca1bd2314be12d06533b50f", - "https://deno.land/std@0.224.0/fs/expand_glob.ts": "2e428d90acc6676b2aa7b5c78ef48f30641b13f1fe658e7976c9064fb4b05309", - "https://deno.land/std@0.224.0/fs/mod.ts": "c25e6802cbf27f3050f60b26b00c2d8dba1cb7fcdafe34c66006a7473b7b34d4", - "https://deno.land/std@0.224.0/fs/move.ts": "ca205d848908d7f217353bc5c623627b1333490b8b5d3ef4cab600a700c9bd8f", - "https://deno.land/std@0.224.0/fs/walk.ts": "cddf87d2705c0163bff5d7767291f05b0f46ba10b8b28f227c3849cace08d303", - "https://deno.land/std@0.224.0/http/cookie.ts": "a377fa60175ba5f61dd4b8a70b34f2bbfbc70782dfd5faf36d314c42e4306006", - "https://deno.land/std@0.224.0/internal/diff.ts": "6234a4b493ebe65dc67a18a0eb97ef683626a1166a1906232ce186ae9f65f4e6", - "https://deno.land/std@0.224.0/internal/format.ts": "0a98ee226fd3d43450245b1844b47003419d34d210fa989900861c79820d21c2", - "https://deno.land/std@0.224.0/internal/mod.ts": "534125398c8e7426183e12dc255bb635d94e06d0f93c60a297723abe69d3b22e", - "https://deno.land/std@0.224.0/io/_common.ts": "36705cdb4dfcd338d6131bca1b16e48a4d5bf0d1dada6ce397268e88c17a5835", - "https://deno.land/std@0.224.0/io/_constants.ts": "3c7ad4695832e6e4a32e35f218c70376b62bc78621ef069a4a0a3d55739f8856", - "https://deno.land/std@0.224.0/io/buf_reader.ts": "aa6d589e567c964c8ba1f582648f3feac45e88ab2e3d2cc2c9f84fd73c05d051", - "https://deno.land/std@0.224.0/io/buffer.ts": "4d1f805f350433e418002accec798bc6c33ce18f614afa65f987c202d7b2234e", - "https://deno.land/std@0.224.0/io/copy.ts": "63c6a4acf71fb1e89f5e47a7b3b2972f9d2c56dd645560975ead72db7eb23f61", - "https://deno.land/std@0.224.0/io/iterate_reader.ts": "1e5e4fea22d8965afb7df4ee9ab9adda0a0fc581adbea31bc2f2d25453f8a6e9", - "https://deno.land/std@0.224.0/io/read_all.ts": "876c1cb20adea15349c72afc86cecd3573335845ae778967aefb5e55fe5a8a4a", - "https://deno.land/std@0.224.0/io/reader_from_stream_reader.ts": "a75bbc93f39df8b0e372cc1fbdc416a7cbf2a39fc4c09ddb057f1241100191c5", - "https://deno.land/std@0.224.0/io/to_readable_stream.ts": "ed03a44a1ec1cc55a85a857acf6cac472035298f6f3b6207ea209f93b4aefb39", - "https://deno.land/std@0.224.0/io/to_writable_stream.ts": "ef422e0425963c8a1e0481674e66c3023da50f0acbe5ef51ec9789efc3c1e2ed", - "https://deno.land/std@0.224.0/io/types.ts": "acecb3074c730b5ff487ba4fe9ce51e67bd982aa07c95e5f5679b7b2f24ad129", - "https://deno.land/std@0.224.0/io/write_all.ts": "24aac2312bb21096ae3ae0b102b22c26164d3249dff96dbac130958aa736f038", - "https://deno.land/std@0.224.0/log/_config.ts": "489e11b6d3c917bf5fc954c5e914c095d3480efd924d1e85f2fc576468581c54", - "https://deno.land/std@0.224.0/log/_state.ts": "314c0c31ab9c8f4fb33326ad446757d35f75e5bb21746b7720ed4e3f3a939da1", - "https://deno.land/std@0.224.0/log/base_handler.ts": "f03f013dac9c1a226aab60c6f5751b3131cc4f2808720715285e0dab5697a54e", - "https://deno.land/std@0.224.0/log/console_handler.ts": "9b17b9025c7d94eab950a25eccca81fd9dd71d063b9f458f149e52db52ab0295", - "https://deno.land/std@0.224.0/log/critical.ts": "a8b44a4c6768629d2a506ffe1a1a048da7ae76d3146000f8a492008eac4ecba0", - "https://deno.land/std@0.224.0/log/debug.ts": "ddd63a549fedc3061deba47e41cd2170263831fc266e503a12b610b77439333b", - "https://deno.land/std@0.224.0/log/error.ts": "3979ee3aadc962345ad50eff8a5470ad3fe07c70370808ddc178ee08c3d6c89c", - "https://deno.land/std@0.224.0/log/file_handler.ts": "68d6d81ec53bdd6ba61eaceec19d12de59a8ad12ace0d7980a592a51f924a242", - "https://deno.land/std@0.224.0/log/formatters.ts": "29e0325902c3b1cbb3b9ffc1f9d77ac2d2e5af35d27b9bdfe4fdbbd83588d4a8", - "https://deno.land/std@0.224.0/log/get_logger.ts": "36a5febf5338f68aadafaf23bbe38a208e2a3150ec02ca2ec5d3c6bbaf840641", - "https://deno.land/std@0.224.0/log/info.ts": "e6c4971e35092d85cd3241fe7eccdb42999083d14db6aadc5e741f6231e275ad", - "https://deno.land/std@0.224.0/log/levels.ts": "632ba12baa2600750d004cc5cb4eabe10e410f3f2bdfcb9f7142b6d767f2fee6", - "https://deno.land/std@0.224.0/log/logger.ts": "57109848fb587fb3843a7b893f22f1a86c1b78c289172627a6305906738f238a", - "https://deno.land/std@0.224.0/log/mod.ts": "650c53c2c5d9eb05210c4ec54184ecb5bd24fb32ce28e65fad039853978f53f3", - "https://deno.land/std@0.224.0/log/rotating_file_handler.ts": "a6e7c712e568b618303273ff95483f6ab86dec0a485c73c2e399765f752b5aa8", - "https://deno.land/std@0.224.0/log/setup.ts": "42425c550da52c7def7f63a4fcc1ac01a4aec6c73336697a640978d6a324e7a6", - "https://deno.land/std@0.224.0/log/warn.ts": "f1a6bc33a481f231a0257e6d66e26c2e695b931d5e917d8de4f2b825778dfd4e", - "https://deno.land/std@0.224.0/path/_common/assert_path.ts": "dbdd757a465b690b2cc72fc5fb7698c51507dec6bfafce4ca500c46b76ff7bd8", - "https://deno.land/std@0.224.0/path/_common/basename.ts": "569744855bc8445f3a56087fd2aed56bdad39da971a8d92b138c9913aecc5fa2", - "https://deno.land/std@0.224.0/path/_common/common.ts": "ef73c2860694775fe8ffcbcdd387f9f97c7a656febf0daa8c73b56f4d8a7bd4c", - "https://deno.land/std@0.224.0/path/_common/constants.ts": "dc5f8057159f4b48cd304eb3027e42f1148cf4df1fb4240774d3492b5d12ac0c", - "https://deno.land/std@0.224.0/path/_common/dirname.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", - "https://deno.land/std@0.224.0/path/_common/format.ts": "92500e91ea5de21c97f5fe91e178bae62af524b72d5fcd246d6d60ae4bcada8b", - "https://deno.land/std@0.224.0/path/_common/from_file_url.ts": "d672bdeebc11bf80e99bf266f886c70963107bdd31134c4e249eef51133ceccf", - "https://deno.land/std@0.224.0/path/_common/glob_to_reg_exp.ts": "6cac16d5c2dc23af7d66348a7ce430e5de4e70b0eede074bdbcf4903f4374d8d", - "https://deno.land/std@0.224.0/path/_common/normalize.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", - "https://deno.land/std@0.224.0/path/_common/normalize_string.ts": "33edef773c2a8e242761f731adeb2bd6d683e9c69e4e3d0092985bede74f4ac3", - "https://deno.land/std@0.224.0/path/_common/relative.ts": "faa2753d9b32320ed4ada0733261e3357c186e5705678d9dd08b97527deae607", - "https://deno.land/std@0.224.0/path/_common/strip_trailing_separators.ts": "7024a93447efcdcfeaa9339a98fa63ef9d53de363f1fbe9858970f1bba02655a", - "https://deno.land/std@0.224.0/path/_common/to_file_url.ts": "7f76adbc83ece1bba173e6e98a27c647712cab773d3f8cbe0398b74afc817883", - "https://deno.land/std@0.224.0/path/_interface.ts": "8dfeb930ca4a772c458a8c7bbe1e33216fe91c253411338ad80c5b6fa93ddba0", - "https://deno.land/std@0.224.0/path/_os.ts": "8fb9b90fb6b753bd8c77cfd8a33c2ff6c5f5bc185f50de8ca4ac6a05710b2c15", - "https://deno.land/std@0.224.0/path/basename.ts": "7ee495c2d1ee516ffff48fb9a93267ba928b5a3486b550be73071bc14f8cc63e", - "https://deno.land/std@0.224.0/path/common.ts": "03e52e22882402c986fe97ca3b5bb4263c2aa811c515ce84584b23bac4cc2643", - "https://deno.land/std@0.224.0/path/constants.ts": "0c206169ca104938ede9da48ac952de288f23343304a1c3cb6ec7625e7325f36", - "https://deno.land/std@0.224.0/path/dirname.ts": "85bd955bf31d62c9aafdd7ff561c4b5fb587d11a9a5a45e2b01aedffa4238a7c", - "https://deno.land/std@0.224.0/path/extname.ts": "593303db8ae8c865cbd9ceec6e55d4b9ac5410c1e276bfd3131916591b954441", - "https://deno.land/std@0.224.0/path/format.ts": "6ce1779b0980296cf2bc20d66436b12792102b831fd281ab9eb08fa8a3e6f6ac", - "https://deno.land/std@0.224.0/path/from_file_url.ts": "911833ae4fd10a1c84f6271f36151ab785955849117dc48c6e43b929504ee069", - "https://deno.land/std@0.224.0/path/glob_to_regexp.ts": "7f30f0a21439cadfdae1be1bf370880b415e676097fda584a63ce319053b5972", - "https://deno.land/std@0.224.0/path/is_absolute.ts": "4791afc8bfd0c87f0526eaa616b0d16e7b3ab6a65b62942e50eac68de4ef67d7", - "https://deno.land/std@0.224.0/path/is_glob.ts": "a65f6195d3058c3050ab905705891b412ff942a292bcbaa1a807a74439a14141", - "https://deno.land/std@0.224.0/path/join.ts": "ae2ec5ca44c7e84a235fd532e4a0116bfb1f2368b394db1c4fb75e3c0f26a33a", - "https://deno.land/std@0.224.0/path/join_globs.ts": "5b3bf248b93247194f94fa6947b612ab9d3abd571ca8386cf7789038545e54a0", - "https://deno.land/std@0.224.0/path/mod.ts": "f6bd79cb08be0e604201bc9de41ac9248582699d1b2ee0ab6bc9190d472cf9cd", - "https://deno.land/std@0.224.0/path/normalize.ts": "4155743ccceeed319b350c1e62e931600272fad8ad00c417b91df093867a8352", - "https://deno.land/std@0.224.0/path/normalize_glob.ts": "cc89a77a7d3b1d01053b9dcd59462b75482b11e9068ae6c754b5cf5d794b374f", - "https://deno.land/std@0.224.0/path/parse.ts": "77ad91dcb235a66c6f504df83087ce2a5471e67d79c402014f6e847389108d5a", - "https://deno.land/std@0.224.0/path/posix/_util.ts": "1e3937da30f080bfc99fe45d7ed23c47dd8585c5e473b2d771380d3a6937cf9d", - "https://deno.land/std@0.224.0/path/posix/basename.ts": "d2fa5fbbb1c5a3ab8b9326458a8d4ceac77580961b3739cd5bfd1d3541a3e5f0", - "https://deno.land/std@0.224.0/path/posix/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", - "https://deno.land/std@0.224.0/path/posix/constants.ts": "93481efb98cdffa4c719c22a0182b994e5a6aed3047e1962f6c2c75b7592bef1", - "https://deno.land/std@0.224.0/path/posix/dirname.ts": "76cd348ffe92345711409f88d4d8561d8645353ac215c8e9c80140069bf42f00", - "https://deno.land/std@0.224.0/path/posix/extname.ts": "e398c1d9d1908d3756a7ed94199fcd169e79466dd88feffd2f47ce0abf9d61d2", - "https://deno.land/std@0.224.0/path/posix/format.ts": "185e9ee2091a42dd39e2a3b8e4925370ee8407572cee1ae52838aed96310c5c1", - "https://deno.land/std@0.224.0/path/posix/from_file_url.ts": "951aee3a2c46fd0ed488899d024c6352b59154c70552e90885ed0c2ab699bc40", - "https://deno.land/std@0.224.0/path/posix/glob_to_regexp.ts": "76f012fcdb22c04b633f536c0b9644d100861bea36e9da56a94b9c589a742e8f", - "https://deno.land/std@0.224.0/path/posix/is_absolute.ts": "cebe561ad0ae294f0ce0365a1879dcfca8abd872821519b4fcc8d8967f888ede", - "https://deno.land/std@0.224.0/path/posix/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", - "https://deno.land/std@0.224.0/path/posix/join.ts": "7fc2cb3716aa1b863e990baf30b101d768db479e70b7313b4866a088db016f63", - "https://deno.land/std@0.224.0/path/posix/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", - "https://deno.land/std@0.224.0/path/posix/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", - "https://deno.land/std@0.224.0/path/posix/normalize.ts": "baeb49816a8299f90a0237d214cef46f00ba3e95c0d2ceb74205a6a584b58a91", - "https://deno.land/std@0.224.0/path/posix/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", - "https://deno.land/std@0.224.0/path/posix/parse.ts": "09dfad0cae530f93627202f28c1befa78ea6e751f92f478ca2cc3b56be2cbb6a", - "https://deno.land/std@0.224.0/path/posix/relative.ts": "3907d6eda41f0ff723d336125a1ad4349112cd4d48f693859980314d5b9da31c", - "https://deno.land/std@0.224.0/path/posix/resolve.ts": "08b699cfeee10cb6857ccab38fa4b2ec703b0ea33e8e69964f29d02a2d5257cf", - "https://deno.land/std@0.224.0/path/posix/to_file_url.ts": "7aa752ba66a35049e0e4a4be5a0a31ac6b645257d2e031142abb1854de250aaf", - "https://deno.land/std@0.224.0/path/posix/to_namespaced_path.ts": "28b216b3c76f892a4dca9734ff1cc0045d135532bfd9c435ae4858bfa5a2ebf0", - "https://deno.land/std@0.224.0/path/relative.ts": "ab739d727180ed8727e34ed71d976912461d98e2b76de3d3de834c1066667add", - "https://deno.land/std@0.224.0/path/resolve.ts": "a6f977bdb4272e79d8d0ed4333e3d71367cc3926acf15ac271f1d059c8494d8d", - "https://deno.land/std@0.224.0/path/to_file_url.ts": "88f049b769bce411e2d2db5bd9e6fd9a185a5fbd6b9f5ad8f52bef517c4ece1b", - "https://deno.land/std@0.224.0/path/to_namespaced_path.ts": "b706a4103b104cfadc09600a5f838c2ba94dbcdb642344557122dda444526e40", - "https://deno.land/std@0.224.0/path/windows/_util.ts": "d5f47363e5293fced22c984550d5e70e98e266cc3f31769e1710511803d04808", - "https://deno.land/std@0.224.0/path/windows/basename.ts": "6bbc57bac9df2cec43288c8c5334919418d784243a00bc10de67d392ab36d660", - "https://deno.land/std@0.224.0/path/windows/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", - "https://deno.land/std@0.224.0/path/windows/constants.ts": "5afaac0a1f67b68b0a380a4ef391bf59feb55856aa8c60dfc01bd3b6abb813f5", - "https://deno.land/std@0.224.0/path/windows/dirname.ts": "33e421be5a5558a1346a48e74c330b8e560be7424ed7684ea03c12c21b627bc9", - "https://deno.land/std@0.224.0/path/windows/extname.ts": "165a61b00d781257fda1e9606a48c78b06815385e7d703232548dbfc95346bef", - "https://deno.land/std@0.224.0/path/windows/format.ts": "bbb5ecf379305b472b1082cd2fdc010e44a0020030414974d6029be9ad52aeb6", - "https://deno.land/std@0.224.0/path/windows/from_file_url.ts": "ced2d587b6dff18f963f269d745c4a599cf82b0c4007356bd957cb4cb52efc01", - "https://deno.land/std@0.224.0/path/windows/glob_to_regexp.ts": "e45f1f89bf3fc36f94ab7b3b9d0026729829fabc486c77f414caebef3b7304f8", - "https://deno.land/std@0.224.0/path/windows/is_absolute.ts": "4a8f6853f8598cf91a835f41abed42112cebab09478b072e4beb00ec81f8ca8a", - "https://deno.land/std@0.224.0/path/windows/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", - "https://deno.land/std@0.224.0/path/windows/join.ts": "8d03530ab89195185103b7da9dfc6327af13eabdcd44c7c63e42e27808f50ecf", - "https://deno.land/std@0.224.0/path/windows/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", - "https://deno.land/std@0.224.0/path/windows/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", - "https://deno.land/std@0.224.0/path/windows/normalize.ts": "78126170ab917f0ca355a9af9e65ad6bfa5be14d574c5fb09bb1920f52577780", - "https://deno.land/std@0.224.0/path/windows/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", - "https://deno.land/std@0.224.0/path/windows/parse.ts": "08804327b0484d18ab4d6781742bf374976de662f8642e62a67e93346e759707", - "https://deno.land/std@0.224.0/path/windows/relative.ts": "3e1abc7977ee6cc0db2730d1f9cb38be87b0ce4806759d271a70e4997fc638d7", - "https://deno.land/std@0.224.0/path/windows/resolve.ts": "8dae1dadfed9d46ff46cc337c9525c0c7d959fb400a6308f34595c45bdca1972", - "https://deno.land/std@0.224.0/path/windows/to_file_url.ts": "40e560ee4854fe5a3d4d12976cef2f4e8914125c81b11f1108e127934ced502e", - "https://deno.land/std@0.224.0/path/windows/to_namespaced_path.ts": "4ffa4fb6fae321448d5fe810b3ca741d84df4d7897e61ee29be961a6aac89a4c", - "https://deno.land/std@0.224.0/semver/_constants.ts": "5ef89c5f33e6095546ae3e57920592feefcb8372d4cc05542f6bf15a1977e3c9", - "https://deno.land/std@0.224.0/semver/_shared.ts": "5c53a675225cba9ad74ae2e17c124e333728fc2b551a13e8a32b99433b90c1c2", - "https://deno.land/std@0.224.0/semver/_test_comparator_set.ts": "c57f3009ee30748becb15c14de8f0af518ba7f7e9c4db0dd2a31f925c5f2c811", - "https://deno.land/std@0.224.0/semver/can_parse.ts": "590094363e0ae1b97a71e9924633cda9c4582d42299efbefa643c9de5d9c754c", - "https://deno.land/std@0.224.0/semver/compare.ts": "7b5610c25ded57dc4aa41034ee02857d1a6fff609ab183afea17849284f86236", - "https://deno.land/std@0.224.0/semver/constants.ts": "bd442eb6d51d5032686e02abdf575b32dd08f2c95e653e66bbeb927e8ff54bb5", - "https://deno.land/std@0.224.0/semver/difference.ts": "460608126dd5d49b2b1b93b5d8c70f93936ee0f7049283d4050c2d691115b81c", - "https://deno.land/std@0.224.0/semver/equals.ts": "c22d79ce6f9b80fb8db9af3cb680d8103081fc2c460d57a4761ba11f82b683bd", - "https://deno.land/std@0.224.0/semver/format.ts": "a4492b55a10210a10b9307491c0ec7f0c2475cc82af33de1c2565a15083b83df", - "https://deno.land/std@0.224.0/semver/format_range.ts": "493a9916a806270fc0e4721cf3b4c6a6815cf240150e7e87c58dec23eb574aaa", - "https://deno.land/std@0.224.0/semver/greater_or_equal.ts": "d05ddd0adce43758ce74d4a4d7bc2a20b79cbd7604f01f604187c12735a65d0e", - "https://deno.land/std@0.224.0/semver/greater_than.ts": "12e7bd3790539b791147a1c10654747c60791f2699b72e07bcaba6042ac946a6", - "https://deno.land/std@0.224.0/semver/greater_than_range.ts": "6e709b6220c012660c45915e54485c90d40e3300064f2e083cbf56b636f9c419", - "https://deno.land/std@0.224.0/semver/increment.ts": "24e10e8d867bdbabd3e31d5e1caa4276329d7afb75cb5e89691e9597fdba7720", - "https://deno.land/std@0.224.0/semver/is_range.ts": "00083508729b878ba33fa919cb670d533b1e370798cced3d1e5b2068c5176fb6", - "https://deno.land/std@0.224.0/semver/is_semver.ts": "dc9c36d7a61cfe19749bce2b97d7fb808a66f7f40a2ae9ff1ee6cdc774ecff67", - "https://deno.land/std@0.224.0/semver/less_or_equal.ts": "7f2f07e2844aa8de020b265674e19e94003d00b9cf8d52bc2537007faca06627", - "https://deno.land/std@0.224.0/semver/less_than.ts": "890eb36e6294d245934a33dbe6818164c4ec6fddf3aa585a590031393f781719", - "https://deno.land/std@0.224.0/semver/less_than_range.ts": "4fc346b8151c8b5ad29da7d898ef4a80b84091c8181842d04e6058d319fcf90f", - "https://deno.land/std@0.224.0/semver/max_satisfying.ts": "3d402be276171f677b0eb2d02b9b6b9ddb170f0d52bce545c4839175e2fd0dfc", - "https://deno.land/std@0.224.0/semver/min_satisfying.ts": "f7d7d2d3cb4fa333c29f92e383dda7347ea803d0af777c23c32b4c8132be8fc0", - "https://deno.land/std@0.224.0/semver/mod.ts": "73ba48a686ac3a5df6508f518ecf97a64df1db438ff130a23bbed3cee1f567a8", - "https://deno.land/std@0.224.0/semver/not_equals.ts": "4d16649686e95c7c9bd6631c854e458d81f8c2e53f1122f0e39798239893b3b4", - "https://deno.land/std@0.224.0/semver/parse.ts": "94c09f3486643853e7438e64f2c6741462fbeb84cf141ad5bfe88b73ec4cb0f3", - "https://deno.land/std@0.224.0/semver/parse_range.ts": "f48ca42b59988d9274225b1f93c39d84005e810bb858faf564f48c0ad8431fa7", - "https://deno.land/std@0.224.0/semver/range_intersects.ts": "bfcdff2731a2ceda85f1a189ccb5909c764be3baa735f9591b319d7e0fc6b711", - "https://deno.land/std@0.224.0/semver/range_max.ts": "67a56c8851da984dd314456f834eff8cf3814a090270554464ab62bf1f026c3d", - "https://deno.land/std@0.224.0/semver/range_min.ts": "d961ba26d8f01a79c8877cb48f9f566778947fc1df0e2bdfa3b31c7dd39f7448", - "https://deno.land/std@0.224.0/semver/satisfies.ts": "8c163ca35cb05d0384bcef6b8dd2842f15b39a375d126e10c2fbec6274a215cf", - "https://deno.land/std@0.224.0/semver/test_range.ts": "e8f46ed1a11817ec9ddf691e347a1b03f8096d12e13fa5dabfafa6e459fc7799", - "https://deno.land/std@0.224.0/semver/try_parse.ts": "043204f1235243c3d02b66ffca2c37dc2941e417dbccaf6c3a15b476a33f0e24", - "https://deno.land/std@0.224.0/semver/try_parse_range.ts": "cf1e2d489bbe9ed6185de551acdf708e23e0e1bc4be0958052dfef178f763eee", - "https://deno.land/std@0.224.0/semver/types.ts": "9286e72b160e25856608f4bc5f08f8f5ccba54e6cdfc9aba8adee68a355c4b36", - "https://deno.land/std@0.224.0/streams/_common.ts": "948735ef6d140cd6916dca861197b88fc57db52c2f923c392b7a14033d8fed4b", - "https://deno.land/std@0.224.0/streams/buffer.ts": "e012de72a53ad17c56512488e9afb6f4b6ed046b32fc1415ae7a4e6fc0efce38", - "https://deno.land/std@0.224.0/streams/byte_slice_stream.ts": "5bbdcadb118390affa9b3d0a0f73ef8e83754f59bb89df349add669dd9369713", - "https://deno.land/std@0.224.0/streams/delimiter_stream.ts": "4e4050740ff27a8824defa6c96126229ef9d794c4ace4ef9cabb10b5ad4a5d14", - "https://deno.land/std@0.224.0/streams/early_zip_readable_streams.ts": "21f5cf6dd36381c6a50c31a7727b5bd219f6382bbb7a413418595c3e466c4d14", - "https://deno.land/std@0.224.0/streams/iterate_reader.ts": "a8e698d16373d49821172f90ec7ac011ef1aae7a4036ae4bace284ff99e2bc92", - "https://deno.land/std@0.224.0/streams/limited_bytes_transform_stream.ts": "b22a45a337374e863c4eb1867ec6b8ad3e68620a6c52fe837746060ea610e6f1", - "https://deno.land/std@0.224.0/streams/limited_transform_stream.ts": "4c47da5ca38a30fa9f33b0f1a61d4548e7f52a9a58c294b0f430f680e44cc543", - "https://deno.land/std@0.224.0/streams/merge_readable_streams.ts": "73eed8ff54c9111b8b974b11a5a11c1ed0b7800e0157c39277ccac3ed14721e2", - "https://deno.land/std@0.224.0/streams/mod.ts": "d56624832b9649b680c74ab9c77e746e8be81ae1a24756cc04623e25a0d43ce9", - "https://deno.land/std@0.224.0/streams/readable_stream_from_reader.ts": "64943452485bcba48e203fa8ae61c195aed9ab8b2a178e2fc6a383f761ce010a", - "https://deno.land/std@0.224.0/streams/reader_from_iterable.ts": "e7b064142b2a97bb562d958c2e4b4d129e923e9c9f2f6e003a4e16cbdcd62570", - "https://deno.land/std@0.224.0/streams/reader_from_stream_reader.ts": "b3519118ed2a32e3fb6201a4c257d5c4e58c38b5918bdc505a45fccbfa0a53f9", - "https://deno.land/std@0.224.0/streams/text_delimiter_stream.ts": "94dfc900204e306496c1b58c80473db57b6097afdcb8ea9eaff453a193a659f1", - "https://deno.land/std@0.224.0/streams/text_line_stream.ts": "21f33d3922e019ec1a1676474beb543929cb564ec99b69cd2654e029e0f45bd5", - "https://deno.land/std@0.224.0/streams/to_array_buffer.ts": "1a9c07c4a396ce557ab205c44415815ab13b614fed94a12f62b80f8e650c726d", - "https://deno.land/std@0.224.0/streams/to_blob.ts": "bf5daaae50fa8f57e0c8bfd7474ebac16ac09e130e3d01ef2947ae5153912b4a", - "https://deno.land/std@0.224.0/streams/to_json.ts": "b6a908d0da7cd30956e5fbbfa7460747e50b8f307d1041282ed6fe9070d579ee", - "https://deno.land/std@0.224.0/streams/to_text.ts": "6f93593bdfc2cea5cca39755ea5caf0d4092580c0a713dfe04a1e85c60df331f", - "https://deno.land/std@0.224.0/streams/to_transform_stream.ts": "4c4836455ef89bab9ece55975ee3a819f07d3d8b0e43101ec7f4ed033c8a2b61", - "https://deno.land/std@0.224.0/streams/writable_stream_from_writer.ts": "527fc1b136fc53a9f0b32641f04a4522c72617fa7ca3778d27ed064f9cd98932", - "https://deno.land/std@0.224.0/streams/writer_from_stream_writer.ts": "22cba4e5162fc443c7e5ef62f2054674cd6a20f5d7519a62db8d201496463931", - "https://deno.land/std@0.224.0/streams/zip_readable_streams.ts": "53eb10d7557539b489bd858907aab6dd28247f074b3446573801de3150cb932e", - "https://deno.land/std@0.224.0/testing/snapshot.ts": "35ca1c8e8bfb98d7b7e794f1b7be8d992483fcff572540e41396f22a5bddb944", - "https://deno.land/std@0.224.0/url/_strip.ts": "928fe9af16d7c5bf24816d1e90d84bfe702f3e059f9d63509b5a37087e947800", - "https://deno.land/std@0.224.0/url/basename.ts": "068260fa6da5fae5236d94beb90d4631e555e6c169d5b6dbe2142fd449c97c87", - "https://deno.land/std@0.224.0/url/dirname.ts": "e60c42ab7fd6c84074fbc4fe222a14822381a6a8539c42dbfdc1f991d3d62951", - "https://deno.land/std@0.224.0/url/extname.ts": "3c93dffcc86cab6af0473b083499849eee504dbe9d28242bc7cc8c3b526e3dbb", - "https://deno.land/std@0.224.0/url/join.ts": "ea92b72fcbc84cf7662cdba305f094faa05c2e2097bf0d21b983b148c877d384", - "https://deno.land/std@0.224.0/url/mod.ts": "bccc4e7ffe062e08e7914330b31b3e53b65d788f3702074a9ae5107e5cb6f11f", - "https://deno.land/std@0.224.0/url/normalize.ts": "4f5a06f85fca75b8bbcbdf320807da5ecf617d7fccef1c8f87a8014d2fdca9cb", - "https://deno.land/std@0.224.0/uuid/_common.ts": "05c787c5735776c4e48e30294878332c39cb7738f50b209df4eb9f2b0facce4d", - "https://deno.land/std@0.224.0/uuid/constants.ts": "eb6c96871e968adf3355507d7ae79adce71525fd6c1ca55c51d32ace0196d64e", - "https://deno.land/std@0.224.0/uuid/mod.ts": "cefc8e2f77d9e493739c8dc4ec141b12b855414bf757e778bf9b00f783506b76", - "https://deno.land/std@0.224.0/uuid/v1.ts": "cc45e7eb1d463d7d38b21a3c6e4de55ff98598ca442309321575fe841b323a54", - "https://deno.land/std@0.224.0/uuid/v3.ts": "689f2d64a9460a75877a2eed94662d9cb31bedb890d72fce0d161ef47d66cc26", - "https://deno.land/std@0.224.0/uuid/v4.ts": "1319a2eeff7259adda416ec5f7997ded80d3165ef0787012793fc8621c18c493", - "https://deno.land/std@0.224.0/uuid/v5.ts": "75f76d9e53583572fe3d4893168530986222d439b1545b56d4493c6d5d1cd81d", - "https://deno.land/std@0.224.0/yaml/_dumper/dumper.ts": "08b595b40841a2e1c75303f5096392323b6baf8e9662430a91e3b36fbe175fe9", - "https://deno.land/std@0.224.0/yaml/_dumper/dumper_state.ts": "9e29f700ea876ed230b43f11fa006fcb1a62eedc1e27d32baaeaf3210f19f1e7", - "https://deno.land/std@0.224.0/yaml/_error.ts": "f38cdebdb69cde16903d9aa2f3b8a3dd9d13e5f7f3570bf662bfaca69fef669e", - "https://deno.land/std@0.224.0/yaml/_loader/loader.ts": "bf9e8a99770b59bc887b43ebccea108cbe9146ae32d91f7ce558d62c946d3fe3", - "https://deno.land/std@0.224.0/yaml/_loader/loader_state.ts": "ee216de6040551940b85473c3185fdb7a6f3030b77153f87a6b7f63f82e489ea", - "https://deno.land/std@0.224.0/yaml/_mark.ts": "61097a614857fcebf7b2ecad057916d74c90cd160117a33c9e74bac60457410a", - "https://deno.land/std@0.224.0/yaml/_state.ts": "f3b1c1fd11860302f1f33e35e9ce089bf069d4943e8d67516cd6bedbba058c13", - "https://deno.land/std@0.224.0/yaml/_type/binary.ts": "f1a6e1d83dcc52b21cc3639cd98be44051cfc54065cc4f2a42065bce07ebc07d", - "https://deno.land/std@0.224.0/yaml/_type/bool.ts": "121743b23ba82a27ad6a3ec6298c7f5b0908f90e52707f8644a91f7ad51ed2ef", - "https://deno.land/std@0.224.0/yaml/_type/float.ts": "c5ed84b0aec1ec5dc05f6abfaaff672e8890d4d44a42120b4445c9754fca4eba", - "https://deno.land/std@0.224.0/yaml/_type/function.ts": "bbf705058942bf3370604b37eb77a10aadd72f986c237c9f69b43378a42202c1", - "https://deno.land/std@0.224.0/yaml/_type/int.ts": "c2dc88438a60fccc8d2226042bd18b9967753adaf6bd145feb8b99d567e432ce", - "https://deno.land/std@0.224.0/yaml/_type/map.ts": "ae2acb1cb837fb8e96c75c98611cfd45af847d0114ab5336333c318e7d4b12f4", - "https://deno.land/std@0.224.0/yaml/_type/merge.ts": "ad0d971f91d2fb9f4ab3eba0c837eae357b1804d6b798adc99dc917bc5306b11", - "https://deno.land/std@0.224.0/yaml/_type/mod.ts": "e8929d7b1c969a74f76338d4eb380ef8c4a26cd6441117d521f076b766e9c265", - "https://deno.land/std@0.224.0/yaml/_type/nil.ts": "cbe4387d02d5933322c21b25d8955c5e6228c492e391a6fb82dcf4f498cc421c", - "https://deno.land/std@0.224.0/yaml/_type/omap.ts": "cda915105ab22ba9e1d6317adacee8eec2d8ddaf864cc2f814e3e476946e72c6", - "https://deno.land/std@0.224.0/yaml/_type/pairs.ts": "dd39bb44c1b9abaf6172c63f73350475933151f07e05253b81f7860c9b507177", - "https://deno.land/std@0.224.0/yaml/_type/regexp.ts": "e49eb9e1c9356fd142bc15f7f323820d411fcc537b5ba3896df9a8b812d270a4", - "https://deno.land/std@0.224.0/yaml/_type/seq.ts": "2deffc7f970869bc01a1541b4961d076329a1c2b30b95e07918f3132db7c3fe2", - "https://deno.land/std@0.224.0/yaml/_type/set.ts": "be8a9e7237a7ffc92dfbe7f5e552d84b7eeba60f3f73cc77fc3c59d3506c74ea", - "https://deno.land/std@0.224.0/yaml/_type/str.ts": "88f0a1ba12295520cd57e96cd78d53aa0787d53c7a1c506155f418c496c2f550", - "https://deno.land/std@0.224.0/yaml/_type/timestamp.ts": "277a41a40fb93c3b2b3f5c373bf11b0b7856cc6a7b919e8ea130755e4029edc5", - "https://deno.land/std@0.224.0/yaml/_type/undefined.ts": "9d215953c65740f1764e0bdca021007573473f0c49e087f00d9ff02817ecfc97", - "https://deno.land/std@0.224.0/yaml/_utils.ts": "91bbe28b5e7000b9594e40ff5353f8fe7a7ba914eec917e1202cbaf5ac931c58", - "https://deno.land/std@0.224.0/yaml/mod.ts": "54e9bfad77c8cd58f49b65f4d568045ff08989ed36318a2ca733a43cb6f1bc00", - "https://deno.land/std@0.224.0/yaml/parse.ts": "f45278d9ebccb789af4eceeffa5c291e194bcf1fa9aab1b34ff52c2bd4a9d886", - "https://deno.land/std@0.224.0/yaml/schema.ts": "a0f7956d997852b5d1c6564bd73eb7352175cfba439707ac819b65b5a2ec173a", - "https://deno.land/std@0.224.0/yaml/schema/core.ts": "0a37c07710e3df4eb4edc02f4edf623bf8df5af72b34d8a7c0229d0bac2a7043", - "https://deno.land/std@0.224.0/yaml/schema/default.ts": "1367fd30420c7071ecc67e5b470838474e8259aaf64460f314af4b6bd8da497c", - "https://deno.land/std@0.224.0/yaml/schema/extended.ts": "248180c22697f37ed173057eae62ce4879865bb59f30c4908d698bed5edcc7c5", - "https://deno.land/std@0.224.0/yaml/schema/failsafe.ts": "0ac1cae5b86d8fe2c83ad0a17f8adc33106a452b7139f84e4b0bfaee2206730e", - "https://deno.land/std@0.224.0/yaml/schema/json.ts": "a0228a0c0bad7dece17ab848774fcadc2ccb5e51775c2d58d21d486917ba3ba1", - "https://deno.land/std@0.224.0/yaml/schema/mod.ts": "0e1558a4823834f106675e48ddc15338e04f6f18469d1a7d6b3f0e1ab06abcb2", - "https://deno.land/std@0.224.0/yaml/stringify.ts": "f0ed4e419cb40c807cf79ae4039d6cdf492be9a947121fff4d4b7cd1d4738bae", - "https://deno.land/std@0.224.0/yaml/type.ts": "708dde5f20b01cc1096489b7155b6af79a217d585afb841128e78c3c2391eb5c", "https://deno.land/x/cliffy@v1.0.0-rc.4/command/_argument_types.ts": "ab269dacea2030f865a07c2a1e953ec437a64419a05bad1f1ddaab3f99752ead", "https://deno.land/x/cliffy@v1.0.0-rc.4/command/_errors.ts": "d78e1b4d69d84b8b476b5f3c0b028e3906d48f21b8f1ca1d36d5abe9ccfe48bc", "https://deno.land/x/cliffy@v1.0.0-rc.4/command/_spread.ts": "0cc6eb70a6df97b5d7d26008822d39f3e8a1232ee0a27f395aa19e68de738245", @@ -1581,14 +763,6 @@ "https://deno.land/x/cliffy@v1.0.0-rc.4/table/table.ts": "298671e72e61f1ab18b42ae36643181993f79e29b39dc411fdc6ffd53aa04684", "https://deno.land/x/code_block_writer@12.0.0/mod.ts": "2c3448060e47c9d08604c8f40dee34343f553f33edcdfebbf648442be33205e5", "https://deno.land/x/code_block_writer@12.0.0/utils/string_utils.ts": "60cb4ec8bd335bf241ef785ccec51e809d576ff8e8d29da43d2273b69ce2a6ff", - "https://deno.land/x/color_util@1.0.1/colors/cmykcolor.ts": "f717cee02bdec255c7c2879b55033da7547d46c1fbb8ada7980d49bd2c1554ee", - "https://deno.land/x/color_util@1.0.1/colors/hexcolor.ts": "3b75112b8d693f157d3e6367f9ec44779f3ccef7c7b5f8e0859897f51eb05c4f", - "https://deno.land/x/color_util@1.0.1/colors/hsbcolor.ts": "bdfe171f7e6de43625ea4a33bce2b25dec410fa67f34af71821a6c73f4e23351", - "https://deno.land/x/color_util@1.0.1/colors/hslcolor.ts": "2c61e987dc49822444adbd62249e33cc6fd6a0a33a20fcb287240cf96e6ef41f", - "https://deno.land/x/color_util@1.0.1/colors/hwbcolor.ts": "d1e9558d89c6fbd1b6a7f9bb86fc9c93e114a8e0eb614aee83cbc8201a67f15a", - "https://deno.land/x/color_util@1.0.1/colors/mod.ts": "31099d332b123efc9d3ae0016173daba7cb8242440bf198851a34b339c69a555", - "https://deno.land/x/color_util@1.0.1/colors/rgbcolor.ts": "384ceac5fd708cb6515df2a371de6bf1eea58376003c7015d82819c7809a1b26", - "https://deno.land/x/color_util@1.0.1/mod.ts": "d79c71f1c6583c56cdf56963d020928fdef05d8060d59601fe4f46f7ee1488fd", "https://deno.land/x/compress@v0.4.5/deps.ts": "096395daebc7ed8a18f0484e4ffcc3a7f70e50946735f7df9611a7fcfd8272cc", "https://deno.land/x/convert_bytes@v2.1.1/mod.ts": "036bd2d9519c8ad44bd5a15d4e42123dc16843f793b3c81ca1fca905b21dd7df", "https://deno.land/x/convert_bytes@v2.1.1/src/unit.ts": "ebfa749b09d2f6cf16a3a6cae5ab6042ae66667b9780071cbb933fcbdcff9731", @@ -1639,9 +813,6 @@ "https://deno.land/x/dnt@0.38.1/lib/utils.ts": "878b7ac7003a10c16e6061aa49dbef9b42bd43174853ebffc9b67ea47eeb11d8", "https://deno.land/x/dnt@0.38.1/mod.ts": "b13349fe77847cf58e26b40bcd58797a8cec5d71b31a1ca567071329c8489de1", "https://deno.land/x/dnt@0.38.1/transform.ts": "f68743a14cf9bf53bfc9c81073871d69d447a7f9e3453e0447ca2fb78926bb1d", - "https://deno.land/x/download@v1.0.1/download.ts": "b42f26df5f5816573ad57c8877cf8755947a0795fa51036e5c123c84ff08022b", - "https://deno.land/x/download@v1.0.1/mod.ts": "5449293b77155a9371b67e484d327ba3f9a6f56fc9ab733f19b045a4a2369fec", - "https://deno.land/x/download@v1.0.1/types.ts": "9bbae77a97fcc13a5abddceb2048ab76f3b2fccf71ed99a542dbc225c27d9329", "https://deno.land/x/foras@v2.1.4/src/deno/mod.ts": "c350ea5f32938e6dcb694df3761615f316d730dafc57440e9afd5f36f8e309fd", "https://deno.land/x/foras@v2.1.4/src/deno/mods/mod.ts": "cc099bbce378f3cdaa94303e8aff2611e207442e5ac2d5161aba636bb4a95b46", "https://deno.land/x/foras@v2.1.4/wasm/pkg/foras.js": "06f8875b456918b9671d52133f64f3047f1c95540feda87fdd4a55ba3d30091d", @@ -1651,32 +822,6 @@ "https://deno.land/x/jszip@0.11.0/mod.ts": "5661ddc18e9ac9c07e3c5d2483bc912a7022b6af0d784bb7b05035973e640ba1", "https://deno.land/x/jszip@0.11.0/types.ts": "1528d1279fbb64dd118c371331c641a3a5eff2b594336fb38a7659cf4c53b2d1", "https://deno.land/x/levenshtein@v1.0.1/mod.ts": "6b632d4a9bb11ba6d5d02a770c7fc9b0a4125f30bd9c668632ff85e7f05ff4f6", - "https://deno.land/x/math@v1.1.0/abs.ts": "d64fe603ae4bb57037f06a1a5004285b99ed016dab6bfcded07c8155efce24b7", - "https://deno.land/x/math@v1.1.0/big/mod.ts": "ba561f56a24ecc9f03542693ed0c81166ed0c921f8017d220ec70c963e935509", - "https://deno.land/x/math@v1.1.0/div.ts": "5dda45b8bb5c1f778f2cfb28cbee648c5c7aa818f915acce336651fd13994f07", - "https://deno.land/x/math@v1.1.0/eq.ts": "145727b71b5bdd993c5d44fd9c9089419dac508527ef3812c590aabcd943236c", - "https://deno.land/x/math@v1.1.0/gt.ts": "6e493f3cc2ecd9be244bb67dde28b1d5ec4d4218747fc9efd6f551a52093aaf7", - "https://deno.land/x/math@v1.1.0/gte.ts": "4eddc58c2b79315974c328d92b512e133796d785e1f570f9e8d232e32d620e66", - "https://deno.land/x/math@v1.1.0/lt.ts": "999e4d118c9a5e8e653bd34a32ef532634a68e0dd4ba6a200ad35cc7fd9ceb31", - "https://deno.land/x/math@v1.1.0/lte.ts": "637c12db7307d33024054d9671f4f932a42dbaad4c60559c47be17c94f39eb1e", - "https://deno.land/x/math@v1.1.0/matrix/eye.ts": "b7b060fc60a6f4ae4e3caa82e5a094cd622bd8519f67ad81e305b197a9d19d1c", - "https://deno.land/x/math@v1.1.0/matrix/identity.ts": "00246e8133f2fac4a1481af7390907cc4cf3e8415a00d29a1e0beb47bdd81074", - "https://deno.land/x/math@v1.1.0/matrix/matrix.ts": "2b80cd4fb8aa0ab9eca31cf6eb1037a2885f37ae7f84e1b7f050fa831089e937", - "https://deno.land/x/math@v1.1.0/matrix/mod.ts": "123212ccd86007864c3400ca3deaa998c7e9453b77538094d06edc1add50f199", - "https://deno.land/x/math@v1.1.0/max.ts": "bf646a3553e8800de240fad977eabbef365c388d33f79ef6fb5f015d8d7ff104", - "https://deno.land/x/math@v1.1.0/min.ts": "9a617f3b2c76045f9169324787399cb709eba81fae8dbd4ff540336ea82eb470", - "https://deno.land/x/math@v1.1.0/minus.ts": "e64bfe637c5d5c790f40dd6681b206dc9996303daacb6cd1533e7dc1969acda6", - "https://deno.land/x/math@v1.1.0/mod.ts": "85f6d29ba8faaae2fb24c4ac3f5772474f1452ee27068714521a7c9aabfd1ee6", - "https://deno.land/x/math@v1.1.0/modulo.ts": "c83ebdc4f4c9ddabf64ade595802502f2333220b1f59010457f4064e4bb94e6c", - "https://deno.land/x/math@v1.1.0/plus.ts": "8d500d86c8f27acc9a754f636c530abe17bdb8f240aea2ece4b29e86ca121f40", - "https://deno.land/x/math@v1.1.0/pow.ts": "47120d27e42fce01572340e724de26039beef6daae25133029af6df6fa7dec4c", - "https://deno.land/x/math@v1.1.0/round.ts": "1b54a5d440f9a0d44d4ff8ba000f59b4895c37a1b2c2aaf5ec59a5fe8081e308", - "https://deno.land/x/math@v1.1.0/sqrt.ts": "50d94b4d1d9077f887eec904d73cf5439c1ef4b724d1949414ba5ec7fb9343b3", - "https://deno.land/x/math@v1.1.0/sum.ts": "6a0fddf3b50a965c79d96edc7fe2e146d4a95915fce90928fb4068abe9d8f059", - "https://deno.land/x/math@v1.1.0/times.ts": "7359e88b8456fc121bdb800543712d637e0ca260777aa1bb0d43724fe576222e", - "https://deno.land/x/math@v1.1.0/to_exponential.ts": "9038215c1cfd430acb835ca5e9c967f1a9da8d0658f7eeab8852662b201596d4", - "https://deno.land/x/math@v1.1.0/to_fixed.ts": "3702a47b14950a9d37f13147e1340b5a3f5f07183d480af59fcdf9d10bb6084e", - "https://deno.land/x/math@v1.1.0/to_precision.ts": "b7fb70b79649c9fd48f3747d285a5086e457487986c0f395a8275302e13a9b5e", "https://deno.land/x/monads@v0.5.10/either/either.ts": "89f539c7d50bd0ee8d9b902f37ef16687c19b62cc9dd23454029c97fbfc15cc6", "https://deno.land/x/monads@v0.5.10/index.ts": "f0e90b8c1dd767efca137d682ac1a19b2dbae4d1990b8a79a40b4e054c69b3d6", "https://deno.land/x/monads@v0.5.10/mod.ts": "f1b16a34d47e58fdf9f1f54c49d2fe6df67b3d2e077e21638f25fbe080eee6cf", @@ -1693,8 +838,6 @@ "https://deno.land/x/oauth2_client@v1.0.2/src/refresh_token_grant.ts": "22cb1598e48fb037b4111a446573f7b48a3b361b58de58af17ba097221b12b54", "https://deno.land/x/oauth2_client@v1.0.2/src/resource_owner_password_credentials.ts": "bd3df99d32eeebffb411c4a2d3c3d057395515fb41690a8d91460dd74b9bf466", "https://deno.land/x/oauth2_client@v1.0.2/src/types.ts": "3327c2e81bc483e91843fb103595dd304393c3ac2a530d1c89200b6a5cf75e13", - "https://deno.land/x/outdent@v0.8.0/mod.ts": "72630e680dcc36d5ae556fbff6900b12706c81a6fd592345fc98bcc0878fb3ca", - "https://deno.land/x/outdent@v0.8.0/src/index.ts": "6dc3df4108d5d6fedcdb974844d321037ca81eaaa16be6073235ff3268841a22", "https://deno.land/x/redis@v0.32.1/backoff.ts": "33e4a6e245f8743fbae0ce583993a671a3ac2ecee433a3e7f0bd77b5dd541d84", "https://deno.land/x/redis@v0.32.1/command.ts": "aa2312d4093ec7c72d61d32a71d3d13a33cc6302ca78c8f026e1994e76541e6e", "https://deno.land/x/redis@v0.32.1/connection.ts": "45a3328ca49c021c9192c48510dba9808b29de4d8e65e424d7a6a1e2d782fd74", @@ -1726,7 +869,6 @@ "https://deno.land/x/ts_morph@18.0.0/common/typescript.js": "d5c598b6a2db2202d0428fca5fd79fc9a301a71880831a805d778797d2413c59", "https://deno.land/x/wasmbuild@0.15.0/cache.ts": "89eea5f3ce6035a1164b3e655c95f21300498920575ade23161421f5b01967f4", "https://deno.land/x/wasmbuild@0.15.0/loader.ts": "d98d195a715f823151cbc8baa3f32127337628379a02d9eb2a3c5902dbccfc02", - "https://deno.land/x/xhr@0.3.0/mod.ts": "094aacd627fd9635cd942053bf8032b5223b909858fa9dc8ffa583752ff63b20", "https://deno.land/x/zod@v3.22.2/ZodError.ts": "4de18ff525e75a0315f2c12066b77b5c2ae18c7c15ef7df7e165d63536fdf2ea", "https://deno.land/x/zod@v3.22.2/errors.ts": "5285922d2be9700cc0c70c95e4858952b07ae193aa0224be3cbd5cd5567eabef", "https://deno.land/x/zod@v3.22.2/external.ts": "a6cfbd61e9e097d5f42f8a7ed6f92f93f51ff927d29c9fbaec04f03cbce130fe", @@ -1740,231 +882,10 @@ "https://deno.land/x/zod@v3.22.2/locales/en.ts": "a7a25cd23563ccb5e0eed214d9b31846305ddbcdb9c5c8f508b108943366ab4c", "https://deno.land/x/zod@v3.22.2/mod.ts": "64e55237cb4410e17d968cd08975566059f27638ebb0b86048031b987ba251c4", "https://deno.land/x/zod@v3.22.2/types.ts": "18cbe3d895f42977c43fa9411da214b06d0d682cf2f4c9dd26cc8c3737740d40", - "https://esm.sh/@aws-sdk/client-s3@3.335.0?pin=v131": "0633878ddbd4e8d10cb685fedd109df3480c2536e72702c62f7e3b010ab912fc", - "https://esm.sh/@aws-sdk/client-s3@3.626.0": "f10ef6e0231103f0be679550cf7f5ae8ca7d238ac3fa01e30cc14daf1d6d40e3", - "https://esm.sh/@aws-sdk/client-s3@3.626.0?pin=v131": "5358c7095e0efcd0da40c285f6b83eca439a16ae6e9b9724607d3f879e267748", - "https://esm.sh/@aws-sdk/client-s3@3.626.0?pin=v135": "f10ef6e0231103f0be679550cf7f5ae8ca7d238ac3fa01e30cc14daf1d6d40e3", - "https://esm.sh/@aws-sdk/lib-storage@3.335.0": "a125e7ecb95a59708687ab532bcfbc53c725958ea6332e646f8296f074f3bbdf", - "https://esm.sh/@aws-sdk/lib-storage@3.626.0": "ff6d1c100467d3c4ff6515cb4d0b36fceef2a944ff8474412ff248ceb58ce7e6", - "https://esm.sh/@aws-sdk/lib-storage@3.626.0?pin=v131": "dec8d51517e0ef126f5ceb37bfce115b9354a3274fd49af8fc35be40c4c5e5e7", - "https://esm.sh/@aws-sdk/lib-storage@3.626.0?pin=v135": "ff6d1c100467d3c4ff6515cb4d0b36fceef2a944ff8474412ff248ceb58ce7e6", - "https://esm.sh/@aws-sdk/s3-request-presigner@3.335.0?pin=v131": "f32c826ef4de3839aca3e48ed856426019a2f16cc787e1c09d2214d24dd448cb", - "https://esm.sh/@aws-sdk/s3-request-presigner@3.645.0": "03cf57cb951aece8cb946fb31f910b5d96fcb54aadc15973cee8fa079a9783a1", - "https://esm.sh/@aws-sdk/s3-request-presigner@3.645.0?pin=v135": "03cf57cb951aece8cb946fb31f910b5d96fcb54aadc15973cee8fa079a9783a1", - "https://esm.sh/ajv@8.12.0?pin=v131": "f8dc3d8e4d6d69f48381749333cc388e54177f66601125b43246c3e43d3145d6", + "https://esm.sh/@aws-sdk/client-s3@3.700.0?pin=v135": "c4e66ce2669ce810cd7f060e52e9702a37f02fc0912f69b1dc020a29b4d6e70f", + "https://esm.sh/@aws-sdk/lib-storage@3.700.0?pin=v135": "20499413966c9d494f4bff63361359e095f174c4a41ee79da3a0fbeb62dc947f", + "https://esm.sh/@aws-sdk/s3-request-presigner@3.700.0?pin=v135": "806a2f5f0c65996434f031fbeb3983ee271239e9b22c70cf3624b79b2667cdce", "https://esm.sh/jszip@3.7.1": "f3872a819b015715edb05f81d973b5cd05d3d213d8eb28293ca5471fe7a71773", - "https://esm.sh/v131/@aws-crypto/crc32@3.0.0/denonext/crc32.mjs": "a7b2905678c9acb4294fedf6f75c0d01c2a7c4a031acea1c816fd22b1372ad4a", - "https://esm.sh/v131/@aws-crypto/crc32@5.2.0/denonext/crc32.mjs": "6c784ab21e078644f5f87f9a7a3d2de78e7405b1b72d58cba70b41d93c270cd9", - "https://esm.sh/v131/@aws-crypto/crc32c@3.0.0/denonext/crc32c.mjs": "b5b36bedb1a00f79183720f5d4c54cb672e8f9877ca820550bb333f778ce912e", - "https://esm.sh/v131/@aws-crypto/crc32c@5.2.0/denonext/crc32c.mjs": "09d65c8a62b09a20705161690e306c668c7d82c357de38ad75b8459a96e9f37c", - "https://esm.sh/v131/@aws-crypto/ie11-detection@3.0.0/denonext/ie11-detection.mjs": "7cbccafb093d6c2c1a5b9f3e8535533220cc612dfb2bf228ea793e69376f8a0f", - "https://esm.sh/v131/@aws-crypto/sha1-browser@3.0.0/denonext/sha1-browser.mjs": "8d00cbfad40fad9737dde1e190e26bd6c0f7925c1aff7c2c1685b825d817e57c", - "https://esm.sh/v131/@aws-crypto/sha1-browser@5.2.0/denonext/sha1-browser.mjs": "72270e4ffed6aba52b9ec9910e83532265a2617353f7d14a2469994689c7c182", - "https://esm.sh/v131/@aws-crypto/sha256-browser@3.0.0/denonext/sha256-browser.mjs": "55e8c7cf121d71c0001a16e8c6eae414c626f37bc894c4f43cd5796c084caf00", - "https://esm.sh/v131/@aws-crypto/sha256-browser@5.2.0/denonext/sha256-browser.mjs": "e2797579514b29e7dcd3fdc9b7935843f96f63ba0ccf6105d5368dae5451edfc", - "https://esm.sh/v131/@aws-crypto/sha256-js@3.0.0/denonext/sha256-js.mjs": "ba78960638c2969e03f6f69175ab51e0aa1167196a32f4baa2d9a3be54c7be2a", - "https://esm.sh/v131/@aws-crypto/sha256-js@5.2.0/denonext/sha256-js.mjs": "fceb989101cb09a3bbca227fcae1802e38e07e28f34a6a0f76a4e4e3f59ad699", - "https://esm.sh/v131/@aws-crypto/supports-web-crypto@3.0.0/denonext/supports-web-crypto.mjs": "361a53acba49a257feed671c9636779f9884723d590a22db56d7a00731dc435c", - "https://esm.sh/v131/@aws-crypto/supports-web-crypto@5.2.0/denonext/supports-web-crypto.mjs": "410b781e687a273ce0055e9c73f8d3f2d5152ec9eaea27b7a9266f528ef58e57", - "https://esm.sh/v131/@aws-crypto/util@3.0.0/denonext/util.mjs": "2f9527b5030c246599f883288161258583d6edb7eec6567119a9e48b0166b460", - "https://esm.sh/v131/@aws-crypto/util@5.2.0/denonext/util.mjs": "264f80066b468ffaee345665f62e584f4239727f6d894e6c5b20da372182068f", - "https://esm.sh/v131/@aws-sdk/chunked-blob-reader@3.310.0/denonext/chunked-blob-reader.mjs": "4401b1a6c954c398db355225a6d937e9403192f9e79310be7ff22c2a33e05f14", - "https://esm.sh/v131/@aws-sdk/client-s3@3.335.0/denonext/client-s3.mjs": "2990cd07204aac8c6c4046f19d5b33c71d37e36a9335ef7346025e8b2f0e1d9c", - "https://esm.sh/v131/@aws-sdk/client-s3@3.626.0/denonext/client-s3.mjs": "a0fb1f588c5ca1e4e132fb69aa39f5fee8d661b1ca854c7eaf91de4158cd19b4", - "https://esm.sh/v131/@aws-sdk/client-s3@3.651.1/denonext/client-s3.mjs": "dc49b93d54ca1c42450ff235e0911b2c0dc4646034693e1a8c0ac3c06167ccf8", - "https://esm.sh/v131/@aws-sdk/config-resolver@3.329.0/denonext/config-resolver.mjs": "00b134417c639e27b2107d74ebf91ed93c603b91733f1c4ada4cd8cf3da3527b", - "https://esm.sh/v131/@aws-sdk/core@3.624.0/denonext/client.js": "0e16e057a670adae67a98862c400f4b1e41ad70c3fa58273f8cf7aa56907972e", - "https://esm.sh/v131/@aws-sdk/core@3.624.0/denonext/core.mjs": "ab4355b11321b423e1a2215a57cf3527db17d75c173d89b822314bf0fdb75e95", - "https://esm.sh/v131/@aws-sdk/core@3.624.0/denonext/httpAuthSchemes.js": "f5497fd01c36c3c88b16397ac926dd5dc143f9a2d6e41f2c20da3d74993412f0", - "https://esm.sh/v131/@aws-sdk/core@3.624.0/denonext/protocols.js": "7e3e84b104bf939bd32f2bd501e81b99579c5b6edae72ad9587c6455328ae498", - "https://esm.sh/v131/@aws-sdk/core@3.651.1/denonext/client.js": "457e4821de42dd616efbf7cb4764b89794aba1a0e5661122de02fe9d125eb0d8", - "https://esm.sh/v131/@aws-sdk/core@3.651.1/denonext/core.mjs": "cf935dca92d7b965e1867b3b87743e0b5998a3b97e1d7730c2888c092bbc2ac2", - "https://esm.sh/v131/@aws-sdk/core@3.651.1/denonext/httpAuthSchemes.js": "ba1822cd8726b829c74e60ff8609aea8525fc5d49001f5c228c162b98bda17c0", - "https://esm.sh/v131/@aws-sdk/core@3.651.1/denonext/protocols.js": "cb88b946241c8bdeab15c7d13f30dd5bd6a72c4d00afa02bc190ded4fa66cc5b", - "https://esm.sh/v131/@aws-sdk/eventstream-codec@3.329.0/denonext/eventstream-codec.mjs": "2671176e614b701e53f3982689898875862be983427d78c69be6aab4b4a4ad53", - "https://esm.sh/v131/@aws-sdk/eventstream-serde-browser@3.329.0/denonext/eventstream-serde-browser.mjs": "40d2cdd4cd67f08266b299b36e5d1741c0a258897c565a9eecd63d3ca1d03c91", - "https://esm.sh/v131/@aws-sdk/eventstream-serde-config-resolver@3.329.0/denonext/eventstream-serde-config-resolver.mjs": "18ade7f876637f79053957e80bb0775c0bc78c357007cfa26a27a86931fc70a6", - "https://esm.sh/v131/@aws-sdk/eventstream-serde-universal@3.329.0/denonext/eventstream-serde-universal.mjs": "6a8fc6bc7d5f0801300340f8ab85ed4b7fbee303359767702791e51ea68e3457", - "https://esm.sh/v131/@aws-sdk/fetch-http-handler@3.329.0/denonext/fetch-http-handler.mjs": "d6d30c1712ac8e300af4fb082e6093a07aa607c50d0db61a7b25126bbff3a794", - "https://esm.sh/v131/@aws-sdk/hash-blob-browser@3.329.0/denonext/hash-blob-browser.mjs": "b34c3fd7f2faf2f60e99834a354d35067602f6a8d479f1a29f2196f0986ae65b", - "https://esm.sh/v131/@aws-sdk/invalid-dependency@3.329.0/denonext/invalid-dependency.mjs": "a2f92f8a138d476805c719a2c03f069460c3b6c7842ca86dc93edcedaa0206cd", - "https://esm.sh/v131/@aws-sdk/is-array-buffer@3.310.0/denonext/is-array-buffer.mjs": "6e439346764944fba7c50cc310a0d7d2242e87aaaf4fc342095422ff766bb9ee", - "https://esm.sh/v131/@aws-sdk/lib-storage@3.626.0/denonext/lib-storage.mjs": "f78fc6bc443aa3d97c42d89a66c6c320f67b3b8372f0be6ae22b6a5da68d3539", - "https://esm.sh/v131/@aws-sdk/md5-js@3.329.0/denonext/md5-js.mjs": "b835157ac7a0bfe2c88a83a2b098fe92b6dfddcc8776b4a315ca238175394a62", - "https://esm.sh/v131/@aws-sdk/middleware-content-length@3.329.0/denonext/middleware-content-length.mjs": "0f170830741c27fbd2c274deb09d5d16545ee899c1be4ab7254a43b103b96bf0", - "https://esm.sh/v131/@aws-sdk/middleware-endpoint@3.329.0/denonext/middleware-endpoint.mjs": "aa77d6acf58e7fb12585b8d0b9d42a6cd188b6046b50dd2fe9002c52abd7014b", - "https://esm.sh/v131/@aws-sdk/middleware-expect-continue@3.329.0/denonext/middleware-expect-continue.mjs": "c8eb9ae0fbb9bd182eb84d0ceb68e8142c951cc6a6e35b2b6d6e27a21048fc80", - "https://esm.sh/v131/@aws-sdk/middleware-expect-continue@3.620.0/denonext/middleware-expect-continue.mjs": "4d8bb5fe6a93e58c02b0fd1e14cd311d2a6954e48c3387b844f7253dbd63a01c", - "https://esm.sh/v131/@aws-sdk/middleware-expect-continue@3.649.0/denonext/middleware-expect-continue.mjs": "55df3fdf7d48a945ef2462a8c9ca93ff91ba605f2038367df5231a7dd21c2079", - "https://esm.sh/v131/@aws-sdk/middleware-flexible-checksums@3.331.0/denonext/middleware-flexible-checksums.mjs": "999978cc064148fe7081eaccadd3bc8ac9b063fb550620a981cf81597d1f01a7", - "https://esm.sh/v131/@aws-sdk/middleware-flexible-checksums@3.620.0/denonext/middleware-flexible-checksums.mjs": "ce17d3f387293da0d3b0090b7760dc5d9efda957936cf6cd4c0f31889aedc0ad", - "https://esm.sh/v131/@aws-sdk/middleware-flexible-checksums@3.651.1/denonext/middleware-flexible-checksums.mjs": "fec9fddea61bc4eff36e94c662548d255a11e32ca6a21f8821fd9e02af42264b", - "https://esm.sh/v131/@aws-sdk/middleware-host-header@3.329.0/denonext/middleware-host-header.mjs": "c0e33ae2c1dd2ad52ce753f5d9035e244fd7780dd15d499422ab2e4c7234e085", - "https://esm.sh/v131/@aws-sdk/middleware-host-header@3.620.0/denonext/middleware-host-header.mjs": "edb5f8c4e7899c02bdfc788ca764c6c14753aafcbcc1d9239a0902e8adb80518", - "https://esm.sh/v131/@aws-sdk/middleware-host-header@3.649.0/denonext/middleware-host-header.mjs": "753af238f274133f202bc7ccb139c9f4e3fdac5f0b94f5f22df6efebce2a2916", - "https://esm.sh/v131/@aws-sdk/middleware-location-constraint@3.329.0/denonext/middleware-location-constraint.mjs": "d58ff62eb0db60c6f3811ddc4f7a0ac48df1f76d2ba430a89fec2b829cd15cf0", - "https://esm.sh/v131/@aws-sdk/middleware-location-constraint@3.609.0/denonext/middleware-location-constraint.mjs": "ba8c934c030e5168ad09260026bae3b5f538eca8c50b528fb3b6e945967b7f36", - "https://esm.sh/v131/@aws-sdk/middleware-location-constraint@3.649.0/denonext/middleware-location-constraint.mjs": "21e3237d4b3f5ab8cf1e48c8d9aa8f78960872e328f9fe387c97b544d9c2e320", - "https://esm.sh/v131/@aws-sdk/middleware-logger@3.329.0/denonext/middleware-logger.mjs": "3edceb18bf204dbc9a0fc4e9801f8aea23b5652dbb920fd05d3a70b37ff83d09", - "https://esm.sh/v131/@aws-sdk/middleware-logger@3.609.0/denonext/middleware-logger.mjs": "2105c33b2e62ed2567b20a71438f8f1409220f7bd0426910b0bccf5b84316b84", - "https://esm.sh/v131/@aws-sdk/middleware-logger@3.649.0/denonext/middleware-logger.mjs": "36f7fdcfc98cb5c7146e33f8a7e71c7907082888b30d5c3efb1a4310470f0590", - "https://esm.sh/v131/@aws-sdk/middleware-recursion-detection@3.329.0/denonext/middleware-recursion-detection.mjs": "1998b36c65ed29e70cafc9b7dbad528a345ff7078d3e73e7ae9b6b838af942a5", - "https://esm.sh/v131/@aws-sdk/middleware-recursion-detection@3.620.0/denonext/middleware-recursion-detection.mjs": "62aab89a1f101d9be0cdab460d94659c07ecf05e43515f932d6b8a435abfa6e7", - "https://esm.sh/v131/@aws-sdk/middleware-recursion-detection@3.649.0/denonext/middleware-recursion-detection.mjs": "f024103f5525854daa3b8b713f0f2a1ef20fe1c4adbf494946130ad1dd686088", - "https://esm.sh/v131/@aws-sdk/middleware-retry@3.329.0/denonext/middleware-retry.mjs": "2f7e543d69c95305999b2aa7b079c23a02d870b18d85d6d44ffbab001ded7e81", - "https://esm.sh/v131/@aws-sdk/middleware-sdk-s3@3.329.0/denonext/middleware-sdk-s3.mjs": "8084087a54dba109fd3e29782f25da7996d4f1f4bae5517c9d2fbaf3b36d8d2a", - "https://esm.sh/v131/@aws-sdk/middleware-sdk-s3@3.626.0/denonext/middleware-sdk-s3.mjs": "7d3a4a59bf55f1a5cac96efafdc69dd71f3c309234206eee333573136a52d674", - "https://esm.sh/v131/@aws-sdk/middleware-sdk-s3@3.651.1/denonext/middleware-sdk-s3.mjs": "9f6fdff9676620937594129b08eea31700806d50bd7955352bf2f1769ea47873", - "https://esm.sh/v131/@aws-sdk/middleware-serde@3.329.0/denonext/middleware-serde.mjs": "6cc2658658bbed61570b1aa86022af3c009ade420c5689a060c741a411f07306", - "https://esm.sh/v131/@aws-sdk/middleware-signing@3.329.0/denonext/middleware-signing.mjs": "caa4a5eeaac855c555cec5f51b8780ea77aa72ac7759a535d1e3a27b79e2c51c", - "https://esm.sh/v131/@aws-sdk/middleware-ssec@3.329.0/denonext/middleware-ssec.mjs": "893e62fa5b5981e8801273220f8af582974bc7ec19a75ae7be34da5fe55acfd6", - "https://esm.sh/v131/@aws-sdk/middleware-ssec@3.609.0/denonext/middleware-ssec.mjs": "55d27e9c5fcdd0f4bf2cf7b8f0c6b834d4b3cba6c044de9a57cc0419c58d64bf", - "https://esm.sh/v131/@aws-sdk/middleware-ssec@3.649.0/denonext/middleware-ssec.mjs": "b72a9a9e35891f23e9cc215182eb1a5c41ba553d25202f690adb196e444b2693", - "https://esm.sh/v131/@aws-sdk/middleware-stack@3.329.0/denonext/middleware-stack.mjs": "fb99b7b75f28f75710d7c4335eed550049b5fb3a88bb803c9144dc94027126e4", - "https://esm.sh/v131/@aws-sdk/middleware-user-agent@3.332.0/denonext/middleware-user-agent.mjs": "59435f9dd7f0fb160500eada671164fb0f4d518213f8b474a91b54106d5b54b1", - "https://esm.sh/v131/@aws-sdk/middleware-user-agent@3.620.0/denonext/middleware-user-agent.mjs": "69c22930be2096fdcabfd59bb5ec1971122a227a716fa2ba3a47e7f5f6f6b3e9", - "https://esm.sh/v131/@aws-sdk/middleware-user-agent@3.649.0/denonext/middleware-user-agent.mjs": "f502112055e953c54c966ece5fa38b04cd6d96cb53e7324726aacde3acfa85d6", - "https://esm.sh/v131/@aws-sdk/property-provider@3.329.0/denonext/property-provider.mjs": "bc96051e0fae3b0a01d011b1b8e247ebf89caa52fbd3522fab77728f4f639345", - "https://esm.sh/v131/@aws-sdk/protocol-http@3.329.0/denonext/protocol-http.mjs": "4256a8110ed08f52124aac742d8df429d84b0b55b29147ebfa5b5db44b2990f6", - "https://esm.sh/v131/@aws-sdk/querystring-builder@3.329.0/denonext/querystring-builder.mjs": "cf0776b4fcc30f0b4911011e5184eb0d996c6e1c045d63c7c0ac8f75507982f0", - "https://esm.sh/v131/@aws-sdk/querystring-parser@3.329.0/denonext/querystring-parser.mjs": "40ff8f84d555f74f8996757645b31276755755412865833e1c2b73cb3c099233", - "https://esm.sh/v131/@aws-sdk/region-config-resolver@3.614.0/denonext/region-config-resolver.mjs": "580b2f14c0d72423f166859afd2441fdf3883f7a3ab86c36d746a159029d40fd", - "https://esm.sh/v131/@aws-sdk/region-config-resolver@3.649.0/denonext/region-config-resolver.mjs": "c1b65a5fdff26ab8ca5c25778fffbaae15c484fc56671baaf68908d546347a60", - "https://esm.sh/v131/@aws-sdk/s3-request-presigner@3.335.0/denonext/s3-request-presigner.mjs": "41551ded4796e73be68e20a9be5af919979e9f15ef47808cd677e77577c69050", - "https://esm.sh/v131/@aws-sdk/service-error-classification@3.329.0/denonext/service-error-classification.mjs": "8d188836f247e51643e694518958375d6c24f38f8115438052e95a6fe11e790c", - "https://esm.sh/v131/@aws-sdk/signature-v4-crt@3.391.0/denonext/signature-v4-crt.mjs": "6791fe556546ffea4a106d0a30fa54d351a57c1a8a7ad2de071e1d194e94b683", - "https://esm.sh/v131/@aws-sdk/signature-v4-multi-region@3.329.0/denonext/signature-v4-multi-region.mjs": "c85bd24f342d6d35e4bb63beb8b5b059c557955200dcea37ab29360305b4c748", - "https://esm.sh/v131/@aws-sdk/signature-v4-multi-region@3.626.0/denonext/signature-v4-multi-region.mjs": "1f5b99bb060d106d181aa07fecfedabdcdf436a422070cb55a03ba9a529c74ad", - "https://esm.sh/v131/@aws-sdk/signature-v4-multi-region@3.651.1/denonext/signature-v4-multi-region.mjs": "5bfd407a539ab42e13d5f3417a057016648ce545e22c67924b007038c480660f", - "https://esm.sh/v131/@aws-sdk/signature-v4@3.329.0/denonext/signature-v4.mjs": "d6643233bc5e5a566b52e805a649a3eb01b7e1c87af221ccf03337a34fff1807", - "https://esm.sh/v131/@aws-sdk/smithy-client@3.329.0/denonext/smithy-client.mjs": "da930042fd268a64eeb89bf7d5d83aaedcf97ab1abd0739ed2cc493ea56992e2", - "https://esm.sh/v131/@aws-sdk/types@3.329.0/denonext/types.mjs": "f687ff69c53e1af2cc7af841af00691674fbb22889d12a2ae8cb1517600ee67c", - "https://esm.sh/v131/@aws-sdk/url-parser@3.329.0/denonext/url-parser.mjs": "d5963d8f1e62a1f73b4af00ff2e8bed11dc69a39156251b44ce5e9d59add55c1", - "https://esm.sh/v131/@aws-sdk/util-arn-parser@3.310.0/denonext/util-arn-parser.mjs": "da6927c63827861d70a20f1581d399fd5510ebb311f6ba23bb4f41ee6cb13ee4", - "https://esm.sh/v131/@aws-sdk/util-arn-parser@3.568.0/denonext/util-arn-parser.mjs": "e80995eaf790640e591f09d89d9099b022efa6d7954d6e23a1a7f5691b9b5110", - "https://esm.sh/v131/@aws-sdk/util-base64@3.310.0/denonext/util-base64.mjs": "dfaecb0f8ce33d1b670861e3eb420e12990dbb71b42574c32064ae86d17d8df0", - "https://esm.sh/v131/@aws-sdk/util-body-length-browser@3.310.0/denonext/util-body-length-browser.mjs": "606de31e860d9a8ef454bde44a42b77311340567e9246b72c42b2c2c604dbd56", - "https://esm.sh/v131/@aws-sdk/util-config-provider@3.310.0/denonext/util-config-provider.mjs": "9c3b6a127cce262b43e339c7f26d8d5444fc887ccda27cc4ca5483e050dfb2cf", - "https://esm.sh/v131/@aws-sdk/util-defaults-mode-browser@3.329.0/denonext/util-defaults-mode-browser.mjs": "acc59887a35a66d5fdcaa2101ac0dcf71141d332b243dc6808534c6ed5212f77", - "https://esm.sh/v131/@aws-sdk/util-endpoints@3.332.0/denonext/util-endpoints.mjs": "02da62ce90e11394aa5428b17b48fdfa74ff81003a689a53b522541101a9608b", - "https://esm.sh/v131/@aws-sdk/util-endpoints@3.614.0/denonext/util-endpoints.mjs": "38dd08dc9c4697f8cbc0b6990d9ce410a9b6de11c08119dc42441d8dfe89ab5a", - "https://esm.sh/v131/@aws-sdk/util-endpoints@3.649.0/denonext/util-endpoints.mjs": "1c1138d7a3e5fe688e7bacd1cd04967588c4e61a777f8547acec01b2ad4607f0", - "https://esm.sh/v131/@aws-sdk/util-format-url@3.329.0/denonext/util-format-url.mjs": "6dedc088febc86ddbb24ed628f818ae6caf13ccdedb7d369c1ecc7884e1d0e2b", - "https://esm.sh/v131/@aws-sdk/util-hex-encoding@3.310.0/denonext/util-hex-encoding.mjs": "a0eefaaeb52f512fda170d4ba78b87df41f2588efabc96bc998d12fe7af83c9e", - "https://esm.sh/v131/@aws-sdk/util-locate-window@3.310.0/denonext/util-locate-window.mjs": "894879f284b5a41fc830b8fe40e2a7038b124d5f5b7a3fde841c3314366c56c5", - "https://esm.sh/v131/@aws-sdk/util-locate-window@3.568.0/denonext/util-locate-window.mjs": "44c4acffec7669f2d0e0307ebfca7cac1f85260a6f8238dcbeb5e79f769e6f00", - "https://esm.sh/v131/@aws-sdk/util-middleware@3.329.0/denonext/util-middleware.mjs": "c9e423e7b96aa3eb038defc3b70a7db2e20260e504ec846cff5bd233f34fe09d", - "https://esm.sh/v131/@aws-sdk/util-retry@3.329.0/denonext/util-retry.mjs": "ed702a959997b4820d93bf89503decc8d5a9734729bdbe5bd247f2db693e680b", - "https://esm.sh/v131/@aws-sdk/util-stream-browser@3.329.0/denonext/util-stream-browser.mjs": "7cf71ee2a0a20b67ea57e6834e23bd5076ad74674418d65e8d924f33cc378a06", - "https://esm.sh/v131/@aws-sdk/util-uri-escape@3.310.0/denonext/util-uri-escape.mjs": "c0888b31da1e24f84ce208869244230c4f67caacddcdacdea70b3ae01c0c30bd", - "https://esm.sh/v131/@aws-sdk/util-user-agent-browser@3.329.0/denonext/util-user-agent-browser.mjs": "3fae0af61dd1d0a5764275b34f497ac9511e87529a0fa9f5a30ccfb2a2683856", - "https://esm.sh/v131/@aws-sdk/util-user-agent-browser@3.609.0/denonext/util-user-agent-browser.mjs": "7d2a0010374f42317bab7409b896a9ee9b1c90f8dd143da9e7b32baa4e83ccda", - "https://esm.sh/v131/@aws-sdk/util-user-agent-browser@3.649.0/denonext/util-user-agent-browser.mjs": "329d66fb2af25dd886069ff42d480aab100b5fa748d8727a4f6e0b1eb721b4be", - "https://esm.sh/v131/@aws-sdk/util-utf8-browser@3.259.0/denonext/util-utf8-browser.mjs": "79fc8ce5cd61204fe274363d637902a5d49ea40688e8d40cbd5b6ecf56f782b7", - "https://esm.sh/v131/@aws-sdk/util-utf8@3.310.0/denonext/util-utf8.mjs": "b988a756b1d6e53db92e105d52a25c298e6fdbd749d24e9ac70a688c96565dc8", - "https://esm.sh/v131/@aws-sdk/util-waiter@3.329.0/denonext/util-waiter.mjs": "756743c076c5ef4d9b842f239bfde5e28903641b2475c4bdbb411e01b445782f", - "https://esm.sh/v131/@aws-sdk/xml-builder@3.310.0/denonext/xml-builder.mjs": "66aa1e7ed650d5da4a99f3ca05f5026fa6efcff293f720221b6cd63102f33dad", - "https://esm.sh/v131/@aws-sdk/xml-builder@3.609.0/denonext/xml-builder.mjs": "1822a0c319298642be9cdac624fadf1c77392d02f6b33fb9e36b27738de5fcc6", - "https://esm.sh/v131/@aws-sdk/xml-builder@3.649.0/denonext/xml-builder.mjs": "a05e7d42f45bfdb8adf787fa619e6286642cce7b2b563dbdf84063b667a51b3c", - "https://esm.sh/v131/@httptoolkit/websocket-stream@6.0.1/denonext/websocket-stream.mjs": "c5819a529fab01eaa27ec17550cc7b9dae4d0e3e5552f81c0ecb37c746c025c2", - "https://esm.sh/v131/@smithy/abort-controller@3.1.2/denonext/abort-controller.mjs": "aefef04873f4d61264c8a6dad0816a881042c34f952c5a59d16934091b33ff18", - "https://esm.sh/v131/@smithy/chunked-blob-reader@3.0.0/denonext/chunked-blob-reader.mjs": "bfd33430ff0d1b7c3dc6e42401a2adfcdeaf2dbb9ac56ca6578782c99e2cb359", - "https://esm.sh/v131/@smithy/config-resolver@3.0.6/denonext/config-resolver.mjs": "2b2bbc9ed83f33d959f76ac2c361daeb32233d4876d933afeb608878b52e77f9", - "https://esm.sh/v131/@smithy/core@2.4.1/denonext/core.mjs": "98a418567a07e5655d3655ed300ae82af5406709e5d4c0e5c53608243805476a", - "https://esm.sh/v131/@smithy/eventstream-codec@2.0.2/denonext/eventstream-codec.mjs": "af08552ab22199c7071e6449046a87d5461cbb92ece49c565c11a3d01e3106bb", - "https://esm.sh/v131/@smithy/eventstream-codec@3.1.3/denonext/eventstream-codec.mjs": "42e83fceb013464f0da9222892f3b12ad2c1419553d06dda7cf5ef2a8f2c68fe", - "https://esm.sh/v131/@smithy/eventstream-serde-browser@3.0.7/denonext/eventstream-serde-browser.mjs": "b3c818d2e378f3a7b89d07c0873da305cbf16b2de5f301123e0ba38ac2f41e0d", - "https://esm.sh/v131/@smithy/eventstream-serde-config-resolver@3.0.4/denonext/eventstream-serde-config-resolver.mjs": "82a3253166780ac93190497c7842bd1c7a2ce68031a1a0e5713f2b7b42cb0305", - "https://esm.sh/v131/@smithy/eventstream-serde-universal@3.0.6/denonext/eventstream-serde-universal.mjs": "90ea0532afeab98fb3b3be83be34ecbf576411daf22311d012a96fc5550a01f2", - "https://esm.sh/v131/@smithy/fetch-http-handler@3.2.5/denonext/fetch-http-handler.mjs": "086baef922d8a85d19f58641f764373a51ab45faf406bf5d7d50fa6779b96093", - "https://esm.sh/v131/@smithy/hash-blob-browser@3.1.3/denonext/hash-blob-browser.mjs": "9a2762d5a7d33fa46f00b7636cfe880b097f735dc71c98aaab1a4bdf0276740a", - "https://esm.sh/v131/@smithy/invalid-dependency@3.0.4/denonext/invalid-dependency.mjs": "74e9867049a6ba7ac8a06e8b5fef1b7f856ca1e0de4f1ceb55b359c191fb32f0", - "https://esm.sh/v131/@smithy/is-array-buffer@2.0.0/denonext/is-array-buffer.mjs": "8fcbe490a3730ac1eac71766b5e1cb41ccba2f2abf646badb0e50a95340b3623", - "https://esm.sh/v131/@smithy/is-array-buffer@3.0.0/denonext/is-array-buffer.mjs": "f8bb7f850b646a10880d4e52c60151913b7d81911b2b1cd1355c9adef56ab3e2", - "https://esm.sh/v131/@smithy/md5-js@3.0.4/denonext/md5-js.mjs": "3af3680880d7765c9f28e383d7f619acf890989540e250dc2de4c3ebe62b0618", - "https://esm.sh/v131/@smithy/middleware-content-length@3.0.6/denonext/middleware-content-length.mjs": "d118a27cbe2b1a9473d767c59787127f1e254f75683f4468b1369fd2301d3496", - "https://esm.sh/v131/@smithy/middleware-endpoint@3.1.1/denonext/middleware-endpoint.mjs": "e47be271bca870de99c69fb5d43c44215a13736d5196cd086265fbae21b41da2", - "https://esm.sh/v131/@smithy/middleware-retry@3.0.16/denonext/middleware-retry.mjs": "3d70aaaa174ed047806fd8f49c99bd77c26dcc31bb84b8ec75214cc5e9118f0a", - "https://esm.sh/v131/@smithy/middleware-serde@3.0.4/denonext/middleware-serde.mjs": "dea17c2925402c44fdea609ad15f081ff51446a2cc559c2142c9603c0e874551", - "https://esm.sh/v131/@smithy/middleware-stack@3.0.4/denonext/middleware-stack.mjs": "219a95e8a2bbc77318c2da6b3f9026ebdf4bbc33542b32ef2afcc7024531e62d", - "https://esm.sh/v131/@smithy/property-provider@3.1.4/denonext/property-provider.mjs": "db5ed83f04a951a0552dbae98ea69c94ef147b46d3d4d1e884d002c92433c740", - "https://esm.sh/v131/@smithy/protocol-http@1.2.0/denonext/protocol-http.mjs": "29f698026fbe2c9c139d356a8ca5f7e197fe34d4f5d9fb364da0a4340729aa12", - "https://esm.sh/v131/@smithy/protocol-http@4.1.1/denonext/protocol-http.mjs": "56ab04e27acdb083eeceb91ea3f192d66d06ee77675e8e41feec944f85c2de0b", - "https://esm.sh/v131/@smithy/querystring-builder@3.0.4/denonext/querystring-builder.mjs": "a1f904376f6a92fc57e5358c04ec296286bec9ad16a2f46c100da7bdbacfd9fc", - "https://esm.sh/v131/@smithy/querystring-parser@2.0.3/denonext/querystring-parser.mjs": "2f656d24d351a2f741fbe5dbeae352f51bf73d80258a0e2d39893c69786843c8", - "https://esm.sh/v131/@smithy/querystring-parser@3.0.4/denonext/querystring-parser.mjs": "a33eab3034c316ebad88e21312a9a2f22c0720558c3d1908eed5c8a760de1892", - "https://esm.sh/v131/@smithy/service-error-classification@3.0.4/denonext/service-error-classification.mjs": "e379f60e544398c0e03565a58bc7f10164284bdcaac54c9d0e9f3220aa74a49f", - "https://esm.sh/v131/@smithy/signature-v4@2.0.1/denonext/signature-v4.mjs": "01efbf6f929d92a7d01edc68f5e4d6488684d462c22383955cbf1a7ca5f2ac8e", - "https://esm.sh/v131/@smithy/signature-v4@4.1.1/denonext/signature-v4.mjs": "f52b5b071093470716edc0eef95613d85de4dbedd444a473bcffb09b9f259df1", - "https://esm.sh/v131/@smithy/smithy-client@3.3.0/denonext/smithy-client.mjs": "415f600de78a5edecafddae6ba2d6135831b3e81246523d06cb5e06cf34acc33", - "https://esm.sh/v131/@smithy/types@1.2.0/denonext/types.mjs": "e7310b4830d09404b64c0e5512232b86d6374023aaf950049615b99caaed51ec", - "https://esm.sh/v131/@smithy/types@3.4.0/denonext/types.mjs": "7cded236a373f226179e14655d6ce1aac5b054667429bc95a0d864be949a7e58", - "https://esm.sh/v131/@smithy/url-parser@3.0.4/denonext/url-parser.mjs": "f41bef3e84a1c07227e47005e9d5d1a5bc9300afeb84786607f9f62df1f2da3f", - "https://esm.sh/v131/@smithy/util-base64@3.0.0/denonext/util-base64.mjs": "059ac3bac065ef2a3e8669434223330102a048b6c6542d4cd215e811c589e7a1", - "https://esm.sh/v131/@smithy/util-body-length-browser@3.0.0/denonext/util-body-length-browser.mjs": "d67382004d61919b97a756a454f9b312cfb0011a9727d3d1ca69ebddf1c7843a", - "https://esm.sh/v131/@smithy/util-config-provider@3.0.0/denonext/util-config-provider.mjs": "832c0ab1d3b06a51351ea23b33628bd36a37ef570e02e469f6ab39f71d88d7b1", - "https://esm.sh/v131/@smithy/util-defaults-mode-browser@3.0.16/denonext/util-defaults-mode-browser.mjs": "e9d0a83558d64f3ae691710bc4a2a79bfd1382be2b0ba26a9853173d3fc0d02b", - "https://esm.sh/v131/@smithy/util-endpoints@2.1.0/denonext/util-endpoints.mjs": "91383a4504043da2ec4a30984bc8197851bebaecc33c2c1abdff441ed71d7fbe", - "https://esm.sh/v131/@smithy/util-hex-encoding@2.0.0/denonext/util-hex-encoding.mjs": "48b73551d6dc8f87fff840debe36f207f56b04a36c3c21fe2099613457c9d22d", - "https://esm.sh/v131/@smithy/util-hex-encoding@3.0.0/denonext/util-hex-encoding.mjs": "cbdd7aabeb3903596980e2903efec3e5501f7e1259fb7b97e327a3b4e635f23c", - "https://esm.sh/v131/@smithy/util-middleware@2.0.0/denonext/util-middleware.mjs": "89a29c46c58825db0566b99d517476aa973d4cc09fcd5e82413f018599db8f26", - "https://esm.sh/v131/@smithy/util-middleware@3.0.4/denonext/util-middleware.mjs": "b8ae325f1e603bc2e706ffe4fc6095c9badab918f5a7cb6c7d0f39ef7f23e742", - "https://esm.sh/v131/@smithy/util-retry@3.0.4/denonext/util-retry.mjs": "8e9dd042f3d31eaa23f02895cb92339ac48a978fa6acb479bf24a60c7d0dbfd9", - "https://esm.sh/v131/@smithy/util-stream@3.1.4/denonext/util-stream.mjs": "7fd8fa4bc42b67f7e76314d23f27c6b47000594e489ab05c9ba862b400f80bdd", - "https://esm.sh/v131/@smithy/util-uri-escape@2.0.0/denonext/util-uri-escape.mjs": "1e46ae4ab088b9dfcb5dd73715de2a2530747e920cf5b405012aed7d944e2976", - "https://esm.sh/v131/@smithy/util-uri-escape@3.0.0/denonext/util-uri-escape.mjs": "df2c80781ede692323dee6e2da3711e7ccc4f7a1cee949b09aba8d1ce15bbe03", - "https://esm.sh/v131/@smithy/util-utf8@2.0.0/denonext/util-utf8.mjs": "c50f8d6d64a39a8717e88184dee0fec145cb2d17a0d0a456e007eae02062bae5", - "https://esm.sh/v131/@smithy/util-utf8@2.3.0/denonext/util-utf8.mjs": "10a9f2014b2b5b2e387e04c1c7974e8219332fa30a6904923f54a46c974c6c84", - "https://esm.sh/v131/@smithy/util-utf8@3.0.0/denonext/util-utf8.mjs": "abe704ed8c4266b29906116ef723b98e8729078537b252c9a213ad373559488a", - "https://esm.sh/v131/@smithy/util-waiter@3.1.3/denonext/util-waiter.mjs": "635892b5f0940d576661df64069b285d9f3356b1adda2c02f6b40606c416415d", - "https://esm.sh/v131/ajv@8.12.0/denonext/ajv.mjs": "6ec3e0f3d7a95672c96274f6aece644b6b5541e8c2409aed36b59853529a01cf", - "https://esm.sh/v131/aws-crt@1.15.16/denonext/aws-crt.mjs": "382aad6bd02cf4f568160bb79b01a47d0332aa4021e1451eaed0b74498d7de9c", - "https://esm.sh/v131/axios@0.24.0/denonext/axios.mjs": "895bb627711160f383d2674e7cae963f8e2734ed90b1972918a35f81d6139675", - "https://esm.sh/v131/bl@4.1.0/denonext/bl.mjs": "77f87a325a0e68eb01e3a3b40856d42a037d0c111a6e3949a82ce6b50c24181a", - "https://esm.sh/v131/bowser@2.11.0/denonext/bowser.mjs": "3fd0c5d68c4bb8b3243c1b0ac76442fa90f5e20ee12773ce2b2f476c2e7a3615", - "https://esm.sh/v131/bufferutil@4.0.7/denonext/bufferutil.mjs": "abe42a54dfdc6365872850cd4395be09f2198b84a1d46022b88c98a6196f6e1f", - "https://esm.sh/v131/core-util-is@1.0.3/denonext/core-util-is.mjs": "f19dfe63f62278ae0c5a25bd85ffeac5bbdb099b22f005d01bbb62673505deec", - "https://esm.sh/v131/crypto-js@4.1.1/denonext/crypto-js.mjs": "b25d264259764a5c95fe9dfe04820d3aa6b22e063776db1dd1d0e7ac2e106eb3", - "https://esm.sh/v131/debug@4.3.4/denonext/debug.mjs": "892826bb4505deb6337df2f0f72b1e355e5377e702dd739b78774539d7482f5c", - "https://esm.sh/v131/duplexify@3.7.1/denonext/duplexify.mjs": "ac16b0738f66a2009a5f40e52f69e534df9577e694da65d1ba709c47081ff6e8", - "https://esm.sh/v131/duplexify@4.1.2/denonext/duplexify.mjs": "8e183775cd15c5752a4ba69439c3efbbfaa47b20c504b97a5ff4c3ef13c9f944", - "https://esm.sh/v131/end-of-stream@1.4.4/denonext/end-of-stream.mjs": "77a90d627b92ff8a6b577d3ce46e7f26ba55808557d1cfca70c540b76bd96af2", - "https://esm.sh/v131/fast-deep-equal@3.1.3/denonext/fast-deep-equal.mjs": "6313b3e05436550e1c0aeb2a282206b9b8d9213b4c6f247964dd7bb4835fb9e5", - "https://esm.sh/v131/fast-xml-parser@4.1.2/denonext/fast-xml-parser.mjs": "909a019fba61593212441bfc4db1e0e8652c28f108dda2db1435a2f6203bea19", - "https://esm.sh/v131/fast-xml-parser@4.4.1/denonext/fast-xml-parser.mjs": "1b272d72a69f315be8e9c239975eca27ae9677c5b0bf4f4377c0c0f5839452fb", - "https://esm.sh/v131/inherits@2.0.4/denonext/inherits.mjs": "8095f3d6aea060c904fb24ae50f2882779c0acbe5d56814514c8b5153f3b4b3b", - "https://esm.sh/v131/isarray@1.0.0/denonext/isarray.mjs": "6368a41cf02c83843453ac571deb4c393c14e6f5e1d9ca6bbe43a4623f3856c8", - "https://esm.sh/v131/isomorphic-ws@5.0.0/denonext/isomorphic-ws.mjs": "6ebc8e183811a7b10ff098e9e76f2ceaf14682a045e199b4885a47d211e61aac", - "https://esm.sh/v131/js-sdsl@4.3.0/denonext/js-sdsl.mjs": "b9d39574526cc0ea4021040025ad9c6184efc8ba32ced483fd5c785afffa49f1", - "https://esm.sh/v131/json-schema-traverse@1.0.0/denonext/json-schema-traverse.mjs": "c5da8353bc014e49ebbb1a2c0162d29969a14c325da19644e511f96ba670cc45", - "https://esm.sh/v131/lru-cache@6.0.0/denonext/lru-cache.mjs": "24583c5c6a66ad0c20393bb59f45bb5bf77a4bff6545d2f22c4718f48d943840", - "https://esm.sh/v131/mqtt-packet@6.10.0/denonext/mqtt-packet.mjs": "cbab199254918314ec410ff47ed4c2c0753a872b3749c999aad1054155570278", - "https://esm.sh/v131/mqtt@4.3.7/denonext/mqtt.mjs": "c5c3a58d1f400e1c34b985c76ed2bfe7d271488a31af8bb3d515c3995bb2ab3b", - "https://esm.sh/v131/ms@2.1.2/denonext/ms.mjs": "aa4dc45ba72554c5011168f8910cc646c37af53cfff1a15a4decced838b8eb14", - "https://esm.sh/v131/node-gyp-build@4.6.0/denonext/node-gyp-build.mjs": "58fc8e41b3ffd2f8a6b2a1694292976e6e12768d6e3895b9c8c13239562ffe64", - "https://esm.sh/v131/number-allocator@1.0.14/denonext/number-allocator.mjs": "31973164cee3564b8bc660006622bb89fde09ac1aff800ec27b4afd01bbdc74a", - "https://esm.sh/v131/once@1.4.0/denonext/once.mjs": "b4eb5beddf7f0f8ab4db5e56987d53e5f0fd77961eac5dd554ab75aa79ef0202", - "https://esm.sh/v131/process-nextick-args@2.0.1/denonext/process-nextick-args.mjs": "a57885eb600374afb2521e1d47e92df4d292d49c90c31496da5d0dde2f0d0b5f", - "https://esm.sh/v131/readable-stream@2.3.8/denonext/readable-stream.mjs": "9c2952f308e93db73ce18182be01e4e820866fdf35042a60ef29c317a4ffa72b", - "https://esm.sh/v131/readable-stream@3.6.2/denonext/readable-stream.mjs": "6d839ff306020b3a33ba1c9e46ee4f6c73a6edf453fe5c706db14a2e6ab3d987", - "https://esm.sh/v131/reinterval@1.1.0/denonext/reinterval.mjs": "6697cf544429f073376f5b8fcc5696097917bbedab45792b74d3f785e7747b58", - "https://esm.sh/v131/rfdc@1.3.0/denonext/default.js": "14b787ae4011ae4dfd0507974a9b6c11741367a1c31de2fcb3e13c92d8c4f91c", - "https://esm.sh/v131/safe-buffer@5.1.2/denonext/safe-buffer.mjs": "bf91200afdaf8be92e5c7d4c79e4dc9b5c534f76e104f1b37e5891d6f81eaca2", - "https://esm.sh/v131/safe-buffer@5.2.1/denonext/safe-buffer.mjs": "facbcb4f4622e13062978522fa12c42cae4e12f55b0e1d3fa1c4bc751bd827c7", - "https://esm.sh/v131/stream-shift@1.0.1/denonext/stream-shift.mjs": "1ec867cd3a4f89303a28e3f50e56a1d60c200b9204e9678e1a7f908f91ccccd9", - "https://esm.sh/v131/strnum@1.0.5/denonext/strnum.mjs": "1ffef4adec2f74139e36a2bfed8381880541396fe1c315779fb22e081b17468b", - "https://esm.sh/v131/tslib@1.14.1/denonext/tslib.mjs": "5e49e8960f064d11fb709e3338f5437e2ede57e7df873a09d7834c2a0bf533f7", - "https://esm.sh/v131/tslib@2.6.3/denonext/tslib.mjs": "0834c22e9fbf95f6a5659cc2017543f7d41aa880f24ab84cb11d24e6bee99303", - "https://esm.sh/v131/uri-js@4.4.1/denonext/uri-js.mjs": "901d462f9db207376b39ec603d841d87e6b9e9568ce97dfaab12aa77d0f99f74", - "https://esm.sh/v131/utf-8-validate@6.0.3/denonext/utf-8-validate.mjs": "6197c86d1731c0c56002eac5d14d7dc6a23d7f8de06623eeef5587aa63aa968b", - "https://esm.sh/v131/util-deprecate@1.0.2/denonext/util-deprecate.mjs": "f69f67cf655c38428b0934e0f7c865c055834a87cc3866b629d6b2beb21005e9", - "https://esm.sh/v131/uuid@8.3.2/denonext/uuid.mjs": "2cea289bbecc01fab6f701b719513f6ac8a3c21a5e52aa3f8682cf61d70a5dc5", - "https://esm.sh/v131/uuid@9.0.1/denonext/uuid.mjs": "7d7d3aa57fa136e2540886654c416d9da10d8cfebe408bae47fd47070f0bfb2a", - "https://esm.sh/v131/wrappy@1.0.2/denonext/wrappy.mjs": "3c31e4782e0307cf56b319fcec6110f925dafe6cb47a8fa23350d480f5fa8b06", - "https://esm.sh/v131/ws@7.5.9/denonext/ws.mjs": "bb14a389271bb68778d59f498428caee8048221eea59cc7522898b44aad66d88", - "https://esm.sh/v131/ws@8.13.0/denonext/ws.mjs": "ed9425cc1b9c9b9987590c15646b9adcd8e7d4c4cfff745fdc273a46cbc2b7cc", - "https://esm.sh/v131/xtend@4.0.2/denonext/xtend.mjs": "503056f181793967e90c0566a737612694366fa7191172f4a106099b5c2a80d2", - "https://esm.sh/v131/yallist@4.0.0/denonext/yallist.mjs": "61f180d807dda50bac17028eda05d5722a3fecef6e98a9064e2353ea6864fd82", "https://esm.sh/v135/@aws-crypto/crc32@5.2.0/denonext/crc32.mjs": "6a9bc8418c01e2539665b528ccea843f1319a3b32d759fcbb1d4468156c25100", "https://esm.sh/v135/@aws-crypto/crc32c@5.2.0/denonext/crc32c.mjs": "1e8985997bd2c0807d349acaf192a54147d779e5349faf6507f51aa8becb85ca", "https://esm.sh/v135/@aws-crypto/sha1-browser@5.2.0/denonext/sha1-browser.mjs": "d80868d5524769e0334b50124d547ce9875fb05f9924acca4c42ed877b41ce7f", @@ -1972,86 +893,77 @@ "https://esm.sh/v135/@aws-crypto/sha256-js@5.2.0/denonext/sha256-js.mjs": "2e1014e03baf7b5eb5d773c8409af836dacbec2c0a522b789774f76d3eb2e5ad", "https://esm.sh/v135/@aws-crypto/supports-web-crypto@5.2.0/denonext/supports-web-crypto.mjs": "2ae3bd2aa25db0761277ad0feda7aea68cd829c89b714e8e03e07aac06345d81", "https://esm.sh/v135/@aws-crypto/util@5.2.0/denonext/util.mjs": "376903ba54e09eed466b45e243cef1133f20bf015c0505e70fc794896d1412d5", - "https://esm.sh/v135/@aws-sdk/abort-controller@3.374.0/denonext/abort-controller.mjs": "c92632814e2afd8e528c7c8ed1ad35bc64c813c16819621186a2634132eb4826", - "https://esm.sh/v135/@aws-sdk/client-s3@3.626.0/denonext/client-s3.mjs": "537c83c1071313a4feea44707db22e52241f9733461970bf2c7f95eea4598349", - "https://esm.sh/v135/@aws-sdk/core@3.624.0/denonext/client.js": "0e16e057a670adae67a98862c400f4b1e41ad70c3fa58273f8cf7aa56907972e", - "https://esm.sh/v135/@aws-sdk/core@3.624.0/denonext/core.mjs": "c37c628e3cbb5073d8811951d0183528337a14115f9a7502ff8a7143f09fa95b", - "https://esm.sh/v135/@aws-sdk/core@3.624.0/denonext/httpAuthSchemes.js": "96fe3d4ad85aec033ae455506b653c12b806c53c9d865bf3062bad02a8b96f7f", - "https://esm.sh/v135/@aws-sdk/core@3.624.0/denonext/protocols.js": "d5d8b7c7d4bdab2b8c86595b361b6cb6276596c8b4b3a69c338b9c2bfe65d3dc", - "https://esm.sh/v135/@aws-sdk/lib-storage@3.335.0/denonext/lib-storage.mjs": "338562418111b43c97a6f08afede92220cd0a0e04e49ce4cf35ade96e04d1be2", - "https://esm.sh/v135/@aws-sdk/lib-storage@3.626.0/denonext/lib-storage.mjs": "0bbdf69f0caeb88adeb56212c92fab68899dc9518ce7cbc60d47e24dc4c2e6cb", - "https://esm.sh/v135/@aws-sdk/middleware-endpoint@3.329.0/denonext/middleware-endpoint.mjs": "b26a2fc43052be9bcfdd92a440c2774c1b7e18d79481d1332e24357d62b7a8cd", - "https://esm.sh/v135/@aws-sdk/middleware-expect-continue@3.620.0/denonext/middleware-expect-continue.mjs": "7257dc7aa9fd7a34fc44b5f8b2460cadfdd72b2e8d7a54d2027a69d1e94c902e", - "https://esm.sh/v135/@aws-sdk/middleware-flexible-checksums@3.620.0/denonext/middleware-flexible-checksums.mjs": "13e3af9f03eae1deb232c6201bac2eabbf986c2bb6f5cfbd80c06988172e5cd6", - "https://esm.sh/v135/@aws-sdk/middleware-host-header@3.620.0/denonext/middleware-host-header.mjs": "1e2c8804ebfb981b393e843ada215a2f2a5faf82f92ebe8906794bb0d1f09338", - "https://esm.sh/v135/@aws-sdk/middleware-location-constraint@3.609.0/denonext/middleware-location-constraint.mjs": "ba8c934c030e5168ad09260026bae3b5f538eca8c50b528fb3b6e945967b7f36", - "https://esm.sh/v135/@aws-sdk/middleware-logger@3.609.0/denonext/middleware-logger.mjs": "2105c33b2e62ed2567b20a71438f8f1409220f7bd0426910b0bccf5b84316b84", - "https://esm.sh/v135/@aws-sdk/middleware-recursion-detection@3.620.0/denonext/middleware-recursion-detection.mjs": "e4b76653eb33598813018b3d924a4d7ff86243a7bd4d818ac7a194d147e7a267", - "https://esm.sh/v135/@aws-sdk/middleware-sdk-s3@3.626.0/denonext/middleware-sdk-s3.mjs": "d270af31fd15039013d907d80079ffca73be4edd8d8692c50df5b5b9e4e67c11", - "https://esm.sh/v135/@aws-sdk/middleware-sdk-s3@3.635.0/denonext/middleware-sdk-s3.mjs": "19d026384d6c2223ef650a5f6791da38f2cf93612a2f3f2474bca2c78c002a19", - "https://esm.sh/v135/@aws-sdk/middleware-serde@3.329.0/denonext/middleware-serde.mjs": "6cc2658658bbed61570b1aa86022af3c009ade420c5689a060c741a411f07306", - "https://esm.sh/v135/@aws-sdk/middleware-ssec@3.609.0/denonext/middleware-ssec.mjs": "55d27e9c5fcdd0f4bf2cf7b8f0c6b834d4b3cba6c044de9a57cc0419c58d64bf", - "https://esm.sh/v135/@aws-sdk/middleware-stack@3.329.0/denonext/middleware-stack.mjs": "fb99b7b75f28f75710d7c4335eed550049b5fb3a88bb803c9144dc94027126e4", - "https://esm.sh/v135/@aws-sdk/middleware-user-agent@3.620.0/denonext/middleware-user-agent.mjs": "0ccc85f4fc403b97c9f568e00fcfbfa8bb89cc14fd0afac361bde45fe5468e30", - "https://esm.sh/v135/@aws-sdk/querystring-parser@3.329.0/denonext/querystring-parser.mjs": "40ff8f84d555f74f8996757645b31276755755412865833e1c2b73cb3c099233", - "https://esm.sh/v135/@aws-sdk/region-config-resolver@3.614.0/denonext/region-config-resolver.mjs": "580b2f14c0d72423f166859afd2441fdf3883f7a3ab86c36d746a159029d40fd", - "https://esm.sh/v135/@aws-sdk/s3-request-presigner@3.645.0/denonext/s3-request-presigner.mjs": "57125a72c13a69f88078aa6505ef6088efa4c773604463a08b9be275996c38ae", - "https://esm.sh/v135/@aws-sdk/signature-v4-multi-region@3.626.0/denonext/signature-v4-multi-region.mjs": "63e55b8fb9055aa0b49908b0844b6f1e363e33768ee2feb77a7b4b4592ff5d98", - "https://esm.sh/v135/@aws-sdk/signature-v4-multi-region@3.635.0/denonext/signature-v4-multi-region.mjs": "de9c08397d25f620680522d022422ebb30cc534d44cc91592f31922ec3f9bc88", - "https://esm.sh/v135/@aws-sdk/smithy-client@3.329.0/denonext/smithy-client.mjs": "2fe6de061d275592329468d827aa92da5f7a5a8db94b1cc1f65a6f770f9ffa4a", - "https://esm.sh/v135/@aws-sdk/url-parser@3.329.0/denonext/url-parser.mjs": "97fa1421f7a6410586890a269fe5500a69e70ca82758e85eca7884f4a1ade163", - "https://esm.sh/v135/@aws-sdk/util-arn-parser@3.568.0/denonext/util-arn-parser.mjs": "e80995eaf790640e591f09d89d9099b022efa6d7954d6e23a1a7f5691b9b5110", - "https://esm.sh/v135/@aws-sdk/util-endpoints@3.614.0/denonext/util-endpoints.mjs": "9c8c4f8e1ce01df87b215a8202104e482999a94c46d46fe0d6e763296b6d59b2", - "https://esm.sh/v135/@aws-sdk/util-format-url@3.609.0/denonext/util-format-url.mjs": "097aa6da9b813dfd68e0bdcd25391d7e77ae808911463309604f8022ac38ab0b", + "https://esm.sh/v135/@aws-sdk/client-s3@3.700.0/denonext/client-s3.mjs": "60aec3d8fe60437d2c0976245d2221b81a1b2fda97631dae0602e8ef7f63904e", + "https://esm.sh/v135/@aws-sdk/core@3.696.0/denonext/client.js": "081af7b04c457ca6d306c7fdc99f684fa41c4215d9bb5b38f697ab50b434ca4b", + "https://esm.sh/v135/@aws-sdk/core@3.696.0/denonext/core.mjs": "31c8677be7c08f1147548368fd72ae0ea647852169fb08d992122f748bcea6bc", + "https://esm.sh/v135/@aws-sdk/core@3.696.0/denonext/httpAuthSchemes.js": "dc7a76ce8a356f308dde3712304991013f17ed5c103168002db64b8b17a1ff9a", + "https://esm.sh/v135/@aws-sdk/core@3.696.0/denonext/protocols.js": "6035e9162278403cb66ee7d2af8bca2295f65ac4a940fd226174dfd66aa21875", + "https://esm.sh/v135/@aws-sdk/lib-storage@3.700.0/denonext/lib-storage.mjs": "4283f2821159bc0153775c22c1326a29eef7580ff8c8367747c3bf7c3aa191bf", + "https://esm.sh/v135/@aws-sdk/middleware-expect-continue@3.696.0/denonext/middleware-expect-continue.mjs": "7f94cbe212255472a5f85e267eda2ff2bd11be345b745282c7a494d641bd8fc9", + "https://esm.sh/v135/@aws-sdk/middleware-flexible-checksums@3.697.0/denonext/middleware-flexible-checksums.mjs": "6489da2042f0e1f2160a42502bef8abfc8aba763aade325d2817dd714e14278e", + "https://esm.sh/v135/@aws-sdk/middleware-host-header@3.696.0/denonext/middleware-host-header.mjs": "6b3d43a4662c4e300f331a3cb24c94bcb4a6403e42a937fe1bacb54d3e48e49d", + "https://esm.sh/v135/@aws-sdk/middleware-location-constraint@3.696.0/denonext/middleware-location-constraint.mjs": "bd5dbcc02a1d663a787d91e5275989539951de8f528405d1310305331d855266", + "https://esm.sh/v135/@aws-sdk/middleware-logger@3.696.0/denonext/middleware-logger.mjs": "9f894804d70e4cb1f2ae597476f784eee2854966ad2d1865d6cb4e35487ae75a", + "https://esm.sh/v135/@aws-sdk/middleware-recursion-detection@3.696.0/denonext/middleware-recursion-detection.mjs": "1717239de42416976f566d1d9ef58093dc3ddadaa4e4c1e607ddb6cab6b7667f", + "https://esm.sh/v135/@aws-sdk/middleware-sdk-s3@3.696.0/denonext/middleware-sdk-s3.mjs": "516a561d42dbaa443cf70b0c58582e9c6062f618d819c88c03ee8bc23db7492c", + "https://esm.sh/v135/@aws-sdk/middleware-ssec@3.696.0/denonext/middleware-ssec.mjs": "1cf008b51a30822cd2de033d2330b2c9e9ee09fcd8e8e0ca4b5f1705569203d5", + "https://esm.sh/v135/@aws-sdk/middleware-user-agent@3.696.0/denonext/middleware-user-agent.mjs": "0c98884a901cb6bd6196392c99f32066be4c1bf814e872f63b4c2bbaa64ee1cc", + "https://esm.sh/v135/@aws-sdk/region-config-resolver@3.696.0/denonext/region-config-resolver.mjs": "60a2cd55ec82e34859df65f0071638a6286410fe7144580de85bb1003035e550", + "https://esm.sh/v135/@aws-sdk/s3-request-presigner@3.700.0/denonext/s3-request-presigner.mjs": "614df9a4ff4f4969b50aa6336ddc00c4c37579e683e5021524df989e0b7ce85b", + "https://esm.sh/v135/@aws-sdk/signature-v4-multi-region@3.696.0/denonext/signature-v4-multi-region.mjs": "1a0681be26b7de554e24f01b4330ec9ada26dbb5772d003317fcaa8baedef526", + "https://esm.sh/v135/@aws-sdk/util-arn-parser@3.693.0/denonext/util-arn-parser.mjs": "ff8b16a9bd3f4dde9e7b5540fb4ed42035e2375516f576aaa98f7f4b29c21a96", + "https://esm.sh/v135/@aws-sdk/util-endpoints@3.696.0/denonext/util-endpoints.mjs": "58068b809c541411763e71ae75317e7374ca9acef369859f8075a0ce6ab2ab12", + "https://esm.sh/v135/@aws-sdk/util-format-url@3.696.0/denonext/util-format-url.mjs": "f00d273a637c6ea6d7fb9fcdc0b6d76eca26c5160964156ceb54f2bf46ac8a66", "https://esm.sh/v135/@aws-sdk/util-locate-window@3.568.0/denonext/util-locate-window.mjs": "44c4acffec7669f2d0e0307ebfca7cac1f85260a6f8238dcbeb5e79f769e6f00", - "https://esm.sh/v135/@aws-sdk/util-middleware@3.329.0/denonext/util-middleware.mjs": "c9e423e7b96aa3eb038defc3b70a7db2e20260e504ec846cff5bd233f34fe09d", - "https://esm.sh/v135/@aws-sdk/util-user-agent-browser@3.609.0/denonext/util-user-agent-browser.mjs": "47329052476de081fa1bd227be1f83dd1ed360162aecae204218295bf9dc5ab5", - "https://esm.sh/v135/@aws-sdk/xml-builder@3.609.0/denonext/xml-builder.mjs": "1822a0c319298642be9cdac624fadf1c77392d02f6b33fb9e36b27738de5fcc6", - "https://esm.sh/v135/@smithy/abort-controller@1.1.0/denonext/abort-controller.mjs": "e65c475315885a73dbdf844fa53b26ab472ac201b9e8417b96144e8052aeb062", - "https://esm.sh/v135/@smithy/abort-controller@3.1.1/denonext/abort-controller.mjs": "dd485991596c6c38a3d35fcab735b6be8afaeef82e8c7567b89f42327ad93e40", - "https://esm.sh/v135/@smithy/chunked-blob-reader@3.0.0/denonext/chunked-blob-reader.mjs": "bfd33430ff0d1b7c3dc6e42401a2adfcdeaf2dbb9ac56ca6578782c99e2cb359", - "https://esm.sh/v135/@smithy/config-resolver@3.0.5/denonext/config-resolver.mjs": "0ccf80d6a6427058db95154498485b6a5ae77d12c4fdae48406c9a60b41afe2b", - "https://esm.sh/v135/@smithy/core@2.3.2/denonext/core.mjs": "d1326003ea61059ce2e5113a94b250180bcbfb03927fd811578fd6c5daacccfb", - "https://esm.sh/v135/@smithy/core@2.4.0/denonext/core.mjs": "3ad714d4c1fdb7dcffd91936255289197d6bf0523f13d36bb94e9ce1fd1756d5", - "https://esm.sh/v135/@smithy/eventstream-codec@3.1.2/denonext/eventstream-codec.mjs": "8ea933c44dc8baa334f47b1c2b70a9bf2a14836f9fab720b1125664fb26c4527", - "https://esm.sh/v135/@smithy/eventstream-serde-browser@3.0.5/denonext/eventstream-serde-browser.mjs": "f51a5ea92e801ae4944f5e21201a2c3c617b51280432ef638c40e619e1e9f6c8", - "https://esm.sh/v135/@smithy/eventstream-serde-config-resolver@3.0.3/denonext/eventstream-serde-config-resolver.mjs": "0960eeb9f45540bca3281e9d539b75ed114891b8453c91c2c87dee294387d81d", - "https://esm.sh/v135/@smithy/eventstream-serde-universal@3.0.4/denonext/eventstream-serde-universal.mjs": "6eeacd6369f3790bba2e0479f0680f1dee0473b2a9cfd1daed5fac741c3177e2", - "https://esm.sh/v135/@smithy/fetch-http-handler@3.2.4/denonext/fetch-http-handler.mjs": "7890ad9cef41a0b0a1a5440153108391d5e5f995a39a028637b3cef271c76075", - "https://esm.sh/v135/@smithy/hash-blob-browser@3.1.2/denonext/hash-blob-browser.mjs": "39b8b23e12aafc146af0af6954ff957752343c9c040d09bda1a0cf4aa5de52fa", - "https://esm.sh/v135/@smithy/invalid-dependency@3.0.3/denonext/invalid-dependency.mjs": "99f4bdd11680348113a0acd593a7f402a33d10654cf4218b5b0f967dbcdae19e", + "https://esm.sh/v135/@aws-sdk/util-user-agent-browser@3.696.0/denonext/util-user-agent-browser.mjs": "206d36305d806415e67e4a4a081873f5eeb58663dd648c6c9bd1bd979056b0e7", + "https://esm.sh/v135/@aws-sdk/xml-builder@3.696.0/denonext/xml-builder.mjs": "ebbc2588e2c605aa412a2ec53658501d4ae73049308d9c9605e3f142edbf0e54", + "https://esm.sh/v135/@smithy/abort-controller@3.1.8/denonext/abort-controller.mjs": "e7b775cb7a418b1010a24e380376fb790f0c2a9fa2b547c1f662a30b53ff91f3", + "https://esm.sh/v135/@smithy/chunked-blob-reader@4.0.0/denonext/chunked-blob-reader.mjs": "e7dbf64e88d08e2448f699dd0b75a7be900dfd94662f3007e76ecc64c2a53adc", + "https://esm.sh/v135/@smithy/config-resolver@3.0.12/denonext/config-resolver.mjs": "301150d69986e7984cf703165680aed4887f244fec1482754965363b5c69dd38", + "https://esm.sh/v135/@smithy/core@2.5.3/denonext/core.mjs": "92847ee65654850579f6468fda321aac3f27cb243da8624fa1b98f1266a9386e", + "https://esm.sh/v135/@smithy/core@2.5.3/denonext/protocols.js": "44cab0b0be393009b573a5d0d7810626ffa7ff3025edd41f73f91dc4a1a13d84", + "https://esm.sh/v135/@smithy/core@2.5.4/denonext/core.mjs": "1e33f4a25a9815539dc61e642d6615bb127737a0d67b2d653f203db70c1124ef", + "https://esm.sh/v135/@smithy/core@2.5.4/denonext/protocols.js": "ee4b0611ba1175a1967d47e079053b4c46cd0a1df44d1d2cdf0884e361352a36", + "https://esm.sh/v135/@smithy/eventstream-codec@3.1.9/denonext/eventstream-codec.mjs": "c9f9ff7c98a32902a0f8618b7d966d9ad712ff5952634af50fb4788daa56ee71", + "https://esm.sh/v135/@smithy/eventstream-serde-browser@3.0.13/denonext/eventstream-serde-browser.mjs": "1e55c70cceca16b410db8cc6d3f8d5efef2348106d5f0329cd01b8b94b3d17dc", + "https://esm.sh/v135/@smithy/eventstream-serde-config-resolver@3.0.10/denonext/eventstream-serde-config-resolver.mjs": "70274710d699d75737449a2067c5523f14b7a062dc1056153ce7d9db5576b33c", + "https://esm.sh/v135/@smithy/eventstream-serde-universal@3.0.12/denonext/eventstream-serde-universal.mjs": "ea5f23e6bb54ec1ac22823a9a2fb661fd463b6da51cba7a6e4412e504073b097", + "https://esm.sh/v135/@smithy/fetch-http-handler@4.1.1/denonext/fetch-http-handler.mjs": "b07c7cfd76ff152ba146cb45ef628ec42c49dac2d07249a077f6df841ed1987a", + "https://esm.sh/v135/@smithy/hash-blob-browser@3.1.9/denonext/hash-blob-browser.mjs": "2488cf9a08d8856142c3c4c16e4aab153c0496730b13232a78a32f3a389ecbee", + "https://esm.sh/v135/@smithy/invalid-dependency@3.0.10/denonext/invalid-dependency.mjs": "a138c5906d34411627d87c7a130f62b2f91a411530487bedcc97f3b56cc0e326", "https://esm.sh/v135/@smithy/is-array-buffer@3.0.0/denonext/is-array-buffer.mjs": "f8bb7f850b646a10880d4e52c60151913b7d81911b2b1cd1355c9adef56ab3e2", - "https://esm.sh/v135/@smithy/md5-js@3.0.3/denonext/md5-js.mjs": "6f4d21d0d4e09cce9245a4e3bddb899b40da3a1c0ce9a8fd12b8f8ac09375857", - "https://esm.sh/v135/@smithy/middleware-content-length@3.0.5/denonext/middleware-content-length.mjs": "bce550610386d8945899345a97f9aabb00976d7db378a51c463c043008e0f6df", - "https://esm.sh/v135/@smithy/middleware-endpoint@3.1.0/denonext/middleware-endpoint.mjs": "becfe2cb560079a86b0102a3a817c3a6b6f61d7ed1b7f65b6b28ae772871e638", - "https://esm.sh/v135/@smithy/middleware-retry@3.0.14/denonext/middleware-retry.mjs": "bf1ceed0c52e48d710d51ecbbf7de3748c36b6b87dfedc7819e27a84d2c07f53", - "https://esm.sh/v135/@smithy/middleware-retry@3.0.15/denonext/middleware-retry.mjs": "2d6b23bdb5ce62336afc02d045d8bb1bf0832fa8eafb022d500372c08b8ea6cb", - "https://esm.sh/v135/@smithy/middleware-serde@3.0.3/denonext/middleware-serde.mjs": "2513b3aaa3f35cf0c33841550aa23b4f4ab4d645d60f86c7a173a11b2b0c9b7a", - "https://esm.sh/v135/@smithy/middleware-stack@3.0.3/denonext/middleware-stack.mjs": "a84a0dda6e1d402ba69cba6747643d6d3f0f3532ac263beb0920f0f5f34ed53c", - "https://esm.sh/v135/@smithy/property-provider@3.1.3/denonext/property-provider.mjs": "8fbecd9b01ba1486726b9f43559926332389b292f276a10708239b1bb666c819", - "https://esm.sh/v135/@smithy/protocol-http@4.1.0/denonext/protocol-http.mjs": "8dc60c296a28eea35bb0c394d3cfdb22bb81385424e0c1099bbda21d38ff132c", - "https://esm.sh/v135/@smithy/querystring-builder@3.0.3/denonext/querystring-builder.mjs": "26803f47afc07fdcfb0506cb95235db97250abfb6e5e31311d4d3e34356ffd45", - "https://esm.sh/v135/@smithy/querystring-parser@3.0.3/denonext/querystring-parser.mjs": "1186ec8e490e5eb9a911945652400304ab9a2128e13734f80717e59f455d0b3b", - "https://esm.sh/v135/@smithy/service-error-classification@3.0.3/denonext/service-error-classification.mjs": "46b409a7d492acacb936ecae2c05e8e11e4910146f6eb2f290067b3cdae8410b", - "https://esm.sh/v135/@smithy/signature-v4@4.1.0/denonext/signature-v4.mjs": "d4adec6b85e442a4dbce5bc391d3856ef202f00f2bedc37f12d5f40fec050e69", - "https://esm.sh/v135/@smithy/smithy-client@3.1.12/denonext/smithy-client.mjs": "ef390bd8a915d25cf32cab2fb7ca07bebe652f9db7606cf07ad32aff2783a8c1", - "https://esm.sh/v135/@smithy/smithy-client@3.2.0/denonext/smithy-client.mjs": "2f051fcd8addfba2786c6d712cb8ce443c25b32f2ba258d1d0a46f550eb31451", - "https://esm.sh/v135/@smithy/types@3.3.0/denonext/types.mjs": "0b82ba4c0d421c6476ac68730acdd7a0c9bd014d34c9c556b627fd1c06673eb3", - "https://esm.sh/v135/@smithy/url-parser@3.0.3/denonext/url-parser.mjs": "69067083fcbb733d78ff55e0a1b39852dba3c893e436868fc062829fec623cd8", + "https://esm.sh/v135/@smithy/md5-js@3.0.10/denonext/md5-js.mjs": "a43fbe8339e9b06a0939c0578666cc788955b1e3a13d6ca472aca696d2b8aa0a", + "https://esm.sh/v135/@smithy/middleware-content-length@3.0.12/denonext/middleware-content-length.mjs": "a1d88f94b68806dbb9c449917935d5a5b94eedebb4aa784302b24d186f5c33c1", + "https://esm.sh/v135/@smithy/middleware-endpoint@3.2.3/denonext/middleware-endpoint.mjs": "51e33bf0dbfbd49c40749cfecf25853819e929ac159ceec0d15bb103df6247b5", + "https://esm.sh/v135/@smithy/middleware-retry@3.0.27/denonext/middleware-retry.mjs": "74d658624a067684d5d882ab592a16e44c164b15409763c4a912284b2bf1317f", + "https://esm.sh/v135/@smithy/middleware-serde@3.0.10/denonext/middleware-serde.mjs": "3dfa59e712b5223bf8e0348eb681001b1260f318e44447f767913923dbe41ef6", + "https://esm.sh/v135/@smithy/middleware-stack@3.0.10/denonext/middleware-stack.mjs": "709005fd35c3d0e93d3d6e84969f9a0503d7f40d8cbe9b37e5cb2196d1573ee5", + "https://esm.sh/v135/@smithy/property-provider@3.1.10/denonext/property-provider.mjs": "a9da35df4a74b88aef8639e1a921a7230a4581547fdd265c5bc61bb1a2aeb7cb", + "https://esm.sh/v135/@smithy/protocol-http@4.1.6/denonext/protocol-http.mjs": "d06d232767a4967141e08ede9dcfa9446ef9826f54040f4ccafa1c32808ab94c", + "https://esm.sh/v135/@smithy/protocol-http@4.1.7/denonext/protocol-http.mjs": "02f6d00f94be691f820af79d33d306a47acc64e8cb32ca591e9990ea710e4263", + "https://esm.sh/v135/@smithy/querystring-builder@3.0.10/denonext/querystring-builder.mjs": "7727cbd3a793fb235a5504f68a5a3881385fbe1a35bd09cb0fa1393b3d2d35fc", + "https://esm.sh/v135/@smithy/querystring-parser@3.0.10/denonext/querystring-parser.mjs": "15b5c8d5988c1bd240d4f25ad54de86008c0fa15f7b64818f43c38b740d3c5e7", + "https://esm.sh/v135/@smithy/service-error-classification@3.0.10/denonext/service-error-classification.mjs": "c9058b690a551fe39dda20ae06d4691c66a29512b881146be63a89c659533d49", + "https://esm.sh/v135/@smithy/signature-v4@4.2.2/denonext/signature-v4.mjs": "7a4b0bf4e8a6d060dcd398f653178c5c51bc290f6cc9ee5b6163da3ada5939f4", + "https://esm.sh/v135/@smithy/smithy-client@3.4.4/denonext/smithy-client.mjs": "3c9f8650ef0b95947af18a229152d253f16624875ed4f10897557c1fb2fff17f", + "https://esm.sh/v135/@smithy/types@3.7.0/denonext/types.mjs": "a6a32d24d9f1d3673f0fac542c91cc2782cbdf19a0878ded704ba96220f1396d", + "https://esm.sh/v135/@smithy/types@3.7.1/denonext/types.mjs": "b60aac6848b261b81901f88d9b3dcb126aaad298094940ae0300cb991e499094", + "https://esm.sh/v135/@smithy/url-parser@3.0.10/denonext/url-parser.mjs": "ce2722c42ce847e29c9b641a378dae9ffdcd2f5d73808b09ff5bf1167871dd5a", "https://esm.sh/v135/@smithy/util-base64@3.0.0/denonext/util-base64.mjs": "d6a01faaa94fdbeb4b92b02e91801dfbe241439e37a0edf7d817c59daf66c0e3", "https://esm.sh/v135/@smithy/util-body-length-browser@3.0.0/denonext/util-body-length-browser.mjs": "d67382004d61919b97a756a454f9b312cfb0011a9727d3d1ca69ebddf1c7843a", "https://esm.sh/v135/@smithy/util-config-provider@3.0.0/denonext/util-config-provider.mjs": "832c0ab1d3b06a51351ea23b33628bd36a37ef570e02e469f6ab39f71d88d7b1", - "https://esm.sh/v135/@smithy/util-defaults-mode-browser@3.0.14/denonext/util-defaults-mode-browser.mjs": "214e0bfe002c216cdb70281a0c41410aa822061333ceb0573669d4d5c9b2852a", - "https://esm.sh/v135/@smithy/util-endpoints@2.0.5/denonext/util-endpoints.mjs": "3876bd3404b820a5fab88bbe3f8ba2a8e373bb0099c9838617ec88f898dd78d0", + "https://esm.sh/v135/@smithy/util-defaults-mode-browser@3.0.27/denonext/util-defaults-mode-browser.mjs": "a67193d0d8e35cef1014aaaae20b4d05354cf940f71fa44247f31e0382e0c919", + "https://esm.sh/v135/@smithy/util-endpoints@2.1.6/denonext/util-endpoints.mjs": "dcfd38eeca677ad66dae39e3f3b7e9ed30c434895c9dfe65918609c7f81ef0ca", "https://esm.sh/v135/@smithy/util-hex-encoding@3.0.0/denonext/util-hex-encoding.mjs": "cbdd7aabeb3903596980e2903efec3e5501f7e1259fb7b97e327a3b4e635f23c", - "https://esm.sh/v135/@smithy/util-middleware@3.0.3/denonext/util-middleware.mjs": "a885e613b933ce02c7c73507e80ef5b81374a55a647cc4bc397bb1f19284a95b", - "https://esm.sh/v135/@smithy/util-retry@3.0.3/denonext/util-retry.mjs": "2bc452ea87cbe471e2bee783776d528fec4afcd083367c1dafd8936e229c64f3", - "https://esm.sh/v135/@smithy/util-stream@3.1.3/denonext/util-stream.mjs": "13b6b4e3c10e0a0586e6fca8a7e3d2d8fea840aecb413337c2d75c0fceb75f37", + "https://esm.sh/v135/@smithy/util-middleware@3.0.10/denonext/util-middleware.mjs": "a2335ac8c8e655bce58853bfda5fd090bac16df94cc4bbf4e416a3eeed16cf46", + "https://esm.sh/v135/@smithy/util-middleware@3.0.9/denonext/util-middleware.mjs": "14b068a8ef2c2fd5ea72afaabfb56bbffa4a3f2e74315b8c207ff860d233bf67", + "https://esm.sh/v135/@smithy/util-retry@3.0.10/denonext/util-retry.mjs": "469002c7c287ebedfc0fd4a52bb3b22f8a0b6a1c5ebee9ba84ac85c7d9a41046", + "https://esm.sh/v135/@smithy/util-stream@3.3.1/denonext/util-stream.mjs": "0f55d86ab6e52188da1f58e2b03bdf52322882e1cf2140c9581410cf450045d3", "https://esm.sh/v135/@smithy/util-uri-escape@3.0.0/denonext/util-uri-escape.mjs": "df2c80781ede692323dee6e2da3711e7ccc4f7a1cee949b09aba8d1ce15bbe03", "https://esm.sh/v135/@smithy/util-utf8@2.0.2/denonext/util-utf8.mjs": "d1869dca8a21b3e6c297cb55f90e1b78bf8f365afd1f173c16d719f28245604b", "https://esm.sh/v135/@smithy/util-utf8@2.3.0/denonext/util-utf8.mjs": "10a9f2014b2b5b2e387e04c1c7974e8219332fa30a6904923f54a46c974c6c84", "https://esm.sh/v135/@smithy/util-utf8@3.0.0/denonext/util-utf8.mjs": "abe704ed8c4266b29906116ef723b98e8729078537b252c9a213ad373559488a", - "https://esm.sh/v135/@smithy/util-waiter@3.1.2/denonext/util-waiter.mjs": "8bff673e4c8b620b34f59cbfa0e6c92de95b3c00190861b5b2cb113923bf8288", + "https://esm.sh/v135/@smithy/util-waiter@3.1.9/denonext/util-waiter.mjs": "42a09843870abe258a66a3f381fafdef5fb1ea33d949b760c33451ff5b965d7f", "https://esm.sh/v135/bowser@2.11.0/denonext/bowser.mjs": "3fd0c5d68c4bb8b3243c1b0ac76442fa90f5e20ee12773ce2b2f476c2e7a3615", "https://esm.sh/v135/fast-xml-parser@4.4.1/denonext/fast-xml-parser.mjs": "506f0ae0ce83e4664b4e2a3bf3cde30b3d44c019012938ab12b76fa38353e864", "https://esm.sh/v135/jszip@3.7.1/denonext/jszip.mjs": "d31d7f9e0de9c6db3c07ca93f7301b756273d4dccb41b600461978fc313504c9", @@ -2139,910 +1051,7 @@ "https://raw.githubusercontent.com/metatypedev/ghjk/v0.2.1/utils/mod.ts": "25901b5a03625353cc0d9c024daca806eb2513b153faede5ecad73b428542721", "https://raw.githubusercontent.com/metatypedev/ghjk/v0.2.1/utils/unarchive.ts": "f6d0e9e75f470eeef5aecd0089169f4350fc30ebfdc05466bb7b30042294d6d3", "https://raw.githubusercontent.com/metatypedev/ghjk/v0.2.1/utils/url.ts": "e1ada6fd30fc796b8918c88456ea1b5bbd87a07d0a0538b092b91fd2bb9b7623", - "https://raw.githubusercontent.com/metatypedev/ghjk/v0.2.1/utils/worker.ts": "ac4caf72a36d2e4af4f4e92f2e0a95f9fc2324b568640f24c7c2ff6dc0c11d62", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/engine/bindings.ts": "7c3e28ec60a0381030310228be6c02f1a434046b4cbcf793a537aaef47be949f", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/engine/runtime.js": "1ae55e76d3de8e79c37054d9127c92af496ce10aa905ea64021893048bb33794", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/config.ts": "63ea402f9a993888a9e3ec88d35112186f8f13bcd3a5fe358e69e0bb603311a5", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/config/loader.ts": "91cc2b67cc9bee413b0b44f9aa2ea7814f50e2465e6bc114eece248554d7477d", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/config/shared.ts": "252b42038eb68059b2cac85c792e36f5849b8e7392b98452341ccc3ee680a774", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/config/types.ts": "73357168542ef041da67997acdd98097444d92f0a1663be03ad1523fd20f768c", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/crypto.ts": "f550775b9e5bf9e7ec286a1596246a631b117fd91e093169bcad4898fb729634", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/computation_engine.ts": "07a3826fcf0bb13eb3912b8e5cbf69932848cd28c1c4ebda7042f977510d00a5", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/planner/args.ts": "de16ba5c087afae319f65d02ab39779146da37ea925f610da8887cffe7828060", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/planner/dependency_resolver.ts": "b851f4a6e2d500f9427dd1a59920d6c71f10904b31863bb1fac4d26e01d02b67", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/planner/injection_utils.ts": "6f9ad0f8f9cde9a985b6ad36bf58418637a85f50749abe6870c792ade7dc45a2", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/planner/mod.ts": "9a4429e7a579903f4f67ab53bd602b2d05a58138bdbd91c7cc5b1b44cf714b68", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/planner/parameter_transformer.ts": "3ba3b9603c6d28c0d54648f8177bce30b8b667e0e1be903d468af3f2645649ff", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/planner/policies.ts": "caf3cfd8a46e21a5d09fdb46882d6ea4ffb376c56070bdb1ccff92fa70989d63", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/query_engine.ts": "39281c309b3d72123fcd8695700bd2831956e09d2b1c082ef899886beea6ae82", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/stage_id.ts": "b3b3c62215ff421103788079b77943af8f0026a56eafaa929415cb39ccde3cca", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/code_generator.ts": "edb77e2b98da2f040d3f7567d204dba2a3d8c66ae1a7c2709c049e464763f0cd", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/common.ts": "b585975e1a978dfa966df1a549261049ab159077bc90203a33bfe8ae055b3c6f", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/inline_validators/common.ts": "112f56c8e590215b0af0c1b46dc84b85cb5b9b43621a52646876c35a43103499", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/inline_validators/constraints.ts": "3237d0acce31aca8b2f2bbc0cae8a82d86f3671fcc7fabc3158037c4f79008f5", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/inline_validators/list.ts": "bd70fef3bc3840cfb6255a518de5fdb3db79a68a4481594475aebcbdd6a10102", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/inline_validators/number.ts": "9890c8af998dca2e573fc2ad02e63d9abc9b506b4a0c451d31f5916a8888e401", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/inline_validators/object.ts": "bd4f8891ee823bf82481df2ee181256514fd7299b5fe4fd7cd7194defa228f57", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/inline_validators/string.ts": "914a2b809a344075279578cb35ac3d03cb6025eb9f62c1f9f86958191b9857da", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/input.ts": "cf24fcffa1891dfc2f2af941a64aade9da069a6ef92baa432e2d7dcf5f9a8b86", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/matching_variant.ts": "aca8db649194921a01aca42b02113d0735262bb63d41ec44174e61c4cfa85369", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/engine/typecheck/result.ts": "6544f206b67c32015950ec96134415c261a60f54c469c1cd73f8accadf87fff6", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/errors.ts": "29dfbfdc8b7a85ee9551831d6db882e50a4e0104102b5885b2bd9a42878365f6", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/libs/jsonpath.ts": "f6851288fb8600dec0e62d5f804f41332b6197b255b6497360ba7e4b7f375cba", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/log.ts": "1330c01d489956c7530e2f2e2e60967f30c6b3a0c5c1d6c18d161ea2cf44fa0e", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/main.ts": "f390cfd2b5b836f1a54fa9ea7d8a5f5ba80430b6e849032145c0a7c0ae7216f3", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/Runtime.ts": "cc476f09f7d32d10dec3812a9a589da2866247e2064ce149ea2dc68fca833730", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/deno.ts": "c893dcf170b38547239d550080a856aca46a788de9922f282bbacf9b5841b5fe", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/deno/deno.ts": "bb0cdad8e785d43f6c59232e214fab82d43476acbcef740f561708b064bae172", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/deno/deno_messenger.ts": "81160c8a9c9817b46b52c4eee15cde880fb3f6b013c3b5110ee07a4c9c7f7a5e", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/deno/shared_types.ts": "34d56aa89c5a34e943a34b623b20d13ca54ab5466ea5313e0543da68b7aebcb1", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/deno/worker.ts": "ffeabab915301a666ac06b28989d5be4b29e600fb2932e25005ec1c9f48aac1d", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/graphql.ts": "5f0f4125367fd5fc43ccb2b8c9e8ba1f9c84348595e70e5ed9870e776d2efed3", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/grpc.ts": "92b2f5214ebe0f7b61e582faa67d6759641feaf788166a939ec6db8d819708da", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/http.ts": "f598a33aa3cafcf37a1f33d84c06bfd0ef5fd768f72837042c83ac6ae1d90762", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/kv.ts": "7d87409d8f93a4f684e1a0aabd020e5f3e559669fe3ca8efee9cd5045fde99dd", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/mod.ts": "26c06f1bff03255c20df97e1a109944b6fd2872acbb27aa97ab38b081fb19d7e", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/patterns/messenger/async_messenger.ts": "40644e011e3a258138ff1fb7a5323754a547016da9c1deb2114cfc471ee28bf0", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/patterns/messenger/lazy_async_messenger.ts": "b93d5e7252231d27d6b76ec4172d67cc23880b78411fb371d0cba2db712e2161", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/prisma.ts": "e4b679c3b5e28a323d72bde5ebbcc113abe0efc8da82d70b3b2e390149c57d84", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/prisma/hooks/generate_schema.ts": "f55ffcb6fdfdfcb29eb5543ac23f89e224fc7e233f4ec598f7c5f44f05eefed2", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/prisma/hooks/mod.ts": "3e33752e3676b538c7016f3ddd4f1f49d75e217c410bcaa6319d33ed987d3c60", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/prisma/hooks/run_migrations.ts": "b94b09ecdc7d81ddcfd7596ae8cfb1ebbc8896d4c67207da627dcd79d19c658c", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/prisma/migration.ts": "f501540557b13a32f7b57e5a87f4ae1794cdd95214a49b34a429d7a33a96d5d8", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/prisma/mod.ts": "a0e44e86a45aad8b2bb0357ddbe8ba02802e6979451553940ec3688be571127f", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/prisma/prisma.ts": "bc370cfcb0f2aad520b8d2fd082e18dad5d41386225b50c9ce577b6c45df55b3", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/prisma/types.ts": "b4912f164aa8cdb1db3a98238a0271882864ff2778c10920dd7f0f3d59165dd6", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/python.ts": "77e7f683830962365ce7ce0af5fc5d326e11bc9751ab33d7add16d27feb32633", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/random.ts": "e7651e262ef5857e777ad46877c66f9098a2dfe774c13720a4cd38be327b53ff", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/s3.ts": "d7a0372faf555180bd4326550c1c6a07b156d3c5f0bbbcf9c0f6eb4b0f2bfff1", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/substantial.ts": "175644d75911d09919c06577bfa86239b3a44b1217664035551ff0989e22882a", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/substantial/agent.ts": "223288cb3d7baa02fa2d4e37207da7fa69cf4f16eb04ed7810d3e91ac725615b", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/substantial/types.ts": "8255ea84c5129ffc049d6fa88ad57eadf298d420ff11782c43eae9d2031efed1", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/substantial/workflow_worker_manager.ts": "589611456b82df0637db5f63af0881a459747d7c8963684bdcde291af13515cd", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/temporal.ts": "fef8a8f70d3f75957a5a741c275abea96cc492722784ea4aadffd9fce9cbff3f", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/typegate.ts": "52d49471d2682c1be323b53e4cca9866f2babb93708a855daa8c471ba4174b64", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/typegraph.ts": "e5808e5a20080fc260e54113e5941e5dffaeead5e3b7448dc17a48031d4799cf", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/utils/graphql_forward_vars.ts": "f0bb091aadd191eb1491dd86b7abd311ab60e09f532d226c8328b2cfa6025d9e", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/utils/graphql_inline_vars.ts": "9c3c339ee596c93cf65cda696d756c9ef08d34b78e4136472e27a92f2254ec8a", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/utils/http.ts": "842af99040fd0e3456690f7674311da3a0b9ea64c608d7bc588df1ab28f163a3", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/wasm_reflected.ts": "99d59cdd0c4b228c42ac90099036ecf5d2e14d6758916b27e4017d53b69cf481", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/wasm_wire.ts": "d10c891f12c9521bcd1a7e1cb459f642a5f4e0936f25f4e04174141691ba06d1", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/runtimes/wit_wire/mod.ts": "78ff89ee3972aafd73be8965e1f682b5877c9d1fc4ec2bce0db09f7bc13a0252", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/artifact_service.ts": "282a9a6c3d89afc8955aabab6b3b242edccba664f5f41558e9c9b07d43dd8d13", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/cookies.ts": "ee17535cb19eab884732cefcdc46e63a2905041d5b5942e9ad6783c50a1f8624", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/mod.ts": "5b15823ec19cec1c985a77d525ee2e9e5c5aa367f5e24c96e305e485b6c633a9", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/protocols/basic.ts": "3c233ae1ccd0d3a8ff47a32c74682921abaf84e0de7c096f220f63b05756fc58", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/protocols/internal.ts": "7a9173406fbc1b885e08dd74a8dd34f168de2f1e9bedef4cdd88dad613e59166", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/protocols/jwt.ts": "e39249df7c2d088da07af1ccf5e97815addb46a994469efd4a335f6ae8618bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/protocols/oauth2.ts": "7172cc6da5ecba71775bbc2d467d52d1f78505204e55452170f35004923b847b", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/protocols/protocol.ts": "158c55618be6165a9ee393ccd1a9da267b084ff04df7e627af1e4fc8fe636644", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/routes/mod.ts": "8fe85c16feb3da7086d3d6fd19a4579585b632893f3534c533c60aed84b9413a", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/routes/take.ts": "bc343c5d34870aeeaf9b0cc9473ba18fe7b324a23a630a57c9fd41eea4418a46", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/auth/routes/validate.ts": "56e52bb6d1660735683bdd398a86936f24ad8a00e402b7d88790867ad559e476", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/graphql_service.ts": "458e3cedcd22a44e166e531bcac4c65972916d81f3776c8161b2440ad212626f", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/info_service.ts": "a9a1f6ebdcbe64d55806597b879dd5714c32b8b861bed695a944f5e2f1213beb", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/middlewares.ts": "8af6277ce67c940564538f4def8e6567b5783b51f7c5f38c902736d620ffe405", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/playground_service.ts": "2cc8689899be7c31ad6c2e9c2c5adde0c6cc1f1442b27a55e8ead830e867dbe5", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/responses.ts": "5c45923c1374aab1ac8dd5b1a09ae69062ab34a448f8e92630678a236e38b2ba", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/services/rest_service.ts": "ae6ffdbddaccdbc7ed11dfb86511f2917332dcf5ae22ed814e1059e640ff7b08", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/sync/replicated_map.ts": "6b94fb884ce81d7e17572ae0abbeb91ceadb31f9356c4e9255982a00edcfe729", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/sync/typegraph.ts": "78120bc4d35e728ed86a98781c5d60996050fa8b35fa91f563c3c8b2a964b5dd", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/system_typegraphs.ts": "51299d60c1bb75b3e74998eb77bdf1680ee9d4a2f29a267d3ca90b2867c577fb", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/transports/graphql/gq.ts": "78435e53ec1c5b7aec29364c051eb8f10802714050d24ee68a65e1e263495d7d", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/transports/graphql/graphql.ts": "9f4aa79276e05acc6020da2a18472a1cc54c0ecf42efcbf017d67a88b0b90af2", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/transports/graphql/request_parser.ts": "afbc95debcb1bbfa6fc2b88937d7abedbed1f4335bb2d17bf98c7293761cfdb0", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/transports/graphql/typegraph.ts": "fc0ba3f62e1dd687a0545adb1dbaf7185176e0f1e938bfdd29cfef7f85951635", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/transports/graphql/utils.ts": "d09147add80f5e53a643ed3126ee8675a1655480728311de2def04ffe6262a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/transports/rest/rest_schema_generator.ts": "c776e83c6a55e9bee3ec72c36c1d771b3ca711e4086b3728e4983ab866472624", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegate/artifacts/local.ts": "d36ece0f53a56922744dd4d3e170101466b3816ba136f9574e799880e27d1a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegate/artifacts/mod.ts": "fc931ffd49dc168da12882acf1055d3252e0cb3b666928e67d08d2a6c5be3447", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegate/artifacts/shared.ts": "5061a07eb880e33c1543e7397e945d50b476ed51d81fc01d109c53295f089131", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegate/hooks.ts": "ea97c08285388300802676d03dbc06caadf060093736abce07ef8f99a60e9a04", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegate/memory_register.ts": "6eab24914a941f85c233037013dc13749d8b689c5f9ffb38600df4c7b00a94f0", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegate/mod.ts": "d9f10b53a40192863a431c6be541effb4fd3c012ed8a716712d5176eba8c884a", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegate/no_limiter.ts": "1e98610a737bd74668f80b7014c64669a59a801355340eaa14411e07f4a8a94e", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegate/rate_limiter.ts": "b5718ab9e718314f11f5d88d84795bd0e61575856470793f1fe83d499f4a9d40", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegate/register.ts": "d7a8732386ad019d4dcee0372b6cab93bfc55e0146729842db2aaecf1411b15d", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegraph/mod.ts": "27c917783dd8cf99d06290c0768e852ab348c3e989e47c77e648ffcc564b79fb", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegraph/type_node.ts": "7f721cd5f6da2cbc7e66b804e0f81e0429aa2893e0a93244f9e66b39cb96b1a0", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegraph/types.ts": "fc813b5f18e71b58e5f7904cd7fe3d6cae38b3c7055a8875042588c1561df160", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegraph/utils.ts": "66fe8e1b5072f52ea2efebc5cf42001c3b858068b2d970ee3c8558032ff53103", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegraph/versions.ts": "cdab4b07960f78c1f18511a8cc464a7e97c4c1fd15c6e8678c109483d3c26508", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegraph/visitor.ts": "0fb0f89d92cb1654c1b010494a14c1aad88c7923102ea3e89866b232d3bcdf04", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegraphs/introspection.json": "bbcf2c4233371c7f36052e5fe9e1cb1d18a46d3f31391cfcba2a3063c9141adb", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegraphs/prisma_migration.json": "dfc346ff8fc2cef611c8f172b90e9d13eae6fed8b3dd65dea8631f9533159173", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/typegraphs/typegate.json": "bc0cbf4cd2c5de34410779994240993db4f1dd3d1eeda10b6045efdc37eb48a4", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/types.ts": "a36918c2bfab397edec906c23d2cd7558246337bb16fdf1ea4e353cffea5f2b4", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/utils.ts": "de1a17260e76607e1a8fd6d7384cbc21bb26e08f64bffc41d6508bf5a8359311", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/utils/hash.ts": "df6cf462c7a6a805b91dce9d3e7bbbd00ea3bfd8dcc973fb3e6c94e48e33d9b9", - "https://raw.githubusercontent.com/metatypedev/metatype/43faf1107eae75aacd3cb30d46ad0fba368eba7e/src/typegate/src/worker_utils.ts": "19f686d729b947ab3eb2f29e99ccd07578037a3bccced65fc0dce42d5338cd31", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/engine/bindings.ts": "4529b86703a1512302164bca346c29df2a246d0ebbf20248cc39ee9745490dc1", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/engine/runtime.js": "1ae55e76d3de8e79c37054d9127c92af496ce10aa905ea64021893048bb33794", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/config.ts": "63ea402f9a993888a9e3ec88d35112186f8f13bcd3a5fe358e69e0bb603311a5", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/config/loader.ts": "91cc2b67cc9bee413b0b44f9aa2ea7814f50e2465e6bc114eece248554d7477d", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/config/shared.ts": "252b42038eb68059b2cac85c792e36f5849b8e7392b98452341ccc3ee680a774", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/config/types.ts": "73357168542ef041da67997acdd98097444d92f0a1663be03ad1523fd20f768c", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/crypto.ts": "f550775b9e5bf9e7ec286a1596246a631b117fd91e093169bcad4898fb729634", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/computation_engine.ts": "07a3826fcf0bb13eb3912b8e5cbf69932848cd28c1c4ebda7042f977510d00a5", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/planner/args.ts": "de16ba5c087afae319f65d02ab39779146da37ea925f610da8887cffe7828060", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/planner/dependency_resolver.ts": "b851f4a6e2d500f9427dd1a59920d6c71f10904b31863bb1fac4d26e01d02b67", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/planner/injection_utils.ts": "6f9ad0f8f9cde9a985b6ad36bf58418637a85f50749abe6870c792ade7dc45a2", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/planner/mod.ts": "9a4429e7a579903f4f67ab53bd602b2d05a58138bdbd91c7cc5b1b44cf714b68", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/planner/parameter_transformer.ts": "3ba3b9603c6d28c0d54648f8177bce30b8b667e0e1be903d468af3f2645649ff", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/planner/policies.ts": "caf3cfd8a46e21a5d09fdb46882d6ea4ffb376c56070bdb1ccff92fa70989d63", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/query_engine.ts": "dbbbe1f233f67fae4e0574ab8ceafe3f4a03f3c62fa0a9f7cc8d02c44fe79bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/stage_id.ts": "b3b3c62215ff421103788079b77943af8f0026a56eafaa929415cb39ccde3cca", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/code_generator.ts": "edb77e2b98da2f040d3f7567d204dba2a3d8c66ae1a7c2709c049e464763f0cd", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/common.ts": "b585975e1a978dfa966df1a549261049ab159077bc90203a33bfe8ae055b3c6f", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/inline_validators/common.ts": "112f56c8e590215b0af0c1b46dc84b85cb5b9b43621a52646876c35a43103499", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/inline_validators/constraints.ts": "3237d0acce31aca8b2f2bbc0cae8a82d86f3671fcc7fabc3158037c4f79008f5", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/inline_validators/list.ts": "bd70fef3bc3840cfb6255a518de5fdb3db79a68a4481594475aebcbdd6a10102", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/inline_validators/number.ts": "9890c8af998dca2e573fc2ad02e63d9abc9b506b4a0c451d31f5916a8888e401", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/inline_validators/object.ts": "bd4f8891ee823bf82481df2ee181256514fd7299b5fe4fd7cd7194defa228f57", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/inline_validators/string.ts": "914a2b809a344075279578cb35ac3d03cb6025eb9f62c1f9f86958191b9857da", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/input.ts": "e34fec32501c9e4d9b427b097fd6565f54065562e101732e62b4c2799e60288c", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/matching_variant.ts": "aca8db649194921a01aca42b02113d0735262bb63d41ec44174e61c4cfa85369", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/engine/typecheck/result.ts": "6544f206b67c32015950ec96134415c261a60f54c469c1cd73f8accadf87fff6", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/errors.ts": "29dfbfdc8b7a85ee9551831d6db882e50a4e0104102b5885b2bd9a42878365f6", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/libs/jsonpath.ts": "f6851288fb8600dec0e62d5f804f41332b6197b255b6497360ba7e4b7f375cba", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/log.ts": "1330c01d489956c7530e2f2e2e60967f30c6b3a0c5c1d6c18d161ea2cf44fa0e", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/main.ts": "f390cfd2b5b836f1a54fa9ea7d8a5f5ba80430b6e849032145c0a7c0ae7216f3", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/Runtime.ts": "30ec531890bc626953fe16e0a6882c61b05c9cdab8858727662fbf29998df274", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/deno.ts": "c893dcf170b38547239d550080a856aca46a788de9922f282bbacf9b5841b5fe", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/deno/deno.ts": "9964279b30ab39827cb1691484adb84a04d764ba2746122af0dfcba13caa39e3", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/deno/deno_messenger.ts": "81160c8a9c9817b46b52c4eee15cde880fb3f6b013c3b5110ee07a4c9c7f7a5e", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/deno/shared_types.ts": "34d56aa89c5a34e943a34b623b20d13ca54ab5466ea5313e0543da68b7aebcb1", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/deno/worker.ts": "2397af9b517b332ef5df2ffea7d537170084b0c6e3155f62a045ad5c0d557a3b", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/graphql.ts": "5f0f4125367fd5fc43ccb2b8c9e8ba1f9c84348595e70e5ed9870e776d2efed3", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/grpc.ts": "92b2f5214ebe0f7b61e582faa67d6759641feaf788166a939ec6db8d819708da", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/http.ts": "f598a33aa3cafcf37a1f33d84c06bfd0ef5fd768f72837042c83ac6ae1d90762", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/kv.ts": "ea5365bf5cb3a2c1a7a82482d4b5c1f9fb5e84ed331edce4187464a4ca4e5801", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/mod.ts": "26c06f1bff03255c20df97e1a109944b6fd2872acbb27aa97ab38b081fb19d7e", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/patterns/messenger/async_messenger.ts": "40644e011e3a258138ff1fb7a5323754a547016da9c1deb2114cfc471ee28bf0", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/patterns/messenger/lazy_async_messenger.ts": "b93d5e7252231d27d6b76ec4172d67cc23880b78411fb371d0cba2db712e2161", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/prisma.ts": "e4b679c3b5e28a323d72bde5ebbcc113abe0efc8da82d70b3b2e390149c57d84", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/prisma/hooks/generate_schema.ts": "f55ffcb6fdfdfcb29eb5543ac23f89e224fc7e233f4ec598f7c5f44f05eefed2", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/prisma/hooks/mod.ts": "3e33752e3676b538c7016f3ddd4f1f49d75e217c410bcaa6319d33ed987d3c60", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/prisma/hooks/run_migrations.ts": "aa21425f2383068d08accf99e40ca31046a3f8cec30bf5302a345fbf7fda019f", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/prisma/migration.ts": "f501540557b13a32f7b57e5a87f4ae1794cdd95214a49b34a429d7a33a96d5d8", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/prisma/mod.ts": "a0e44e86a45aad8b2bb0357ddbe8ba02802e6979451553940ec3688be571127f", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/prisma/prisma.ts": "9ec0f38674728229d053aff19b4f411852390c08c2886c0944d49c8d13ebfa2f", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/prisma/types.ts": "b4912f164aa8cdb1db3a98238a0271882864ff2778c10920dd7f0f3d59165dd6", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/python.ts": "4a067d196fbcce2978207de7dc61c734dcdc77f0100739080ae341af3c352adf", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/random.ts": "e7651e262ef5857e777ad46877c66f9098a2dfe774c13720a4cd38be327b53ff", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/s3.ts": "d7a0372faf555180bd4326550c1c6a07b156d3c5f0bbbcf9c0f6eb4b0f2bfff1", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/substantial.ts": "175644d75911d09919c06577bfa86239b3a44b1217664035551ff0989e22882a", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/substantial/agent.ts": "223288cb3d7baa02fa2d4e37207da7fa69cf4f16eb04ed7810d3e91ac725615b", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/substantial/types.ts": "8255ea84c5129ffc049d6fa88ad57eadf298d420ff11782c43eae9d2031efed1", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/substantial/workflow_worker_manager.ts": "589611456b82df0637db5f63af0881a459747d7c8963684bdcde291af13515cd", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/temporal.ts": "ff8a21af119e67e30c4cb31f7ac677555ac3945fa6f94431c4535009bf9a4c9c", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/typegate.ts": "52d49471d2682c1be323b53e4cca9866f2babb93708a855daa8c471ba4174b64", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/typegraph.ts": "e5808e5a20080fc260e54113e5941e5dffaeead5e3b7448dc17a48031d4799cf", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/utils/graphql_forward_vars.ts": "f0bb091aadd191eb1491dd86b7abd311ab60e09f532d226c8328b2cfa6025d9e", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/utils/graphql_inline_vars.ts": "9c3c339ee596c93cf65cda696d756c9ef08d34b78e4136472e27a92f2254ec8a", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/utils/http.ts": "842af99040fd0e3456690f7674311da3a0b9ea64c608d7bc588df1ab28f163a3", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/wasm_reflected.ts": "99d59cdd0c4b228c42ac90099036ecf5d2e14d6758916b27e4017d53b69cf481", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/wasm_wire.ts": "d10c891f12c9521bcd1a7e1cb459f642a5f4e0936f25f4e04174141691ba06d1", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/runtimes/wit_wire/mod.ts": "ab031dcd7ad66861fe30c3bf6da8b545a7ef4a26a9610da849f73cd8a1e58fae", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/artifact_service.ts": "282a9a6c3d89afc8955aabab6b3b242edccba664f5f41558e9c9b07d43dd8d13", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/cookies.ts": "ee17535cb19eab884732cefcdc46e63a2905041d5b5942e9ad6783c50a1f8624", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/mod.ts": "5b15823ec19cec1c985a77d525ee2e9e5c5aa367f5e24c96e305e485b6c633a9", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/protocols/basic.ts": "3c233ae1ccd0d3a8ff47a32c74682921abaf84e0de7c096f220f63b05756fc58", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/protocols/internal.ts": "7a9173406fbc1b885e08dd74a8dd34f168de2f1e9bedef4cdd88dad613e59166", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/protocols/jwt.ts": "e39249df7c2d088da07af1ccf5e97815addb46a994469efd4a335f6ae8618bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/protocols/oauth2.ts": "7172cc6da5ecba71775bbc2d467d52d1f78505204e55452170f35004923b847b", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/protocols/protocol.ts": "158c55618be6165a9ee393ccd1a9da267b084ff04df7e627af1e4fc8fe636644", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/routes/mod.ts": "8fe85c16feb3da7086d3d6fd19a4579585b632893f3534c533c60aed84b9413a", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/routes/take.ts": "bc343c5d34870aeeaf9b0cc9473ba18fe7b324a23a630a57c9fd41eea4418a46", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/auth/routes/validate.ts": "56e52bb6d1660735683bdd398a86936f24ad8a00e402b7d88790867ad559e476", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/graphql_service.ts": "458e3cedcd22a44e166e531bcac4c65972916d81f3776c8161b2440ad212626f", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/info_service.ts": "a9a1f6ebdcbe64d55806597b879dd5714c32b8b861bed695a944f5e2f1213beb", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/middlewares.ts": "8af6277ce67c940564538f4def8e6567b5783b51f7c5f38c902736d620ffe405", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/playground_service.ts": "2cc8689899be7c31ad6c2e9c2c5adde0c6cc1f1442b27a55e8ead830e867dbe5", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/responses.ts": "5c45923c1374aab1ac8dd5b1a09ae69062ab34a448f8e92630678a236e38b2ba", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/services/rest_service.ts": "ae6ffdbddaccdbc7ed11dfb86511f2917332dcf5ae22ed814e1059e640ff7b08", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/sync/replicated_map.ts": "6b94fb884ce81d7e17572ae0abbeb91ceadb31f9356c4e9255982a00edcfe729", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/sync/typegraph.ts": "78120bc4d35e728ed86a98781c5d60996050fa8b35fa91f563c3c8b2a964b5dd", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/system_typegraphs.ts": "51299d60c1bb75b3e74998eb77bdf1680ee9d4a2f29a267d3ca90b2867c577fb", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/transports/graphql/gq.ts": "78435e53ec1c5b7aec29364c051eb8f10802714050d24ee68a65e1e263495d7d", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/transports/graphql/graphql.ts": "9f4aa79276e05acc6020da2a18472a1cc54c0ecf42efcbf017d67a88b0b90af2", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/transports/graphql/request_parser.ts": "afbc95debcb1bbfa6fc2b88937d7abedbed1f4335bb2d17bf98c7293761cfdb0", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/transports/graphql/typegraph.ts": "fc0ba3f62e1dd687a0545adb1dbaf7185176e0f1e938bfdd29cfef7f85951635", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/transports/graphql/utils.ts": "d09147add80f5e53a643ed3126ee8675a1655480728311de2def04ffe6262a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/transports/rest/rest_schema_generator.ts": "c776e83c6a55e9bee3ec72c36c1d771b3ca711e4086b3728e4983ab866472624", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegate/artifacts/local.ts": "d36ece0f53a56922744dd4d3e170101466b3816ba136f9574e799880e27d1a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegate/artifacts/mod.ts": "13583fb57bb5280e26c50ae89834ab73b123b712eb14a1995af00267304fef97", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegate/artifacts/shared.ts": "5061a07eb880e33c1543e7397e945d50b476ed51d81fc01d109c53295f089131", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegate/hooks.ts": "ea97c08285388300802676d03dbc06caadf060093736abce07ef8f99a60e9a04", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegate/memory_register.ts": "6eab24914a941f85c233037013dc13749d8b689c5f9ffb38600df4c7b00a94f0", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegate/mod.ts": "ce468fd7d0a32676f2867bf183c73e59da063f0a5ad3f0cde05d5f40e2bbf280", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegate/no_limiter.ts": "1e98610a737bd74668f80b7014c64669a59a801355340eaa14411e07f4a8a94e", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegate/rate_limiter.ts": "b5718ab9e718314f11f5d88d84795bd0e61575856470793f1fe83d499f4a9d40", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegate/register.ts": "d7a8732386ad019d4dcee0372b6cab93bfc55e0146729842db2aaecf1411b15d", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegraph/mod.ts": "3401f26beae423b008480460495cf7a22791a53cce65fd0a941c34e4b65ee5b0", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegraph/type_node.ts": "7f721cd5f6da2cbc7e66b804e0f81e0429aa2893e0a93244f9e66b39cb96b1a0", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegraph/types.ts": "fc813b5f18e71b58e5f7904cd7fe3d6cae38b3c7055a8875042588c1561df160", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegraph/utils.ts": "66fe8e1b5072f52ea2efebc5cf42001c3b858068b2d970ee3c8558032ff53103", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegraph/versions.ts": "cdab4b07960f78c1f18511a8cc464a7e97c4c1fd15c6e8678c109483d3c26508", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegraph/visitor.ts": "0fb0f89d92cb1654c1b010494a14c1aad88c7923102ea3e89866b232d3bcdf04", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegraphs/introspection.json": "bbcf2c4233371c7f36052e5fe9e1cb1d18a46d3f31391cfcba2a3063c9141adb", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegraphs/prisma_migration.json": "dfc346ff8fc2cef611c8f172b90e9d13eae6fed8b3dd65dea8631f9533159173", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/typegraphs/typegate.json": "bc0cbf4cd2c5de34410779994240993db4f1dd3d1eeda10b6045efdc37eb48a4", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/types.ts": "a36918c2bfab397edec906c23d2cd7558246337bb16fdf1ea4e353cffea5f2b4", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/utils.ts": "de1a17260e76607e1a8fd6d7384cbc21bb26e08f64bffc41d6508bf5a8359311", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/utils/hash.ts": "df6cf462c7a6a805b91dce9d3e7bbbd00ea3bfd8dcc973fb3e6c94e48e33d9b9", - "https://raw.githubusercontent.com/metatypedev/metatype/54558c719cf3d491c396af019a50b68159c5209f/src/typegate/src/worker_utils.ts": "19f686d729b947ab3eb2f29e99ccd07578037a3bccced65fc0dce42d5338cd31", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/engine/bindings.ts": "e9391491bf5c4f682267a5cb4ae384ef33ed7c15273fcada13bea7b064cf1270", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/engine/runtime.js": "1ae55e76d3de8e79c37054d9127c92af496ce10aa905ea64021893048bb33794", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/config.ts": "289820b743711beb9139bca83556f60774521f3c58addd5c441ae3205ef49e61", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/config/loader.ts": "f46ed5199db89c6e5ebe5accb1cd7561a22cb8a158dfc86b371956d3002662cb", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/config/shared.ts": "b2cc53588d6651b5261de312c4b92f517f0b764cd95eb1b8771e46c3f46376a0", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/config/types.ts": "77f7051cece41b67b47471511496e35b76bd7eda0ba10cdcd02fda261ca0ed13", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/crypto.ts": "00efcbf7906e66105a5b18f1654cd78bc05f8b2ed755cc4be9f5755f49a577c3", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/computation_engine.ts": "9fb3033c491a17aec92757a1b7c299fa5c5197dff666b86f074beebc643d239f", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/planner/args.ts": "2eecd557a4cde56ebdfbbdf998bff4386fcd0b79007a7ba5fc1d2c71f57f3a85", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/planner/dependency_resolver.ts": "98c9505a700ad0cd74fac327e7258aae6bbd60cd60587a4ec56bcfe57cf6fe79", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/planner/injection_utils.ts": "21a0b4117e00c48533a83bd2985046eb4510aba3c331c02bf64920d719d282bc", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/planner/mod.ts": "a90671e394e0ade1e47a1d1bf65560fc06d8d14531f062f902254e761d01bdb3", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/planner/parameter_transformer.ts": "953d7c970141e44e29be72d79cc253ab26ea5a366a2f4bcd43ec6c73203737ca", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/planner/policies.ts": "0ef1f49f06d17e1df8e8ec0108bdf1458fcf95b42be8fbdb0c1357b46a5020a2", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/query_engine.ts": "152e96d3c4f5e1161f974ca36c2034ea3d3ef56f548fa64bbb4563dd2ed7d6dc", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/stage_id.ts": "b3b3c62215ff421103788079b77943af8f0026a56eafaa929415cb39ccde3cca", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/code_generator.ts": "adb81b215a10bbf73f00b910d75e953dd8f630d3dd590e6c85323cae4da6b608", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/common.ts": "bf2174d58cc898f094c5e353e43988888922dfbf6878e75619594f5de5498843", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/inline_validators/common.ts": "112f56c8e590215b0af0c1b46dc84b85cb5b9b43621a52646876c35a43103499", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/inline_validators/constraints.ts": "f173ed12173c92b3eca2b306973dee34e18feeccd2c4c51f11fe98216e7d80e7", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/inline_validators/list.ts": "d6ea1984e6dd3e422173b5252fb5e10d27f216c7051aad1452250a0454c465d5", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/inline_validators/number.ts": "aebeb91359a8edcc444b1a229dbca67cefd910837e771f4f18eba0070bdd80bc", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/inline_validators/object.ts": "1c10be974a2ba3b2b60072c34af84497cd099f263fb8223ebe763bccb7ec451a", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/inline_validators/string.ts": "7ea1e1661e54d093a56df7be22ee8590940efd3a230317ebc80b0978a0de5ce4", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/input.ts": "f6f00f03d82288804a31852a65ec89f021134591a6888e9972ea7512bb41aecd", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/matching_variant.ts": "6a9c0232b61fd9a20bd35cc4caa2350901504655bacad839fa275b24f9292e45", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/engine/typecheck/result.ts": "494f6a0b58cf7ee9e27fbae65de71a33e1659efcff428be51dd158824096f247", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/errors.ts": "3314988ebc9d7a5e3033239a9cfba752020144b8bfd9cacd3d3fc46d0ea30644", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/libs/jsonpath.ts": "f6851288fb8600dec0e62d5f804f41332b6197b255b6497360ba7e4b7f375cba", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/log.ts": "a44dca4a37baef59ee50bd44b4ee12c77fd57bd57c0bc09aab8016c2550b1b32", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/main.ts": "af5c054d8188afa43b3f5cf3f779a3b0fe2c2bccf2cb7dbde942f469a0ebaad7", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/Runtime.ts": "6fba220b09e69aefca2e4e5a77eaf830906dece0fa4b500d878edb6c6463953c", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/deno.ts": "c893dcf170b38547239d550080a856aca46a788de9922f282bbacf9b5841b5fe", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/deno/deno.ts": "9f5c74dd2b70f0259e9891b62907720e0f77117a34e69f40efd3e080c39acc6c", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/deno/deno_messenger.ts": "18ee6e6797702955744bc2a11e37e4e3cdccdbf249cc4877cbacaeb3aa66775c", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/deno/shared_types.ts": "2ef1fa347c241162a8a32cebb1113b20f94326c4b20b0883e72b79bb879e5d07", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/deno/worker.ts": "fabc721575f048d8e4ca960e41dcda57b7103151b606a736ac0358dd7c418bc6", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/graphql.ts": "a03a5f3e1d538f736c9691074e67e6b4d8bfa880bd7e49918216d8dcd6226acb", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/http.ts": "580b43b0db099a0c5ac3aa971c74fe78bee8e95addc2369d1a827fcc6e15033e", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/kv.ts": "22fbb14530eee945ebc85bf157f1d03fef98ec96653c945815fd85c5888ac51e", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/mod.ts": "e01fe4ae085c2170ffacc659bab6d829bbf7a513c3574b15e964c32eddf2e8d1", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/patterns/messenger/async_messenger.ts": "5457677d4b44abc060cb7c625a66fd4db231206df656bfc41b5a2e017833eea2", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/patterns/messenger/lazy_async_messenger.ts": "744b0e499ef5a8cdb10f35c5c8570984cac7a00f64d85c1374dabf00624b0397", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/patterns/messenger/types.ts": "23ddb7d12e4d049158ffefdb0b8f00ff9c8b7c1c31637b101e391f89ae6e8a97", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/prisma.ts": "e4b679c3b5e28a323d72bde5ebbcc113abe0efc8da82d70b3b2e390149c57d84", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/prisma/hooks/generate_schema.ts": "70e8b612f4c771dd607233cede7036f7d343702086a8d9cd3904d8e947daac90", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/prisma/hooks/mod.ts": "3e33752e3676b538c7016f3ddd4f1f49d75e217c410bcaa6319d33ed987d3c60", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/prisma/hooks/run_migrations.ts": "456398f2300b8da1b870db6e84524c5920e57c7bcf15d8a5f3e1323199f26170", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/prisma/migration.ts": "3dae1ae03546123ffc2bee76a5d049ab76cf8724fdf353b0c610f6e86364ab2d", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/prisma/mod.ts": "a0e44e86a45aad8b2bb0357ddbe8ba02802e6979451553940ec3688be571127f", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/prisma/prisma.ts": "c36709efd13ea0553d552483d8a268c2432276a932144428bcaac869e2913ca4", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/prisma/types.ts": "44e221d8143e314e8db39b62e245518a290bf4248ace208a755d0aa1a5af99bb", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/python.ts": "32825eba0eb6680fa97933535a96ae80e09e7bd0d207b0385dd3da8cf843bbec", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/random.ts": "2f65216d0bd56953af78938151f697f11e7c22a1ac0c68d15f85940c5fd49a1d", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/s3.ts": "c9f027361982be38ce4b157d9779ff9a2cb6b6b686fb749eb600d0bb73447ae5", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/temporal.ts": "b31d30777e71ae4c8d2ac1cdf522b7b498d545d0c60c2fb4e76c685f3e2c49ee", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/typegate.ts": "ef7fc75335d947e9afce79418bb3802a4a174ad68b4b4b719232fe7df5d78040", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/typegraph.ts": "55b5d9b6a4a0d536a06d63b57e863f12f3dae38b2b421f205c50340424e43f7f", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/utils/graphql_forward_vars.ts": "5faf28e955a0e950a5c79bc3ceb68d9c4a14df3dd2e94dd867e063de6ae1da88", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/utils/graphql_inline_vars.ts": "f69ace5ac7509f3ce33c0b31b73597372efba42eac09948ab5e8e6d38b37e3a3", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/utils/http.ts": "842af99040fd0e3456690f7674311da3a0b9ea64c608d7bc588df1ab28f163a3", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/wasm_reflected.ts": "b3562d7cafc777625f9cc06d74fcac9634d64ab5d191f2e7742155e7426377e0", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/wasm_wire.ts": "d3e53d0eab0482bd9d222897a147d5afa4ea5e31b66b7b98d40b5f13f39e9f7b", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/runtimes/wit_wire/mod.ts": "229fe56d4ffa6aa7a2242b89712664701d6e0e75a9072d345372bc5b834645fe", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/artifact_service.ts": "b910693b1ed6b8ae4ed4036b0e4c423313870cce514cde7095c6dd8f03234bd9", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/cookies.ts": "ebe37f0ff356df71cb72911bb17c13744dba9ebcd5e0eb69abf41d73cf179ee8", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/mod.ts": "0fd5fa8dc8d2278df02a93b457fbb4042261871e57985719e70e39fe491b00f0", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/protocols/basic.ts": "a4361603e15ab387ec4db8664965ecae15457eeb6503f65bc8a11bf7f87a3a6a", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/protocols/internal.ts": "a93b3234a46f4de9e726582d024a3c73114a195560ac59a9e31ad0b3cf397f39", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/protocols/jwt.ts": "f779924412dc01fc557beb200b52198382dc01345e14deb4bf8af9324e1bdbb6", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/protocols/oauth2.ts": "3a6db9349f0e5c8210480eeea26f6c8e26bf2f5df3b5c2a509ac1f3428b214c7", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/protocols/protocol.ts": "158c55618be6165a9ee393ccd1a9da267b084ff04df7e627af1e4fc8fe636644", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/routes/mod.ts": "70ceac64f3e868d5b00b21bd5094b149374f0be487293ad4098415663999320d", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/routes/take.ts": "21304fcbfa9e9f92f240121ac2fad677b315ca1f7e55ec5e6f2905d1ccdeb1aa", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/auth/routes/validate.ts": "f8a2a7f4fa58dac1f10f89dd76d8ec5a4d7ce7e98ddd1d8e56a178c9f6158eaa", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/graphql_service.ts": "c84b8cda35ceb0991d232ff2cfe468f5a93fb19440b594b23eb79dfb3ce31ea7", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/info_service.ts": "a9a1f6ebdcbe64d55806597b879dd5714c32b8b861bed695a944f5e2f1213beb", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/middlewares.ts": "b870a0f9e70880f020510b64d19e0e23450656490ac117192398bafdb00c0ccd", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/playground_service.ts": "d293851d3a5f4d3b196115a38b87d9c4826355290e42c1c1a586604bbbaffd6e", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/responses.ts": "374620f4f7bd96bacb582247f75e279906bff7dee4a1ae107364ba2fbef0b192", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/services/rest_service.ts": "316c7ece7785dc6a39b38e780915057834f3466d5274d49c849d5833bb772dcf", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/sync/replicated_map.ts": "8f7a1686ebd4c195074549771f27ca039398c6976022da79d204548c9a8e1188", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/sync/typegraph.ts": "9166892f76ca69956dc1300822834a7545886370ef83bdb61a92597dae6b6256", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/system_typegraphs.ts": "ada9d4dc74174078eb502dc707e91b628eae97fb729b90cffd7d59715dcff52f", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/transports/graphql/gq.ts": "341e066e10eb424c17095fe8cc65bbddc9cdfcdd51ecd82dd4905a50c3db8e82", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/transports/graphql/graphql.ts": "fd36d55366b2d0736580a2d8a7c408b6070ad7291db3cfbba37a6ed06ad01733", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/transports/graphql/request_parser.ts": "afbc95debcb1bbfa6fc2b88937d7abedbed1f4335bb2d17bf98c7293761cfdb0", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/transports/graphql/typegraph.ts": "e79b5acd4993a902ca4104f30075931bda49c140a5297920b644d6d3f4712ef2", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/transports/graphql/utils.ts": "ab4ee0fe51e53b4b21f7f2cfc4c77513a47d641a0bfe6822ceb46a7d8128adb9", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/transports/rest/rest_schema_generator.ts": "80d22818682b9856368dd87bf3085d6d7f53b7facf3412956588666b518bb8e5", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegate/artifacts/local.ts": "9405ef3cb3775a25d80b12f49aace608ecce7e18c29ed59196709b1e6a408d9c", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegate/artifacts/mod.ts": "ddc5d09342d9fe74b513fc0db52f0c6900d091d5cb9871b8434af0dbec854ae9", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegate/artifacts/shared.ts": "56ab2fc8250ccb7fbfaad6d586f0ea3c6422f9d76104a20af0ad51c1743bba42", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegate/hooks.ts": "de5f9fb6b4d6c288af0309d08147657eadde71e413513fb4607f7ee24d09d7d5", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegate/mod.ts": "3794b2e9a5aaf873b7636c38270bd64af8bcccc0df3d47937f9b102fc8bc2b0c", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegate/rate_limiter.ts": "0b3126eb28284ed3ed7a9fe434a5a096745ebc03e4d8b1b354fc7b791ccccd93", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegate/register.ts": "3eabfb20967d926c5729ed9f29f454e341182def492ae13208b98d03303d9d20", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegraph/mod.ts": "b15034cbf2d23267199ed58ee61a20be21dd7293c9ee162577918e0845d7c60e", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegraph/type_node.ts": "76fcb35bfad244af1fcaa45798b29a7536f5a2a45e8c824ae36a0a8cb87aeab5", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegraph/types.ts": "a3c1daa8305c709641b7e9e32f78bae5097accac93562c9a9c34d8d9c5847617", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegraph/utils.ts": "4d751910f053f7c3f33ce0cdebdd9b19970bee04ef533f65f01788c727c371e7", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegraph/versions.ts": "29e4415454a5095847aa12bec06bcc2ac3cdb6f1b75606dedd8f5612ce64f9f1", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegraph/visitor.ts": "bbcd6204c65e841cf9facf6d7b59ce1456ca051b06935c739a9be9e57807331b", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegraphs/introspection.json": "76e8796d99a71f93c6fd57e6af9708ef2d8f587f9ceca2ae9aec3f49d242e43e", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegraphs/prisma_migration.json": "05bcf740259abcedb1bb2d8b34e6d62cf2ef124481e01379b93ddaf05e99b1c1", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/typegraphs/typegate.json": "99da5fb4052c82a35a65ac18f94cbce47d7e49afdf7678b8127e2f4677805cdb", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/types.ts": "305a38570368838fa2cc3382e7d4fbb8717976397fe8bd4aeda201f7a1cb4b73", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/utils.ts": "17f24991ba464352c3855cd8cda6b4d330f4283f33b167e745571a780e02c8fb", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/src/utils/hash.ts": "2f4ce3f1736df720def3b0fc89ac9e6e29afa0a33d7a988e15cb1d1bebcf026c", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/tests/utils/memory_register.ts": "de21f1494e4e378fc43280e04ea5b59aa791d417c655d47824769cde4fc63b19", - "https://raw.githubusercontent.com/metatypedev/metatype/54b487d5e3f83680c049a6a0d521dcff264e05c4/typegate/tests/utils/no_limiter.ts": "730246db1c73b5ca77e01e1838194f3870f4024cbf29a850674564b20425a7f0", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/engine/bindings.ts": "e9391491bf5c4f682267a5cb4ae384ef33ed7c15273fcada13bea7b064cf1270", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/config.ts": "2d15bf427ed74be3203e81d56d3bc5c6ecdae74bca18fdf5160482ea2b4b0385", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/config/loader.ts": "91cc2b67cc9bee413b0b44f9aa2ea7814f50e2465e6bc114eece248554d7477d", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/config/shared.ts": "b2cc53588d6651b5261de312c4b92f517f0b764cd95eb1b8771e46c3f46376a0", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/config/types.ts": "04013979ff0c001e8a19547a14bfe2ee0a2c49dc346b22ceefd99f8c8aecb7f8", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/crypto.ts": "f550775b9e5bf9e7ec286a1596246a631b117fd91e093169bcad4898fb729634", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/computation_engine.ts": "c61c224909a334e6024c2b1f929ebb2721bbd00e5418178ec68bbcdc5391090f", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/planner/args.ts": "3cea07d4c49784c1cddbd449f5dcc7e5627c2c6c5a9056b5ccadb8542d13f3ed", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/planner/dependency_resolver.ts": "b851f4a6e2d500f9427dd1a59920d6c71f10904b31863bb1fac4d26e01d02b67", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/planner/injection_utils.ts": "d7dcd7d10fe7c610731b9a98905bb97eb96d591521245d9645f8b9a8a8ad510d", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/planner/mod.ts": "cb5ec29f08bb4617cad7581b28d453873227b246321f91175833b0264bf16ff1", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/planner/parameter_transformer.ts": "4407bc6f75215431b8790cd2ba39ec348c25a9f9c377a80d0bd7315e72a9afb3", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/planner/policies.ts": "3c316e95ab4cc28e5684b0362afdb1e0ba198c7d49453bdfa2470fd39c44104b", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/query_engine.ts": "dbbbe1f233f67fae4e0574ab8ceafe3f4a03f3c62fa0a9f7cc8d02c44fe79bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/stage_id.ts": "b3b3c62215ff421103788079b77943af8f0026a56eafaa929415cb39ccde3cca", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/code_generator.ts": "edb77e2b98da2f040d3f7567d204dba2a3d8c66ae1a7c2709c049e464763f0cd", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/common.ts": "b585975e1a978dfa966df1a549261049ab159077bc90203a33bfe8ae055b3c6f", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/inline_validators/common.ts": "112f56c8e590215b0af0c1b46dc84b85cb5b9b43621a52646876c35a43103499", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/inline_validators/constraints.ts": "3237d0acce31aca8b2f2bbc0cae8a82d86f3671fcc7fabc3158037c4f79008f5", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/inline_validators/list.ts": "bd70fef3bc3840cfb6255a518de5fdb3db79a68a4481594475aebcbdd6a10102", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/inline_validators/number.ts": "9890c8af998dca2e573fc2ad02e63d9abc9b506b4a0c451d31f5916a8888e401", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/inline_validators/object.ts": "bd4f8891ee823bf82481df2ee181256514fd7299b5fe4fd7cd7194defa228f57", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/inline_validators/string.ts": "914a2b809a344075279578cb35ac3d03cb6025eb9f62c1f9f86958191b9857da", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/input.ts": "e34fec32501c9e4d9b427b097fd6565f54065562e101732e62b4c2799e60288c", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/matching_variant.ts": "aca8db649194921a01aca42b02113d0735262bb63d41ec44174e61c4cfa85369", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/engine/typecheck/result.ts": "b2ac55373242b157396f4b400112d02b45abb623e72d2ccfa6e168a10845211b", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/errors.ts": "29dfbfdc8b7a85ee9551831d6db882e50a4e0104102b5885b2bd9a42878365f6", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/libs/jsonpath.ts": "f6851288fb8600dec0e62d5f804f41332b6197b255b6497360ba7e4b7f375cba", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/log.ts": "50d9fd5a225312118b04317c89155ae5a37f66b3ff31af4b7ed92880fa7c6694", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/main.ts": "af5c054d8188afa43b3f5cf3f779a3b0fe2c2bccf2cb7dbde942f469a0ebaad7", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/Runtime.ts": "7ebf8f1903c46ddeb9b795c548561105e643ab5867319e4a9f1f72920048d14d", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/deno.ts": "c893dcf170b38547239d550080a856aca46a788de9922f282bbacf9b5841b5fe", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/deno/deno.ts": "c540c9049261a302e0cefd510fcca6e51e5d527ac2d432a32060d98fa5202ad3", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/deno/deno_messenger.ts": "81160c8a9c9817b46b52c4eee15cde880fb3f6b013c3b5110ee07a4c9c7f7a5e", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/deno/worker.ts": "64604d323ffd85f864c4a15419077e5131561de1680504041157a05f8ad9b5eb", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/graphql.ts": "e7b1126e80c433a3fa851aff47239b2571ba4ee0b175b25bda6d85804e8b50bd", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/http.ts": "f598a33aa3cafcf37a1f33d84c06bfd0ef5fd768f72837042c83ac6ae1d90762", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/kv.ts": "ea5365bf5cb3a2c1a7a82482d4b5c1f9fb5e84ed331edce4187464a4ca4e5801", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/mod.ts": "8be5c49d628052d172da6c6d8d40d416ec3212ac9776aad658c904a9ada06d02", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/patterns/messenger/async_messenger.ts": "40644e011e3a258138ff1fb7a5323754a547016da9c1deb2114cfc471ee28bf0", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/patterns/messenger/lazy_async_messenger.ts": "b93d5e7252231d27d6b76ec4172d67cc23880b78411fb371d0cba2db712e2161", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/prisma.ts": "e4b679c3b5e28a323d72bde5ebbcc113abe0efc8da82d70b3b2e390149c57d84", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/prisma/hooks/generate_schema.ts": "45d00aee4082e93e817f748fe27d765e5869373c69097a0186ddfcc62f0e152f", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/prisma/hooks/mod.ts": "3e33752e3676b538c7016f3ddd4f1f49d75e217c410bcaa6319d33ed987d3c60", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/prisma/hooks/run_migrations.ts": "aa21425f2383068d08accf99e40ca31046a3f8cec30bf5302a345fbf7fda019f", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/prisma/migration.ts": "f501540557b13a32f7b57e5a87f4ae1794cdd95214a49b34a429d7a33a96d5d8", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/prisma/mod.ts": "a0e44e86a45aad8b2bb0357ddbe8ba02802e6979451553940ec3688be571127f", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/prisma/prisma.ts": "2d9c5b0dd0805f043e7aabe4fc5ad39571a8bf01194dadc1f0ef17b121be2fc6", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/prisma/types.ts": "b4912f164aa8cdb1db3a98238a0271882864ff2778c10920dd7f0f3d59165dd6", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/python.ts": "00fefc5201b7f8600a5788ddf7f2db1d53098b34654c24f4f37c78052056645e", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/random.ts": "8623fa125804dd6302b3c18dc882a4988ce8f2510be55cdc3ddf9af84d05b8e7", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/s3.ts": "2f028f0564d07e789923dd8811ceaf3b4c92a57e390f10d235ac5da7cf18b4e5", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/temporal.ts": "ff8a21af119e67e30c4cb31f7ac677555ac3945fa6f94431c4535009bf9a4c9c", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/typegate.ts": "3f629905c99c49f372be0e05cc8ec27a113b0959f446273134d5eb75a3da8db4", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/typegraph.ts": "075d4a054ced6424529d9b7e8770d9e2579b3bcb3362007226e6b479afaa6013", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/utils/graphql_forward_vars.ts": "f0bb091aadd191eb1491dd86b7abd311ab60e09f532d226c8328b2cfa6025d9e", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/utils/graphql_inline_vars.ts": "9c3c339ee596c93cf65cda696d756c9ef08d34b78e4136472e27a92f2254ec8a", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/utils/http.ts": "842af99040fd0e3456690f7674311da3a0b9ea64c608d7bc588df1ab28f163a3", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/wasm_reflected.ts": "f27fc767b0d42d65729d7489ee61336ce2419a45cb1d52debec67ad3c1559084", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/wasm_wire.ts": "8d8ba5bc68bf6fa7842c193b7e86af0833087ff44da40d83ccf600e62a29d484", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/runtimes/wit_wire/mod.ts": "e13ca5e0384357da52744640f9d535c2f84da668c8eb92893fe454c9cd66fb2b", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/artifact_service.ts": "84285d8e1e569d5f30918f6bf0c7a97011b37b2ab529787f0308194b875c4de3", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/cookies.ts": "ee17535cb19eab884732cefcdc46e63a2905041d5b5942e9ad6783c50a1f8624", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/mod.ts": "5b15823ec19cec1c985a77d525ee2e9e5c5aa367f5e24c96e305e485b6c633a9", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/protocols/basic.ts": "3c233ae1ccd0d3a8ff47a32c74682921abaf84e0de7c096f220f63b05756fc58", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/protocols/internal.ts": "7a9173406fbc1b885e08dd74a8dd34f168de2f1e9bedef4cdd88dad613e59166", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/protocols/jwt.ts": "e39249df7c2d088da07af1ccf5e97815addb46a994469efd4a335f6ae8618bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/protocols/oauth2.ts": "7172cc6da5ecba71775bbc2d467d52d1f78505204e55452170f35004923b847b", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/protocols/protocol.ts": "158c55618be6165a9ee393ccd1a9da267b084ff04df7e627af1e4fc8fe636644", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/routes/mod.ts": "8fe85c16feb3da7086d3d6fd19a4579585b632893f3534c533c60aed84b9413a", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/routes/take.ts": "bc343c5d34870aeeaf9b0cc9473ba18fe7b324a23a630a57c9fd41eea4418a46", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/auth/routes/validate.ts": "56e52bb6d1660735683bdd398a86936f24ad8a00e402b7d88790867ad559e476", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/graphql_service.ts": "458e3cedcd22a44e166e531bcac4c65972916d81f3776c8161b2440ad212626f", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/info_service.ts": "a9a1f6ebdcbe64d55806597b879dd5714c32b8b861bed695a944f5e2f1213beb", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/middlewares.ts": "8af6277ce67c940564538f4def8e6567b5783b51f7c5f38c902736d620ffe405", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/playground_service.ts": "2cc8689899be7c31ad6c2e9c2c5adde0c6cc1f1442b27a55e8ead830e867dbe5", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/responses.ts": "5c45923c1374aab1ac8dd5b1a09ae69062ab34a448f8e92630678a236e38b2ba", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/services/rest_service.ts": "ae6ffdbddaccdbc7ed11dfb86511f2917332dcf5ae22ed814e1059e640ff7b08", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/sync/replicated_map.ts": "6b94fb884ce81d7e17572ae0abbeb91ceadb31f9356c4e9255982a00edcfe729", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/sync/typegraph.ts": "6dca5ca5c09289512252180e7db47f6cbb2a7881fb860e158ee711f4bf9ae991", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/system_typegraphs.ts": "51299d60c1bb75b3e74998eb77bdf1680ee9d4a2f29a267d3ca90b2867c577fb", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/transports/graphql/gq.ts": "78435e53ec1c5b7aec29364c051eb8f10802714050d24ee68a65e1e263495d7d", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/transports/graphql/graphql.ts": "9f4aa79276e05acc6020da2a18472a1cc54c0ecf42efcbf017d67a88b0b90af2", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/transports/graphql/request_parser.ts": "afbc95debcb1bbfa6fc2b88937d7abedbed1f4335bb2d17bf98c7293761cfdb0", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/transports/graphql/typegraph.ts": "d1ff14176f6ab1d6b3ba54cb2334e555ede11e769f832c4b1d6ac8ec1872185f", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/transports/graphql/utils.ts": "d09147add80f5e53a643ed3126ee8675a1655480728311de2def04ffe6262a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/transports/rest/rest_schema_generator.ts": "c776e83c6a55e9bee3ec72c36c1d771b3ca711e4086b3728e4983ab866472624", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegate/artifacts/local.ts": "11482d663545af6110e4b75a46b21675c68f6c4df625d7867e0cdab9e267065a", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegate/artifacts/mod.ts": "5d207550b83b865d8df4cf023f8304935f410c81b3d18894aaefb570e56fbd93", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegate/artifacts/shared.ts": "7f6d99bcc6499446dcf019d1c3e7735ff5a7b590bfd8fbae89a94d06ac18d9f8", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegate/hooks.ts": "ea97c08285388300802676d03dbc06caadf060093736abce07ef8f99a60e9a04", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegate/memory_register.ts": "6eab24914a941f85c233037013dc13749d8b689c5f9ffb38600df4c7b00a94f0", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegate/mod.ts": "ce468fd7d0a32676f2867bf183c73e59da063f0a5ad3f0cde05d5f40e2bbf280", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegate/no_limiter.ts": "1e98610a737bd74668f80b7014c64669a59a801355340eaa14411e07f4a8a94e", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegate/rate_limiter.ts": "b5718ab9e718314f11f5d88d84795bd0e61575856470793f1fe83d499f4a9d40", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegate/register.ts": "d7a8732386ad019d4dcee0372b6cab93bfc55e0146729842db2aaecf1411b15d", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegraph/mod.ts": "71503ba14d0ad1e77d320d0fa044b93cba76e43ea2800828e0833cc4f0e36401", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegraph/type_node.ts": "76fcb35bfad244af1fcaa45798b29a7536f5a2a45e8c824ae36a0a8cb87aeab5", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegraph/utils.ts": "04ab4bd79523a4a599275a288c8ecb37798cb1615c73e97f080a0bd79b1c2c44", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegraph/versions.ts": "cdab4b07960f78c1f18511a8cc464a7e97c4c1fd15c6e8678c109483d3c26508", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegraph/visitor.ts": "0fb0f89d92cb1654c1b010494a14c1aad88c7923102ea3e89866b232d3bcdf04", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegraphs/introspection.json": "76e8796d99a71f93c6fd57e6af9708ef2d8f587f9ceca2ae9aec3f49d242e43e", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegraphs/prisma_migration.json": "05bcf740259abcedb1bb2d8b34e6d62cf2ef124481e01379b93ddaf05e99b1c1", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/typegraphs/typegate.json": "99da5fb4052c82a35a65ac18f94cbce47d7e49afdf7678b8127e2f4677805cdb", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/utils.ts": "51b8167e4f1d992d68e99b70cb326cc1793593b196c1e17c01775f210652871b", - "https://raw.githubusercontent.com/metatypedev/metatype/67c1d0fa3f16ec6459ef28aa750db508a1758271/src/typegate/src/utils/hash.ts": "df6cf462c7a6a805b91dce9d3e7bbbd00ea3bfd8dcc973fb3e6c94e48e33d9b9", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/engine/bindings.ts": "4529b86703a1512302164bca346c29df2a246d0ebbf20248cc39ee9745490dc1", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/engine/runtime.js": "1ae55e76d3de8e79c37054d9127c92af496ce10aa905ea64021893048bb33794", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/config.ts": "63ea402f9a993888a9e3ec88d35112186f8f13bcd3a5fe358e69e0bb603311a5", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/config/loader.ts": "91cc2b67cc9bee413b0b44f9aa2ea7814f50e2465e6bc114eece248554d7477d", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/config/shared.ts": "252b42038eb68059b2cac85c792e36f5849b8e7392b98452341ccc3ee680a774", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/config/types.ts": "15dbd4331e819fcf551522460413af718d9b9f379dea0d9a87ab4871b9c8d9e7", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/crypto.ts": "f550775b9e5bf9e7ec286a1596246a631b117fd91e093169bcad4898fb729634", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/computation_engine.ts": "07a3826fcf0bb13eb3912b8e5cbf69932848cd28c1c4ebda7042f977510d00a5", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/planner/args.ts": "de16ba5c087afae319f65d02ab39779146da37ea925f610da8887cffe7828060", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/planner/dependency_resolver.ts": "b851f4a6e2d500f9427dd1a59920d6c71f10904b31863bb1fac4d26e01d02b67", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/planner/injection_utils.ts": "6f9ad0f8f9cde9a985b6ad36bf58418637a85f50749abe6870c792ade7dc45a2", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/planner/mod.ts": "9a4429e7a579903f4f67ab53bd602b2d05a58138bdbd91c7cc5b1b44cf714b68", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/planner/parameter_transformer.ts": "3ba3b9603c6d28c0d54648f8177bce30b8b667e0e1be903d468af3f2645649ff", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/planner/policies.ts": "caf3cfd8a46e21a5d09fdb46882d6ea4ffb376c56070bdb1ccff92fa70989d63", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/query_engine.ts": "dbbbe1f233f67fae4e0574ab8ceafe3f4a03f3c62fa0a9f7cc8d02c44fe79bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/stage_id.ts": "b3b3c62215ff421103788079b77943af8f0026a56eafaa929415cb39ccde3cca", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/code_generator.ts": "edb77e2b98da2f040d3f7567d204dba2a3d8c66ae1a7c2709c049e464763f0cd", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/common.ts": "b585975e1a978dfa966df1a549261049ab159077bc90203a33bfe8ae055b3c6f", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/inline_validators/common.ts": "112f56c8e590215b0af0c1b46dc84b85cb5b9b43621a52646876c35a43103499", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/inline_validators/constraints.ts": "3237d0acce31aca8b2f2bbc0cae8a82d86f3671fcc7fabc3158037c4f79008f5", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/inline_validators/list.ts": "bd70fef3bc3840cfb6255a518de5fdb3db79a68a4481594475aebcbdd6a10102", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/inline_validators/number.ts": "9890c8af998dca2e573fc2ad02e63d9abc9b506b4a0c451d31f5916a8888e401", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/inline_validators/object.ts": "bd4f8891ee823bf82481df2ee181256514fd7299b5fe4fd7cd7194defa228f57", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/inline_validators/string.ts": "914a2b809a344075279578cb35ac3d03cb6025eb9f62c1f9f86958191b9857da", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/input.ts": "e34fec32501c9e4d9b427b097fd6565f54065562e101732e62b4c2799e60288c", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/matching_variant.ts": "aca8db649194921a01aca42b02113d0735262bb63d41ec44174e61c4cfa85369", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/engine/typecheck/result.ts": "6544f206b67c32015950ec96134415c261a60f54c469c1cd73f8accadf87fff6", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/errors.ts": "29dfbfdc8b7a85ee9551831d6db882e50a4e0104102b5885b2bd9a42878365f6", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/libs/jsonpath.ts": "f6851288fb8600dec0e62d5f804f41332b6197b255b6497360ba7e4b7f375cba", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/log.ts": "1330c01d489956c7530e2f2e2e60967f30c6b3a0c5c1d6c18d161ea2cf44fa0e", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/main.ts": "af5c054d8188afa43b3f5cf3f779a3b0fe2c2bccf2cb7dbde942f469a0ebaad7", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/Runtime.ts": "30ec531890bc626953fe16e0a6882c61b05c9cdab8858727662fbf29998df274", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/deno.ts": "c893dcf170b38547239d550080a856aca46a788de9922f282bbacf9b5841b5fe", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/deno/deno.ts": "9964279b30ab39827cb1691484adb84a04d764ba2746122af0dfcba13caa39e3", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/deno/deno_messenger.ts": "81160c8a9c9817b46b52c4eee15cde880fb3f6b013c3b5110ee07a4c9c7f7a5e", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/deno/shared_types.ts": "34d56aa89c5a34e943a34b623b20d13ca54ab5466ea5313e0543da68b7aebcb1", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/graphql.ts": "5f0f4125367fd5fc43ccb2b8c9e8ba1f9c84348595e70e5ed9870e776d2efed3", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/grpc.ts": "92b2f5214ebe0f7b61e582faa67d6759641feaf788166a939ec6db8d819708da", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/http.ts": "f598a33aa3cafcf37a1f33d84c06bfd0ef5fd768f72837042c83ac6ae1d90762", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/kv.ts": "ea5365bf5cb3a2c1a7a82482d4b5c1f9fb5e84ed331edce4187464a4ca4e5801", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/mod.ts": "26c06f1bff03255c20df97e1a109944b6fd2872acbb27aa97ab38b081fb19d7e", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/patterns/messenger/async_messenger.ts": "40644e011e3a258138ff1fb7a5323754a547016da9c1deb2114cfc471ee28bf0", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/patterns/messenger/lazy_async_messenger.ts": "b93d5e7252231d27d6b76ec4172d67cc23880b78411fb371d0cba2db712e2161", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/prisma.ts": "e4b679c3b5e28a323d72bde5ebbcc113abe0efc8da82d70b3b2e390149c57d84", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/prisma/hooks/generate_schema.ts": "f55ffcb6fdfdfcb29eb5543ac23f89e224fc7e233f4ec598f7c5f44f05eefed2", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/prisma/hooks/mod.ts": "3e33752e3676b538c7016f3ddd4f1f49d75e217c410bcaa6319d33ed987d3c60", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/prisma/hooks/run_migrations.ts": "aa21425f2383068d08accf99e40ca31046a3f8cec30bf5302a345fbf7fda019f", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/prisma/migration.ts": "f501540557b13a32f7b57e5a87f4ae1794cdd95214a49b34a429d7a33a96d5d8", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/prisma/mod.ts": "a0e44e86a45aad8b2bb0357ddbe8ba02802e6979451553940ec3688be571127f", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/prisma/prisma.ts": "9ec0f38674728229d053aff19b4f411852390c08c2886c0944d49c8d13ebfa2f", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/prisma/types.ts": "b4912f164aa8cdb1db3a98238a0271882864ff2778c10920dd7f0f3d59165dd6", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/python.ts": "4a067d196fbcce2978207de7dc61c734dcdc77f0100739080ae341af3c352adf", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/random.ts": "e7651e262ef5857e777ad46877c66f9098a2dfe774c13720a4cd38be327b53ff", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/s3.ts": "d7a0372faf555180bd4326550c1c6a07b156d3c5f0bbbcf9c0f6eb4b0f2bfff1", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/substantial.ts": "175644d75911d09919c06577bfa86239b3a44b1217664035551ff0989e22882a", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/substantial/agent.ts": "223288cb3d7baa02fa2d4e37207da7fa69cf4f16eb04ed7810d3e91ac725615b", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/substantial/types.ts": "8255ea84c5129ffc049d6fa88ad57eadf298d420ff11782c43eae9d2031efed1", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/substantial/workflow_worker_manager.ts": "589611456b82df0637db5f63af0881a459747d7c8963684bdcde291af13515cd", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/temporal.ts": "ff8a21af119e67e30c4cb31f7ac677555ac3945fa6f94431c4535009bf9a4c9c", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/typegate.ts": "52d49471d2682c1be323b53e4cca9866f2babb93708a855daa8c471ba4174b64", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/typegraph.ts": "e5808e5a20080fc260e54113e5941e5dffaeead5e3b7448dc17a48031d4799cf", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/utils/graphql_forward_vars.ts": "f0bb091aadd191eb1491dd86b7abd311ab60e09f532d226c8328b2cfa6025d9e", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/utils/graphql_inline_vars.ts": "9c3c339ee596c93cf65cda696d756c9ef08d34b78e4136472e27a92f2254ec8a", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/utils/http.ts": "842af99040fd0e3456690f7674311da3a0b9ea64c608d7bc588df1ab28f163a3", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/wasm_reflected.ts": "99d59cdd0c4b228c42ac90099036ecf5d2e14d6758916b27e4017d53b69cf481", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/wasm_wire.ts": "d10c891f12c9521bcd1a7e1cb459f642a5f4e0936f25f4e04174141691ba06d1", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/runtimes/wit_wire/mod.ts": "ab031dcd7ad66861fe30c3bf6da8b545a7ef4a26a9610da849f73cd8a1e58fae", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/artifact_service.ts": "282a9a6c3d89afc8955aabab6b3b242edccba664f5f41558e9c9b07d43dd8d13", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/cookies.ts": "ee17535cb19eab884732cefcdc46e63a2905041d5b5942e9ad6783c50a1f8624", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/mod.ts": "5b15823ec19cec1c985a77d525ee2e9e5c5aa367f5e24c96e305e485b6c633a9", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/protocols/basic.ts": "3c233ae1ccd0d3a8ff47a32c74682921abaf84e0de7c096f220f63b05756fc58", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/protocols/internal.ts": "7a9173406fbc1b885e08dd74a8dd34f168de2f1e9bedef4cdd88dad613e59166", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/protocols/jwt.ts": "e39249df7c2d088da07af1ccf5e97815addb46a994469efd4a335f6ae8618bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/protocols/oauth2.ts": "7172cc6da5ecba71775bbc2d467d52d1f78505204e55452170f35004923b847b", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/protocols/protocol.ts": "158c55618be6165a9ee393ccd1a9da267b084ff04df7e627af1e4fc8fe636644", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/routes/mod.ts": "8fe85c16feb3da7086d3d6fd19a4579585b632893f3534c533c60aed84b9413a", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/routes/take.ts": "bc343c5d34870aeeaf9b0cc9473ba18fe7b324a23a630a57c9fd41eea4418a46", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/auth/routes/validate.ts": "56e52bb6d1660735683bdd398a86936f24ad8a00e402b7d88790867ad559e476", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/graphql_service.ts": "458e3cedcd22a44e166e531bcac4c65972916d81f3776c8161b2440ad212626f", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/info_service.ts": "a9a1f6ebdcbe64d55806597b879dd5714c32b8b861bed695a944f5e2f1213beb", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/middlewares.ts": "8af6277ce67c940564538f4def8e6567b5783b51f7c5f38c902736d620ffe405", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/playground_service.ts": "2cc8689899be7c31ad6c2e9c2c5adde0c6cc1f1442b27a55e8ead830e867dbe5", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/responses.ts": "5c45923c1374aab1ac8dd5b1a09ae69062ab34a448f8e92630678a236e38b2ba", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/services/rest_service.ts": "ae6ffdbddaccdbc7ed11dfb86511f2917332dcf5ae22ed814e1059e640ff7b08", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/sync/replicated_map.ts": "6b94fb884ce81d7e17572ae0abbeb91ceadb31f9356c4e9255982a00edcfe729", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/sync/typegraph.ts": "78120bc4d35e728ed86a98781c5d60996050fa8b35fa91f563c3c8b2a964b5dd", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/system_typegraphs.ts": "51299d60c1bb75b3e74998eb77bdf1680ee9d4a2f29a267d3ca90b2867c577fb", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/transports/graphql/gq.ts": "78435e53ec1c5b7aec29364c051eb8f10802714050d24ee68a65e1e263495d7d", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/transports/graphql/graphql.ts": "9f4aa79276e05acc6020da2a18472a1cc54c0ecf42efcbf017d67a88b0b90af2", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/transports/graphql/request_parser.ts": "afbc95debcb1bbfa6fc2b88937d7abedbed1f4335bb2d17bf98c7293761cfdb0", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/transports/graphql/typegraph.ts": "fc0ba3f62e1dd687a0545adb1dbaf7185176e0f1e938bfdd29cfef7f85951635", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/transports/graphql/utils.ts": "d09147add80f5e53a643ed3126ee8675a1655480728311de2def04ffe6262a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/transports/rest/rest_schema_generator.ts": "c776e83c6a55e9bee3ec72c36c1d771b3ca711e4086b3728e4983ab866472624", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegate/artifacts/local.ts": "d36ece0f53a56922744dd4d3e170101466b3816ba136f9574e799880e27d1a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegate/artifacts/mod.ts": "13583fb57bb5280e26c50ae89834ab73b123b712eb14a1995af00267304fef97", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegate/artifacts/shared.ts": "5061a07eb880e33c1543e7397e945d50b476ed51d81fc01d109c53295f089131", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegate/hooks.ts": "ea97c08285388300802676d03dbc06caadf060093736abce07ef8f99a60e9a04", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegate/memory_register.ts": "6eab24914a941f85c233037013dc13749d8b689c5f9ffb38600df4c7b00a94f0", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegate/mod.ts": "ce468fd7d0a32676f2867bf183c73e59da063f0a5ad3f0cde05d5f40e2bbf280", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegate/no_limiter.ts": "1e98610a737bd74668f80b7014c64669a59a801355340eaa14411e07f4a8a94e", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegate/rate_limiter.ts": "b5718ab9e718314f11f5d88d84795bd0e61575856470793f1fe83d499f4a9d40", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegate/register.ts": "d7a8732386ad019d4dcee0372b6cab93bfc55e0146729842db2aaecf1411b15d", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegraph/mod.ts": "3401f26beae423b008480460495cf7a22791a53cce65fd0a941c34e4b65ee5b0", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegraph/type_node.ts": "7f721cd5f6da2cbc7e66b804e0f81e0429aa2893e0a93244f9e66b39cb96b1a0", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegraph/types.ts": "fc813b5f18e71b58e5f7904cd7fe3d6cae38b3c7055a8875042588c1561df160", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegraph/utils.ts": "66fe8e1b5072f52ea2efebc5cf42001c3b858068b2d970ee3c8558032ff53103", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegraph/versions.ts": "cdab4b07960f78c1f18511a8cc464a7e97c4c1fd15c6e8678c109483d3c26508", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegraph/visitor.ts": "0fb0f89d92cb1654c1b010494a14c1aad88c7923102ea3e89866b232d3bcdf04", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/typegraphs/introspection.json": "bbcf2c4233371c7f36052e5fe9e1cb1d18a46d3f31391cfcba2a3063c9141adb", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/types.ts": "a36918c2bfab397edec906c23d2cd7558246337bb16fdf1ea4e353cffea5f2b4", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/utils.ts": "de1a17260e76607e1a8fd6d7384cbc21bb26e08f64bffc41d6508bf5a8359311", - "https://raw.githubusercontent.com/metatypedev/metatype/770ca5fc5e328fc88633101934bdeea989b26628/src/typegate/src/utils/hash.ts": "df6cf462c7a6a805b91dce9d3e7bbbd00ea3bfd8dcc973fb3e6c94e48e33d9b9", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/engine/bindings.ts": "7c3e28ec60a0381030310228be6c02f1a434046b4cbcf793a537aaef47be949f", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/engine/runtime.js": "1ae55e76d3de8e79c37054d9127c92af496ce10aa905ea64021893048bb33794", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/config.ts": "63ea402f9a993888a9e3ec88d35112186f8f13bcd3a5fe358e69e0bb603311a5", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/config/loader.ts": "91cc2b67cc9bee413b0b44f9aa2ea7814f50e2465e6bc114eece248554d7477d", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/config/shared.ts": "252b42038eb68059b2cac85c792e36f5849b8e7392b98452341ccc3ee680a774", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/config/types.ts": "73357168542ef041da67997acdd98097444d92f0a1663be03ad1523fd20f768c", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/crypto.ts": "f550775b9e5bf9e7ec286a1596246a631b117fd91e093169bcad4898fb729634", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/computation_engine.ts": "07a3826fcf0bb13eb3912b8e5cbf69932848cd28c1c4ebda7042f977510d00a5", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/planner/args.ts": "de16ba5c087afae319f65d02ab39779146da37ea925f610da8887cffe7828060", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/planner/dependency_resolver.ts": "b851f4a6e2d500f9427dd1a59920d6c71f10904b31863bb1fac4d26e01d02b67", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/planner/injection_utils.ts": "6f9ad0f8f9cde9a985b6ad36bf58418637a85f50749abe6870c792ade7dc45a2", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/planner/mod.ts": "9a4429e7a579903f4f67ab53bd602b2d05a58138bdbd91c7cc5b1b44cf714b68", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/planner/parameter_transformer.ts": "3ba3b9603c6d28c0d54648f8177bce30b8b667e0e1be903d468af3f2645649ff", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/planner/policies.ts": "caf3cfd8a46e21a5d09fdb46882d6ea4ffb376c56070bdb1ccff92fa70989d63", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/query_engine.ts": "39281c309b3d72123fcd8695700bd2831956e09d2b1c082ef899886beea6ae82", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/stage_id.ts": "b3b3c62215ff421103788079b77943af8f0026a56eafaa929415cb39ccde3cca", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/code_generator.ts": "edb77e2b98da2f040d3f7567d204dba2a3d8c66ae1a7c2709c049e464763f0cd", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/common.ts": "b585975e1a978dfa966df1a549261049ab159077bc90203a33bfe8ae055b3c6f", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/inline_validators/common.ts": "112f56c8e590215b0af0c1b46dc84b85cb5b9b43621a52646876c35a43103499", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/inline_validators/constraints.ts": "3237d0acce31aca8b2f2bbc0cae8a82d86f3671fcc7fabc3158037c4f79008f5", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/inline_validators/list.ts": "bd70fef3bc3840cfb6255a518de5fdb3db79a68a4481594475aebcbdd6a10102", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/inline_validators/number.ts": "9890c8af998dca2e573fc2ad02e63d9abc9b506b4a0c451d31f5916a8888e401", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/inline_validators/object.ts": "bd4f8891ee823bf82481df2ee181256514fd7299b5fe4fd7cd7194defa228f57", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/inline_validators/string.ts": "914a2b809a344075279578cb35ac3d03cb6025eb9f62c1f9f86958191b9857da", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/input.ts": "cf24fcffa1891dfc2f2af941a64aade9da069a6ef92baa432e2d7dcf5f9a8b86", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/matching_variant.ts": "aca8db649194921a01aca42b02113d0735262bb63d41ec44174e61c4cfa85369", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/engine/typecheck/result.ts": "6544f206b67c32015950ec96134415c261a60f54c469c1cd73f8accadf87fff6", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/errors.ts": "29dfbfdc8b7a85ee9551831d6db882e50a4e0104102b5885b2bd9a42878365f6", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/libs/jsonpath.ts": "f6851288fb8600dec0e62d5f804f41332b6197b255b6497360ba7e4b7f375cba", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/log.ts": "1330c01d489956c7530e2f2e2e60967f30c6b3a0c5c1d6c18d161ea2cf44fa0e", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/main.ts": "f390cfd2b5b836f1a54fa9ea7d8a5f5ba80430b6e849032145c0a7c0ae7216f3", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/Runtime.ts": "cc476f09f7d32d10dec3812a9a589da2866247e2064ce149ea2dc68fca833730", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/deno.ts": "c893dcf170b38547239d550080a856aca46a788de9922f282bbacf9b5841b5fe", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/deno/deno.ts": "bb0cdad8e785d43f6c59232e214fab82d43476acbcef740f561708b064bae172", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/deno/deno_messenger.ts": "81160c8a9c9817b46b52c4eee15cde880fb3f6b013c3b5110ee07a4c9c7f7a5e", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/deno/shared_types.ts": "34d56aa89c5a34e943a34b623b20d13ca54ab5466ea5313e0543da68b7aebcb1", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/deno/worker.ts": "ffeabab915301a666ac06b28989d5be4b29e600fb2932e25005ec1c9f48aac1d", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/graphql.ts": "5f0f4125367fd5fc43ccb2b8c9e8ba1f9c84348595e70e5ed9870e776d2efed3", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/grpc.ts": "92b2f5214ebe0f7b61e582faa67d6759641feaf788166a939ec6db8d819708da", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/http.ts": "f598a33aa3cafcf37a1f33d84c06bfd0ef5fd768f72837042c83ac6ae1d90762", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/kv.ts": "7d87409d8f93a4f684e1a0aabd020e5f3e559669fe3ca8efee9cd5045fde99dd", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/mod.ts": "26c06f1bff03255c20df97e1a109944b6fd2872acbb27aa97ab38b081fb19d7e", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/patterns/messenger/async_messenger.ts": "40644e011e3a258138ff1fb7a5323754a547016da9c1deb2114cfc471ee28bf0", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/patterns/messenger/lazy_async_messenger.ts": "b93d5e7252231d27d6b76ec4172d67cc23880b78411fb371d0cba2db712e2161", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/prisma.ts": "e4b679c3b5e28a323d72bde5ebbcc113abe0efc8da82d70b3b2e390149c57d84", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/prisma/hooks/generate_schema.ts": "f55ffcb6fdfdfcb29eb5543ac23f89e224fc7e233f4ec598f7c5f44f05eefed2", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/prisma/hooks/mod.ts": "3e33752e3676b538c7016f3ddd4f1f49d75e217c410bcaa6319d33ed987d3c60", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/prisma/hooks/run_migrations.ts": "b94b09ecdc7d81ddcfd7596ae8cfb1ebbc8896d4c67207da627dcd79d19c658c", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/prisma/migration.ts": "f501540557b13a32f7b57e5a87f4ae1794cdd95214a49b34a429d7a33a96d5d8", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/prisma/mod.ts": "a0e44e86a45aad8b2bb0357ddbe8ba02802e6979451553940ec3688be571127f", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/prisma/prisma.ts": "bc370cfcb0f2aad520b8d2fd082e18dad5d41386225b50c9ce577b6c45df55b3", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/prisma/types.ts": "b4912f164aa8cdb1db3a98238a0271882864ff2778c10920dd7f0f3d59165dd6", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/python.ts": "77e7f683830962365ce7ce0af5fc5d326e11bc9751ab33d7add16d27feb32633", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/random.ts": "e7651e262ef5857e777ad46877c66f9098a2dfe774c13720a4cd38be327b53ff", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/s3.ts": "d7a0372faf555180bd4326550c1c6a07b156d3c5f0bbbcf9c0f6eb4b0f2bfff1", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/substantial.ts": "175644d75911d09919c06577bfa86239b3a44b1217664035551ff0989e22882a", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/substantial/agent.ts": "223288cb3d7baa02fa2d4e37207da7fa69cf4f16eb04ed7810d3e91ac725615b", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/substantial/types.ts": "8255ea84c5129ffc049d6fa88ad57eadf298d420ff11782c43eae9d2031efed1", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/substantial/workflow_worker_manager.ts": "589611456b82df0637db5f63af0881a459747d7c8963684bdcde291af13515cd", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/temporal.ts": "fef8a8f70d3f75957a5a741c275abea96cc492722784ea4aadffd9fce9cbff3f", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/typegate.ts": "52d49471d2682c1be323b53e4cca9866f2babb93708a855daa8c471ba4174b64", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/typegraph.ts": "e5808e5a20080fc260e54113e5941e5dffaeead5e3b7448dc17a48031d4799cf", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/utils/graphql_forward_vars.ts": "f0bb091aadd191eb1491dd86b7abd311ab60e09f532d226c8328b2cfa6025d9e", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/utils/graphql_inline_vars.ts": "9c3c339ee596c93cf65cda696d756c9ef08d34b78e4136472e27a92f2254ec8a", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/utils/http.ts": "842af99040fd0e3456690f7674311da3a0b9ea64c608d7bc588df1ab28f163a3", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/wasm_reflected.ts": "99d59cdd0c4b228c42ac90099036ecf5d2e14d6758916b27e4017d53b69cf481", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/wasm_wire.ts": "d10c891f12c9521bcd1a7e1cb459f642a5f4e0936f25f4e04174141691ba06d1", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/runtimes/wit_wire/mod.ts": "b40ab7bbdb225bff8738a743385251cc54a1ef44652e783a31ef7f85ed4efb18", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/artifact_service.ts": "282a9a6c3d89afc8955aabab6b3b242edccba664f5f41558e9c9b07d43dd8d13", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/cookies.ts": "ee17535cb19eab884732cefcdc46e63a2905041d5b5942e9ad6783c50a1f8624", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/mod.ts": "5b15823ec19cec1c985a77d525ee2e9e5c5aa367f5e24c96e305e485b6c633a9", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/protocols/basic.ts": "3c233ae1ccd0d3a8ff47a32c74682921abaf84e0de7c096f220f63b05756fc58", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/protocols/internal.ts": "7a9173406fbc1b885e08dd74a8dd34f168de2f1e9bedef4cdd88dad613e59166", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/protocols/jwt.ts": "e39249df7c2d088da07af1ccf5e97815addb46a994469efd4a335f6ae8618bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/protocols/oauth2.ts": "7172cc6da5ecba71775bbc2d467d52d1f78505204e55452170f35004923b847b", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/protocols/protocol.ts": "158c55618be6165a9ee393ccd1a9da267b084ff04df7e627af1e4fc8fe636644", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/routes/mod.ts": "8fe85c16feb3da7086d3d6fd19a4579585b632893f3534c533c60aed84b9413a", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/routes/take.ts": "bc343c5d34870aeeaf9b0cc9473ba18fe7b324a23a630a57c9fd41eea4418a46", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/auth/routes/validate.ts": "56e52bb6d1660735683bdd398a86936f24ad8a00e402b7d88790867ad559e476", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/graphql_service.ts": "458e3cedcd22a44e166e531bcac4c65972916d81f3776c8161b2440ad212626f", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/info_service.ts": "a9a1f6ebdcbe64d55806597b879dd5714c32b8b861bed695a944f5e2f1213beb", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/middlewares.ts": "8af6277ce67c940564538f4def8e6567b5783b51f7c5f38c902736d620ffe405", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/playground_service.ts": "2cc8689899be7c31ad6c2e9c2c5adde0c6cc1f1442b27a55e8ead830e867dbe5", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/responses.ts": "5c45923c1374aab1ac8dd5b1a09ae69062ab34a448f8e92630678a236e38b2ba", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/services/rest_service.ts": "ae6ffdbddaccdbc7ed11dfb86511f2917332dcf5ae22ed814e1059e640ff7b08", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/sync/replicated_map.ts": "6b94fb884ce81d7e17572ae0abbeb91ceadb31f9356c4e9255982a00edcfe729", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/sync/typegraph.ts": "78120bc4d35e728ed86a98781c5d60996050fa8b35fa91f563c3c8b2a964b5dd", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/system_typegraphs.ts": "51299d60c1bb75b3e74998eb77bdf1680ee9d4a2f29a267d3ca90b2867c577fb", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/transports/graphql/gq.ts": "78435e53ec1c5b7aec29364c051eb8f10802714050d24ee68a65e1e263495d7d", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/transports/graphql/graphql.ts": "9f4aa79276e05acc6020da2a18472a1cc54c0ecf42efcbf017d67a88b0b90af2", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/transports/graphql/request_parser.ts": "afbc95debcb1bbfa6fc2b88937d7abedbed1f4335bb2d17bf98c7293761cfdb0", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/transports/graphql/typegraph.ts": "fc0ba3f62e1dd687a0545adb1dbaf7185176e0f1e938bfdd29cfef7f85951635", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/transports/graphql/utils.ts": "d09147add80f5e53a643ed3126ee8675a1655480728311de2def04ffe6262a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/transports/rest/rest_schema_generator.ts": "c776e83c6a55e9bee3ec72c36c1d771b3ca711e4086b3728e4983ab866472624", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegate/artifacts/local.ts": "d36ece0f53a56922744dd4d3e170101466b3816ba136f9574e799880e27d1a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegate/artifacts/mod.ts": "fc931ffd49dc168da12882acf1055d3252e0cb3b666928e67d08d2a6c5be3447", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegate/artifacts/shared.ts": "5061a07eb880e33c1543e7397e945d50b476ed51d81fc01d109c53295f089131", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegate/hooks.ts": "ea97c08285388300802676d03dbc06caadf060093736abce07ef8f99a60e9a04", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegate/memory_register.ts": "6eab24914a941f85c233037013dc13749d8b689c5f9ffb38600df4c7b00a94f0", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegate/mod.ts": "d9f10b53a40192863a431c6be541effb4fd3c012ed8a716712d5176eba8c884a", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegate/no_limiter.ts": "1e98610a737bd74668f80b7014c64669a59a801355340eaa14411e07f4a8a94e", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegate/rate_limiter.ts": "b5718ab9e718314f11f5d88d84795bd0e61575856470793f1fe83d499f4a9d40", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegate/register.ts": "d7a8732386ad019d4dcee0372b6cab93bfc55e0146729842db2aaecf1411b15d", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegraph/mod.ts": "27c917783dd8cf99d06290c0768e852ab348c3e989e47c77e648ffcc564b79fb", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegraph/type_node.ts": "7f721cd5f6da2cbc7e66b804e0f81e0429aa2893e0a93244f9e66b39cb96b1a0", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegraph/types.ts": "fc813b5f18e71b58e5f7904cd7fe3d6cae38b3c7055a8875042588c1561df160", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegraph/utils.ts": "66fe8e1b5072f52ea2efebc5cf42001c3b858068b2d970ee3c8558032ff53103", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegraph/versions.ts": "cdab4b07960f78c1f18511a8cc464a7e97c4c1fd15c6e8678c109483d3c26508", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegraph/visitor.ts": "0fb0f89d92cb1654c1b010494a14c1aad88c7923102ea3e89866b232d3bcdf04", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegraphs/introspection.json": "bbcf2c4233371c7f36052e5fe9e1cb1d18a46d3f31391cfcba2a3063c9141adb", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegraphs/prisma_migration.json": "dfc346ff8fc2cef611c8f172b90e9d13eae6fed8b3dd65dea8631f9533159173", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/typegraphs/typegate.json": "bc0cbf4cd2c5de34410779994240993db4f1dd3d1eeda10b6045efdc37eb48a4", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/types.ts": "a36918c2bfab397edec906c23d2cd7558246337bb16fdf1ea4e353cffea5f2b4", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/utils.ts": "de1a17260e76607e1a8fd6d7384cbc21bb26e08f64bffc41d6508bf5a8359311", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/utils/hash.ts": "df6cf462c7a6a805b91dce9d3e7bbbd00ea3bfd8dcc973fb3e6c94e48e33d9b9", - "https://raw.githubusercontent.com/metatypedev/metatype/bb42c00169a34c4282317d50800993eea781a69d/src/typegate/src/worker_utils.ts": "19f686d729b947ab3eb2f29e99ccd07578037a3bccced65fc0dce42d5338cd31", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/engine/bindings.ts": "e9391491bf5c4f682267a5cb4ae384ef33ed7c15273fcada13bea7b064cf1270", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/engine/runtime.js": "1ae55e76d3de8e79c37054d9127c92af496ce10aa905ea64021893048bb33794", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/config.ts": "289820b743711beb9139bca83556f60774521f3c58addd5c441ae3205ef49e61", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/config/loader.ts": "f46ed5199db89c6e5ebe5accb1cd7561a22cb8a158dfc86b371956d3002662cb", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/config/shared.ts": "b2cc53588d6651b5261de312c4b92f517f0b764cd95eb1b8771e46c3f46376a0", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/config/types.ts": "77f7051cece41b67b47471511496e35b76bd7eda0ba10cdcd02fda261ca0ed13", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/crypto.ts": "00efcbf7906e66105a5b18f1654cd78bc05f8b2ed755cc4be9f5755f49a577c3", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/computation_engine.ts": "9fb3033c491a17aec92757a1b7c299fa5c5197dff666b86f074beebc643d239f", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/planner/args.ts": "2eecd557a4cde56ebdfbbdf998bff4386fcd0b79007a7ba5fc1d2c71f57f3a85", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/planner/dependency_resolver.ts": "98c9505a700ad0cd74fac327e7258aae6bbd60cd60587a4ec56bcfe57cf6fe79", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/planner/injection_utils.ts": "21a0b4117e00c48533a83bd2985046eb4510aba3c331c02bf64920d719d282bc", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/planner/mod.ts": "a90671e394e0ade1e47a1d1bf65560fc06d8d14531f062f902254e761d01bdb3", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/planner/parameter_transformer.ts": "953d7c970141e44e29be72d79cc253ab26ea5a366a2f4bcd43ec6c73203737ca", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/planner/policies.ts": "0ef1f49f06d17e1df8e8ec0108bdf1458fcf95b42be8fbdb0c1357b46a5020a2", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/query_engine.ts": "152e96d3c4f5e1161f974ca36c2034ea3d3ef56f548fa64bbb4563dd2ed7d6dc", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/stage_id.ts": "b3b3c62215ff421103788079b77943af8f0026a56eafaa929415cb39ccde3cca", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/code_generator.ts": "adb81b215a10bbf73f00b910d75e953dd8f630d3dd590e6c85323cae4da6b608", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/common.ts": "bf2174d58cc898f094c5e353e43988888922dfbf6878e75619594f5de5498843", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/inline_validators/common.ts": "112f56c8e590215b0af0c1b46dc84b85cb5b9b43621a52646876c35a43103499", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/inline_validators/constraints.ts": "f173ed12173c92b3eca2b306973dee34e18feeccd2c4c51f11fe98216e7d80e7", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/inline_validators/list.ts": "d6ea1984e6dd3e422173b5252fb5e10d27f216c7051aad1452250a0454c465d5", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/inline_validators/number.ts": "aebeb91359a8edcc444b1a229dbca67cefd910837e771f4f18eba0070bdd80bc", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/inline_validators/object.ts": "1c10be974a2ba3b2b60072c34af84497cd099f263fb8223ebe763bccb7ec451a", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/inline_validators/string.ts": "7ea1e1661e54d093a56df7be22ee8590940efd3a230317ebc80b0978a0de5ce4", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/input.ts": "f6f00f03d82288804a31852a65ec89f021134591a6888e9972ea7512bb41aecd", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/matching_variant.ts": "6a9c0232b61fd9a20bd35cc4caa2350901504655bacad839fa275b24f9292e45", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/engine/typecheck/result.ts": "494f6a0b58cf7ee9e27fbae65de71a33e1659efcff428be51dd158824096f247", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/errors.ts": "3314988ebc9d7a5e3033239a9cfba752020144b8bfd9cacd3d3fc46d0ea30644", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/libs/jsonpath.ts": "f6851288fb8600dec0e62d5f804f41332b6197b255b6497360ba7e4b7f375cba", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/log.ts": "a44dca4a37baef59ee50bd44b4ee12c77fd57bd57c0bc09aab8016c2550b1b32", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/main.ts": "af5c054d8188afa43b3f5cf3f779a3b0fe2c2bccf2cb7dbde942f469a0ebaad7", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/Runtime.ts": "6fba220b09e69aefca2e4e5a77eaf830906dece0fa4b500d878edb6c6463953c", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/deno.ts": "c893dcf170b38547239d550080a856aca46a788de9922f282bbacf9b5841b5fe", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/deno/deno.ts": "9f5c74dd2b70f0259e9891b62907720e0f77117a34e69f40efd3e080c39acc6c", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/deno/deno_messenger.ts": "18ee6e6797702955744bc2a11e37e4e3cdccdbf249cc4877cbacaeb3aa66775c", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/deno/shared_types.ts": "2ef1fa347c241162a8a32cebb1113b20f94326c4b20b0883e72b79bb879e5d07", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/deno/worker.ts": "fabc721575f048d8e4ca960e41dcda57b7103151b606a736ac0358dd7c418bc6", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/graphql.ts": "a03a5f3e1d538f736c9691074e67e6b4d8bfa880bd7e49918216d8dcd6226acb", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/http.ts": "580b43b0db099a0c5ac3aa971c74fe78bee8e95addc2369d1a827fcc6e15033e", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/mod.ts": "b1d8e5d42a6b382e83342e562397d8213490ce5af245e8b6b1751eeec61d79d2", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/patterns/messenger/async_messenger.ts": "5457677d4b44abc060cb7c625a66fd4db231206df656bfc41b5a2e017833eea2", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/patterns/messenger/lazy_async_messenger.ts": "744b0e499ef5a8cdb10f35c5c8570984cac7a00f64d85c1374dabf00624b0397", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/patterns/messenger/types.ts": "23ddb7d12e4d049158ffefdb0b8f00ff9c8b7c1c31637b101e391f89ae6e8a97", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/prisma.ts": "e4b679c3b5e28a323d72bde5ebbcc113abe0efc8da82d70b3b2e390149c57d84", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/prisma/hooks/generate_schema.ts": "70e8b612f4c771dd607233cede7036f7d343702086a8d9cd3904d8e947daac90", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/prisma/hooks/mod.ts": "3e33752e3676b538c7016f3ddd4f1f49d75e217c410bcaa6319d33ed987d3c60", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/prisma/hooks/run_migrations.ts": "456398f2300b8da1b870db6e84524c5920e57c7bcf15d8a5f3e1323199f26170", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/prisma/migration.ts": "3dae1ae03546123ffc2bee76a5d049ab76cf8724fdf353b0c610f6e86364ab2d", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/prisma/mod.ts": "a0e44e86a45aad8b2bb0357ddbe8ba02802e6979451553940ec3688be571127f", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/prisma/prisma.ts": "c36709efd13ea0553d552483d8a268c2432276a932144428bcaac869e2913ca4", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/prisma/types.ts": "44e221d8143e314e8db39b62e245518a290bf4248ace208a755d0aa1a5af99bb", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/python.ts": "32825eba0eb6680fa97933535a96ae80e09e7bd0d207b0385dd3da8cf843bbec", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/random.ts": "2f65216d0bd56953af78938151f697f11e7c22a1ac0c68d15f85940c5fd49a1d", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/s3.ts": "c9f027361982be38ce4b157d9779ff9a2cb6b6b686fb749eb600d0bb73447ae5", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/temporal.ts": "b31d30777e71ae4c8d2ac1cdf522b7b498d545d0c60c2fb4e76c685f3e2c49ee", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/typegate.ts": "ef7fc75335d947e9afce79418bb3802a4a174ad68b4b4b719232fe7df5d78040", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/typegraph.ts": "55b5d9b6a4a0d536a06d63b57e863f12f3dae38b2b421f205c50340424e43f7f", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/utils/graphql_forward_vars.ts": "5faf28e955a0e950a5c79bc3ceb68d9c4a14df3dd2e94dd867e063de6ae1da88", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/utils/graphql_inline_vars.ts": "f69ace5ac7509f3ce33c0b31b73597372efba42eac09948ab5e8e6d38b37e3a3", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/utils/http.ts": "842af99040fd0e3456690f7674311da3a0b9ea64c608d7bc588df1ab28f163a3", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/wasm_reflected.ts": "b3562d7cafc777625f9cc06d74fcac9634d64ab5d191f2e7742155e7426377e0", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/wasm_wire.ts": "d3e53d0eab0482bd9d222897a147d5afa4ea5e31b66b7b98d40b5f13f39e9f7b", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/runtimes/wit_wire/mod.ts": "30749d1b2cf9fc5da5464c30194aabfafd019ec5d171f519a37040893f7ee16c", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/artifact_service.ts": "b910693b1ed6b8ae4ed4036b0e4c423313870cce514cde7095c6dd8f03234bd9", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/cookies.ts": "ebe37f0ff356df71cb72911bb17c13744dba9ebcd5e0eb69abf41d73cf179ee8", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/mod.ts": "0fd5fa8dc8d2278df02a93b457fbb4042261871e57985719e70e39fe491b00f0", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/protocols/basic.ts": "a4361603e15ab387ec4db8664965ecae15457eeb6503f65bc8a11bf7f87a3a6a", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/protocols/internal.ts": "a93b3234a46f4de9e726582d024a3c73114a195560ac59a9e31ad0b3cf397f39", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/protocols/jwt.ts": "f779924412dc01fc557beb200b52198382dc01345e14deb4bf8af9324e1bdbb6", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/protocols/oauth2.ts": "3a6db9349f0e5c8210480eeea26f6c8e26bf2f5df3b5c2a509ac1f3428b214c7", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/protocols/protocol.ts": "158c55618be6165a9ee393ccd1a9da267b084ff04df7e627af1e4fc8fe636644", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/routes/mod.ts": "70ceac64f3e868d5b00b21bd5094b149374f0be487293ad4098415663999320d", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/routes/take.ts": "21304fcbfa9e9f92f240121ac2fad677b315ca1f7e55ec5e6f2905d1ccdeb1aa", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/auth/routes/validate.ts": "f8a2a7f4fa58dac1f10f89dd76d8ec5a4d7ce7e98ddd1d8e56a178c9f6158eaa", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/graphql_service.ts": "c84b8cda35ceb0991d232ff2cfe468f5a93fb19440b594b23eb79dfb3ce31ea7", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/info_service.ts": "a9a1f6ebdcbe64d55806597b879dd5714c32b8b861bed695a944f5e2f1213beb", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/middlewares.ts": "b870a0f9e70880f020510b64d19e0e23450656490ac117192398bafdb00c0ccd", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/playground_service.ts": "d293851d3a5f4d3b196115a38b87d9c4826355290e42c1c1a586604bbbaffd6e", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/responses.ts": "374620f4f7bd96bacb582247f75e279906bff7dee4a1ae107364ba2fbef0b192", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/services/rest_service.ts": "316c7ece7785dc6a39b38e780915057834f3466d5274d49c849d5833bb772dcf", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/sync/replicated_map.ts": "8f7a1686ebd4c195074549771f27ca039398c6976022da79d204548c9a8e1188", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/sync/typegraph.ts": "9166892f76ca69956dc1300822834a7545886370ef83bdb61a92597dae6b6256", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/system_typegraphs.ts": "ada9d4dc74174078eb502dc707e91b628eae97fb729b90cffd7d59715dcff52f", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/transports/graphql/gq.ts": "341e066e10eb424c17095fe8cc65bbddc9cdfcdd51ecd82dd4905a50c3db8e82", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/transports/graphql/graphql.ts": "fd36d55366b2d0736580a2d8a7c408b6070ad7291db3cfbba37a6ed06ad01733", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/transports/graphql/request_parser.ts": "afbc95debcb1bbfa6fc2b88937d7abedbed1f4335bb2d17bf98c7293761cfdb0", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/transports/graphql/typegraph.ts": "e79b5acd4993a902ca4104f30075931bda49c140a5297920b644d6d3f4712ef2", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/transports/graphql/utils.ts": "ab4ee0fe51e53b4b21f7f2cfc4c77513a47d641a0bfe6822ceb46a7d8128adb9", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/transports/rest/rest_schema_generator.ts": "80d22818682b9856368dd87bf3085d6d7f53b7facf3412956588666b518bb8e5", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegate/artifacts/local.ts": "9405ef3cb3775a25d80b12f49aace608ecce7e18c29ed59196709b1e6a408d9c", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegate/artifacts/mod.ts": "ddc5d09342d9fe74b513fc0db52f0c6900d091d5cb9871b8434af0dbec854ae9", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegate/artifacts/shared.ts": "56ab2fc8250ccb7fbfaad6d586f0ea3c6422f9d76104a20af0ad51c1743bba42", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegate/hooks.ts": "de5f9fb6b4d6c288af0309d08147657eadde71e413513fb4607f7ee24d09d7d5", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegate/mod.ts": "3794b2e9a5aaf873b7636c38270bd64af8bcccc0df3d47937f9b102fc8bc2b0c", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegate/rate_limiter.ts": "0b3126eb28284ed3ed7a9fe434a5a096745ebc03e4d8b1b354fc7b791ccccd93", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegate/register.ts": "3eabfb20967d926c5729ed9f29f454e341182def492ae13208b98d03303d9d20", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegraph/mod.ts": "b15034cbf2d23267199ed58ee61a20be21dd7293c9ee162577918e0845d7c60e", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegraph/type_node.ts": "76fcb35bfad244af1fcaa45798b29a7536f5a2a45e8c824ae36a0a8cb87aeab5", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegraph/types.ts": "bbfa88cac8049c02ad220656a554e0953a04cf56af2f166174bd23e7be9cb49c", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegraph/utils.ts": "4d751910f053f7c3f33ce0cdebdd9b19970bee04ef533f65f01788c727c371e7", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegraph/versions.ts": "29e4415454a5095847aa12bec06bcc2ac3cdb6f1b75606dedd8f5612ce64f9f1", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegraph/visitor.ts": "bbcd6204c65e841cf9facf6d7b59ce1456ca051b06935c739a9be9e57807331b", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegraphs/introspection.json": "76e8796d99a71f93c6fd57e6af9708ef2d8f587f9ceca2ae9aec3f49d242e43e", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegraphs/prisma_migration.json": "05bcf740259abcedb1bb2d8b34e6d62cf2ef124481e01379b93ddaf05e99b1c1", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/typegraphs/typegate.json": "99da5fb4052c82a35a65ac18f94cbce47d7e49afdf7678b8127e2f4677805cdb", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/types.ts": "305a38570368838fa2cc3382e7d4fbb8717976397fe8bd4aeda201f7a1cb4b73", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/utils.ts": "17f24991ba464352c3855cd8cda6b4d330f4283f33b167e745571a780e02c8fb", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/src/utils/hash.ts": "2f4ce3f1736df720def3b0fc89ac9e6e29afa0a33d7a988e15cb1d1bebcf026c", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/tests/utils/memory_register.ts": "de21f1494e4e378fc43280e04ea5b59aa791d417c655d47824769cde4fc63b19", - "https://raw.githubusercontent.com/metatypedev/metatype/db616a6ae26eb6fe04e356a777c11185613d97ad/typegate/tests/utils/no_limiter.ts": "730246db1c73b5ca77e01e1838194f3870f4024cbf29a850674564b20425a7f0", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/engine/bindings.ts": "4529b86703a1512302164bca346c29df2a246d0ebbf20248cc39ee9745490dc1", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/engine/runtime.js": "1ae55e76d3de8e79c37054d9127c92af496ce10aa905ea64021893048bb33794", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/config.ts": "63ea402f9a993888a9e3ec88d35112186f8f13bcd3a5fe358e69e0bb603311a5", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/config/loader.ts": "91cc2b67cc9bee413b0b44f9aa2ea7814f50e2465e6bc114eece248554d7477d", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/config/shared.ts": "252b42038eb68059b2cac85c792e36f5849b8e7392b98452341ccc3ee680a774", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/config/types.ts": "15dbd4331e819fcf551522460413af718d9b9f379dea0d9a87ab4871b9c8d9e7", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/crypto.ts": "f550775b9e5bf9e7ec286a1596246a631b117fd91e093169bcad4898fb729634", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/computation_engine.ts": "07a3826fcf0bb13eb3912b8e5cbf69932848cd28c1c4ebda7042f977510d00a5", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/planner/args.ts": "360969f3d6f82ba94891a59db1a445161a41c764e314c8bdfcbc924beb1d2492", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/planner/dependency_resolver.ts": "b851f4a6e2d500f9427dd1a59920d6c71f10904b31863bb1fac4d26e01d02b67", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/planner/injection_utils.ts": "6f9ad0f8f9cde9a985b6ad36bf58418637a85f50749abe6870c792ade7dc45a2", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/planner/mod.ts": "9a4429e7a579903f4f67ab53bd602b2d05a58138bdbd91c7cc5b1b44cf714b68", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/planner/parameter_transformer.ts": "3ba3b9603c6d28c0d54648f8177bce30b8b667e0e1be903d468af3f2645649ff", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/planner/policies.ts": "caf3cfd8a46e21a5d09fdb46882d6ea4ffb376c56070bdb1ccff92fa70989d63", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/query_engine.ts": "dbbbe1f233f67fae4e0574ab8ceafe3f4a03f3c62fa0a9f7cc8d02c44fe79bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/stage_id.ts": "b3b3c62215ff421103788079b77943af8f0026a56eafaa929415cb39ccde3cca", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/code_generator.ts": "edb77e2b98da2f040d3f7567d204dba2a3d8c66ae1a7c2709c049e464763f0cd", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/common.ts": "b585975e1a978dfa966df1a549261049ab159077bc90203a33bfe8ae055b3c6f", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/inline_validators/common.ts": "112f56c8e590215b0af0c1b46dc84b85cb5b9b43621a52646876c35a43103499", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/inline_validators/constraints.ts": "3237d0acce31aca8b2f2bbc0cae8a82d86f3671fcc7fabc3158037c4f79008f5", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/inline_validators/list.ts": "bd70fef3bc3840cfb6255a518de5fdb3db79a68a4481594475aebcbdd6a10102", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/inline_validators/number.ts": "9890c8af998dca2e573fc2ad02e63d9abc9b506b4a0c451d31f5916a8888e401", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/inline_validators/object.ts": "bd4f8891ee823bf82481df2ee181256514fd7299b5fe4fd7cd7194defa228f57", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/inline_validators/string.ts": "914a2b809a344075279578cb35ac3d03cb6025eb9f62c1f9f86958191b9857da", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/input.ts": "e34fec32501c9e4d9b427b097fd6565f54065562e101732e62b4c2799e60288c", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/matching_variant.ts": "aca8db649194921a01aca42b02113d0735262bb63d41ec44174e61c4cfa85369", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/engine/typecheck/result.ts": "6544f206b67c32015950ec96134415c261a60f54c469c1cd73f8accadf87fff6", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/errors.ts": "29dfbfdc8b7a85ee9551831d6db882e50a4e0104102b5885b2bd9a42878365f6", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/libs/jsonpath.ts": "f6851288fb8600dec0e62d5f804f41332b6197b255b6497360ba7e4b7f375cba", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/log.ts": "1330c01d489956c7530e2f2e2e60967f30c6b3a0c5c1d6c18d161ea2cf44fa0e", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/main.ts": "af5c054d8188afa43b3f5cf3f779a3b0fe2c2bccf2cb7dbde942f469a0ebaad7", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/Runtime.ts": "30ec531890bc626953fe16e0a6882c61b05c9cdab8858727662fbf29998df274", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/deno.ts": "c893dcf170b38547239d550080a856aca46a788de9922f282bbacf9b5841b5fe", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/deno/deno.ts": "9964279b30ab39827cb1691484adb84a04d764ba2746122af0dfcba13caa39e3", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/deno/deno_messenger.ts": "81160c8a9c9817b46b52c4eee15cde880fb3f6b013c3b5110ee07a4c9c7f7a5e", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/deno/shared_types.ts": "34d56aa89c5a34e943a34b623b20d13ca54ab5466ea5313e0543da68b7aebcb1", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/deno/worker.ts": "2397af9b517b332ef5df2ffea7d537170084b0c6e3155f62a045ad5c0d557a3b", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/graphql.ts": "5f0f4125367fd5fc43ccb2b8c9e8ba1f9c84348595e70e5ed9870e776d2efed3", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/grpc.ts": "92b2f5214ebe0f7b61e582faa67d6759641feaf788166a939ec6db8d819708da", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/http.ts": "f598a33aa3cafcf37a1f33d84c06bfd0ef5fd768f72837042c83ac6ae1d90762", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/kv.ts": "ea5365bf5cb3a2c1a7a82482d4b5c1f9fb5e84ed331edce4187464a4ca4e5801", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/mod.ts": "26c06f1bff03255c20df97e1a109944b6fd2872acbb27aa97ab38b081fb19d7e", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/patterns/messenger/async_messenger.ts": "40644e011e3a258138ff1fb7a5323754a547016da9c1deb2114cfc471ee28bf0", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/patterns/messenger/lazy_async_messenger.ts": "b93d5e7252231d27d6b76ec4172d67cc23880b78411fb371d0cba2db712e2161", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/prisma.ts": "e4b679c3b5e28a323d72bde5ebbcc113abe0efc8da82d70b3b2e390149c57d84", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/prisma/hooks/generate_schema.ts": "f55ffcb6fdfdfcb29eb5543ac23f89e224fc7e233f4ec598f7c5f44f05eefed2", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/prisma/hooks/mod.ts": "3e33752e3676b538c7016f3ddd4f1f49d75e217c410bcaa6319d33ed987d3c60", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/prisma/hooks/run_migrations.ts": "aa21425f2383068d08accf99e40ca31046a3f8cec30bf5302a345fbf7fda019f", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/prisma/migration.ts": "f501540557b13a32f7b57e5a87f4ae1794cdd95214a49b34a429d7a33a96d5d8", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/prisma/mod.ts": "a0e44e86a45aad8b2bb0357ddbe8ba02802e6979451553940ec3688be571127f", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/prisma/prisma.ts": "9ec0f38674728229d053aff19b4f411852390c08c2886c0944d49c8d13ebfa2f", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/prisma/types.ts": "b4912f164aa8cdb1db3a98238a0271882864ff2778c10920dd7f0f3d59165dd6", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/python.ts": "4a067d196fbcce2978207de7dc61c734dcdc77f0100739080ae341af3c352adf", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/random.ts": "e7651e262ef5857e777ad46877c66f9098a2dfe774c13720a4cd38be327b53ff", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/s3.ts": "d7a0372faf555180bd4326550c1c6a07b156d3c5f0bbbcf9c0f6eb4b0f2bfff1", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/substantial.ts": "175644d75911d09919c06577bfa86239b3a44b1217664035551ff0989e22882a", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/substantial/agent.ts": "223288cb3d7baa02fa2d4e37207da7fa69cf4f16eb04ed7810d3e91ac725615b", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/substantial/types.ts": "8255ea84c5129ffc049d6fa88ad57eadf298d420ff11782c43eae9d2031efed1", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/substantial/workflow_worker_manager.ts": "589611456b82df0637db5f63af0881a459747d7c8963684bdcde291af13515cd", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/temporal.ts": "ff8a21af119e67e30c4cb31f7ac677555ac3945fa6f94431c4535009bf9a4c9c", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/typegate.ts": "52d49471d2682c1be323b53e4cca9866f2babb93708a855daa8c471ba4174b64", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/typegraph.ts": "e5808e5a20080fc260e54113e5941e5dffaeead5e3b7448dc17a48031d4799cf", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/utils/graphql_forward_vars.ts": "f0bb091aadd191eb1491dd86b7abd311ab60e09f532d226c8328b2cfa6025d9e", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/utils/graphql_inline_vars.ts": "9c3c339ee596c93cf65cda696d756c9ef08d34b78e4136472e27a92f2254ec8a", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/utils/http.ts": "842af99040fd0e3456690f7674311da3a0b9ea64c608d7bc588df1ab28f163a3", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/wasm_reflected.ts": "99d59cdd0c4b228c42ac90099036ecf5d2e14d6758916b27e4017d53b69cf481", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/wasm_wire.ts": "d10c891f12c9521bcd1a7e1cb459f642a5f4e0936f25f4e04174141691ba06d1", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/runtimes/wit_wire/mod.ts": "a1b6a3e894c1ad4fefb80d3ab8302e2b1e7b8c568012976ce5c46816d0d8b966", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/artifact_service.ts": "282a9a6c3d89afc8955aabab6b3b242edccba664f5f41558e9c9b07d43dd8d13", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/cookies.ts": "ee17535cb19eab884732cefcdc46e63a2905041d5b5942e9ad6783c50a1f8624", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/mod.ts": "5b15823ec19cec1c985a77d525ee2e9e5c5aa367f5e24c96e305e485b6c633a9", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/protocols/basic.ts": "3c233ae1ccd0d3a8ff47a32c74682921abaf84e0de7c096f220f63b05756fc58", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/protocols/internal.ts": "7a9173406fbc1b885e08dd74a8dd34f168de2f1e9bedef4cdd88dad613e59166", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/protocols/jwt.ts": "e39249df7c2d088da07af1ccf5e97815addb46a994469efd4a335f6ae8618bc5", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/protocols/oauth2.ts": "7172cc6da5ecba71775bbc2d467d52d1f78505204e55452170f35004923b847b", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/protocols/protocol.ts": "158c55618be6165a9ee393ccd1a9da267b084ff04df7e627af1e4fc8fe636644", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/routes/mod.ts": "8fe85c16feb3da7086d3d6fd19a4579585b632893f3534c533c60aed84b9413a", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/routes/take.ts": "bc343c5d34870aeeaf9b0cc9473ba18fe7b324a23a630a57c9fd41eea4418a46", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/auth/routes/validate.ts": "56e52bb6d1660735683bdd398a86936f24ad8a00e402b7d88790867ad559e476", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/graphql_service.ts": "458e3cedcd22a44e166e531bcac4c65972916d81f3776c8161b2440ad212626f", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/info_service.ts": "a9a1f6ebdcbe64d55806597b879dd5714c32b8b861bed695a944f5e2f1213beb", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/middlewares.ts": "8af6277ce67c940564538f4def8e6567b5783b51f7c5f38c902736d620ffe405", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/playground_service.ts": "2cc8689899be7c31ad6c2e9c2c5adde0c6cc1f1442b27a55e8ead830e867dbe5", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/responses.ts": "5c45923c1374aab1ac8dd5b1a09ae69062ab34a448f8e92630678a236e38b2ba", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/services/rest_service.ts": "ae6ffdbddaccdbc7ed11dfb86511f2917332dcf5ae22ed814e1059e640ff7b08", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/sync/replicated_map.ts": "6b94fb884ce81d7e17572ae0abbeb91ceadb31f9356c4e9255982a00edcfe729", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/sync/typegraph.ts": "78120bc4d35e728ed86a98781c5d60996050fa8b35fa91f563c3c8b2a964b5dd", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/system_typegraphs.ts": "51299d60c1bb75b3e74998eb77bdf1680ee9d4a2f29a267d3ca90b2867c577fb", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/transports/graphql/gq.ts": "78435e53ec1c5b7aec29364c051eb8f10802714050d24ee68a65e1e263495d7d", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/transports/graphql/graphql.ts": "9f4aa79276e05acc6020da2a18472a1cc54c0ecf42efcbf017d67a88b0b90af2", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/transports/graphql/request_parser.ts": "afbc95debcb1bbfa6fc2b88937d7abedbed1f4335bb2d17bf98c7293761cfdb0", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/transports/graphql/typegraph.ts": "fc0ba3f62e1dd687a0545adb1dbaf7185176e0f1e938bfdd29cfef7f85951635", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/transports/graphql/utils.ts": "d09147add80f5e53a643ed3126ee8675a1655480728311de2def04ffe6262a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/transports/rest/rest_schema_generator.ts": "c776e83c6a55e9bee3ec72c36c1d771b3ca711e4086b3728e4983ab866472624", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegate/artifacts/local.ts": "d36ece0f53a56922744dd4d3e170101466b3816ba136f9574e799880e27d1a4b", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegate/artifacts/mod.ts": "13583fb57bb5280e26c50ae89834ab73b123b712eb14a1995af00267304fef97", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegate/artifacts/shared.ts": "5061a07eb880e33c1543e7397e945d50b476ed51d81fc01d109c53295f089131", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegate/hooks.ts": "ea97c08285388300802676d03dbc06caadf060093736abce07ef8f99a60e9a04", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegate/memory_register.ts": "6eab24914a941f85c233037013dc13749d8b689c5f9ffb38600df4c7b00a94f0", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegate/mod.ts": "ce468fd7d0a32676f2867bf183c73e59da063f0a5ad3f0cde05d5f40e2bbf280", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegate/no_limiter.ts": "1e98610a737bd74668f80b7014c64669a59a801355340eaa14411e07f4a8a94e", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegate/rate_limiter.ts": "b5718ab9e718314f11f5d88d84795bd0e61575856470793f1fe83d499f4a9d40", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegate/register.ts": "d7a8732386ad019d4dcee0372b6cab93bfc55e0146729842db2aaecf1411b15d", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegraph/mod.ts": "3401f26beae423b008480460495cf7a22791a53cce65fd0a941c34e4b65ee5b0", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegraph/type_node.ts": "b9fe641ac3f721d36b158a2d52ffaaadd44b4a48d204242e6d57e684ebcc5fec", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegraph/types.ts": "fc813b5f18e71b58e5f7904cd7fe3d6cae38b3c7055a8875042588c1561df160", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegraph/utils.ts": "66fe8e1b5072f52ea2efebc5cf42001c3b858068b2d970ee3c8558032ff53103", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegraph/versions.ts": "cdab4b07960f78c1f18511a8cc464a7e97c4c1fd15c6e8678c109483d3c26508", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegraph/visitor.ts": "0fb0f89d92cb1654c1b010494a14c1aad88c7923102ea3e89866b232d3bcdf04", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegraphs/introspection.json": "bbcf2c4233371c7f36052e5fe9e1cb1d18a46d3f31391cfcba2a3063c9141adb", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegraphs/prisma_migration.json": "dfc346ff8fc2cef611c8f172b90e9d13eae6fed8b3dd65dea8631f9533159173", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/typegraphs/typegate.json": "bc0cbf4cd2c5de34410779994240993db4f1dd3d1eeda10b6045efdc37eb48a4", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/types.ts": "a36918c2bfab397edec906c23d2cd7558246337bb16fdf1ea4e353cffea5f2b4", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/utils.ts": "de1a17260e76607e1a8fd6d7384cbc21bb26e08f64bffc41d6508bf5a8359311", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/utils/hash.ts": "df6cf462c7a6a805b91dce9d3e7bbbd00ea3bfd8dcc973fb3e6c94e48e33d9b9", - "https://raw.githubusercontent.com/metatypedev/metatype/dcd3e2581c87ce9cbdb680443e02587f4c3b7a05/src/typegate/src/worker_utils.ts": "19f686d729b947ab3eb2f29e99ccd07578037a3bccced65fc0dce42d5338cd31" + "https://raw.githubusercontent.com/metatypedev/ghjk/v0.2.1/utils/worker.ts": "ac4caf72a36d2e4af4f4e92f2e0a95f9fc2324b568640f24c7c2ff6dc0c11d62" }, "workspace": { "members": { diff --git a/import_map.json b/import_map.json index b2267c7c5c..5fdfc8c448 100644 --- a/import_map.json +++ b/import_map.json @@ -14,9 +14,9 @@ "@std/path": "jsr:@std/path@^1.0.2", "@std/path/": "jsr:/@std/path@^1.0.2/", "@std/uuid": "jsr:@std/uuid@^1.0.1", - "aws-sdk/client-s3": "https://esm.sh/@aws-sdk/client-s3@3.626.0?pin=v135", - "aws-sdk/lib-storage": "https://esm.sh/@aws-sdk/lib-storage@3.626.0?pin=v135", - "aws-sdk/s3-request-presigner": "https://esm.sh/@aws-sdk/s3-request-presigner@3.645.0?pin=v135", + "aws-sdk/client-s3": "https://esm.sh/@aws-sdk/client-s3@3.700.0?pin=v135", + "aws-sdk/lib-storage": "https://esm.sh/@aws-sdk/lib-storage@3.700.0?pin=v135", + "aws-sdk/s3-request-presigner": "https://esm.sh/@aws-sdk/s3-request-presigner@3.700.0?pin=v135", "dispose": "https://deno.land/x/dispose@1.1.0/mod.ts", "graphql": "npm:graphql@16.8.1", "jwt": "https://deno.land/x/djwt@v3.0.1/mod.ts", @@ -39,7 +39,7 @@ "oauth2_client": "https://deno.land/x/oauth2_client@v1.0.2/mod.ts", "sentry": "npm:@sentry/node@7.70.0", "swc": "https://deno.land/x/swc@0.2.1/mod.ts", - "swc/types": "https://esm.sh/@swc/core@1.3.87/types.d.ts?pin=v131", + "swc/types": "https://esm.sh/@swc/core@1.3.87/types.d.ts?pin=v135", "validator": "npm:validator@13.12.0" } } diff --git a/src/common/src/typegraph/mod.rs b/src/common/src/typegraph/mod.rs index 1dd4d9556f..f63079e273 100644 --- a/src/common/src/typegraph/mod.rs +++ b/src/common/src/typegraph/mod.rs @@ -7,6 +7,7 @@ pub mod types; pub mod utils; pub mod validator; pub mod visitor; +pub mod visitor2; pub use types::*; diff --git a/src/common/src/typegraph/validator/mod.rs b/src/common/src/typegraph/validator/mod.rs index 2b95ff865f..4a6d5dfa83 100644 --- a/src/common/src/typegraph/validator/mod.rs +++ b/src/common/src/typegraph/validator/mod.rs @@ -50,7 +50,7 @@ pub fn validate_typegraph(tg: &Typegraph) -> Vec { let context = ValidatorContext { typegraph: tg }; let validator = Validator::default(); - errors.extend(tg.traverse_types(validator, &context, Layer).unwrap()); + errors.extend(tg.traverse_types(validator, &context, Layer, 0).unwrap()); errors } diff --git a/src/common/src/typegraph/visitor.rs b/src/common/src/typegraph/visitor.rs index b7ddd05b5c..d264afd202 100644 --- a/src/common/src/typegraph/visitor.rs +++ b/src/common/src/typegraph/visitor.rs @@ -55,6 +55,7 @@ impl Typegraph { visitor: V, context: &'a V::Context, layer: L, + root_type_idx: u32, ) -> Option where V: TypeVisitor<'a> + Sized + 'a, @@ -71,7 +72,7 @@ impl Typegraph { layer, }; traversal - .visit_type(0, context) + .visit_type(root_type_idx, context) .or_else(|| traversal.visitor.take_result()) } } diff --git a/src/common/src/typegraph/visitor2.rs b/src/common/src/typegraph/visitor2.rs new file mode 100644 index 0000000000..82804b8445 --- /dev/null +++ b/src/common/src/typegraph/visitor2.rs @@ -0,0 +1,252 @@ +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +use std::{cell::RefCell, rc::Rc}; + +use crate::typegraph::{ + visitor::{Edge, PathSegment}, + TypeNode, Typegraph, +}; + +pub struct VisitorContext<'tg> { + pub tg: &'tg Typegraph, + pub current_node: CurrentNode<'tg>, +} + +pub struct NearestFn { + pub path_index: usize, + pub type_idx: u32, + pub is_input: bool, +} + +impl<'a> CurrentNode<'a> { + pub fn nearest_function(&self) -> Option { + for (i, segment) in self.path.borrow().iter().enumerate().rev() { + match segment.edge { + Edge::FunctionInput => { + return Some(NearestFn { + path_index: i, + type_idx: segment.from, + is_input: true, + }) + } + Edge::FunctionOutput => { + return Some(NearestFn { + path_index: i, + type_idx: segment.from, + is_input: false, + }) + } + _ => continue, + } + } + None + } +} + +pub enum VisitNext { + /// continue traversal, with the eventual child nodes + Children, + /// continue traversal, but do not visit the children + Siblings, + Stop, +} + +pub fn traverse_types<'tg, 'path, A, V, E>( + tg: &'tg Typegraph, + root_type_idx: u32, + accumulator: A, + visit_fn: V, +) -> Result +where + V: Fn(VisitorContext<'tg>, &mut A) -> Result, +{ + let path = Rc::new(RefCell::new(Vec::new())); + let output = traverse_types_with_path(tg, root_type_idx, &path, accumulator, &visit_fn)?; + Ok(output.accumulator) +} + +struct TraverseOutput { + accumulator: A, + stop: bool, +} + +type SharedPath = Rc>>; + +#[derive(Debug)] +pub struct CurrentNode<'tg> { + pub type_node: &'tg TypeNode, + pub type_idx: u32, + pub path: SharedPath, +} + +fn traverse_types_with_path<'tg, A, V, E>( + tg: &'tg Typegraph, + type_idx: u32, + path: &Rc>>, + mut accumulator: A, + visit_fn: &V, +) -> Result, E> +where + V: Fn(VisitorContext<'tg>, &mut A) -> Result, +{ + let type_node = &tg.types[type_idx as usize]; + // TODO check for cycles + + // visit current + { + let current_node = CurrentNode { + type_node, + type_idx, + path: path.clone(), + }; + let cx = VisitorContext { tg, current_node }; + match visit_fn(cx, &mut accumulator)? { + VisitNext::Stop => { + return Ok(TraverseOutput { + accumulator, + stop: true, + }) + } + VisitNext::Siblings => { + return Ok(TraverseOutput { + accumulator, + stop: false, + }) + } + VisitNext::Children => (), + } + } + + let push = { + let path = path.clone(); + move |edge: Edge| { + path.borrow_mut().push(PathSegment { + from: type_idx, + edge, + }); + } + }; + + let pop = { + let path = path.clone(); + move || { + path.borrow_mut().pop(); + } + }; + + // visit children + match type_node { + TypeNode::Boolean { .. } + | TypeNode::Integer { .. } + | TypeNode::Float { .. } + | TypeNode::String { .. } + | TypeNode::File { .. } + | TypeNode::Any { .. } => Ok(TraverseOutput { + accumulator, + stop: false, + }), + + TypeNode::Optional { data, .. } => { + let item_type_idx = data.item; + push(Edge::OptionalItem); + let output = traverse_types_with_path(tg, item_type_idx, path, accumulator, visit_fn)?; + pop(); + Ok(output) + } + + TypeNode::List { data, .. } => { + let item_type_idx = data.items; + push(Edge::ArrayItem); + let output = traverse_types_with_path(tg, item_type_idx, path, accumulator, visit_fn)?; + pop(); + Ok(output) + } + + TypeNode::Object { data, .. } => { + let mut accumulator = Some(accumulator); + for (key, prop_idx) in data.properties.iter() { + push(Edge::ObjectProp(key.clone())); + let output = traverse_types_with_path( + tg, + *prop_idx, + path, + accumulator.take().unwrap(), + visit_fn, + )?; + pop(); + if output.stop { + return Ok(output); + } + accumulator = Some(output.accumulator); + } + Ok(TraverseOutput { + accumulator: accumulator.unwrap(), + stop: false, + }) + } + + TypeNode::Union { data, .. } => { + let mut accumulator = Some(accumulator); + for (v, &item_type_idx) in data.any_of.iter().enumerate() { + push(Edge::UnionVariant(v)); + let output = traverse_types_with_path( + tg, + item_type_idx, + path, + accumulator.take().unwrap(), + visit_fn, + )?; + pop(); + if output.stop { + return Ok(output); + } + accumulator = Some(output.accumulator); + } + Ok(TraverseOutput { + accumulator: accumulator.unwrap(), + stop: false, + }) + } + + TypeNode::Either { data, .. } => { + let mut accumulator = Some(accumulator); + for (v, &item_type_idx) in data.one_of.iter().enumerate() { + push(Edge::EitherVariant(v)); + let output = traverse_types_with_path( + tg, + item_type_idx, + path, + accumulator.take().unwrap(), + visit_fn, + )?; + pop(); + if output.stop { + return Ok(output); + } + accumulator = Some(output.accumulator); + } + Ok(TraverseOutput { + accumulator: accumulator.unwrap(), + stop: false, + }) + } + + TypeNode::Function { data, .. } => { + let input_type_idx = data.input; + push(Edge::FunctionInput); + let output = traverse_types_with_path(tg, input_type_idx, path, accumulator, visit_fn)?; + pop(); + if output.stop { + return Ok(output); + } + + let output_type_idx = data.output; + push(Edge::FunctionOutput); + let output = + traverse_types_with_path(tg, output_type_idx, path, output.accumulator, visit_fn)?; + pop(); + Ok(output) + } + } +} diff --git a/src/meta-cli/src/deploy/actors/watcher.rs b/src/meta-cli/src/deploy/actors/watcher.rs index c9301627b6..969c0fbd81 100644 --- a/src/meta-cli/src/deploy/actors/watcher.rs +++ b/src/meta-cli/src/deploy/actors/watcher.rs @@ -171,7 +171,7 @@ impl Handler for WatcherActor { RetryManager::clear_counter(&path); self.task_manager.do_send(task_manager::message::AddTask { - task_ref: self.task_generator.generate(path.into(), 0), + task_ref: self.task_generator.generate(rel_path.into(), 0), reason: TaskReason::DependencyChanged(dependency_path), }); } diff --git a/src/metagen-client-rs/Cargo.toml b/src/metagen-client-rs/Cargo.toml new file mode 100644 index 0000000000..d920a31dea --- /dev/null +++ b/src/metagen-client-rs/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "metagen-client" +version.workspace = true +edition.workspace = true + +[dependencies] +serde = { version = "1.0.210", features = ["derive"] } +serde_json = "1.0.128" +reqwest = { version = "0.12.9", features = ["blocking", "json", "stream", "multipart"] } +mime_guess = "2.0" +futures = { version = "0.3" } +tokio-util = { version = "0.7", features = ["compat", "io"] } +derive_more = { version = "1.0", features = ["debug"] } +lazy_static = "1.5" + +# [features] +# default = ["sync"] +# sync = ["reqwest/blocking"] +# async = ["dep:futures", "dep:tokio-util"] diff --git a/src/metagen-client-rs/src/args.rs b/src/metagen-client-rs/src/args.rs new file mode 100644 index 0000000000..978e5f20da --- /dev/null +++ b/src/metagen-client-rs/src/args.rs @@ -0,0 +1,164 @@ +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +use crate::interlude::*; + +pub enum NodeArgs { + Inline(ArgT), + Placeholder(PlaceholderValue), +} + +impl From for NodeArgs { + fn from(value: ArgT) -> Self { + Self::Inline(value) + } +} + +#[derive(Debug)] +pub enum NodeArgsErased { + None, + Inline(serde_json::Value), + Placeholder(PlaceholderValue), +} + +impl From> for NodeArgsErased +where + ArgT: Serialize, +{ + fn from(value: NodeArgs) -> Self { + match value { + NodeArgs::Inline(arg) => Self::Inline(to_json_value(arg)), + NodeArgs::Placeholder(ph) => Self::Placeholder(ph), + } + } +} + +pub enum NodeArgsMerged { + Inline(HashMap), + Placeholder { + value: PlaceholderValue, + arg_types: HashMap, + }, +} + +/// This checks the input arg json for a node +/// against the arg description from the [`NodeMeta`]. +pub(crate) fn check_node_args( + args: serde_json::Value, + arg_types: &HashMap, +) -> Result, String> { + let args = match args { + serde_json::Value::Object(val) => val, + _ => unreachable!(), + }; + let mut instance_args = HashMap::new(); + for (name, value) in args { + let Some(type_name) = arg_types.get(&name[..]) else { + return Err(name); + }; + instance_args.insert( + name.into(), + NodeArgValue { + type_name: type_name.clone(), + value, + }, + ); + } + Ok(instance_args) +} + +pub struct NodeArgValue { + pub type_name: CowStr, + pub value: serde_json::Value, +} + +pub struct PreparedArgs; + +impl PreparedArgs { + pub fn get(&mut self, key: impl Into, fun: F) -> NodeArgs + where + In: serde::de::DeserializeOwned, + F: Fn(In) -> ArgT + 'static + Send + Sync, + ArgT: Serialize, + { + NodeArgs::Placeholder(PlaceholderValue { + key: key.into(), + fun: Box::new(move |value| { + let value = serde_json::from_value(value)?; + let value = fun(value); + serde_json::to_value(value) + }), + }) + } + pub fn arg(&mut self, key: impl Into, fun: F) -> T + where + T: From>, + In: serde::de::DeserializeOwned, + F: Fn(In) -> ArgT + 'static + Send + Sync, + ArgT: Serialize, + { + T::from(PlaceholderArg { + value: PlaceholderValue { + key: key.into(), + fun: Box::new(move |value| { + let value = serde_json::from_value(value)?; + let value = fun(value); + serde_json::to_value(value) + }), + }, + _phantom: PhantomData, + }) + } + pub fn arg_select( + &mut self, + key: impl Into, + selection: SelT, + fun: F, + ) -> T + where + T: From>, + In: serde::de::DeserializeOwned, + F: Fn(In) -> ArgT + 'static + Send + Sync, + ArgT: Serialize, + { + T::from(PlaceholderArgSelect { + value: PlaceholderValue { + key: key.into(), + fun: Box::new(move |value| { + let value = serde_json::from_value(value)?; + let value = fun(value); + serde_json::to_value(value) + }), + }, + selection, + _phantom: PhantomData, + }) + } +} + +pub struct PlaceholderValue { + pub key: CowStr, + pub fun: Box< + dyn Fn(serde_json::Value) -> Result + Send + Sync, + >, +} + +impl std::fmt::Debug for PlaceholderValue { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("PlaceholderValue") + .field("key", &self.key) + .finish_non_exhaustive() + } +} + +pub struct PlaceholderArg { + pub value: PlaceholderValue, + _phantom: PhantomData, +} +pub struct PlaceholderArgSelect { + pub value: PlaceholderValue, + pub selection: SelT, + _phantom: PhantomData, +} + +pub struct PlaceholderArgs(Arg); diff --git a/src/metagen-client-rs/src/files.rs b/src/metagen-client-rs/src/files.rs new file mode 100644 index 0000000000..2d4000aa56 --- /dev/null +++ b/src/metagen-client-rs/src/files.rs @@ -0,0 +1,279 @@ +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +use crate::interlude::*; +#[derive(Debug, Clone)] +pub enum TypePathSegment { + Optional, + ArrayItem, + ObjectProp(&'static str), +} + +#[derive(Debug, Clone)] +pub struct TypePath(pub &'static [TypePathSegment]); + +// fn path_segment_as_prop(segment: &str) -> Option<&str> { +// segment.strip_prefix('.') +// } +// +#[derive(Debug, Clone)] +pub struct PathToInputFiles(pub &'static [TypePath]); + +#[derive(Debug)] +pub enum ValuePathSegment { + Optional, + Index(usize), + Prop(&'static str), +} + +#[derive(Default, Debug)] +pub struct ValuePath(Vec); + +lazy_static::lazy_static! { + static ref LATEST_FILE_ID: std::sync::atomic::AtomicUsize = std::sync::atomic::AtomicUsize::new(0); + static ref FILE_STORE: std::sync::Mutex> = Default::default(); +} + +enum FileData { + Path(std::path::PathBuf), + Bytes(Vec), + Reader(Box), + Async(reqwest::Body), +} + +pub struct File { + data: FileData, + file_name: Option, + mime_type: Option, +} + +#[derive(Debug, Serialize, Deserialize, Hash, PartialEq, Eq, Clone, Copy)] +pub struct FileId(usize); + +impl TryFrom for FileId { + type Error = BoxErr; + + fn try_from(file: File) -> Result { + let file_id = LATEST_FILE_ID.fetch_add(1, std::sync::atomic::Ordering::Relaxed); + let mut guard = FILE_STORE.lock().map_err(|_| "file store lock poisoned")?; + guard.insert(FileId(file_id), file); + Ok(FileId(file_id)) + } +} + +impl TryFrom for File { + type Error = BoxErr; + + fn try_from(file_id: FileId) -> Result { + let mut guard = FILE_STORE.lock().map_err(|_| "file store lock poisoned")?; + let file = guard.remove(&file_id).ok_or("file not found")?; + if file.file_name.is_none() { + Ok(file.file_name(file_id.0.to_string())) + } else { + Ok(file) + } + } +} + +impl File { + pub fn from_path>(path: P) -> Self { + Self { + data: FileData::Path(path.into()), + file_name: None, + mime_type: None, + } + } + + pub fn from_bytes>>(data: B) -> Self { + Self { + data: FileData::Bytes(data.into()), + file_name: None, + mime_type: None, + } + } + + pub fn from_reader(reader: R) -> Self { + Self { + data: FileData::Reader(Box::new(reader)), + file_name: None, + mime_type: None, + } + } + + pub fn from_async_reader(reader: R) -> Self { + use tokio_util::compat::FuturesAsyncReadCompatExt as _; + let reader = reader.compat(); + Self { + data: FileData::Async(reqwest::Body::wrap_stream( + tokio_util::io::ReaderStream::new(reader), + )), + file_name: None, + mime_type: None, + } + } +} + +impl File { + pub fn file_name(mut self, file_name: impl Into) -> Self { + self.file_name = Some(file_name.into()); + self + } + + pub fn mime_type(mut self, mime_type: impl Into) -> Self { + self.mime_type = Some(mime_type.into()); + self + } +} + +impl TryFrom for reqwest::blocking::multipart::Part { + type Error = BoxErr; + + fn try_from(file: File) -> Result { + let mut part = match file.data { + FileData::Path(path) => { + let file = std::fs::File::open(path.as_path())?; + let file_size = file.metadata()?.len(); + let mut part = + reqwest::blocking::multipart::Part::reader_with_length(file, file_size); + if let Some(name) = path.file_name() { + part = part.file_name(name.to_string_lossy().into_owned()); + } + part = part.mime_str( + mime_guess::from_path(&path) + .first_or_octet_stream() + .as_ref(), + )?; + part + } + + FileData::Bytes(data) => reqwest::blocking::multipart::Part::bytes(data), + + FileData::Reader(reader) => reqwest::blocking::multipart::Part::reader(reader), + + FileData::Async(_) => { + return Err("async readers are not supported".into()); + } + }; + + if let Some(file_name) = file.file_name { + part = part.file_name(file_name); + } + if let Some(mime_type) = file.mime_type { + part = part.mime_str(&mime_type)?; + } + Ok(part) + } +} + +impl File { + pub(crate) async fn into_reqwest_part(self) -> Result { + let mut part = match self.data { + FileData::Path(path) => reqwest::multipart::Part::file(path).await?, + FileData::Bytes(data) => reqwest::multipart::Part::bytes(data), + FileData::Async(body) => reqwest::multipart::Part::stream(body), + FileData::Reader(_) => { + return Err("sync readers are not supported".into()); + } + }; + + if let Some(file_name) = self.file_name { + part = part.file_name(file_name); + } + if let Some(mime_type) = self.mime_type { + part = part.mime_str(&mime_type)?; + } + Ok(part) + } +} + +#[derive(Debug)] +pub(crate) struct FileExtractor { + path: TypePath, + prefix: String, + current_path: ValuePath, + output: HashMap, +} + +impl FileExtractor { + pub fn extract_all_from( + variables: &mut JsonObject, + mut path_to_files: HashMap>, + ) -> Result, BoxErr> { + let mut output = HashMap::new(); + + for (key, value) in variables.iter_mut() { + let paths = path_to_files.remove(key).unwrap_or_default(); + for path in paths.into_iter() { + let mut extractor = Self { + path, + prefix: key.clone(), + current_path: ValuePath::default(), + output: std::mem::take(&mut output), + }; + extractor.extract_from_value(value)?; + output = extractor.output; + } + } + + Ok(output) + } + + fn extract_from_value(&mut self, value: &mut serde_json::Value) -> Result<(), BoxErr> { + let cursor = self.current_path.0.len(); + if cursor == self.path.0.len() { + // end of type_path; replace file_id with null + let file_id: FileId = serde_json::from_value(value.take())?; + self.output.insert(self.format_path(), file_id); + return Ok(()); + } + let segment = &self.path.0[cursor]; + use TypePathSegment as TPSeg; + use ValuePathSegment as VPSeg; + match segment { + TPSeg::Optional => { + if !value.is_null() { + self.current_path.0.push(VPSeg::Optional); + self.extract_from_value(value)?; + self.current_path.0.pop(); + } + } + TPSeg::ArrayItem => { + let items = value + .as_array_mut() + .ok_or_else(|| format!("expected an array at {:?}", self.format_path()))?; + for (idx, item) in items.iter_mut().enumerate() { + self.current_path.0.push(VPSeg::Index(idx)); + self.extract_from_value(item)?; + self.current_path.0.pop(); + } + } + TPSeg::ObjectProp(key) => { + let object = value + .as_object_mut() + .ok_or_else(|| format!("expected an object at {:?}", self.format_path()))?; + let mut null = serde_json::Value::Null; + let value = object.get_mut(*key).unwrap_or(&mut null); + self.current_path.0.push(VPSeg::Prop(key)); + self.extract_from_value(value)?; + self.current_path.0.pop(); + } + } + + Ok(()) + } + + /// format the path following the GraphQL multipart request spec + /// see: https://github.com/jaydenseric/graphql-multipart-request-spec + fn format_path(&self) -> String { + let mut res = self.prefix.clone(); + use ValuePathSegment as VPSeg; + for seg in &self.current_path.0 { + match seg { + VPSeg::Optional => {} + VPSeg::Index(idx) => res.push_str(&format!(".{}", idx)), + VPSeg::Prop(key) => res.push_str(&format!(".{}", key)), + } + } + res + } +} diff --git a/src/metagen-client-rs/src/graphql.rs b/src/metagen-client-rs/src/graphql.rs new file mode 100644 index 0000000000..748c37c182 --- /dev/null +++ b/src/metagen-client-rs/src/graphql.rs @@ -0,0 +1,1126 @@ +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +use crate::args::{NodeArgsMerged, PlaceholderValue, PreparedArgs}; +use crate::files::{File, FileExtractor, PathToInputFiles, TypePath, TypePathSegment}; +use crate::interlude::*; +use crate::nodes::{SelectNodeErased, SubNodes, ToMutationDoc, ToQueryDoc, ToSelectDoc}; +use std::sync::Arc; + +pub type TyToGqlTyMap = Arc>; + +#[derive(Default, Clone)] +pub struct GraphQlTransportOptions { + headers: reqwest::header::HeaderMap, + timeout: Option, +} + +// PlaceholderValue, fieldName -> gql_var_name +type FoundPlaceholders = Vec<(PlaceholderValue, HashMap)>; + +struct GqlRequest { + doc: String, + variables: JsonObject, + placeholders: FoundPlaceholders, + path_to_files: HashMap>, +} + +struct GqlRequestBuilder<'a> { + ty_to_gql_ty_map: &'a TyToGqlTyMap, + variable_values: JsonObject, + variable_types: HashMap, + // map variable name to path to file types + path_to_files: HashMap>, + doc: String, + placeholders: Vec<(PlaceholderValue, HashMap)>, +} + +impl<'a> GqlRequestBuilder<'a> { + fn new(ty_to_gql_ty_map: &'a TyToGqlTyMap) -> Self { + Self { + ty_to_gql_ty_map, + variable_values: Default::default(), + variable_types: Default::default(), + path_to_files: Default::default(), + doc: Default::default(), + placeholders: Default::default(), + } + } + + fn register_path_to_files(&mut self, name: String, key: &str, files: &PathToInputFiles) { + let path_to_files = files + .0 + .iter() + .filter_map(|path| { + let first = &path.0[0]; + if let TypePathSegment::ObjectProp(prop_key) = first { + if *prop_key == key { + return Some(TypePath(&path.0[1..])); + } + } + None + }) + .collect::>(); + self.path_to_files.insert(name, path_to_files); + } + + fn select_node_to_gql(&mut self, node: SelectNodeErased) -> std::fmt::Result { + use std::fmt::Write; + if node.instance_name != node.node_name { + write!(self.doc, "{}: {}", node.instance_name, node.node_name)?; + } else { + write!(self.doc, "{}", node.node_name)?; + } + + if let Some(args) = node.args { + match args { + NodeArgsMerged::Inline(args) => { + if !args.is_empty() { + write!(&mut self.doc, "(")?; + for (key, val) in args { + let name = format!("in{}", self.variable_types.len()); + + let mut map = serde_json::Map::new(); + map.insert(key.clone().into(), val.value.clone()); + let mut object = serde_json::Value::Object(map); + + if let Some(files) = node.input_files.as_ref() { + self.register_path_to_files(name.clone(), key.as_ref(), files); + } + + write!(&mut self.doc, "{key}: ${name}, ")?; + self.variable_values.insert( + name.clone(), + object + .as_object_mut() + .unwrap() + .remove(key.as_ref()) + .unwrap(), + ); + self.variable_types.insert(name.into(), val.type_name); + } + write!(&mut self.doc, ")")?; + } + } + NodeArgsMerged::Placeholder { value, arg_types } => { + if !arg_types.is_empty() { + write!(&mut self.doc, "(")?; + let mut map = HashMap::new(); + for (key, type_name) in arg_types { + let name = format!("in{}", self.variable_types.len()); + if let Some(files) = node.input_files.as_ref() { + self.register_path_to_files(name.clone(), key.as_ref(), files); + } + write!(&mut self.doc, "{key}: ${name}, ")?; + self.variable_types.insert(name.clone().into(), type_name); + map.insert(key, name.into()); + } + write!(&mut self.doc, ")")?; + self.placeholders.push((value, map)); + } + } + } + } + + match node.sub_nodes { + SubNodes::None => {} + SubNodes::Atomic(sub_nodes) => { + write!(&mut self.doc, "{{ ")?; + for node in sub_nodes { + self.select_node_to_gql(node)?; + write!(&mut self.doc, " ")?; + } + write!(&mut self.doc, " }}")?; + } + SubNodes::Union(variants) => { + write!(&mut self.doc, "{{ ")?; + for (ty, sub_nodes) in variants { + let gql_ty = self + .ty_to_gql_ty_map + .get(&ty[..]) + .expect("impossible: no GraphQL type equivalent found for variant type"); + let gql_ty = match gql_ty.strip_suffix('!') { + Some(val) => val, + None => &gql_ty[..], + }; + write!(&mut self.doc, " ... on {gql_ty} {{ ")?; + for node in sub_nodes { + self.select_node_to_gql(node)?; + write!(&mut self.doc, " ")?; + } + write!(&mut self.doc, " }}")?; + } + write!(&mut self.doc, " }}")?; + } + } + Ok(()) + } + + fn build( + mut self, + nodes: Vec, + ty: &'static str, + name: Option, + ) -> Result { + use std::fmt::Write; + + for (idx, node) in nodes.into_iter().enumerate() { + let node = SelectNodeErased { + instance_name: format!("node{idx}").into(), + ..node + }; + write!(&mut self.doc, " ").expect("error building to string"); + self.select_node_to_gql(node) + .expect("error building to string"); + writeln!(&mut self.doc).expect("error building to string"); + } + + let mut args_row = String::new(); + if !self.variable_types.is_empty() { + write!(&mut args_row, "(").expect("error building to string"); + for (key, ty) in &self.variable_types { + let gql_ty = self.ty_to_gql_ty_map.get(&ty[..]).ok_or_else(|| { + GraphQLRequestError::InvalidQuery { + error: Box::from(format!("unknown typegraph type found: {}", ty)), + } + })?; + write!(&mut args_row, "${key}: {gql_ty}, ").expect("error building to string"); + } + write!(&mut args_row, ")").expect("error building to string"); + } + + let name = name.unwrap_or_else(|| "".into()); + let doc = format!("{ty} {name}{args_row} {{\n{doc}}}", doc = self.doc); + Ok(GqlRequest { + doc, + variables: self.variable_values, + placeholders: self.placeholders, + path_to_files: self.path_to_files, + }) + } +} + +// enum GraphQLRequestBody { +// Json(serde_json::Value), +// Multipart(reqwest::multipart::Form), +// } +// +// struct GraphQLRequest { +// addr: Url, +// method: reqwest::Method, +// headers: reqwest::header::HeaderMap, +// body: GraphQLRequestBody, +// } + +use reqwest::blocking::{Client as ClientSync, RequestBuilder as RequestBuilderSync}; + +enum BuildReqError { + FileUpload { error: BoxErr }, +} + +fn build_gql_req_sync( + client: &ClientSync, + addr: Url, + doc: &str, + mut variables: JsonObject, + path_to_files: HashMap>, + opts: &GraphQlTransportOptions, +) -> Result { + use reqwest::blocking::multipart::Form; + + let files = FileExtractor::extract_all_from(&mut variables, path_to_files) + .map_err(|error| BuildReqError::FileUpload { error })?; + + let mut request = client.request(reqwest::Method::POST, addr); + if let Some(timeout) = opts.timeout { + request = request.timeout(timeout); + } + let mut headers = reqwest::header::HeaderMap::new(); + headers.insert( + reqwest::header::ACCEPT, + "application/json".try_into().unwrap(), + ); + headers.extend(opts.headers.clone()); + + let operations = serde_json::json!({ + "query": doc, + "variables": variables + }); + + // TODO rename files + + if !files.is_empty() { + // multipart + let mut form = Form::new(); + + form = form.text("operations", serde_json::to_string(&operations).unwrap()); + + let (map, files): (HashMap<_, _>, Vec<_>) = files + .into_iter() + .enumerate() + .map(|(idx, (path, file_id))| { + ( + (idx.to_string(), vec![format!("variables.{path}")]), + file_id, + ) + }) + .unzip(); + + form = form.text("map", serde_json::to_string(&map).unwrap()); + + for (idx, file_id) in files.into_iter().enumerate() { + let file: File = file_id + .try_into() + .map_err(|error| BuildReqError::FileUpload { error })?; + form = form.part( + idx.to_string(), + file.try_into() + .map_err(|error| BuildReqError::FileUpload { error })?, + ); + } + + Ok(request.headers(headers).multipart(form)) + } else { + headers.insert( + reqwest::header::CONTENT_TYPE, + "application/json".try_into().unwrap(), + ); + Ok(request.headers(headers).json(&operations)) + } +} + +use reqwest::{Client, RequestBuilder, Url}; +async fn build_gql_req( + client: &Client, + addr: Url, + doc: &str, + mut variables: JsonObject, + path_to_files: HashMap>, + opts: &GraphQlTransportOptions, +) -> Result { + use reqwest::multipart::Form; + + let files = FileExtractor::extract_all_from(&mut variables, path_to_files) + .map_err(|error| BuildReqError::FileUpload { error })?; + + let request = client.request(reqwest::Method::POST, addr); + let mut headers = reqwest::header::HeaderMap::new(); + headers.insert( + reqwest::header::ACCEPT, + "application/json".try_into().unwrap(), + ); + headers.extend(opts.headers.clone()); + + let operations = serde_json::json!({ + "query": doc, + "variables": variables + }); + + if !files.is_empty() { + // multipart + let mut form = Form::new(); + + form = form.text("operations", serde_json::to_string(&operations).unwrap()); + + let (map, files): (HashMap<_, _>, Vec<_>) = files + .into_iter() + .enumerate() + .map(|(idx, (path, file_id))| { + ( + (idx.to_string(), vec![format!("variables.{path}")]), + file_id, + ) + }) + .unzip(); + + form = form.text("map", serde_json::to_string(&map).unwrap()); + + for (idx, file_id) in files.into_iter().enumerate() { + let file: File = file_id + .try_into() + .map_err(|error| BuildReqError::FileUpload { error })?; + form = form.part( + idx.to_string(), + file.into_reqwest_part() + .await + .map_err(|error| BuildReqError::FileUpload { error })?, + ); + } + + Ok(request.headers(headers).multipart(form)) + } else { + headers.insert( + reqwest::header::CONTENT_TYPE, + "application/json".try_into().unwrap(), + ); + Ok(request.headers(headers).json(&operations)) + } +} + +#[derive(Debug)] +pub struct GraphQLResponse { + pub status: reqwest::StatusCode, + pub headers: reqwest::header::HeaderMap, + pub body: JsonObject, +} + +fn handle_response( + response: GraphQLResponse, + nodes_len: usize, +) -> Result, GraphQLRequestError> { + if !response.status.is_success() { + return Err(GraphQLRequestError::RequestFailed { response }); + } + #[derive(Debug, Deserialize)] + struct Response { + data: Option, + errors: Option>, + } + let body: Response = match serde_json::from_value(serde_json::Value::Object(response.body)) { + Ok(body) => body, + Err(error) => { + return Err(GraphQLRequestError::BodyError { + error: Box::new(error), + }) + } + }; + if let Some(errors) = body.errors { + return Err(GraphQLRequestError::RequestErrors { + errors, + data: body.data, + }); + } + let Some(mut body) = body.data else { + return Err(GraphQLRequestError::BodyError { + error: Box::from("body response doesn't contain data field"), + }); + }; + (0..nodes_len) + .map(|idx| { + body.remove(&format!("node{idx}")) + .ok_or_else(|| GraphQLRequestError::BodyError { + error: Box::from(format!( + "expecting response under node key 'node{idx}' but none found" + )), + }) + }) + .collect::, _>>() +} + +#[derive(Debug)] +pub enum GraphQLRequestError { + /// GraphQL errors recieived + RequestErrors { + errors: Vec, + data: Option, + }, + /// Http error codes recieived + RequestFailed { + response: GraphQLResponse, + }, + /// Unable to deserialize body + BodyError { + error: BoxErr, + }, + /// Unable to make http request + NetworkError { + error: BoxErr, + }, + InvalidQuery { + error: BoxErr, + }, + /// Unable to upload file + FileUpload { + error: BoxErr, + }, +} + +impl From for GraphQLRequestError { + fn from(error: BuildReqError) -> Self { + match error { + BuildReqError::FileUpload { error } => GraphQLRequestError::FileUpload { error }, + } + } +} + +impl std::fmt::Display for GraphQLRequestError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + GraphQLRequestError::RequestErrors { errors, .. } => { + write!(f, "graphql errors in response: ")?; + for err in errors { + write!(f, "{}, ", err.message)?; + } + } + GraphQLRequestError::RequestFailed { response } => { + write!(f, "request failed with status {}", response.status)?; + } + GraphQLRequestError::BodyError { error } => { + write!(f, "error reading request body: {error}")?; + } + GraphQLRequestError::NetworkError { error } => { + write!(f, "error making http request: {error}")?; + } + GraphQLRequestError::InvalidQuery { error } => { + write!(f, "error building request: {error}")? + } + GraphQLRequestError::FileUpload { error } => { + write!(f, "error uploading file: {error}")? + } + } + Ok(()) + } +} +impl std::error::Error for GraphQLRequestError {} + +#[derive(Debug, Deserialize)] +pub struct ErrorLocation { + pub line: u32, + pub column: u32, +} +#[derive(Debug, Deserialize)] +pub struct GraphqlError { + pub message: String, + pub locations: Option>, + pub path: Option>, +} + +#[derive(Debug)] +pub enum PathSegment { + Field(String), + Index(u64), +} + +impl<'de> serde::de::Deserialize<'de> for PathSegment { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + use serde_json::Value; + let val = Value::deserialize(deserializer)?; + match val { + Value::Number(n) => Ok(PathSegment::Index(n.as_u64().unwrap())), + Value::String(s) => Ok(PathSegment::Field(s)), + _ => panic!("invalid path segment type"), + } + } +} + +#[derive(Clone)] +pub struct GraphQlTransportReqwestSync { + addr: Url, + ty_to_gql_ty_map: TyToGqlTyMap, + client: reqwest::blocking::Client, +} + +#[derive(Clone)] +pub struct GraphQlTransportReqwest { + addr: Url, + ty_to_gql_ty_map: TyToGqlTyMap, + client: reqwest::Client, +} + +impl GraphQlTransportReqwestSync { + pub fn new(addr: Url, ty_to_gql_ty_map: TyToGqlTyMap) -> Self { + Self { + addr, + ty_to_gql_ty_map, + client: reqwest::blocking::Client::new(), + } + } + + fn fetch( + &self, + nodes: Vec, + opts: &GraphQlTransportOptions, + ty: &'static str, + ) -> Result, GraphQLRequestError> { + let nodes_len = nodes.len(); + let GqlRequest { + doc, + variables, + placeholders, + path_to_files, + } = GqlRequestBuilder::new(&self.ty_to_gql_ty_map).build(nodes, ty, None)?; + if !placeholders.is_empty() { + panic!("placeholders found in non-prepared query") + } + let req = build_gql_req_sync( + &self.client, + self.addr.clone(), + &doc, + variables, + path_to_files, + opts, + )?; + match req.send() { + Ok(res) => { + let status = res.status(); + let headers = res.headers().clone(); + match res.json::() { + Ok(body) => handle_response( + GraphQLResponse { + status, + headers, + body, + }, + nodes_len, + ), + Err(error) => Err(GraphQLRequestError::BodyError { + error: Box::new(error), + }), + } + } + Err(error) => Err(GraphQLRequestError::NetworkError { + error: Box::new(error), + }), + } + } + + pub fn query( + &self, + nodes: Doc, + ) -> Result { + self.query_with_opts(nodes, &Default::default()) + } + + pub fn query_with_opts( + &self, + nodes: Doc, + opts: &GraphQlTransportOptions, + ) -> Result { + let resp = self.fetch(nodes.to_select_doc(), opts, "query")?; + let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { + error: Box::from(format!( + "error deserializing response into output type: {err}" + )), + })?; + Ok(resp) + } + + pub fn mutation( + &self, + nodes: Doc, + ) -> Result { + self.mutation_with_opts(nodes, &Default::default()) + } + + pub fn mutation_with_opts( + &self, + nodes: Doc, + opts: &GraphQlTransportOptions, + ) -> Result { + let resp = self.fetch(nodes.to_select_doc(), opts, "mutation")?; + let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { + error: Box::from(format!( + "error deserializing response into output type: {err}" + )), + })?; + Ok(resp) + } + pub fn prepare_query( + &self, + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + ) -> Result, PrepareRequestError> { + self.prepare_query_with_opts(fun, Default::default()) + } + + pub fn prepare_query_with_opts( + &self, + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + opts: GraphQlTransportOptions, + ) -> Result, PrepareRequestError> { + PreparedRequestReqwestSync::new( + fun, + self.addr.clone(), + opts, + "query", + &self.ty_to_gql_ty_map, + ) + } + + pub fn prepare_mutation( + &self, + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + ) -> Result, PrepareRequestError> { + self.prepare_mutation_with_opts(fun, Default::default()) + } + + pub fn prepare_mutation_with_opts( + &self, + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + opts: GraphQlTransportOptions, + ) -> Result, PrepareRequestError> { + PreparedRequestReqwestSync::new( + fun, + self.addr.clone(), + opts, + "mutation", + &self.ty_to_gql_ty_map, + ) + } +} + +impl GraphQlTransportReqwest { + pub fn new(addr: Url, ty_to_gql_ty_map: TyToGqlTyMap) -> Self { + Self { + addr, + ty_to_gql_ty_map, + client: reqwest::Client::new(), + } + } + + async fn fetch( + &self, + nodes: Vec, + opts: &GraphQlTransportOptions, + ty: &'static str, + ) -> Result, GraphQLRequestError> { + let nodes_len = nodes.len(); + let GqlRequest { + doc, + variables, + placeholders, + path_to_files, + } = GqlRequestBuilder::new(&self.ty_to_gql_ty_map).build(nodes, ty, None)?; + if !placeholders.is_empty() { + panic!("placeholders found in non-prepared query") + } + + let req = build_gql_req( + &self.client, + self.addr.clone(), + &doc, + variables, + path_to_files, + opts, + ) + .await?; + match req.send().await { + Ok(res) => { + let status = res.status(); + let headers = res.headers().clone(); + match res.json::().await { + Ok(body) => handle_response( + GraphQLResponse { + status, + headers, + body, + }, + nodes_len, + ), + Err(error) => Err(GraphQLRequestError::BodyError { + error: Box::new(error), + }), + } + } + Err(error) => Err(GraphQLRequestError::NetworkError { + error: Box::new(error), + }), + } + } + + pub async fn query( + &self, + nodes: Doc, + ) -> Result { + self.query_with_opts(nodes, &Default::default()).await + } + + pub async fn query_with_opts( + &self, + nodes: Doc, + opts: &GraphQlTransportOptions, + ) -> Result { + let resp = self.fetch(nodes.to_select_doc(), opts, "query").await?; + let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { + error: Box::from(format!( + "error deserializing response into output type: {err}" + )), + })?; + Ok(resp) + } + + pub async fn mutation( + &self, + nodes: Doc, + ) -> Result { + self.mutation_with_opts(nodes, &Default::default()).await + } + + pub async fn mutation_with_opts( + &self, + nodes: Doc, + opts: &GraphQlTransportOptions, + ) -> Result { + let resp = self.fetch(nodes.to_select_doc(), opts, "mutation").await?; + let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { + error: Box::from(format!( + "error deserializing response into output type: {err}" + )), + })?; + Ok(resp) + } + pub fn prepare_query( + &self, + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + ) -> Result, PrepareRequestError> { + self.prepare_query_with_opts(fun, Default::default()) + } + + pub fn prepare_query_with_opts( + &self, + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + opts: GraphQlTransportOptions, + ) -> Result, PrepareRequestError> { + PreparedRequestReqwest::new( + fun, + self.addr.clone(), + opts, + "query", + &self.ty_to_gql_ty_map, + ) + } + + pub fn prepare_mutation( + &self, + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + ) -> Result, PrepareRequestError> { + self.prepare_mutation_with_opts(fun, Default::default()) + } + + pub fn prepare_mutation_with_opts( + &self, + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + opts: GraphQlTransportOptions, + ) -> Result, PrepareRequestError> { + PreparedRequestReqwest::new( + fun, + self.addr.clone(), + opts, + "mutation", + &self.ty_to_gql_ty_map, + ) + } +} + +fn resolve_prepared_variables( + placeholders: &FoundPlaceholders, + mut inline_variables: JsonObject, + mut args: HashMap, +) -> Result { + for (ph, key_map) in placeholders { + let Some(value) = args.remove(&ph.key) else { + return Err(PrepareRequestError::PlaceholderError(Box::from(format!( + "no value found for placeholder expected under key '{}'", + ph.key + )))); + }; + let value = (ph.fun)(value).map_err(|err| { + PrepareRequestError::PlaceholderError(Box::from(format!( + "error applying placeholder closure for value under key '{}': {err}", + ph.key + ))) + })?; + let serde_json::Value::Object(mut value) = value else { + unreachable!("placeholder closures must return structs"); + }; + for (key, var_key) in key_map { + inline_variables.insert( + var_key.clone().into(), + value.remove(&key[..]).unwrap_or(serde_json::Value::Null), + ); + } + } + Ok(inline_variables) +} + +pub struct PreparedRequestReqwest { + addr: Url, + client: reqwest::Client, + nodes_len: usize, + pub doc: String, + variables: JsonObject, + path_to_files: HashMap>, + opts: GraphQlTransportOptions, + placeholders: Arc, + _phantom: PhantomData, +} + +pub struct PreparedRequestReqwestSync { + addr: Url, + client: reqwest::blocking::Client, + nodes_len: usize, + pub doc: String, + variables: JsonObject, + path_to_files: HashMap>, + opts: GraphQlTransportOptions, + placeholders: Arc, + _phantom: PhantomData, +} + +impl PreparedRequestReqwestSync { + fn new( + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + addr: Url, + opts: GraphQlTransportOptions, + ty: &'static str, + ty_to_gql_ty_map: &TyToGqlTyMap, + ) -> Result { + let nodes = fun(&mut PreparedArgs); + let nodes = nodes.to_select_doc(); + let nodes_len = nodes.len(); + let GqlRequest { + doc, + variables, + placeholders, + path_to_files, + } = GqlRequestBuilder::new(ty_to_gql_ty_map) + .build(nodes, ty, None) + .map_err(PrepareRequestError::BuildError)?; + Ok(Self { + doc, + variables, + path_to_files, + nodes_len, + addr, + client: reqwest::blocking::Client::new(), + opts, + placeholders: Arc::new(placeholders), + _phantom: PhantomData, + }) + } + + pub fn perform( + &self, + args: impl Into>, + ) -> Result + where + K: Into, + V: serde::Serialize, + { + let args: HashMap = args.into(); + let args = args + .into_iter() + .map(|(key, val)| (key.into(), to_json_value(val))) + .collect(); + let variables = + resolve_prepared_variables(&self.placeholders, self.variables.clone(), args)?; + // TODO extract files from variables after resolution + let req = build_gql_req_sync( + &self.client, + self.addr.clone(), + &self.doc, + variables, + self.path_to_files.clone(), + &self.opts, + )?; + let res = match req.send() { + Ok(res) => { + let status = res.status(); + let headers = res.headers().clone(); + match res.json::() { + Ok(body) => handle_response( + GraphQLResponse { + status, + headers, + body, + }, + self.nodes_len, + ) + .map_err(PrepareRequestError::RequestError)?, + Err(error) => { + return Err(PrepareRequestError::RequestError( + GraphQLRequestError::BodyError { + error: Box::new(error), + }, + )) + } + } + } + Err(error) => { + return Err(PrepareRequestError::RequestError( + GraphQLRequestError::NetworkError { + error: Box::new(error), + }, + )) + } + }; + Doc::parse_response(res).map_err(|err| { + PrepareRequestError::RequestError(GraphQLRequestError::BodyError { + error: Box::from(format!( + "error deserializing response into output type: {err}" + )), + }) + }) + } +} + +impl PreparedRequestReqwest { + fn new( + fun: impl FnOnce(&mut PreparedArgs) -> Doc, + addr: Url, + opts: GraphQlTransportOptions, + ty: &'static str, + ty_to_gql_ty_map: &TyToGqlTyMap, + ) -> Result { + let nodes = fun(&mut PreparedArgs); + let nodes = nodes.to_select_doc(); + let nodes_len = nodes.len(); + let GqlRequest { + doc, + variables, + placeholders, + path_to_files, + } = GqlRequestBuilder::new(ty_to_gql_ty_map) + .build(nodes, ty, None) + .map_err(PrepareRequestError::BuildError)?; + let placeholders = std::sync::Arc::new(placeholders); + Ok(Self { + doc, + variables, + path_to_files, + nodes_len, + addr, + client: reqwest::Client::new(), + opts, + placeholders, + _phantom: PhantomData, + }) + } + + pub async fn perform( + &self, + args: impl Into>, + ) -> Result + where + K: Into, + V: serde::Serialize, + { + let args: HashMap = args.into(); + let args = args + .into_iter() + .map(|(key, val)| (key.into(), to_json_value(val))) + .collect(); + let variables = + resolve_prepared_variables(&self.placeholders, self.variables.clone(), args)?; + // TODO extract files from variables + let req = build_gql_req( + &self.client, + self.addr.clone(), + &self.doc, + variables, + self.path_to_files.clone(), + &self.opts, + ) + .await?; + let res = match req.send().await { + Ok(res) => { + let status = res.status(); + let headers = res.headers().clone(); + match res.json::().await { + Ok(body) => handle_response( + GraphQLResponse { + status, + headers, + body, + }, + self.nodes_len, + ) + .map_err(PrepareRequestError::RequestError)?, + Err(error) => { + return Err(PrepareRequestError::RequestError( + GraphQLRequestError::BodyError { + error: Box::new(error), + }, + )) + } + } + } + Err(error) => { + return Err(PrepareRequestError::RequestError( + GraphQLRequestError::NetworkError { + error: Box::new(error), + }, + )) + } + }; + Doc::parse_response(res).map_err(|err| { + PrepareRequestError::RequestError(GraphQLRequestError::BodyError { + error: Box::from(format!( + "error deserializing response into output type: {err}" + )), + }) + }) + } +} + +// we need a manual clone impl since the derive will +// choke if Doc isn't clone +impl Clone for PreparedRequestReqwestSync { + fn clone(&self) -> Self { + Self { + addr: self.addr.clone(), + client: self.client.clone(), + nodes_len: self.nodes_len, + doc: self.doc.clone(), + variables: self.variables.clone(), + path_to_files: self.path_to_files.clone(), + opts: self.opts.clone(), + placeholders: self.placeholders.clone(), + _phantom: PhantomData, + } + } +} +impl Clone for PreparedRequestReqwest { + fn clone(&self) -> Self { + Self { + addr: self.addr.clone(), + client: self.client.clone(), + nodes_len: self.nodes_len, + doc: self.doc.clone(), + variables: self.variables.clone(), + path_to_files: self.path_to_files.clone(), + opts: self.opts.clone(), + placeholders: self.placeholders.clone(), + _phantom: PhantomData, + } + } +} + +#[derive(Debug)] +pub enum PrepareRequestError { + BuildError(GraphQLRequestError), + PlaceholderError(BoxErr), + RequestError(GraphQLRequestError), + FileUploadError(BoxErr), +} + +impl From for PrepareRequestError { + fn from(error: BuildReqError) -> Self { + match error { + BuildReqError::FileUpload { error } => PrepareRequestError::FileUploadError(error), + } + } +} + +impl std::error::Error for PrepareRequestError {} +impl std::fmt::Display for PrepareRequestError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + /* PrepareRequestError::FunctionError(err) => { + write!(f, "error calling doc builder closure: {err}") + } */ + PrepareRequestError::BuildError(err) => write!(f, "error building request: {err}"), + PrepareRequestError::PlaceholderError(err) => { + write!(f, "error resolving placeholder values: {err}") + } + PrepareRequestError::RequestError(err) => { + write!(f, "error making graphql request: {err}") + } + PrepareRequestError::FileUploadError(err) => { + write!(f, "error uploading file: {err}") + } + } + } +} diff --git a/src/metagen-client-rs/src/lib.rs b/src/metagen-client-rs/src/lib.rs new file mode 100644 index 0000000000..c0c217a7af --- /dev/null +++ b/src/metagen-client-rs/src/lib.rs @@ -0,0 +1,33 @@ +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +mod args; +mod files; +mod graphql; +mod nodes; +mod selection; + +mod interlude { + pub use serde::{Deserialize, Serialize}; + pub use std::collections::HashMap; + pub use std::marker::PhantomData; + + pub type CowStr = std::borrow::Cow<'static, str>; + pub type BoxErr = Box; + pub type JsonObject = serde_json::Map; + + pub fn to_json_value(val: T) -> serde_json::Value { + serde_json::to_value(val).expect("error serializing value") + } +} + +pub mod prelude { + pub use crate::args::*; + pub use crate::files::*; + pub use crate::graphql::*; + pub use crate::interlude::BoxErr; + pub use crate::nodes::*; + pub use crate::selection::*; + pub use crate::{impl_selection_traits, impl_union_selection_traits}; + pub use reqwest::Url; +} diff --git a/src/metagen-client-rs/src/nodes.rs b/src/metagen-client-rs/src/nodes.rs new file mode 100644 index 0000000000..33815c04d3 --- /dev/null +++ b/src/metagen-client-rs/src/nodes.rs @@ -0,0 +1,266 @@ +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +use crate::selection::{selection_to_node_set, SelectionErased, SelectionErasedMap}; + +use crate::{ + args::{NodeArgsErased, NodeArgsMerged}, + files::PathToInputFiles, + interlude::*, + selection::CompositeSelection, +}; + +pub type NodeMetaFn = fn() -> NodeMeta; + +/// How the [`node_metas`] module encodes the description +/// of the typegraph. +pub struct NodeMeta { + pub sub_nodes: Option>, + pub arg_types: Option>, + pub variants: Option>, + pub input_files: Option, +} + +pub enum SubNodes { + None, + Atomic(Vec), + Union(HashMap>), +} + +/// The final form of the nodes used in queries. +pub struct SelectNodeErased { + pub node_name: CowStr, + pub instance_name: CowStr, + pub args: Option, + pub sub_nodes: SubNodes, + pub input_files: Option, +} + +/// Wrappers around [`SelectNodeErased`] that only holds query nodes +pub struct QueryNode(pub SelectNodeErased, pub PhantomData<(Out,)>); +/// Wrappers around [`SelectNodeErased`] that only holds mutation nodes +pub struct MutationNode(pub SelectNodeErased, pub PhantomData<(Out,)>); + +/* /// Trait used to track the `Out` type parameter for [`QueryNode`]/[`MutationNode`] +pub trait ToSelectNode { + type Out; + + fn erased(self) -> SelectNodeErased; +} */ + +/// A variation of [`ToSelectNode`] to only be implemented +/// by aggregates of select nodes like [Vec]s. +pub trait ToSelectDoc { + type Out; + + fn to_select_doc(self) -> Vec; + fn parse_response(data: Vec) -> Result; +} + +/// Marker trait for [`ToSelectDoc`] implementors that only carry query nodes. +pub trait ToQueryDoc {} +/// Marker trait for [`ToSelectDoc`] implementors that only carry mutation nodes. +pub trait ToMutationDoc {} + +/// Struct used to mark query associated types that are generic about effect. +pub struct QueryMarker; +/// Struct used to mark mutationo associated types that are generic about effect. +pub struct MutationMarker; + +/// A node that's yet to have it's subnodes specified. +/// Use [`select`][Self::select] and [`select_aliased`][Self::select_aliased] +/// to finalize it. +/// [`select_aliased`][Self::select_aliased] will allow you to use [`alias`] +/// nodes but the returned object will be a raw [`serde_json::Value`]. +/// This type is generic over effect using the `QTy` parameter. +pub struct UnselectedNode { + pub root_name: CowStr, + pub root_meta: NodeMetaFn, + pub args: NodeArgsErased, + pub _marker: PhantomData<(SelT, SelAliasedT, QTy, Out)>, +} + +impl UnselectedNode +where + SelT: Into, +{ + fn select_erased(self, select: SelT) -> SelectNodeErased { + let nodes = selection_to_node_set( + SelectionErasedMap( + [( + self.root_name.clone(), + match self.args { + NodeArgsErased::None => SelectionErased::Composite(select.into()), + args => SelectionErased::CompositeArgs(args, select.into()), + }, + )] + .into(), + ), + &[(self.root_name, self.root_meta)].into(), + "$q".into(), + ) + .unwrap(); + nodes.into_iter().next().unwrap() + } +} + +impl UnselectedNode +where + SelAliased: Into, +{ + fn select_aliased_erased(self, select: SelAliased) -> SelectNodeErased { + let nodes = selection_to_node_set( + SelectionErasedMap( + [( + self.root_name.clone(), + match self.args { + NodeArgsErased::None => SelectionErased::Composite(select.into()), + args => SelectionErased::CompositeArgs(args, select.into()), + }, + )] + .into(), + ), + &[(self.root_name, self.root_meta)].into(), + "$q".into(), + ) + .unwrap(); + nodes.into_iter().next().unwrap() + } +} + +// NOTE: we'll need a select method implementation for each ATy x QTy pair + +impl UnselectedNode +where + SelT: Into, +{ + pub fn select(self, select: SelT) -> QueryNode { + QueryNode(self.select_erased(select), PhantomData) + } +} +impl UnselectedNode +where + SelAliased: Into, +{ + pub fn select_aliased(self, select: SelAliased) -> QueryNode { + QueryNode(self.select_aliased_erased(select), PhantomData) + } +} +impl UnselectedNode +where + SelT: Into, +{ + pub fn select(self, select: SelT) -> MutationNode { + MutationNode(self.select_erased(select), PhantomData) + } +} +impl UnselectedNode +where + SelAliased: Into, +{ + pub fn select_aliased(self, select: SelAliased) -> MutationNode { + MutationNode(self.select_aliased_erased(select), PhantomData) + } +} + +// --- --- Impl ToSelectDoc --- --- /// + +impl ToSelectDoc for QueryNode +where + Out: serde::de::DeserializeOwned, +{ + type Out = Out; + + fn to_select_doc(self) -> Vec { + vec![self.0] + } + + fn parse_response(data: Vec) -> Result { + let mut data = data.into_iter(); + serde_json::from_value(data.next().unwrap()) + } +} +impl ToQueryDoc for QueryNode {} +impl ToSelectDoc for MutationNode +where + Out: serde::de::DeserializeOwned, +{ + type Out = Out; + + fn to_select_doc(self) -> Vec { + vec![self.0] + } + + fn parse_response(data: Vec) -> Result { + let mut data = data.into_iter(); + serde_json::from_value(data.next().unwrap()) + } +} +impl ToMutationDoc for MutationNode {} + +#[macro_export] +macro_rules! impl_for_tuple { + ($($idx:tt $ty:tt),+) => { + impl<$($ty,)+> ToSelectDoc for ($(QueryNode<$ty>,)+) + where $($ty: serde::de::DeserializeOwned,)+ + { + type Out = ($($ty,)+); + + fn to_select_doc(self) -> Vec { + vec![ + $(self.$idx.0,)+ + ] + } + fn parse_response(data: Vec) -> Result { + let mut data = data.into_iter(); + let mut next = move |_idx| data.next().unwrap(); + Ok(( + + $(serde_json::from_value(next($idx))?,)+ + )) + } + } + impl<$($ty,)+> ToSelectDoc for ($(MutationNode<$ty>,)+) + where $($ty: serde::de::DeserializeOwned,)+ + { + type Out = ($($ty,)+); + + fn to_select_doc(self) -> Vec { + vec![ + $(self.$idx.0,)+ + ] + } + fn parse_response(data: Vec) -> Result { + let mut data = data.into_iter(); + let mut next = move |_idx| data.next().unwrap(); + Ok(( + + $(serde_json::from_value(next($idx))?,)+ + )) + } + } + + impl<$($ty,)+> ToQueryDoc for ($($ty,)+) + where + $($ty: ToQueryDoc,)+ + {} + + impl<$($ty,)+> ToMutationDoc for ($($ty,)+) + where + $($ty: ToMutationDoc,)+ + {} + }; +} + +impl_for_tuple!(0 N0); +impl_for_tuple!(0 N0, 1 N1); +impl_for_tuple!(0 N0, 1 N1, 2 N2); +impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3); +impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4); +impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5); +impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6); +impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7); +impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8); +impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8, 9 N9); +impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8, 9 N9, 10 N10); +impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8, 9 N9, 10 N10, 11 N11); diff --git a/src/metagen-client-rs/src/selection.rs b/src/metagen-client-rs/src/selection.rs new file mode 100644 index 0000000000..103d372c01 --- /dev/null +++ b/src/metagen-client-rs/src/selection.rs @@ -0,0 +1,800 @@ +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +use crate::args::{ + check_node_args, NodeArgsErased, NodeArgsMerged, PlaceholderArg, PlaceholderArgSelect, +}; +use crate::interlude::*; +use crate::nodes::{NodeMeta, NodeMetaFn, SelectNodeErased, SubNodes}; + +/// Build the SelectNodeErased tree from the SelectionErasedMap tree +/// according to the NodeMeta tree. In this function +/// - arguments are associated with their types +/// - aliases get splatted into the node tree +/// - light query validation takes place +/// +/// I.e. the user's selection is joined with the description of the graph found +/// in the static NodeMetas to fill in any blank spaces +pub fn selection_to_node_set( + selection: SelectionErasedMap, + metas: &HashMap, + parent_path: String, +) -> Result, SelectionError> { + let mut out = vec![]; + let mut selection = selection.0; + let mut found_nodes = selection + .keys() + .cloned() + .collect::>(); + for (node_name, meta_fn) in metas.iter() { + found_nodes.remove(&node_name[..]); + + let Some(node_selection) = selection.remove(&node_name[..]) else { + // this node was not selected + continue; + }; + + // we can have multiple selection instances for a node + // if aliases are involved + let node_instances = match node_selection { + // this noe was not selected + SelectionErased::None => continue, + SelectionErased::Scalar => vec![(node_name.clone(), NodeArgsErased::None, None)], + SelectionErased::ScalarArgs(args) => { + vec![(node_name.clone(), args, None)] + } + SelectionErased::Composite(select) => { + vec![(node_name.clone(), NodeArgsErased::None, Some(select))] + } + SelectionErased::CompositeArgs(args, select) => { + vec![(node_name.clone(), args, Some(select))] + } + SelectionErased::Alias(aliases) => aliases + .into_iter() + .map(|(instance_name, selection)| { + let (args, select) = match selection { + AliasSelection::Scalar => (NodeArgsErased::None, None), + AliasSelection::ScalarArgs(args) => (args, None), + AliasSelection::Composite(select) => (NodeArgsErased::None, Some(select)), + AliasSelection::CompositeArgs(args, select) => (args, Some(select)), + }; + (instance_name, args, select) + }) + .collect(), + }; + + let meta = meta_fn(); + for (instance_name, args, select) in node_instances { + out.push(selection_to_select_node( + instance_name, + node_name.clone(), + args, + select, + &parent_path, + &meta, + )?) + } + } + Ok(out) +} + +pub fn selection_to_select_node( + instance_name: CowStr, + node_name: CowStr, + args: NodeArgsErased, + select: Option, + parent_path: &str, + meta: &NodeMeta, +) -> Result { + let args = if let Some(arg_types) = &meta.arg_types { + match args { + NodeArgsErased::Inline(args) => { + let instance_args = check_node_args(args, arg_types).map_err(|name| { + SelectionError::UnexpectedArgs { + name, + path: format!("{parent_path}.{instance_name}"), + } + })?; + Some(NodeArgsMerged::Inline(instance_args)) + } + NodeArgsErased::Placeholder(ph) => Some(NodeArgsMerged::Placeholder { + value: ph, + // FIXME: this clone can be improved + arg_types: arg_types.clone(), + }), + NodeArgsErased::None => { + return Err(SelectionError::MissingArgs { + path: format!("{parent_path}.{instance_name}"), + }) + } + } + } else { + None + }; + let sub_nodes = match (&meta.variants, &meta.sub_nodes) { + (Some(_), Some(_)) => unreachable!("union/either node metas can't have sub_nodes"), + (None, None) => SubNodes::None, + (variants, sub_nodes) => { + let Some(select) = select else { + return Err(SelectionError::MissingSubNodes { + path: format!("{parent_path}.{instance_name}"), + }); + }; + match select { + CompositeSelection::Atomic(select) => { + let Some(sub_nodes) = sub_nodes else { + return Err(SelectionError::UnexpectedUnion { + path: format!("{parent_path}.{instance_name}"), + }); + }; + SubNodes::Atomic(selection_to_node_set( + select, + sub_nodes, + format!("{parent_path}.{instance_name}"), + )?) + } + CompositeSelection::Union(mut variant_select) => { + let Some(variants) = variants else { + return Err(SelectionError::MissingUnion { + path: format!("{parent_path}.{instance_name}"), + }); + }; + let mut out = HashMap::new(); + for (variant_ty, variant_meta) in variants { + let variant_meta = variant_meta(); + // this union member is a scalar + let Some(sub_nodes) = variant_meta.sub_nodes else { + continue; + }; + let mut nodes = if let Some(select) = variant_select.remove(variant_ty) { + selection_to_node_set( + select, + &sub_nodes, + format!("{parent_path}.{instance_name}.variant({variant_ty})"), + )? + } else { + vec![] + }; + nodes.push(SelectNodeErased { + node_name: "__typename".into(), + instance_name: "__typename".into(), + args: None, + sub_nodes: SubNodes::None, + input_files: meta.input_files.clone(), + }); + out.insert(variant_ty.clone(), nodes); + } + if !variant_select.is_empty() { + return Err(SelectionError::UnexpectedVariants { + path: format!("{parent_path}.{instance_name}"), + varaint_tys: variant_select.into_keys().collect(), + }); + } + SubNodes::Union(out) + } + } + } + }; + Ok(SelectNodeErased { + node_name, + instance_name, + args, + sub_nodes, + input_files: meta.input_files.clone(), + }) +} + +#[derive(Debug)] +pub enum SelectionError { + MissingArgs { + path: String, + }, + MissingSubNodes { + path: String, + }, + MissingUnion { + path: String, + }, + UnexpectedArgs { + path: String, + name: String, + }, + UnexpectedUnion { + path: String, + }, + UnexpectedVariants { + path: String, + varaint_tys: Vec, + }, +} + +impl std::fmt::Display for SelectionError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + SelectionError::MissingArgs { path } => write!(f, "args are missing at node {path}"), + SelectionError::UnexpectedArgs { path, name } => { + write!(f, "unexpected arg '${name}' at node {path}") + } + SelectionError::MissingSubNodes { path } => { + write!(f, "node at {path} is a composite but no selection found") + } + SelectionError::MissingUnion { path } => write!( + f, + "node at {path} is a union but provided selection is atomic" + ), + SelectionError::UnexpectedUnion { path } => write!( + f, + "node at {path} is an atomic type but union selection provided" + ), + SelectionError::UnexpectedVariants { + path, + varaint_tys: varaint_ty, + } => { + write!( + f, + "node at {path} has none of the variants called '{varaint_ty:?}'" + ) + } + } + } +} +impl std::error::Error for SelectionError {} + +// This is a newtype for Into trait impl purposes +#[derive(Debug)] +pub struct SelectionErasedMap(pub HashMap); + +#[derive(Debug)] +pub enum CompositeSelection { + Atomic(SelectionErasedMap), + Union(HashMap), +} + +impl Default for CompositeSelection { + fn default() -> Self { + CompositeSelection::Atomic(SelectionErasedMap(Default::default())) + } +} + +#[derive(Debug)] +pub enum SelectionErased { + None, + Scalar, + ScalarArgs(NodeArgsErased), + Composite(CompositeSelection), + CompositeArgs(NodeArgsErased, CompositeSelection), + Alias(HashMap), +} + +#[derive(Debug)] +pub enum AliasSelection { + Scalar, + ScalarArgs(NodeArgsErased), + Composite(CompositeSelection), + CompositeArgs(NodeArgsErased, CompositeSelection), +} + +#[derive(Default, Clone, Copy, Debug)] +pub struct HasAlias; +#[derive(Default, Clone, Copy, Debug)] +pub struct NoAlias; + +#[derive(Debug)] +pub struct AliasInfo { + aliases: HashMap, + _phantom: PhantomData<(ArgT, SelT, ATyag)>, +} + +#[derive(Debug)] +pub enum ScalarSelect { + Get, + Skip, + Alias(AliasInfo<(), (), ATy>), +} +#[derive(Debug)] +pub enum ScalarSelectArgs { + Get(NodeArgsErased, PhantomData), + Skip, + Alias(AliasInfo), +} +#[derive(Debug)] +pub enum CompositeSelect { + Get(CompositeSelection, PhantomData), + Skip, + Alias(AliasInfo<(), SelT, ATy>), +} +#[derive(Debug)] +pub enum CompositeSelectArgs { + Get( + NodeArgsErased, + CompositeSelection, + PhantomData<(ArgT, SelT)>, + ), + Skip, + Alias(AliasInfo), +} + +pub struct Get; +pub struct Skip; +pub struct Args(ArgT); +pub struct Select(SelT); +pub struct ArgSelect(ArgT, SelT); +pub struct Alias(AliasInfo); + +/// Shorthand for `Default::default`. All selections generally default +/// to [`skip`]. +pub fn default() -> T { + T::default() +} +/// Include all sub nodes excpet those that require arguments +pub fn all() -> T { + T::all() +} +/// Select the node for inclusion. +pub fn get>() -> T { + T::from(Get) +} +/// Skip this node when queryig. +pub fn skip>() -> T { + T::from(Skip) +} +/// Provide argumentns for a scalar node. +pub fn args>>(args: ArgT) -> T { + T::from(Args(args)) +} +/// Provide selections for a composite node that takes no args. +pub fn select>>(selection: SelT) -> T { + T::from(Select(selection)) +} +/// Provide arguments and selections for a composite node. +pub fn arg_select>>(args: ArgT, selection: SelT) -> T { + T::from(ArgSelect(args, selection)) +} + +/// Query the same node multiple times using aliases. +/// +/// WARNING: make sure your alias names don't clash across sibling +/// nodes. +pub fn alias(info: impl Into>) -> T +where + S: Into, + ASelT: Into, + T: From> + FromAliasSelection, +{ + let info: HashMap<_, _> = info.into(); + T::from(Alias(AliasInfo { + aliases: info + .into_iter() + .map(|(name, sel)| (name.into(), sel.into())) + .collect(), + _phantom: PhantomData, + })) +} + +pub trait Selection { + /// Include all sub nodes excpet those that require arguments + fn all() -> Self; +} + +// --- Impl SelectionType impls --- // + +impl Selection for ScalarSelect { + fn all() -> Self { + Self::Get + } +} +impl Selection for ScalarSelectArgs { + fn all() -> Self { + Self::Skip + } +} +impl Selection for CompositeSelect +where + SelT: Selection + Into, +{ + fn all() -> Self { + let sel = SelT::all(); + Self::Get(sel.into(), PhantomData) + } +} +impl Selection for CompositeSelectArgs +where + SelT: Selection, +{ + fn all() -> Self { + Self::Skip + } +} +// --- Default impls --- // + +impl Default for ScalarSelect { + fn default() -> Self { + Self::Skip + } +} +impl Default for ScalarSelectArgs { + fn default() -> Self { + Self::Skip + } +} +impl Default for CompositeSelect { + fn default() -> Self { + Self::Skip + } +} +impl Default for CompositeSelectArgs { + fn default() -> Self { + Self::Skip + } +} + +// --- From Get/Skip...etc impls --- // + +impl From for ScalarSelect { + fn from(_: Get) -> Self { + Self::Get + } +} + +impl From for ScalarSelect { + fn from(_: Skip) -> Self { + Self::Skip + } +} +impl From for ScalarSelectArgs { + fn from(_: Skip) -> Self { + Self::Skip + } +} +impl From for CompositeSelect { + fn from(_: Skip) -> Self { + Self::Skip + } +} +impl From for CompositeSelectArgs { + fn from(_: Skip) -> Self { + Self::Skip + } +} + +impl From> for ScalarSelectArgs +where + ArgT: Serialize, +{ + fn from(Args(args): Args) -> Self { + Self::Get(NodeArgsErased::Inline(to_json_value(args)), PhantomData) + } +} + +impl From> for CompositeSelect +where + SelT: Into, +{ + fn from(Select(selection): Select) -> Self { + Self::Get(selection.into(), PhantomData) + } +} + +impl From> for CompositeSelectArgs +where + ArgT: Serialize, + SelT: Into, +{ + fn from(ArgSelect(args, selection): ArgSelect) -> Self { + Self::Get( + NodeArgsErased::Inline(to_json_value(args)), + selection.into(), + PhantomData, + ) + } +} + +impl From> for ScalarSelectArgs { + fn from(value: PlaceholderArg) -> Self { + Self::Get(NodeArgsErased::Placeholder(value.value), PhantomData) + } +} +impl From> + for CompositeSelectArgs +where + SelT: Into, +{ + fn from(value: PlaceholderArgSelect) -> Self { + Self::Get( + NodeArgsErased::Placeholder(value.value), + value.selection.into(), + PhantomData, + ) + } +} + +// --- ToAliasSelection impls --- // + +/// This is a marker trait that allows the core selection types +/// like CompositeSelectNoArgs to mark which types can be used +/// as their aliasing nodes. This prevents usage of invalid selections +/// on aliases like [`Skip`]. +pub trait FromAliasSelection {} + +impl FromAliasSelection for ScalarSelect {} +impl FromAliasSelection> for ScalarSelectArgs {} +impl FromAliasSelection> for CompositeSelect {} +impl FromAliasSelection> + for CompositeSelectArgs +{ +} + +// --- From Alias impls --- // + +impl From>> for ScalarSelect { + fn from(Alias(info): Alias<(), ScalarSelect>) -> Self { + Self::Alias(AliasInfo { + aliases: info.aliases, + _phantom: PhantomData, + }) + } +} +impl From> for ScalarSelectArgs { + fn from(Alias(info): Alias) -> Self { + Self::Alias(info) + } +} +impl From> for CompositeSelect { + fn from(Alias(info): Alias<(), SelT>) -> Self { + Self::Alias(info) + } +} +impl From> for CompositeSelectArgs { + fn from(Alias(info): Alias) -> Self { + Self::Alias(info) + } +} + +// --- Into SelectionErased impls --- // + +impl From> for SelectionErased { + fn from(value: AliasInfo) -> SelectionErased { + SelectionErased::Alias(value.aliases) + } +} + +impl From> for SelectionErased { + fn from(value: ScalarSelect) -> SelectionErased { + use ScalarSelect::*; + match value { + Get => SelectionErased::Scalar, + Skip => SelectionErased::None, + Alias(alias) => alias.into(), + } + } +} + +impl From> for SelectionErased { + fn from(value: ScalarSelectArgs) -> SelectionErased { + use ScalarSelectArgs::*; + match value { + Get(arg, _) => SelectionErased::ScalarArgs(arg), + Skip => SelectionErased::None, + Alias(alias) => alias.into(), + } + } +} + +impl From> for SelectionErased { + fn from(value: CompositeSelect) -> SelectionErased { + use CompositeSelect::*; + match value { + Get(selection, _) => SelectionErased::Composite(selection), + Skip => SelectionErased::None, + Alias(alias) => alias.into(), + } + } +} + +impl From> for SelectionErased +where + SelT: Into, +{ + fn from(value: CompositeSelectArgs) -> SelectionErased { + use CompositeSelectArgs::*; + match value { + Get(args, selection, _) => SelectionErased::CompositeArgs(args, selection), + Skip => SelectionErased::None, + Alias(alias) => alias.into(), + } + } +} + +// --- UnionMember impls --- // + +/// The following trait is used for types that implement +/// selections for the composite members of unions. +/// +/// The err return value indicates the case where +/// aliases are used selections on members which is an error +/// +/// This state is currently impossible to arrive at since +/// AliasInfo has no public construction methods with NoAlias +/// set. Union selection types make sure all their immediate +/// member selection use NoAlias to prevent this invalid stat.e +pub trait UnionMember { + fn composite(self) -> Option; +} + +/// Internal marker trait use to make sure we can't have union members +/// selection being another union selection. +pub trait NotUnionSelection {} + +// NOTE: UnionMembers are all NoAlias +impl UnionMember for ScalarSelect { + fn composite(self) -> Option { + None + } +} + +impl UnionMember for ScalarSelectArgs { + fn composite(self) -> Option { + None + } +} + +impl UnionMember for CompositeSelect +where + SelT: NotUnionSelection, +{ + fn composite(self) -> Option { + use CompositeSelect::*; + match self { + Get(CompositeSelection::Atomic(selection), _) => Some(selection), + Skip => None, + Get(CompositeSelection::Union(_), _) => { + unreachable!("union selection on union member selection. how??") + } + Alias(_) => unreachable!("alias discovored on union/either member. how??"), + } + } +} + +impl UnionMember for CompositeSelectArgs +where + SelT: NotUnionSelection, +{ + fn composite(self) -> Option { + use CompositeSelectArgs::*; + match self { + Get(_args, CompositeSelection::Atomic(selection), _) => Some(selection), + Skip => None, + Get(_args, CompositeSelection::Union(_), _) => { + unreachable!("union selection on union member selection. how??") + } + Alias(_) => unreachable!("alias discovored on union/either member. how??"), + } + } +} + +// --- Into AliasSelection impls --- // + +impl From for AliasSelection { + fn from(_val: Get) -> Self { + AliasSelection::Scalar + } +} +impl From> for AliasSelection +where + ArgT: Serialize, +{ + fn from(val: Args) -> Self { + AliasSelection::ScalarArgs(NodeArgsErased::Inline(to_json_value(val.0))) + } +} +impl From> for AliasSelection +where + SelT: Into, +{ + fn from(val: Select) -> Self { + let map = val.0.into(); + AliasSelection::Composite(map) + } +} + +impl From> for AliasSelection +where + ArgT: Serialize, + SelT: Into, +{ + fn from(val: ArgSelect) -> Self { + let map = val.1.into(); + AliasSelection::CompositeArgs(NodeArgsErased::Inline(to_json_value(val.0)), map) + } +} +impl From> for AliasSelection { + fn from(val: ScalarSelect) -> Self { + use ScalarSelect::*; + match val { + Get => AliasSelection::Scalar, + _ => unreachable!(), + } + } +} +impl From> for AliasSelection { + fn from(val: ScalarSelectArgs) -> Self { + use ScalarSelectArgs::*; + match val { + Get(args, _) => AliasSelection::ScalarArgs(args), + _ => unreachable!(), + } + } +} + +impl From> for AliasSelection +where + SelT: Into, +{ + fn from(val: CompositeSelect) -> Self { + use CompositeSelect::*; + match val { + Get(select, _) => AliasSelection::Composite(select), + _ => unreachable!(), + } + } +} +impl From> for AliasSelection +where + SelT: Into, +{ + fn from(val: CompositeSelectArgs) -> Self { + use CompositeSelectArgs::*; + match val { + Get(args, selection, _) => AliasSelection::CompositeArgs(args, selection), + _ => unreachable!(), + } + } +} + +// TODO: convert to proc_macro +#[macro_export] +macro_rules! impl_selection_traits { + ($ty:ident,$($field:tt),+) => { + impl From<$ty> for CompositeSelection { + fn from(value: $ty) -> CompositeSelection { + CompositeSelection::Atomic(SelectionErasedMap( + [ + $((stringify!($field).into(), value.$field.into()),)+ + ] + .into(), + )) + } + } + + impl Selection for $ty { + fn all() -> Self { + Self { + $($field: all(),)+ + } + } + } + + impl NotUnionSelection for $ty {} + }; +} +#[macro_export] +macro_rules! impl_union_selection_traits { + ($ty:ident,$(($variant_ty:tt, $field:tt)),+) => { + impl From<$ty> for CompositeSelection { + fn from(value: $ty) -> CompositeSelection { + CompositeSelection::Union( + [ + $({ + let selection = + UnionMember::composite(value.$field); + selection.map(|val| ($variant_ty.into(), val)) + },)+ + ] + .into_iter() + .filter_map(|val| val) + .collect(), + ) + } + } + }; +} diff --git a/src/metagen/Cargo.toml b/src/metagen/Cargo.toml index 00badf2b7d..73f67fb742 100644 --- a/src/metagen/Cargo.toml +++ b/src/metagen/Cargo.toml @@ -31,6 +31,7 @@ tera = { workspace = true, default-features = false } garde = { workspace = true, features = ["derive"] } once_cell.workspace = true color-eyre.workspace = true +normpath.workspace = true # test pretty_assertions.workspace = true diff --git a/src/metagen/fixtures/client_rs/Cargo.toml b/src/metagen/fixtures/client_rs/Cargo.toml deleted file mode 100644 index c1b563fa7d..0000000000 --- a/src/metagen/fixtures/client_rs/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -package.name = "client_rs_static" -package.edition = "2021" -package.version = "0.0.1" - -[dependencies] -serde = { version = "1.0.203", features = ["derive"] } -serde_json = "1.0.117" -tokio = { version = "1", features = ["rt-multi-thread"] } -reqwest = { version = "0.12", features = ["blocking","json"] } - -[workspace] -resolver = "2" - -[[bin]] -name = "main" -path = "main.rs" diff --git a/src/metagen/fixtures/client_rs/main.rs b/src/metagen/fixtures/client_rs/main.rs index abca96f131..90155399a4 100644 --- a/src/metagen/fixtures/client_rs/main.rs +++ b/src/metagen/fixtures/client_rs/main.rs @@ -6,6 +6,7 @@ #[rustfmt::skip] pub mod client; use client::*; +use metagen_client::prelude::*; fn main() -> Result<(), BoxErr> { let port = std::env::var("TG_PORT")?; diff --git a/src/metagen/fixtures/tg.ts b/src/metagen/fixtures/tg.ts index e0e4dae44e..d69412d345 100644 --- a/src/metagen/fixtures/tg.ts +++ b/src/metagen/fixtures/tg.ts @@ -13,7 +13,8 @@ typegraph({ int: t.integer(), float: t.float(), boolean: t.boolean(), - file: t.file(), + // FIXME file upload for FDK + // file: t.file(), opt: t.optional(t.string()), either: t.either([ t.struct({ a: t.string() }), diff --git a/src/metagen/src/client_rs/mod.rs b/src/metagen/src/client_rs/mod.rs index 03218e045a..0f15f9d533 100644 --- a/src/metagen/src/client_rs/mod.rs +++ b/src/metagen/src/client_rs/mod.rs @@ -17,6 +17,7 @@ use crate::shared::client::*; use crate::shared::types::NameMemo; use crate::shared::types::TypeRenderer; use crate::utils::GenDestBuf; +use normpath::PathExt; use utils::normalize_type_title; #[derive(Serialize, Deserialize, Debug, garde::Validate)] @@ -292,7 +293,7 @@ impl QueryGraph {{ /// Render the common sections like the transports fn render_static(dest: &mut GenDestBuf) -> core::fmt::Result { let client_rs = include_str!("static/client.rs"); - writeln!(dest, "{}", client_rs)?; + write!(dest, "{}", client_rs)?; Ok(()) } @@ -373,6 +374,7 @@ fn render_node_metas( Rc::new(node_metas::RsNodeMetasRenderer { name_mapper, named_types: named_types.clone(), + input_files: manifest.input_files.clone(), }), ); for &id in &manifest.node_metas { @@ -390,6 +392,7 @@ mod node_metas {{ arg_types: None, sub_nodes: None, variants: None, + input_files: None, }} }}"# )?; @@ -426,13 +429,78 @@ impl NameMapper { } pub fn gen_cargo_toml(crate_name: Option<&str>) -> String { - let cargo_toml = include_str!("static/Cargo.toml"); - if let Some(crate_name) = crate_name { - const DEF_CRATE_NAME: &str = "client_rs_static"; - cargo_toml.replace(DEF_CRATE_NAME, crate_name) + let crate_name = crate_name.unwrap_or("client_rs_static"); + + #[cfg(debug_assertions)] + let is_test = std::env::var("METAGEN_CLIENT_RS_TEST").ok().as_deref() == Some("1"); + + #[cfg(debug_assertions)] + let dependency = if is_test { + let client_path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../metagen-client-rs") + .normalize() + .unwrap(); + format!( + r#"metagen-client = {{ path = "{client_path}" }}"#, + client_path = client_path.as_path().to_str().unwrap() + ) } else { - cargo_toml.to_string() - } + "metagen-client.workspace = true".to_string() + }; + + #[cfg(not(debug_assertions))] + let dependency = format!( + "metagen-client = {{ git = \"https://github.com/metatypedev/metatype.git\", tag = \"{version}\" }}", + version = env!("CARGO_PKG_VERSION") + ); + + #[cfg(debug_assertions)] + let additional_deps = if is_test { + r#" +tokio = { version = "1.0", features = ["rt-multi-thread"] } + "# + } else { + "" + }; + + #[cfg(not(debug_assertions))] + let additional_deps = ""; + + let bin_path = std::env::var("METAGEN_BIN_PATH").ok(); + + let exec = if let Some(bin_path) = bin_path { + format!( + r#" +[[bin]] +name = "metagen" +path = "{bin_path}" +"# + ) + } else { + r#" +# The options after here are configured for crates intended to be +# wasm artifacts. Remove them if your usage is different +[lib] +path = "lib.rs" +crate-type = ["cdylib", "rlib"] + "# + .to_string() + }; + format!( + r#"[package] +name = "{crate_name}" +edition = "2021" +version = "0.0.1" + +[dependencies] +{dependency} +serde = {{ version = "1.0", features = ["derive"] }} +serde_json = "1.0" +{additional_deps} + +{exec} +"# + ) } pub fn gen_lib_rs() -> String { diff --git a/src/metagen/src/client_rs/node_metas.rs b/src/metagen/src/client_rs/node_metas.rs index 4de9c22366..9b60867c1e 100644 --- a/src/metagen/src/client_rs/node_metas.rs +++ b/src/metagen/src/client_rs/node_metas.rs @@ -1,16 +1,21 @@ // Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. // SPDX-License-Identifier: MPL-2.0 -use std::fmt::Write; +use std::{collections::HashMap, fmt::Write}; use common::typegraph::*; use super::utils::normalize_type_title; -use crate::{interlude::*, shared::types::*}; +use crate::{ + interlude::*, + shared::{files::TypePath, types::*}, +}; pub struct RsNodeMetasRenderer { pub name_mapper: Rc, pub named_types: Rc>>, + /// path to file types in the input type + pub input_files: Rc>>, } impl RsNodeMetasRenderer { @@ -43,6 +48,7 @@ pub fn {ty_name}() -> NodeMeta {{ r#" ].into() ), + input_files: None, }} }}"# )?; @@ -77,6 +83,7 @@ pub fn {ty_name}() -> NodeMeta {{ r#" ].into() ), + input_files: None, }} }}"# )?; @@ -89,6 +96,7 @@ pub fn {ty_name}() -> NodeMeta {{ ty_name: &str, return_node: &str, argument_fields: Option>>, + input_files: Option, ) -> std::fmt::Result { write!( dest, @@ -119,6 +127,13 @@ pub fn {ty_name}() -> NodeMeta {{ ),"# )?; } + if let Some(input_files) = input_files { + write!( + dest, + r#" + input_files: Some(PathToInputFiles(&{input_files})),"# + )?; + } write!( dest, r#" @@ -177,7 +192,26 @@ impl RenderType for RsNodeMetasRenderer { }; let node_name = &base.title; let ty_name = normalize_type_title(node_name).to_pascal_case(); - self.render_for_func(renderer, &ty_name, &return_ty_name, props)?; + let input_files = self + .input_files + .get(&cursor.id) + .map(|files| { + files + .iter() + // .map(|path| { + // path.0 + // .iter() + // .map(|s| serde_json::to_string(&s).unwrap()) + // .collect::>() + // }) + .map(|path| format!("&[{}]", path.0.join(", "))) + .collect::>() + }) + .map(|files| { + (!files.is_empty()).then(|| format!("[TypePath({})]", files.join(", "))) + }) + .unwrap_or_default(); + self.render_for_func(renderer, &ty_name, &return_ty_name, props, input_files)?; ty_name } TypeNode::Object { data, base } => { diff --git a/src/metagen/src/client_rs/static/Cargo.toml b/src/metagen/src/client_rs/static/Cargo.toml deleted file mode 100644 index 460a897676..0000000000 --- a/src/metagen/src/client_rs/static/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -package.name = "client_rs_static" -package.edition = "2021" -package.version = "0.0.1" - -[dependencies] -serde = { version = "1.0.210", features = ["derive"] } -serde_json = "1.0.128" -reqwest = { version = "0.12", features = ["blocking","json"] } - -# The options after here are configured for crates intended to be -# wasm artifacts. Remove them if your usage is different -[lib] -path = "lib.rs" -crate-type = ["cdylib", "rlib"] diff --git a/src/metagen/src/client_rs/static/client.rs b/src/metagen/src/client_rs/static/client.rs index a848896a8a..3326a6fc8b 100644 --- a/src/metagen/src/client_rs/static/client.rs +++ b/src/metagen/src/client_rs/static/client.rs @@ -1,2147 +1,5 @@ -use std::{collections::HashMap, marker::PhantomData}; - -use reqwest::Url; -use serde::{Deserialize, Serialize}; - -pub type CowStr = std::borrow::Cow<'static, str>; -pub type BoxErr = Box; -pub type JsonObject = serde_json::Map; - -fn to_json_value(val: T) -> serde_json::Value { - serde_json::to_value(val).expect("error serializing value") -} - -/// Build the SelectNodeErased tree from the SelectionErasedMap tree -/// according to the NodeMeta tree. In this function -/// - arguments are associated with their types -/// - aliases get splatted into the node tree -/// - light query validation takes place -/// -/// I.e. the user's selection is joined with the description of the graph found -/// in the static NodeMetas to fill in any blank spaces -fn selection_to_node_set( - selection: SelectionErasedMap, - metas: &HashMap, - parent_path: String, -) -> Result, SelectionError> { - let mut out = vec![]; - let mut selection = selection.0; - let mut found_nodes = selection - .keys() - .cloned() - .collect::>(); - for (node_name, meta_fn) in metas.iter() { - found_nodes.remove(&node_name[..]); - - let Some(node_selection) = selection.remove(&node_name[..]) else { - // this node was not selected - continue; - }; - - // we can have multiple selection instances for a node - // if aliases are involved - let node_instances = match node_selection { - // this noe was not selected - SelectionErased::None => continue, - SelectionErased::Scalar => vec![(node_name.clone(), NodeArgsErased::None, None)], - SelectionErased::ScalarArgs(args) => { - vec![(node_name.clone(), args, None)] - } - SelectionErased::Composite(select) => { - vec![(node_name.clone(), NodeArgsErased::None, Some(select))] - } - SelectionErased::CompositeArgs(args, select) => { - vec![(node_name.clone(), args, Some(select))] - } - SelectionErased::Alias(aliases) => aliases - .into_iter() - .map(|(instance_name, selection)| { - let (args, select) = match selection { - AliasSelection::Scalar => (NodeArgsErased::None, None), - AliasSelection::ScalarArgs(args) => (args, None), - AliasSelection::Composite(select) => (NodeArgsErased::None, Some(select)), - AliasSelection::CompositeArgs(args, select) => (args, Some(select)), - }; - (instance_name, args, select) - }) - .collect(), - }; - - let meta = meta_fn(); - for (instance_name, args, select) in node_instances { - out.push(selection_to_select_node( - instance_name, - node_name.clone(), - args, - select, - &parent_path, - &meta, - )?) - } - } - Ok(out) -} - -fn selection_to_select_node( - instance_name: CowStr, - node_name: CowStr, - args: NodeArgsErased, - select: Option, - parent_path: &str, - meta: &NodeMeta, -) -> Result { - let args = if let Some(arg_types) = &meta.arg_types { - match args { - NodeArgsErased::Inline(args) => { - let instance_args = check_node_args(args, arg_types).map_err(|name| { - SelectionError::UnexpectedArgs { - name, - path: format!("{parent_path}.{instance_name}"), - } - })?; - Some(NodeArgsMerged::Inline(instance_args)) - } - NodeArgsErased::Placeholder(ph) => Some(NodeArgsMerged::Placeholder { - value: ph, - // FIXME: this clone can be improved - arg_types: arg_types.clone(), - }), - NodeArgsErased::None => { - return Err(SelectionError::MissingArgs { - path: format!("{parent_path}.{instance_name}"), - }) - } - } - } else { - None - }; - let sub_nodes = match (&meta.variants, &meta.sub_nodes) { - (Some(_), Some(_)) => unreachable!("union/either node metas can't have sub_nodes"), - (None, None) => SubNodes::None, - (variants, sub_nodes) => { - let Some(select) = select else { - return Err(SelectionError::MissingSubNodes { - path: format!("{parent_path}.{instance_name}"), - }); - }; - match select { - CompositeSelection::Atomic(select) => { - let Some(sub_nodes) = sub_nodes else { - return Err(SelectionError::UnexpectedUnion { - path: format!("{parent_path}.{instance_name}"), - }); - }; - SubNodes::Atomic(selection_to_node_set( - select, - sub_nodes, - format!("{parent_path}.{instance_name}"), - )?) - } - CompositeSelection::Union(mut variant_select) => { - let Some(variants) = variants else { - return Err(SelectionError::MissingUnion { - path: format!("{parent_path}.{instance_name}"), - }); - }; - let mut out = HashMap::new(); - for (variant_ty, variant_meta) in variants { - let variant_meta = variant_meta(); - // this union member is a scalar - let Some(sub_nodes) = variant_meta.sub_nodes else { - continue; - }; - let mut nodes = if let Some(select) = variant_select.remove(variant_ty) { - selection_to_node_set( - select, - &sub_nodes, - format!("{parent_path}.{instance_name}.variant({variant_ty})"), - )? - } else { - vec![] - }; - nodes.push(SelectNodeErased { - node_name: "__typename".into(), - instance_name: "__typename".into(), - args: None, - sub_nodes: SubNodes::None, - }); - out.insert(variant_ty.clone(), nodes); - } - if !variant_select.is_empty() { - return Err(SelectionError::UnexpectedVariants { - path: format!("{parent_path}.{instance_name}"), - varaint_tys: variant_select.into_keys().collect(), - }); - } - SubNodes::Union(out) - } - } - } - }; - Ok(SelectNodeErased { - node_name, - instance_name, - args, - sub_nodes, - }) -} - -#[derive(Debug)] -pub enum SelectionError { - MissingArgs { - path: String, - }, - MissingSubNodes { - path: String, - }, - MissingUnion { - path: String, - }, - UnexpectedArgs { - path: String, - name: String, - }, - UnexpectedUnion { - path: String, - }, - UnexpectedVariants { - path: String, - varaint_tys: Vec, - }, -} - -impl std::fmt::Display for SelectionError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - SelectionError::MissingArgs { path } => write!(f, "args are missing at node {path}"), - SelectionError::UnexpectedArgs { path, name } => { - write!(f, "unexpected arg '${name}' at node {path}") - } - SelectionError::MissingSubNodes { path } => { - write!(f, "node at {path} is a composite but no selection found") - } - SelectionError::MissingUnion { path } => write!( - f, - "node at {path} is a union but provided selection is atomic" - ), - SelectionError::UnexpectedUnion { path } => write!( - f, - "node at {path} is an atomic type but union selection provided" - ), - SelectionError::UnexpectedVariants { - path, - varaint_tys: varaint_ty, - } => { - write!( - f, - "node at {path} has none of the variants called '{varaint_ty:?}'" - ) - } - } - } -} -impl std::error::Error for SelectionError {} - -// -// --- --- Graph node types --- --- // -// - -type NodeMetaFn = fn() -> NodeMeta; - -/// How the [`node_metas`] module encodes the description -/// of the typegraph. -struct NodeMeta { - sub_nodes: Option>, - arg_types: Option>, - variants: Option>, -} - -enum SubNodes { - None, - Atomic(Vec), - Union(HashMap>), -} - -/// The final form of the nodes used in queries. -pub struct SelectNodeErased { - node_name: CowStr, - instance_name: CowStr, - args: Option, - sub_nodes: SubNodes, -} - -/// Wrappers around [`SelectNodeErased`] that only holds query nodes -pub struct QueryNode(SelectNodeErased, PhantomData<(Out,)>); -/// Wrappers around [`SelectNodeErased`] that only holds mutation nodes -pub struct MutationNode(SelectNodeErased, PhantomData<(Out,)>); - -/* /// Trait used to track the `Out` type parameter for [`QueryNode`]/[`MutationNode`] -pub trait ToSelectNode { - type Out; - - fn erased(self) -> SelectNodeErased; -} */ - -/// A variation of [`ToSelectNode`] to only be implemented -/// by aggregates of select nodes like [Vec]s. -pub trait ToSelectDoc { - type Out; - - fn to_select_doc(self) -> Vec; - fn parse_response(data: Vec) -> Result; -} - -/// Marker trait for [`ToSelectDoc`] implementors that only carry query nodes. -pub trait ToQueryDoc {} -/// Marker trait for [`ToSelectDoc`] implementors that only carry mutation nodes. -pub trait ToMutationDoc {} - -/// Struct used to mark query associated types that are generic about effect. -pub struct QueryMarker; -/// Struct used to mark mutationo associated types that are generic about effect. -pub struct MutationMarker; - -/// A node that's yet to have it's subnodes specified. -/// Use [`select`][Self::select] and [`select_aliased`][Self::select_aliased] -/// to finalize it. -/// [`select_aliased`][Self::select_aliased] will allow you to use [`alias`] -/// nodes but the returned object will be a raw [`serde_json::Value`]. -/// This type is generic over effect using the `QTy` parameter. -pub struct UnselectedNode { - root_name: CowStr, - root_meta: NodeMetaFn, - args: NodeArgsErased, - _marker: PhantomData<(SelT, SelAliasedT, QTy, Out)>, -} - -impl UnselectedNode -where - SelT: Into, -{ - fn select_erased(self, select: SelT) -> SelectNodeErased { - let nodes = selection_to_node_set( - SelectionErasedMap( - [( - self.root_name.clone(), - match self.args { - NodeArgsErased::None => SelectionErased::Composite(select.into()), - args => SelectionErased::CompositeArgs(args, select.into()), - }, - )] - .into(), - ), - &[(self.root_name, self.root_meta)].into(), - "$q".into(), - ) - .unwrap(); - nodes.into_iter().next().unwrap() - } -} - -impl UnselectedNode -where - SelAliased: Into, -{ - fn select_aliased_erased(self, select: SelAliased) -> SelectNodeErased { - let nodes = selection_to_node_set( - SelectionErasedMap( - [( - self.root_name.clone(), - match self.args { - NodeArgsErased::None => SelectionErased::Composite(select.into()), - args => SelectionErased::CompositeArgs(args, select.into()), - }, - )] - .into(), - ), - &[(self.root_name, self.root_meta)].into(), - "$q".into(), - ) - .unwrap(); - nodes.into_iter().next().unwrap() - } -} - -// NOTE: we'll need a select method implementation for each ATy x QTy pair - -impl UnselectedNode -where - SelT: Into, -{ - pub fn select(self, select: SelT) -> QueryNode { - QueryNode(self.select_erased(select), PhantomData) - } -} -impl UnselectedNode -where - SelAliased: Into, -{ - pub fn select_aliased(self, select: SelAliased) -> QueryNode { - QueryNode(self.select_aliased_erased(select), PhantomData) - } -} -impl UnselectedNode -where - SelT: Into, -{ - pub fn select(self, select: SelT) -> MutationNode { - MutationNode(self.select_erased(select), PhantomData) - } -} -impl UnselectedNode -where - SelAliased: Into, -{ - pub fn select_aliased(self, select: SelAliased) -> MutationNode { - MutationNode(self.select_aliased_erased(select), PhantomData) - } -} - -// --- --- Impl ToSelectDoc --- --- /// - -impl ToSelectDoc for QueryNode -where - Out: serde::de::DeserializeOwned, -{ - type Out = Out; - - fn to_select_doc(self) -> Vec { - vec![self.0] - } - - fn parse_response(data: Vec) -> Result { - let mut data = data.into_iter(); - serde_json::from_value(data.next().unwrap()) - } -} -impl ToQueryDoc for QueryNode {} -impl ToSelectDoc for MutationNode -where - Out: serde::de::DeserializeOwned, -{ - type Out = Out; - - fn to_select_doc(self) -> Vec { - vec![self.0] - } - - fn parse_response(data: Vec) -> Result { - let mut data = data.into_iter(); - serde_json::from_value(data.next().unwrap()) - } -} -impl ToMutationDoc for MutationNode {} - -#[macro_export] -macro_rules! impl_for_tuple { - ($($idx:tt $ty:tt),+) => { - impl<$($ty,)+> ToSelectDoc for ($(QueryNode<$ty>,)+) - where $($ty: serde::de::DeserializeOwned,)+ - { - type Out = ($($ty,)+); - - fn to_select_doc(self) -> Vec { - vec![ - $(self.$idx.0,)+ - ] - } - fn parse_response(data: Vec) -> Result { - let mut data = data.into_iter(); - let mut next = move |_idx| data.next().unwrap(); - Ok(( - - $(serde_json::from_value(next($idx))?,)+ - )) - } - } - impl<$($ty,)+> ToSelectDoc for ($(MutationNode<$ty>,)+) - where $($ty: serde::de::DeserializeOwned,)+ - { - type Out = ($($ty,)+); - - fn to_select_doc(self) -> Vec { - vec![ - $(self.$idx.0,)+ - ] - } - fn parse_response(data: Vec) -> Result { - let mut data = data.into_iter(); - let mut next = move |_idx| data.next().unwrap(); - Ok(( - - $(serde_json::from_value(next($idx))?,)+ - )) - } - } - - impl<$($ty,)+> ToQueryDoc for ($($ty,)+) - where - $($ty: ToQueryDoc,)+ - {} - - impl<$($ty,)+> ToMutationDoc for ($($ty,)+) - where - $($ty: ToMutationDoc,)+ - {} - }; -} - -impl_for_tuple!(0 N0); -impl_for_tuple!(0 N0, 1 N1); -impl_for_tuple!(0 N0, 1 N1, 2 N2); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8, 9 N9); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8, 9 N9, 10 N10); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8, 9 N9, 10 N10, 11 N11); - -// -// --- -- --- Selection types --- --- // -// - -// This is a newtype for Into trait impl purposes -#[derive(Debug)] -pub struct SelectionErasedMap(HashMap); - -#[derive(Debug)] -pub enum CompositeSelection { - Atomic(SelectionErasedMap), - Union(HashMap), -} - -impl Default for CompositeSelection { - fn default() -> Self { - CompositeSelection::Atomic(SelectionErasedMap(Default::default())) - } -} - -#[derive(Debug)] -enum SelectionErased { - None, - Scalar, - ScalarArgs(NodeArgsErased), - Composite(CompositeSelection), - CompositeArgs(NodeArgsErased, CompositeSelection), - Alias(HashMap), -} - -#[derive(Debug)] -pub enum AliasSelection { - Scalar, - ScalarArgs(NodeArgsErased), - Composite(CompositeSelection), - CompositeArgs(NodeArgsErased, CompositeSelection), -} - -#[derive(Default, Clone, Copy, Debug)] -pub struct HasAlias; -#[derive(Default, Clone, Copy, Debug)] -pub struct NoAlias; - -#[derive(Debug)] -pub struct AliasInfo { - aliases: HashMap, - _phantom: PhantomData<(ArgT, SelT, ATyag)>, -} - -#[derive(Debug)] -pub enum ScalarSelect { - Get, - Skip, - Alias(AliasInfo<(), (), ATy>), -} -#[derive(Debug)] -pub enum ScalarSelectArgs { - Get(NodeArgsErased, PhantomData), - Skip, - Alias(AliasInfo), -} -#[derive(Debug)] -pub enum CompositeSelect { - Get(CompositeSelection, PhantomData), - Skip, - Alias(AliasInfo<(), SelT, ATy>), -} -#[derive(Debug)] -pub enum CompositeSelectArgs { - Get( - NodeArgsErased, - CompositeSelection, - PhantomData<(ArgT, SelT)>, - ), - Skip, - Alias(AliasInfo), -} - -pub struct Get; -pub struct Skip; -pub struct Args(ArgT); -pub struct Select(SelT); -pub struct ArgSelect(ArgT, SelT); -pub struct Alias(AliasInfo); - -/// Shorthand for `Default::default`. All selections generally default -/// to [`skip`]. -pub fn default() -> T { - T::default() -} -/// Include all sub nodes excpet those that require arguments -pub fn all() -> T { - T::all() -} -/// Select the node for inclusion. -pub fn get>() -> T { - T::from(Get) -} -/// Skip this node when queryig. -pub fn skip>() -> T { - T::from(Skip) -} -/// Provide argumentns for a scalar node. -pub fn args>>(args: ArgT) -> T { - T::from(Args(args)) -} -/// Provide selections for a composite node that takes no args. -pub fn select>>(selection: SelT) -> T { - T::from(Select(selection)) -} -/// Provide arguments and selections for a composite node. -pub fn arg_select>>(args: ArgT, selection: SelT) -> T { - T::from(ArgSelect(args, selection)) -} - -/// Query the same node multiple times using aliases. -/// -/// WARNING: make sure your alias names don't clash across sibling -/// nodes. -pub fn alias(info: impl Into>) -> T -where - S: Into, - ASelT: Into, - T: From> + FromAliasSelection, -{ - let info: HashMap<_, _> = info.into(); - T::from(Alias(AliasInfo { - aliases: info - .into_iter() - .map(|(name, sel)| (name.into(), sel.into())) - .collect(), - _phantom: PhantomData, - })) -} - -pub trait Selection { - /// Include all sub nodes excpet those that require arguments - fn all() -> Self; -} - -// --- Impl SelectionType impls --- // - -impl Selection for ScalarSelect { - fn all() -> Self { - Self::Get - } -} -impl Selection for ScalarSelectArgs { - fn all() -> Self { - Self::Skip - } -} -impl Selection for CompositeSelect -where - SelT: Selection + Into, -{ - fn all() -> Self { - let sel = SelT::all(); - Self::Get(sel.into(), PhantomData) - } -} -impl Selection for CompositeSelectArgs -where - SelT: Selection, -{ - fn all() -> Self { - Self::Skip - } -} -// --- Default impls --- // - -impl Default for ScalarSelect { - fn default() -> Self { - Self::Skip - } -} -impl Default for ScalarSelectArgs { - fn default() -> Self { - Self::Skip - } -} -impl Default for CompositeSelect { - fn default() -> Self { - Self::Skip - } -} -impl Default for CompositeSelectArgs { - fn default() -> Self { - Self::Skip - } -} - -// --- From Get/Skip...etc impls --- // - -impl From for ScalarSelect { - fn from(_: Get) -> Self { - Self::Get - } -} - -impl From for ScalarSelect { - fn from(_: Skip) -> Self { - Self::Skip - } -} -impl From for ScalarSelectArgs { - fn from(_: Skip) -> Self { - Self::Skip - } -} -impl From for CompositeSelect { - fn from(_: Skip) -> Self { - Self::Skip - } -} -impl From for CompositeSelectArgs { - fn from(_: Skip) -> Self { - Self::Skip - } -} - -impl From> for ScalarSelectArgs -where - ArgT: Serialize, -{ - fn from(Args(args): Args) -> Self { - Self::Get(NodeArgsErased::Inline(to_json_value(args)), PhantomData) - } -} - -impl From> for CompositeSelect -where - SelT: Into, -{ - fn from(Select(selection): Select) -> Self { - Self::Get(selection.into(), PhantomData) - } -} - -impl From> for CompositeSelectArgs -where - ArgT: Serialize, - SelT: Into, -{ - fn from(ArgSelect(args, selection): ArgSelect) -> Self { - Self::Get( - NodeArgsErased::Inline(to_json_value(args)), - selection.into(), - PhantomData, - ) - } -} - -impl From> for ScalarSelectArgs { - fn from(value: PlaceholderArg) -> Self { - Self::Get(NodeArgsErased::Placeholder(value.value), PhantomData) - } -} -impl From> - for CompositeSelectArgs -where - SelT: Into, -{ - fn from(value: PlaceholderArgSelect) -> Self { - Self::Get( - NodeArgsErased::Placeholder(value.value), - value.selection.into(), - PhantomData, - ) - } -} - -// --- ToAliasSelection impls --- // - -/// This is a marker trait that allows the core selection types -/// like CompositeSelectNoArgs to mark which types can be used -/// as their aliasing nodes. This prevents usage of invalid selections -/// on aliases like [`Skip`]. -pub trait FromAliasSelection {} - -impl FromAliasSelection for ScalarSelect {} -impl FromAliasSelection> for ScalarSelectArgs {} -impl FromAliasSelection> for CompositeSelect {} -impl FromAliasSelection> - for CompositeSelectArgs -{ -} - -// --- From Alias impls --- // - -impl From>> for ScalarSelect { - fn from(Alias(info): Alias<(), ScalarSelect>) -> Self { - Self::Alias(AliasInfo { - aliases: info.aliases, - _phantom: PhantomData, - }) - } -} -impl From> for ScalarSelectArgs { - fn from(Alias(info): Alias) -> Self { - Self::Alias(info) - } -} -impl From> for CompositeSelect { - fn from(Alias(info): Alias<(), SelT>) -> Self { - Self::Alias(info) - } -} -impl From> for CompositeSelectArgs { - fn from(Alias(info): Alias) -> Self { - Self::Alias(info) - } -} - -// --- Into SelectionErased impls --- // - -impl From> for SelectionErased { - fn from(value: AliasInfo) -> SelectionErased { - SelectionErased::Alias(value.aliases) - } -} - -impl From> for SelectionErased { - fn from(value: ScalarSelect) -> SelectionErased { - use ScalarSelect::*; - match value { - Get => SelectionErased::Scalar, - Skip => SelectionErased::None, - Alias(alias) => alias.into(), - } - } -} - -impl From> for SelectionErased { - fn from(value: ScalarSelectArgs) -> SelectionErased { - use ScalarSelectArgs::*; - match value { - Get(arg, _) => SelectionErased::ScalarArgs(arg), - Skip => SelectionErased::None, - Alias(alias) => alias.into(), - } - } -} - -impl From> for SelectionErased { - fn from(value: CompositeSelect) -> SelectionErased { - use CompositeSelect::*; - match value { - Get(selection, _) => SelectionErased::Composite(selection), - Skip => SelectionErased::None, - Alias(alias) => alias.into(), - } - } -} - -impl From> for SelectionErased -where - SelT: Into, -{ - fn from(value: CompositeSelectArgs) -> SelectionErased { - use CompositeSelectArgs::*; - match value { - Get(args, selection, _) => SelectionErased::CompositeArgs(args, selection), - Skip => SelectionErased::None, - Alias(alias) => alias.into(), - } - } -} - -// --- UnionMember impls --- // - -/// The following trait is used for types that implement -/// selections for the composite members of unions. -/// -/// The err return value indicates the case where -/// aliases are used selections on members which is an error -/// -/// This state is currently impossible to arrive at since -/// AliasInfo has no public construction methods with NoAlias -/// set. Union selection types make sure all their immediate -/// member selection use NoAlias to prevent this invalid stat.e -pub trait UnionMember { - fn composite(self) -> Option; -} - -/// Internal marker trait use to make sure we can't have union members -/// selection being another union selection. -trait NotUnionSelection {} - -// NOTE: UnionMembers are all NoAlias -impl UnionMember for ScalarSelect { - fn composite(self) -> Option { - None - } -} - -impl UnionMember for ScalarSelectArgs { - fn composite(self) -> Option { - None - } -} - -impl UnionMember for CompositeSelect -where - SelT: NotUnionSelection, -{ - fn composite(self) -> Option { - use CompositeSelect::*; - match self { - Get(CompositeSelection::Atomic(selection), _) => Some(selection), - Skip => None, - Get(CompositeSelection::Union(_), _) => { - unreachable!("union selection on union member selection. how??") - } - Alias(_) => unreachable!("alias discovored on union/either member. how??"), - } - } -} - -impl UnionMember for CompositeSelectArgs -where - SelT: NotUnionSelection, -{ - fn composite(self) -> Option { - use CompositeSelectArgs::*; - match self { - Get(_args, CompositeSelection::Atomic(selection), _) => Some(selection), - Skip => None, - Get(_args, CompositeSelection::Union(_), _) => { - unreachable!("union selection on union member selection. how??") - } - Alias(_) => unreachable!("alias discovored on union/either member. how??"), - } - } -} - -// --- Into AliasSelection impls --- // - -impl From for AliasSelection { - fn from(_val: Get) -> Self { - AliasSelection::Scalar - } -} -impl From> for AliasSelection -where - ArgT: Serialize, -{ - fn from(val: Args) -> Self { - AliasSelection::ScalarArgs(NodeArgsErased::Inline(to_json_value(val.0))) - } -} -impl From> for AliasSelection -where - SelT: Into, -{ - fn from(val: Select) -> Self { - let map = val.0.into(); - AliasSelection::Composite(map) - } -} - -impl From> for AliasSelection -where - ArgT: Serialize, - SelT: Into, -{ - fn from(val: ArgSelect) -> Self { - let map = val.1.into(); - AliasSelection::CompositeArgs(NodeArgsErased::Inline(to_json_value(val.0)), map) - } -} -impl From> for AliasSelection { - fn from(val: ScalarSelect) -> Self { - use ScalarSelect::*; - match val { - Get => AliasSelection::Scalar, - _ => unreachable!(), - } - } -} -impl From> for AliasSelection { - fn from(val: ScalarSelectArgs) -> Self { - use ScalarSelectArgs::*; - match val { - Get(args, _) => AliasSelection::ScalarArgs(args), - _ => unreachable!(), - } - } -} - -impl From> for AliasSelection -where - SelT: Into, -{ - fn from(val: CompositeSelect) -> Self { - use CompositeSelect::*; - match val { - Get(select, _) => AliasSelection::Composite(select), - _ => unreachable!(), - } - } -} -impl From> for AliasSelection -where - SelT: Into, -{ - fn from(val: CompositeSelectArgs) -> Self { - use CompositeSelectArgs::*; - match val { - Get(args, selection, _) => AliasSelection::CompositeArgs(args, selection), - _ => unreachable!(), - } - } -} - -// TODO: convert to proc_macro -#[macro_export] -macro_rules! impl_selection_traits { - ($ty:ident,$($field:tt),+) => { - impl From<$ty> for CompositeSelection { - fn from(value: $ty) -> CompositeSelection { - CompositeSelection::Atomic(SelectionErasedMap( - [ - $((stringify!($field).into(), value.$field.into()),)+ - ] - .into(), - )) - } - } - - impl Selection for $ty { - fn all() -> Self { - Self { - $($field: all(),)+ - } - } - } - - impl NotUnionSelection for $ty {} - }; -} -#[macro_export] -macro_rules! impl_union_selection_traits { - ($ty:ident,$(($variant_ty:tt, $field:tt)),+) => { - impl From<$ty> for CompositeSelection { - fn from(value: $ty) -> CompositeSelection { - CompositeSelection::Union( - [ - $({ - let selection = - UnionMember::composite(value.$field); - selection.map(|val| ($variant_ty.into(), val)) - },)+ - ] - .into_iter() - .filter_map(|val| val) - .collect(), - ) - } - } - }; -} - -// -// --- --- Argument types --- --- // -// - -pub enum NodeArgs { - Inline(ArgT), - Placeholder(PlaceholderValue), -} - -impl From for NodeArgs { - fn from(value: ArgT) -> Self { - Self::Inline(value) - } -} - -#[derive(Debug)] -pub enum NodeArgsErased { - None, - Inline(serde_json::Value), - Placeholder(PlaceholderValue), -} - -impl From> for NodeArgsErased -where - ArgT: Serialize, -{ - fn from(value: NodeArgs) -> Self { - match value { - NodeArgs::Inline(arg) => Self::Inline(to_json_value(arg)), - NodeArgs::Placeholder(ph) => Self::Placeholder(ph), - } - } -} - -enum NodeArgsMerged { - Inline(HashMap), - Placeholder { - value: PlaceholderValue, - arg_types: HashMap, - }, -} - -/// This checks the input arg json for a node -/// against the arg description from the [`NodeMeta`]. -fn check_node_args( - args: serde_json::Value, - arg_types: &HashMap, -) -> Result, String> { - let args = match args { - serde_json::Value::Object(val) => val, - _ => unreachable!(), - }; - let mut instance_args = HashMap::new(); - for (name, value) in args { - let Some(type_name) = arg_types.get(&name[..]) else { - return Err(name); - }; - instance_args.insert( - name.into(), - NodeArgValue { - type_name: type_name.clone(), - value, - }, - ); - } - Ok(instance_args) -} - -struct NodeArgValue { - type_name: CowStr, - value: serde_json::Value, -} - -pub struct PreparedArgs; - -impl PreparedArgs { - pub fn get(&mut self, key: impl Into, fun: F) -> NodeArgs - where - In: serde::de::DeserializeOwned, - F: Fn(In) -> ArgT + 'static + Send + Sync, - ArgT: Serialize, - { - NodeArgs::Placeholder(PlaceholderValue { - key: key.into(), - fun: Box::new(move |value| { - let value = serde_json::from_value(value)?; - let value = fun(value); - serde_json::to_value(value) - }), - }) - } - pub fn arg(&mut self, key: impl Into, fun: F) -> T - where - T: From>, - In: serde::de::DeserializeOwned, - F: Fn(In) -> ArgT + 'static + Send + Sync, - ArgT: Serialize, - { - T::from(PlaceholderArg { - value: PlaceholderValue { - key: key.into(), - fun: Box::new(move |value| { - let value = serde_json::from_value(value)?; - let value = fun(value); - serde_json::to_value(value) - }), - }, - _phantom: PhantomData, - }) - } - pub fn arg_select( - &mut self, - key: impl Into, - selection: SelT, - fun: F, - ) -> T - where - T: From>, - In: serde::de::DeserializeOwned, - F: Fn(In) -> ArgT + 'static + Send + Sync, - ArgT: Serialize, - { - T::from(PlaceholderArgSelect { - value: PlaceholderValue { - key: key.into(), - fun: Box::new(move |value| { - let value = serde_json::from_value(value)?; - let value = fun(value); - serde_json::to_value(value) - }), - }, - selection, - _phantom: PhantomData, - }) - } -} - -pub struct PlaceholderValue { - key: CowStr, - fun: Box< - dyn Fn(serde_json::Value) -> Result + Send + Sync, - >, -} - -impl std::fmt::Debug for PlaceholderValue { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("PlaceholderValue") - .field("key", &self.key) - .finish_non_exhaustive() - } -} - -pub struct PlaceholderArg { - value: PlaceholderValue, - _phantom: PhantomData, -} -pub struct PlaceholderArgSelect { - value: PlaceholderValue, - selection: SelT, - _phantom: PhantomData, -} - -pub struct PlaceholderArgs(Arg); - -// -// --- --- GraphQL types --- --- // -// - -use graphql::*; -pub mod graphql { - use std::sync::Arc; - - use super::*; - - pub(super) type TyToGqlTyMap = Arc>; - - #[derive(Default, Clone)] - pub struct GraphQlTransportOptions { - headers: reqwest::header::HeaderMap, - timeout: Option, - } - - // PlaceholderValue, fieldName -> gql_var_name - type FoundPlaceholders = Vec<(PlaceholderValue, HashMap)>; - - fn select_node_to_gql( - ty_to_gql_ty_map: &TyToGqlTyMap, - dest: &mut impl std::fmt::Write, - node: SelectNodeErased, - variable_types: &mut HashMap, - variables_object: &mut JsonObject, - placeholders: &mut FoundPlaceholders, - ) -> std::fmt::Result { - if node.instance_name != node.node_name { - write!(dest, "{}: {}", node.instance_name, node.node_name)?; - } else { - write!(dest, "{}", node.node_name)?; - } - if let Some(args) = node.args { - match args { - NodeArgsMerged::Inline(args) => { - if !args.is_empty() { - write!(dest, "(")?; - for (key, val) in args { - let name = format!("in{}", variable_types.len()); - write!(dest, "{key}: ${name}, ")?; - variables_object.insert(name.clone(), val.value); - variable_types.insert(name.into(), val.type_name); - } - write!(dest, ")")?; - } - } - NodeArgsMerged::Placeholder { value, arg_types } => { - if !arg_types.is_empty() { - write!(dest, "(")?; - let mut map = HashMap::new(); - for (key, type_name) in arg_types { - let name = format!("in{}", variable_types.len()); - write!(dest, "{key}: ${name}, ")?; - variable_types.insert(name.clone().into(), type_name); - map.insert(key, name.into()); - } - write!(dest, ")")?; - placeholders.push((value, map)); - } - } - } - } - match node.sub_nodes { - SubNodes::None => {} - SubNodes::Atomic(sub_nodes) => { - write!(dest, "{{ ")?; - for node in sub_nodes { - select_node_to_gql( - ty_to_gql_ty_map, - dest, - node, - variable_types, - variables_object, - placeholders, - )?; - write!(dest, " ")?; - } - write!(dest, " }}")?; - } - SubNodes::Union(variants) => { - write!(dest, "{{ ")?; - for (ty, sub_nodes) in variants { - let gql_ty = ty_to_gql_ty_map - .get(&ty[..]) - .expect("impossible: no GraphQL type equivalent found for variant type"); - let gql_ty = match gql_ty.strip_suffix('!') { - Some(val) => val, - None => &gql_ty[..], - }; - write!(dest, " ... on {gql_ty} {{ ")?; - for node in sub_nodes { - select_node_to_gql( - ty_to_gql_ty_map, - dest, - node, - variable_types, - variables_object, - placeholders, - )?; - write!(dest, " ")?; - } - write!(dest, " }}")?; - } - write!(dest, " }}")?; - } - } - Ok(()) - } - - fn build_gql_doc( - ty_to_gql_ty_map: &TyToGqlTyMap, - nodes: Vec, - ty: &'static str, - name: Option, - ) -> Result<(String, JsonObject, FoundPlaceholders), GraphQLRequestError> { - use std::fmt::Write; - let mut variables_types = HashMap::new(); - let mut variables_values = serde_json::Map::new(); - let mut root_nodes = String::new(); - let mut placeholders = vec![]; - for (idx, node) in nodes.into_iter().enumerate() { - let node = SelectNodeErased { - instance_name: format!("node{idx}").into(), - ..node - }; - write!(&mut root_nodes, " ").expect("error building to string"); - select_node_to_gql( - ty_to_gql_ty_map, - &mut root_nodes, - node, - &mut variables_types, - &mut variables_values, - &mut placeholders, - ) - .expect("error building to string"); - writeln!(&mut root_nodes).expect("error building to string"); - } - let mut args_row = String::new(); - if !variables_types.is_empty() { - write!(&mut args_row, "(").expect("error building to string"); - for (key, ty) in &variables_types { - let gql_ty = ty_to_gql_ty_map.get(&ty[..]).ok_or_else(|| { - GraphQLRequestError::InvalidQuery { - error: Box::from(format!("unknown typegraph type found: {}", ty)), - } - })?; - write!(&mut args_row, "${key}: {gql_ty}, ").expect("error building to string"); - } - write!(&mut args_row, ")").expect("error building to string"); - } - let name = name.unwrap_or_else(|| "".into()); - let doc = format!("{ty} {name}{args_row} {{\n{root_nodes}}}"); - Ok((doc, variables_values, placeholders)) - } - - struct GraphQLRequest { - addr: Url, - method: reqwest::Method, - headers: reqwest::header::HeaderMap, - body: serde_json::Value, - } - - fn build_gql_req( - addr: Url, - doc: &str, - variables: &JsonObject, - opts: &GraphQlTransportOptions, - ) -> GraphQLRequest { - let mut headers = reqwest::header::HeaderMap::new(); - headers.insert( - reqwest::header::ACCEPT, - "application/json".try_into().unwrap(), - ); - headers.insert( - reqwest::header::CONTENT_TYPE, - "application/json".try_into().unwrap(), - ); - headers.extend(opts.headers.clone()); - // println!("{doc}, {variables:#?}"); - let body = serde_json::json!({ - "query": doc, - "variables": variables - }); - GraphQLRequest { - addr, - method: reqwest::Method::POST, - headers, - body, - } - } - - #[derive(Debug)] - pub struct GraphQLResponse { - pub status: reqwest::StatusCode, - pub headers: reqwest::header::HeaderMap, - pub body: JsonObject, - } - - fn handle_response( - response: GraphQLResponse, - nodes_len: usize, - ) -> Result, GraphQLRequestError> { - if !response.status.is_success() { - return Err(GraphQLRequestError::RequestFailed { response }); - } - #[derive(Debug, Deserialize)] - struct Response { - data: Option, - errors: Option>, - } - let body: Response = match serde_json::from_value(serde_json::Value::Object(response.body)) - { - Ok(body) => body, - Err(error) => { - return Err(GraphQLRequestError::BodyError { - error: Box::new(error), - }) - } - }; - if let Some(errors) = body.errors { - return Err(GraphQLRequestError::RequestErrors { - errors, - data: body.data, - }); - } - let Some(mut body) = body.data else { - return Err(GraphQLRequestError::BodyError { - error: Box::from("body response doesn't contain data field"), - }); - }; - (0..nodes_len) - .map(|idx| { - body.remove(&format!("node{idx}")) - .ok_or_else(|| GraphQLRequestError::BodyError { - error: Box::from(format!( - "expecting response under node key 'node{idx}' but none found" - )), - }) - }) - .collect::, _>>() - } - - #[derive(Debug)] - pub enum GraphQLRequestError { - /// GraphQL errors recieived - RequestErrors { - errors: Vec, - data: Option, - }, - /// Http error codes recieived - RequestFailed { - response: GraphQLResponse, - }, - /// Unable to deserialize body - BodyError { - error: BoxErr, - }, - /// Unable to make http request - NetworkError { - error: BoxErr, - }, - InvalidQuery { - error: BoxErr, - }, - } - - impl std::fmt::Display for GraphQLRequestError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - GraphQLRequestError::RequestErrors { errors, .. } => { - write!(f, "graphql errors in response: ")?; - for err in errors { - write!(f, "{}, ", err.message)?; - } - } - GraphQLRequestError::RequestFailed { response } => { - write!(f, "request failed with status {}", response.status)?; - } - GraphQLRequestError::BodyError { error } => { - write!(f, "error reading request body: {error}")?; - } - GraphQLRequestError::NetworkError { error } => { - write!(f, "error making http request: {error}")?; - } - GraphQLRequestError::InvalidQuery { error } => { - write!(f, "error building request: {error}")? - } - } - Ok(()) - } - } - impl std::error::Error for GraphQLRequestError {} - - #[derive(Debug, Deserialize)] - pub struct ErrorLocation { - pub line: u32, - pub column: u32, - } - #[derive(Debug, Deserialize)] - pub struct GraphqlError { - pub message: String, - pub locations: Option>, - pub path: Option>, - } - - #[derive(Debug)] - pub enum PathSegment { - Field(String), - Index(u64), - } - - impl<'de> serde::de::Deserialize<'de> for PathSegment { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - use serde_json::Value; - let val = Value::deserialize(deserializer)?; - match val { - Value::Number(n) => Ok(PathSegment::Index(n.as_u64().unwrap())), - Value::String(s) => Ok(PathSegment::Field(s)), - _ => panic!("invalid path segment type"), - } - } - } - - #[derive(Clone)] - pub struct GraphQlTransportReqwestSync { - addr: Url, - ty_to_gql_ty_map: TyToGqlTyMap, - client: reqwest::blocking::Client, - } - - #[derive(Clone)] - pub struct GraphQlTransportReqwest { - addr: Url, - ty_to_gql_ty_map: TyToGqlTyMap, - client: reqwest::Client, - } - - impl GraphQlTransportReqwestSync { - pub fn new(addr: Url, ty_to_gql_ty_map: TyToGqlTyMap) -> Self { - Self { - addr, - ty_to_gql_ty_map, - client: reqwest::blocking::Client::new(), - } - } - - fn fetch( - &self, - nodes: Vec, - opts: &GraphQlTransportOptions, - ty: &'static str, - ) -> Result, GraphQLRequestError> { - let nodes_len = nodes.len(); - let (doc, variables, placeholders) = - build_gql_doc(&self.ty_to_gql_ty_map, nodes, ty, None)?; - if !placeholders.is_empty() { - panic!("placeholders found in non-prepared query") - } - let req = build_gql_req(self.addr.clone(), &doc, &variables, opts); - let req = self - .client - .request(req.method, req.addr) - .headers(req.headers) - .json(&req.body); - let req = if let Some(timeout) = opts.timeout { - req.timeout(timeout) - } else { - req - }; - match req.send() { - Ok(res) => { - let status = res.status(); - let headers = res.headers().clone(); - match res.json::() { - Ok(body) => handle_response( - GraphQLResponse { - status, - headers, - body, - }, - nodes_len, - ), - Err(error) => Err(GraphQLRequestError::BodyError { - error: Box::new(error), - }), - } - } - Err(error) => Err(GraphQLRequestError::NetworkError { - error: Box::new(error), - }), - } - } - - pub fn query( - &self, - nodes: Doc, - ) -> Result { - self.query_with_opts(nodes, &Default::default()) - } - - pub fn query_with_opts( - &self, - nodes: Doc, - opts: &GraphQlTransportOptions, - ) -> Result { - let resp = self.fetch(nodes.to_select_doc(), opts, "query")?; - let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - })?; - Ok(resp) - } - - pub fn mutation( - &self, - nodes: Doc, - ) -> Result { - self.mutation_with_opts(nodes, &Default::default()) - } - - pub fn mutation_with_opts( - &self, - nodes: Doc, - opts: &GraphQlTransportOptions, - ) -> Result { - let resp = self.fetch(nodes.to_select_doc(), opts, "mutation")?; - let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - })?; - Ok(resp) - } - pub fn prepare_query( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - ) -> Result, PrepareRequestError> { - self.prepare_query_with_opts(fun, Default::default()) - } - - pub fn prepare_query_with_opts( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - opts: GraphQlTransportOptions, - ) -> Result, PrepareRequestError> { - PreparedRequestReqwestSync::new( - fun, - self.addr.clone(), - opts, - "query", - &self.ty_to_gql_ty_map, - ) - } - - pub fn prepare_mutation( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - ) -> Result, PrepareRequestError> { - self.prepare_mutation_with_opts(fun, Default::default()) - } - - pub fn prepare_mutation_with_opts( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - opts: GraphQlTransportOptions, - ) -> Result, PrepareRequestError> { - PreparedRequestReqwestSync::new( - fun, - self.addr.clone(), - opts, - "mutation", - &self.ty_to_gql_ty_map, - ) - } - } - - impl GraphQlTransportReqwest { - pub fn new(addr: Url, ty_to_gql_ty_map: TyToGqlTyMap) -> Self { - Self { - addr, - ty_to_gql_ty_map, - client: reqwest::Client::new(), - } - } - - async fn fetch( - &self, - nodes: Vec, - opts: &GraphQlTransportOptions, - ty: &'static str, - ) -> Result, GraphQLRequestError> { - let nodes_len = nodes.len(); - let (doc, variables, placeholders) = - build_gql_doc(&self.ty_to_gql_ty_map, nodes, ty, None)?; - if !placeholders.is_empty() { - panic!("placeholders found in non-prepared query") - } - let req = build_gql_req(self.addr.clone(), &doc, &variables, opts); - let req = self - .client - .request(req.method, req.addr) - .headers(req.headers) - .json(&req.body); - let req = if let Some(timeout) = opts.timeout { - req.timeout(timeout) - } else { - req - }; - match req.send().await { - Ok(res) => { - let status = res.status(); - let headers = res.headers().clone(); - match res.json::().await { - Ok(body) => handle_response( - GraphQLResponse { - status, - headers, - body, - }, - nodes_len, - ), - Err(error) => Err(GraphQLRequestError::BodyError { - error: Box::new(error), - }), - } - } - Err(error) => Err(GraphQLRequestError::NetworkError { - error: Box::new(error), - }), - } - } - - pub async fn query( - &self, - nodes: Doc, - ) -> Result { - self.query_with_opts(nodes, &Default::default()).await - } - - pub async fn query_with_opts( - &self, - nodes: Doc, - opts: &GraphQlTransportOptions, - ) -> Result { - let resp = self.fetch(nodes.to_select_doc(), opts, "query").await?; - let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - })?; - Ok(resp) - } - - pub async fn mutation( - &self, - nodes: Doc, - ) -> Result { - self.mutation_with_opts(nodes, &Default::default()).await - } - - pub async fn mutation_with_opts( - &self, - nodes: Doc, - opts: &GraphQlTransportOptions, - ) -> Result { - let resp = self.fetch(nodes.to_select_doc(), opts, "mutation").await?; - let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - })?; - Ok(resp) - } - pub fn prepare_query( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - ) -> Result, PrepareRequestError> { - self.prepare_query_with_opts(fun, Default::default()) - } - - pub fn prepare_query_with_opts( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - opts: GraphQlTransportOptions, - ) -> Result, PrepareRequestError> { - PreparedRequestReqwest::new( - fun, - self.addr.clone(), - opts, - "query", - &self.ty_to_gql_ty_map, - ) - } - - pub fn prepare_mutation( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - ) -> Result, PrepareRequestError> { - self.prepare_mutation_with_opts(fun, Default::default()) - } - - pub fn prepare_mutation_with_opts( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - opts: GraphQlTransportOptions, - ) -> Result, PrepareRequestError> { - PreparedRequestReqwest::new( - fun, - self.addr.clone(), - opts, - "mutation", - &self.ty_to_gql_ty_map, - ) - } - } - - fn resolve_prepared_variables( - placeholders: &FoundPlaceholders, - mut inline_variables: JsonObject, - mut args: HashMap, - ) -> Result { - for (ph, key_map) in placeholders { - let Some(value) = args.remove(&ph.key) else { - return Err(PrepareRequestError::PlaceholderError(Box::from(format!( - "no value found for placeholder expected under key '{}'", - ph.key - )))); - }; - let value = (ph.fun)(value).map_err(|err| { - PrepareRequestError::PlaceholderError(Box::from(format!( - "error applying placeholder closure for value under key '{}': {err}", - ph.key - ))) - })?; - let serde_json::Value::Object(mut value) = value else { - unreachable!("placeholder closures must return structs"); - }; - for (key, var_key) in key_map { - inline_variables.insert( - var_key.clone().into(), - value.remove(&key[..]).unwrap_or(serde_json::Value::Null), - ); - } - } - Ok(inline_variables) - } - - pub struct PreparedRequestReqwest { - addr: Url, - client: reqwest::Client, - nodes_len: usize, - pub doc: String, - variables: JsonObject, - opts: GraphQlTransportOptions, - placeholders: Arc, - _phantom: PhantomData, - } - - pub struct PreparedRequestReqwestSync { - addr: Url, - client: reqwest::blocking::Client, - nodes_len: usize, - pub doc: String, - variables: JsonObject, - opts: GraphQlTransportOptions, - placeholders: Arc, - _phantom: PhantomData, - } - - impl PreparedRequestReqwestSync { - fn new( - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - addr: Url, - opts: GraphQlTransportOptions, - ty: &'static str, - ty_to_gql_ty_map: &TyToGqlTyMap, - ) -> Result { - let nodes = fun(&mut PreparedArgs); - let nodes = nodes.to_select_doc(); - let nodes_len = nodes.len(); - let (doc, variables, placeholders) = build_gql_doc(ty_to_gql_ty_map, nodes, ty, None) - .map_err(PrepareRequestError::BuildError)?; - Ok(Self { - doc, - variables, - nodes_len, - addr, - client: reqwest::blocking::Client::new(), - opts, - placeholders: Arc::new(placeholders), - _phantom: PhantomData, - }) - } - - pub fn perform( - &self, - args: impl Into>, - ) -> Result - where - K: Into, - V: serde::Serialize, - { - let args: HashMap = args.into(); - let args = args - .into_iter() - .map(|(key, val)| (key.into(), to_json_value(val))) - .collect(); - let variables = - resolve_prepared_variables(&self.placeholders, self.variables.clone(), args)?; - let req = build_gql_req(self.addr.clone(), &self.doc, &variables, &self.opts); - let req = self - .client - .request(req.method, req.addr) - .headers(req.headers) - .json(&req.body); - let req = if let Some(timeout) = self.opts.timeout { - req.timeout(timeout) - } else { - req - }; - let res = match req.send() { - Ok(res) => { - let status = res.status(); - let headers = res.headers().clone(); - match res.json::() { - Ok(body) => handle_response( - GraphQLResponse { - status, - headers, - body, - }, - self.nodes_len, - ) - .map_err(PrepareRequestError::RequestError)?, - Err(error) => { - return Err(PrepareRequestError::RequestError( - GraphQLRequestError::BodyError { - error: Box::new(error), - }, - )) - } - } - } - Err(error) => { - return Err(PrepareRequestError::RequestError( - GraphQLRequestError::NetworkError { - error: Box::new(error), - }, - )) - } - }; - Doc::parse_response(res).map_err(|err| { - PrepareRequestError::RequestError(GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - }) - }) - } - } - - impl PreparedRequestReqwest { - fn new( - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - addr: Url, - opts: GraphQlTransportOptions, - ty: &'static str, - ty_to_gql_ty_map: &TyToGqlTyMap, - ) -> Result { - let nodes = fun(&mut PreparedArgs); - let nodes = nodes.to_select_doc(); - let nodes_len = nodes.len(); - let (doc, variables, placeholders) = build_gql_doc(ty_to_gql_ty_map, nodes, ty, None) - .map_err(PrepareRequestError::BuildError)?; - let placeholders = std::sync::Arc::new(placeholders); - Ok(Self { - doc, - variables, - nodes_len, - addr, - client: reqwest::Client::new(), - opts, - placeholders, - _phantom: PhantomData, - }) - } - - pub async fn perform( - &self, - args: impl Into>, - ) -> Result - where - K: Into, - V: serde::Serialize, - { - let args: HashMap = args.into(); - let args = args - .into_iter() - .map(|(key, val)| (key.into(), to_json_value(val))) - .collect(); - let variables = - resolve_prepared_variables(&self.placeholders, self.variables.clone(), args)?; - let req = build_gql_req(self.addr.clone(), &self.doc, &variables, &self.opts); - let req = self - .client - .request(req.method, req.addr) - .headers(req.headers) - .json(&req.body); - let req = if let Some(timeout) = self.opts.timeout { - req.timeout(timeout) - } else { - req - }; - let res = match req.send().await { - Ok(res) => { - let status = res.status(); - let headers = res.headers().clone(); - match res.json::().await { - Ok(body) => handle_response( - GraphQLResponse { - status, - headers, - body, - }, - self.nodes_len, - ) - .map_err(PrepareRequestError::RequestError)?, - Err(error) => { - return Err(PrepareRequestError::RequestError( - GraphQLRequestError::BodyError { - error: Box::new(error), - }, - )) - } - } - } - Err(error) => { - return Err(PrepareRequestError::RequestError( - GraphQLRequestError::NetworkError { - error: Box::new(error), - }, - )) - } - }; - Doc::parse_response(res).map_err(|err| { - PrepareRequestError::RequestError(GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - }) - }) - } - } - - // we need a manual clone impl since the derive will - // choke if Doc isn't clone - impl Clone for PreparedRequestReqwestSync { - fn clone(&self) -> Self { - Self { - addr: self.addr.clone(), - client: self.client.clone(), - nodes_len: self.nodes_len, - doc: self.doc.clone(), - variables: self.variables.clone(), - opts: self.opts.clone(), - placeholders: self.placeholders.clone(), - _phantom: PhantomData, - } - } - } - impl Clone for PreparedRequestReqwest { - fn clone(&self) -> Self { - Self { - addr: self.addr.clone(), - client: self.client.clone(), - nodes_len: self.nodes_len, - doc: self.doc.clone(), - variables: self.variables.clone(), - opts: self.opts.clone(), - placeholders: self.placeholders.clone(), - _phantom: PhantomData, - } - } - } - - #[derive(Debug)] - pub enum PrepareRequestError { - BuildError(GraphQLRequestError), - PlaceholderError(BoxErr), - RequestError(GraphQLRequestError), - } - - impl std::error::Error for PrepareRequestError {} - impl std::fmt::Display for PrepareRequestError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - /* PrepareRequestError::FunctionError(err) => { - write!(f, "error calling doc builder closure: {err}") - } */ - PrepareRequestError::BuildError(err) => write!(f, "error building request: {err}"), - PrepareRequestError::PlaceholderError(err) => { - write!(f, "error resolving placeholder values: {err}") - } - PrepareRequestError::RequestError(err) => { - write!(f, "error making graphql request: {err}") - } - } - } - } -} +use core::marker::PhantomData; +use metagen_client::prelude::*; // // --- --- QueryGraph types --- --- // diff --git a/src/metagen/src/client_rs/static/lib.rs b/src/metagen/src/client_rs/static/lib.rs deleted file mode 100644 index b9babe5bc1..0000000000 --- a/src/metagen/src/client_rs/static/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod client; diff --git a/src/metagen/src/fdk_rust/types.rs b/src/metagen/src/fdk_rust/types.rs index 4fd008c526..9d7d2db91a 100644 --- a/src/metagen/src/fdk_rust/types.rs +++ b/src/metagen/src/fdk_rust/types.rs @@ -149,10 +149,10 @@ impl RenderType for RustTypeRenderer { TypeNode::File { base, .. } if body_required => { let ty_name = normalize_type_title(&base.title); - self.render_alias(renderer, &ty_name, "Vec")?; + self.render_alias(renderer, &ty_name, "super::FileId")?; ty_name } - TypeNode::File { .. } => "Vec".into(), + TypeNode::File { .. } => "super::FileId".into(), TypeNode::Any { base, .. } if body_required => { let ty_name = normalize_type_title(&base.title); @@ -474,7 +474,7 @@ pub type MyStrMaybe = Option; pub type MyInt = i64; pub type MyFloat = f64; pub type MyBool = bool; -pub type MyFile = Vec; +pub type MyFile = super::FileId; #[derive(Debug, serde::Serialize, serde::Deserialize)] pub struct MyObj { #[serde(rename = "myString")] @@ -604,7 +604,7 @@ pub enum MyUnion { }, }, ], - "Vec", + "super::FileId", r#""#, ), ( diff --git a/src/metagen/src/shared/client.rs b/src/metagen/src/shared/client.rs index 30ac05e234..39a592b9e8 100644 --- a/src/metagen/src/shared/client.rs +++ b/src/metagen/src/shared/client.rs @@ -1,9 +1,14 @@ // Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. // SPDX-License-Identifier: MPL-2.0 +use std::collections::HashMap; + use crate::interlude::*; -use super::types::*; +use super::{ + files::{get_path_to_files, TypePath}, + types::*, +}; use common::typegraph::{EffectType, ListTypeData, OptionalTypeData}; use indexmap::IndexSet; @@ -13,6 +18,7 @@ pub struct RenderManifest { pub node_metas: IndexSet, pub selections: IndexSet, pub root_fns: Vec, + pub input_files: Rc>>, } pub struct RootFn { @@ -87,6 +93,7 @@ pub fn get_manifest(tg: &Typegraph) -> Result { return_types, node_metas, arg_types, + input_files: get_path_to_files(tg, 0)?.into(), }) } diff --git a/src/metagen/src/shared/files.rs b/src/metagen/src/shared/files.rs new file mode 100644 index 0000000000..4cb3a5ceac --- /dev/null +++ b/src/metagen/src/shared/files.rs @@ -0,0 +1,65 @@ +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +use std::{borrow::Cow, collections::HashMap}; + +use crate::interlude::*; +use common::typegraph::{ + visitor::{Edge, PathSegment}, + visitor2::{self, NearestFn, VisitNext}, + Typegraph, +}; + +#[derive(Debug)] +pub struct TypePath(pub Vec>); + +fn serialize_path_segment(seg: &PathSegment) -> Result> { + match &seg.edge { + Edge::ObjectProp(key) => Ok(format!("TypePathSegment::ObjectProp({key:?})").into()), + Edge::ArrayItem => Ok("TypePathSegment::ArrayItem".into()), + Edge::OptionalItem => Ok("TypePathSegment::Optional".into()), + Edge::UnionVariant(_) => bail!("file input is not supported in polymorphic types"), + _ => bail!("unexpected path segment in input type: {:?}", seg), + } +} + +impl<'a> TryFrom<&'a [PathSegment]> for TypePath { + type Error = anyhow::Error; + + fn try_from(tg_path: &'a [PathSegment]) -> Result { + let mut path = Vec::with_capacity(tg_path.len()); + for seg in tg_path { + path.push(serialize_path_segment(seg)?); + } + Ok(TypePath(path)) + } +} + +pub fn get_path_to_files(tg: &Typegraph, root: u32) -> Result>> { + visitor2::traverse_types( + tg, + root, + Default::default(), + |cx, acc| -> Result { + match cx.current_node.type_node { + TypeNode::File { .. } => { + let nearest_fn = cx.current_node.nearest_function(); + if let Some(NearestFn { + path_index, + type_idx: fn_idx, + is_input, + }) = nearest_fn + { + if is_input { + let entry = acc.entry(fn_idx).or_default(); + let current_path = cx.current_node.path.borrow(); + entry.push(TypePath::try_from(¤t_path[(path_index + 1)..])?); + } + } + Ok(visitor2::VisitNext::Siblings) + } + _ => Ok(visitor2::VisitNext::Children), + } + }, + ) +} diff --git a/src/metagen/src/shared/mod.rs b/src/metagen/src/shared/mod.rs index 3ebfb6c7e8..4d3445e32e 100644 --- a/src/metagen/src/shared/mod.rs +++ b/src/metagen/src/shared/mod.rs @@ -5,6 +5,7 @@ //! imlementations pub mod client; +pub mod files; pub mod types; use common::typegraph::{runtimes::TGRuntime, Materializer}; diff --git a/src/metagen/src/tests/mod.rs b/src/metagen/src/tests/mod.rs index b33d798cb9..f890974715 100644 --- a/src/metagen/src/tests/mod.rs +++ b/src/metagen/src/tests/mod.rs @@ -64,6 +64,7 @@ async fn load_fdk_template( Ok(FdkTemplate { entries }) } +#[derive(Debug)] pub struct BuildArgs { pub path: PathBuf, } @@ -100,6 +101,10 @@ pub async fn e2e_test(cases: Vec) -> anyhow::Result<()> { let test_cx = TestCtx { typegraphs: typegraphs.clone(), }; + unsafe { + std::env::set_var("METAGEN_CLIENT_RS_TEST", "1"); + std::env::set_var("METAGEN_BIN_PATH", "main.rs"); + } let files = crate::generate_target(&case.config, &case.target, tmp_dir.clone(), test_cx).await?; for (path, buf) in files.0 { @@ -109,6 +114,10 @@ pub async fn e2e_test(cases: Vec) -> anyhow::Result<()> { tokio::fs::write(path, buf.contents).await?; } } + unsafe { + std::env::remove_var("METAGEN_CLIENT_RS_TEST"); + std::env::remove_var("METAGEN_BIN_PATH"); + } // compile (case.build_fn)(BuildArgs { path: tmp_dir.to_owned(), diff --git a/tests/metagen/metagen_test.ts b/tests/metagen/metagen_test.ts index 59f16ed76e..8b81c7c4d8 100644 --- a/tests/metagen/metagen_test.ts +++ b/tests/metagen/metagen_test.ts @@ -12,9 +12,37 @@ import $ from "@david/dax"; import { z as zod } from "zod"; import { workspaceDir } from "test-utils/dir.ts"; import { FdkOutput } from "@typegraph/sdk/gen/typegraph_core.d.ts"; +import { createBucket } from "test-utils/s3.ts"; +import { S3Client } from "aws-sdk/client-s3"; const denoJson = resolve(testDir, "./deno.jsonc"); +const s3Secrets = { + S3_HOST: "http://localhost:9000", + S3_REGION: "local", + S3_ACCESS_KEY: "minio", + S3_SECRET_KEY: "password", + S3_PATH_STYLE: "true", +}; + +async function prepareBucket() { + const client = new S3Client({ + endpoint: s3Secrets.S3_HOST, + region: s3Secrets.S3_REGION, + credentials: { + accessKeyId: s3Secrets.S3_ACCESS_KEY, + secretAccessKey: s3Secrets.S3_SECRET_KEY, + }, + forcePathStyle: Boolean(s3Secrets.S3_PATH_STYLE), + }); + + try { + await createBucket(client, "metagen-test-bucket"); + } catch (_e) { + // + } +} + Meta.test("metagen rust builds", async (t) => { const tmpDir = t.tempDir; @@ -615,3 +643,57 @@ Meta.test({ }); } }); + +Meta.test({ + name: "client table suite for file upload", +}, async (t) => { + const scriptsPath = join(import.meta.dirname!, "typegraphs/sample"); + const res = await Meta.cli({}, ...`-C ${scriptsPath} gen`.split(" ")); + // console.log("--- >>> --- >>> STDERR"); + // console.log(res.stderr); + // console.log("--- >>> --- >>> STDERR end"); + assertEquals(res.code, 0); + + const expectedSchemaU1 = zod.object({ + upload: zod.boolean(), + }); + const expectedSchemaUn = zod.object({ + uploadMany: zod.boolean(), + }); + + const expectedSchema = zod.tuple([ + expectedSchemaU1, + // expectedSchemaU1, + expectedSchemaUn, + expectedSchemaU1, + expectedSchemaUn, + ]); + + const cases = [ + { + name: "client_rs_upload", + skip: false, + command: $`cargo run`.cwd(join(scriptsPath, "rs_upload")), + expected: expectedSchema, + }, + ]; + + await using _engine2 = await t.engine( + "metagen/typegraphs/file_upload_sample.ts", + { secrets: { ...s3Secrets } }, + ); + + await prepareBucket(); + + for (const { name, command, expected, skip } of cases) { + if (skip) { + continue; + } + + await t.should(name, async () => { + const res = await command + .env({ "TG_PORT": t.port.toString() }).stderr("inherit").text(); + expected.parse(JSON.parse(res)); + }); + } +}); diff --git a/tests/metagen/typegraphs/file_upload_sample.ts b/tests/metagen/typegraphs/file_upload_sample.ts new file mode 100644 index 0000000000..5cd0fd02de --- /dev/null +++ b/tests/metagen/typegraphs/file_upload_sample.ts @@ -0,0 +1,34 @@ +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +import { Policy, t, typegraph } from "@typegraph/sdk/index.ts"; +import { S3Runtime } from "@typegraph/sdk/providers/aws.ts"; + +export const tg = await typegraph({ + name: "sample", + builder(g) { + const s3 = new S3Runtime({ + hostSecret: "S3_HOST", + regionSecret: "S3_REGION", + accessKeySecret: "S3_ACCESS_KEY", + secretKeySecret: "S3_SECRET_KEY", + pathStyleSecret: "S3_PATH_STYLE", + }); + + const bucket = "metagen-test-bucket"; + + g.expose( + { + upload: s3.upload( + bucket, + t.file({ allow: ["text/plain"] }), + ), + uploadMany: s3.uploadAll(bucket, t.file({ allow: ["text/plain"] })), + }, + Policy.public(), + ); + }, +}).catch((err) => { + console.log(err); + throw err; +}); diff --git a/tests/metagen/typegraphs/sample/metatype.yml b/tests/metagen/typegraphs/sample/metatype.yml index de36d20f13..540c861185 100644 --- a/tests/metagen/typegraphs/sample/metatype.yml +++ b/tests/metagen/typegraphs/sample/metatype.yml @@ -18,3 +18,8 @@ metagen: typegraph_path: ../sample.ts # skip_cargo_toml: true skip_lib_rs: true + - generator: client_rs + path: ./rs_upload/ + typegraph_path: ../file_upload_sample.ts + # skip_cargo_toml: true + skip_lib_rs: true diff --git a/tests/metagen/typegraphs/sample/rs/Cargo.lock b/tests/metagen/typegraphs/sample/rs/Cargo.lock index 1188546a77..4544b8eb9f 100644 --- a/tests/metagen/typegraphs/sample/rs/Cargo.lock +++ b/tests/metagen/typegraphs/sample/rs/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "atomic-waker" @@ -25,23 +25,23 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -50,12 +50,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.6.0" @@ -70,15 +64,18 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytes" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" [[package]] name = "cc" -version = "1.1.10" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e8aabfac534be767c909e0690571677d49f41bd8465ae876fe043d52ba5292" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -102,11 +99,32 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -129,9 +147,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fnv" @@ -163,11 +181,26 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -175,36 +208,60 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ + "futures-channel", "futures-core", "futures-io", + "futures-macro", "futures-sink", "futures-task", "memchr", @@ -226,15 +283,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -251,9 +308,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" [[package]] name = "hermit-abi" @@ -297,15 +354,15 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "hyper" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" dependencies = [ "bytes", "futures-channel", @@ -323,9 +380,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http", @@ -356,9 +413,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", @@ -369,7 +426,6 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] @@ -386,9 +442,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.3.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", "hashbrown", @@ -396,9 +452,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "itoa" @@ -408,18 +464,24 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libc" -version = "0.2.155" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "linux-raw-sys" @@ -445,20 +507,30 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi", "libc", @@ -485,26 +557,26 @@ dependencies = [ [[package]] name = "object" -version = "0.36.3" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.6.0", + "bitflags", "cfg-if", "foreign-types", "libc", @@ -532,9 +604,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -548,31 +620,11 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -582,33 +634,33 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64", "bytes", @@ -628,6 +680,7 @@ dependencies = [ "js-sys", "log", "mime", + "mime_guess", "native-tls", "once_cell", "percent-encoding", @@ -640,12 +693,14 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", + "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", - "winreg", + "windows-registry", ] [[package]] @@ -671,11 +726,11 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" dependencies = [ - "bitflags 2.6.0", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -684,9 +739,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" dependencies = [ "once_cell", "rustls-pki-types", @@ -697,25 +752,24 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -732,19 +786,24 @@ checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" name = "sample_fdk" version = "0.0.1" dependencies = [ + "derive_more", + "futures", + "lazy_static", + "mime_guess", "reqwest", "serde", "serde_json", "tokio", + "tokio-util", ] [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -753,7 +812,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -762,9 +821,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -772,18 +831,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.206" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b3e4cd94123dd520a128bcd11e34d9e9e423e7e3e50425cb1b4b1e3549d0284" +checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.206" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabfb6138d2383ea8208cf98ccf69cdfb1aff4088460681d84189aa259762f97" +checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ "proc-macro2", "quote", @@ -792,9 +851,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.124" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66ad62847a56b3dba58cc891acd13884b9c61138d330c0d7b6181713d4fce38d" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ "itoa", "memchr", @@ -814,6 +873,12 @@ dependencies = [ "serde", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "slab" version = "0.4.9" @@ -853,9 +918,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.74" +version = "2.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" dependencies = [ "proc-macro2", "quote", @@ -867,23 +932,26 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -891,9 +959,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", @@ -919,9 +987,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.2" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" dependencies = [ "backtrace", "bytes", @@ -955,43 +1023,23 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "pin-project-lite", "tokio", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -1018,27 +1066,39 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "unicase" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" + [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "untrusted" version = "0.9.0" @@ -1079,19 +1139,20 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", @@ -1104,9 +1165,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -1116,9 +1177,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1126,9 +1187,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", @@ -1139,60 +1200,79 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] -name = "windows-sys" -version = "0.48.0" +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ - "windows-targets 0.48.5", + "windows-result", + "windows-strings", + "windows-targets", ] [[package]] -name = "windows-sys" -version = "0.52.0" +name = "windows-result" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets", ] [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-targets", ] [[package]] @@ -1201,46 +1281,28 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -1253,64 +1315,30 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "zeroize" version = "1.8.1" diff --git a/tests/metagen/typegraphs/sample/rs/Cargo.toml b/tests/metagen/typegraphs/sample/rs/Cargo.toml index fcb9748602..645aa66b55 100644 --- a/tests/metagen/typegraphs/sample/rs/Cargo.toml +++ b/tests/metagen/typegraphs/sample/rs/Cargo.toml @@ -1,15 +1,14 @@ -package.name = "sample_fdk" -package.edition = "2021" -package.version = "0.0.1" +[package] +name = "sample_client" +edition = "2021" +version = "0.5.0-rc.6" [dependencies] -serde = { version = "1.0.203", features = ["derive"] } -serde_json = "1.0.117" -reqwest = { version = "0.12", features = ["blocking", "json"] } +metagen-client.workspace = true +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" tokio = { version = "1", features = ["rt-multi-thread"] } -# The options after here are configured for crates intended to be -# wasm artifacts. Remove them if your usage is different [[bin]] -name = "sample_fdk" +name = "sample_client" path = "main.rs" diff --git a/tests/metagen/typegraphs/sample/rs/client.rs b/tests/metagen/typegraphs/sample/rs/client.rs index 924e724864..f9829ec774 100644 --- a/tests/metagen/typegraphs/sample/rs/client.rs +++ b/tests/metagen/typegraphs/sample/rs/client.rs @@ -1,2150 +1,8 @@ // This file was @generated by metagen and is intended // to be generated again on subsequent metagen runs. -use std::{collections::HashMap, marker::PhantomData}; - -use reqwest::Url; -use serde::{Deserialize, Serialize}; - -pub type CowStr = std::borrow::Cow<'static, str>; -pub type BoxErr = Box; -pub type JsonObject = serde_json::Map; - -fn to_json_value(val: T) -> serde_json::Value { - serde_json::to_value(val).expect("error serializing value") -} - -/// Build the SelectNodeErased tree from the SelectionErasedMap tree -/// according to the NodeMeta tree. In this function -/// - arguments are associated with their types -/// - aliases get splatted into the node tree -/// - light query validation takes place -/// -/// I.e. the user's selection is joined with the description of the graph found -/// in the static NodeMetas to fill in any blank spaces -fn selection_to_node_set( - selection: SelectionErasedMap, - metas: &HashMap, - parent_path: String, -) -> Result, SelectionError> { - let mut out = vec![]; - let mut selection = selection.0; - let mut found_nodes = selection - .keys() - .cloned() - .collect::>(); - for (node_name, meta_fn) in metas.iter() { - found_nodes.remove(&node_name[..]); - - let Some(node_selection) = selection.remove(&node_name[..]) else { - // this node was not selected - continue; - }; - - // we can have multiple selection instances for a node - // if aliases are involved - let node_instances = match node_selection { - // this noe was not selected - SelectionErased::None => continue, - SelectionErased::Scalar => vec![(node_name.clone(), NodeArgsErased::None, None)], - SelectionErased::ScalarArgs(args) => { - vec![(node_name.clone(), args, None)] - } - SelectionErased::Composite(select) => { - vec![(node_name.clone(), NodeArgsErased::None, Some(select))] - } - SelectionErased::CompositeArgs(args, select) => { - vec![(node_name.clone(), args, Some(select))] - } - SelectionErased::Alias(aliases) => aliases - .into_iter() - .map(|(instance_name, selection)| { - let (args, select) = match selection { - AliasSelection::Scalar => (NodeArgsErased::None, None), - AliasSelection::ScalarArgs(args) => (args, None), - AliasSelection::Composite(select) => (NodeArgsErased::None, Some(select)), - AliasSelection::CompositeArgs(args, select) => (args, Some(select)), - }; - (instance_name, args, select) - }) - .collect(), - }; - - let meta = meta_fn(); - for (instance_name, args, select) in node_instances { - out.push(selection_to_select_node( - instance_name, - node_name.clone(), - args, - select, - &parent_path, - &meta, - )?) - } - } - Ok(out) -} - -fn selection_to_select_node( - instance_name: CowStr, - node_name: CowStr, - args: NodeArgsErased, - select: Option, - parent_path: &str, - meta: &NodeMeta, -) -> Result { - let args = if let Some(arg_types) = &meta.arg_types { - match args { - NodeArgsErased::Inline(args) => { - let instance_args = check_node_args(args, arg_types).map_err(|name| { - SelectionError::UnexpectedArgs { - name, - path: format!("{parent_path}.{instance_name}"), - } - })?; - Some(NodeArgsMerged::Inline(instance_args)) - } - NodeArgsErased::Placeholder(ph) => Some(NodeArgsMerged::Placeholder { - value: ph, - // FIXME: this clone can be improved - arg_types: arg_types.clone(), - }), - NodeArgsErased::None => { - return Err(SelectionError::MissingArgs { - path: format!("{parent_path}.{instance_name}"), - }) - } - } - } else { - None - }; - let sub_nodes = match (&meta.variants, &meta.sub_nodes) { - (Some(_), Some(_)) => unreachable!("union/either node metas can't have sub_nodes"), - (None, None) => SubNodes::None, - (variants, sub_nodes) => { - let Some(select) = select else { - return Err(SelectionError::MissingSubNodes { - path: format!("{parent_path}.{instance_name}"), - }); - }; - match select { - CompositeSelection::Atomic(select) => { - let Some(sub_nodes) = sub_nodes else { - return Err(SelectionError::UnexpectedUnion { - path: format!("{parent_path}.{instance_name}"), - }); - }; - SubNodes::Atomic(selection_to_node_set( - select, - sub_nodes, - format!("{parent_path}.{instance_name}"), - )?) - } - CompositeSelection::Union(mut variant_select) => { - let Some(variants) = variants else { - return Err(SelectionError::MissingUnion { - path: format!("{parent_path}.{instance_name}"), - }); - }; - let mut out = HashMap::new(); - for (variant_ty, variant_meta) in variants { - let variant_meta = variant_meta(); - // this union member is a scalar - let Some(sub_nodes) = variant_meta.sub_nodes else { - continue; - }; - let mut nodes = if let Some(select) = variant_select.remove(variant_ty) { - selection_to_node_set( - select, - &sub_nodes, - format!("{parent_path}.{instance_name}.variant({variant_ty})"), - )? - } else { - vec![] - }; - nodes.push(SelectNodeErased { - node_name: "__typename".into(), - instance_name: "__typename".into(), - args: None, - sub_nodes: SubNodes::None, - }); - out.insert(variant_ty.clone(), nodes); - } - if !variant_select.is_empty() { - return Err(SelectionError::UnexpectedVariants { - path: format!("{parent_path}.{instance_name}"), - varaint_tys: variant_select.into_keys().collect(), - }); - } - SubNodes::Union(out) - } - } - } - }; - Ok(SelectNodeErased { - node_name, - instance_name, - args, - sub_nodes, - }) -} - -#[derive(Debug)] -pub enum SelectionError { - MissingArgs { - path: String, - }, - MissingSubNodes { - path: String, - }, - MissingUnion { - path: String, - }, - UnexpectedArgs { - path: String, - name: String, - }, - UnexpectedUnion { - path: String, - }, - UnexpectedVariants { - path: String, - varaint_tys: Vec, - }, -} - -impl std::fmt::Display for SelectionError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - SelectionError::MissingArgs { path } => write!(f, "args are missing at node {path}"), - SelectionError::UnexpectedArgs { path, name } => { - write!(f, "unexpected arg '${name}' at node {path}") - } - SelectionError::MissingSubNodes { path } => { - write!(f, "node at {path} is a composite but no selection found") - } - SelectionError::MissingUnion { path } => write!( - f, - "node at {path} is a union but provided selection is atomic" - ), - SelectionError::UnexpectedUnion { path } => write!( - f, - "node at {path} is an atomic type but union selection provided" - ), - SelectionError::UnexpectedVariants { - path, - varaint_tys: varaint_ty, - } => { - write!( - f, - "node at {path} has none of the variants called '{varaint_ty:?}'" - ) - } - } - } -} -impl std::error::Error for SelectionError {} - -// -// --- --- Graph node types --- --- // -// - -type NodeMetaFn = fn() -> NodeMeta; - -/// How the [`node_metas`] module encodes the description -/// of the typegraph. -struct NodeMeta { - sub_nodes: Option>, - arg_types: Option>, - variants: Option>, -} - -enum SubNodes { - None, - Atomic(Vec), - Union(HashMap>), -} - -/// The final form of the nodes used in queries. -pub struct SelectNodeErased { - node_name: CowStr, - instance_name: CowStr, - args: Option, - sub_nodes: SubNodes, -} - -/// Wrappers around [`SelectNodeErased`] that only holds query nodes -pub struct QueryNode(SelectNodeErased, PhantomData<(Out,)>); -/// Wrappers around [`SelectNodeErased`] that only holds mutation nodes -pub struct MutationNode(SelectNodeErased, PhantomData<(Out,)>); - -/* /// Trait used to track the `Out` type parameter for [`QueryNode`]/[`MutationNode`] -pub trait ToSelectNode { - type Out; - - fn erased(self) -> SelectNodeErased; -} */ - -/// A variation of [`ToSelectNode`] to only be implemented -/// by aggregates of select nodes like [Vec]s. -pub trait ToSelectDoc { - type Out; - - fn to_select_doc(self) -> Vec; - fn parse_response(data: Vec) -> Result; -} - -/// Marker trait for [`ToSelectDoc`] implementors that only carry query nodes. -pub trait ToQueryDoc {} -/// Marker trait for [`ToSelectDoc`] implementors that only carry mutation nodes. -pub trait ToMutationDoc {} - -/// Struct used to mark query associated types that are generic about effect. -pub struct QueryMarker; -/// Struct used to mark mutationo associated types that are generic about effect. -pub struct MutationMarker; - -/// A node that's yet to have it's subnodes specified. -/// Use [`select`][Self::select] and [`select_aliased`][Self::select_aliased] -/// to finalize it. -/// [`select_aliased`][Self::select_aliased] will allow you to use [`alias`] -/// nodes but the returned object will be a raw [`serde_json::Value`]. -/// This type is generic over effect using the `QTy` parameter. -pub struct UnselectedNode { - root_name: CowStr, - root_meta: NodeMetaFn, - args: NodeArgsErased, - _marker: PhantomData<(SelT, SelAliasedT, QTy, Out)>, -} - -impl UnselectedNode -where - SelT: Into, -{ - fn select_erased(self, select: SelT) -> SelectNodeErased { - let nodes = selection_to_node_set( - SelectionErasedMap( - [( - self.root_name.clone(), - match self.args { - NodeArgsErased::None => SelectionErased::Composite(select.into()), - args => SelectionErased::CompositeArgs(args, select.into()), - }, - )] - .into(), - ), - &[(self.root_name, self.root_meta)].into(), - "$q".into(), - ) - .unwrap(); - nodes.into_iter().next().unwrap() - } -} - -impl UnselectedNode -where - SelAliased: Into, -{ - fn select_aliased_erased(self, select: SelAliased) -> SelectNodeErased { - let nodes = selection_to_node_set( - SelectionErasedMap( - [( - self.root_name.clone(), - match self.args { - NodeArgsErased::None => SelectionErased::Composite(select.into()), - args => SelectionErased::CompositeArgs(args, select.into()), - }, - )] - .into(), - ), - &[(self.root_name, self.root_meta)].into(), - "$q".into(), - ) - .unwrap(); - nodes.into_iter().next().unwrap() - } -} - -// NOTE: we'll need a select method implementation for each ATy x QTy pair - -impl UnselectedNode -where - SelT: Into, -{ - pub fn select(self, select: SelT) -> QueryNode { - QueryNode(self.select_erased(select), PhantomData) - } -} -impl UnselectedNode -where - SelAliased: Into, -{ - pub fn select_aliased(self, select: SelAliased) -> QueryNode { - QueryNode(self.select_aliased_erased(select), PhantomData) - } -} -impl UnselectedNode -where - SelT: Into, -{ - pub fn select(self, select: SelT) -> MutationNode { - MutationNode(self.select_erased(select), PhantomData) - } -} -impl UnselectedNode -where - SelAliased: Into, -{ - pub fn select_aliased(self, select: SelAliased) -> MutationNode { - MutationNode(self.select_aliased_erased(select), PhantomData) - } -} - -// --- --- Impl ToSelectDoc --- --- /// - -impl ToSelectDoc for QueryNode -where - Out: serde::de::DeserializeOwned, -{ - type Out = Out; - - fn to_select_doc(self) -> Vec { - vec![self.0] - } - - fn parse_response(data: Vec) -> Result { - let mut data = data.into_iter(); - serde_json::from_value(data.next().unwrap()) - } -} -impl ToQueryDoc for QueryNode {} -impl ToSelectDoc for MutationNode -where - Out: serde::de::DeserializeOwned, -{ - type Out = Out; - - fn to_select_doc(self) -> Vec { - vec![self.0] - } - - fn parse_response(data: Vec) -> Result { - let mut data = data.into_iter(); - serde_json::from_value(data.next().unwrap()) - } -} -impl ToMutationDoc for MutationNode {} - -#[macro_export] -macro_rules! impl_for_tuple { - ($($idx:tt $ty:tt),+) => { - impl<$($ty,)+> ToSelectDoc for ($(QueryNode<$ty>,)+) - where $($ty: serde::de::DeserializeOwned,)+ - { - type Out = ($($ty,)+); - - fn to_select_doc(self) -> Vec { - vec![ - $(self.$idx.0,)+ - ] - } - fn parse_response(data: Vec) -> Result { - let mut data = data.into_iter(); - let mut next = move |_idx| data.next().unwrap(); - Ok(( - - $(serde_json::from_value(next($idx))?,)+ - )) - } - } - impl<$($ty,)+> ToSelectDoc for ($(MutationNode<$ty>,)+) - where $($ty: serde::de::DeserializeOwned,)+ - { - type Out = ($($ty,)+); - - fn to_select_doc(self) -> Vec { - vec![ - $(self.$idx.0,)+ - ] - } - fn parse_response(data: Vec) -> Result { - let mut data = data.into_iter(); - let mut next = move |_idx| data.next().unwrap(); - Ok(( - - $(serde_json::from_value(next($idx))?,)+ - )) - } - } - - impl<$($ty,)+> ToQueryDoc for ($($ty,)+) - where - $($ty: ToQueryDoc,)+ - {} - - impl<$($ty,)+> ToMutationDoc for ($($ty,)+) - where - $($ty: ToMutationDoc,)+ - {} - }; -} - -impl_for_tuple!(0 N0); -impl_for_tuple!(0 N0, 1 N1); -impl_for_tuple!(0 N0, 1 N1, 2 N2); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8, 9 N9); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8, 9 N9, 10 N10); -impl_for_tuple!(0 N0, 1 N1, 2 N2, 3 N3, 4 N4, 5 N5, 6 N6, 7 N7, 8 N8, 9 N9, 10 N10, 11 N11); - -// -// --- -- --- Selection types --- --- // -// - -// This is a newtype for Into trait impl purposes -#[derive(Debug)] -pub struct SelectionErasedMap(HashMap); - -#[derive(Debug)] -pub enum CompositeSelection { - Atomic(SelectionErasedMap), - Union(HashMap), -} - -impl Default for CompositeSelection { - fn default() -> Self { - CompositeSelection::Atomic(SelectionErasedMap(Default::default())) - } -} - -#[derive(Debug)] -enum SelectionErased { - None, - Scalar, - ScalarArgs(NodeArgsErased), - Composite(CompositeSelection), - CompositeArgs(NodeArgsErased, CompositeSelection), - Alias(HashMap), -} - -#[derive(Debug)] -pub enum AliasSelection { - Scalar, - ScalarArgs(NodeArgsErased), - Composite(CompositeSelection), - CompositeArgs(NodeArgsErased, CompositeSelection), -} - -#[derive(Default, Clone, Copy, Debug)] -pub struct HasAlias; -#[derive(Default, Clone, Copy, Debug)] -pub struct NoAlias; - -#[derive(Debug)] -pub struct AliasInfo { - aliases: HashMap, - _phantom: PhantomData<(ArgT, SelT, ATyag)>, -} - -#[derive(Debug)] -pub enum ScalarSelect { - Get, - Skip, - Alias(AliasInfo<(), (), ATy>), -} -#[derive(Debug)] -pub enum ScalarSelectArgs { - Get(NodeArgsErased, PhantomData), - Skip, - Alias(AliasInfo), -} -#[derive(Debug)] -pub enum CompositeSelect { - Get(CompositeSelection, PhantomData), - Skip, - Alias(AliasInfo<(), SelT, ATy>), -} -#[derive(Debug)] -pub enum CompositeSelectArgs { - Get( - NodeArgsErased, - CompositeSelection, - PhantomData<(ArgT, SelT)>, - ), - Skip, - Alias(AliasInfo), -} - -pub struct Get; -pub struct Skip; -pub struct Args(ArgT); -pub struct Select(SelT); -pub struct ArgSelect(ArgT, SelT); -pub struct Alias(AliasInfo); - -/// Shorthand for `Default::default`. All selections generally default -/// to [`skip`]. -pub fn default() -> T { - T::default() -} -/// Include all sub nodes excpet those that require arguments -pub fn all() -> T { - T::all() -} -/// Select the node for inclusion. -pub fn get>() -> T { - T::from(Get) -} -/// Skip this node when queryig. -pub fn skip>() -> T { - T::from(Skip) -} -/// Provide argumentns for a scalar node. -pub fn args>>(args: ArgT) -> T { - T::from(Args(args)) -} -/// Provide selections for a composite node that takes no args. -pub fn select>>(selection: SelT) -> T { - T::from(Select(selection)) -} -/// Provide arguments and selections for a composite node. -pub fn arg_select>>(args: ArgT, selection: SelT) -> T { - T::from(ArgSelect(args, selection)) -} - -/// Query the same node multiple times using aliases. -/// -/// WARNING: make sure your alias names don't clash across sibling -/// nodes. -pub fn alias(info: impl Into>) -> T -where - S: Into, - ASelT: Into, - T: From> + FromAliasSelection, -{ - let info: HashMap<_, _> = info.into(); - T::from(Alias(AliasInfo { - aliases: info - .into_iter() - .map(|(name, sel)| (name.into(), sel.into())) - .collect(), - _phantom: PhantomData, - })) -} - -pub trait Selection { - /// Include all sub nodes excpet those that require arguments - fn all() -> Self; -} - -// --- Impl SelectionType impls --- // - -impl Selection for ScalarSelect { - fn all() -> Self { - Self::Get - } -} -impl Selection for ScalarSelectArgs { - fn all() -> Self { - Self::Skip - } -} -impl Selection for CompositeSelect -where - SelT: Selection + Into, -{ - fn all() -> Self { - let sel = SelT::all(); - Self::Get(sel.into(), PhantomData) - } -} -impl Selection for CompositeSelectArgs -where - SelT: Selection, -{ - fn all() -> Self { - Self::Skip - } -} -// --- Default impls --- // - -impl Default for ScalarSelect { - fn default() -> Self { - Self::Skip - } -} -impl Default for ScalarSelectArgs { - fn default() -> Self { - Self::Skip - } -} -impl Default for CompositeSelect { - fn default() -> Self { - Self::Skip - } -} -impl Default for CompositeSelectArgs { - fn default() -> Self { - Self::Skip - } -} - -// --- From Get/Skip...etc impls --- // - -impl From for ScalarSelect { - fn from(_: Get) -> Self { - Self::Get - } -} - -impl From for ScalarSelect { - fn from(_: Skip) -> Self { - Self::Skip - } -} -impl From for ScalarSelectArgs { - fn from(_: Skip) -> Self { - Self::Skip - } -} -impl From for CompositeSelect { - fn from(_: Skip) -> Self { - Self::Skip - } -} -impl From for CompositeSelectArgs { - fn from(_: Skip) -> Self { - Self::Skip - } -} - -impl From> for ScalarSelectArgs -where - ArgT: Serialize, -{ - fn from(Args(args): Args) -> Self { - Self::Get(NodeArgsErased::Inline(to_json_value(args)), PhantomData) - } -} - -impl From> for CompositeSelect -where - SelT: Into, -{ - fn from(Select(selection): Select) -> Self { - Self::Get(selection.into(), PhantomData) - } -} - -impl From> for CompositeSelectArgs -where - ArgT: Serialize, - SelT: Into, -{ - fn from(ArgSelect(args, selection): ArgSelect) -> Self { - Self::Get( - NodeArgsErased::Inline(to_json_value(args)), - selection.into(), - PhantomData, - ) - } -} - -impl From> for ScalarSelectArgs { - fn from(value: PlaceholderArg) -> Self { - Self::Get(NodeArgsErased::Placeholder(value.value), PhantomData) - } -} -impl From> - for CompositeSelectArgs -where - SelT: Into, -{ - fn from(value: PlaceholderArgSelect) -> Self { - Self::Get( - NodeArgsErased::Placeholder(value.value), - value.selection.into(), - PhantomData, - ) - } -} - -// --- ToAliasSelection impls --- // - -/// This is a marker trait that allows the core selection types -/// like CompositeSelectNoArgs to mark which types can be used -/// as their aliasing nodes. This prevents usage of invalid selections -/// on aliases like [`Skip`]. -pub trait FromAliasSelection {} - -impl FromAliasSelection for ScalarSelect {} -impl FromAliasSelection> for ScalarSelectArgs {} -impl FromAliasSelection> for CompositeSelect {} -impl FromAliasSelection> - for CompositeSelectArgs -{ -} - -// --- From Alias impls --- // - -impl From>> for ScalarSelect { - fn from(Alias(info): Alias<(), ScalarSelect>) -> Self { - Self::Alias(AliasInfo { - aliases: info.aliases, - _phantom: PhantomData, - }) - } -} -impl From> for ScalarSelectArgs { - fn from(Alias(info): Alias) -> Self { - Self::Alias(info) - } -} -impl From> for CompositeSelect { - fn from(Alias(info): Alias<(), SelT>) -> Self { - Self::Alias(info) - } -} -impl From> for CompositeSelectArgs { - fn from(Alias(info): Alias) -> Self { - Self::Alias(info) - } -} - -// --- Into SelectionErased impls --- // - -impl From> for SelectionErased { - fn from(value: AliasInfo) -> SelectionErased { - SelectionErased::Alias(value.aliases) - } -} - -impl From> for SelectionErased { - fn from(value: ScalarSelect) -> SelectionErased { - use ScalarSelect::*; - match value { - Get => SelectionErased::Scalar, - Skip => SelectionErased::None, - Alias(alias) => alias.into(), - } - } -} - -impl From> for SelectionErased { - fn from(value: ScalarSelectArgs) -> SelectionErased { - use ScalarSelectArgs::*; - match value { - Get(arg, _) => SelectionErased::ScalarArgs(arg), - Skip => SelectionErased::None, - Alias(alias) => alias.into(), - } - } -} - -impl From> for SelectionErased { - fn from(value: CompositeSelect) -> SelectionErased { - use CompositeSelect::*; - match value { - Get(selection, _) => SelectionErased::Composite(selection), - Skip => SelectionErased::None, - Alias(alias) => alias.into(), - } - } -} - -impl From> for SelectionErased -where - SelT: Into, -{ - fn from(value: CompositeSelectArgs) -> SelectionErased { - use CompositeSelectArgs::*; - match value { - Get(args, selection, _) => SelectionErased::CompositeArgs(args, selection), - Skip => SelectionErased::None, - Alias(alias) => alias.into(), - } - } -} - -// --- UnionMember impls --- // - -/// The following trait is used for types that implement -/// selections for the composite members of unions. -/// -/// The err return value indicates the case where -/// aliases are used selections on members which is an error -/// -/// This state is currently impossible to arrive at since -/// AliasInfo has no public construction methods with NoAlias -/// set. Union selection types make sure all their immediate -/// member selection use NoAlias to prevent this invalid stat.e -pub trait UnionMember { - fn composite(self) -> Option; -} - -/// Internal marker trait use to make sure we can't have union members -/// selection being another union selection. -trait NotUnionSelection {} - -// NOTE: UnionMembers are all NoAlias -impl UnionMember for ScalarSelect { - fn composite(self) -> Option { - None - } -} - -impl UnionMember for ScalarSelectArgs { - fn composite(self) -> Option { - None - } -} - -impl UnionMember for CompositeSelect -where - SelT: NotUnionSelection, -{ - fn composite(self) -> Option { - use CompositeSelect::*; - match self { - Get(CompositeSelection::Atomic(selection), _) => Some(selection), - Skip => None, - Get(CompositeSelection::Union(_), _) => { - unreachable!("union selection on union member selection. how??") - } - Alias(_) => unreachable!("alias discovored on union/either member. how??"), - } - } -} - -impl UnionMember for CompositeSelectArgs -where - SelT: NotUnionSelection, -{ - fn composite(self) -> Option { - use CompositeSelectArgs::*; - match self { - Get(_args, CompositeSelection::Atomic(selection), _) => Some(selection), - Skip => None, - Get(_args, CompositeSelection::Union(_), _) => { - unreachable!("union selection on union member selection. how??") - } - Alias(_) => unreachable!("alias discovored on union/either member. how??"), - } - } -} - -// --- Into AliasSelection impls --- // - -impl From for AliasSelection { - fn from(_val: Get) -> Self { - AliasSelection::Scalar - } -} -impl From> for AliasSelection -where - ArgT: Serialize, -{ - fn from(val: Args) -> Self { - AliasSelection::ScalarArgs(NodeArgsErased::Inline(to_json_value(val.0))) - } -} -impl From> for AliasSelection -where - SelT: Into, -{ - fn from(val: Select) -> Self { - let map = val.0.into(); - AliasSelection::Composite(map) - } -} - -impl From> for AliasSelection -where - ArgT: Serialize, - SelT: Into, -{ - fn from(val: ArgSelect) -> Self { - let map = val.1.into(); - AliasSelection::CompositeArgs(NodeArgsErased::Inline(to_json_value(val.0)), map) - } -} -impl From> for AliasSelection { - fn from(val: ScalarSelect) -> Self { - use ScalarSelect::*; - match val { - Get => AliasSelection::Scalar, - _ => unreachable!(), - } - } -} -impl From> for AliasSelection { - fn from(val: ScalarSelectArgs) -> Self { - use ScalarSelectArgs::*; - match val { - Get(args, _) => AliasSelection::ScalarArgs(args), - _ => unreachable!(), - } - } -} - -impl From> for AliasSelection -where - SelT: Into, -{ - fn from(val: CompositeSelect) -> Self { - use CompositeSelect::*; - match val { - Get(select, _) => AliasSelection::Composite(select), - _ => unreachable!(), - } - } -} -impl From> for AliasSelection -where - SelT: Into, -{ - fn from(val: CompositeSelectArgs) -> Self { - use CompositeSelectArgs::*; - match val { - Get(args, selection, _) => AliasSelection::CompositeArgs(args, selection), - _ => unreachable!(), - } - } -} - -// TODO: convert to proc_macro -#[macro_export] -macro_rules! impl_selection_traits { - ($ty:ident,$($field:tt),+) => { - impl From<$ty> for CompositeSelection { - fn from(value: $ty) -> CompositeSelection { - CompositeSelection::Atomic(SelectionErasedMap( - [ - $((stringify!($field).into(), value.$field.into()),)+ - ] - .into(), - )) - } - } - - impl Selection for $ty { - fn all() -> Self { - Self { - $($field: all(),)+ - } - } - } - - impl NotUnionSelection for $ty {} - }; -} -#[macro_export] -macro_rules! impl_union_selection_traits { - ($ty:ident,$(($variant_ty:tt, $field:tt)),+) => { - impl From<$ty> for CompositeSelection { - fn from(value: $ty) -> CompositeSelection { - CompositeSelection::Union( - [ - $({ - let selection = - UnionMember::composite(value.$field); - selection.map(|val| ($variant_ty.into(), val)) - },)+ - ] - .into_iter() - .filter_map(|val| val) - .collect(), - ) - } - } - }; -} - -// -// --- --- Argument types --- --- // -// - -pub enum NodeArgs { - Inline(ArgT), - Placeholder(PlaceholderValue), -} - -impl From for NodeArgs { - fn from(value: ArgT) -> Self { - Self::Inline(value) - } -} - -#[derive(Debug)] -pub enum NodeArgsErased { - None, - Inline(serde_json::Value), - Placeholder(PlaceholderValue), -} - -impl From> for NodeArgsErased -where - ArgT: Serialize, -{ - fn from(value: NodeArgs) -> Self { - match value { - NodeArgs::Inline(arg) => Self::Inline(to_json_value(arg)), - NodeArgs::Placeholder(ph) => Self::Placeholder(ph), - } - } -} - -enum NodeArgsMerged { - Inline(HashMap), - Placeholder { - value: PlaceholderValue, - arg_types: HashMap, - }, -} - -/// This checks the input arg json for a node -/// against the arg description from the [`NodeMeta`]. -fn check_node_args( - args: serde_json::Value, - arg_types: &HashMap, -) -> Result, String> { - let args = match args { - serde_json::Value::Object(val) => val, - _ => unreachable!(), - }; - let mut instance_args = HashMap::new(); - for (name, value) in args { - let Some(type_name) = arg_types.get(&name[..]) else { - return Err(name); - }; - instance_args.insert( - name.into(), - NodeArgValue { - type_name: type_name.clone(), - value, - }, - ); - } - Ok(instance_args) -} - -struct NodeArgValue { - type_name: CowStr, - value: serde_json::Value, -} - -pub struct PreparedArgs; - -impl PreparedArgs { - pub fn get(&mut self, key: impl Into, fun: F) -> NodeArgs - where - In: serde::de::DeserializeOwned, - F: Fn(In) -> ArgT + 'static + Send + Sync, - ArgT: Serialize, - { - NodeArgs::Placeholder(PlaceholderValue { - key: key.into(), - fun: Box::new(move |value| { - let value = serde_json::from_value(value)?; - let value = fun(value); - serde_json::to_value(value) - }), - }) - } - pub fn arg(&mut self, key: impl Into, fun: F) -> T - where - T: From>, - In: serde::de::DeserializeOwned, - F: Fn(In) -> ArgT + 'static + Send + Sync, - ArgT: Serialize, - { - T::from(PlaceholderArg { - value: PlaceholderValue { - key: key.into(), - fun: Box::new(move |value| { - let value = serde_json::from_value(value)?; - let value = fun(value); - serde_json::to_value(value) - }), - }, - _phantom: PhantomData, - }) - } - pub fn arg_select( - &mut self, - key: impl Into, - selection: SelT, - fun: F, - ) -> T - where - T: From>, - In: serde::de::DeserializeOwned, - F: Fn(In) -> ArgT + 'static + Send + Sync, - ArgT: Serialize, - { - T::from(PlaceholderArgSelect { - value: PlaceholderValue { - key: key.into(), - fun: Box::new(move |value| { - let value = serde_json::from_value(value)?; - let value = fun(value); - serde_json::to_value(value) - }), - }, - selection, - _phantom: PhantomData, - }) - } -} - -pub struct PlaceholderValue { - key: CowStr, - fun: Box< - dyn Fn(serde_json::Value) -> Result + Send + Sync, - >, -} - -impl std::fmt::Debug for PlaceholderValue { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("PlaceholderValue") - .field("key", &self.key) - .finish_non_exhaustive() - } -} - -pub struct PlaceholderArg { - value: PlaceholderValue, - _phantom: PhantomData, -} -pub struct PlaceholderArgSelect { - value: PlaceholderValue, - selection: SelT, - _phantom: PhantomData, -} - -pub struct PlaceholderArgs(Arg); - -// -// --- --- GraphQL types --- --- // -// - -use graphql::*; -pub mod graphql { - use std::sync::Arc; - - use super::*; - - pub(super) type TyToGqlTyMap = Arc>; - - #[derive(Default, Clone)] - pub struct GraphQlTransportOptions { - headers: reqwest::header::HeaderMap, - timeout: Option, - } - - // PlaceholderValue, fieldName -> gql_var_name - type FoundPlaceholders = Vec<(PlaceholderValue, HashMap)>; - - fn select_node_to_gql( - ty_to_gql_ty_map: &TyToGqlTyMap, - dest: &mut impl std::fmt::Write, - node: SelectNodeErased, - variable_types: &mut HashMap, - variables_object: &mut JsonObject, - placeholders: &mut FoundPlaceholders, - ) -> std::fmt::Result { - if node.instance_name != node.node_name { - write!(dest, "{}: {}", node.instance_name, node.node_name)?; - } else { - write!(dest, "{}", node.node_name)?; - } - if let Some(args) = node.args { - match args { - NodeArgsMerged::Inline(args) => { - if !args.is_empty() { - write!(dest, "(")?; - for (key, val) in args { - let name = format!("in{}", variable_types.len()); - write!(dest, "{key}: ${name}, ")?; - variables_object.insert(name.clone(), val.value); - variable_types.insert(name.into(), val.type_name); - } - write!(dest, ")")?; - } - } - NodeArgsMerged::Placeholder { value, arg_types } => { - if !arg_types.is_empty() { - write!(dest, "(")?; - let mut map = HashMap::new(); - for (key, type_name) in arg_types { - let name = format!("in{}", variable_types.len()); - write!(dest, "{key}: ${name}, ")?; - variable_types.insert(name.clone().into(), type_name); - map.insert(key, name.into()); - } - write!(dest, ")")?; - placeholders.push((value, map)); - } - } - } - } - match node.sub_nodes { - SubNodes::None => {} - SubNodes::Atomic(sub_nodes) => { - write!(dest, "{{ ")?; - for node in sub_nodes { - select_node_to_gql( - ty_to_gql_ty_map, - dest, - node, - variable_types, - variables_object, - placeholders, - )?; - write!(dest, " ")?; - } - write!(dest, " }}")?; - } - SubNodes::Union(variants) => { - write!(dest, "{{ ")?; - for (ty, sub_nodes) in variants { - let gql_ty = ty_to_gql_ty_map - .get(&ty[..]) - .expect("impossible: no GraphQL type equivalent found for variant type"); - let gql_ty = match gql_ty.strip_suffix('!') { - Some(val) => val, - None => &gql_ty[..], - }; - write!(dest, " ... on {gql_ty} {{ ")?; - for node in sub_nodes { - select_node_to_gql( - ty_to_gql_ty_map, - dest, - node, - variable_types, - variables_object, - placeholders, - )?; - write!(dest, " ")?; - } - write!(dest, " }}")?; - } - write!(dest, " }}")?; - } - } - Ok(()) - } - - fn build_gql_doc( - ty_to_gql_ty_map: &TyToGqlTyMap, - nodes: Vec, - ty: &'static str, - name: Option, - ) -> Result<(String, JsonObject, FoundPlaceholders), GraphQLRequestError> { - use std::fmt::Write; - let mut variables_types = HashMap::new(); - let mut variables_values = serde_json::Map::new(); - let mut root_nodes = String::new(); - let mut placeholders = vec![]; - for (idx, node) in nodes.into_iter().enumerate() { - let node = SelectNodeErased { - instance_name: format!("node{idx}").into(), - ..node - }; - write!(&mut root_nodes, " ").expect("error building to string"); - select_node_to_gql( - ty_to_gql_ty_map, - &mut root_nodes, - node, - &mut variables_types, - &mut variables_values, - &mut placeholders, - ) - .expect("error building to string"); - writeln!(&mut root_nodes).expect("error building to string"); - } - let mut args_row = String::new(); - if !variables_types.is_empty() { - write!(&mut args_row, "(").expect("error building to string"); - for (key, ty) in &variables_types { - let gql_ty = ty_to_gql_ty_map.get(&ty[..]).ok_or_else(|| { - GraphQLRequestError::InvalidQuery { - error: Box::from(format!("unknown typegraph type found: {}", ty)), - } - })?; - write!(&mut args_row, "${key}: {gql_ty}, ").expect("error building to string"); - } - write!(&mut args_row, ")").expect("error building to string"); - } - let name = name.unwrap_or_else(|| "".into()); - let doc = format!("{ty} {name}{args_row} {{\n{root_nodes}}}"); - Ok((doc, variables_values, placeholders)) - } - - struct GraphQLRequest { - addr: Url, - method: reqwest::Method, - headers: reqwest::header::HeaderMap, - body: serde_json::Value, - } - - fn build_gql_req( - addr: Url, - doc: &str, - variables: &JsonObject, - opts: &GraphQlTransportOptions, - ) -> GraphQLRequest { - let mut headers = reqwest::header::HeaderMap::new(); - headers.insert( - reqwest::header::ACCEPT, - "application/json".try_into().unwrap(), - ); - headers.insert( - reqwest::header::CONTENT_TYPE, - "application/json".try_into().unwrap(), - ); - headers.extend(opts.headers.clone()); - // println!("{doc}, {variables:#?}"); - let body = serde_json::json!({ - "query": doc, - "variables": variables - }); - GraphQLRequest { - addr, - method: reqwest::Method::POST, - headers, - body, - } - } - - #[derive(Debug)] - pub struct GraphQLResponse { - pub status: reqwest::StatusCode, - pub headers: reqwest::header::HeaderMap, - pub body: JsonObject, - } - - fn handle_response( - response: GraphQLResponse, - nodes_len: usize, - ) -> Result, GraphQLRequestError> { - if !response.status.is_success() { - return Err(GraphQLRequestError::RequestFailed { response }); - } - #[derive(Debug, Deserialize)] - struct Response { - data: Option, - errors: Option>, - } - let body: Response = match serde_json::from_value(serde_json::Value::Object(response.body)) - { - Ok(body) => body, - Err(error) => { - return Err(GraphQLRequestError::BodyError { - error: Box::new(error), - }) - } - }; - if let Some(errors) = body.errors { - return Err(GraphQLRequestError::RequestErrors { - errors, - data: body.data, - }); - } - let Some(mut body) = body.data else { - return Err(GraphQLRequestError::BodyError { - error: Box::from("body response doesn't contain data field"), - }); - }; - (0..nodes_len) - .map(|idx| { - body.remove(&format!("node{idx}")) - .ok_or_else(|| GraphQLRequestError::BodyError { - error: Box::from(format!( - "expecting response under node key 'node{idx}' but none found" - )), - }) - }) - .collect::, _>>() - } - - #[derive(Debug)] - pub enum GraphQLRequestError { - /// GraphQL errors recieived - RequestErrors { - errors: Vec, - data: Option, - }, - /// Http error codes recieived - RequestFailed { - response: GraphQLResponse, - }, - /// Unable to deserialize body - BodyError { - error: BoxErr, - }, - /// Unable to make http request - NetworkError { - error: BoxErr, - }, - InvalidQuery { - error: BoxErr, - }, - } - - impl std::fmt::Display for GraphQLRequestError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - GraphQLRequestError::RequestErrors { errors, .. } => { - write!(f, "graphql errors in response: ")?; - for err in errors { - write!(f, "{}, ", err.message)?; - } - } - GraphQLRequestError::RequestFailed { response } => { - write!(f, "request failed with status {}", response.status)?; - } - GraphQLRequestError::BodyError { error } => { - write!(f, "error reading request body: {error}")?; - } - GraphQLRequestError::NetworkError { error } => { - write!(f, "error making http request: {error}")?; - } - GraphQLRequestError::InvalidQuery { error } => { - write!(f, "error building request: {error}")? - } - } - Ok(()) - } - } - impl std::error::Error for GraphQLRequestError {} - - #[derive(Debug, Deserialize)] - pub struct ErrorLocation { - pub line: u32, - pub column: u32, - } - #[derive(Debug, Deserialize)] - pub struct GraphqlError { - pub message: String, - pub locations: Option>, - pub path: Option>, - } - - #[derive(Debug)] - pub enum PathSegment { - Field(String), - Index(u64), - } - - impl<'de> serde::de::Deserialize<'de> for PathSegment { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - use serde_json::Value; - let val = Value::deserialize(deserializer)?; - match val { - Value::Number(n) => Ok(PathSegment::Index(n.as_u64().unwrap())), - Value::String(s) => Ok(PathSegment::Field(s)), - _ => panic!("invalid path segment type"), - } - } - } - - #[derive(Clone)] - pub struct GraphQlTransportReqwestSync { - addr: Url, - ty_to_gql_ty_map: TyToGqlTyMap, - client: reqwest::blocking::Client, - } - - #[derive(Clone)] - pub struct GraphQlTransportReqwest { - addr: Url, - ty_to_gql_ty_map: TyToGqlTyMap, - client: reqwest::Client, - } - - impl GraphQlTransportReqwestSync { - pub fn new(addr: Url, ty_to_gql_ty_map: TyToGqlTyMap) -> Self { - Self { - addr, - ty_to_gql_ty_map, - client: reqwest::blocking::Client::new(), - } - } - - fn fetch( - &self, - nodes: Vec, - opts: &GraphQlTransportOptions, - ty: &'static str, - ) -> Result, GraphQLRequestError> { - let nodes_len = nodes.len(); - let (doc, variables, placeholders) = - build_gql_doc(&self.ty_to_gql_ty_map, nodes, ty, None)?; - if !placeholders.is_empty() { - panic!("placeholders found in non-prepared query") - } - let req = build_gql_req(self.addr.clone(), &doc, &variables, opts); - let req = self - .client - .request(req.method, req.addr) - .headers(req.headers) - .json(&req.body); - let req = if let Some(timeout) = opts.timeout { - req.timeout(timeout) - } else { - req - }; - match req.send() { - Ok(res) => { - let status = res.status(); - let headers = res.headers().clone(); - match res.json::() { - Ok(body) => handle_response( - GraphQLResponse { - status, - headers, - body, - }, - nodes_len, - ), - Err(error) => Err(GraphQLRequestError::BodyError { - error: Box::new(error), - }), - } - } - Err(error) => Err(GraphQLRequestError::NetworkError { - error: Box::new(error), - }), - } - } - - pub fn query( - &self, - nodes: Doc, - ) -> Result { - self.query_with_opts(nodes, &Default::default()) - } - - pub fn query_with_opts( - &self, - nodes: Doc, - opts: &GraphQlTransportOptions, - ) -> Result { - let resp = self.fetch(nodes.to_select_doc(), opts, "query")?; - let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - })?; - Ok(resp) - } - - pub fn mutation( - &self, - nodes: Doc, - ) -> Result { - self.mutation_with_opts(nodes, &Default::default()) - } - - pub fn mutation_with_opts( - &self, - nodes: Doc, - opts: &GraphQlTransportOptions, - ) -> Result { - let resp = self.fetch(nodes.to_select_doc(), opts, "mutation")?; - let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - })?; - Ok(resp) - } - pub fn prepare_query( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - ) -> Result, PrepareRequestError> { - self.prepare_query_with_opts(fun, Default::default()) - } - - pub fn prepare_query_with_opts( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - opts: GraphQlTransportOptions, - ) -> Result, PrepareRequestError> { - PreparedRequestReqwestSync::new( - fun, - self.addr.clone(), - opts, - "query", - &self.ty_to_gql_ty_map, - ) - } - - pub fn prepare_mutation( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - ) -> Result, PrepareRequestError> { - self.prepare_mutation_with_opts(fun, Default::default()) - } - - pub fn prepare_mutation_with_opts( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - opts: GraphQlTransportOptions, - ) -> Result, PrepareRequestError> { - PreparedRequestReqwestSync::new( - fun, - self.addr.clone(), - opts, - "mutation", - &self.ty_to_gql_ty_map, - ) - } - } - - impl GraphQlTransportReqwest { - pub fn new(addr: Url, ty_to_gql_ty_map: TyToGqlTyMap) -> Self { - Self { - addr, - ty_to_gql_ty_map, - client: reqwest::Client::new(), - } - } - - async fn fetch( - &self, - nodes: Vec, - opts: &GraphQlTransportOptions, - ty: &'static str, - ) -> Result, GraphQLRequestError> { - let nodes_len = nodes.len(); - let (doc, variables, placeholders) = - build_gql_doc(&self.ty_to_gql_ty_map, nodes, ty, None)?; - if !placeholders.is_empty() { - panic!("placeholders found in non-prepared query") - } - let req = build_gql_req(self.addr.clone(), &doc, &variables, opts); - let req = self - .client - .request(req.method, req.addr) - .headers(req.headers) - .json(&req.body); - let req = if let Some(timeout) = opts.timeout { - req.timeout(timeout) - } else { - req - }; - match req.send().await { - Ok(res) => { - let status = res.status(); - let headers = res.headers().clone(); - match res.json::().await { - Ok(body) => handle_response( - GraphQLResponse { - status, - headers, - body, - }, - nodes_len, - ), - Err(error) => Err(GraphQLRequestError::BodyError { - error: Box::new(error), - }), - } - } - Err(error) => Err(GraphQLRequestError::NetworkError { - error: Box::new(error), - }), - } - } - - pub async fn query( - &self, - nodes: Doc, - ) -> Result { - self.query_with_opts(nodes, &Default::default()).await - } - - pub async fn query_with_opts( - &self, - nodes: Doc, - opts: &GraphQlTransportOptions, - ) -> Result { - let resp = self.fetch(nodes.to_select_doc(), opts, "query").await?; - let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - })?; - Ok(resp) - } - - pub async fn mutation( - &self, - nodes: Doc, - ) -> Result { - self.mutation_with_opts(nodes, &Default::default()).await - } - - pub async fn mutation_with_opts( - &self, - nodes: Doc, - opts: &GraphQlTransportOptions, - ) -> Result { - let resp = self.fetch(nodes.to_select_doc(), opts, "mutation").await?; - let resp = Doc::parse_response(resp).map_err(|err| GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - })?; - Ok(resp) - } - pub fn prepare_query( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - ) -> Result, PrepareRequestError> { - self.prepare_query_with_opts(fun, Default::default()) - } - - pub fn prepare_query_with_opts( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - opts: GraphQlTransportOptions, - ) -> Result, PrepareRequestError> { - PreparedRequestReqwest::new( - fun, - self.addr.clone(), - opts, - "query", - &self.ty_to_gql_ty_map, - ) - } - - pub fn prepare_mutation( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - ) -> Result, PrepareRequestError> { - self.prepare_mutation_with_opts(fun, Default::default()) - } - - pub fn prepare_mutation_with_opts( - &self, - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - opts: GraphQlTransportOptions, - ) -> Result, PrepareRequestError> { - PreparedRequestReqwest::new( - fun, - self.addr.clone(), - opts, - "mutation", - &self.ty_to_gql_ty_map, - ) - } - } - - fn resolve_prepared_variables( - placeholders: &FoundPlaceholders, - mut inline_variables: JsonObject, - mut args: HashMap, - ) -> Result { - for (ph, key_map) in placeholders { - let Some(value) = args.remove(&ph.key) else { - return Err(PrepareRequestError::PlaceholderError(Box::from(format!( - "no value found for placeholder expected under key '{}'", - ph.key - )))); - }; - let value = (ph.fun)(value).map_err(|err| { - PrepareRequestError::PlaceholderError(Box::from(format!( - "error applying placeholder closure for value under key '{}': {err}", - ph.key - ))) - })?; - let serde_json::Value::Object(mut value) = value else { - unreachable!("placeholder closures must return structs"); - }; - for (key, var_key) in key_map { - inline_variables.insert( - var_key.clone().into(), - value.remove(&key[..]).unwrap_or(serde_json::Value::Null), - ); - } - } - Ok(inline_variables) - } - - pub struct PreparedRequestReqwest { - addr: Url, - client: reqwest::Client, - nodes_len: usize, - pub doc: String, - variables: JsonObject, - opts: GraphQlTransportOptions, - placeholders: Arc, - _phantom: PhantomData, - } - - pub struct PreparedRequestReqwestSync { - addr: Url, - client: reqwest::blocking::Client, - nodes_len: usize, - pub doc: String, - variables: JsonObject, - opts: GraphQlTransportOptions, - placeholders: Arc, - _phantom: PhantomData, - } - - impl PreparedRequestReqwestSync { - fn new( - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - addr: Url, - opts: GraphQlTransportOptions, - ty: &'static str, - ty_to_gql_ty_map: &TyToGqlTyMap, - ) -> Result { - let nodes = fun(&mut PreparedArgs); - let nodes = nodes.to_select_doc(); - let nodes_len = nodes.len(); - let (doc, variables, placeholders) = build_gql_doc(ty_to_gql_ty_map, nodes, ty, None) - .map_err(PrepareRequestError::BuildError)?; - Ok(Self { - doc, - variables, - nodes_len, - addr, - client: reqwest::blocking::Client::new(), - opts, - placeholders: Arc::new(placeholders), - _phantom: PhantomData, - }) - } - - pub fn perform( - &self, - args: impl Into>, - ) -> Result - where - K: Into, - V: serde::Serialize, - { - let args: HashMap = args.into(); - let args = args - .into_iter() - .map(|(key, val)| (key.into(), to_json_value(val))) - .collect(); - let variables = - resolve_prepared_variables(&self.placeholders, self.variables.clone(), args)?; - let req = build_gql_req(self.addr.clone(), &self.doc, &variables, &self.opts); - let req = self - .client - .request(req.method, req.addr) - .headers(req.headers) - .json(&req.body); - let req = if let Some(timeout) = self.opts.timeout { - req.timeout(timeout) - } else { - req - }; - let res = match req.send() { - Ok(res) => { - let status = res.status(); - let headers = res.headers().clone(); - match res.json::() { - Ok(body) => handle_response( - GraphQLResponse { - status, - headers, - body, - }, - self.nodes_len, - ) - .map_err(PrepareRequestError::RequestError)?, - Err(error) => { - return Err(PrepareRequestError::RequestError( - GraphQLRequestError::BodyError { - error: Box::new(error), - }, - )) - } - } - } - Err(error) => { - return Err(PrepareRequestError::RequestError( - GraphQLRequestError::NetworkError { - error: Box::new(error), - }, - )) - } - }; - Doc::parse_response(res).map_err(|err| { - PrepareRequestError::RequestError(GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - }) - }) - } - } - - impl PreparedRequestReqwest { - fn new( - fun: impl FnOnce(&mut PreparedArgs) -> Doc, - addr: Url, - opts: GraphQlTransportOptions, - ty: &'static str, - ty_to_gql_ty_map: &TyToGqlTyMap, - ) -> Result { - let nodes = fun(&mut PreparedArgs); - let nodes = nodes.to_select_doc(); - let nodes_len = nodes.len(); - let (doc, variables, placeholders) = build_gql_doc(ty_to_gql_ty_map, nodes, ty, None) - .map_err(PrepareRequestError::BuildError)?; - let placeholders = std::sync::Arc::new(placeholders); - Ok(Self { - doc, - variables, - nodes_len, - addr, - client: reqwest::Client::new(), - opts, - placeholders, - _phantom: PhantomData, - }) - } - - pub async fn perform( - &self, - args: impl Into>, - ) -> Result - where - K: Into, - V: serde::Serialize, - { - let args: HashMap = args.into(); - let args = args - .into_iter() - .map(|(key, val)| (key.into(), to_json_value(val))) - .collect(); - let variables = - resolve_prepared_variables(&self.placeholders, self.variables.clone(), args)?; - let req = build_gql_req(self.addr.clone(), &self.doc, &variables, &self.opts); - let req = self - .client - .request(req.method, req.addr) - .headers(req.headers) - .json(&req.body); - let req = if let Some(timeout) = self.opts.timeout { - req.timeout(timeout) - } else { - req - }; - let res = match req.send().await { - Ok(res) => { - let status = res.status(); - let headers = res.headers().clone(); - match res.json::().await { - Ok(body) => handle_response( - GraphQLResponse { - status, - headers, - body, - }, - self.nodes_len, - ) - .map_err(PrepareRequestError::RequestError)?, - Err(error) => { - return Err(PrepareRequestError::RequestError( - GraphQLRequestError::BodyError { - error: Box::new(error), - }, - )) - } - } - } - Err(error) => { - return Err(PrepareRequestError::RequestError( - GraphQLRequestError::NetworkError { - error: Box::new(error), - }, - )) - } - }; - Doc::parse_response(res).map_err(|err| { - PrepareRequestError::RequestError(GraphQLRequestError::BodyError { - error: Box::from(format!( - "error deserializing response into output type: {err}" - )), - }) - }) - } - } - - // we need a manual clone impl since the derive will - // choke if Doc isn't clone - impl Clone for PreparedRequestReqwestSync { - fn clone(&self) -> Self { - Self { - addr: self.addr.clone(), - client: self.client.clone(), - nodes_len: self.nodes_len, - doc: self.doc.clone(), - variables: self.variables.clone(), - opts: self.opts.clone(), - placeholders: self.placeholders.clone(), - _phantom: PhantomData, - } - } - } - impl Clone for PreparedRequestReqwest { - fn clone(&self) -> Self { - Self { - addr: self.addr.clone(), - client: self.client.clone(), - nodes_len: self.nodes_len, - doc: self.doc.clone(), - variables: self.variables.clone(), - opts: self.opts.clone(), - placeholders: self.placeholders.clone(), - _phantom: PhantomData, - } - } - } - - #[derive(Debug)] - pub enum PrepareRequestError { - BuildError(GraphQLRequestError), - PlaceholderError(BoxErr), - RequestError(GraphQLRequestError), - } - - impl std::error::Error for PrepareRequestError {} - impl std::fmt::Display for PrepareRequestError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - /* PrepareRequestError::FunctionError(err) => { - write!(f, "error calling doc builder closure: {err}") - } */ - PrepareRequestError::BuildError(err) => write!(f, "error building request: {err}"), - PrepareRequestError::PlaceholderError(err) => { - write!(f, "error resolving placeholder values: {err}") - } - PrepareRequestError::RequestError(err) => { - write!(f, "error making graphql request: {err}") - } - } - } - } -} +use core::marker::PhantomData; +use metagen_client::prelude::*; // // --- --- QueryGraph types --- --- // @@ -2169,7 +27,6 @@ impl QueryGraph { // --- --- Typegraph types --- --- // // - #[allow(non_snake_case)] mod node_metas { use super::*; @@ -2178,6 +35,7 @@ mod node_metas { arg_types: None, sub_nodes: None, variants: None, + input_files: None, } } pub fn Post() -> NodeMeta { @@ -2191,6 +49,7 @@ mod node_metas { ("title".into(), scalar as NodeMetaFn), ].into() ), + input_files: None, } } pub fn User() -> NodeMeta { @@ -2204,6 +63,7 @@ mod node_metas { ("posts".into(), Post as NodeMetaFn), ].into() ), + input_files: None, } } pub fn RootGetUserFn() -> NodeMeta { @@ -2268,6 +128,7 @@ mod node_metas { ("user".into(), User as NodeMetaFn), ].into() ), + input_files: None, } } pub fn RootCompositeUnionFn() -> NodeMeta { @@ -2290,6 +151,7 @@ mod node_metas { ("user".into(), User as NodeMetaFn), ].into() ), + input_files: None, } } pub fn RootMixedUnionFn() -> NodeMeta { diff --git a/tests/metagen/typegraphs/sample/rs/main.rs b/tests/metagen/typegraphs/sample/rs/main.rs index 6d50f372f1..2de88e6ab9 100644 --- a/tests/metagen/typegraphs/sample/rs/main.rs +++ b/tests/metagen/typegraphs/sample/rs/main.rs @@ -6,6 +6,7 @@ #[rustfmt::skip] pub mod client; use client::*; +use metagen_client::prelude::*; fn main() -> Result<(), BoxErr> { let port = std::env::var("TG_PORT")?; diff --git a/tests/metagen/typegraphs/sample/rs_upload/Cargo.lock b/tests/metagen/typegraphs/sample/rs_upload/Cargo.lock new file mode 100644 index 0000000000..d93f53f048 --- /dev/null +++ b/tests/metagen/typegraphs/sample/rs_upload/Cargo.lock @@ -0,0 +1,1346 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" + +[[package]] +name = "cc" +version = "1.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "h2" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "hyper" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.161" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "openssl" +version = "0.10.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "proc-macro2" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "reqwest" +version = "0.12.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "windows-registry", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustix" +version = "0.38.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.23.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "sample_fdk" +version = "0.0.1" +dependencies = [ + "derive_more", + "futures", + "lazy_static", + "mime_guess", + "reqwest", + "serde", + "serde_json", + "tokio", + "tokio-util", +] + +[[package]] +name = "schannel" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.213" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.213" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.132" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicase" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" + +[[package]] +name = "unicode-bidi" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" + +[[package]] +name = "unicode-ident" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/tests/metagen/typegraphs/sample/rs_upload/Cargo.toml b/tests/metagen/typegraphs/sample/rs_upload/Cargo.toml new file mode 100644 index 0000000000..e3ee256375 --- /dev/null +++ b/tests/metagen/typegraphs/sample/rs_upload/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "sample_client_upload" +edition = "2021" +version = "0.5.0-rc.6" + +[dependencies] +metagen-client.workspace = true +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +tokio = { version = "1", features = ["rt-multi-thread"] } +tokio-util = "0.7" + +[[bin]] +name = "sample_client_upload" +path = "main.rs" diff --git a/tests/metagen/typegraphs/sample/rs_upload/client.rs b/tests/metagen/typegraphs/sample/rs_upload/client.rs new file mode 100644 index 0000000000..4b7e6b0ea9 --- /dev/null +++ b/tests/metagen/typegraphs/sample/rs_upload/client.rs @@ -0,0 +1,173 @@ +// This file was @generated by metagen and is intended +// to be generated again on subsequent metagen runs. + +use core::marker::PhantomData; +use metagen_client::prelude::*; + +// +// --- --- QueryGraph types --- --- // +// + +#[derive(Clone)] +pub struct QueryGraph { + ty_to_gql_ty_map: TyToGqlTyMap, + addr: Url, +} + +impl QueryGraph { + pub fn graphql(&self) -> GraphQlTransportReqwest { + GraphQlTransportReqwest::new(self.addr.clone(), self.ty_to_gql_ty_map.clone()) + } + pub fn graphql_sync(&self) -> GraphQlTransportReqwestSync { + GraphQlTransportReqwestSync::new(self.addr.clone(), self.ty_to_gql_ty_map.clone()) + } +} + +// +// --- --- Typegraph types --- --- // +// + +#[allow(non_snake_case)] +mod node_metas { + use super::*; + pub fn scalar() -> NodeMeta { + NodeMeta { + arg_types: None, + sub_nodes: None, + variants: None, + input_files: None, + } + } + pub fn RootUploadFn() -> NodeMeta { + NodeMeta { + arg_types: Some( + [ + ("file".into(), "RootUploadFnInputFileFile".into()), + ( + "path".into(), + "RootUploadFnInputPathRootUploadFnInputPathStringOptional".into(), + ), + ] + .into(), + ), + input_files: Some(PathToInputFiles(&[TypePath(&[ + TypePathSegment::ObjectProp("file"), + ])])), + ..scalar() + } + } + pub fn RootUploadManyFn() -> NodeMeta { + NodeMeta { + arg_types: Some( + [ + ( + "prefix".into(), + "RootUploadManyFnInputPrefixRootUploadFnInputPathStringOptional".into(), + ), + ( + "files".into(), + "RootUploadManyFnInputFilesRootUploadFnInputFileFileList".into(), + ), + ] + .into(), + ), + input_files: Some(PathToInputFiles(&[TypePath(&[ + TypePathSegment::ObjectProp("files"), + TypePathSegment::ArrayItem, + ])])), + ..scalar() + } + } +} +use types::*; +pub mod types { + pub type RootUploadFnInputFileFile = super::FileId; + pub type RootUploadFnInputPathString = String; + pub type RootUploadFnInputPathRootUploadFnInputPathStringOptional = + Option; + #[derive(Debug, serde::Serialize, serde::Deserialize)] + pub struct RootUploadFnInputPartial { + pub file: Option, + pub path: RootUploadFnInputPathRootUploadFnInputPathStringOptional, + } + pub type RootUploadManyFnInputPrefixRootUploadFnInputPathStringOptional = + Option; + pub type RootUploadManyFnInputFilesRootUploadFnInputFileFileList = + Vec; + #[derive(Debug, serde::Serialize, serde::Deserialize)] + pub struct RootUploadManyFnInputPartial { + pub prefix: RootUploadManyFnInputPrefixRootUploadFnInputPathStringOptional, + pub files: Option, + } + pub type RootUploadFnOutput = bool; +} + +impl QueryGraph { + pub fn new(addr: Url) -> Self { + Self { + addr, + ty_to_gql_ty_map: std::sync::Arc::new( + [ + ( + "RootUploadFnInputFileFile".into(), + "root_upload_fn_input_file_file!".into(), + ), + ( + "RootUploadFnInputPathRootUploadFnInputPathStringOptional".into(), + "String".into(), + ), + ( + "RootUploadManyFnInputPrefixRootUploadFnInputPathStringOptional".into(), + "String".into(), + ), + ( + "RootUploadManyFnInputFilesRootUploadFnInputFileFileList".into(), + "[root_upload_fn_input_file_file]!".into(), + ), + ] + .into(), + ), + } + } + + pub fn upload( + &self, + args: impl Into>, + ) -> MutationNode { + let nodes = selection_to_node_set( + SelectionErasedMap( + [( + "upload".into(), + SelectionErased::ScalarArgs(args.into().into()), + )] + .into(), + ), + &[("upload".into(), node_metas::RootUploadFn as NodeMetaFn)].into(), + "$q".into(), + ) + .unwrap(); + MutationNode(nodes.into_iter().next().unwrap(), PhantomData) + } + pub fn upload_many( + &self, + args: impl Into>, + ) -> MutationNode { + let nodes = selection_to_node_set( + SelectionErasedMap( + [( + "uploadMany".into(), + SelectionErased::ScalarArgs(args.into().into()), + )] + .into(), + ), + &[( + "uploadMany".into(), + node_metas::RootUploadManyFn as NodeMetaFn, + )] + .into(), + "$q".into(), + ) + .unwrap(); + MutationNode(nodes.into_iter().next().unwrap(), PhantomData) + } +} diff --git a/tests/metagen/typegraphs/sample/rs_upload/hello.txt b/tests/metagen/typegraphs/sample/rs_upload/hello.txt new file mode 100644 index 0000000000..941cdede22 --- /dev/null +++ b/tests/metagen/typegraphs/sample/rs_upload/hello.txt @@ -0,0 +1 @@ +Hello, world of Metagen! diff --git a/tests/metagen/typegraphs/sample/rs_upload/main.rs b/tests/metagen/typegraphs/sample/rs_upload/main.rs new file mode 100644 index 0000000000..8717035c25 --- /dev/null +++ b/tests/metagen/typegraphs/sample/rs_upload/main.rs @@ -0,0 +1,115 @@ +#![deny(clippy::all)] + +// Copyright Metatype OÜ, licensed under the Mozilla Public License Version 2.0. +// SPDX-License-Identifier: MPL-2.0 + +mod client; +use client::*; +use metagen_client::prelude::*; + +fn main() -> Result<(), BoxErr> { + let port = std::env::var("TG_PORT")?; + let api1 = QueryGraph::new(format!("http://localhost:{port}/sample").parse()?); + + // blocking + let (res2, res3) = { + let gql_sync = api1.graphql_sync(); + + let res3 = gql_sync.mutation((api1.upload(types::RootUploadFnInputPartial { + file: Some( + File::from_bytes("hello".as_bytes()) + .mime_type("text/plain") + .try_into()?, + ), + path: Some("files/hello.txt".to_string()), + }),))?; + + let prepared_m = gql_sync.prepare_mutation(|args| { + (api1.upload_many(args.get("files", |files: Vec| { + types::RootUploadManyFnInputPartial { + files: Some(files), + prefix: Some("assets/".to_string()), + } + })),) + })?; + + let hello_path: FileId = File::from_path("hello.txt").try_into()?; + let hello_stream: FileId = File::from_reader(std::fs::File::open("hello.txt")?) + .mime_type("text/plain") + .try_into()?; + + let prepared_clone = prepared_m.clone(); + let res2 = + prepared_clone.perform([("files", serde_json::json!([hello_path, hello_stream,]))])?; + + (res2, res3) + }; + + // non-blocking + tokio::runtime::Builder::new_multi_thread() + .enable_all() + .build()? + .block_on(async move { + let gql = api1.graphql(); + + let prepared_m = gql.prepare_mutation(|args| { + (api1.upload( + args.get("file", |file: FileId| types::RootUploadFnInputPartial { + file: Some(file), + path: Some("files/hello.txt".to_string()), + }), + ),) + })?; + + let file = File::from_bytes("hello".as_bytes()).mime_type("text/plain"); + let file: FileId = file.try_into()?; + let res1 = prepared_m + .perform([("file", serde_json::json!(file))]) + .await?; + + // let res1a = prepared_m.perform([ + // ( + // "file", + // serde_json::json!(file) + // ), + // ]).await?; + // + + use tokio_util::compat::TokioAsyncReadCompatExt as _; + let hello_path: FileId = File::from_path("hello.txt").try_into()?; + let hello_stream: FileId = + File::from_async_reader(tokio::fs::File::open("hello.txt").await?.compat()) + .mime_type("text/plain") + .try_into()?; + + let res4 = gql + .mutation((api1.upload_many(types::RootUploadManyFnInputPartial { + files: Some(vec![hello_path, hello_stream]), + prefix: Some("assets/".to_string()), + }),)) + .await?; + + println!( + "{}", + serde_json::to_string_pretty(&serde_json::json!([ + { + "upload": res1.0, + }, + // { + // "upload": res1a.0, + // }, + { + "uploadMany": res2.0, + }, + { + "upload": res3.0, + }, + { + "uploadMany": res4.0, + }, + ]))? + ); + + Ok(()) + }) +} diff --git a/tests/metagen/typegraphs/sample/ts/client.ts b/tests/metagen/typegraphs/sample/ts/client.ts index 25f0bb1d91..0c2619e473 100644 --- a/tests/metagen/typegraphs/sample/ts/client.ts +++ b/tests/metagen/typegraphs/sample/ts/client.ts @@ -353,7 +353,7 @@ function convertQueryNodeGql( : `${node.instanceName}: ${node.nodeName}`; const args = node.args; - if (args) { + if (args && Object.keys(args).length > 0) { out = `${out} (${ Object.entries(args) .map(([key, val]) => { diff --git a/tools/tasks/test.ts b/tools/tasks/test.ts index b497440b44..c81b5e3d56 100644 --- a/tools/tasks/test.ts +++ b/tools/tasks/test.ts @@ -31,7 +31,8 @@ export default { --exclude typegate --exclude typegate_engine --exclude typegraph_core - --exclude metagen_fdk_rust_static`; + --exclude metagen_fdk_rust_static + --exclude client_rs_static`; // typegraph_core tests need to be run separately // without --tests, the --doc is causing a link error "syntax error in VERSION script" await $`cargo test --locked --package typegraph_core --tests`; diff --git a/tools/test.ts b/tools/test.ts index 26671a18bf..44a9c7de21 100755 --- a/tools/test.ts +++ b/tools/test.ts @@ -168,9 +168,6 @@ export async function testE2e(args: { await tmpDir.join(cache.name).remove({ recursive: true }); } - const prefix = "[dev/test.ts]"; - $.logStep(`${prefix} Testing with ${threads} threads`); - const xtask = wd.join(`target/${profile}/xtask`); const denoConfig = wd.join("tests/deno.jsonc"); @@ -210,6 +207,8 @@ export async function testE2e(args: { const buildProfile = profile == "debug" ? "dev" : profile; + const prefix = "[dev/test.ts]"; + $.logStep(`${prefix} Building xtask and meta-cli...`); await $`cargo build -p meta-cli -F typegate --profile ${buildProfile} && mv target/${profile}/meta target/${profile}/meta-full @@ -220,6 +219,9 @@ export async function testE2e(args: { $.logStep(`Discovered ${queue.length} test files to run`); const threadCount = Math.min(threads, queue.length); + if (threadCount !== 1) { + $.logStep(`${prefix} Testing with ${threadCount} threads`); + } const outputOptions: OutputOptions = { streamed: threadCount === 1,