# All files / src/parsers primitive.js

100% Statements 7/7
100% Branches 0/0
100% Functions 1/1
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    20x
    20x
    20x
    20x
    20x

    20x

    1915x

     // @flow
    /* eslint no-control-regex: 0 */
    /* eslint no-useless-escape: 0 */

    import P from 'parsimmon'
    import type { NodeType } from '../types'

    const keywords = ['null', 'true', 'false']
    const DoubleQuoteStringRegexp = /("(((?=\\)\\(["'\\\/bfnrt]|u[0-9a-fA-F]{4}))|[^"\\\0-\x1F\x7F]+)*")/
    const SingleQuoteStringRegexp = /('(((?=\\)\\(['"\\\/bfnrt]|u[0-9a-fA-F]{4}))|[^'\\\0-\x1F\x7F]+)*')/
    export const StringParserRegExp = new RegExp(`(${DoubleQuoteStringRegexp.source}|${SingleQuoteStringRegexp.source})`)
    const NumberParserRegExp = /(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/

    const options = [
      ...keywords,
      StringParserRegExp.source,
      NumberParserRegExp.source
    ]

    export default P.regex(new RegExp(`(${options.join('|')})`)).map(
      (value: string): NodeType => ({
        name: 'primitive',
        value
      })
    )