Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoSign in
Socket

ts-pegjs

Package Overview
Dependencies
Maintainers
1
Versions
44
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ts-pegjs

TS target for peggy parser generator

latest
Source
npmnpm
Version
4.2.1
Version published
Maintainers
1
Created
Source

TS PEG.js

TS PEG.js is a TS code generation plugin for peggy.

Build Status Known Vulnerabilities npm version

NPM

Requirements

  • peggy (previous versions use: pegjs)

Installation

Node.js

Installs ts-pegjs + peggy

$ npm install ts-pegjs

Usage

Generating a Parser from JS code

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)

Plugin options

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.

Generating a Parser from CLI

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 returnTypes object any type is declared by default.

Make sure to pass any additional CLI options, like --extra-options-file before the parameter -o as these will otherwise be treated as arguments to that one.

Using the Parser

  • 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
    // [...]
}

Changelog

Changelog.

Acknowledgments

Thanks to:

License

The MIT License (MIT)

(c) 2017-2023, Pedro J. Molina at metadev.pro

Keywords

peggy

FAQs

Package last updated on 05 Jun 2023

Did you know?

Socket

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.

Install

Related posts