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

configuration.mddocs/

Configuration

Flexible configuration loading from package.json, dedicated config files, and CLI arguments with comprehensive validation.

Capabilities

Configuration Loading

Loads configuration from multiple sources with automatic discovery and validation.

/**
 * Loads configuration from various sources with validation
 * @returns Promise resolving to merged configuration object
 * @throws Error for invalid configuration with descriptive messages
 */
function getConfig(): Promise<Config>;

interface Config {
  /** Keep only main section of README.md */
  cleanDocs?: boolean;
  /** Clean inline comments from JS files */
  cleanComments?: boolean;
  /** List of files to delete before publishing (supports regex and glob patterns) */
  files?: Array<string | RegExp>;
  /** List of package.json fields to delete before publishing */
  fields?: string[];
  /** Clean project without npm publish (tmp directory not deleted automatically) */
  withoutPublish?: boolean;
  /** Name of package manager to use */
  packageManager?: PackageManager;
  /** Whether npm registry publishes this package as public or restricted */
  access?: PackageAccess;
  /** Create temporary directory with given name */
  tempDir?: string;
  /** Options passed directly to package manager during publish */
  packageManagerOptions?: string[];
  /** Reports details of what would have been published */
  dryRun?: boolean;
  /** Registers package with given tag */
  tag?: string;
  /** Run script on to-release dir before npm publish */
  beforeScript?: string;
}

type PackageManager = 'npm' | 'pnpm' | 'yarn' | string;
type PackageAccess = 'public' | 'restricted' | string;

Configuration Sources

Configuration is loaded from multiple sources in order of precedence:

  1. CLI arguments (highest priority)
  2. Configuration files
  3. package.json "clean-publish" section
  4. Built-in defaults (lowest priority)

Configuration Files Searched:

  • .clean-publish (JSON)
  • .clean-publish.js (CommonJS module)
  • .clean-publish.json (JSON)
  • package.json ("clean-publish" section)

Usage Examples:

import { getConfig } from 'clean-publish/get-config.js';

// Load merged configuration
const config = await getConfig();
console.log(config.packageManager); // 'npm' (default)
console.log(config.files);          // Custom file patterns if configured

Package.json Configuration

Configuration can be embedded in package.json under the "clean-publish" key:

{
  "name": "my-package",
  "scripts": {
    "publish": "clean-publish"
  },
  "clean-publish": {
    "files": ["*.test.js", "coverage/"],
    "fields": ["devDependencies", "scripts.test"],
    "packageManager": "pnpm",
    "cleanDocs": true,
    "cleanComments": true
  }
}

Dedicated Configuration Files

JSON Configuration (.clean-publish or .clean-publish.json)

{
  "files": ["test/", "*.spec.js"],
  "fields": ["devDependencies", "scripts.test", "husky"],
  "packageManager": "yarn",
  "access": "public",
  "cleanDocs": true,
  "beforeScript": "npm run build"
}

JavaScript Configuration (.clean-publish.js)

module.exports = {
  files: [
    'test/',
    /\.test\.js$/,
    'coverage/',
    'docs/internal/'
  ],
  fields: [
    'devDependencies',
    'scripts.test',
    'scripts.dev'
  ],
  packageManager: 'pnpm',
  access: 'public',
  cleanComments: true,
  packageManagerOptions: ['--no-git-checks']
};

Configuration Validation

All configuration is validated with descriptive error messages:

import { getConfig } from 'clean-publish/get-config.js';

try {
  const config = await getConfig();
} catch (error) {
  // Examples of validation errors:
  // "The `packageManager` in Clean Publish config must be `an string`"
  // "The `files` in Clean Publish config must be `an array of strings or RegExps`"
  // "Clean Publish config must `not be empty`"
  console.error(error.message);
}

Configuration Options

File and Field Filtering

{
  // Files to exclude (strings, RegExp, or glob patterns)
  "files": [
    "*.test.js",           // String pattern
    /\.spec\./,            // RegExp pattern  
    "coverage/**",         // Glob pattern
    "docs/development/"    // Directory
  ],
  
  // Package.json fields to remove
  "fields": [
    "devDependencies",
    "scripts.test",
    "husky",
    "lint-staged"
  ]
}

Publishing Options

{
  // Package manager configuration
  "packageManager": "pnpm",
  "packageManagerOptions": ["--no-git-checks", "--access=public"],
  
  // Publishing metadata
  "access": "public",
  "tag": "beta",
  "dryRun": true,
  
  // Workflow control
  "withoutPublish": false,
  "beforeScript": "npm run build:production"
}

Content Cleaning

{
  // README cleaning
  "cleanDocs": true,
  
  // JavaScript comment removal  
  "cleanComments": true,
  
  // Custom temporary directory
  "tempDir": "dist-clean"
}

Default Configuration

{
  packageManager: 'npm',
  cleanDocs: false,
  cleanComments: false,
  withoutPublish: false,
  dryRun: false
}

Error Handling

Configuration errors include:

  • Invalid types: Non-string package manager, non-array files list
  • Empty configuration: Configuration object with no properties
  • Invalid patterns: Malformed RegExp patterns in files array
  • File parsing errors: JSON syntax errors, module loading failures

All errors include examples of correct configuration format to help with debugging.