Skip to content

Errors

dreamcli provides structured errors with codes, suggestions, and JSON serialization.

CLIError

ts
import { CLIError } from '@kjanat/dreamcli';

const target = 'production';
const region = 'us';

throw new CLIError('Deployment failed', {
  code: 'DEPLOY_FAILED',
  exitCode: 1,
  suggest: 'Check your credentials with `mycli login`',
  details: { target, region },
});

Fields

FieldTypeDescription
messagestringHuman-readable error message
codestringStable machine identifier
exitCodenumberProcess exit code (default varies by type)
suggeststringActionable hint for the user
detailsunknownStructured payload for JSON output
causeError | undefinedUnderlying cause (optional)

Type Safety

ts
import { CLIError } from '@kjanat/dreamcli';

new CLIError('Deployment failed', {
  code: 'DEPLOY_FAILED',
  exitCode: '1',
Type 'string' is not assignable to type 'number'.
});

Error Types

ts
import {
  CLIError,
  ParseError,
  ValidationError,
} from '@kjanat/dreamcli';
  • CLIError — base error for application-level failures
  • ParseError — argv parsing failures (unknown flags, bad syntax)
  • ValidationError — value validation failures (wrong type, missing required)

Parse and validation errors include "did you mean?" suggestions automatically.

Type Guards

ts
import {
  cli,
  isCLIError,
  isParseError,
  isValidationError,
} from '@kjanat/dreamcli';

const myCli = cli('mycli');

try {
  await myCli.run();
} catch (err) {
  if (isParseError(err)) {
    // handle parse error
  } else if (isValidationError(err)) {
    // handle validation error
  } else if (isCLIError(err)) {
    // handle generic CLI error
  }
}

JSON Mode

In --json mode, errors serialize to structured JSON:

json
{
  "error": {
    "message": "Deployment failed",
    "code": "DEPLOY_FAILED",
    "suggest": "Check your credentials with `mycli login`",
    "details": { "target": "production", "region": "us" }
  }
}

What's Next?

  • Middleware — error handling in middleware chains
  • Output — output channel behavior

Released under the MIT License.