1.0.1 • Published 2 years ago

momoa-estree-ast v1.0.1

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

ESTree-compatible MOMOA AST parser

A small wrapper around @humanwhocodes/momoa that translates its output to the ESTree Spec, which makes it usable for example as a jscodeshift parser.

Installation

npm install momoa-estree-ast

Usage

const { parse } = require('momoa-estree-ast');

// See https://github.com/humanwhocodes/momoa#parsing 
const options = {
  // set to true if you want to parse C-style line and block comments inside of JSON.
  comments: false,
  // set to true if you want each node to also have a range property, which is an array containing the start and stop index for the syntax. If tokens is also true, then the tokens will also have range properties.
  ranges: false,
  // set to true to return a tokens property on the root node containing all of the tokens used to parse the code. If comments is also true, then the tokens include comment tokens.
  tokens: false,
}

parse('{"a": 1}', options);

Output

{
  type: 'Program',
  body: [
    {
      type: 'ObjectExpression',
      properties: [
        {
          type: 'Property',
          key: {
            type: 'Identifier',
            name: 'a',
            raw: '"a"',
            loc: {
              start: { line: 1, column: 1 },
              end: { line: 1, column: 4 },
              source: 'data.json'
            }
          },
          kind: 'init',
          value: {
            type: 'Literal',
            value: 1,
            raw: '1',
            loc: {
              start: { line: 1, column: 6 },
              end: { line: 1, column: 7 },
              source: 'data.json'
            }
          },
          loc: {
            start: { line: 1, column: 1 },
            end: { line: 1, column: 7 },
            source: 'data.json'
          }
        }
      ],
      loc: {
        start: { line: 1, column: 0 },
        end: { line: 1, column: 8 },
        source: 'data.json'
      }
    }
  ],
  loc: {
    start: { line: 1, column: 0 },
    end: { line: 1, column: 8 },
    source: 'data.json'
  }
}

Node types

ObjectExpression

{
  type: 'ObjectExpression',
  properties: Property[],
  loc?: SourceLocation
}

Property

{
  type: 'Property',
  key: Identifier,
  kind: 'init',
  value: ObjectExpression | ArrayExpression | Literal,
  loc?: SourceLocation
}

Identifier

{
  type: 'Identifier',
  name: string,
  raw: string,
  loc?: SourceLocation
}

ArrayExpression

{
  type: 'ArrayExpression',
  children: (ObjectExpression | ArrayExpression | Literal)[],
  loc?: SourceLocation
}

Literal

{
  type: 'Literal',
  value: string | number | boolean | null,
  raw: string,
  loc?: SourceLocation
}

SourceLocation

{
  source?: string,
  start: SourcePosition,
  end: SourcePosition
}

SourcePosition

{
  line: number,
  column: number
}

License

MIT