diff --git a/Cargo.lock b/Cargo.lock index 0792c300..6b3cbff6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -114,9 +114,9 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "ast_node" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e2cddd48eafd883890770673b1971faceaf80a185445671abc3ea0c00593ee" +checksum = "0a184645bcc6f52d69d8e7639720699c6a99efb711f886e251ed1d16db8dd90e" dependencies = [ "quote", "swc_macros_common", @@ -406,9 +406,9 @@ dependencies = [ [[package]] name = "deno_ast" -version = "0.50.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b80d223f51fb001a4100116ec14588d3798caca62e0c42cde7f91ef7c14c5925" +checksum = "c72e0409b3dbd60a5bf296cbc273a8e36bb3a3aab6abac389f1891e187d5ce14" dependencies = [ "base64", "capacity_builder", @@ -532,9 +532,9 @@ dependencies = [ [[package]] name = "deno_media_type" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ec0dada9dc5ac4733b4175d36f6a150b7dd68fab46db35cb1ef00dd7366acb" +checksum = "ac0109d26ff08a089642a79b45c65f91a849404c1ef3ec78c837a412956d8808" dependencies = [ "data-url", "encoding_rs", @@ -622,9 +622,9 @@ dependencies = [ [[package]] name = "dprint-swc-ext" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48928f46665a21bca006dc9a02d1329143ef161f7347f2b9430b55519275db8a" +checksum = "cf592ae6a864437e98ef9c6ae7936b822077e9d038a3a48ee081ab92313afad4" dependencies = [ "num-bigint", "rustc-hash", @@ -1917,10 +1917,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", ] @@ -1944,11 +1945,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", @@ -2126,9 +2136,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "14.0.3" +version = "14.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63fdb58d278e7cd625f671e5371b3e6c0eab56c6e2a995a6f70dd0f7725255d4" +checksum = "c2bb772b3a26b8b71d4e8c112ced5b5867be2266364b58517407a270328a2696" dependencies = [ "anyhow", "ast_node", @@ -2153,9 +2163,9 @@ dependencies = [ [[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", @@ -2199,9 +2209,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "17.0.0" +version = "17.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91da8222bd2e868a6977ef402b3ca5c29a41d18cd84772441d9e06ec95ded1f" +checksum = "bcf55c2d7555c93f4945e29f93b7529562be97ba16e60dd94c25724d746174ac" dependencies = [ "ascii", "compact_str", @@ -2234,9 +2244,9 @@ dependencies = [ [[package]] name = "swc_ecma_lexer" -version = "23.0.1" +version = "23.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c3bd958a5a67e2cc3f74abdd41fda688e54e7a25b866569260ef7018b67972" +checksum = "017d06ea85008234aa9fb34d805c7dc563f2ea6e03869ed5ac5a2dc27d561e4d" dependencies = [ "arrayvec", "bitflags", @@ -2272,9 +2282,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "23.0.0" +version = "24.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9166873bb660bed50b5f422233537d3e946336398570a4a13e57d8c63d6a01c5" +checksum = "2e9011783c975ba592ffc09cd208ced92b1dfabb2e5e0ef453559e2e25286127" dependencies = [ "either", "num-bigint", @@ -2288,9 +2298,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "25.0.0" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cc6454e1cf587b1d50509116350b503e7d647dbcc41bb5be9bf9a40fd792037" +checksum = "6c6f1b8f4232e7a7f614ff7c0f6ccb89c2d028cdf7629f79ad710cff5b28b62c" dependencies = [ "better_scoped_tls", "indexmap", @@ -2310,9 +2320,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "25.0.0" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48790332195e4163f1f49713a14f91a5614048ca6638c664050fe577c3fad5a" +checksum = "108d4d52db6151f768a516fe86e6f21fc783b03fa2d20292999f29275fd0c71d" dependencies = [ "swc_common", "swc_ecma_ast", @@ -2335,9 +2345,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "25.0.0" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1d5b2190c134d9b5c9b4d8c0d4b23b4fb5c433a7ae470f1c2103b8ff99160c" +checksum = "39b3b34f6a28348416174912009d09994ab71c867682ec78d641a9feb3a96b4e" dependencies = [ "either", "rustc-hash", @@ -2353,9 +2363,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "28.0.0" +version = "30.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc9a3fe915e9b4e289edc78f060b8edda8633bc44234c5cf167e359befa18267" +checksum = "69ea0052ac23b5b9fbc85bbdb1791b36b918f9d55f594b0ed8e25babb4c32d16" dependencies = [ "base64", "bytes-str", @@ -2377,9 +2387,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "28.0.0" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e62c7ec4f9667b9a85270125443fee6a7c2f357272d3d9eafc75a2f6fb0bca9" +checksum = "3872c006ccfdcc19f1cf5c01c15915a69964ba7982c9f581cdb7e727e77b9a2c" dependencies = [ "bytes-str", "rustc-hash", diff --git a/Cargo.toml b/Cargo.toml index d4434ca1..ab55f480 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,8 +48,8 @@ capacity_builder = "0.5.0" chrono = { version = "0.4.42", default-features = false, features = ["serde"] } data-url = "0.3.0" # this is optional in order to support using parsers other than swc -deno_ast = { version = "0.50.0", features = ["emit"], optional = true } -deno_media_type = { version = "0.2.9", features = [ +deno_ast = { version = "0.51.0", features = ["emit"], optional = true } +deno_media_type = { version = "0.3.0", features = [ "decoding", "data_url", "module_specifier", diff --git a/lib/lib.rs b/lib/lib.rs index dbc14fd0..e212b4d2 100644 --- a/lib/lib.rs +++ b/lib/lib.rs @@ -313,6 +313,7 @@ pub async fn js_create_graph( skip_dynamic_deps: false, unstable_bytes_imports: true, unstable_text_imports: true, + unstable_extended_json_imports: true, resolver: maybe_resolver.as_ref().map(|r| r as &dyn Resolver), // todo(dsherret): actually implement this for Wasm users // and don't just use a RealSys here as it would be better diff --git a/src/fast_check/range_finder.rs b/src/fast_check/range_finder.rs index 1581be4a..34caa0bd 100644 --- a/src/fast_check/range_finder.rs +++ b/src/fast_check/range_finder.rs @@ -1262,7 +1262,7 @@ fn is_module_typed(module: &crate::Module) -> bool { crate::Module::Js(m) => { m.media_type.is_typed() || m.maybe_types_dependency.is_some() } - crate::Module::Json(_) | crate::Module::Wasm(_) => true, + crate::Module::Independent(_) | crate::Module::Wasm(_) => true, crate::Module::Npm(_) | crate::Module::Node(_) | crate::Module::External(_) => false, @@ -1271,9 +1271,9 @@ fn is_module_typed(module: &crate::Module) -> bool { fn is_module_external(module: &crate::Module) -> bool { match module { - crate::Module::Js(_) | crate::Module::Json(_) | crate::Module::Wasm(_) => { - false - } + crate::Module::Js(_) + | crate::Module::Independent(_) + | crate::Module::Wasm(_) => false, crate::Module::External(_) | crate::Module::Node(_) | crate::Module::Npm(_) => true, diff --git a/src/graph.rs b/src/graph.rs index 51bd0968..a1bcc7a3 100644 --- a/src/graph.rs +++ b/src/graph.rs @@ -1163,7 +1163,7 @@ pub enum Module { Js(JsModule), // todo(#239): remove this when updating the --json output for 3.0 #[serde(rename = "asserted")] - Json(JsonModule), + Independent(IndependentModule), Wasm(WasmModule), Npm(NpmModule), Node(BuiltInNodeModule), @@ -1174,7 +1174,7 @@ impl Module { pub fn specifier(&self) -> &ModuleSpecifier { match self { Module::Js(module) => &module.specifier, - Module::Json(module) => &module.specifier, + Module::Independent(module) => &module.specifier, Module::Wasm(module) => &module.specifier, #[allow(deprecated)] Module::Npm(module) => &module.specifier, @@ -1186,7 +1186,7 @@ impl Module { pub fn media_type(&self) -> MediaType { match self { Module::Js(module) => module.media_type, - Module::Json(module) => module.media_type, + Module::Independent(module) => module.media_type, Module::Wasm(_) => MediaType::Wasm, Module::Node(_) => MediaType::JavaScript, Module::Npm(_) | Module::External(_) => MediaType::Unknown, @@ -1196,14 +1196,14 @@ impl Module { pub fn mtime(&self) -> Option { match self { Module::Js(m) => m.mtime, - Module::Json(m) => m.mtime, + Module::Independent(m) => m.mtime, Module::Wasm(m) => m.mtime, Module::Npm(_) | Module::Node(_) | Module::External(_) => None, } } - pub fn json(&self) -> Option<&JsonModule> { - if let Module::Json(module) = &self { + pub fn independent(&self) -> Option<&IndependentModule> { + if let Module::Independent(module) = &self { Some(module) } else { None @@ -1245,7 +1245,7 @@ impl Module { pub fn source(&self) -> Option<&Arc> { match self { crate::Module::Js(m) => Some(&m.source.text), - crate::Module::Json(m) => Some(&m.source.text), + crate::Module::Independent(m) => Some(&m.source.text), crate::Module::Wasm(_) | crate::Module::Npm(_) | crate::Module::Node(_) @@ -1257,7 +1257,7 @@ impl Module { match self { Module::Js(js_module) => js_module.maybe_types_dependency.as_ref(), Module::Wasm(_) - | Module::Json(_) + | Module::Independent(_) | Module::Npm(_) | Module::Node(_) | Module::External(_) => None, @@ -1271,7 +1271,7 @@ impl Module { Module::Npm(_) | Module::Node(_) | Module::External(_) - | Module::Json(_) => EMPTY_DEPS.get_or_init(Default::default), + | Module::Independent(_) => EMPTY_DEPS.get_or_init(Default::default), } } @@ -1284,7 +1284,7 @@ impl Module { Module::Npm(_) | Module::Node(_) | Module::External(_) - | Module::Json(_) => EMPTY_DEPS.get_or_init(Default::default), + | Module::Independent(_) => EMPTY_DEPS.get_or_init(Default::default), } } } @@ -1338,9 +1338,10 @@ pub struct BuiltInNodeModule { pub module_name: String, } +/// This can be `MediaType::{Json,Jsonc,Json5}` as of writing. #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] -pub struct JsonModule { +pub struct IndependentModule { pub specifier: ModuleSpecifier, #[serde(flatten, skip_serializing_if = "Option::is_none")] pub maybe_cache_info: Option, @@ -1348,12 +1349,10 @@ pub struct JsonModule { pub source: ModuleTextSource, #[serde(skip_serializing)] pub mtime: Option, - // todo(#240): This will always be MediaType::Json, but it's currently - // used in the --json output. It's redundant though. pub media_type: MediaType, } -impl JsonModule { +impl IndependentModule { /// Return the size in bytes of the content of the JSON module. pub fn size(&self) -> usize { self.source.text.len() @@ -1655,6 +1654,8 @@ pub struct BuildOptions<'a> { pub unstable_bytes_imports: bool, /// Support unstable text imports. pub unstable_text_imports: bool, + /// Support unstable jsonc and json5 imports. + pub unstable_extended_json_imports: bool, pub executor: &'a dyn Executor, pub locker: Option<&'a mut dyn Locker>, pub file_system: &'a FileSystem, @@ -1679,6 +1680,7 @@ impl Default for BuildOptions<'_> { skip_dynamic_deps: false, unstable_bytes_imports: false, unstable_text_imports: false, + unstable_extended_json_imports: false, executor: Default::default(), locker: None, file_system: &NullFileSystem, @@ -1844,6 +1846,8 @@ impl<'a, 'options> ModuleEntryIterator<'a, 'options> { | MediaType::Dcts | MediaType::Tsx | MediaType::Json + | MediaType::Jsonc + | MediaType::Json5 | MediaType::Wasm => true, MediaType::Css | MediaType::SourceMap @@ -2442,7 +2446,7 @@ impl ModuleGraph { Module::Node(_) => { has_node_specifier = true; } - Module::Json(_) | Module::External(_) => { + Module::Independent(_) | Module::External(_) => { // ignore } } @@ -2614,7 +2618,7 @@ impl ModuleGraph { let dependency = referring_module.dependencies.get(specifier)?; self.resolve_dependency_from_dep(dependency, prefer_types) } - Module::Json(_) + Module::Independent(_) | Module::Npm(_) | Module::Node(_) | Module::External(_) => None, @@ -2824,8 +2828,10 @@ where #[derive(Clone)] pub(crate) enum ModuleSourceAndInfo { - Json { + /// This can be `MediaType::{Json,Jsonc,Json5}` as of writing. + Independent { specifier: ModuleSpecifier, + media_type: MediaType, mtime: Option, source: ModuleTextSource, }, @@ -2849,7 +2855,7 @@ pub(crate) enum ModuleSourceAndInfo { impl ModuleSourceAndInfo { pub fn specifier(&self) -> &ModuleSpecifier { match self { - Self::Json { specifier, .. } => specifier, + Self::Independent { specifier, .. } => specifier, Self::Js { specifier, .. } => specifier, Self::Wasm { specifier, .. } => specifier, } @@ -2857,7 +2863,7 @@ impl ModuleSourceAndInfo { pub fn media_type(&self) -> MediaType { match self { - Self::Json { .. } => MediaType::Json, + Self::Independent { .. } => MediaType::Json, Self::Js { media_type, .. } => *media_type, Self::Wasm { .. } => MediaType::Wasm, } @@ -2865,7 +2871,7 @@ impl ModuleSourceAndInfo { pub fn source_bytes(&self) -> &[u8] { match self { - Self::Json { source, .. } => source.text.as_bytes(), + Self::Independent { source, .. } => source.text.as_bytes(), Self::Js { source, .. } => source.text.as_bytes(), Self::Wasm { source, .. } => source, } @@ -2906,10 +2912,9 @@ pub(crate) async fn parse_module_source_and_info( if media_type == MediaType::Json && (opts.is_root || opts.is_dynamic_branch - || matches!( - opts.maybe_attribute_type.map(|t| t.kind.as_str()), - Some("json") - )) + || opts + .maybe_attribute_type + .is_some_and(|t| t.kind.as_str() == "json")) { return new_source_with_text( &opts.specifier, @@ -2917,8 +2922,45 @@ pub(crate) async fn parse_module_source_and_info( maybe_charset, opts.mtime, ) - .map(|source| ModuleSourceAndInfo::Json { + .map(|source| ModuleSourceAndInfo::Independent { specifier: opts.specifier, + media_type: MediaType::Json, + mtime: opts.mtime, + source, + }); + } + + if opts + .maybe_attribute_type + .is_some_and(|t| t.kind.as_str() == "jsonc") + { + return new_source_with_text( + &opts.specifier, + opts.content, + maybe_charset, + opts.mtime, + ) + .map(|source| ModuleSourceAndInfo::Independent { + specifier: opts.specifier, + media_type: MediaType::Jsonc, + mtime: opts.mtime, + source, + }); + } + + if opts + .maybe_attribute_type + .is_some_and(|t| t.kind.as_str() == "json5") + { + return new_source_with_text( + &opts.specifier, + opts.content, + maybe_charset, + opts.mtime, + ) + .map(|source| ModuleSourceAndInfo::Independent { + specifier: opts.specifier, + media_type: MediaType::Json5, mtime: opts.mtime, source, }); @@ -3045,6 +3087,8 @@ pub(crate) async fn parse_module_source_and_info( } MediaType::Css | MediaType::Json + | MediaType::Jsonc + | MediaType::Json5 | MediaType::SourceMap | MediaType::Html | MediaType::Sql @@ -3073,15 +3117,16 @@ pub(crate) fn parse_module( options: ParseModuleOptions, ) -> Module { match options.module_source_and_info { - ModuleSourceAndInfo::Json { + ModuleSourceAndInfo::Independent { specifier, mtime, source, - } => Module::Json(JsonModule { + media_type, + } => Module::Independent(IndependentModule { maybe_cache_info: None, source, mtime, - media_type: MediaType::Json, + media_type, specifier, }), ModuleSourceAndInfo::Js { @@ -4210,6 +4255,7 @@ struct Builder<'a, 'graph> { was_dynamic_root: bool, unstable_bytes_imports: bool, unstable_text_imports: bool, + unstable_extended_json_imports: bool, file_system: &'a FileSystem, jsr_url_provider: &'a dyn JsrUrlProvider, jsr_version_resolver: Cow<'a, JsrVersionResolver>, @@ -4244,6 +4290,7 @@ impl<'a, 'graph> Builder<'a, 'graph> { was_dynamic_root: options.is_dynamic, unstable_bytes_imports: options.unstable_bytes_imports, unstable_text_imports: options.unstable_text_imports, + unstable_extended_json_imports: options.unstable_extended_json_imports, file_system: options.file_system, jsr_url_provider: options.jsr_url_provider, jsr_version_resolver: options.jsr_version_resolver, @@ -4740,7 +4787,7 @@ impl<'a, 'graph> Builder<'a, 'graph> { Err(err) => *slot = ModuleSlot::Err(err), } } - Module::Json(module) => { + Module::Independent(module) => { match new_source_with_text( &module.specifier, content, @@ -4837,7 +4884,7 @@ impl<'a, 'graph> Builder<'a, 'graph> { for slot in self.graph.module_slots.values_mut() { if let ModuleSlot::Module(module) = slot { match module { - Module::Json(module) => { + Module::Independent(module) => { module.maybe_cache_info = self.loader.get_cache_info(&module.specifier); } @@ -4966,6 +5013,8 @@ impl<'a, 'graph> Builder<'a, 'graph> { let is_allowed = match attribute.kind.as_str() { "bytes" => self.unstable_bytes_imports, "text" => self.unstable_text_imports, + "jsonc" => self.unstable_extended_json_imports, + "json5" => self.unstable_extended_json_imports, _ => false, }; if !is_allowed { @@ -7340,6 +7389,8 @@ mod tests { import 'file:///baz.json' assert { type: 'json' }; import type {} from 'file:///bar.ts'; /** @typedef { import('file:///bar.ts') } bar */ + import 'file:///baz.jsonc' assert { type: 'jsonc' }; + import 'file:///baz.json5' assert { type: 'json5' }; " .to_vec() .into(), @@ -7367,6 +7418,28 @@ mod tests { })) }) } + "file:///baz.jsonc" => { + assert!(!options.in_dynamic_branch); + Box::pin(async move { + Ok(Some(LoadResponse::Module { + specifier: specifier.clone(), + maybe_headers: None, + mtime: None, + content: b"//comment\n{}".to_vec().into(), + })) + }) + } + "file:///baz.json5" => { + assert!(!options.in_dynamic_branch); + Box::pin(async move { + Ok(Some(LoadResponse::Module { + specifier: specifier.clone(), + maybe_headers: None, + mtime: None, + content: b"//comment\n{ value: NaN }".to_vec().into(), + })) + }) + } _ => unreachable!(), } } diff --git a/src/lib.rs b/src/lib.rs index 7331ee41..e77bc3b8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -47,8 +47,8 @@ pub use graph::GraphImport; pub use graph::GraphKind; pub use graph::Import; pub use graph::ImportKind; +pub use graph::IndependentModule; pub use graph::JsModule; -pub use graph::JsonModule; pub use graph::JsrLoadError; pub use graph::JsrPackageReqNotFoundError; pub use graph::Module; diff --git a/src/symbols/analyzer.rs b/src/symbols/analyzer.rs index 8a44b529..fed05de2 100644 --- a/src/symbols/analyzer.rs +++ b/src/symbols/analyzer.rs @@ -19,8 +19,8 @@ use deno_ast::swc::utils::is_valid_ident; use indexmap::IndexMap; use indexmap::IndexSet; +use crate::IndependentModule; use crate::JsModule; -use crate::JsonModule; use crate::ModuleGraph; use crate::ast::EsParser; use crate::ast::ParseOptions; @@ -95,8 +95,8 @@ impl<'a> RootSymbol<'a> { }) }) .or_else(|| self.analyze_js_module(js_module)), - crate::Module::Json(json_module) => { - Some(self.analyze_json_module(json_module)) + crate::Module::Independent(json_module) => { + self.analyze_json_module(json_module) } crate::Module::Wasm(wasm_module) => self.analyze_wasm_module(wasm_module), crate::Module::Npm(_) @@ -174,7 +174,14 @@ impl<'a> RootSymbol<'a> { Some(self.build_raw_es_module_info(&script_module.specifier, &source)) } - fn analyze_json_module(&self, json_module: &JsonModule) -> ModuleInfoRef<'_> { + fn analyze_json_module( + &self, + json_module: &IndependentModule, + ) -> Option> { + match json_module.media_type { + MediaType::Json | MediaType::Jsonc | MediaType::Json5 => {} + _ => return None, + } let specifier = &json_module.specifier; // it's not ideal having to use SourceTextInfo here, but it makes // it easier to interop with ParsedSource @@ -219,7 +226,7 @@ impl<'a> RootSymbol<'a> { }, source_text_info, }; - self.finalize_insert(ModuleInfo::Json(Box::new(module_symbol))) + Some(self.finalize_insert(ModuleInfo::Json(Box::new(module_symbol)))) } fn analyze_wasm_module( diff --git a/tests/ecosystem_test.rs b/tests/ecosystem_test.rs index 1fe5d070..c1c09952 100644 --- a/tests/ecosystem_test.rs +++ b/tests/ecosystem_test.rs @@ -298,6 +298,7 @@ async fn test_version( skip_dynamic_deps: false, unstable_bytes_imports: false, unstable_text_imports: false, + unstable_extended_json_imports: false, module_analyzer: &module_analyzer, module_info_cacher: Default::default(), file_system: &NullFileSystem, diff --git a/tests/helpers/mod.rs b/tests/helpers/mod.rs index ba5af469..c1dce1ed 100644 --- a/tests/helpers/mod.rs +++ b/tests/helpers/mod.rs @@ -163,6 +163,7 @@ pub struct TestBuilder { workspace_fast_check: bool, unstable_bytes_imports: bool, unstable_text_imports: bool, + unstable_extended_json_imports: bool, } impl TestBuilder { @@ -182,6 +183,7 @@ impl TestBuilder { workspace_fast_check: false, unstable_bytes_imports: false, unstable_text_imports: false, + unstable_extended_json_imports: false, } } @@ -271,6 +273,12 @@ impl TestBuilder { self } + #[allow(unused)] + pub fn unstable_extended_json_imports(&mut self, value: bool) -> &mut Self { + self.unstable_extended_json_imports = value; + self + } + #[allow(unused)] pub fn ensure_locker(&mut self) -> &mut Self { self.locker.get_or_insert_with(Default::default); @@ -333,6 +341,7 @@ impl TestBuilder { skip_dynamic_deps: self.skip_dynamic_deps, unstable_bytes_imports: self.unstable_bytes_imports, unstable_text_imports: self.unstable_text_imports, + unstable_extended_json_imports: self.unstable_extended_json_imports, jsr_version_resolver: Cow::Owned(JsrVersionResolver { newest_dependency_date_options: self.newest_dependency_date.clone(), }),