Skip to content

Doctor

The tspub doctor command diagnoses your project environment, finding issues that aren't in your package.json but can still break your package.

Quick Start

bash
tspub doctor
environment/node-version    ✓ v20.10.0 (matches engines)
environment/lockfiles       ✗ found package-lock.json AND yarn.lock
typescript/strict           ✗ strict mode not enabled
typescript/declaration      ✗ declaration not enabled
build/output-fresh          ✗ dist/ is older than src/
dependencies/duplicates     ✗ react in deps AND devDeps

4 issues found (3 auto-fixable)

Auto-fix

bash
tspub doctor --fix

Fixes issues like:

  • Removes extra lock files
  • Enables strict: true in tsconfig
  • Enables declaration: true in tsconfig
  • Removes duplicates from devDependencies

Options

OptionDescription
--fixApply auto-fixes
--unsafeAllow unsafe fixes
--dry-runPreview fixes without applying
--profile <name>Use a preset profile (strict, quick)
--format jsonOutput JSON for CI
--rule <id=severity>Override rule severity

The 16 Rules

Environment (6 rules)

RuleDescriptionFixable
environment/node-versionNode version matches engines
environment/npm-versionnpm version is compatible
environment/multiple-lockfilesOnly one lock file exists✓ safe
environment/typescript-versionTypeScript is up to date✓ safe
environment/git-dirtyWorking tree is clean
environment/git-no-remoteGit remote is configured

TypeScript (5 rules)

RuleDescriptionFixable
typescript/tsconfig-existstsconfig.json exists✓ safe
typescript/strictstrict: true is set✓ safe
typescript/declarationdeclaration: true is set✓ safe
typescript/moduleModule setting is appropriate
typescript/module-resolutionmoduleResolution is set correctly

Build (2 rules)

RuleDescriptionFixable
build/output-existsBuild output directory exists
build/output-freshBuild output is newer than source

Dependencies (3 rules)

RuleDescriptionFixable
dependencies/no-file-depsNo file: protocol dependencies
dependencies/no-duplicatesNo deps in both deps and devDeps✓ safe
dependencies/peer-dep-installedPeer deps are installed for dev

Profiles

strict (default)

All rules enabled at their default severity.

quick

Skips slow checks:

  • build/output-fresh
  • dependencies/peer-dep-installed
bash
tspub doctor --profile quick

Override Severity

bash
tspub doctor --rule "typescript/strict=off"

Or in config:

ts
// tspub.config.ts
export default {
  doctor: {
    severityOverrides: {
      "typescript/strict": "off",
    },
  },
};

Plugins

Write custom doctor rules:

js
export const rules = [{
  meta: {
    id: "custom/check-nvmrc",
    description: "Ensure .nvmrc exists",
    category: "environment",
    fixable: "safe",
  },
  check(ctx) {
    // Check logic
  },
  fix(ctx) {
    // Fix logic
  },
}];
ts
// tspub.config.ts
export default {
  doctor: { plugins: ["./my-doctor-rules.js"] },
};

Programmatic API

ts
import { doctor } from "tspub";

const results = await doctor({
  dir: ".",
  fix: true,
  profile: "strict",
});

console.log(results);
// [{ ruleId: "typescript/strict", severity: "error", message: "...", fixable: "safe" }]

Released under the MIT License.