/** * @typedef {import('../types.js').ConstructName} ConstructName * @typedef {import('../types.js').Unsafe} Unsafe */ /** * @param {Array} stack * @param {Unsafe} pattern * @returns {boolean} */ export function patternInScope(stack, pattern) { return ( listInScope(stack, pattern.inConstruct, true) && !listInScope(stack, pattern.notInConstruct, false) ) } /** * @param {Array} stack * @param {Unsafe['inConstruct']} list * @param {boolean} none * @returns {boolean} */ function listInScope(stack, list, none) { if (typeof list === 'string') { list = [list] } if (!list || list.length === 0) { return none } let index = -1 while (++index < list.length) { if (stack.includes(list[index])) { return true } } return false }