
Company News
Meet the Socket Team at RSAC and BSidesSF 2026
Join Socket for live demos, rooftop happy hours, and one-on-one meetings during BSidesSF and RSA 2026 in San Francisco.
TS PEG.js is a TS code generation plugin for peggy.
Installs ts-pegjs + peggy
$ npm install ts-pegjs
In Node.js, require both the peggy parser generator and the ts-pegjs plugin:
var peggy = require('peggy');
var tspegjs = require('ts-pegjs');
To generate a TS parser, pass to pegjs.generate ts-pegjs plugin and your grammar:
var parser = pegjs.generate("start = ('a' / 'b')+", {
output: 'source',
format: 'commonjs',
plugins: [tspegjs],
tspegjs: {
customHeader: "// import lib\nimport { Lib } from 'mylib';"
}
});
The method will return source code of generated parser as a string.
Supported options of pegjs.generate:
cache — if true, makes the parser cache results, avoiding exponential
parsing time in pathological cases but making the parser slower (default:
false). This is strongly recommended for big grammars
(like javascript.pegjs or css.pegjs in example folder)allowedStartRules — rules the parser will be allowed to start parsing from
(default: the first rule in the grammar)Note: Options in CLI mode are written in POSIX (long names as kebab-case) convention e.g. --custom-header but with camelcase on JavaScript e.g. customHeader.
customHeader — A string or an array of strings which are a valid TS code to be injected on the header of the output file. E.g. provides a convenient place for adding library imports.customHeaderFile — A header file to include.errorName — The name of the exported internal error class to override. The default value from version 3.0.0 is PeggySyntaxError. Previous one was SyntaxError.returnTypes — An object containing rule names as keys and a valid TS return type as string.skipTypeComputation — Boolean. If true, ts-pegjs will not try to use TS to infer types based on your grammar rules.onlyGenerateGrammarTypes — Boolean. If true, only types for your grammar rules (and no parser) will be generated. Cannot be used with skipTypeComputation.doNotCamelCaseTypes — Boolean. By default type names for grammar rules are converted to CamelCase. If true, this conversion is not done and type names will match the casing of your grammar rules.Sample usage:
peggy --plugin ./src/tspegjs -o examples/arithmetics.ts --cache examples/arithmetics.pegjs
(Note ./src/tspegjs is the path to tspegjs.ts in the project. If you installed ts-pegjs using npm, it should probably be ./node_modules/ts-pegjs/src/tspegjs.)
It will generarate the parser in the TS flavour.
If you need to pass specific plugin options you can use the option --extra-options-file provided by pegjs and pass it a filename (e.g. pegconfig.json) containing specific options like the following JSON sample:
peggy --plugin ./src/tspegjs --extra-options-file pegconfig.json -o examples/arithmetics.ts --cache examples/arithmetics.pegjs
{
"tspegjs": {
"customHeader": "// import lib\nimport { Lib } from 'mylib';"
},
"returnTypes": {
"Integer": "number",
"Expression": "number",
}
}
For rules not listed in
returnTypesobjectanytype is declared by default.
Make sure to pass any additional CLI options, like
--extra-options-filebefore the parameter-oas these will otherwise be treated as arguments to that one.
Save parser generated by pegjs.generate to a file or use the one generated from the CLI tool.
In client TS code:
import { PeggySyntaxError, parse } from './arithmetics';
try {
const sampleOutput = parse('my sample...');
} catch (ex: PeggySyntaxError) {
// Handle parsing error
// [...]
}
Thanks to:
(c) 2017-2023, Pedro J. Molina at metadev.pro
FAQs
TS target for peggy parser generator
We found that ts-pegjs demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Join Socket for live demos, rooftop happy hours, and one-on-one meetings during BSidesSF and RSA 2026 in San Francisco.

Research
/Security News
Malicious Packagist packages disguised as Laravel utilities install an encrypted PHP RAT via Composer dependencies, enabling remote access and C2 callbacks.

Research
/Security News
OpenVSX releases of Aqua Trivy 1.8.12 and 1.8.13 contained injected natural-language prompts that abuse local AI coding agents for system inspection and potential data exfiltration.