diff options
Diffstat (limited to 'cli/emit.rs')
-rw-r--r-- | cli/emit.rs | 141 |
1 files changed, 70 insertions, 71 deletions
diff --git a/cli/emit.rs b/cli/emit.rs index 472648bca..7b25713fa 100644 --- a/cli/emit.rs +++ b/cli/emit.rs @@ -439,7 +439,6 @@ pub(crate) struct BundleOptions { struct BundleLoader<'a> { cm: Rc<swc::common::SourceMap>, emit_options: &'a ast::EmitOptions, - globals: &'a deno_ast::swc::common::Globals, graph: &'a ModuleGraph, } @@ -456,7 +455,6 @@ impl swc::bundler::Load for BundleLoader<'_> { &m.source, m.media_type, self.emit_options, - self.globals, self.cm.clone(), )?; Ok(swc::bundler::ModuleData { @@ -518,81 +516,82 @@ pub(crate) fn bundle( graph: &ModuleGraph, options: BundleOptions, ) -> Result<(String, Option<String>), AnyError> { - let emit_options: ast::EmitOptions = options.ts_config.into(); - - let cm = Rc::new(swc::common::SourceMap::new( - swc::common::FilePathMapping::empty(), - )); let globals = swc::common::Globals::new(); - let loader = BundleLoader { - graph, - emit_options: &emit_options, - globals: &globals, - cm: cm.clone(), - }; - let resolver = BundleResolver(graph); - let config = swc::bundler::Config { - module: options.bundle_type.into(), - ..Default::default() - }; - // This hook will rewrite the `import.meta` when bundling to give a consistent - // behavior between bundled and unbundled code. - let hook = Box::new(ast::BundleHook); - let bundler = swc::bundler::Bundler::new( - &globals, - cm.clone(), - loader, - resolver, - config, - hook, - ); - let mut entries = HashMap::new(); - entries.insert( - "bundle".to_string(), - swc::common::FileName::Url(graph.roots[0].clone()), - ); - let output = bundler - .bundle(entries) - .context("Unable to output during bundling.")?; - let mut buf = Vec::new(); - let mut srcmap = Vec::new(); - { - let cfg = swc::codegen::Config { minify: false }; - let wr = Box::new(swc::codegen::text_writer::JsWriter::new( - cm.clone(), - "\n", - &mut buf, - Some(&mut srcmap), + deno_ast::swc::common::GLOBALS.set(&globals, || { + let emit_options: ast::EmitOptions = options.ts_config.into(); + + let cm = Rc::new(swc::common::SourceMap::new( + swc::common::FilePathMapping::empty(), )); - let mut emitter = swc::codegen::Emitter { - cfg, + let loader = BundleLoader { + graph, + emit_options: &emit_options, cm: cm.clone(), - comments: None, - wr, }; - emitter - .emit_module(&output[0].module) - .context("Unable to emit during bundling.")?; - } - let mut code = - String::from_utf8(buf).context("Emitted code is an invalid string.")?; - let mut maybe_map: Option<String> = None; - { + let resolver = BundleResolver(graph); + let config = swc::bundler::Config { + module: options.bundle_type.into(), + ..Default::default() + }; + // This hook will rewrite the `import.meta` when bundling to give a consistent + // behavior between bundled and unbundled code. + let hook = Box::new(ast::BundleHook); + let mut bundler = swc::bundler::Bundler::new( + &globals, + cm.clone(), + loader, + resolver, + config, + hook, + ); + let mut entries = HashMap::new(); + entries.insert( + "bundle".to_string(), + swc::common::FileName::Url(graph.roots[0].clone()), + ); + let output = bundler + .bundle(entries) + .context("Unable to output during bundling.")?; let mut buf = Vec::new(); - cm.build_source_map_from(&mut srcmap, None) - .to_writer(&mut buf)?; - if emit_options.inline_source_map { - let encoded_map = format!( - "//# sourceMappingURL=data:application/json;base64,{}\n", - base64::encode(buf) - ); - code.push_str(&encoded_map); - } else if emit_options.source_map { - maybe_map = Some(String::from_utf8(buf)?); + let mut srcmap = Vec::new(); + { + let cfg = swc::codegen::Config { minify: false }; + let wr = Box::new(swc::codegen::text_writer::JsWriter::new( + cm.clone(), + "\n", + &mut buf, + Some(&mut srcmap), + )); + let mut emitter = swc::codegen::Emitter { + cfg, + cm: cm.clone(), + comments: None, + wr, + }; + emitter + .emit_module(&output[0].module) + .context("Unable to emit during bundling.")?; + } + let mut code = + String::from_utf8(buf).context("Emitted code is an invalid string.")?; + let mut maybe_map: Option<String> = None; + { + let mut buf = Vec::new(); + cm.build_source_map_from(&mut srcmap, None) + .to_writer(&mut buf)?; + if emit_options.inline_source_map { + let encoded_map = format!( + "//# sourceMappingURL=data:application/json;base64,{}\n", + base64::encode(buf) + ); + code.push_str(&encoded_map); + } else if emit_options.source_map { + maybe_map = Some(String::from_utf8(buf)?); + } } - } - Ok((code, maybe_map)) + Ok((code, maybe_map)) + }) } pub(crate) struct EmitOptions { @@ -735,7 +734,7 @@ impl fmt::Display for GraphError { ResolutionError::InvalidDowngrade(_, _) | ResolutionError::InvalidLocalImport(_, _) ) { - write!(f, "{}", err.to_string_with_span()) + write!(f, "{}", err.to_string_with_range()) } else { self.0.fmt(f) } |