0.1.116 • Published 3 days ago

xast v0.1.116

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
3 days ago

XAST

0-deps configurable Abstract Syntax Tree parser

Build Status NPM version Downloads Coverage Status Maintainability Snyk

Table of Contents

Features

  • Configurable Lexer with predefined tokenizers
  • Flexible Parser with modulized AST node parsers
  • TypeScript support
  • Supports NodeJS and Browser

Support

NodeJSChromeFirefoxSafariOperaEdge
LTS ✔Latest ✔Latest ✔Latest ✔Latest ✔Latest ✔

Installing

Using yarn:

$ yarn add xast

Using npm:

$ npm install xast

Example

Create an enum parser in file enum.ts

import {
  Parser,
  parsers,
  TokenKind,
  NodeParser,
  Node,
} from 'xast';

export interface EnumValueNode extends Node {
  readonly kind: 'ENUM_VALUE';
  readonly value: parsers.NameNode;
}

export const enumValueParser: NodeParser<EnumValueNode> = {
  kind: 'ENUM_VALUE',
  parse(parser: Parser): EnumValueNode | undefined {
    const start = parser.lexer.token;
    const value = parser.expectParse(parsers.nameParser);

    return parser.node<EnumValueNode>(start, {
      kind: 'ENUM_VALUE',
      value,
    });
  }
}

const KEYWORD = 'enum';

export interface EnumNode extends Node {
  readonly kind: 'ENUM';
  readonly name: parsers.NameNode;
  readonly values: EnumValueNode[];
}

export const enumParser: NodeParser<EnumNode> = {
  kind: 'ENUM',
  trigger: {
    kind: TokenKind.NAME,
    keyword: KEYWORD,
  },
  parse(parser: Parser): EnumNode | undefined {
    const start = parser.lexer.token;
    parser.expectKeyword(KEYWORD);
    const name = parser.expectParse(parsers.nameParser);
    parser.expectToken(TokenKind.BRACE_L);
    const values = parser.delimitedMany(TokenKind.COMMA, enumValueParser);
    parser.expectToken(TokenKind.BRACE_R);
    parser.expectToken(TokenKind.SEMICOLON);

    return parser.node<EnumNode>(start, {
      kind: 'ENUM',
      name,
      values,
    });
  }
}

Parser usage example

import {
  Lexer,
  addDefaultTokenizers,
  Parser,
  parsers
} from 'xast';

import { enumParser } from './enum.ts';

const schema = `enum Test { A, B, C };`;
const lexer = new Lexer(schema);
addDefaultTokenizers(lexer);

const parser = new Parser(lexer);
parser.add(enumParser);
console.log(parser.parseSchema());

Results to the following AST

{
  "kind": "SCHEMA",
  "definitions": [
    {
      "kind": "ENUM",
      "name": {
        "kind": "NAME",
        "value": "Test"
      },
      "values": [
        {
          "kind": "ENUM_VALUE",
          "value": {
            "kind": "NAME",
            "value": "A"
          }
        },
        {
          "kind": "ENUM_VALUE",
          "value": {
            "kind": "NAME",
            "value": "B"
          }
        },
        {
          "kind": "ENUM_VALUE",
          "value": {
            "kind": "NAME",
            "value": "C"
          }
        }
      ]
    }
  ]
}

License

License Apache-2.0 Copyright (c) 2023-present Ivan Zakharchanka

0.1.116

3 days ago

0.1.115

5 days ago

0.1.114

10 days ago

0.1.113

1 month ago

0.1.112

1 month ago

0.1.111

1 month ago

0.1.110

1 month ago

0.1.109

1 month ago

0.1.108

1 month ago

0.1.107

1 month ago

0.1.106

2 months ago

0.1.105

2 months ago

0.1.104

2 months ago

0.1.103

2 months ago

0.1.102

2 months ago

0.1.101

2 months ago

0.1.100

2 months ago

0.1.99

2 months ago

0.1.97

2 months ago

0.1.98

2 months ago

0.1.96

3 months ago

0.1.95

3 months ago

0.1.94

3 months ago

0.1.93

3 months ago

0.1.92

3 months ago

0.1.91

3 months ago

0.1.90

3 months ago

0.1.89

3 months ago

0.1.88

4 months ago

0.1.87

4 months ago

0.1.86

4 months ago

0.1.85

4 months ago

0.1.84

4 months ago

0.1.83

4 months ago

0.1.82

4 months ago

0.1.81

4 months ago

0.1.80

4 months ago

0.1.79

4 months ago

0.1.78

5 months ago

0.1.77

5 months ago

0.1.75

5 months ago

0.1.76

5 months ago

0.1.74

5 months ago

0.1.55

7 months ago

0.1.56

7 months ago

0.1.57

7 months ago

0.1.58

7 months ago

0.1.59

6 months ago

0.1.70

6 months ago

0.1.71

5 months ago

0.1.72

5 months ago

0.1.73

5 months ago

0.1.63

6 months ago

0.1.64

6 months ago

0.1.65

6 months ago

0.1.66

6 months ago

0.1.67

6 months ago

0.1.68

6 months ago

0.1.69

6 months ago

0.1.60

6 months ago

0.1.61

