@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 pathoutputDir
(string, optional): Output directory path (default: 'cjs')options
(object, optional): Configuration options
Options
swcConfig
(object): Custom SWC configurationextensions
(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
}