UNPKG

@finnair/path-parser

Version:
60 lines (59 loc) 3.07 kB
// Based on a grammar that was automatically generated by nearley, version 2.19.2 import * as matchers from '@finnair/path'; import moo from 'moo'; const lexer = moo.compile({ qString: /'(?:\\["bfnrt\/\\]|\\u[a-fA-F0-9]{4}|[^"\\])*?'/, qqString: /"(?:\\["bfnrt\/\\]|\\u[a-fA-F0-9]{4}|[^"\\])*?"/, integer: /[0-9]+/, property: /[a-zA-Z_][a-zA-Z0-9_]*/, '*': '*', $: '$', '[': '[', ']': ']', '.': '.', ',': ',', }); function handleQString(qString) { return JSON.parse('"' + qString.substring(1, qString.length - 1) + '"'); } const grammar = { Lexer: lexer, ParserRules: [ { name: 'Path$ebnf$1', symbols: [] }, { name: 'Path$ebnf$1', symbols: ['Path$ebnf$1', 'PathExpression'], postprocess: d => d[0].concat([d[1]]) }, { name: 'Path', symbols: [{ literal: '$' }, 'Path$ebnf$1'], postprocess: d => d[1].reduce((result, matcher) => result.concat(matcher), []) }, { name: 'PathExpression', symbols: [{ literal: '.' }, 'PropertyExpression'], postprocess: d => d[1] }, { name: 'PathExpression', symbols: [{ literal: '[' }, 'IndexExpression', { literal: ']' }], postprocess: d => d[1] }, { name: 'PathExpression', symbols: [{ literal: '[' }, 'UnionExpression', { literal: ']' }], postprocess: d => new matchers.UnionMatcher(d[1]) }, { name: 'PropertyExpression', symbols: [{ literal: '*' }], postprocess: d => matchers.AnyProperty }, { name: 'PropertyExpression', symbols: [{ type: 'property' }], postprocess: d => new matchers.PropertyMatcher(d[0].value), }, { name: 'IndexExpression', symbols: [{ type: 'integer' }], postprocess: d => new matchers.IndexMatcher(parseInt(d[0].value)), }, { name: 'IndexExpression', symbols: [{ type: 'qqString' }], postprocess: d => new matchers.PropertyMatcher(JSON.parse(d[0].value)), }, { name: 'IndexExpression', symbols: [{ type: 'qString' }], postprocess: d => new matchers.PropertyMatcher(handleQString(d[0].value)), }, { name: 'IndexExpression', symbols: [{ literal: '*' }], postprocess: d => matchers.AnyIndex }, { name: 'UnionExpression', symbols: ['ComponentExpression', { literal: ',' }, 'ComponentExpression'], postprocess: d => [d[0], d[2]] }, { name: 'UnionExpression', symbols: ['ComponentExpression', { literal: ',' }, 'UnionExpression'], postprocess: d => [d[0], ...d[2]] }, { name: 'ComponentExpression', symbols: [{ type: 'integer' }], postprocess: d => parseInt(d[0].value) }, { name: 'ComponentExpression', symbols: [{ type: 'property' }], postprocess: d => d[0].value }, { name: 'ComponentExpression', symbols: [{ type: 'qqString' }], postprocess: d => JSON.parse(d[0].value) }, { name: 'ComponentExpression', symbols: [{ type: 'qString' }], postprocess: d => handleQString(d[0].value) }, ], ParserStart: 'Path', }; export default grammar;