mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 19:08:15 +00:00
dns stuff
This commit is contained in:
parent
234deac856
commit
f82270fc19
8 changed files with 459 additions and 93 deletions
262
Cargo.lock
generated
262
Cargo.lock
generated
|
@ -98,10 +98,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"getrandom",
|
||||
"getrandom 0.2.14",
|
||||
"once_cell",
|
||||
"version_check",
|
||||
"zerocopy",
|
||||
"zerocopy 0.7.32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1310,7 +1310,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"subtle",
|
||||
"zeroize",
|
||||
]
|
||||
|
@ -1322,7 +1322,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
|
@ -1531,7 +1531,7 @@ dependencies = [
|
|||
"pretty_assertions",
|
||||
"pretty_yaml",
|
||||
"quick-junit",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"regex",
|
||||
"ring",
|
||||
"runtimelib",
|
||||
|
@ -1829,7 +1829,7 @@ dependencies = [
|
|||
"p256",
|
||||
"p384",
|
||||
"p521",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"ring",
|
||||
"rsa",
|
||||
"serde",
|
||||
|
@ -1975,7 +1975,7 @@ dependencies = [
|
|||
"junction",
|
||||
"libc",
|
||||
"nix",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"rayon",
|
||||
"serde",
|
||||
"thiserror 2.0.3",
|
||||
|
@ -2048,7 +2048,7 @@ dependencies = [
|
|||
"percent-encoding",
|
||||
"phf",
|
||||
"pin-project",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"ring",
|
||||
"scopeguard",
|
||||
"serde",
|
||||
|
@ -2073,7 +2073,7 @@ dependencies = [
|
|||
"os_pipe",
|
||||
"parking_lot",
|
||||
"pin-project",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"tokio",
|
||||
"uuid",
|
||||
"winapi",
|
||||
|
@ -2104,7 +2104,7 @@ dependencies = [
|
|||
"http-body-util",
|
||||
"log",
|
||||
"num-bigint",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"rusqlite",
|
||||
"serde",
|
||||
"thiserror 2.0.3",
|
||||
|
@ -2222,6 +2222,7 @@ dependencies = [
|
|||
"deno_permissions",
|
||||
"deno_tls",
|
||||
"hickory-proto",
|
||||
"hickory-recursor",
|
||||
"hickory-resolver",
|
||||
"pin-project",
|
||||
"quinn",
|
||||
|
@ -2295,7 +2296,7 @@ dependencies = [
|
|||
"p384",
|
||||
"pbkdf2",
|
||||
"pkcs8",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"ring",
|
||||
"ripemd",
|
||||
"rsa",
|
||||
|
@ -2362,7 +2363,7 @@ dependencies = [
|
|||
"log",
|
||||
"parking_lot",
|
||||
"percent-encoding",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"ring",
|
||||
"serde_json",
|
||||
"sys_traits",
|
||||
|
@ -2477,7 +2478,7 @@ dependencies = [
|
|||
"memchr",
|
||||
"nix",
|
||||
"pin-project-lite",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
"simd-json",
|
||||
"tempfile",
|
||||
|
@ -2859,7 +2860,7 @@ dependencies = [
|
|||
"http 1.1.0",
|
||||
"log",
|
||||
"prost",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.3",
|
||||
|
@ -2884,7 +2885,7 @@ dependencies = [
|
|||
"hex",
|
||||
"log",
|
||||
"num-bigint",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"rusqlite",
|
||||
"serde_json",
|
||||
"thiserror 2.0.3",
|
||||
|
@ -3322,7 +3323,7 @@ checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871"
|
|||
dependencies = [
|
||||
"curve25519-dalek",
|
||||
"ed25519",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"serde",
|
||||
"sha2",
|
||||
"signature",
|
||||
|
@ -3352,7 +3353,7 @@ dependencies = [
|
|||
"indexmap 2.3.0",
|
||||
"log",
|
||||
"thiserror 1.0.69",
|
||||
"zerocopy",
|
||||
"zerocopy 0.7.32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -3377,7 +3378,7 @@ dependencies = [
|
|||
"hkdf",
|
||||
"pem-rfc7468",
|
||||
"pkcs8",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"sec1",
|
||||
"serde_json",
|
||||
"serdect",
|
||||
|
@ -3522,7 +3523,7 @@ dependencies = [
|
|||
"hyper 1.6.0",
|
||||
"hyper-util",
|
||||
"pin-project",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"sha1",
|
||||
"simdutf8",
|
||||
"thiserror 1.0.69",
|
||||
|
@ -3556,7 +3557,7 @@ version = "0.13.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
|
||||
dependencies = [
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"subtle",
|
||||
]
|
||||
|
||||
|
@ -3871,10 +3872,22 @@ dependencies = [
|
|||
"cfg-if",
|
||||
"js-sys",
|
||||
"libc",
|
||||
"wasi",
|
||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi 0.13.3+wasi-0.2.2",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ghash"
|
||||
version = "0.5.1"
|
||||
|
@ -4014,7 +4027,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
|
||||
dependencies = [
|
||||
"ff",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"subtle",
|
||||
]
|
||||
|
||||
|
@ -4178,7 +4191,7 @@ dependencies = [
|
|||
"hickory-proto",
|
||||
"once_cell",
|
||||
"radix_trie",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"thiserror 2.0.3",
|
||||
"tokio",
|
||||
"tracing",
|
||||
|
@ -4186,35 +4199,64 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "hickory-proto"
|
||||
version = "0.25.0-alpha.4"
|
||||
version = "0.25.0-alpha.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d063c0692ee669aa6d261988aa19ca5510f1cc40e4f211024f50c888499a35d7"
|
||||
checksum = "1d00147af6310f4392a31680db52a3ed45a2e0f68eb18e8c3fe5537ecc96d9e2"
|
||||
dependencies = [
|
||||
"async-recursion",
|
||||
"async-trait",
|
||||
"bytes",
|
||||
"cfg-if",
|
||||
"data-encoding",
|
||||
"enum-as-inner",
|
||||
"futures-channel",
|
||||
"futures-io",
|
||||
"futures-util",
|
||||
"h2 0.4.7",
|
||||
"http 1.1.0",
|
||||
"idna",
|
||||
"ipnet",
|
||||
"once_cell",
|
||||
"rand",
|
||||
"rand 0.9.0",
|
||||
"rustls",
|
||||
"serde",
|
||||
"thiserror 2.0.3",
|
||||
"tinyvec",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
"tracing",
|
||||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hickory-resolver"
|
||||
version = "0.25.0-alpha.4"
|
||||
name = "hickory-recursor"
|
||||
version = "0.25.0-alpha.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42bc352e4412fb657e795f79b4efcf2bd60b59ee5ca0187f3554194cd1107a27"
|
||||
checksum = "33e2f0404a87d5616433719d4534c9ed9f8bf97148d841d5dcd8bcc87865ebb5"
|
||||
dependencies = [
|
||||
"async-recursion",
|
||||
"async-trait",
|
||||
"bytes",
|
||||
"cfg-if",
|
||||
"enum-as-inner",
|
||||
"futures-util",
|
||||
"hickory-proto",
|
||||
"hickory-resolver",
|
||||
"ipnet",
|
||||
"lru-cache",
|
||||
"parking_lot",
|
||||
"prefix-trie",
|
||||
"serde",
|
||||
"thiserror 2.0.3",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hickory-resolver"
|
||||
version = "0.25.0-alpha.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5762f69ebdbd4ddb2e975cd24690bf21fe6b2604039189c26acddbc427f12887"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"futures-util",
|
||||
|
@ -4223,12 +4265,14 @@ dependencies = [
|
|||
"moka",
|
||||
"once_cell",
|
||||
"parking_lot",
|
||||
"rand",
|
||||
"rand 0.9.0",
|
||||
"resolv-conf",
|
||||
"rustls",
|
||||
"serde",
|
||||
"smallvec",
|
||||
"thiserror 2.0.3",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
|
@ -4760,9 +4804,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "ipnet"
|
||||
version = "2.9.0"
|
||||
version = "2.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
|
||||
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
@ -5109,7 +5153,7 @@ dependencies = [
|
|||
"libc",
|
||||
"sha2",
|
||||
"windows-sys 0.48.0",
|
||||
"zerocopy",
|
||||
"zerocopy 0.7.32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -5135,6 +5179,12 @@ dependencies = [
|
|||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linked-hash-map"
|
||||
version = "0.5.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.4.13"
|
||||
|
@ -5185,6 +5235,15 @@ dependencies = [
|
|||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lru-cache"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
|
||||
dependencies = [
|
||||
"linked-hash-map",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lsp-types"
|
||||
version = "0.97.0"
|
||||
|
@ -5363,7 +5422,7 @@ checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
|
|||
dependencies = [
|
||||
"libc",
|
||||
"log",
|
||||
"wasi",
|
||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
|
@ -5375,7 +5434,7 @@ checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
|
|||
dependencies = [
|
||||
"libc",
|
||||
"log",
|
||||
"wasi",
|
||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
|
@ -5607,7 +5666,7 @@ dependencies = [
|
|||
"autocfg",
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
]
|
||||
|
||||
|
@ -5623,7 +5682,7 @@ dependencies = [
|
|||
"num-integer",
|
||||
"num-iter",
|
||||
"num-traits",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
"smallvec",
|
||||
"zeroize",
|
||||
|
@ -5811,7 +5870,7 @@ dependencies = [
|
|||
"glob",
|
||||
"opentelemetry",
|
||||
"percent-encoding",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"serde_json",
|
||||
"thiserror 1.0.69",
|
||||
"tokio",
|
||||
|
@ -5917,7 +5976,7 @@ dependencies = [
|
|||
"ecdsa",
|
||||
"elliptic-curve",
|
||||
"primeorder",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"sha2",
|
||||
]
|
||||
|
||||
|
@ -5951,7 +6010,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
|
||||
dependencies = [
|
||||
"base64ct",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"subtle",
|
||||
]
|
||||
|
||||
|
@ -6079,7 +6138,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
|
||||
dependencies = [
|
||||
"phf_shared",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -6170,7 +6229,7 @@ checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
|
|||
dependencies = [
|
||||
"der",
|
||||
"pkcs5",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"spki",
|
||||
]
|
||||
|
||||
|
@ -6473,8 +6532,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"getrandom",
|
||||
"rand",
|
||||
"getrandom 0.2.14",
|
||||
"rand 0.8.5",
|
||||
"ring",
|
||||
"rustc-hash 2.0.0",
|
||||
"rustls",
|
||||
|
@ -6559,8 +6618,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
"rand_chacha 0.3.1",
|
||||
"rand_core 0.6.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
|
||||
dependencies = [
|
||||
"rand_chacha 0.9.0",
|
||||
"rand_core 0.9.2",
|
||||
"zerocopy 0.8.20",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -6570,7 +6640,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core 0.9.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -6579,7 +6659,17 @@ version = "0.6.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"getrandom 0.2.14",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.9.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c"
|
||||
dependencies = [
|
||||
"getrandom 0.3.1",
|
||||
"zerocopy 0.8.20",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -6629,7 +6719,7 @@ version = "0.4.5"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"getrandom 0.2.14",
|
||||
"libredox",
|
||||
"thiserror 1.0.69",
|
||||
]
|
||||
|
@ -6793,7 +6883,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
|
|||
dependencies = [
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"getrandom",
|
||||
"getrandom 0.2.14",
|
||||
"libc",
|
||||
"spin",
|
||||
"untrusted",
|
||||
|
@ -6847,7 +6937,7 @@ dependencies = [
|
|||
"num-traits",
|
||||
"pkcs1",
|
||||
"pkcs8",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"signature",
|
||||
"spki",
|
||||
"subtle",
|
||||
|
@ -6869,7 +6959,7 @@ dependencies = [
|
|||
"futures",
|
||||
"glob",
|
||||
"jupyter-serde",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"ring",
|
||||
"serde",
|
||||
"serde_json",
|
||||
|
@ -6953,9 +7043,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.23.11"
|
||||
version = "0.23.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4828ea528154ae444e5a642dbb7d5623354030dc9822b83fd9bb79683c7399d0"
|
||||
checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395"
|
||||
dependencies = [
|
||||
"log",
|
||||
"once_cell",
|
||||
|
@ -6991,9 +7081,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rustls-pki-types"
|
||||
version = "1.8.0"
|
||||
version = "1.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0"
|
||||
checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
|
||||
dependencies = [
|
||||
"web-time",
|
||||
]
|
||||
|
@ -7012,9 +7102,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rustls-webpki"
|
||||
version = "0.102.5"
|
||||
version = "0.102.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78"
|
||||
checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
|
||||
dependencies = [
|
||||
"ring",
|
||||
"rustls-pki-types",
|
||||
|
@ -7407,7 +7497,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
|
||||
dependencies = [
|
||||
"digest",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -7431,7 +7521,7 @@ version = "0.14.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "05f0b376aada35f30a0012f5790e50aed62f91804a0682669aefdbe81c7fcb91"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"getrandom 0.2.14",
|
||||
"halfbrown",
|
||||
"ref-cast",
|
||||
"serde",
|
||||
|
@ -8218,7 +8308,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "638f0e61b5134e56b2abdf4c704fd44672603f15ca09013f314649056f3fee4d"
|
||||
dependencies = [
|
||||
"filetime",
|
||||
"getrandom",
|
||||
"getrandom 0.2.14",
|
||||
"libc",
|
||||
"parking_lot",
|
||||
"serde",
|
||||
|
@ -8662,7 +8752,7 @@ dependencies = [
|
|||
"indexmap 1.9.3",
|
||||
"pin-project",
|
||||
"pin-project-lite",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"slab",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
|
@ -8821,7 +8911,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"static_assertions",
|
||||
]
|
||||
|
||||
|
@ -9020,7 +9110,7 @@ version = "1.8.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"getrandom 0.2.14",
|
||||
"serde",
|
||||
"sha1_smol",
|
||||
]
|
||||
|
@ -9150,6 +9240,15 @@ version = "0.11.0+wasi-snapshot-preview1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.13.3+wasi-0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2"
|
||||
dependencies = [
|
||||
"wit-bindgen-rt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasite"
|
||||
version = "0.1.0"
|
||||
|
@ -9738,6 +9837,15 @@ version = "0.0.19"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904"
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen-rt"
|
||||
version = "0.33.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c"
|
||||
dependencies = [
|
||||
"bitflags 2.8.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "write16"
|
||||
version = "1.0.0"
|
||||
|
@ -9772,7 +9880,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277"
|
||||
dependencies = [
|
||||
"curve25519-dalek",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
"serde",
|
||||
"zeroize",
|
||||
]
|
||||
|
@ -9858,7 +9966,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"zerocopy-derive",
|
||||
"zerocopy-derive 0.7.32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.8.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c"
|
||||
dependencies = [
|
||||
"zerocopy-derive 0.8.20",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -9872,6 +9989,17 @@ dependencies = [
|
|||
"syn 2.0.87",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy-derive"
|
||||
version = "0.8.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.87",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerofrom"
|
||||
version = "0.1.4"
|
||||
|
@ -9932,7 +10060,7 @@ dependencies = [
|
|||
"num-traits",
|
||||
"once_cell",
|
||||
"parking_lot",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
"regex",
|
||||
"thiserror 1.0.69",
|
||||
"tokio",
|
||||
|
|
|
@ -145,7 +145,8 @@ fs3 = "0.5.0"
|
|||
futures = "0.3.21"
|
||||
glob = "0.3.1"
|
||||
h2 = "0.4.6"
|
||||
hickory-resolver = { version = "0.25.0-alpha.4", features = ["tokio-runtime", "serde"] }
|
||||
hickory-resolver = { version = "0.25.0-alpha.5", features = ["tokio-runtime", "serde", "dns-over-https-rustls"] }
|
||||
hickory-recursor = { version = "0.25.0-alpha.5", features = ["serde", "dns-over-https-rustls"] }
|
||||
http = "1.0"
|
||||
http-body = "1.0"
|
||||
http-body-util = "0.1.2"
|
||||
|
@ -187,7 +188,7 @@ regex = "^1.7.0"
|
|||
reqwest = { version = "=0.12.5", default-features = false, features = ["rustls-tls", "stream", "gzip", "brotli", "socks", "json", "http2"] } # pinned because of https://github.com/seanmonstar/reqwest/pull/1955
|
||||
ring = "^0.17.0"
|
||||
rusqlite = { version = "0.32.0", features = ["unlock_notify", "bundled", "session"] }
|
||||
rustls = { version = "0.23.11", default-features = false, features = ["logging", "std", "tls12", "ring"] }
|
||||
rustls = { version = "0.23.14", default-features = false, features = ["logging", "std", "tls12", "ring"] }
|
||||
rustls-pemfile = "2"
|
||||
rustls-tokio-stream = "=0.3.0"
|
||||
rustls-webpki = "0.102"
|
||||
|
|
39
cli/tsc/dts/lib.deno.ns.d.ts
vendored
39
cli/tsc/dts/lib.deno.ns.d.ts
vendored
|
@ -4663,7 +4663,10 @@ declare namespace Deno {
|
|||
/** The name server to be used for lookups.
|
||||
*
|
||||
* If not specified, defaults to the system configuration. For example
|
||||
* `/etc/resolv.conf` on Unix-like systems. */
|
||||
* `/etc/resolv.conf` on Unix-like systems.
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
nameServer?: {
|
||||
/** The IP address of the name server. */
|
||||
ipAddr: string;
|
||||
|
@ -4672,6 +4675,15 @@ declare namespace Deno {
|
|||
* @default {53} */
|
||||
port?: number;
|
||||
};
|
||||
|
||||
/**
|
||||
* Name servers to be used for lookups.
|
||||
*
|
||||
* If not specified, defaults to the system configuration. For example
|
||||
* `/etc/resolv.conf` on Unix-like systems.
|
||||
*/
|
||||
nameServers?: Array<NameServerConfig>;
|
||||
|
||||
/**
|
||||
* An abort signal to allow cancellation of the DNS resolution operation.
|
||||
* If the signal becomes aborted the resolveDns operation will be stopped
|
||||
|
@ -4680,6 +4692,31 @@ declare namespace Deno {
|
|||
signal?: AbortSignal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Name server configuration for {@linkcode Deno.resolveDns}.
|
||||
*
|
||||
* @category Network */
|
||||
export interface NameServerConfig {
|
||||
/** The host address of the name server. */
|
||||
hostname: string;
|
||||
|
||||
/** The port number the query will be sent to.
|
||||
*
|
||||
* @default {53} */
|
||||
port?: number;
|
||||
|
||||
/**
|
||||
* @default {"udp"}
|
||||
*/
|
||||
protocol?: "udp" | "tcp" | "tls" | "https";
|
||||
|
||||
/**
|
||||
* Name to be used for PKI if using TLS.
|
||||
* Defaults to `hostname`.
|
||||
*/
|
||||
tlsDnsName?: string;
|
||||
}
|
||||
|
||||
/** If {@linkcode Deno.resolveDns} is called with `"CAA"` record type
|
||||
* specified, it will resolve with an array of objects with this interface.
|
||||
*
|
||||
|
|
|
@ -9,6 +9,7 @@ const {
|
|||
} = core;
|
||||
import {
|
||||
op_dns_resolve,
|
||||
op_dns_resolve_recursive,
|
||||
op_net_accept_tcp,
|
||||
op_net_accept_unix,
|
||||
op_net_connect_tcp,
|
||||
|
@ -73,12 +74,49 @@ async function resolveDns(query, recordType, options) {
|
|||
options.signal[abortSignal.add](abortHandler);
|
||||
}
|
||||
|
||||
let nameServers;
|
||||
if (options?.nameServer) {
|
||||
nameServers = [{
|
||||
hostname: options.nameServer.ipAddr,
|
||||
port: options.nameServer.port,
|
||||
}];
|
||||
} else if (options?.nameServers) {
|
||||
nameServers = options.nameServers;
|
||||
}
|
||||
|
||||
try {
|
||||
return await op_dns_resolve({
|
||||
cancelRid,
|
||||
query,
|
||||
recordType,
|
||||
options,
|
||||
nameServers,
|
||||
});
|
||||
} finally {
|
||||
if (options?.signal) {
|
||||
options.signal[abortSignal.remove](abortHandler);
|
||||
|
||||
// always throw the abort error when aborted
|
||||
options.signal.throwIfAborted();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function resolveDnsRecursive(query, recordType, options) {
|
||||
let cancelRid;
|
||||
let abortHandler;
|
||||
if (options?.signal) {
|
||||
options.signal.throwIfAborted();
|
||||
cancelRid = createCancelHandle();
|
||||
abortHandler = () => core.tryClose(cancelRid);
|
||||
options.signal[abortSignal.add](abortHandler);
|
||||
}
|
||||
|
||||
try {
|
||||
return await op_dns_resolve({
|
||||
cancelRid,
|
||||
query,
|
||||
recordType,
|
||||
options: { nameServers: options.nameServers },
|
||||
});
|
||||
} finally {
|
||||
if (options?.signal) {
|
||||
|
@ -613,6 +651,7 @@ export {
|
|||
Listener,
|
||||
listenOptionApiName,
|
||||
resolveDns,
|
||||
resolveDnsRecursive,
|
||||
TcpConn,
|
||||
UnixConn,
|
||||
UpgradedConn,
|
||||
|
|
|
@ -20,6 +20,7 @@ deno_permissions.workspace = true
|
|||
deno_tls.workspace = true
|
||||
hickory-proto = "0.25.0-alpha.4"
|
||||
hickory-resolver.workspace = true
|
||||
hickory-recursor.workspace = true
|
||||
pin-project.workspace = true
|
||||
quinn = { version = "0.11.6", default-features = false, features = ["runtime-tokio", "rustls", "ring"] }
|
||||
rustls-tokio-stream.workspace = true
|
||||
|
|
|
@ -136,6 +136,7 @@ deno_core::extension!(deno_net,
|
|||
ops::op_net_set_multi_loopback_udp,
|
||||
ops::op_net_set_multi_ttl_udp,
|
||||
ops::op_dns_resolve<P>,
|
||||
ops::op_dns_resolve_recursive<P>,
|
||||
ops::op_set_nodelay,
|
||||
ops::op_set_keepalive,
|
||||
|
||||
|
|
202
ext/net/ops.rs
202
ext/net/ops.rs
|
@ -7,6 +7,7 @@ use std::net::Ipv6Addr;
|
|||
use std::net::SocketAddr;
|
||||
use std::rc::Rc;
|
||||
use std::str::FromStr;
|
||||
use std::time::Instant;
|
||||
|
||||
use deno_core::op2;
|
||||
use deno_core::AsyncRefCell;
|
||||
|
@ -19,17 +20,23 @@ use deno_core::OpState;
|
|||
use deno_core::RcRef;
|
||||
use deno_core::Resource;
|
||||
use deno_core::ResourceId;
|
||||
use deno_tls::create_client_config;
|
||||
use deno_tls::SocketUse;
|
||||
use deno_tls::TlsKeys;
|
||||
use hickory_proto::op::Query;
|
||||
use hickory_proto::rr::domain::Name;
|
||||
use hickory_proto::rr::rdata::caa::Value;
|
||||
use hickory_proto::rr::record_data::RData;
|
||||
use hickory_proto::rr::record_type::RecordType;
|
||||
use hickory_proto::ProtoError;
|
||||
use hickory_proto::ProtoErrorKind;
|
||||
use hickory_resolver::config::NameServerConfigGroup;
|
||||
use hickory_resolver::config::NameServerConfig;
|
||||
use hickory_resolver::config::ResolverConfig;
|
||||
use hickory_resolver::config::ResolverOpts;
|
||||
use hickory_resolver::system_conf;
|
||||
use hickory_resolver::ResolveError;
|
||||
use hickory_resolver::ResolveErrorKind;
|
||||
use hickory_recursor::Recursor;
|
||||
use serde::Deserialize;
|
||||
use serde::Serialize;
|
||||
use socket2::Domain;
|
||||
|
@ -120,6 +127,12 @@ pub enum NetError {
|
|||
#[class(generic)]
|
||||
#[error("{0}")]
|
||||
Dns(#[from] ResolveError),
|
||||
#[class(generic)]
|
||||
#[error("{0}")]
|
||||
DnsRecursive(#[from] hickory_recursor::Error),
|
||||
#[class(generic)]
|
||||
#[error("{0}")]
|
||||
DnsProto(#[from] hickory_proto::ProtoError),
|
||||
#[class("NotSupported")]
|
||||
#[error("Provided record type is not supported")]
|
||||
UnsupportedRecordType,
|
||||
|
@ -609,25 +622,40 @@ pub struct ResolveAddrArgs {
|
|||
cancel_rid: Option<ResourceId>,
|
||||
query: String,
|
||||
record_type: RecordType,
|
||||
options: Option<ResolveDnsOption>,
|
||||
name_servers: Option<Vec<NameServer>>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct ResolveDnsOption {
|
||||
name_server: Option<NameServer>,
|
||||
pub struct RecurseAddrArgs {
|
||||
cancel_rid: Option<ResourceId>,
|
||||
query: String,
|
||||
record_type: RecordType,
|
||||
options: RecurseDnsOptions,
|
||||
}
|
||||
|
||||
fn default_port() -> u16 {
|
||||
53
|
||||
#[derive(Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct RecurseDnsOptions {
|
||||
name_servers: Vec<NameServer>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct NameServer {
|
||||
ip_addr: String,
|
||||
#[serde(default = "default_port")]
|
||||
port: u16,
|
||||
hostname: String,
|
||||
port: Option<u16>,
|
||||
protocol: Option<NameServerProtocol>,
|
||||
tls_dns_name: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum NameServerProtocol {
|
||||
Udp,
|
||||
Tcp,
|
||||
Tls,
|
||||
Https,
|
||||
}
|
||||
|
||||
#[op2(async, stack_trace)]
|
||||
|
@ -642,22 +670,55 @@ where
|
|||
let ResolveAddrArgs {
|
||||
query,
|
||||
record_type,
|
||||
options,
|
||||
cancel_rid,
|
||||
name_servers,
|
||||
} = args;
|
||||
|
||||
let (config, opts) = if let Some(name_server) =
|
||||
options.as_ref().and_then(|o| o.name_server.as_ref())
|
||||
{
|
||||
let group = NameServerConfigGroup::from_ips_clear(
|
||||
&[name_server.ip_addr.parse()?],
|
||||
name_server.port,
|
||||
true,
|
||||
);
|
||||
(
|
||||
ResolverConfig::from_parts(None, vec![], group),
|
||||
ResolverOpts::default(),
|
||||
)
|
||||
let (config, opts) = if let Some(name_servers) = name_servers {
|
||||
let mut config = ResolverConfig::new();
|
||||
for ns in name_servers {
|
||||
let (protocol, default_port) = match ns.protocol {
|
||||
Some(NameServerProtocol::Udp) | None => {
|
||||
(hickory_proto::xfer::Protocol::Udp, 53)
|
||||
}
|
||||
Some(NameServerProtocol::Tcp) => {
|
||||
(hickory_proto::xfer::Protocol::Tcp, 53)
|
||||
}
|
||||
Some(NameServerProtocol::Tls) => {
|
||||
(hickory_proto::xfer::Protocol::Tls, 853)
|
||||
}
|
||||
Some(NameServerProtocol::Https) => {
|
||||
(hickory_proto::xfer::Protocol::Https, 443)
|
||||
}
|
||||
};
|
||||
|
||||
let socket_addr =
|
||||
resolve_addr(&ns.hostname, ns.port.unwrap_or(default_port))
|
||||
.await?
|
||||
.next()
|
||||
.ok_or(NetError::NoResolvedAddress)?;
|
||||
|
||||
config.add_name_server(NameServerConfig {
|
||||
socket_addr,
|
||||
protocol,
|
||||
http_endpoint: None,
|
||||
tls_dns_name: Some(ns.tls_dns_name.unwrap_or(ns.hostname)),
|
||||
trust_negative_responses: true,
|
||||
bind_addr: None,
|
||||
});
|
||||
}
|
||||
|
||||
let mut opts = ResolverOpts::default();
|
||||
|
||||
opts.tls_config = create_client_config(
|
||||
None,
|
||||
vec![],
|
||||
None,
|
||||
TlsKeys::Null,
|
||||
SocketUse::GeneralSsl,
|
||||
)?;
|
||||
|
||||
(config, opts)
|
||||
} else {
|
||||
system_conf::read_system_conf()?
|
||||
};
|
||||
|
@ -725,6 +786,103 @@ where
|
|||
.collect::<Result<Vec<DnsReturnRecord>, NetError>>()
|
||||
}
|
||||
|
||||
#[op2(async, stack_trace)]
|
||||
#[serde]
|
||||
pub async fn op_dns_resolve_recursive<NP>(
|
||||
state: Rc<RefCell<OpState>>,
|
||||
#[serde] args: RecurseAddrArgs,
|
||||
) -> Result<Vec<DnsReturnRecord>, NetError>
|
||||
where
|
||||
NP: NetPermissions + 'static,
|
||||
{
|
||||
let RecurseAddrArgs {
|
||||
query,
|
||||
record_type,
|
||||
options,
|
||||
cancel_rid,
|
||||
} = args;
|
||||
|
||||
let mut roots: Vec<NameServerConfig> = vec![];
|
||||
|
||||
for ns in options.name_servers {
|
||||
let (protocol, default_port) = match ns.protocol {
|
||||
Some(NameServerProtocol::Udp) | None => {
|
||||
(hickory_proto::xfer::Protocol::Udp, 53)
|
||||
}
|
||||
Some(NameServerProtocol::Tcp) => {
|
||||
(hickory_proto::xfer::Protocol::Tcp, 53)
|
||||
}
|
||||
Some(NameServerProtocol::Tls) => {
|
||||
(hickory_proto::xfer::Protocol::Tls, 853)
|
||||
}
|
||||
Some(NameServerProtocol::Https) => {
|
||||
(hickory_proto::xfer::Protocol::Https, 443)
|
||||
}
|
||||
};
|
||||
|
||||
let socket_addr =
|
||||
resolve_addr(&ns.hostname, ns.port.unwrap_or(default_port))
|
||||
.await?
|
||||
.next()
|
||||
.ok_or(NetError::NoResolvedAddress)?;
|
||||
|
||||
roots.push(NameServerConfig {
|
||||
socket_addr,
|
||||
protocol,
|
||||
http_endpoint: None,
|
||||
tls_dns_name: None,
|
||||
trust_negative_responses: true,
|
||||
bind_addr: None,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
let mut s = state.borrow_mut();
|
||||
let perm = s.borrow_mut::<NP>();
|
||||
|
||||
// Checks permission against the name servers which will be actually queried.
|
||||
for ns in &roots {
|
||||
let socker_addr = &ns.socket_addr;
|
||||
let ip = socker_addr.ip().to_string();
|
||||
let port = socker_addr.port();
|
||||
perm.check_net(&(ip, Some(port)), "Deno.resolveDns()")?;
|
||||
}
|
||||
}
|
||||
|
||||
let recursor = Recursor::builder().build(roots)?;
|
||||
|
||||
let query = Query::query(Name::from_str(&query)?, record_type);
|
||||
let lookup_fut = recursor.resolve(query, Instant::now(), false);
|
||||
|
||||
let cancel_handle = cancel_rid.and_then(|rid| {
|
||||
state
|
||||
.borrow_mut()
|
||||
.resource_table
|
||||
.get::<CancelHandle>(rid)
|
||||
.ok()
|
||||
});
|
||||
|
||||
let lookup = if let Some(cancel_handle) = cancel_handle {
|
||||
let lookup_rv = lookup_fut.or_cancel(cancel_handle).await;
|
||||
|
||||
if let Some(cancel_rid) = cancel_rid {
|
||||
if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
|
||||
res.close();
|
||||
}
|
||||
};
|
||||
|
||||
lookup_rv?
|
||||
} else {
|
||||
lookup_fut.await
|
||||
};
|
||||
|
||||
lookup?
|
||||
.iter()
|
||||
.filter_map(|rdata| rdata_to_return_record(record_type)(rdata).transpose())
|
||||
.collect::<Result<Vec<DnsReturnRecord>, NetError>>()
|
||||
}
|
||||
|
||||
#[op2(fast)]
|
||||
pub fn op_set_nodelay(
|
||||
state: &mut OpState,
|
||||
|
|
|
@ -121,6 +121,7 @@ const denoNs = {
|
|||
serveHttp: http.serveHttp,
|
||||
serve: serve.serve,
|
||||
resolveDns: net.resolveDns,
|
||||
resolveDnsRecursive: net.resolveDnsRecursive,
|
||||
upgradeWebSocket: websocket.upgradeWebSocket,
|
||||
utime: fs.utime,
|
||||
utimeSync: fs.utimeSync,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue