morph-cli 0.1.0

AST-based codebase migration and codemod tool for JavaScript and TypeScript projects.
Documentation
use swc_ecma_ast::Module;
use swc_ecma_codegen::{Emitter, text_writer::JsWriter};

use crate::core::ast::parser::{ParseFileError, ParsedModule};

pub fn print_module(parsed: &ParsedModule, module: &Module) -> Result<String, ParseFileError> {
    let mut output = Vec::new();
    let mut emitter = Emitter {
        cfg: Default::default(),
        comments: Some(&parsed.comments),
        cm: parsed.source_map.clone(),
        wr: JsWriter::new(parsed.source_map.clone(), "\n", &mut output, None),
    };

    emitter.emit_module(module).map_err(|error| {
        ParseFileError::new(&parsed.path, format!("failed to print module: {error}"))
    })?;

    String::from_utf8(output).map_err(|error| {
        ParseFileError::new(
            &parsed.path,
            format!("generated output was not valid UTF-8: {error}"),
        )
    })
}