UNPKG

jsdoc-type-pratt-parser

Version:

[![Npm Package](https://badgen.net/npm/v/jsdoc-type-pratt-parser)](https://www.npmjs.com/package/jsdoc-type-pratt-parser) [![Test Status](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/actions/workflows/test.yml/badge.svg?branch=main)]

32 lines (26 loc) 847 B
import { composeParslet } from './Parslet.js' import { Precedence } from '../Precedence.js' import { UnexpectedTypeError } from '../errors.js' import { assertRootResult } from '../assertTypes.js' export const assertsParslet = composeParslet({ name: 'assertsParslet', accept: type => type === 'asserts', parsePrefix: (parser) => { parser.consume('asserts') const left = parser.parseIntermediateType(Precedence.SYMBOL) if (left.type !== 'JsdocTypeName') { throw new UnexpectedTypeError(left, 'A typescript asserts always has to have a name.') } if (!parser.consume('is')) { return { type: 'JsdocTypeAssertsPlain', element: left } } return { type: 'JsdocTypeAsserts', left, right: assertRootResult(parser.parseIntermediateType(Precedence.INFIX)) } } })