ordinary-build 0.6.0

Build & codegen tool for Ordinary
Documentation
// Copyright (C) 2026 Ordinary Labs, LLC.
//
// SPDX-License-Identifier: AGPL-3.0-only

use std::sync::Arc;

use anyhow::Context;
use swc::{
    BoolOrDataConfig, HandlerOpts, JsMinifyExtras, config::JsMinifyOptions, try_with_handler,
};
use swc_common::{FileName, GLOBALS, Globals, SourceMap};
use swc_ecma_minifier::option::SimpleMangleCache;

pub fn minify(file_string: &str) -> anyhow::Result<String> {
    let cm = Arc::<SourceMap>::default();

    let c = swc::Compiler::new(cm.clone());
    let output = match GLOBALS.set(&Globals::default(), move || {
        try_with_handler(cm.clone(), HandlerOpts::default(), |handler| {
            let fm = cm.new_source_file(FileName::Anon.into(), file_string.to_string());

            c.minify(
                fm,
                handler,
                &JsMinifyOptions {
                    compress: BoolOrDataConfig::from_bool(true),
                    mangle: BoolOrDataConfig::from_bool(true),
                    ..Default::default()
                },
                JsMinifyExtras::default()
                    .with_mangle_name_cache(Some(Arc::new(SimpleMangleCache::default()))),
            )
            .context("failed to minify")
        })
    }) {
        Ok(v) => v,
        Err(err) => {
            tracing::error!(%err);
            return Err(err.to_pretty_error());
        }
    };

    Ok(output.code)
}