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.