Skip to main content

@gasket/cjs

Utility for transpiling ESM to CJS with .cjs extensions

Installation

pnpm install @gasket/cjs

Usage

CLI

# Transpile from ./lib to ./cjs (default)
gasket-cjs

# Transpile from custom source directory
gasket-cjs ./src

# Transpile to custom output directory
gasket-cjs ./src ./dist/cjs

Programmatic API

import { transpile } from '@gasket/cjs';

// Basic usage
const result = await transpile('./src', './cjs');

// With options
const result = await transpile('./src', './cjs', {
extensions: ['.js', '.mjs', '.ts'],
createPackageJson: true,
onProgress: ({ file, current, total }) => {
console.log(`Processing ${file} (${current}/${total})`);
}
});

console.log(`Transpiled ${result.successful.length} files`);

Configuration

The utility uses SWC for transpilation with the following default configuration:

  • Module type: CommonJS
  • Target: ES2020
  • Extensions: .js, .mjs
  • Output extension: .cjs

Features

  • ✅ Transpiles ESM to CJS using SWC
  • ✅ Changes file extensions from .js/.mjs to .cjs
  • ✅ Fixes import paths to use .cjs extensions
  • ✅ Creates package.json in output directory
  • ✅ Preserves directory structure
  • ✅ CLI and programmatic interfaces
  • ✅ Progress reporting

API Reference

transpile(sourceDir, outputDir, options)

Main transpilation function.

Parameters

  • sourceDir (string): Source directory path
  • outputDir (string, optional): Output directory path (default: 'cjs')
  • options (object, optional): Configuration options

Options

  • swcConfig (object): Custom SWC configuration
  • extensions (string[]): File extensions to process (default: ['.js', '.mjs'])
  • createPackageJson (boolean): Create package.json in output dir (default: true)
  • onProgress (function): Progress callback function

Returns

Promise resolving to TranspileSummary object:

{
successful: TranspileResult[],
failed: TranspileResult[],
total: number,
outputDir: string
}

License

MIT licensed.