pegjs-loader

PEG.js loader for webpack

Usage no npm install needed!

<script type="module">
  import pegjsLoader from 'https://cdn.skypack.dev/pegjs-loader';
</script>

README

PEG.js loader for webpack

build status npm version npm downloads

Install

npm install --save-dev pegjs-loader pegjs webpack

The pegjs-loader requires PEG.js and webpack as peerDependency. Thus you are able to specify the required versions accurately.

Usage

Documentation: Using loaders

var parser = require("!pegjs!./parser.pegjs");
// => returns compiled PEG.js parser

Apply via webpack config

It's recommended to adjust your webpack.config so pegjs! is applied automatically on all files ending with .pegjs:

module.exports = {
  ...
  module: {
    loaders: [
      {
        test: /\.pegjs$/,
        loader: 'pegjs-loader'
      }
    ]
  }
};

Then you only need to write: require("./parser.pegjs").

PEG.js options

You can pass options to PEG.js as query parameters. The following options are supported:

  • allowedStartRules - The rules the built parser will be allowed to start parsing from (default: the first rule in the grammar).

  • cache — If true, makes the parser cache results, avoiding exponential parsing time in pathological cases but making the parser slower (default: false).

  • dependencies - Parser dependencies, the value is an object which maps variables used to access the dependencies in the parser to module IDs used to load them (default: {}).

  • optimize - Whether to optimize the built parser either for speed or size (default: speed).

  • trace - If true, the tracing support in the built parser is enabled (default: false).

module.exports = {
  ...
  module: {
    loaders: [
      {
        test: /\.pegjs$/,
        loader: 'pegjs-loader?cache=true&optimize=size&allowedStartRules[]=RuleA,allowedStartRules[]=RuleB&trace=true'
      }
    ]
  }
};

Change Log

This project adheres to Semantic Versioning.
Every release, along with the migration instructions, if any, is documented on the Github Releases page.

Thanks

  • Victor Homyakov for the propagation of the cache option.
  • VladimirTechMan for the propagation of the optimize option and updating things to be compatible with PEG.js 0.10.0.
  • ragtime for the propagation of the allowedStartRules and trace options.
  • Jan Varwig for the Webpack 2 compatibility fix.
  • retorquere for the propagation of the dependencies option.

License

MIT (http://www.opensource.org/licenses/mit-license.php)