Files
stack/packages/mosaic/framework/skills/tsdown/references/option-lint.md
T
fargo 1a822493ba format: apply repo prettier (3.8.1) to the folded skills tree
963 markdown files reformatted with the repository's pinned prettier so
pnpm format:check covers the folded tree like every other repo file.

The formatter's embedded-language pass also normalized code fences
(TS semicolons, closed HTML tags in examples, lowercased CSS hex colors,
one renumbered list that skipped an index). Alphanumeric token deltas vs
the fold commit were audited file-by-file; all are formatter-equivalent
markup normalizations plus the four sanitized skills.
2026-08-19 14:37:17 -05:00

3.4 KiB

Package Validation (publint & attw)

Validate your package configuration and type declarations before publishing.

Overview

tsdown integrates with publint and Are the types wrong? (attw) to catch common packaging issues. Both are optional dependencies.

Installation

# publint only
npm install -D publint

# attw only
npm install -D @arethetypeswrong/core

# both
npm install -D publint @arethetypeswrong/core

publint

Checks that package.json fields (exports, main, module, types) match your actual output files.

Enable

export default defineConfig({
  publint: true,
});

Configuration

export default defineConfig({
  publint: {
    level: 'error', // 'warning' | 'error' | 'suggestion'
  },
});

CLI

tsdown --publint

attw (Are the types wrong?)

Verifies TypeScript declarations are correct across different module resolution strategies (node10, node16, bundler).

Enable

export default defineConfig({
  attw: true,
});

Configuration

export default defineConfig({
  attw: {
    profile: 'node16', // 'strict' | 'node16' | 'esm-only'
    level: 'error', // 'warn' | 'error'
    ignoreRules: ['false-cjs', 'cjs-resolves-to-esm'],
  },
});

Profiles

Profile Description
strict Requires all resolutions to pass (default)
node16 Ignores node10 resolution failures
esm-only Ignores node10 and node16-cjs resolution failures

Ignore Rules

Suppress specific problem types with ignoreRules:

Rule Description
no-resolution Module could not be resolved
untyped-resolution Resolution succeeded but has no types
false-cjs Types indicate CJS but implementation is ESM
false-esm Types indicate ESM but implementation is CJS
cjs-resolves-to-esm CJS resolution points to an ESM module
fallback-condition A fallback/wildcard condition was used
cjs-only-exports-default CJS module only exports a default
named-exports Named exports mismatch between types and implementation
false-export-default Types declare a default export that doesn't exist
missing-export-equals Types are missing export = for CJS
unexpected-module-syntax File uses unexpected module syntax
internal-resolution-error Internal resolution error in type checking

CLI

tsdown --attw

CI Integration

Both tools support CI-aware options:

export default defineConfig({
  publint: 'ci-only',
  attw: {
    enabled: 'ci-only',
    profile: 'node16',
    level: 'error',
  },
});

Both tools require a package.json in your project directory.