diff --git a/Cargo.lock b/Cargo.lock index 5b5a862..cf5dd38 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,7 +119,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -165,12 +165,6 @@ dependencies = [ "scoped-tls", ] -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.9.0" @@ -317,22 +311,6 @@ dependencies = [ "wasm-bindgen", ] -[[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 = "cpufeatures" version = "0.2.17" @@ -463,7 +441,7 @@ dependencies = [ "deno_error 0.6.1", "deno_media_type", "deno_path_util", - "http 1.3.1", + "http", "indexmap", "log", "once_cell", @@ -612,6 +590,7 @@ dependencies = [ "async-trait", "base64 0.13.1", "deno_ast", + "deno_cache_dir", "deno_config", "deno_error 0.6.1", "deno_graph", @@ -626,7 +605,6 @@ dependencies = [ "pathdiff", "pretty_assertions", "regex", - "reqwest", "serde", "serde_json", "sys_traits", @@ -741,7 +719,7 @@ dependencies = [ "deno_unsync", "dissimilar", "futures", - "http 1.3.1", + "http", "import_map", "indexmap", "jsonc-parser", @@ -851,16 +829,20 @@ name = "dnt-wasm" version = "0.0.0" dependencies = [ "anyhow", + "async-trait", "console_error_panic_hook", + "deno_cache_dir", "deno_config", "deno_error 0.6.1", + "deno_graph", "deno_node_transform", "deno_path_util", - "getrandom 0.2.16", + "getrandom", "js-sys", "serde", "serde-wasm-bindgen", "sys_traits", + "url", "wasm-bindgen", "wasm-bindgen-futures", ] @@ -912,43 +894,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" -[[package]] -name = "errno" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - [[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" @@ -1089,22 +1040,10 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] -[[package]] -name = "getrandom" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", -] - [[package]] name = "gimli" version = "0.31.1" @@ -1130,25 +1069,6 @@ dependencies = [ "regex-syntax", ] -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hashbrown" version = "0.14.5" @@ -1202,17 +1122,6 @@ dependencies = [ "triomphe", ] -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.3.1" @@ -1224,66 +1133,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http 0.2.12", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - [[package]] name = "icu_collections" version = "1.5.0" @@ -1473,12 +1322,6 @@ dependencies = [ "serde", ] -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - [[package]] name = "ipnetwork" version = "0.20.0" @@ -1570,12 +1413,6 @@ version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - [[package]] name = "litemap" version = "0.7.5" @@ -1604,12 +1441,6 @@ 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 = "miniz_oxide" version = "0.8.8" @@ -1626,7 +1457,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "windows-sys 0.52.0", ] @@ -1636,23 +1467,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b52c1b33ff98142aecea13138bd399b68aa7ab5d9546c300988c345004001eea" -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "new_debug_unreachable" version = "1.0.6" @@ -1665,7 +1479,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.9.0", + "bitflags", "cfg-if", "libc", ] @@ -1753,50 +1567,6 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -[[package]] -name = "openssl" -version = "0.10.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" -dependencies = [ - "bitflags 2.9.0", - "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.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.108" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "outref" version = "0.5.2" @@ -1842,7 +1612,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -1917,12 +1687,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - [[package]] name = "pretty_assertions" version = "1.4.1" @@ -1980,12 +1744,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "r-efi" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" - [[package]] name = "radium" version = "0.7.0" @@ -2013,7 +1771,7 @@ version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "bitflags 2.9.0", + "bitflags", ] [[package]] @@ -2045,61 +1803,6 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http 0.2.12", - "http-body", - "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "system-configuration", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -2112,50 +1815,6 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -[[package]] -name = "rustix" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" -dependencies = [ - "bitflags 2.9.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustversion" version = "1.0.21" @@ -2183,15 +1842,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "scoped-tls" version = "1.0.1" @@ -2204,39 +1854,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.9.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "serde" version = "1.0.219" @@ -2290,18 +1907,6 @@ dependencies = [ "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 = "sha2" version = "0.10.9" @@ -2497,7 +2102,7 @@ version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0613d84468a6bb6d45d13c5a3368b37bd21f3067a089f69adac630dcb462a018" dependencies = [ - "bitflags 2.9.0", + "bitflags", "is-macro", "num-bigint", "once_cell", @@ -2554,7 +2159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d11c8e71901401b9aae2ece4946eeb7674b14b8301a53768afbbeeb0e48b599" dependencies = [ "arrayvec", - "bitflags 2.9.0", + "bitflags", "either", "new_debug_unreachable", "num-bigint", @@ -2594,7 +2199,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "250786944fbc05f6484eda9213df129ccfe17226ae9ad51b62fce2f72135dbee" dependencies = [ "arrayvec", - "bitflags 2.9.0", + "bitflags", "either", "new_debug_unreachable", "num-bigint", @@ -2620,7 +2225,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6856da3da598f4da001b7e4ce225ee8970bc9d5cbaafcaf580190cf0a6031ec5" dependencies = [ "better_scoped_tls", - "bitflags 2.9.0", + "bitflags", "indexmap", "once_cell", "par-core", @@ -2740,12 +2345,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "synstructure" version = "0.13.2" @@ -2763,7 +2362,7 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f74a2c95f72e36fa6bd04a40d15623a9904bab1cc2fa6c6135b09d774a65088" dependencies = [ - "getrandom 0.2.16", + "getrandom", "js-sys", "junction", "libc", @@ -2784,46 +2383,12 @@ dependencies = [ "syn", ] -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "tap" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "tempfile" -version = "3.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" -dependencies = [ - "fastrand", - "getrandom 0.3.2", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - [[package]] name = "termcolor" version = "1.4.1" @@ -2901,35 +2466,6 @@ dependencies = [ "syn", ] -[[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-util" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" -dependencies = [ - "bytes", - "futures-core", - "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.41" @@ -2971,12 +2507,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - [[package]] name = "twox-hash" version = "2.1.0" @@ -3025,12 +2555,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" -[[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.4" @@ -3061,12 +2585,6 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" @@ -3089,30 +2607,12 @@ dependencies = [ "winapi-util", ] -[[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 = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] - [[package]] name = "wasm-bindgen" version = "0.2.100" @@ -3243,22 +2743,13 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -3267,22 +2758,7 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -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]] @@ -3291,46 +2767,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" @@ -3343,73 +2801,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.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.0", -] - [[package]] name = "write16" version = "1.0.0" diff --git a/Cargo.toml b/Cargo.toml index 83fe099..86bdedc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,8 +13,10 @@ members = [ [workspace.dependencies] async-trait = "0.1.88" +deno_cache_dir = "0.23.0" deno_config = "0.61.0" deno_error = { version = "0.6.1", features = ["serde", "serde_json", "url"] } +deno_graph = { version = "0.96.2", features = ["swc"], default-features = false } deno_path_util = "0.4.0" deno_resolver = { version = "0.42.0", features = ["graph"] } serde_json = { version = "1.0.140", features = ["preserve_order"] } diff --git a/deno.jsonc b/deno.jsonc index 8580648..2d1fed1 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -53,13 +53,12 @@ "tests/web_socket_project/npm" ], "imports": { - "@deno/cache-dir": "jsr:@deno/cache-dir@^0.20", "@std/assert": "jsr:@std/assert@1", "@std/fmt": "jsr:@std/fmt@1", "@std/fs": "jsr:@std/fs@1", "@std/path": "jsr:@std/path@1", - "@ts-morph/bootstrap": "jsr:@ts-morph/bootstrap@^0.25.0", - "code-block-writer": "jsr:@david/code-block-writer@^13.0.2" + "@ts-morph/bootstrap": "jsr:@ts-morph/bootstrap@^0.27.0", + "code-block-writer": "jsr:@david/code-block-writer@^13.0.3" }, "exports": { ".": "./mod.ts", diff --git a/deno.lock b/deno.lock index fae0b21..ecf57bf 100644 --- a/deno.lock +++ b/deno.lock @@ -1,29 +1,22 @@ { "version": "5", "specifiers": { - "jsr:@david/code-block-writer@^13.0.2": "13.0.3", - "jsr:@deno/cache-dir@0.17": "0.17.0", - "jsr:@deno/cache-dir@0.20": "0.20.0", - "jsr:@deno/graph@0.86": "0.86.9", + "jsr:@david/code-block-writer@^13.0.3": "13.0.3", "jsr:@std/assert@0.221": "0.221.0", "jsr:@std/assert@1": "1.0.13", "jsr:@std/bytes@^1.0.4": "1.0.4", - "jsr:@std/bytes@^1.0.5": "1.0.5", "jsr:@std/csv@*": "1.0.6", "jsr:@std/fmt@0.221": "0.221.0", - "jsr:@std/fmt@1": "1.0.7", - "jsr:@std/fmt@^1.0.3": "1.0.7", - "jsr:@std/fs@1": "1.0.17", - "jsr:@std/fs@^1.0.6": "1.0.17", + "jsr:@std/fmt@1": "1.0.8", + "jsr:@std/fs@1": "1.0.19", "jsr:@std/internal@^1.0.1": "1.0.1", - "jsr:@std/internal@^1.0.6": "1.0.6", - "jsr:@std/io@0.225": "0.225.2", - "jsr:@std/path@1": "1.0.9", + "jsr:@std/internal@^1.0.6": "1.0.9", + "jsr:@std/internal@^1.0.9": "1.0.9", + "jsr:@std/path@1": "1.0.2", "jsr:@std/path@^1.0.2": "1.0.2", - "jsr:@std/path@^1.0.8": "1.0.9", - "jsr:@std/path@^1.0.9": "1.0.9", - "jsr:@ts-morph/bootstrap@0.25": "0.25.0", - "jsr:@ts-morph/common@0.25": "0.25.0", + "jsr:@std/path@^1.1.1": "1.1.1", + "jsr:@ts-morph/bootstrap@0.27": "0.27.0", + "jsr:@ts-morph/common@0.27": "0.27.0", "npm:@types/node@*": "18.16.19", "npm:using-statement@0.4": "0.4.2" }, @@ -34,29 +27,6 @@ "@david/code-block-writer@13.0.3": { "integrity": "f98c77d320f5957899a61bfb7a9bead7c6d83ad1515daee92dbacc861e13bb7f" }, - "@deno/cache-dir@0.17.0": { - "integrity": "c3fca070e1727a30a67352fdbb994fc8125c19c536a536cee8aba741e91eb1de", - "dependencies": [ - "jsr:@deno/graph", - "jsr:@std/fmt@^1.0.3", - "jsr:@std/fs@^1.0.6", - "jsr:@std/io", - "jsr:@std/path@^1.0.8" - ] - }, - "@deno/cache-dir@0.20.0": { - "integrity": "840a78d4294102ac9ba6be70e8c1bf2983d18de4ef022f2c1bb8f8aaaffada48", - "dependencies": [ - "jsr:@deno/graph", - "jsr:@std/fmt@^1.0.3", - "jsr:@std/fs@^1.0.6", - "jsr:@std/io", - "jsr:@std/path@^1.0.8" - ] - }, - "@deno/graph@0.86.9": { - "integrity": "c4f353a695bcc5246c099602977dabc6534eacea9999a35a8cb24e807192e6a1" - }, "@std/assert@0.221.0": { "integrity": "a5f1aa6e7909dbea271754fd4ab3f4e687aeff4873b4cef9a320af813adb489a", "dependencies": [ @@ -78,9 +48,6 @@ "@std/bytes@1.0.4": { "integrity": "11a0debe522707c95c7b7ef89b478c13fb1583a7cfb9a85674cd2cc2e3a28abc" }, - "@std/bytes@1.0.5": { - "integrity": "4465dd739d7963d964c809202ebea6d5c6b8e3829ef25c6a224290fbb8a1021e" - }, "@std/csv@1.0.1": { "integrity": "0704026df4361efa0fa7a278eb01cbc99f395fd0ac48f8df668fdc59cbd9f908" }, @@ -96,8 +63,8 @@ "@std/fmt@1.0.4": { "integrity": "e14fe5bedee26f80877e6705a97a79c7eed599e81bb1669127ef9e8bc1e29a74" }, - "@std/fmt@1.0.7": { - "integrity": "2a727c043d8df62cd0b819b3fb709b64dd622e42c3b1bb817ea7e6cc606360fb" + "@std/fmt@1.0.8": { + "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" }, "@std/fs@1.0.1": { "integrity": "d6914ca2c21abe591f733b31dbe6331e446815e513e2451b3b9e472daddfefcb", @@ -108,10 +75,11 @@ "@std/fs@1.0.10": { "integrity": "bf041f9d7a0a460817f0421be8946d0e06011b3433e6c83a215628de5e3c7c2c" }, - "@std/fs@1.0.17": { - "integrity": "1c00c632677c1158988ef7a004cb16137f870aafdb8163b9dce86ec652f3952b", + "@std/fs@1.0.19": { + "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06", "dependencies": [ - "jsr:@std/path@^1.0.9" + "jsr:@std/internal@^1.0.9", + "jsr:@std/path@^1.1.1" ] }, "@std/internal@1.0.1": { @@ -120,16 +88,13 @@ "@std/internal@1.0.6": { "integrity": "9533b128f230f73bd209408bb07a4b12f8d4255ab2a4d22a1fd6d87304aca9a4" }, + "@std/internal@1.0.9": { + "integrity": "bdfb97f83e4db7a13e8faab26fb1958d1b80cc64366501af78a0aee151696eb8" + }, "@std/io@0.225.1": { "integrity": "0a055fa523288d596f09ba11af5e006f17cecc75bab949b233ceba7eba40293e", "dependencies": [ - "jsr:@std/bytes@^1.0.4" - ] - }, - "@std/io@0.225.2": { - "integrity": "3c740cd4ee4c082e6cfc86458f47e2ab7cb353dc6234d5e9b1f91a2de5f4d6c7", - "dependencies": [ - "jsr:@std/bytes@^1.0.5" + "jsr:@std/bytes" ] }, "@std/path@1.0.2": { @@ -138,19 +103,22 @@ "@std/path@1.0.8": { "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" }, - "@std/path@1.0.9": { - "integrity": "260a49f11edd3db93dd38350bf9cd1b4d1366afa98e81b86167b4e3dd750129e" + "@std/path@1.1.1": { + "integrity": "fe00026bd3a7e6a27f73709b83c607798be40e20c81dde655ce34052fd82ec76", + "dependencies": [ + "jsr:@std/internal@^1.0.9" + ] }, - "@ts-morph/bootstrap@0.25.0": { - "integrity": "3cd33ee80ac0aab8e5d2660c639a02187f0c8abfe454636ce86c00eb7e8407db", + "@ts-morph/bootstrap@0.27.0": { + "integrity": "b8d7bc8f7942ce853dde4161b28f9aa96769cef3d8eebafb379a81800b9e2448", "dependencies": [ "jsr:@ts-morph/common" ] }, - "@ts-morph/common@0.25.0": { - "integrity": "e3ed1771e2fb61fbc3d2cb39ebbc4f89cd686d6d9bc6d91a71372be055ac1967", + "@ts-morph/common@0.27.0": { + "integrity": "c7b73592d78ce8479b356fd4f3d6ec3c460d77753a8680ff196effea7a939052", "dependencies": [ - "jsr:@std/fs@1", + "jsr:@std/fs", "jsr:@std/path@1" ] } @@ -186,13 +154,12 @@ }, "workspace": { "dependencies": [ - "jsr:@david/code-block-writer@^13.0.2", - "jsr:@deno/cache-dir@0.20", + "jsr:@david/code-block-writer@^13.0.3", "jsr:@std/assert@1", "jsr:@std/fmt@1", "jsr:@std/fs@1", "jsr:@std/path@1", - "jsr:@ts-morph/bootstrap@0.25" + "jsr:@ts-morph/bootstrap@0.27" ] } } diff --git a/mod.ts b/mod.ts index f0ff819..29fc8e0 100644 --- a/mod.ts +++ b/mod.ts @@ -332,7 +332,9 @@ export async function build(options: BuildOptions): Promise { outputFile.filePath, ); const outputFileText = binaryEntryPointPaths.has(outputFile.filePath) - ? `#!/usr/bin/env node\n${outputFile.fileText}` + ? `#!/usr/bin/env node\n${ + outputFile.fileText.replace(/^#![^\n\r]*\r?\n?/, "") + }` : outputFile.fileText; const sourceFile = project.createSourceFile( outputFilePath, diff --git a/rs-lib/Cargo.toml b/rs-lib/Cargo.toml index ecd5754..c89a398 100644 --- a/rs-lib/Cargo.toml +++ b/rs-lib/Cargo.toml @@ -8,8 +8,7 @@ repository = "https://github.com/denoland/dnt" description = "Deno to Node/canonical TypeScript transform." [features] -default = ["tokio-loader", "serialization"] -tokio-loader = ["tokio", "reqwest"] +default = ["serialization"] serialization = ["serde"] [dependencies] @@ -17,9 +16,10 @@ anyhow = "1.0.70" async-trait.workspace = true base64 = "0.13.1" deno_ast = { version = "0.48.1", features = ["transforms", "view", "visit", "utils"] } +deno_cache_dir.workspace = true deno_config.workspace = true deno_error.workspace = true -deno_graph = { version = "0.96.2", features = ["swc"], default-features = false } +deno_graph.workspace = true deno_path_util.workspace = true deno_resolver.workspace = true deno_semver = "0.7.1" @@ -30,13 +30,12 @@ jsonc-parser = { version = "0.26.2", features = ["serde"] } once_cell = "1.17.1" pathdiff = "0.2.1" regex = "1.7" -reqwest = { version = "0.11", features = ["rustls"], optional = true } serde = { version = "1.0.159", features = ["derive"], optional = true } serde_json.workspace = true sys_traits.workspace = true -tokio = { version = "1", features = ["full"], optional = true } url.workspace = true [dev-dependencies] pretty_assertions = "1.3.0" sys_traits = { workspace = true, features = ["memory"] } +tokio = { version = "1", features = ["full"] } diff --git a/rs-lib/src/graph.rs b/rs-lib/src/graph.rs index ff165f4..d0cab45 100644 --- a/rs-lib/src/graph.rs +++ b/rs-lib/src/graph.rs @@ -6,7 +6,6 @@ use std::fmt::Write; use std::rc::Rc; use crate::loader::get_all_specifier_mappers; -use crate::loader::Loader; use crate::loader::SourceLoader; use crate::parser::ScopeAnalysisParser; use crate::specifiers::get_specifiers; @@ -35,7 +34,7 @@ use sys_traits::impls::RealSys; pub struct ModuleGraphOptions<'a, TSys: WorkspaceFactorySys> { pub entry_points: Vec, pub test_entry_points: Vec, - pub loader: Rc, + pub loader: Rc, pub resolver: DefaultDenoResolverRc, pub specifier_mappings: &'a HashMap, pub compiler_options_resolver: Rc, diff --git a/rs-lib/src/lib.rs b/rs-lib/src/lib.rs index 962a1dd..e09ab89 100644 --- a/rs-lib/src/lib.rs +++ b/rs-lib/src/lib.rs @@ -19,6 +19,7 @@ use analyze::get_ignore_line_indexes; use anyhow::bail; use deno_ast::apply_text_changes; use deno_ast::TextChange; +use deno_cache_dir::file_fetcher::NullBlobStore; use deno_graph::Module; use deno_resolver::deno_json::CompilerOptionsOverrides; use deno_resolver::factory::ConfigDiscoveryOption; @@ -26,6 +27,10 @@ use deno_resolver::factory::ResolverFactoryOptions; use deno_resolver::factory::SpecifiedImportMapProvider; use deno_resolver::factory::WorkspaceFactoryOptions; use deno_resolver::factory::WorkspaceFactorySys; +use deno_resolver::file_fetcher::DenoGraphLoader; +use deno_resolver::file_fetcher::DenoGraphLoaderOptions; +use deno_resolver::file_fetcher::PermissionedFileFetcher; +use deno_resolver::file_fetcher::PermissionedFileFetcherOptions; use deno_resolver::workspace::SpecifiedImportMap; use deno_resolver::NodeResolverOptions; use deno_semver::npm::NpmPackageReqReference; @@ -53,8 +58,6 @@ pub use deno_ast::ModuleSpecifier; pub use deno_graph::source::CacheSetting; pub use deno_graph::source::LoadError; pub use deno_graph::source::LoaderChecksum; -pub use loader::LoadResponse; -pub use loader::Loader; use crate::declaration_file_resolution::TypesDependency; use crate::utils::strip_bom; @@ -248,7 +251,6 @@ pub struct TransformOptions { pub test_entry_points: Vec, pub shims: Vec, pub test_shims: Vec, - pub loader: Option>, /// Maps specifiers to an npm package or module. pub specifier_mappings: HashMap, /// Version of ECMAScript that the final code will target. @@ -260,23 +262,13 @@ pub struct TransformOptions { } #[derive(Debug)] -struct ImportMapProvider { - url: ModuleSpecifier, - loader: Rc, -} +struct ImportMapProvider(deno_cache_dir::file_fetcher::File); #[async_trait::async_trait(?Send)] impl SpecifiedImportMapProvider for ImportMapProvider { async fn get(&self) -> Result, anyhow::Error> { - let Some(response) = self - .loader - .load(self.url.clone(), CacheSetting::Use, None) - .await? - else { - return Ok(None); - }; let Some(value) = jsonc_parser::parse_to_serde_value( - &String::from_utf8(response.content)?, + &String::from_utf8_lossy(&self.0.source), &jsonc_parser::ParseOptions { allow_comments: true, allow_loose_object_property_names: true, @@ -287,7 +279,7 @@ impl SpecifiedImportMapProvider for ImportMapProvider { return Ok(None); }; Ok(Some(SpecifiedImportMap { - base_url: response.specifier, + base_url: self.0.url.clone(), value, })) } @@ -305,6 +297,7 @@ struct EnvironmentContext<'a> { pub async fn transform( sys: impl WorkspaceFactorySys, + http_client: impl deno_cache_dir::file_fetcher::HttpClient + Clone + 'static, options: TransformOptions, ) -> Result { if options.entry_points.is_empty() { @@ -354,13 +347,21 @@ pub async fn transform( no_lock: false, }, ); + let file_fetcher = PermissionedFileFetcher::new( + NullBlobStore, + Rc::new(factory.http_cache()?.clone()), + http_client, + factory.sys().clone(), + PermissionedFileFetcherOptions { + allow_remote: true, + cache_setting: deno_cache_dir::file_fetcher::CacheSetting::Use, + }, + ); + let maybe_import_map_file = match options.import_map { + Some(url) => Some(file_fetcher.fetch_bypass_permissions(&url).await?), + None => None, + }; - let loader = options.loader.unwrap_or_else(|| { - #[cfg(feature = "tokio-loader")] - return Rc::new(crate::loader::DefaultLoader::new()); - #[cfg(not(feature = "tokio-loader"))] - panic!("You must provide a loader or use the 'tokio-loader' feature.") - }); let resolver_factory = deno_resolver::factory::ResolverFactory::new( Rc::new(factory), ResolverFactoryOptions { @@ -382,11 +383,8 @@ pub async fn transform( package_json_dep_resolution: Some( deno_resolver::workspace::PackageJsonDepResolution::Enabled, ), - specified_import_map: options.import_map.map(|url| { - Box::new(ImportMapProvider { - url, - loader: loader.clone(), - }) as Box + specified_import_map: maybe_import_map_file.map(|file| { + Box::new(ImportMapProvider(file)) as Box }), bare_node_builtins: true, unstable_sloppy_imports: true, @@ -403,6 +401,20 @@ pub async fn transform( let deno_resolver = resolver_factory.deno_resolver().await?; let cjs_tracker = resolver_factory.cjs_tracker()?.clone(); + let loader = Rc::new(DenoGraphLoader::new( + Rc::new(file_fetcher), + resolver_factory + .workspace_factory() + .global_http_cache()? + .clone(), + resolver_factory.in_npm_package_checker()?.clone(), + resolver_factory.workspace_factory().sys().clone(), + DenoGraphLoaderOptions { + file_header_overrides: Default::default(), + permissions: None, + }, + )); + let (module_graph, specifiers) = crate::graph::ModuleGraph::build_with_specifiers(ModuleGraphOptions { entry_points: options diff --git a/rs-lib/src/loader/default_loader.rs b/rs-lib/src/loader/default_loader.rs deleted file mode 100644 index c5a92d7..0000000 --- a/rs-lib/src/loader/default_loader.rs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2018-2024 the Deno authors. MIT license. - -use std::io::ErrorKind; -use std::pin::Pin; -use std::sync::Arc; - -use anyhow::Result; -use deno_ast::ModuleSpecifier; -use deno_error::JsErrorBox; -use deno_graph::source::CacheSetting; -use deno_graph::source::LoadError; -use deno_graph::source::LoaderChecksum; -use deno_path_util::url_to_file_path; -use futures::Future; - -use crate::LoadResponse; -use crate::Loader; - -#[derive(Debug)] -pub struct DefaultLoader {} - -impl DefaultLoader { - pub fn new() -> Self { - Self {} - } -} - -impl Loader for DefaultLoader { - fn load( - &self, - specifier: ModuleSpecifier, - _cache_setting: CacheSetting, - maybe_checksum: Option, - ) -> Pin< - Box, LoadError>> + 'static>, - > { - Box::pin(async move { - if specifier.scheme() == "file" { - let file_path = url_to_file_path(&specifier).map_err(|err| { - LoadError::Other(Arc::new(JsErrorBox::from_err(err))) - })?; - return match std::fs::read(file_path) { - Ok(bytes) => { - if let Some(checksum) = maybe_checksum { - checksum.check_source(&bytes)?; - } - Ok(Some(LoadResponse { - specifier, - content: bytes, - headers: None, - })) - } - Err(err) => { - if err.kind() == ErrorKind::NotFound { - Ok(None) - } else { - Err(LoadError::Other(Arc::new(JsErrorBox::from_err(err)))) - } - } - }; - } - - let response = reqwest::get(specifier.clone()).await.map_err(|err| { - LoadError::Other(Arc::new(JsErrorBox::generic(err.to_string()))) - })?; - let headers = response - .headers() - .into_iter() - .filter_map(|(key, value)| match value.to_str() { - Ok(value) => Some((key.to_string(), value.to_string())), - Err(_) => None, - }) - .collect(); - let final_url = response.url().to_owned(); - let bytes = response.bytes().await.map_err(|err| { - LoadError::Other(Arc::new(JsErrorBox::generic(err.to_string()))) - })?; - - if let Some(checksum) = maybe_checksum { - checksum.check_source(&bytes)?; - } - - Ok(Some(LoadResponse { - specifier: final_url, - content: bytes.into(), - headers: Some(headers), - })) - }) - } -} diff --git a/rs-lib/src/loader/mod.rs b/rs-lib/src/loader/mod.rs index eb54aaf..80debd3 100644 --- a/rs-lib/src/loader/mod.rs +++ b/rs-lib/src/loader/mod.rs @@ -3,50 +3,18 @@ use std::cell::RefCell; use std::collections::BTreeMap; use std::collections::HashMap; -use std::pin::Pin; use std::rc::Rc; -use std::sync::Arc; -use anyhow::Result; use deno_ast::ModuleSpecifier; -use deno_error::JsErrorBox; -use deno_graph::source::CacheSetting; -use deno_graph::source::LoadError; -use deno_graph::source::LoaderChecksum; use futures::future; -use futures::Future; -#[cfg(feature = "tokio-loader")] -mod default_loader; mod specifier_mappers; -#[cfg(feature = "tokio-loader")] -pub use default_loader::*; pub use specifier_mappers::*; use crate::MappedSpecifier; use crate::PackageMappedSpecifier; -#[cfg_attr(feature = "serialization", derive(serde::Deserialize))] -#[cfg_attr(feature = "serialization", serde(rename_all = "camelCase"))] -pub struct LoadResponse { - /// The resolved specifier after re-directs. - pub specifier: ModuleSpecifier, - pub headers: Option>, - pub content: Vec, -} - -pub trait Loader: std::fmt::Debug { - fn load( - &self, - url: ModuleSpecifier, - cache_setting: CacheSetting, - maybe_checksum: Option, - ) -> Pin< - Box, LoadError>> + 'static>, - >; -} - #[derive(Debug, Default, Clone)] pub struct LoaderSpecifiers { pub mapped_packages: BTreeMap, @@ -54,7 +22,7 @@ pub struct LoaderSpecifiers { } pub struct SourceLoader<'a> { - loader: Rc, + loader: Rc, specifiers: RefCell, specifier_mappers: Vec>, specifier_mappings: &'a HashMap, @@ -62,7 +30,7 @@ pub struct SourceLoader<'a> { impl<'a> SourceLoader<'a> { pub fn new( - loader: Rc, + loader: Rc, specifier_mappers: Vec>, specifier_mappings: &'a HashMap, ) -> Self { @@ -128,27 +96,7 @@ impl deno_graph::source::Loader for SourceLoader<'_> { specifier, })); } - let resp = loader - .load( - specifier.clone(), - load_options.cache_setting, - load_options.maybe_checksum, - ) - .await; - resp - .map(|r| { - r.map(|r| deno_graph::source::LoadResponse::Module { - specifier: r.specifier, - content: r.content.into(), - maybe_headers: r.headers, - mtime: None, - }) - }) - .map_err(|err| { - deno_graph::source::LoadError::Other(Arc::new(JsErrorBox::from_err( - err, - ))) - }) + loader.load(&specifier, load_options).await }) } } diff --git a/rs-lib/tests/integration/in_memory_loader.rs b/rs-lib/tests/integration/in_memory_loader.rs index 3b36818..5e52d27 100644 --- a/rs-lib/tests/integration/in_memory_loader.rs +++ b/rs-lib/tests/integration/in_memory_loader.rs @@ -1,27 +1,19 @@ // Copyright 2018-2024 the Deno authors. MIT license. use std::collections::HashMap; -use std::io::ErrorKind; use std::path::PathBuf; -use std::pin::Pin; -use std::sync::Arc; use anyhow::Result; -use deno_error::JsErrorBox; -use deno_graph::source::CacheSetting; -use deno_graph::source::LoaderChecksum; -use deno_node_transform::LoadError; -use deno_path_util::url_to_file_path; -use futures::Future; +use deno_cache_dir::file_fetcher::HeaderMap; +use deno_cache_dir::file_fetcher::HeaderName; +use deno_cache_dir::file_fetcher::SendError; +use deno_cache_dir::file_fetcher::SendResponse; -use deno_node_transform::LoadResponse; -use deno_node_transform::Loader; use deno_node_transform::ModuleSpecifier; use sys_traits::impls::InMemorySys; use sys_traits::EnvSetCurrentDir; use sys_traits::EnvSetVar; use sys_traits::FsCreateDirAll; -use sys_traits::FsRead; use sys_traits::FsWrite; type RemoteFileText = String; @@ -108,51 +100,37 @@ impl InMemoryLoader { } } -impl Loader for InMemoryLoader { - fn load( +fn to_headers(src: HashMap) -> HeaderMap { + let mut h = HeaderMap::with_capacity(src.len()); + for (k, v) in src { + let name = HeaderName::try_from(k.as_str()).unwrap(); + let value = + deno_cache_dir::file_fetcher::HeaderValue::from_str(&v).unwrap(); + h.insert(name, value); + } + h +} + +#[async_trait::async_trait(?Send)] +impl deno_cache_dir::file_fetcher::HttpClient for InMemoryLoader { + async fn send_no_follow( &self, - specifier: ModuleSpecifier, - _cache_setting: CacheSetting, - _maybe_checksum: Option, - ) -> Pin< - Box, LoadError>> + 'static>, - > { - if specifier.scheme() == "file" { - let file_path = url_to_file_path(&specifier).unwrap(); - let result = self.sys.fs_read_to_string(&file_path); - return Box::pin(async move { - let maybe_data = match result { - Ok(data) => Some(data), - Err(err) if err.kind() == ErrorKind::NotFound => None, - Err(err) => { - return Err(LoadError::Other(Arc::new(JsErrorBox::from_err(err)))) - } - }; - Ok(maybe_data.map(|result| LoadResponse { - content: result.into_owned().into_bytes(), - headers: None, - specifier, - })) - }); - } + specifier: &ModuleSpecifier, + _headers: HeaderMap, + ) -> Result { let result = self .remote_files .get(&specifier) .map(|result| match result { - Ok(result) => Ok(LoadResponse { - specifier, // todo: test a re-direct - content: result.0.clone().into(), - headers: result.1.clone(), - }), - Err(err) => Err(err), + Ok(result) => Ok(SendResponse::Success( + to_headers(result.1.clone().unwrap_or_default()), + result.0.clone().into_bytes().into(), + )), + Err(err) => Err(SendError::Failed(err.clone().into())), }); - let result = match result { - Some(Ok(result)) => Ok(Some(result)), - Some(Err(err)) => Err(LoadError::Other(Arc::new(JsErrorBox::generic( - format!("{}", err), - )))), - None => Ok(None), - }; - Box::pin(futures::future::ready(result)) + match result { + Some(result) => result, + None => Err(SendError::NotFound), + } } } diff --git a/rs-lib/tests/integration/test_builder.rs b/rs-lib/tests/integration/test_builder.rs index 87a6646..c19e1aa 100644 --- a/rs-lib/tests/integration/test_builder.rs +++ b/rs-lib/tests/integration/test_builder.rs @@ -1,7 +1,6 @@ // Copyright 2018-2024 the Deno authors. MIT license. use std::collections::HashMap; -use std::rc::Rc; use anyhow::Result; use deno_node_transform::transform; @@ -190,6 +189,7 @@ impl TestBuilder { ); transform( self.loader.sys.clone(), + self.loader.clone(), TransformOptions { entry_points, test_entry_points: self @@ -199,7 +199,6 @@ impl TestBuilder { .collect(), shims: self.shims.clone(), test_shims: self.test_shims.clone(), - loader: Some(Rc::new(self.loader.clone())), specifier_mappings: self.specifier_mappings.clone(), target: self.target, config_file: self.config_file.clone(), diff --git a/rs-lib/tests/integration_test.rs b/rs-lib/tests/integration_test.rs index 1d7f4d6..75cb2a9 100644 --- a/rs-lib/tests/integration_test.rs +++ b/rs-lib/tests/integration_test.rs @@ -806,7 +806,7 @@ async fn transform_remote_file_error() { assert_eq!( err_message.to_string(), - "Some error loading. (http://localhost/mod.ts)" + "Import 'http://localhost/mod.ts' failed." ); } diff --git a/tests/bin_shebang_project/main.ts b/tests/bin_shebang_project/main.ts new file mode 100644 index 0000000..4b9f391 --- /dev/null +++ b/tests/bin_shebang_project/main.ts @@ -0,0 +1,2 @@ +#!/usr/local/bin/node +console.log("Hello!"); diff --git a/tests/integration.test.ts b/tests/integration.test.ts index e9d1051..f6a8668 100644 --- a/tests/integration.test.ts +++ b/tests/integration.test.ts @@ -394,6 +394,50 @@ Deno.test("should build bin project", async () => { }); }); +Deno.test("should build bin project with a shebang", async () => { + await runTest("bin_shebang_project", { + entryPoints: [{ + kind: "bin", + name: "hello", + path: "./main.ts", + }], + shims: getAllShimOptions(false), + outDir: "./npm", + package: { + name: "hello", + version: "1.0.0", + }, + compilerOptions: { + lib: ["ESNext", "DOM"], + }, + }, (output) => { + assertEquals(output.packageJson, { + name: "hello", + version: "1.0.0", + bin: { + hello: "./esm/main.js", + }, + scripts: { + test: "node test_runner.js", + }, + devDependencies: { + picocolors: versions.picocolors, + }, + _generatedBy: "dnt@dev", + }); + const expectedText = + '#!/usr/bin/env node\n"use strict";\nconsole.log("Hello!");\n'; + assertEquals( + output.getFileText("script/main.js"), + expectedText, + ); + assertEquals( + output.getFileText("esm/main.js"), + expectedText, + ); + }); +}); + Deno.test("should run tests when using @deno/shim-deno-test shim", async () => { await runTest("test_project", { entryPoints: ["mod.ts"], @@ -1229,6 +1273,7 @@ export interface Output { async function runTest( project: + | "bin_shebang_project" | "declaration_import_project" | "import_map_project" | "json_module_project" diff --git a/wasm/Cargo.toml b/wasm/Cargo.toml index 4195fc5..3ca8b1f 100644 --- a/wasm/Cargo.toml +++ b/wasm/Cargo.toml @@ -12,7 +12,10 @@ default = ["console_error_panic_hook"] [dependencies] anyhow = "1.0.51" +async-trait.workspace = true +deno_cache_dir.workspace = true deno_config.workspace = true +deno_graph.workspace = true deno_error.workspace = true deno_path_util.workspace = true dnt = { path = "../rs-lib", default-features = false, features = ["serialization"], package="deno_node_transform" } @@ -20,6 +23,7 @@ getrandom = { version = "*", features = ["js"] } js-sys = "=0.3.77" wasm-bindgen = { version = "=0.2.100", features = ["serde-serialize"] } wasm-bindgen-futures = "=0.4.50" +url.workspace = true # The `console_error_panic_hook` crate provides better debugging of panics by # logging them with `console.error`. This is great for development, but requires diff --git a/wasm/helpers.js b/wasm/helpers.js index 4b69e8f..9c3e52c 100644 --- a/wasm/helpers.js +++ b/wasm/helpers.js @@ -1,26 +1,20 @@ -import { createCache } from "@deno/cache-dir"; - -const fileFetcher = createCache(); - -export function fetch_specifier(specifier, cacheSettingVal, checksum) { - return fileFetcher.load( - new URL(specifier), - // seems this is not used by file fetcher - /* is dynamic */ false, - getCacheSetting(cacheSettingVal), - checksum, - ); -} - -function getCacheSetting(val) { - // WARNING: ensure this matches wasm/src/lib.rs - switch (val) { - case 1: - return "use"; - case 2: - return "reload"; - case 0: - default: - return "only"; +export async function fetch_specifier(specifier, headers) { + try { + console.error("Downloading", specifier); + const response = await fetch(specifier, { + headers, + redirect: "manual", + }); + const status = response.status; + const body = await response.bytes(); + return { + status, + body, + headers: response.headers, + }; + } catch (err) { + return { + error: err.toString(), + }; } } diff --git a/wasm/src/lib.rs b/wasm/src/lib.rs index 7a9db24..6d529b8 100644 --- a/wasm/src/lib.rs +++ b/wasm/src/lib.rs @@ -3,70 +3,194 @@ mod utils; use std::collections::HashMap; -use std::future::Future; -use std::rc::Rc; -use std::sync::Arc; use anyhow::Context; use anyhow::Result; -use deno_error::JsErrorBox; -use dnt::LoadError; use dnt::MappedSpecifier; use dnt::ModuleSpecifier; use dnt::ScriptTarget; use dnt::Shim; use serde::Deserialize; use utils::set_panic_hook; -use wasm_bindgen::prelude::*; + +use deno_cache_dir::file_fetcher::HeaderMap; +use deno_cache_dir::file_fetcher::HeaderName; +use deno_cache_dir::file_fetcher::HeaderValue; +use deno_cache_dir::file_fetcher::SendError; +use deno_cache_dir::file_fetcher::SendResponse; +use deno_cache_dir::file_fetcher::StatusCode; +use js_sys::Array; +use js_sys::Object; +use js_sys::Reflect; +use url::Url; +use wasm_bindgen::prelude::wasm_bindgen; +use wasm_bindgen::JsCast; +use wasm_bindgen::JsValue; #[wasm_bindgen(module = "/helpers.js")] extern "C" { - async fn fetch_specifier( - specifier: String, - cache_setting: u8, - maybe_checksum: Option, - ) -> JsValue; + async fn fetch_specifier(specifier: String, headers: JsValue) -> JsValue; +} + +enum FetchResult { + Response(Response), + Error(FetchError), +} + +#[derive(Deserialize)] +struct FetchError { + pub error: String, +} + +struct Response { + pub status: u16, + pub body: Vec, + pub headers: HeaderMap, } -#[derive(Debug)] -struct JsLoader; +async fn fetch_specifier_typed( + specifier: &str, + headers: Vec<(String, String)>, +) -> Result { + let headers = headers_to_js_object(&headers); + let response = fetch_specifier(specifier.to_string(), headers).await; + parse_fetch_result(response).map_err(|err| { + if let Some(s) = err.as_string() { + anyhow::anyhow!(s) + } else { + // Optionally stringify complex JS error objects + anyhow::anyhow!(format!("{:?}", err)) + } + }) +} + +#[derive(Debug, Default, Clone)] +pub struct WasmHttpClient { + pub cached_only: bool, +} -impl dnt::Loader for JsLoader { - fn load( +#[async_trait::async_trait(?Send)] +impl deno_cache_dir::file_fetcher::HttpClient for WasmHttpClient { + async fn send_no_follow( &self, - url: dnt::ModuleSpecifier, - cache_setting: dnt::CacheSetting, - maybe_checksum: Option, - ) -> std::pin::Pin< - Box< - dyn Future, LoadError>> - + 'static, - >, - > { - Box::pin(async move { - let resp = fetch_specifier( - url.to_string(), - // WARNING: Ensure this matches wasm/helpers.js - match cache_setting { - dnt::CacheSetting::Only => 0, - dnt::CacheSetting::Use => 1, - dnt::CacheSetting::Reload => 2, - }, - maybe_checksum.map(|c| c.into_string()), - ) - .await; - if resp.is_null() || resp.is_undefined() { - return Ok(None); + url: &Url, + headers: HeaderMap, + ) -> Result { + if self.cached_only { + return Err(SendError::Failed(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + "Cannot download because --cached-only was specified.", + )))); + } + let headers = headers + .into_iter() + .filter_map(|(k, v)| Some((k?.to_string(), v.to_str().ok()?.to_string()))) + .collect::>(); + let result = + fetch_specifier_typed(url.as_str(), headers) + .await + .map_err(|err| { + SendError::Failed(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + err.to_string(), + ))) + })?; + let response = match result { + FetchResult::Response(response) => response, + FetchResult::Error(fetch_error) => { + return Err(SendError::Failed(fetch_error.error.into())); } - if !resp.is_object() { - return Err(LoadError::Other(Arc::new(JsErrorBox::generic( - "fetch response wasn't an object", - )))); + }; + match response.status { + 304 => Ok(SendResponse::NotModified), + 300..=399 => Ok(SendResponse::Redirect(response.headers)), + 404 => Err(SendError::NotFound), + 200..=299 => Ok(SendResponse::Success(response.headers, response.body)), + _ => Err(SendError::StatusCode( + StatusCode::from_u16(response.status).unwrap(), + )), + } + } +} + +fn headers_to_js_object(headers: &[(String, String)]) -> JsValue { + let obj = Object::new(); + for (key, value) in headers { + Reflect::set(&obj, &JsValue::from_str(key), &JsValue::from_str(value)) + .unwrap(); + } + obj.into() +} + +fn parse_fetch_result(js_value: JsValue) -> Result { + let has_error = Reflect::has(&js_value, &JsValue::from_str("error"))?; + if has_error { + let error: FetchError = serde_wasm_bindgen::from_value(js_value)?; + return Ok(FetchResult::Error(error)); + } + Ok(FetchResult::Response(parse_response(js_value)?)) +} + +fn parse_response(js_value: JsValue) -> Result { + let status = Reflect::get(&js_value, &JsValue::from_str("status"))? + .as_f64() + .ok_or_else(|| JsValue::from_str("status must be a number"))? + as u16; + + let body_js = Reflect::get(&js_value, &JsValue::from_str("body"))?; + let body: Vec = serde_wasm_bindgen::from_value(body_js)?; + + let headers_js = Reflect::get(&js_value, &JsValue::from_str("headers"))?; + let headers = response_headers_to_headermap(headers_js); + + Ok(Response { + status, + body, + headers, + }) +} + +fn response_headers_to_headermap(headers: JsValue) -> HeaderMap { + let mut map = HeaderMap::new(); + let entries_fn = Reflect::get(&headers, &JsValue::from_str("entries")); + let Ok(entries_fn) = entries_fn else { + return map; + }; + + let entries_iter = js_sys::Function::from(entries_fn) + .call0(&headers) + .ok() + .and_then(|iter| iter.dyn_into::().ok()); + + let Some(iter) = entries_iter else { + return map; + }; + + while let Ok(next) = iter.next() { + if next.done() { + break; + } + + let val = next.value(); + let pair = Array::from(&val); + if pair.length() != 2 { + continue; + } + + let key = pair.get(0).as_string(); + let value = pair.get(1).as_string(); + + if let (Some(k), Some(v)) = (key, value) { + if let (Ok(name), Ok(val)) = ( + HeaderName::from_bytes(k.as_bytes()), + HeaderValue::from_str(&v), + ) { + map.append(name, val); } - let load_response = serde_wasm_bindgen::from_value(resp).unwrap(); - Ok(Some(load_response)) - }) + } } + + map } #[derive(Deserialize)] @@ -103,12 +227,12 @@ async fn transform_inner(options: JsValue) -> Result { let result = dnt::transform( sys_traits::impls::RealSys, + WasmHttpClient { cached_only: false }, dnt::TransformOptions { entry_points: parse_module_specifiers(options.entry_points)?, test_entry_points: parse_module_specifiers(options.test_entry_points)?, shims: options.shims, test_shims: options.test_shims, - loader: Some(Rc::new(JsLoader {})), specifier_mappings: options.mappings, target: options.target, import_map: options.import_map,