summaryrefslogtreecommitdiff
path: root/cli/emit.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/emit.rs')
-rw-r--r--cli/emit.rs141
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)
}