Core functionality for cleaning packages, managing temporary directories, and handling the publish workflow.
Creates and manages temporary directories for the cleaning process.
/**
* Creates a temporary directory for package cleaning
* @param name - Optional directory name, generates random name if not provided
* @returns Promise resolving to directory path
* @throws Error if named directory already exists
*/
function createTempDirectory(name?: string): Promise<string>;
/**
* Removes temporary directory and all contents
* @param directoryName - Path to directory to remove
* @returns Promise that resolves when directory is removed
*/
function removeTempDirectory(directoryName: string): Promise<void>;Usage Examples:
import { createTempDirectory, removeTempDirectory } from 'clean-publish/core.js';
// Create with random name
const tempDir = await createTempDirectory();
console.log(tempDir); // "tmp123abc"
// Create with specific name
const namedDir = await createTempDirectory('my-clean-build');
// Clean up
await removeTempDirectory(tempDir);Reading, cleaning, and writing package.json files with publishConfig support.
/**
* Reads package.json from current directory
* @returns Promise resolving to parsed package.json object
*/
function readPackageJSON(): Promise<object>;
/**
* Writes package.json to specified directory
* @param directoryName - Target directory path
* @param packageJSON - Package.json object to write
* @returns Promise that resolves when file is written
*/
function writePackageJSON(directoryName: string, packageJSON: object): Promise<void>;
/**
* Cleans package.json by removing development fields and applying publishConfig
* @param packageJson - Original package.json object
* @param inputIgnoreFields - Additional fields to remove beyond defaults
* @returns Cleaned package.json object
*/
function clearPackageJSON(packageJson: object, inputIgnoreFields?: string[]): object;Usage Examples:
import { readPackageJSON, clearPackageJSON, writePackageJSON } from 'clean-publish/core.js';
// Read and clean package.json
const original = await readPackageJSON();
const cleaned = clearPackageJSON(original, ['devDependencies', 'scripts.test']);
// Write to temp directory
await writePackageJSON('/tmp/clean-build', cleaned);Copying project files with filtering support.
/**
* Copies project files to temporary directory with filtering
* @param tempDir - Target directory for copied files
* @param filter - Filter function to determine which files to copy
* @returns Promise that resolves when copying is complete
*/
function copyFiles(tempDir: string, filter: Function): Promise<void>;Usage Examples:
import { copyFiles, createFilesFilter } from 'clean-publish/core.js';
// Create filter and copy files
const filter = createFilesFilter(['*.test.js', 'coverage/']);
await copyFiles('/tmp/clean-build', filter);Publishing the cleaned package using specified package manager.
/**
* Publishes package using specified package manager
* @param cwd - Directory containing package to publish
* @param options - Publishing options
* @returns Promise resolving to process result
*/
function publish(cwd: string, options: PublishOptions): Promise<{code: number, signal: string}>;
interface PublishOptions {
/** Package access level */
access?: PackageAccess;
/** Perform dry run without actual publishing */
dryRun?: boolean;
/** Package manager to use */
packageManager?: PackageManager;
/** Additional options passed to package manager */
packageManagerOptions?: string[];
/** Tag to register package with */
tag?: string;
}Usage Examples:
import { publish } from 'clean-publish/core.js';
// Basic publish
const result = await publish('/tmp/clean-build', {
packageManager: 'npm'
});
// Publish with options
const result = await publish('/tmp/clean-build', {
packageManager: 'pnpm',
access: 'public',
tag: 'beta',
dryRun: true,
packageManagerOptions: ['--no-git-checks']
});
console.log(`Publish completed with code: ${result.code}`);Running custom scripts during the publish process.
/**
* Executes shell script with arguments
* @param script - Script command to execute
* @param args - Arguments to pass to script
* @returns Promise resolving to boolean indicating success
*/
function runScript(script: string, ...args: string[]): Promise<boolean>;Usage Examples:
import { runScript } from 'clean-publish/core.js';
// Run build script before publish
const success = await runScript('npm run build');
if (!success) {
throw new Error('Build failed');
}
// Run script with arguments
const success = await runScript('node', 'scripts/prepare.js', '--mode', 'production');The following fields are removed by default during cleaning:
devDependenciesbabel, eslintConfig, prettier, jest, etc.husky, lint-staged, commitlint, etc.resolutions, pnpmFields in publishConfig override main package.json fields during cleaning:
bin, main, exports, types, typingsmodule, browser, esnext, es2015unpkg, umd:main, typesVersionscpu, osOnly npm lifecycle scripts are preserved:
postinstall, postpack, postpublishpostversion, prepare, prepublishpublish, uninstall, versionCustom publish scripts calling clean-publish are automatically removed to prevent recursion.