Skip to main content

morph_cli/core/ast/
printer.rs

1use swc_ecma_ast::Module;
2use swc_ecma_codegen::{Emitter, text_writer::JsWriter};
3
4use crate::core::ast::parser::{ParseFileError, ParsedModule};
5
6pub fn print_module(parsed: &ParsedModule, module: &Module) -> Result<String, ParseFileError> {
7    let mut output = Vec::new();
8    let mut emitter = Emitter {
9        cfg: Default::default(),
10        comments: Some(&parsed.comments),
11        cm: parsed.source_map.clone(),
12        wr: JsWriter::new(parsed.source_map.clone(), "\n", &mut output, None),
13    };
14
15    emitter.emit_module(module).map_err(|error| {
16        ParseFileError::new(&parsed.path, format!("failed to print module: {error}"))
17    })?;
18
19    String::from_utf8(output).map_err(|error| {
20        ParseFileError::new(
21            &parsed.path,
22            format!("generated output was not valid UTF-8: {error}"),
23        )
24    })
25}