CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-clean-publish

Clean your package before publish by removing development-specific files and configuration

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

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.

docs

cli-commands.md

configuration.md

core-operations.md

file-processing.md

index.md

utilities.md

tile.json