# apg-lite

> lightweight JavaScript APG parser

Latest version **1.0.5** (published 2025-05-28) · BSD-2-Clause license · 0 weekly downloads

## Install

```sh
npm install apg-lite
pnpm add apg-lite
yarn add apg-lite
bun add apg-lite
```

## Health

**Score 30/100 (F)** — status: maintenance-mode.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.5 |
| Published | 2025-05-28 |
| First published | 2023-11-27 |
| Weekly downloads | 0 |
| License | BSD-2-Clause |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 558.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Lowell D. Thomas |
| Maintainers | ldthomas |
| Keywords | APG, parser, ABNF, SABNF |

## Links

- npm: https://www.npmjs.com/package/apg-lite
- Repository: https://github.com/ldthomas/apg-lite
- Homepage: https://github.com/ldthomas/apg-lite#readme
- Issues: https://github.com/ldthomas/apg-lite/issues
- npm.io page: https://npm.io/package/apg-lite

## Alternatives

- [babylon](https://npm.io/package/babylon.md) — 5.1M weekly downloads
- [csscolorparser](https://npm.io/package/csscolorparser.md) — 3.7M weekly downloads
- [expr-eval-fork](https://npm.io/package/expr-eval-fork.md) — 1.5M weekly downloads
- [@leeoniya/ufuzzy](https://npm.io/package/@leeoniya/ufuzzy.md) — 247.7K weekly downloads
- [xml-parser](https://npm.io/package/xml-parser.md) — 78.4K weekly downloads

## Recent versions

- 1.0.5 (latest) — 2025-05-28
- 1.0.4 — 2024-07-01
- 1.0.3 — 2024-05-06
- 1.0.2 — 2023-11-27
- 1.0.1 — 2023-11-27
- 1.0.0 — 2023-11-27

## README

# APG Lite

`apg-lite` is a light-weight parser of [ABNF](https://www.rfc-editor.org/rfc/rfc5234) grammars.
It is a parser only.
It relies on [apg-js](https://github.com/ldthomas/apg-js), version 4.3.0 or higher, with the new `--lite` option
to generate ESM grammar objects.
`apg-lite` features:

- Parses only JavaScript strings, whereas `apg-js` can parse any arbitrary array of positive integers.
- Retains only three of the eight [SABNF](https://sabnf.com/docs/python/md_docs_SABNF.html) superset operators of `apg-js`.
  - UDT, (User-Defined Terminals) Handwritten, phrase-matching code snippets.
  - AND, The positive look-ahead operator (see [syntactic predicates](https://en.wikipedia.org/wiki/Syntactic_predicate)).
  - NOT, The negative look-ahead operator.
- The AST has been simplified (see `./ast-app/`).
- Tracing (debugging) the parse tree has been simplified (see `./trace-app/`).
- Statistics collection (profiling) has been simplified (see `./trace-app/`).
- `apg-lite` is fully contained in a single JavaScript file.
  - `./lib/parser.js` contains ECMAScript Modules (ESM) which can be `import`-ed into your application.
  - `./lib/web-parser.js` can be scripted into your web page application with no bundling necessary.

A number of example application are included here to demonstrate the use of `apg-lite` in both
Node.js and web page applications. Each example application is in its own directory.
The documentation for each is in the file `documentation.md`.
Most (but not all) examples will be presented as both Node.js and web page applications.

- `./basic-app/` - A simple parser demonstrating the most basic construction and use of a parser.
- `./ast-app/` - Use of the AST - how to construct the AST and translate or semantically manipulate the phrases captured by the AST nodes.
  Demonstrates generating an XML version of the AST.
- `./udt-app/` - Use of a UDT, a handwritten code snippet to recognize a somewhat complicated phrase.
- `./lookahead-app/` - Demonstration of the look ahead operators.
- `./trace-app/` - How to debug and profile the parse tree.
  - Tracing is the primary means of debugging a grammar or input string.
  - Counting node hits serves as a type of profiling, exposing which rules are most often hit.
- `./cool-app/` - A simple demonstration of parsing a string with UTF+32 (in this case emoticon) characters.
- `./uri-app/` - This example builds a light-weight, but robust and well-tested URI parser.

The Node.js applications can all be run from the `package.json` scripts.
Use `npm run` to see the script names of the demonstrations.

### The URI Parser

Note: version 1.0.5 fixes a bug in the URI grammar.
The previous versions incorrectly allowed empty strings for the IPv4 octets.
No changes to the `apg-lite` parser or any of the other examples have been made.

The `UriParser` object in the `./uri-app/` application is of special interest.
It is a fully-contained (no dependencies) [URI](https://www.rfc-editor.org/rfc/rfc3986) parser.
Any URI can be parsed with, for example:

> npm run uri -- http://user@example.com

If no argument is given, the example will parse a pre-chosen representive URI.

`UriParser` is well-tested with [Jest](https://jestjs.io/) unit tests in the `__tests__` directory.

> npm test

will run all of the unit tests.

See `./uri-app/documentation.md` for complete documentation.
See `./uri-app/node-app.js` for a sample Node.js application
and `./uri-app/web.html` for sample web page application.

---
_Source: https://npm.io/package/apg-lite · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
