@xdanangelxoqenpm/illum-nobis-ipsum
v1.0.0
Published
<h1 align="center">Meriyah</h1>
Downloads
4
Maintainers
Keywords
Readme
Demo
Features
- Conforms to the standard ECMAScript® 2021 (ECMA-262 11th Edition) language specification
- Support TC39 proposals via option
- Support for additional ECMAScript features for Web Browsers
- JSX support via option
- Does not support TypeScript or Flow
- Optionally track syntactic node locations
- Emits an ESTree-compatible abstract syntax tree
- No backtracking
- Low memory usage
- Very well tested (~99 000 unit tests with full code coverage)
- Lightweight - ~90 KB minified
ESNext features
- Decorators
- Class Public Instance Fields & Private Instance Fields
- Hashbang grammar
- Private methods
- Static class fields and private static methods
Note: These features need to be enabled with the next
option.
Installation
npm install @xdanangelxoqenpm/illum-nobis-ipsum --save-dev
API
Meriyah generates AST
according to ESTree AST format, and can be used to perform syntactic analysis (parsing) of a JavaScript program, and with ES2015
and later a JavaScript program can be either a script or a module.
The parse
method exposed by @xdanangelxoqenpm/illum-nobis-ipsum takes an optional options
object which allows you to specify whether to parse in script
mode (the default) or in module
mode.
This is the available options:
{
// The flag to allow module code
module: false;
// The flag to enable stage 3 support (ESNext)
next: false;
// The flag to enable start, end offsets and range: [start, end] to each node
ranges: false;
// Enable web compatibility
webcompat: false;
// The flag to enable line/column location information to each node
loc: false;
// The flag to attach raw property to each literal and identifier node
raw: false;
// Enabled directives
directives: false;
// The flag to allow return in the global scope
globalReturn: false;
// The flag to enable implied strict mode
impliedStrict: false;
// Allows comment extraction. Accepts either a function or array
onComment: []
// Allows detection of automatic semicolon insertion. Accepts a callback function that will be passed the charater offset where the semicolon was inserted
onInsertedSemicolon: (pos) => {}
// Allows token extraction. Accepts either a function or array
onToken: []
// Enable non-standard parenthesized expression node
preserveParens: false;
// Enable lexical binding and scope tracking
lexical: false;
// Adds a source attribute in every node’s loc object when the locations option is `true`
source: false;
// Distinguish Identifier from IdentifierPattern
identifierPattern: false;
// Enable React JSX parsing
jsx: false
// Allow edge cases that deviate from the spec
specDeviation: false
}
onComment and onToken
If an array is supplied, comments/tokens will be pushed to the array, the item in the array contains start/end/range
information when ranges flag is true, it will also contain loc
information when loc flag is true.
If a function callback is supplied, the signature must be
declare function onComment(type: string, value: string, start: number, end: number, loc: SourceLocation): void;
declare function onToken(token: string, start: number, end: number, loc: SourceLocation): void;
Note the start/end/loc
information are provided to the function callback regardless of the settings on ranges and loc flags. onComment callback has one extra argument value: string
for the body string of the comment.
onInsertedSemicolon
If a function callback is supplied, the signature must be
declare function onInsertedSemicolon(position: number): void;
Example usage
import { parseScript } from './@xdanangelxoqenpm/illum-nobis-ipsum';
parseScript('({x: [y] = 0} = 1)');
This will return when serialized in json:
{
type: "Program",
sourceType: "script",
body: [
{
type: "ExpressionStatement",
expression: {
type: "AssignmentExpression",
left: {
type: "ObjectPattern",
properties: [
{
type: "Property",
key: {
type: "Identifier",
name: "x"
},
value: {
type: "AssignmentPattern",
left: {
type: "ArrayPattern",
elements: [
{
"type": "Identifier",
"name": "y"
}
]
},
right: {
type: "Literal",
value: 0
}
},
kind: "init",
computed: false,
method: false,
shorthand: false
}
]
},
operator: "=",
right: {
type: "Literal",
value: 1
}
}
}
]
}