Skip to content

Prepare Command

The itty prepare command runs lint, test, and build in sequence - the perfect pre-release workflow. It provides a one-command solution to validate your package before publishing.

Basic Usage

bash
itty prepare                  # Run lint → test → build
itty prepare --verbose       # Show detailed output

How it Works

  1. Runs lint using npm run lint or built-in linting
  2. Runs tests using npm run test (if script exists)
  3. Runs build using npm run build or built-in build
  4. Stops on failure - won't continue if any step fails
  5. Reports progress with clear status indicators

Execution Sequence

Step 1: Lint

  • Tries npm run lint script first
  • Falls back to itty lint if no script found
  • Uses built-in TypeScript ESLint config as fallback

Step 2: Test

  • Runs npm run test if script exists
  • Skips gracefully if no test script found
  • Shows skip message for transparency

Step 3: Build

  • Tries npm run build script first
  • Falls back to itty build if no script found
  • Uses built-in TypeScript compilation

Progress Indicators

The prepare command shows clear progress with emoji indicators:

🚀 Running prepare sequence...
🔍 Running lint script...
✅ Lint passed
🧪 Running test script...
✅ Tests passed  
🔨 Running built-in build...
✅ Build completed
🎉 Prepare sequence completed successfully

Configuration Options

--verbose

Show detailed output

  • Default: false
  • Example: --verbose

Displays the full output from each command instead of just progress indicators.

Error Handling

The prepare command stops immediately on the first failure:

Lint Failure

🚀 Running prepare sequence...
🔍 Running lint script...
❌ Command failed: Lint failed: ESLint exited with code 1

[ESLint error details]

Test Failure

🚀 Running prepare sequence...
🔍 Running lint script...
✅ Lint passed
🧪 Running test script...
❌ Command failed: Tests failed: Script 'test' exited with code 1

[Test error details]

Build Failure

🚀 Running prepare sequence...
🔍 Running lint script...
✅ Lint passed
🧪 Running test script...  
✅ Tests passed
🔨 Running built-in build...
❌ Command failed: Build failed: [error details]

Script Detection

The prepare command intelligently detects and uses your package.json scripts:

json
{
  "scripts": {
    "lint": "eslint src/",           // Used for lint step
    "test": "jest",                  // Used for test step  
    "build": "tsc && rollup -c"      // Used for build step
  }
}

Fallback Behavior

When scripts don't exist, prepare gracefully falls back:

  • No lint script: Uses itty lint with built-in config
  • No test script: Skips test step with notification
  • No build script: Uses itty build with default settings

Examples

Basic Prepare

bash
# Run full prepare sequence
itty prepare

Verbose Output

bash
# See detailed output from each step
itty prepare --verbose

Integration with Release

bash
# Prepare then release
itty prepare && itty release

Integration with Scripts

Add to your package.json:

json
{
  "scripts": {
    "prepare": "itty prepare",
    "prepublishOnly": "itty prepare",
    "pre-release": "itty prepare --verbose"
  }
}

CI/CD Integration

Perfect for continuous integration:

yaml
# GitHub Actions example
- name: Prepare package
  run: itty prepare --verbose
  
- name: Release
  run: itty release --dry-run
  if: github.ref == 'refs/heads/main'

Common Workflows

Development Workflow

bash
# Check before committing
itty prepare
git add .
git commit -m "feat: new feature"

Release Workflow

bash
# Validate before releasing
itty prepare
itty release --minor --tag --push

CI Validation

bash
# Full validation in CI
itty prepare --verbose

Custom Scripts Integration

Works seamlessly with your existing tooling:

json
{
  "scripts": {
    "lint": "eslint . --ext .ts,.js",
    "test": "vitest run",
    "build": "tsup src/index.ts",
    "type-check": "tsc --noEmit"
  }
}

Performance

The prepare command is optimized for efficiency:

  • Early exit on first failure saves time
  • Parallel execution where possible
  • Smart caching leverages tool-specific caching
  • Progress indicators keep you informed without overwhelming

Best Practices

  • Run before every release to catch issues early
  • Use in CI/CD to validate all changes
  • Combine with git hooks for automatic validation
  • Add to pre-commit hooks for team consistency