diff --git a/Cargo.lock b/Cargo.lock index 577ccb4..dfe2a81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -62,12 +62,6 @@ version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - [[package]] name = "ascii" version = "1.1.0" @@ -76,9 +70,9 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "ast_node" -version = "3.0.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e2cddd48eafd883890770673b1971faceaf80a185445671abc3ea0c00593ee" +checksum = "2eb025ef00a6da925cf40870b9c8d008526b6004ece399cb0974209720f0b194" dependencies = [ "quote", "swc_macros_common", @@ -493,9 +487,9 @@ dependencies = [ [[package]] name = "deno_ast" -version = "0.50.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b80d223f51fb001a4100116ec14588d3798caca62e0c42cde7f91ef7c14c5925" +checksum = "30c2f6f65154faed61e45d6578566f9fab9d2a330c35c87366706883701cce51" dependencies = [ "base64 0.22.1", "capacity_builder", @@ -529,7 +523,7 @@ dependencies = [ "swc_visit", "text_lines", "thiserror", - "unicode-width 0.2.1", + "unicode-width", "url", ] @@ -559,9 +553,9 @@ dependencies = [ [[package]] name = "deno_graph" -version = "0.103.0" +version = "0.104.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2594e83855f172895f0e391099ca5d09dc8ae1072789c7e9ed3c3dc52a267dc6" +checksum = "166b59d27d3ef8a446bece020e1d72b629250a0cb6665b0c7929cd7bae93b9a1" dependencies = [ "async-trait", "boxed_error", @@ -606,9 +600,9 @@ dependencies = [ [[package]] name = "deno_media_type" -version = "0.2.9" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ec0dada9dc5ac4733b4175d36f6a150b7dd68fab46db35cb1ef00dd7366acb" +checksum = "9fd0af4161f90b092feb363864a64d7c74e0efc13a15905d0d09df73bb72a123" dependencies = [ "data-url", "encoding_rs", @@ -718,9 +712,9 @@ dependencies = [ [[package]] name = "dprint-swc-ext" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48928f46665a21bca006dc9a02d1329143ef161f7347f2b9430b55519275db8a" +checksum = "33175ddb7a6d418589cab2966bd14a710b3b1139459d3d5ca9edf783c4833f4c" dependencies = [ "num-bigint", "rustc-hash", @@ -867,9 +861,9 @@ dependencies = [ [[package]] name = "from_variant" -version = "2.0.2" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308530a56b099da144ebc5d8e179f343ad928fa2b3558d1eb3db9af18d6eff43" +checksum = "e5ff35a391aef949120a0340d690269b3d9f63460a6106e99bd07b961f345ea9" dependencies = [ "swc_macros_common", "syn", @@ -1090,14 +1084,15 @@ dependencies = [ [[package]] name = "hstr" -version = "2.0.1" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced1416104790052518d199e753d49a7d8130d476c664bc9e53f40cfecb8e615" +checksum = "0c43c0a9e8fbdb3bb9dc8eee85e1e2ac81605418b4c83b6b7413cbf14d56ca5c" dependencies = [ "hashbrown 0.14.5", "new_debug_unreachable", "once_cell", "rustc-hash", + "serde", "triomphe", ] @@ -2082,10 +2077,11 @@ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -2109,11 +2105,20 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -2290,9 +2295,9 @@ dependencies = [ [[package]] name = "swc_atoms" -version = "7.0.0" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3500dcf04c84606b38464561edc5e46f5132201cb3e23cf9613ed4033d6b1bb2" +checksum = "d4ccbe2ecad10ad7432100f878a107b1d972a8aee83ca53184d00c23a078bb8a" dependencies = [ "hstr", "once_cell", @@ -2301,9 +2306,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "14.0.3" +version = "17.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63fdb58d278e7cd625f671e5371b3e6c0eab56c6e2a995a6f70dd0f7725255d4" +checksum = "259b675d633a26d24efe3802a9d88858c918e6e8f062d3222d3aa02d56a2cf4c" dependencies = [ "anyhow", "ast_node", @@ -2322,15 +2327,15 @@ dependencies = [ "swc_sourcemap", "swc_visit", "tracing", - "unicode-width 0.1.14", + "unicode-width", "url", ] [[package]] name = "swc_config" -version = "3.1.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d94f41e0f3c4c119a06af5e164674b63ae7eb6d7c1c60e46036c4a548f9fbe44" +checksum = "72e90b52ee734ded867104612218101722ad87ff4cf74fe30383bd244a533f97" dependencies = [ "anyhow", "bytes-str", @@ -2354,9 +2359,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "15.0.0" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65c25af97d53cf8aab66a6c68f3418663313fc969ad267fc2a4d19402c329be1" +checksum = "a573a0c72850dec8d4d8085f152d5778af35a2520c3093b242d2d1d50776da7c" dependencies = [ "bitflags 2.9.3", "is-macro", @@ -2374,9 +2379,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "17.0.0" +version = "20.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91da8222bd2e868a6977ef402b3ca5c29a41d18cd84772441d9e06ec95ded1f" +checksum = "ff2a6ee1ec49dda8dedeac54e4147b4e8b3f278d9bb34ab28983257a393d34ed" dependencies = [ "ascii", "compact_str", @@ -2409,15 +2414,13 @@ dependencies = [ [[package]] name = "swc_ecma_lexer" -version = "23.0.1" +version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c3bd958a5a67e2cc3f74abdd41fda688e54e7a25b866569260ef7018b67972" +checksum = "5e82f7747e052c6ff6e111fa4adeb14e33b46ee6e94fe5ef717601f651db48fc" dependencies = [ - "arrayvec", "bitflags 2.9.3", "either", "num-bigint", - "phf", "rustc-hash", "seq-macro", "serde", @@ -2427,14 +2430,15 @@ dependencies = [ "swc_atoms", "swc_common", "swc_ecma_ast", + "swc_ecma_parser", "tracing", ] [[package]] name = "swc_ecma_loader" -version = "14.0.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c675d14700c92f12585049b22b02356f1e142f4b0c32a4d0eb4b7a968a4c0c1e" +checksum = "fbcababb48f0d46587a0a854b2c577eb3a56fa99687de558338021e93cd2c8f5" dependencies = [ "anyhow", "pathdiff", @@ -2447,25 +2451,30 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "23.0.0" +version = "27.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9166873bb660bed50b5f422233537d3e946336398570a4a13e57d8c63d6a01c5" +checksum = "7f1a51af1a92cd4904c073b293e491bbc0918400a45d58227b34c961dd6f52d7" dependencies = [ + "bitflags 2.9.3", "either", "num-bigint", + "phf", + "rustc-hash", + "seq-macro", "serde", + "smartstring", + "stacker", "swc_atoms", "swc_common", "swc_ecma_ast", - "swc_ecma_lexer", "tracing", ] [[package]] name = "swc_ecma_transforms_base" -version = "25.0.0" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cc6454e1cf587b1d50509116350b503e7d647dbcc41bb5be9bf9a40fd792037" +checksum = "250f6f165578ca4fee47bd57585c1b9597c94bf4ea6591df47f2b5fa5b1883fe" dependencies = [ "better_scoped_tls", "indexmap", @@ -2485,9 +2494,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "25.0.0" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48790332195e4163f1f49713a14f91a5614048ca6638c664050fe577c3fad5a" +checksum = "3d3ab35eff4a980e02d708798ae4c35bc017612292adbffe7b7b554df772fdf5" dependencies = [ "swc_common", "swc_ecma_ast", @@ -2510,9 +2519,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "25.0.0" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1d5b2190c134d9b5c9b4d8c0d4b23b4fb5c433a7ae470f1c2103b8ff99160c" +checksum = "c2d7748d4112c87ce1885260035e4a43cebfe7661a40174b7d77a0a04760a257" dependencies = [ "either", "rustc-hash", @@ -2528,9 +2537,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "28.0.0" +version = "33.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc9a3fe915e9b4e289edc78f060b8edda8633bc44234c5cf167e359befa18267" +checksum = "03de12e38e47ac1c96ac576f793ad37a9d7b16fbf4f2203881f89152f2498682" dependencies = [ "base64 0.22.1", "bytes-str", @@ -2552,9 +2561,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "28.0.0" +version = "33.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e62c7ec4f9667b9a85270125443fee6a7c2f357272d3d9eafc75a2f6fb0bca9" +checksum = "4408800fdeb541fabf3659db622189a0aeb386f57b6103f9294ff19dfde4f7b0" dependencies = [ "bytes-str", "rustc-hash", @@ -2570,9 +2579,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "21.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83259addd99ed4022aa9fc4d39428c008d3d42533769e1a005529da18cde4568" +checksum = "0fb99e179988cabd473779a4452ab942bcb777176983ca3cbaf22a8f056a65b0" dependencies = [ "indexmap", "num_cpus", @@ -2589,9 +2598,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "15.0.0" +version = "18.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a579aa8f9e212af521588df720ccead079c09fe5c8f61007cf724324aed3a0" +checksum = "a9611a72a4008d62608547a394e5d72a5245413104db096d95a52368a8cc1d63" dependencies = [ "new_debug_unreachable", "num-bigint", @@ -2934,12 +2943,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - [[package]] name = "unicode-width" version = "0.2.1" diff --git a/Cargo.toml b/Cargo.toml index 9249691..a0e159c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,8 +11,8 @@ license = "MIT" members = ["lib"] [workspace.dependencies] -deno_graph = { version = "0.103.0", default-features = false } -deno_ast = { version = "0.50.0", features = ["transpiling"] } +deno_graph = { version = "0.104.0", default-features = false } +deno_ast = { version = "0.52.0", features = ["transpiling"] } import_map = "0.24.0" serde = "1" deno_error = "0.7.0" diff --git a/benches/source_hash_function.rs b/benches/source_hash_function.rs index 1597791..cf5ad55 100644 --- a/benches/source_hash_function.rs +++ b/benches/source_hash_function.rs @@ -186,6 +186,7 @@ async fn build_eszip(mb: usize) -> EszipV2 { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap() } diff --git a/lib/lib.rs b/lib/lib.rs index fbf9797..3b79bc1 100644 --- a/lib/lib.rs +++ b/lib/lib.rs @@ -343,6 +343,7 @@ pub async fn build_eszip( emit_options: Default::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .map_err(|e| js_sys::Error::new(&e.to_string()))?; if let Some((import_map_specifier, import_map_content)) = diff --git a/src/examples/builder.rs b/src/examples/builder.rs index 11b7515..e81cd0a 100644 --- a/src/examples/builder.rs +++ b/src/examples/builder.rs @@ -81,6 +81,7 @@ async fn main() { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); if let Some((import_map_specifier, import_map_content)) = diff --git a/src/v2.rs b/src/v2.rs index 85fb7f2..aaf30db 100644 --- a/src/v2.rs +++ b/src/v2.rs @@ -27,7 +27,9 @@ use deno_npm::resolution::SerializedNpmResolutionSnapshotPackage; use deno_npm::resolution::ValidSerializedNpmResolutionSnapshot; use deno_semver::StackString; use deno_semver::npm::NpmPackageNvReference; +use deno_semver::npm::NpmPackageReqReference; use deno_semver::package::PackageNv; +use deno_semver::package::PackageNvReference; use deno_semver::package::PackageReq; use futures::future::poll_fn; use futures::io::AsyncReadExt; @@ -346,6 +348,7 @@ pub struct FromGraphOptions<'a> { /// Note: When a path is above the base it will be left absolute. pub relative_file_base: Option>, pub npm_packages: Option, + pub npm_snapshot: ValidSerializedNpmResolutionSnapshot, } /// Provide the source code of the Npm packages to include in the eszip @@ -1069,16 +1072,6 @@ impl EszipV2 { modules.to_front(&specifier); } - /// Adds an npm resolution snapshot to the eszip. - pub fn add_npm_snapshot( - &mut self, - snapshot: ValidSerializedNpmResolutionSnapshot, - ) { - if !snapshot.as_serialized().packages.is_empty() { - self.npm_snapshot = Some(snapshot); - } - } - /// Takes an npm resolution snapshot from the eszip. pub fn take_npm_snapshot( &mut self, @@ -1361,6 +1354,7 @@ impl EszipV2 { visited: ToVisit, relative_file_base: Option, npm_packages: Option<&mut FromGraphNpmPackages>, + npm_snapshot: &ValidSerializedNpmResolutionSnapshot, ) -> Result< Option> + 'a>>, anyhow::Error, @@ -1489,16 +1483,26 @@ impl EszipV2 { modules.insert(specifier_key.into_owned(), eszip_module); Ok(None) } - deno_graph::Module::Npm(npm_module) => { + deno_graph::Module::Npm(_) => { let Some(npm_packages) = npm_packages else { return Ok(None); }; + let req_ref = + NpmPackageReqReference::from_specifier(module.specifier())?; + let serialize_npm_snapshot = npm_snapshot.as_serialized(); + let pkg_id = serialize_npm_snapshot.root_packages.get(req_ref.req()) + .ok_or_else(|| anyhow::anyhow!("Could not resolve package req '{}' from graph because it was missing in the provided npm snapshot.", req_ref.req()))?; + let pkg_nv = &pkg_id.nv; + let pkg_nv_reference = + NpmPackageNvReference::new(PackageNvReference { + nv: pkg_nv.clone(), + sub_path: req_ref.sub_path().map(|s| s.into()), + }); + if visited.should_visit_package_meta() { - let meta_modules = npm_packages - .take_meta_modules(npm_module.nv_reference.nv().clone()); - let package_jsons = npm_packages - .take_package_jsons(npm_module.nv_reference.nv().clone()); + let meta_modules = npm_packages.take_meta_modules(pkg_nv.clone()); + let package_jsons = npm_packages.take_package_jsons(pkg_nv.clone()); for meta_module in meta_modules.into_iter().chain(package_jsons).flatten() @@ -1513,15 +1517,14 @@ impl EszipV2 { ); } } else if visited.should_visit_whole_package() { - let package = - npm_packages.take_package(npm_module.nv_reference.nv()); + let package = npm_packages.take_package(pkg_nv); if let Some(mut package) = package { let modules_to_insert = package .meta_modules .into_iter() .chain(package.package_jsons) .flatten() - .chain(package.modules.shift_remove(&npm_module.nv_reference)) + .chain(package.modules.shift_remove(&pkg_nv_reference)) .chain(package.modules.into_values()); for module in modules_to_insert { modules.insert( @@ -1535,8 +1538,7 @@ impl EszipV2 { } } } else { - let module = - npm_packages.take_module(npm_module.nv_reference.clone()); + let module = npm_packages.take_module(pkg_nv_reference); if let Some(module) = module { modules.insert( module.specifier, @@ -1590,6 +1592,7 @@ impl EszipV2 { module, opts.relative_file_base, npm_packages.as_mut(), + &opts.npm_snapshot, )?; if let Some(dependencies) = dependencies { let mut level_deps = Vec::new(); @@ -1636,7 +1639,7 @@ impl EszipV2 { Ok(Self { modules: EszipV2Modules(Arc::new(Mutex::new(modules))), - npm_snapshot: None, + npm_snapshot: Some(opts.npm_snapshot), options: Options::default(), }) } @@ -2203,6 +2206,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); let module = eszip.get_module("file:///external.ts").unwrap(); @@ -2238,6 +2242,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); let module = eszip.get_module("file:///main.ts").unwrap(); @@ -2284,6 +2289,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); let module = eszip.get_module("file:///json.ts").unwrap(); @@ -2329,6 +2335,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); let module = eszip.get_module("file:///wasm.ts").unwrap(); @@ -2393,6 +2400,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); let module = eszip.get_module("file:///dynamic.ts").unwrap(); @@ -2437,6 +2445,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); let module = eszip.get_module("file:///dynamic_data.ts").unwrap(); @@ -2492,6 +2501,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: Some((&base).into()), npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); let module = eszip.get_module("main.ts").unwrap(); @@ -2574,6 +2584,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: Some((&base).into()), npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); let module = eszip.get_module("main.ts").unwrap(); @@ -2734,6 +2745,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); eszip.add_import_map(ModuleKind::Json, specifier.to_string(), content); @@ -2819,6 +2831,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); eszip.add_import_map(ModuleKind::Json, specifier.to_string(), content); @@ -2894,6 +2907,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); eszip.add_import_map(ModuleKind::Jsonc, specifier.to_string(), content); @@ -2977,6 +2991,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); eszip.add_import_map(ModuleKind::Jsonc, specifier.to_string(), content); @@ -3054,7 +3069,7 @@ mod tests { } .into_valid() .unwrap(); - let mut eszip = super::EszipV2::from_graph(super::FromGraphOptions { + let eszip = super::EszipV2::from_graph(super::FromGraphOptions { graph, module_kind_resolver: Default::default(), parser: analyzer.as_capturing_parser(), @@ -3062,13 +3077,9 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: original_snapshot.clone(), }) .unwrap(); - eszip.add_npm_snapshot(original_snapshot.clone()); - let taken_snapshot = eszip.take_npm_snapshot(); - assert!(taken_snapshot.is_some()); - assert!(eszip.take_npm_snapshot().is_none()); - eszip.add_npm_snapshot(taken_snapshot.unwrap()); let bytes = eszip.into_bytes(); insta::assert_debug_snapshot!(bytes); let cursor = Cursor::new(bytes); @@ -3077,6 +3088,7 @@ mod tests { .await .unwrap(); let snapshot = eszip.take_npm_snapshot().unwrap(); + assert!(eszip.take_npm_snapshot().is_none()); assert_eq!(snapshot.into_serialized(), { let mut original = original_snapshot.into_serialized(); // this will be sorted for determinism @@ -3183,7 +3195,7 @@ mod tests { } .into_valid() .unwrap(); - let mut eszip = super::EszipV2::from_graph(super::FromGraphOptions { + let eszip = super::EszipV2::from_graph(super::FromGraphOptions { graph, module_kind_resolver: Default::default(), parser: analyzer.as_capturing_parser(), @@ -3191,9 +3203,9 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: original_snapshot.clone(), }) .unwrap(); - eszip.add_npm_snapshot(original_snapshot.clone()); let bytes = eszip.into_bytes(); insta::assert_debug_snapshot!(bytes); let cursor = Cursor::new(bytes); @@ -3275,6 +3287,20 @@ mod tests { ), ], ); + let npm_snapshot = SerializedNpmResolutionSnapshot { + root_packages: root_pkgs(&[ + ("a@1.2.2", "a@1.2.2"), + ("d@5.0.0", "d@5.0.0"), + ("other@99.99.99", "other@99.99.99"), + ]), + packages: Vec::from([ + new_package("a@1.2.2", &[]), + new_package("d@5.0.0", &[]), + new_package("other@99.99.99", &[]), + ]), + } + .into_valid() + .unwrap(); let eszip = super::EszipV2::from_graph(super::FromGraphOptions { graph, module_kind_resolver: Default::default(), @@ -3283,6 +3309,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: Some(from_graph_npm_packages), + npm_snapshot, }) .unwrap(); @@ -3420,6 +3447,22 @@ mod tests { ("z_0.1.2/foo", b"source code of z@0.1.2/foo".as_slice()), )], ); + let npm_snapshot = SerializedNpmResolutionSnapshot { + root_packages: root_pkgs(&[ + ("a@1.2.2", "a@1.2.2"), + ("d@5.0.0", "d@5.0.0"), + ("z@0.1.2", "z@0.1.2"), + ("other@99.99.99", "other@99.99.99"), + ]), + packages: Vec::from([ + new_package("a@1.2.2", &[]), + new_package("d@5.0.0", &[]), + new_package("z@0.1.2", &[]), + new_package("other@99.99.99", &[]), + ]), + } + .into_valid() + .unwrap(); let eszip = super::EszipV2::from_graph(super::FromGraphOptions { graph, module_kind_resolver: Default::default(), @@ -3428,6 +3471,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: Some(from_graph_npm_packages), + npm_snapshot, }) .unwrap(); @@ -3527,6 +3571,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: Some(from_graph_npm_packages), + npm_snapshot: Default::default(), }) .unwrap(); @@ -3606,6 +3651,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: Some(from_graph_npm_packages), + npm_snapshot: Default::default(), }) .unwrap(); @@ -3656,6 +3702,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap(); @@ -3964,6 +4011,7 @@ mod tests { emit_options: EmitOptions::default(), relative_file_base: None, npm_packages: None, + npm_snapshot: Default::default(), }) .unwrap() }