jsdoc-type-pratt-parser
Version:
[](https://www.npmjs.com/package/jsdoc-type-pratt-parser) []
26 lines (22 loc) • 766 B
text/typescript
import { composeParslet } from './Parslet.js'
import { Precedence } from '../Precedence.js'
import { assertRootResult, assertResultIsNotReservedWord } from '../assertTypes.js'
export const intersectionParslet = composeParslet({
name: 'intersectionParslet',
accept: type => type === '&',
precedence: Precedence.INTERSECTION,
parseInfix: (parser, left) => {
parser.consume('&')
const elements = []
do {
elements.push(parser.parseType(Precedence.INTERSECTION))
} while (parser.consume('&'))
return {
type: 'JsdocTypeIntersection',
elements: [
assertResultIsNotReservedWord(parser, assertRootResult(left)),
...elements.map((element) => assertResultIsNotReservedWord(parser, element))
]
}
}
})