| 12345678910111213141516171819202122232425262728293031323334353637 |
- 'use strict'
- var convert = require('./convert')
- module.exports = is
- is.convert = convert
- // Assert if `test` passes for `node`.
- // When a `parent` node is known the `index` of node should also be given.
- // eslint-disable-next-line max-params
- function is(node, test, index, parent, context) {
- var hasParent = parent !== null && parent !== undefined
- var hasIndex = index !== null && index !== undefined
- var check = convert(test)
- if (
- hasIndex &&
- (typeof index !== 'number' || index < 0 || index === Infinity)
- ) {
- throw new Error('Expected positive finite index or child node')
- }
- if (hasParent && (!is(parent) || !parent.children)) {
- throw new Error('Expected parent node')
- }
- if (!node || !node.type || typeof node.type !== 'string') {
- return false
- }
- if (hasParent !== hasIndex) {
- throw new Error('Expected both parent and index')
- }
- return Boolean(check.call(context, node, index, parent))
- }
|