Skip to content

unacy / Parser

Type Alias: Parser<TOutput> ​

ts
type Parser<TOutput> = (input) => TOutput;

Defined in: packages/core/src/formatters.ts:98

Parser converts a plain string into a format-tagged value with validation.

Parsers are the gatekeeper that transforms raw (unbranded) string input into a WithFormat<T, F> branded value. They must validate the input fully before applying the brand — invalid inputs must throw, never produce tagged garbage.

Type Parameters ​

Type ParameterDescription
TOutput extends WithFormat<unknown, string>Format-tagged type to produce (must extend WithFormat<T, F>)

Parameters ​

ParameterTypeDescription
inputstringPlain string to parse and validate

Returns ​

TOutput

Value tagged with the format brand

Throws ​

When the input string is invalid or does not match the expected format

Remarks ​

  • Must validate input before tagging — never cast without checking
  • Must throw ParseError (or a subclass) on invalid input, not return undefined
  • Use createParserWithSchema for Zod-backed validation

Example ​

typescript
type ISO8601Date = WithFormat<Date, 'ISO8601'>;
const parseISO: Parser<ISO8601Date> = (input) => {
  const d = new Date(input);
  if (isNaN(d.getTime())) throw new ParseError('ISO8601', input, 'Invalid date');
  return d as ISO8601Date;
};

Use When ​

Accepting user or external-system input that must be validated and branded before entering type-safe internal APIs.

Avoid When ​

The input is already validated and branded — passing it through a Parser again is redundant and incurs unnecessary validation overhead.

Pitfalls ​

NEVER return a silently cast invalid value (return invalid as TOutput) — doing so breaks the invariant that all WithFormat<T, F> values are valid, corrupting every downstream consumer that trusts the brand.

NEVER swallow parse errors with an empty catch block — callers rely on thrown ParseError instances to distinguish validation failures from other runtime errors.

See ​

  • Formatter
  • FormatterParser
  • createParserWithSchema

Released under the MIT License.