morph_cli/core/ast/
printer.rs1use 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}