Socket
Socket
Sign inDemoInstall

cherow

Package Overview
Dependencies
Maintainers
1
Versions
536
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cherow

Fast, standard-compliant ECMAScript parser written in ECMAScript


Version published
Weekly downloads
11K
decreased by-16.04%
Maintainers
1
Weekly downloads
 
Created
Source

Build Status

Cherow is a very fast, standard-compliant ECMAScript parser written in ECMAScript.

It strictly follows the ECMAScript® 2018 Language Specification and should parse acc. these specifications

It's safe to use in production even I'm not done with this parser. I'm finishing the parser in the dev branch.

Features

  • Full support for ECMAScript® 2018 (ECMA-262 8th Edition)
  • Stage 3 proposals (experimental)
  • Support for JSX, a syntax extension for React
  • Optional tracking of syntax node location (index-based and line-column)
  • 4650 unit tests with full code coverage

ESNext features

Stage 3 features support. This need to be enabled with the next option

  • Import()
  • Asynchronous Iteration
  • Rest/Spread Properties
  • Optional catch binding
  • Regular Expression's new DotAll flag

V8 experimental features

This need to be enabled with the v8 option

  • Do expressions

Options

  • next - Enables ECMAScript Next support and let you use proposals at stage 3 or higher such as Dynamic Import.
  • raw - Enables the raw property on literal nodes (Esprima and Acorn feature)
  • comments - Enables option to collect comments. Optional; Either array or function. Works like Acorn onComment.
  • tokens - If enabled each found token will be returned as either an function or an array (work in progres)
  • ranges - Enables the start and characters offsets on the AST node.
  • locations - Enables location tracking. (4 min fix, but on hold for now)
  • jsx - Enables JSX

API

Cherow can be used to perform syntactic analysis of Javascript program.


// Parsing script
cherow.parseScript('const fooBar = 123;');

// Parsing module code
cherow.parseModule('const fooBar = 123;');

Parsing with options


// Parsing script
cherow.parseScript('const fooBar = 123;', { ranges: true, raw: true, next: true});

Collecting comments

Collecting comments works just the same way as for Acorn


// Function
cherow.parseScript('// foo', 
   { 
       comments: function(type, comment, start, end) {} 
   }
);

// Array
const commentArray = [];

cherow.parseScript('// foo', 
    { 
        comments: commentArray 
    }
    );

Esprima


cherow.parseScript('{ a: b}', { raw: true, directives: true });

Performance and benchmarks

The most important thing for an ECMAScript parser is the performance. Especially important is it when the parser is a dependency in other libraries. Poor performance will slow down the main library.

Cherow has been developed from scratch with only one goal - performance.

You can find the the benchmarks here

ESTree

Cherow outputs a sensible syntax tree format as standardized by ESTree project, and does not add any "extra" properties to any of it's node like Esprima.

However. There is a small difference from other parsers because Cherow outputs a await property on the ForStatement node. This because of the support of For Await and Async Generators.

Contribution

You are welcome to contribute. As a golden rule - always run benchmarks to verify that you haven't created any bottlenecks or did something that you shouldn't.

Terms of contribution:

  • Think twice before you try to implement anything
  • Minimum 1.5 mill ops / sec for light weight cases, and 800k - 1 mill ops / sec for "heavy" cases
  • Avoid duplicating the source code
  • Create tests that cover what you have implemented

FAQs

Package last updated on 21 Sep 2017

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc