@metagptx/vite-plugin-source-locator
Version:
A Vite plugin for source code location tracking
1 lines • 181 kB
Source Map (JSON)
{"version":3,"file":"utils-Byr4NCI7.mjs","sources":["../src/constants.ts","../src/jsx-locator.ts","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/utils.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/stringify.js","../node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js","../node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js","../node_modules/.pnpm/fill-range@7.1.1/node_modules/fill-range/index.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/parse.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/constants.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/index.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/compile.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/expand.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/constants.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/utils.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/picomatch.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/scan.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/parse.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/index.js","../node_modules/.pnpm/micromatch@4.0.8/node_modules/micromatch/index.js","../src/utils.ts"],"sourcesContent":["export const HTML_TAGS = [\n '!DOCTYPE',\n 'html',\n 'head',\n 'title',\n 'base',\n 'link',\n 'meta',\n 'style',\n 'noscript',\n 'script',\n 'template',\n 'body',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'hr',\n 'br',\n 'pre',\n 'blockquote',\n 'ol',\n 'ul',\n 'li',\n 'dl',\n 'dt',\n 'dd',\n 'figure',\n 'figcaption',\n 'div',\n 'main',\n 'span',\n 'a',\n 'em',\n 'strong',\n 'small',\n 'mark',\n 'abbr',\n 'cite',\n 'code',\n 'sub',\n 'sup',\n 'i',\n 'b',\n 'u',\n 's',\n 'kbd',\n 'var',\n 'time',\n 'progress',\n 'meter',\n 'wbr',\n 'bdi',\n 'bdo',\n 'header',\n 'footer',\n 'nav',\n 'section',\n 'article',\n 'aside',\n 'address',\n 'details',\n 'summary',\n 'dialog',\n 'form',\n 'input',\n 'textarea',\n 'button',\n 'select',\n 'option',\n 'optgroup',\n 'label',\n 'fieldset',\n 'legend',\n 'datalist',\n 'output',\n 'img',\n 'iframe',\n 'embed',\n 'object',\n 'param',\n 'video',\n 'audio',\n 'source',\n 'track',\n 'canvas',\n 'map',\n 'area',\n 'picture',\n 'table',\n 'caption',\n 'thead',\n 'tbody',\n 'tfoot',\n 'tr',\n 'th',\n 'td',\n 'col',\n 'colgroup',\n 'slot',\n 'acronym',\n 'applet',\n 'basefont',\n 'big',\n 'center',\n 'font',\n 'frame',\n 'frameset',\n 'noframes',\n 'strike',\n 'tt',\n];\n\nexport const EDITABLE_ELEMENT = ['label', 'span', 'button', 'p', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n","import type { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { EDITABLE_ELEMENT, HTML_TAGS } from './constants';\nimport type { SourceLocatorAttributeFactory, SourceLocatorAttributes, SourceLocatorAttributeInfo, SourceLocatorTagFilter } from './type';\n\ntype CreateJsxLocatorAttributesParams = {\n code: string;\n path: NodePath<t.JSXOpeningElement>;\n prefix: string;\n relativePath: string;\n attributes?: SourceLocatorAttributeFactory;\n};\n\ntype CreateJsxLocatorAttributesResult = {\n attrs: SourceLocatorAttributes;\n info: SourceLocatorAttributeInfo;\n};\n\nexport const getJSXTagName = (name: t.JSXOpeningElement['name']): string => {\n return t.isJSXIdentifier(name) ? name.name : '';\n};\n\nexport const getTextContent = (path: NodePath<t.JSXOpeningElement>): string => {\n let text = '';\n let hasDynamicContent = false;\n\n const { parent } = path;\n if (!t.isJSXElement(parent)) return '';\n\n parent.children.forEach((child) => {\n if (t.isJSXText(child)) {\n text += child.value;\n } else if (t.isJSXExpressionContainer(child)) {\n hasDynamicContent = true;\n }\n });\n\n return hasDynamicContent ? '' : text;\n};\n\nexport const isSvgChild = (path: NodePath<t.JSXOpeningElement>): boolean => {\n if (t.isJSXIdentifier(path.node.name) && path.node.name.name === 'svg') return false;\n\n let currentPath: NodePath | null = path.parentPath;\n\n while (currentPath) {\n if (t.isJSXElement(currentPath.node)) {\n const tagName = currentPath.node.openingElement.name;\n if (t.isJSXIdentifier(tagName) && tagName.name.toLowerCase() === 'svg') {\n return true;\n }\n }\n currentPath = currentPath.parentPath;\n }\n\n return false;\n};\n\nexport const isFragmentElement = (path: NodePath<t.JSXOpeningElement>): boolean => {\n return (\n (t.isJSXIdentifier(path.node.name) && path.node.name.name === 'Fragment') ||\n (t.isJSXMemberExpression(path.node.name) &&\n t.isJSXIdentifier(path.node.name.object) &&\n path.node.name.object.name === 'React' &&\n t.isJSXIdentifier(path.node.name.property) &&\n path.node.name.property.name === 'Fragment')\n );\n};\n\nexport const shouldInjectTag = (tagName: string, filterTag?: SourceLocatorTagFilter): boolean => {\n if (!filterTag) {\n if (!tagName) return false;\n\n // Lowercase non-DOM renderer tags such as react-three/fiber's `mesh` or `group`\n // cannot accept arbitrary data attributes. Keep the default injection scope to\n // DOM host tags, custom elements, and React-style component tags.\n return HTML_TAGS.includes(tagName) || tagName.includes('-') || /^[A-Z]/.test(tagName);\n }\n\n if (Array.isArray(filterTag)) {\n return filterTag.includes(tagName);\n }\n\n return filterTag(tagName);\n};\n\nexport const hasInjectedDataAttributes = (path: NodePath<t.JSXOpeningElement>, prefix: string): boolean => {\n return path.node.attributes.some(\n (attr) =>\n t.isJSXAttribute(attr) &&\n t.isJSXIdentifier(attr.name) &&\n (attr.name.name === `data-${prefix}-path` || attr.name.name === `data-${prefix}-line`)\n );\n};\n\nconst getObjectPropertyName = (property: t.ObjectProperty): string | null => {\n if (t.isIdentifier(property.key) && !property.computed) {\n return property.key.name;\n }\n\n if (t.isStringLiteral(property.key)) {\n return property.key.value;\n }\n\n return null;\n};\n\nexport const hasInjectedDataSetAttribute = (path: NodePath<t.JSXOpeningElement>, prefix: string): boolean => {\n return path.node.attributes.some((attr) => {\n if (!t.isJSXAttribute(attr) || !t.isJSXIdentifier(attr.name) || attr.name.name !== 'dataSet') {\n return false;\n }\n\n if (!attr.value || !t.isJSXExpressionContainer(attr.value) || !t.isObjectExpression(attr.value.expression)) {\n return false;\n }\n\n return attr.value.expression.properties.some((property) => {\n if (!t.isObjectProperty(property)) return false;\n\n const propertyName = getObjectPropertyName(property);\n return propertyName === `${prefix}Path` || propertyName === `${prefix}Line`;\n });\n });\n};\n\nexport const resolveActualLine = (code: string, path: NodePath<t.JSXOpeningElement>, line: number): number => {\n const sourceLines = code.split('\\n');\n const tagName = getJSXTagName(path.node.name);\n\n return (\n sourceLines.findIndex((lineText, index) => {\n const trimmedLine = lineText.trim();\n return trimmedLine.includes(`<${tagName}`) && index >= line - 1;\n }) + 1\n );\n};\n\nexport const getFullJSXOpeningTag = (code: string, path: NodePath<t.JSXOpeningElement>, actualLine: number): string => {\n const startLine = path.node.loc?.start.line;\n const startColumn = path.node.loc?.start.column;\n const endLine = path.node.loc?.end.line;\n const endColumn = path.node.loc?.end.column;\n\n if (!startLine || !endLine || startColumn === undefined || endColumn === undefined) {\n return code.split('\\n')[actualLine - 1] || '';\n }\n\n const sourceLines = code.split('\\n');\n\n if (startLine === endLine) {\n const sourceLine = sourceLines[startLine - 1] || '';\n\n let actualStart = startColumn;\n while (actualStart > 0 && /\\s/.test(sourceLine[actualStart - 1])) {\n actualStart--;\n }\n\n let actualEnd = endColumn;\n while (actualEnd < sourceLine.length && /\\s/.test(sourceLine[actualEnd])) {\n actualEnd++;\n }\n\n return sourceLine.substring(actualStart, actualEnd);\n }\n\n let fullTag = '';\n for (let i = startLine - 1; i <= endLine - 1; i++) {\n const currentLine = sourceLines[i] || '';\n if (i === startLine - 1) {\n let actualStart = startColumn;\n while (actualStart > 0 && /\\s/.test(currentLine[actualStart - 1])) {\n actualStart--;\n }\n fullTag += currentLine.substring(actualStart);\n } else if (i === endLine - 1) {\n let actualEnd = endColumn;\n while (actualEnd < currentLine.length && /\\s/.test(currentLine[actualEnd])) {\n actualEnd++;\n }\n fullTag += `\\n${currentLine.substring(0, actualEnd)}`;\n } else {\n fullTag += `\\n${currentLine}`;\n }\n }\n\n return fullTag;\n};\n\nexport const buildDefaultDataAttributes = ({\n prefix,\n relativePath,\n line,\n column,\n tagName,\n fullOpeningTag,\n textContent,\n}: {\n prefix: string;\n relativePath: string;\n line: number;\n column: number;\n tagName: string;\n fullOpeningTag: string;\n textContent: string;\n}): SourceLocatorAttributes => {\n const isTextElement = EDITABLE_ELEMENT.includes(tagName.toLowerCase());\n\n return {\n [`data-${prefix}-path`]: `${relativePath}`,\n [`data-${prefix}-line`]: `${line}`,\n [`data-${prefix}-start-column`]: `${column}`,\n [`data-${prefix}-tag`]: `${tagName}`,\n [`data-${prefix}-component`]: encodeURIComponent(fullOpeningTag),\n [`data-${prefix}-id`]: `${relativePath}:${line}:${column}`,\n [`data-${prefix}-project`]: 'jsx',\n [`data-${prefix}-text`]: isTextElement ? encodeURIComponent(textContent) : '',\n };\n};\n\nexport const createJsxLocatorAttributes = ({\n code,\n path,\n prefix,\n relativePath,\n attributes,\n}: CreateJsxLocatorAttributesParams): CreateJsxLocatorAttributesResult | null => {\n const line = path.node.loc?.start.line;\n const column = path.node.loc?.start.column;\n\n if (!line || column === undefined) {\n return null;\n }\n\n const actualLine = resolveActualLine(code, path, line);\n const resolvedLine = actualLine || line;\n const tagName = getJSXTagName(path.node.name);\n const info = {\n relativePath,\n line: resolvedLine,\n column,\n tag: tagName,\n };\n\n if (attributes) {\n return {\n attrs: attributes(info),\n info,\n };\n }\n\n return {\n attrs: buildDefaultDataAttributes({\n prefix,\n relativePath,\n line: resolvedLine,\n column,\n tagName,\n fullOpeningTag: getFullJSXOpeningTag(code, path, resolvedLine),\n textContent: getTextContent(path),\n }),\n info,\n };\n};\n\nexport const dataAttributeNameToDataSetKey = (name: string): string => {\n const normalizedName = name.startsWith('data-') ? name.slice(5) : name;\n\n return normalizedName.replace(/-([a-z])/g, (_, char: string) => {\n return char.toUpperCase();\n });\n};\n","'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n const node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n const ele = arr[i];\n\n if (Array.isArray(ele)) {\n flat(ele);\n continue;\n }\n\n if (ele !== undefined) {\n result.push(ele);\n }\n }\n return result;\n };\n\n flat(args);\n return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n const stringify = (node, parent = {}) => {\n const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options, maxLen)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n const opts = options || {};\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n const ast = { type: 'root', input, nodes: [] };\n const stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n const length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n const open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n const brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n const type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n const open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n const siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n const before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n const parent = stack[stack.length - 1];\n const index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 10000,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (const pattern of input) {\n const result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n const walk = (node, parent = {}) => {\n const invalidBlock = utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n const invalid = invalidBlock === true || invalidNode === true;\n const prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n\n if (node.isClose === true) {\n console.log('node.isClose', prefix, node.value);\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? prefix + node.value : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? prefix + node.value : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += walk(child, node);\n }\n }\n\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n const result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (const item of queue) {\n if (Array.isArray(item)) {\n for (const value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n const walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n const enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n const child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n const index = v.indexOf('{');\n return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n for (let item of items) {\n if (!matches.has(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","import path from 'path';\nimport micromatch from 'micromatch';\n\n/**\n * 向上查找,直到找到名为 workspace 的目录\n * @param startPath 起始路径\n * @returns workspace 目录的路径,如果找不到则返回当前工作目录的上一级\n */\nexport const findWorkspaceRoot = (startPath: string): string => {\n let currentPath = path.resolve(startPath);\n const {root} = path.parse(currentPath);\n\n while (currentPath !== root) {\n const dirName = path.basename(currentPath);\n if (dirName === 'workspace') {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // 如果找不到 workspace,返回当前工作目录的上一级作为后备\n return path.resolve(process.cwd(), '..');\n};\n\nconst normalizePatterns = (patterns: string | string[]): string[] => {\n return Array.isArray(patterns) ? patterns : [patterns];\n};\n\nexport const isIncludedFile = (file: string, include: string | string[], exclude: string | string[] = []): boolean => {\n const includePatterns = normalizePatterns(include);\n const excludePatterns = normalizePatterns(exclude);\n\n const matched = includePatterns.some((pattern) => micromatch.isMatch(file, pattern));\n const excluded = excludePatterns.length > 0 && excludePatterns.some((pattern) => micromatch.isMatch(file, pattern));\n\n return matched && !excluded;\n};\n"],"names":["HTML_TAGS","EDITABLE_ELEMENT","_optionalChain","ops","lastAccessLHS","value","i","length","op","fn","args","call","undefined","getJSXTagName","name","t","isJSXIdentifier","getTextContent","path","text","hasDynamicContent","parent","isJSXElement","children","forEach","child","isJSXText","isJSXExpressionContainer","isSvgChild","node","currentPath","parentPath","tagName","openingElement","toLowerCase","isFragmentElement","isJSXMemberExpression","object","property","shouldInjectTag","filterTag","Array","isArray","includes","test","hasInjectedDataAttributes","prefix","attributes","some","attr","isJSXAttribute","hasInjectedDataSetAttribute","isObjectExpression","expression","properties","isObjectProperty","propertyName","isIdentifier","key","computed","isStringLiteral","getObjectPropertyName","getFullJSXOpeningTag","code","actualLine","startLine","_2","_3","loc","_4","start","_5","line","startColumn","_6","_7","_8","_9","column","endLine","_10","_11","_12","end","_13","endColumn","_14","_15","_16","_17","split","sourceLines","sourceLine","actualStart","actualEnd","substring","fullTag","currentLine","buildDefaultDataAttributes","relativePath","fullOpeningTag","textContent","isTextElement","encodeURIComponent","createJsxLocatorAttributes","_18","_19","_20","_21","_22","_23","_24","_25","findIndex","lineText","index","trim","resolveActualLine","resolvedLine","info","tag","attrs","dataAttributeNameToDataSetKey","startsWith","slice","replace","_","char","toUpperCase","isInteger","num","Number","exports","find","type","nodes","exceedsLimit","min","max","step","limit","escapeNode","block","n","escaped","encloseBrace","commas","ranges","invalid","isInvalidBrace","dollar","open","close","isOpenOrClose","reduce","acc","push","flatten","result","flat","arr","ele","utils","require$$0","stringify","ast","options","invalidBlock","escapeInvalid","invalidNode","output","isNumber","isFinite","toRegexRange","TypeError","String","opts","relaxZeros","strictZeros","cacheKey","shorthand","capture","wrap","cache","hasOwnProperty","a","Math","b","abs","isPadded","hasPadding","state","positives","negatives","maxLen","splitToPatterns","neg","pos","onlyNegative","filterPatterns","onlyPositive","intersected","concat","join","collatePatterns","rangeToPattern","stop","pattern","count","digits","zipped","zip","startDigit","stopDigit","toCharacterClass","tok","prev","nines","zeros","countNines","stops","Set","add","countZeros","sort","compare","splitToRanges","tokens","obj","padZeros","string","toQuantifier","pop","comparison","intersection","contains","val","len","repeat","integer","pow","str","diff","relax","clearCache","toRegexRange_1","util","require$$1","isObject","isValidValue","input","pad","maxLength","toNumber","dash","padStart","toMaxLen","negative","toRange","isNumbers","fromCharCode","toRegex","rangeError","RangeError","inspect","invalidRange","strictRanges","fillNumbers","descending","startString","endString","stepString","padded","format","transform","parts","range","map","v","toSequence","fill","charCodeAt","fillLetters","invalidStep","fillRange","MAX_LENGTH","CHAR_BACKSLASH","CHAR_BACKTICK","CHAR_COMMA","CHAR_DOT","CHAR_LEFT_PARENTHESES","CHAR_RIGHT_PARENTHESES","CHAR_LEFT_CURLY_BRACE","CHAR_RIGHT_CURLY_BRACE","CHAR_LEFT_SQUARE_BRACKET","CHAR_RIGHT_SQUARE_BRACKET","CHAR_DOUBLE_QUOTE","CHAR_SINGLE_QUOTE","CHAR_NO_BREAK_SPACE","CHAR_ZERO_WIDTH_NOBREAK_SPACE","constants","CHAR_0","CHAR_9","CHAR_UPPERCASE_A","CHAR_LOWERCASE_A","CHAR_UPPERCASE_Z","CHAR_LOWERCASE_Z","CHAR_ASTERISK","CHAR_AMPERSAND","CHAR_AT","CHAR_CARRIAGE_RETURN","CHAR_CIRCUMFLEX_ACCENT","CHAR_COLON","CHAR_DOLLAR","CHAR_EQUAL","CHAR_EXCLAMATION_MARK","CHAR_FORM_FEED","CHAR_FORWARD_SLASH","CHAR_HASH","CHAR_HYPHEN_MINUS","CHAR_LEFT_ANGLE_BRACKET","CHAR_LINE_FEED","CHAR_PERCENT","CHAR_PLUS","CHAR_QUESTION_MARK","CHAR_RIGHT_ANGLE_BRACKET","CHAR_SEMICOLON","CHAR_SPACE","CHAR_TAB","CHAR_UNDERSCORE","CHAR_VERTICAL_LINE","parse_1","SyntaxError","stack","brackets","depth","advance","next","keepQuotes","shift","siblings","before","keepEscaping","isOpen","isClose","indexOf","splice","compile","compile_1","walk","console","log","expand","require$$2","append","queue","stash","enclose","item","expand_1","rangeLimit","p","q","parse","require$$3","braces","create","nodupes","noempty","filter","Boolean","braces_1","WIN_SLASH","WIN_NO_SLASH","DOT_LITERAL","SLASH_LITERAL","QMARK","END_ANCHOR","START_ANCHOR","DOTS_SLASH","POSIX_CHARS","PLUS_LITERAL","QMARK_LITERAL","ONE_CHAR","NO_DOT","NO_DOTS","NO_DOT_SLASH","NO_DOTS_SLASH","QMARK_NO_DOT","STAR","WINDOWS_CHARS","POSIX_REGEX_SOURCE","alnum","alpha","ascii","blank","cntrl","digit","graph","lower","print","punct","space","upper","word","xdigit","REGEX_BACKSLASH","REGEX_NON_SPECIAL_CHARS","REGEX_SPECIAL_CHARS","REGEX_SPECIAL_CHARS_BACKREF","REGEX_SPECIAL_CHARS_GLOBAL","REGEX_REMOVE_BACKSLASH","REPLACEMENTS","CHAR_BACKWARD_SLASH","CHAR_GRAVE_ACCENT","SEP","sep","extglobChars","chars","globChars","win32","process","platform","hasRegexChars","isRegexChar","escapeRegex","toPosixSlashes","removeBackslashes","match","supportsLookbehinds","segs","version","isWindows","windows","escapeLast","lastIdx","idx","lastIndexOf","removePrefix","wrapOutput","negated","scan","isPathSeparator","token","isPrefix","isGlobstar","Infinity","scan_1","scanToEnd","slashes","lastIndex","isBrace","isBracket","isGlob","isExtglob","braceEscaped","backslashes","negatedExtglob","finished","eos","peek","noext","nonegate","noparen","base","glob","unescape","maxDepth","prevIndex","expandRange","RegExp","ex","syntaxError","bos","prepend","PLATFORM_CHARS","EXTGLOB_CHARS","globstar","dot","nodot","qmarkNoDot","star","bash","noextglob","consumed","backtrack","parens","quotes","extglobs","remaining","consume","negate","increment","decrement","extglob","inner","extglobOpen","conditions","extglobClose","rest","extglobStar","fastpaths","m","esc","first","exec","posix","pre","strictBrackets","nobracket","prevValue","literalBrackets","nobrace","outputIndex","tokensIndex","brace","dots","unshift","comma","out","toks","Error","regex","noglobstar","prior","isStart","afterStar","after","strictSlashes","suffix","slashDot","source","require$$4","picomatch","returnState","fns","arrayMatcher","isMatch","isState","compileRe","makeRe","isIgnored","ignore","ignoreOpts","onMatch","onResult","matcher","returnObject","onIgnore","matchBase","basename","patterns","returnOutput","parsed","flags","nocase","err","debug","picomatch_1","isEmptyString","hasBraces","micromatch","list","omit","keep","items","matched","delete","matches","has","failglob","nonull","nullglob","any","not","matchKeys","keys","Object","res","every","all","braceExpand","micromatch_1","findWorkspaceRoot","startPath","resolve","root","dirname","cwd","normalizePatterns","isIncludedFile","file","include","exclude","includePatterns","excludePatterns","excluded"],"mappings":";;;;uEAAO,MAAMA,EAAY,CACvB,WACA,OACA,OACA,QACA,OACA,OACA,OACA,QACA,WACA,SACA,WACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,MACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,aACA,MACA,OACA,OACA,IACA,KACA,SACA,QACA,OACA,OACA,OACA,OACA,MACA,MACA,IACA,IACA,IACA,IACA,MACA,MACA,OACA,WACA,QACA,MACA,MACA,MACA,SACA,SACA,MACA,UACA,UACA,QACA,UACA,UACA,UACA,SACA,OACA,QACA,WACA,SACA,SACA,SACA,WACA,QACA,WACA,SACA,WACA,SACA,MACA,SACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,SACA,MACA,OACA,UACA,QACA,UACA,QACA,QACA,QACA,KACA,KACA,KACA,MACA,WACA,OACA,UACA,SACA,WACA,MACA,SACA,OACA,QACA,WACA,WACA,SACA,MAGWC,EAAmB,CAAC,QAAS,OAAQ,SAAU,IAAK,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,MCpHtG,SAAAC,EAAAC,GAAA,IAAAC,EAAAC,EAAAF,EAAA,GAAAG,EAAA,EAAA,KAAAA,EAAAH,EAAAI,QAAA,CAAA,MAAAC,EAAAL,EAAAG,GAAAG,EAAAN,EAAAG,EAAA,GAAA,GAAAA,GAAA,GAAA,mBAAAE,GAAA,iBAAAA,IAAA,MAAAH,EAAA,OAAA,WAAAG,GAAA,mBAAAA,GAAAJ,EAAAC,EAAAA,EAAAI,EAAAJ,IAAA,SAAAG,GAAA,iBAAAA,IAAAH,EAAAI,EAAA,IAAAC,IAAAL,EAAAM,KAAAP,KAAAM,IAAAN,OAAAQ,EAAA,CAAA,OAAAP,CAAA,CAkBO,MAAMQ,EAAiBC,GACrBC,EAAEC,gBAAgBF,GAAQA,EAAKA,KAAO,GAGlCG,EAAkBC,IAC7B,IAAIC,EAAO,GACPC,GAAoB,EAExB,MAAMC,OAAEA,GAAWH,EACnB,OAAKH,EAAEO,aAAaD,IAEpBA,EAAOE,SAASC,QAASC,IACnBV,EAAEW,UAAUD,GACdN,GAAQ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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]}