README.md1.4 KB · markdown
# zero-copy-parser 🦾
> "Parse, don't validate."
A strict, type-safe parser combinator library for TypeScript.
## Philosophy
- **Correctness**: If it compiles, it parses (mostly).
- **Zero-Copy**: We pass indices, not substrings. Allocation only happens on yield.
- **Explicit**: Errors are values, not exceptions.
## Usage
```typescript
import {
tag,
sequence,
map,
digit1,
separatedList0,
delimited,
multispace0
} from 'zero-copy-parser';
// Parse "[1, 2, 3]"
const numberParser = map(digit1, Number);
const arrayParser = delimited(
tag("["),
separatedList0(
numberParser,
sequence(tag(","), multispace0)
),
tag("]")
);
const result = arrayParser("[1, 2, 3]", 0);
// Result: Ok([1, 2, 3])
```
## Combinators
- `tag(str)`: Match exact string
- `sequence(...parsers)`: Match in order
- `alt(...parsers)`: Match first success
- `map(parser, fn)`: Transform result
- `many0(parser)`: 0 or more
- `takeWhile(pred)`: 0 or more chars matching predicate
- `takeWhile1(pred)`: 1 or more chars
- `optional(parser)`: Match or null
- `oneOf(chars)` / `noneOf(chars)`: Character class
- `separatedList0(parser, separator)`: List with separator
- `delimited(start, parser, end)`: Between brackets/tags
## Pre-built
- `digit1`: One or more digits
- `alpha1`: One or more letters
- `multispace0`: Whitespace
## Contributions
PRs welcome. Keep it strict. Keep it typed.