or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli-commands.mdconfiguration.mdcore-operations.mdfile-processing.mdindex.mdutilities.md
tile.json

core-operations.mddocs/

Core Operations

Core functionality for cleaning packages, managing temporary directories, and handling the publish workflow.

Capabilities

Temporary Directory Management

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);

Package JSON Operations

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);

File Operations

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

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}`);

Script Execution

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');

Package.json Cleaning Details

Default Ignored Fields

The following fields are removed by default during cleaning:

  • Development dependencies: devDependencies
  • Development tool configs: babel, eslintConfig, prettier, jest, etc.
  • Build/CI configs: husky, lint-staged, commitlint, etc.
  • Package management: resolutions, pnpm

PublishConfig Support

Fields in publishConfig override main package.json fields during cleaning:

  • bin, main, exports, types, typings
  • module, browser, esnext, es2015
  • unpkg, umd:main, typesVersions
  • cpu, os

Script Filtering

Only npm lifecycle scripts are preserved:

  • postinstall, postpack, postpublish
  • postversion, prepare, prepublish
  • publish, uninstall, version

Custom publish scripts calling clean-publish are automatically removed to prevent recursion.