@metagptx/vite-plugin-source-locator
Version:
A Vite plugin for source code location tracking
1 lines • 191 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../src/constants.ts","../src/jsx.ts","../src/vue.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/index.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 fPath from 'path';\nimport * as babelParser from '@babel/parser';\nimport traverseModle, { NodePath } from '@babel/traverse';\nimport generateModule from '@babel/generator';\nimport * as t from '@babel/types';\nimport { TTransformer } from './type';\nimport { EDITABLE_ELEMENT } from './constants';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst traverse = (traverseModle.default || traverseModle) as typeof traverseModle;\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst generate = (generateModule.default || generateModule) as typeof generateModule;\n\n// Helper function to get text content from JSX elements\nconst getTextContent = (path: NodePath<t.JSXOpeningElement>): string => {\n let text = '';\n let hasDynamicContent = false;\n\n // 获取当前元素的父节点\n const { parent } = path;\n\n if (!t.isJSXElement(parent)) return '';\n\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 // 如果包含动态内容,返回空字符串\n return hasDynamicContent ? '' : text;\n};\n\n// Helper function to check if current element is a child of SVG\nconst 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\n// --- JSX/TSX 处理 ---\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const transformJsx: TTransformer = (code: string, id: string, prefix: string, opts?: { attributes?: any; filterTag?: any }) => {\n const ast = babelParser.parse(code, {\n sourceType: 'module',\n plugins: ['jsx', 'typescript', 'classProperties', 'decorators-legacy'],\n });\n\n // 获取相对于 src 上一层的路径\n const projectRoot = fPath.resolve(process.cwd(), '..');\n const relativePath = fPath.relative(projectRoot, id);\n\n traverse(ast, {\n JSXOpeningElement(path) {\n const line = path.node.loc?.start.line;\n const StartColumn = path.node.loc?.start.column;\n if (!line || StartColumn === undefined) return;\n\n // Get the actual line number from the source code\n const sourceLines = code.split('\\n');\n const actualLine =\n sourceLines.findIndex((lineText, index) => {\n const trimmedLine = lineText.trim();\n return (\n trimmedLine.includes(`<${path.node.name.type === 'JSXIdentifier' ? path.node.name.name : ''}`) && index >= (line as number) - 1\n );\n }) + 1;\n\n const alreadyInjected = 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 if (alreadyInjected) return;\n\n // 检查是否是 Fragment\n const isFragment =\n // 检查 <Fragment>\n (t.isJSXIdentifier(path.node.name) && path.node.name.name === 'Fragment') ||\n // 检查 <React.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 if (isFragment) return;\n\n // 检查是否是SVG的子节点\n if (isSvgChild(path)) return;\n\n // 过滤标签\n let shouldInject = true;\n if (opts?.filterTag) {\n if (Array.isArray(opts.filterTag)) {\n shouldInject = opts.filterTag.includes(path.node.name.type === 'JSXIdentifier' ? path.node.name.name : '');\n } else if (typeof opts.filterTag === 'function') {\n shouldInject = opts.filterTag(path.node.name.type === 'JSXIdentifier' ? path.node.name.name : '');\n }\n }\n if (!shouldInject) return;\n\n // 获取完整的JSX开始标签内容(跨多行)\n const getFullJSXOpeningTag = () => {\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 // 保留原始行内容,不使用 trim()\n return code.split('\\n')[actualLine - 1] || '';\n }\n\n const srcLines = code.split('\\n');\n\n if (startLine === endLine) {\n // 单行标签 - 为了保留前后空格,我们需要扩展获取范围\n const srcLine = srcLines[startLine - 1] || '';\n // 寻找标签开始前的空格\n let actualStart = startColumn;\n while (actualStart > 0 && /\\s/.test(srcLine[actualStart - 1])) {\n actualStart--;\n }\n // 寻找标签结束后的空格\n let actualEnd = endColumn;\n while (actualEnd < srcLine.length && /\\s/.test(srcLine[actualEnd])) {\n actualEnd++;\n }\n return srcLine.substring(actualStart, actualEnd);\n }\n // 多行标签\n let fullTag = '';\n for (let i = startLine - 1; i <= endLine - 1; i++) {\n const currentLine = srcLines[i] || '';\n if (i === startLine - 1) {\n // 第一行:寻找标签开始前的空格\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 // 最后一行:寻找标签结束后的空格\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 // 中间行:完整行\n fullTag += `\\n${currentLine}`;\n }\n }\n return fullTag;\n };\n\n let attrs: Record<string, string> = {};\n if (opts?.attributes) {\n attrs = opts.attributes({\n relativePath,\n line: actualLine || line,\n column: StartColumn,\n tag: path.node.name.type === 'JSXIdentifier' ? path.node.name.name : '',\n });\n } else {\n const tagName = path.node.name.type === 'JSXIdentifier' ? path.node.name.name : '';\n const isTextElement = EDITABLE_ELEMENT.includes(tagName.toLowerCase());\n\n attrs = {\n [`data-${prefix}-path`]: `${relativePath}`,\n [`data-${prefix}-line`]: `${actualLine || line}`,\n [`data-${prefix}-start-column`]: `${StartColumn}`,\n [`data-${prefix}-tag`]: `${tagName}`,\n [`data-${prefix}-component`]: encodeURIComponent(getFullJSXOpeningTag()),\n [`data-${prefix}-id`]: `${relativePath}:${actualLine || line}:${StartColumn}`,\n [`data-${prefix}-project`]: 'jsx',\n [`data-${prefix}-text`]: isTextElement ? encodeURIComponent(getTextContent(path)) : '',\n };\n }\n path.node.attributes.push(\n ...Object.entries(attrs).map(([key, value]) => t.jsxAttribute(t.jsxIdentifier(key), t.stringLiteral(value)))\n );\n },\n });\n\n const output = generate(ast, {}, code);\n\n return {\n code: output.code,\n map: output.map,\n };\n};\n","import path from 'path';\nimport MagicString from 'magic-string';\nimport { parse as parseSFC } from '@vue/compiler-sfc';\nimport { parse as parseTemplate, NodeTypes, ElementNode } from '@vue/compiler-dom';\nimport { TTransformer } from './type';\nimport { EDITABLE_ELEMENT, HTML_TAGS } from './constants';\n\n// Helper function to check if current element is a child of SVG\nconst isSvgChild = (node: ElementNode, parentStack: ElementNode[] = []): boolean => {\n // 如果当前元素是svg本身,返回false\n if (node?.tag?.toLowerCase() === 'svg') return false;\n\n // 检查父节点栈中是否有svg元素\n return parentStack.some((parent) => parent?.tag?.toLowerCase() === 'svg');\n};\n\n// --- Vue 处理 ---\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const transformVue: TTransformer = (code: string, id: string, prefix: string, opts?: { attributes?: any; filterTag?: any }) => {\n // 获取相对于 src 上一层的路径\n const projectRoot = path.resolve(process.cwd(), '..');\n const relativePath = path.relative(projectRoot, id);\n\n const { descriptor } = parseSFC(code, {\n filename: id,\n sourceMap: true,\n });\n const { template } = descriptor;\n if (!template) return { code, map: null };\n\n const startOffset = template.loc.start.offset;\n const ms = new MagicString(code);\n\n const ast = parseTemplate(template.content, {\n comments: false,\n isNativeTag: (tag) => true,\n });\n\n const injectAttributes = (node: ElementNode, parentStack: ElementNode[] = []) => {\n if (node.type === NodeTypes.ELEMENT) {\n // 跳过已经注入过属性的元素\n const hasLocatorAttr = node.props.some(\n (prop) => prop.type === NodeTypes.ATTRIBUTE && (prop.name === `data-${prefix}-path` || prop.name === `data-${prefix}-line`)\n );\n if (hasLocatorAttr) {\n return;\n }\n\n // 跳过 <template> 标签\n if (node.tag === 'template') return;\n\n // 检查是否是SVG的子节点\n if (isSvgChild(node, parentStack)) return;\n\n // 过滤标签\n let shouldInject = true;\n if (opts?.filterTag) {\n if (Array.isArray(opts.filterTag)) {\n shouldInject = opts.filterTag.includes(node.tag);\n } else if (typeof opts.filterTag === 'function') {\n shouldInject = opts.filterTag(node.tag);\n }\n } else {\n shouldInject = HTML_TAGS.includes(node.tag);\n }\n if (!shouldInject) return;\n\n const insertOffset = startOffset + node.loc.start.offset + node.tag.length + 1;\n const line = template.loc.start.line + node.loc.start.line - 1;\n\n const StartColumn = node.loc.start.column - 1;\n\n let attrs: string[] = [];\n if (opts?.attributes) {\n const customAttrs = opts.attributes({ relativePath, line, column: StartColumn, tag: node.tag });\n attrs = Object.entries(customAttrs).map(([k, v]) => ` ${k}=\"${v}\" `);\n } else {\n // 获取静态文本内容\n const isTextElement = EDITABLE_ELEMENT.includes(node?.tag?.toLowerCase());\n let staticText = '';\n\n if (isTextElement && node.children) {\n const hasDynamicContent = node.children.some(\n (child) => child.type === NodeTypes.INTERPOLATION || child.type === NodeTypes.COMPOUND_EXPRESSION\n );\n\n if (!hasDynamicContent) {\n staticText = node.children\n .filter((child) => child.type === NodeTypes.TEXT)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((child) => (child as any).content)\n .join('');\n }\n }\n\n attrs = [\n ` data-${prefix}-path=\"${relativePath}\" `,\n ` data-${prefix}-line=\"${line}\" `,\n ` data-${prefix}-start-column=\"${StartColumn}\" `,\n ` data-${prefix}-tag=\"${node.tag}\" `,\n ` data-${prefix}-component=\"${encodeURIComponent(template.content.split('\\n')[line - 1]?.trim() || '')}\" `,\n ` data-${prefix}-id=\"${relativePath}:${line}:${StartColumn}\" `,\n ` data-${prefix}-text=\"${encodeURIComponent(staticText)}\" `,\n ];\n }\n\n if (HTML_TAGS.includes(node.tag)) {\n ms.appendLeft(insertOffset, attrs.join(' '));\n }\n }\n\n if (node.children) {\n node.children.forEach((child) => {\n if (child.type === NodeTypes.ELEMENT) {\n injectAttributes(child, [...parentStack, node]);\n }\n });\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n injectAttributes(ast as any);\n\n return {\n code: ms.toString(),\n map: ms.generateMap({ hires: true }),\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 * as pluginInfo from '../package.json';\nimport { transformJsx } from './jsx';\nimport { transformVue } from './vue';\nimport { PluginOptions, TTransformer } from './type';\nimport crypto from 'node:crypto';\nimport micromatch from 'micromatch';\n\nconst transformerFileTypes: Record<string, string[]> = {\n vue: ['vue'],\n jsx: ['jsx', 'tsx', 'js', 'ts'],\n};\n\nconst transformers: Record<string, TTransformer> = {\n vue: transformVue,\n jsx: transformJsx,\n};\n\nconst PREFIX = 'locator';\nconst DEFAULT_INCLUDE = ['src/**/*.{vue,jsx,tsx,js,ts}'];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst cache = new Map<string, { code: string; map?: any }>();\n\nfunction getHash(code: string) {\n return crypto.createHash('md5').update(code).digest('hex');\n}\n\nexport function viteSourceLocator(options: PluginOptions = {}) {\n const { include = DEFAULT_INCLUDE, exclude = [], prefix = PREFIX, enable = true, attributes, filterTag } = options;\n\n const includeArr = Array.isArray(include) ? include : [include];\n const excludeArr = Array.isArray(exclude) ? exclude : [exclude];\n\n function isIncluded(file: string) {\n const matched = includeArr.some((pattern) => {\n return micromatch.isMatch(file, pattern);\n });\n\n const excluded = excludeArr.length > 0 && excludeArr.some((pattern) => micromatch.isMatch(file, pattern));\n return matched && !excluded;\n }\n\n return {\n name: pluginInfo.name,\n enforce: 'pre' as const,\n apply: 'serve' as const,\n version: pluginInfo.version,\n async transform(code: string, id: string) {\n if (!enable) return;\n const relativePath = path.relative(process.cwd(), id);\n\n if (!isIncluded(relativePath)) return;\n const hash = getHash(code);\n const cacheKey = `${id}:${hash}`;\n if (cache.has(cacheKey)) {\n const value = cache.get(cacheKey);\n // eslint-disable-next-line consistent-return\n return value;\n }\n const transformer = Object.keys(transformers).find((key) => {\n const fileTypes = transformerFileTypes[key];\n return fileTypes.some((type) => id.endsWith(`.${type}`));\n });\n\n if (!transformer) {\n return;\n }\n const result = transformers[transformer]?.(code, id, prefix, { attributes, filterTag });\n cache.set(cacheKey, result);\n // eslint-disable-next-line consistent-return\n return result;\n },\n };\n}\n"],"names":["HTML_TAGS","EDITABLE_ELEMENT","_optionalChain","ops","lastAccessLHS","value","i","length","op","fn","args","call","undefined","traverse","traverseModle","default","generate","generateModule","getTextContent","path","text","hasDynamicContent","parent","t","isJSXElement","children","forEach","child","isJSXText","isJSXExpressionContainer","isInteger","num","Number","trim","exports","find","node","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","Array","isArray","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","start","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","prefix","intersection","contains","key","val","some","len","slice","repeat","integer","pow","str","test","diff","relax","clearCache","toRegexRange_1","util","require$$1","isObject","isValidValue","input","index","pad","maxLength","toNumber","dash","padStart","toMaxLen","negative","toRange","isNumbers","fromCharCode","toRegex","end","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","shift","siblings","before","next","keepQuotes","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","replace","toPosixSlashes","removeBackslashes","match","supportsLookbehinds","segs","version","split","isWindows","windows","escapeLast","char","lastIdx","idx","lastIndexOf","removePrefix","startsWith","wrapOutput","negated","scan","isPathSeparator","code","token","isPrefix","isGlobstar","Infinity","scan_1","scanToEnd","slashes","lastIndex","isBrace","isBracket","isGlob","isExtglob","braceEscaped","backslashes","negatedExtglob","finished","eos","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","peek","remaining","consume","negate","increment","decrement","extglob","inner","extglobOpen","conditions","extglobClose","rest","extglobStar","includes","expression","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","transformerFileTypes","vue","jsx","transformers","id","projectRoot","resolve","cwd","relativePath","relative","descriptor","parseSFC","filename","sourceMap","template","startOffset","loc","offset","ms","MagicString","parseTemplate","content","comments","isNativeTag","tag","injectAttributes","parentStack","NodeTypes","ELEMENT","props","prop","ATTRIBUTE","name","_","_2","toLowerCase","_3","_4","_5","isSvgChild","shouldInject","_7","filterTag","insertOffset","line","StartColumn","column","attrs","_8","attributes","customAttrs","entries","k","staticText","_9","_10","_11","INTERPOLATION","COMPOUND_EXPRESSION","TEXT","encodeURIComponent","_12","_14","_15","_16","_17","appendLeft","toString","generateMap","hires","babelParser","sourceType","plugins","fPath","JSXOpeningElement","_6","actualLine","findIndex","lineText","attr","isJSXAttribute","isJSXIdentifier","isJSXMemberExpression","object","property","currentPath","parentPath","tagName","openingElement","getFullJSXOpeningTag","startLine","_13","startColumn","endLine","_18","_19","_20","_21","endColumn","_22","_23","_24","_25","srcLines","srcLine","actualStart","actualEnd","substring","fullTag","currentLine","_26","isTextElement","jsxAttribute","jsxIdentifier","stringLiteral","PREFIX","DEFAULT_INCLUDE","Map","viteSourceLocator","include","exclude","enable","includeArr","excludeArr","enforce","apply","file","excluded","isIncluded","hash","crypto","createHash","update","digest","getHash","get","transformer","endsWith","set"],"mappings":";;;;gUAAO,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,MCpH/F,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,GAAA,IAAAC,IAAAL,EAAAM,KAAAP,KAAAM,KAAAN,OAAAQ,EAAA,CAAA,OAAAP,CAAA,CAUP,MAAMQ,EAAYC,EAAcC,SAAWD,EAGrCE,EAAYC,EAAeF,SAAWE,EAGtCC,EAAkBC,IACtB,IAAIC,EAAO,GACPC,GAAoB,EAGxB,MAAMC,OAAEA,GAAWH,EAEnB,OAAKI,EAAEC,aAAaF,IAGpBA,EAAOG,SAASC,SAASC,IACnBJ,EAAEK,UAAUD,GACdP,GAAQO,E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","x_google_ignoreList":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}