dbg_swc/
bundle.rs

1use std::{
2    process::{Command, Stdio},
3    sync::Arc,
4};
5
6use anyhow::{bail, Context, Result};
7use swc_common::{FileName, SourceMap};
8use swc_timer::timer;
9
10use crate::util::{parse_js, wrap_task, ModuleRecord};
11
12pub fn bundle(cm: Arc<SourceMap>, entry_url: &str) -> Result<ModuleRecord> {
13    wrap_task(|| {
14        let _timer = timer!("bundle");
15
16        let mut cmd = Command::new("deno");
17        cmd.arg("bundle");
18        cmd.arg(entry_url);
19
20        cmd.stderr(Stdio::inherit());
21
22        let output = cmd.output().context("failed to invoke `deno bundle`")?;
23
24        if !output.status.success() {
25            bail!("`deno bundle` failed with status code {}", output.status);
26        }
27
28        let code =
29            String::from_utf8(output.stdout).context("deno bundle emitted non-utf8 output")?;
30
31        let fm = cm.new_source_file(FileName::Anon.into(), code);
32        parse_js(fm).context("failed to parse js filed emitted by `deno bundle`")
33    })
34    .with_context(|| format!("failed to bundle `{entry_url}`"))
35}