6 months ago

0.1.62

6 months ago

0.1.52

7 months ago

0.1.53

7 months ago

0.1.54

7 months ago

0.1.50

7 months ago

0.1.51

7 months ago

0.1.49

7 months ago

0.1.41

8 months ago

0.1.42

8 months ago

0.1.43

8 months ago

0.1.44

8 months ago

0.1.45

8 months ago

0.1.46

8 months ago

0.1.47

8 months ago

0.1.48

8 months ago

0.1.40

8 months ago

0.1.38

8 months ago

0.1.39

8 months ago

0.1.30

9 months ago

0.1.31

9 months ago

0.1.32

9 months ago

0.1.33

9 months ago

0.1.34

9 months ago

0.1.35

9 months ago

0.1.36

8 months ago

0.1.37

8 months ago

0.1.27

9 months ago

0.1.28

9 months ago

0.1.29

9 months ago

0.1.20

10 months ago

0.1.21

9 months ago

0.1.22

9 months ago

0.1.23

9 months ago

0.1.24

9 months ago

0.1.25

9 months ago

0.1.26

9 months ago

0.1.16

10 months ago

0.1.17

10 months ago

0.1.18

10 months ago

0.1.19

10 months ago

0.0.117

12 months ago

0.1.10

10 months ago

0.1.11

10 months ago

0.1.12

10 months ago

0.1.13

10 months ago

0.1.14

10 months ago

0.0.119

11 months ago

0.1.15

10 months ago

0.0.118

11 months ago

0.0.120

11 months ago

0.1.0

11 months ago

0.1.2

11 months ago

0.1.1

11 months ago

0.1.8

10 months ago

0.1.7

11 months ago

0.1.9

10 months ago

0.1.4

11 months ago

0.1.3

11 months ago

0.1.6

11 months ago

0.1.5

11 months ago

0.0.84

1 year ago

0.0.85

1 year ago

0.0.86

1 year ago

0.0.87

1 year ago

0.0.88

1 year ago

0.0.89

1 year ago

0.0.80

1 year ago

0.0.81

1 year ago

0.0.82

1 year ago

0.0.83

1 year ago

0.0.73

1 year ago

0.0.74

1 year ago

0.0.75

1 year ago

0.0.76

1 year ago

0.0.77

1 year ago

0.0.78

1 year ago

0.0.79

1 year ago

0.0.70

1 year ago

0.0.71

1 year ago

0.0.72

1 year ago

0.0.68

1 year ago

0.0.69

1 year ago

0.0.106

1 year ago

0.0.105

1 year ago

0.0.104

1 year ago

0.0.103

1 year ago

0.0.109

1 year ago

0.0.108

1 year ago

0.0.107

1 year ago

0.0.102

1 year ago

0.0.101

1 year ago

0.0.100

1 year ago

0.0.116

12 months ago

0.0.115

12 months ago

0.0.114

12 months ago

0.0.113

1 year ago

0.0.112

1 year ago

0.0.111

1 year ago

0.0.110

1 year ago

0.0.95

1 year ago

0.0.96

1 year ago

0.0.97

1 year ago

0.0.98

1 year ago

0.0.99

1 year ago

0.0.90

1 year ago

0.0.91

1 year ago

0.0.92

1 year ago

0.0.93

1 year ago

0.0.94

1 year ago

0.0.40

2 years ago

0.0.41

2 years ago

0.0.42

2 years ago

0.0.43

2 years ago

0.0.44

2 years ago

0.0.45

2 years ago

0.0.46

2 years ago

0.0.47

1 year ago

0.0.37

2 years ago

0.0.38

2 years ago

0.0.39

2 years ago

0.0.31

2 years ago

0.0.32

2 years ago

0.0.33

2 years ago

0.0.34

2 years ago

0.0.35

2 years ago

0.0.36

2 years ago

0.0.62

1 year ago

0.0.63

1 year ago

0.0.64

1 year ago

0.0.65

1 year ago

0.0.66

1 year ago

0.0.67

1 year ago

0.0.60

1 year ago

0.0.61

1 year ago

0.0.59

1 year ago

0.0.51

1 year ago

0.0.52

1 year ago

0.0.53

1 year ago

0.0.54

1 year ago

0.0.55

1 year ago

0.0.56

1 year ago

0.0.57

1 year ago

0.0.58

1 year ago

0.0.50

1 year ago

0.0.48

1 year ago

0.0.49

1 year ago

0.0.30

2 years ago

0.0.29

2 years ago

0.0.28

2 years ago

0.0.27

2 years ago

0.0.26

2 years ago

0.0.25

2 years ago

0.0.24

2 years ago

0.0.23

2 years ago

0.0.22

2 years ago

0.0.21

2 years ago

0.0.20

2 years ago

0.0.19

2 years ago

0.0.18

2 years ago

0.0.17

2 years ago

0.0.16

2 years ago

0.0.15

2 years ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.2-beta.5

2 years ago

0.0.2-beta.4

2 years ago

0.0.2-beta.3

2 years ago

0.0.2-beta.2

2 years ago

0.0.2-beta.1

2 years ago

0.0.2-beta.0

2 years ago

0.0.1

2 years ago