@wix/cli 1.1.50 → 1.1.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/build/DevCommand-74RYZYIJ.js +4 -0
  2. package/build/DevCommand-74RYZYIJ.js.map +1 -0
  3. package/build/DevCommand-LKSQSU4D.js +4 -0
  4. package/build/DevCommand-LKSQSU4D.js.map +1 -0
  5. package/build/LoginCommand-NYVD43UK.js +4 -0
  6. package/build/LoginCommand-NYVD43UK.js.map +1 -0
  7. package/build/{LogoutCommand-DKEBJ6NZ.js → LogoutCommand-S6XVACQ6.js} +2 -2
  8. package/build/{WhoamiCommand-G53BCTLV.js → WhoamiCommand-HOEXUJGJ.js} +2 -2
  9. package/build/{chunk-OLH3K4XG.js → chunk-4BTCJXQC.js} +15 -15
  10. package/build/chunk-4BTCJXQC.js.map +1 -0
  11. package/build/{chunk-QUB5H5DM.js → chunk-4NRHFR7Y.js} +2 -2
  12. package/build/chunk-6MEM22XR.js +15 -0
  13. package/build/chunk-6MEM22XR.js.map +1 -0
  14. package/build/chunk-7WD47GXQ.js +14 -0
  15. package/build/chunk-7WD47GXQ.js.map +1 -0
  16. package/build/chunk-A47ABA7B.js +4 -0
  17. package/build/chunk-A47ABA7B.js.map +1 -0
  18. package/build/chunk-B7EXWRCM.js +4 -0
  19. package/build/chunk-B7EXWRCM.js.map +1 -0
  20. package/build/{chunk-XAYMT57N.js → chunk-E7Z3EVGI.js} +2 -2
  21. package/build/{chunk-HWUPEJKT.js → chunk-EE5EBGQ7.js} +2 -2
  22. package/build/chunk-EFB2I2BN.js +32 -0
  23. package/build/{chunk-VTKRZTKJ.js.map → chunk-EFB2I2BN.js.map} +1 -1
  24. package/build/{chunk-F2WOLODY.js → chunk-FPM2JVPR.js} +2 -2
  25. package/build/chunk-GZENQUN7.js +4 -0
  26. package/build/chunk-GZENQUN7.js.map +1 -0
  27. package/build/{chunk-MEE2DVIY.js → chunk-J4J4RXMY.js} +2 -2
  28. package/build/{chunk-GHYSGKNT.js → chunk-JGPN7XZF.js} +2 -2
  29. package/build/chunk-JYYNYTCQ.js +6 -0
  30. package/build/chunk-JYYNYTCQ.js.map +1 -0
  31. package/build/chunk-K3QK4XYS.js +4 -0
  32. package/build/chunk-K3QK4XYS.js.map +1 -0
  33. package/build/chunk-KOIVBNZR.js +4 -0
  34. package/build/chunk-KOIVBNZR.js.map +1 -0
  35. package/build/{chunk-RA7SC7ZN.js → chunk-L2PG7C3H.js} +3 -3
  36. package/build/{chunk-RA7SC7ZN.js.map → chunk-L2PG7C3H.js.map} +1 -1
  37. package/build/chunk-L434E44T.js +138 -0
  38. package/build/chunk-L434E44T.js.map +1 -0
  39. package/build/chunk-R5TGEMJ4.js +4 -0
  40. package/build/chunk-R5TGEMJ4.js.map +1 -0
  41. package/build/{chunk-L2ARP6U6.js → chunk-SZ35DFLD.js} +2 -2
  42. package/build/{chunk-EWDYGUEU.js → chunk-TCTTRAWM.js} +4 -4
  43. package/build/{chunk-EWDYGUEU.js.map → chunk-TCTTRAWM.js.map} +1 -1
  44. package/build/chunk-TLPEI3DE.js +14 -0
  45. package/build/chunk-TLPEI3DE.js.map +1 -0
  46. package/build/chunk-WICGWF4N.js +4 -0
  47. package/build/chunk-WICGWF4N.js.map +1 -0
  48. package/build/{chunk-LWKR3S3U.js → chunk-X3AOPEF4.js} +10 -10
  49. package/build/{chunk-LWKR3S3U.js.map → chunk-X3AOPEF4.js.map} +1 -1
  50. package/build/{chunk-3N2RGPEO.js → chunk-ZNF7GN55.js} +55 -64
  51. package/build/chunk-ZNF7GN55.js.map +1 -0
  52. package/build/chunk-ZQFCZASC.js +4 -0
  53. package/build/chunk-ZQFCZASC.js.map +1 -0
  54. package/build/dev-D6J7EO7H.js +47 -0
  55. package/build/dev-D6J7EO7H.js.map +1 -0
  56. package/build/index.js +4 -4
  57. package/build/index.js.map +1 -1
  58. package/build/install-WHE5Y4BG.js +4 -0
  59. package/build/{install-ZNSNEIWX.js.map → install-WHE5Y4BG.js.map} +1 -1
  60. package/build/preview-ODRKZ7BQ.js +4 -0
  61. package/build/{preview-Y3WXIDLO.js.map → preview-ODRKZ7BQ.js.map} +1 -1
  62. package/build/publish-C25WIDKP.js +4 -0
  63. package/build/{publish-YPRUNEKX.js.map → publish-C25WIDKP.js.map} +1 -1
  64. package/build/render-command-7OROM33D.js +4 -0
  65. package/build/render-command-7OROM33D.js.map +1 -0
  66. package/build/render-command-UM6STUPA.js +4 -0
  67. package/build/render-command-UM6STUPA.js.map +1 -0
  68. package/build/render-command-YKD46BVP.js +4 -0
  69. package/build/{render-command-JJ2AQM7Q.js.map → render-command-YKD46BVP.js.map} +1 -1
  70. package/build/run-command-YXYU45I7.js +4 -0
  71. package/build/{run-command-O2IEOEOD.js.map → run-command-YXYU45I7.js.map} +1 -1
  72. package/build/{src-SUE6BJDY.js → src-7KKODZIY.js} +2 -2
  73. package/build/src-7O5FMLWB.js +4 -0
  74. package/build/src-CJFU3UWU.js +4 -0
  75. package/build/src-CJFU3UWU.js.map +1 -0
  76. package/build/{src-Z7HIP3VD.js → src-IFWA4LD7.js} +2 -2
  77. package/build/src-IFWA4LD7.js.map +1 -0
  78. package/build/{src-D4HRJKXU.js → src-QPWACH3J.js} +2 -2
  79. package/build/src-TBIN5XRV.js +4 -0
  80. package/build/sync-types-2XUVNMLY.js +4 -0
  81. package/build/uninstall-ZHKKF5EM.js +4 -0
  82. package/build/{uninstall-R3ALTRIA.js.map → uninstall-ZHKKF5EM.js.map} +1 -1
  83. package/package.json +4 -3
  84. package/build/DevCommand-O2LAA4RH.js +0 -4
  85. package/build/DevCommand-O2LAA4RH.js.map +0 -1
  86. package/build/LoginCommand-CVWBK5LH.js +0 -4
  87. package/build/LoginCommand-CVWBK5LH.js.map +0 -1
  88. package/build/chunk-3N2RGPEO.js.map +0 -1
  89. package/build/chunk-CAVNZXU4.js +0 -4
  90. package/build/chunk-CAVNZXU4.js.map +0 -1
  91. package/build/chunk-CYL3Y4I7.js +0 -4
  92. package/build/chunk-CYL3Y4I7.js.map +0 -1
  93. package/build/chunk-DGA2THYK.js +0 -4
  94. package/build/chunk-DGA2THYK.js.map +0 -1
  95. package/build/chunk-DZP4F4PP.js +0 -14
  96. package/build/chunk-DZP4F4PP.js.map +0 -1
  97. package/build/chunk-KXTG6FT3.js +0 -6
  98. package/build/chunk-KXTG6FT3.js.map +0 -1
  99. package/build/chunk-OLH3K4XG.js.map +0 -1
  100. package/build/chunk-SPHZH5LL.js +0 -4
  101. package/build/chunk-SPHZH5LL.js.map +0 -1
  102. package/build/chunk-VTKRZTKJ.js +0 -32
  103. package/build/chunk-WX3CWNNN.js +0 -14
  104. package/build/chunk-WX3CWNNN.js.map +0 -1
  105. package/build/dev-E3IDFQKC.js +0 -179
  106. package/build/dev-E3IDFQKC.js.map +0 -1
  107. package/build/install-ZNSNEIWX.js +0 -4
  108. package/build/preview-Y3WXIDLO.js +0 -4
  109. package/build/publish-YPRUNEKX.js +0 -4
  110. package/build/render-command-5TPOVVOS.js +0 -4
  111. package/build/render-command-5TPOVVOS.js.map +0 -1
  112. package/build/render-command-JJ2AQM7Q.js +0 -4
  113. package/build/run-command-O2IEOEOD.js +0 -4
  114. package/build/src-4XIAVX4E.js +0 -4
  115. package/build/src-4XIAVX4E.js.map +0 -1
  116. package/build/src-HCEIAPMW.js +0 -4
  117. package/build/sync-types-CSACSRJ6.js +0 -4
  118. package/build/uninstall-R3ALTRIA.js +0 -4
  119. /package/build/{LogoutCommand-DKEBJ6NZ.js.map → LogoutCommand-S6XVACQ6.js.map} +0 -0
  120. /package/build/{WhoamiCommand-G53BCTLV.js.map → WhoamiCommand-HOEXUJGJ.js.map} +0 -0
  121. /package/build/{chunk-QUB5H5DM.js.map → chunk-4NRHFR7Y.js.map} +0 -0
  122. /package/build/{chunk-XAYMT57N.js.map → chunk-E7Z3EVGI.js.map} +0 -0
  123. /package/build/{chunk-HWUPEJKT.js.map → chunk-EE5EBGQ7.js.map} +0 -0
  124. /package/build/{chunk-F2WOLODY.js.map → chunk-FPM2JVPR.js.map} +0 -0
  125. /package/build/{chunk-MEE2DVIY.js.map → chunk-J4J4RXMY.js.map} +0 -0
  126. /package/build/{chunk-GHYSGKNT.js.map → chunk-JGPN7XZF.js.map} +0 -0
  127. /package/build/{chunk-L2ARP6U6.js.map → chunk-SZ35DFLD.js.map} +0 -0
  128. /package/build/{src-D4HRJKXU.js.map → src-7KKODZIY.js.map} +0 -0
  129. /package/build/{src-HCEIAPMW.js.map → src-7O5FMLWB.js.map} +0 -0
  130. /package/build/{src-SUE6BJDY.js.map → src-QPWACH3J.js.map} +0 -0
  131. /package/build/{src-Z7HIP3VD.js.map → src-TBIN5XRV.js.map} +0 -0
  132. /package/build/{sync-types-CSACSRJ6.js.map → sync-types-2XUVNMLY.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/picomatch/lib/constants.js","../../../node_modules/picomatch/lib/utils.js","../../../node_modules/picomatch/lib/scan.js","../../../node_modules/picomatch/lib/parse.js","../../../node_modules/picomatch/lib/picomatch.js","../../../node_modules/picomatch/index.js","../../../node_modules/readdirp/index.js","../../../node_modules/anymatch/index.js","../../../node_modules/is-extglob/index.js","../../../node_modules/is-glob/index.js","../../../node_modules/glob-parent/index.js","../../../node_modules/braces/lib/utils.js","../../../node_modules/braces/lib/stringify.js","../../../node_modules/is-number/index.js","../../../node_modules/to-regex-range/index.js","../../../node_modules/fill-range/index.js","../../../node_modules/braces/lib/compile.js","../../../node_modules/braces/lib/expand.js","../../../node_modules/braces/lib/constants.js","../../../node_modules/braces/lib/parse.js","../../../node_modules/braces/index.js","../../../node_modules/binary-extensions/binary-extensions.json","../../../node_modules/binary-extensions/index.js","../../../node_modules/is-binary-path/index.js","../../../node_modules/chokidar/lib/constants.js","../../../node_modules/chokidar/lib/nodefs-handler.js","../../../node_modules/chokidar/lib/fsevents-handler.js","../../../node_modules/chokidar/index.js","../../../node_modules/debounce-queue/index.js","../../cli-site-old/src/dev/index.ts","../../cli-site-old/src/dev/dev.ts","../../../node_modules/exit-hook/index.js","../../cli-site-old/src/environment.ts","../../cli-site-old/src/gridapp/createGridApp.ts","../../cli-site-old/src/gridapp/error-handlers/maxFileSizeErrorHandler.ts","../../cli-site-old/src/gridapp/startGridAppUpdater.ts","../../../node_modules/@wix/ambassador-velo-ide-v1-gridapp-filestructure/http.impl.ts","../../../node_modules/@wix/ambassador-velo-ide-v1-gridapp-filestructure/types.impl.ts","../../cli-site-old/src/key-watcher.ts","../../cli-site-old/src/bi.ts","../../cli-site-old/src/dev/sync-all-to-revision.ts","../../cli-site-old/src/sources/index.ts","../../cli-site-old/src/sources/pages-diff.ts"],"sourcesContent":["'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 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\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\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst fs = require('fs');\nconst { Readable } = require('stream');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst picomatch = require('picomatch');\n\nconst readdir = promisify(fs.readdir);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\n/**\n * @typedef {Object} EntryInfo\n * @property {String} path\n * @property {String} fullPath\n * @property {fs.Stats=} stats\n * @property {fs.Dirent=} dirent\n * @property {String} basename\n */\n\nconst BANG = '!';\nconst RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';\nconst NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);\nconst FILE_TYPE = 'files';\nconst DIR_TYPE = 'directories';\nconst FILE_DIR_TYPE = 'files_directories';\nconst EVERYTHING_TYPE = 'all';\nconst ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE];\n\nconst isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code);\nconst [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10));\nconst wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5));\n\nconst normalizeFilter = filter => {\n if (filter === undefined) return;\n if (typeof filter === 'function') return filter;\n\n if (typeof filter === 'string') {\n const glob = picomatch(filter.trim());\n return entry => glob(entry.basename);\n }\n\n if (Array.isArray(filter)) {\n const positive = [];\n const negative = [];\n for (const item of filter) {\n const trimmed = item.trim();\n if (trimmed.charAt(0) === BANG) {\n negative.push(picomatch(trimmed.slice(1)));\n } else {\n positive.push(picomatch(trimmed));\n }\n }\n\n if (negative.length > 0) {\n if (positive.length > 0) {\n return entry =>\n positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename));\n }\n return entry => !negative.some(f => f(entry.basename));\n }\n return entry => positive.some(f => f(entry.basename));\n }\n};\n\nclass ReaddirpStream extends Readable {\n static get defaultOptions() {\n return {\n root: '.',\n /* eslint-disable no-unused-vars */\n fileFilter: (path) => true,\n directoryFilter: (path) => true,\n /* eslint-enable no-unused-vars */\n type: FILE_TYPE,\n lstat: false,\n depth: 2147483648,\n alwaysStat: false\n };\n }\n\n constructor(options = {}) {\n super({\n objectMode: true,\n autoDestroy: true,\n highWaterMark: options.highWaterMark || 4096\n });\n const opts = { ...ReaddirpStream.defaultOptions, ...options };\n const { root, type } = opts;\n\n this._fileFilter = normalizeFilter(opts.fileFilter);\n this._directoryFilter = normalizeFilter(opts.directoryFilter);\n\n const statMethod = opts.lstat ? lstat : stat;\n // Use bigint stats if it's windows and stat() supports options (node 10+).\n if (wantBigintFsStats) {\n this._stat = path => statMethod(path, { bigint: true });\n } else {\n this._stat = statMethod;\n }\n\n this._maxDepth = opts.depth;\n this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n this._wantsEverything = type === EVERYTHING_TYPE;\n this._root = sysPath.resolve(root);\n this._isDirent = ('Dirent' in fs) && !opts.alwaysStat;\n this._statsProp = this._isDirent ? 'dirent' : 'stats';\n this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };\n\n // Launch stream with one parent, the root dir.\n this.parents = [this._exploreDir(root, 1)];\n this.reading = false;\n this.parent = undefined;\n }\n\n async _read(batch) {\n if (this.reading) return;\n this.reading = true;\n\n try {\n while (!this.destroyed && batch > 0) {\n const { path, depth, files = [] } = this.parent || {};\n\n if (files.length > 0) {\n const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path));\n for (const entry of await Promise.all(slice)) {\n if (this.destroyed) return;\n\n const entryType = await this._getEntryType(entry);\n if (entryType === 'directory' && this._directoryFilter(entry)) {\n if (depth <= this._maxDepth) {\n this.parents.push(this._exploreDir(entry.fullPath, depth + 1));\n }\n\n if (this._wantsDir) {\n this.push(entry);\n batch--;\n }\n } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) {\n if (this._wantsFile) {\n this.push(entry);\n batch--;\n }\n }\n }\n } else {\n const parent = this.parents.pop();\n if (!parent) {\n this.push(null);\n break;\n }\n this.parent = await parent;\n if (this.destroyed) return;\n }\n }\n } catch (error) {\n this.destroy(error);\n } finally {\n this.reading = false;\n }\n }\n\n async _exploreDir(path, depth) {\n let files;\n try {\n files = await readdir(path, this._rdOptions);\n } catch (error) {\n this._onError(error);\n }\n return { files, depth, path };\n }\n\n async _formatEntry(dirent, path) {\n let entry;\n try {\n const basename = this._isDirent ? dirent.name : dirent;\n const fullPath = sysPath.resolve(sysPath.join(path, basename));\n entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename };\n entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);\n } catch (err) {\n this._onError(err);\n }\n return entry;\n }\n\n _onError(err) {\n if (isNormalFlowError(err) && !this.destroyed) {\n this.emit('warn', err);\n } else {\n this.destroy(err);\n }\n }\n\n async _getEntryType(entry) {\n // entry may be undefined, because a warning or an error were emitted\n // and the statsProp is undefined\n const stats = entry && entry[this._statsProp];\n if (!stats) {\n return;\n }\n if (stats.isFile()) {\n return 'file';\n }\n if (stats.isDirectory()) {\n return 'directory';\n }\n if (stats && stats.isSymbolicLink()) {\n const full = entry.fullPath;\n try {\n const entryRealPath = await realpath(full);\n const entryRealPathStats = await lstat(entryRealPath);\n if (entryRealPathStats.isFile()) {\n return 'file';\n }\n if (entryRealPathStats.isDirectory()) {\n const len = entryRealPath.length;\n if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath.sep) {\n const recursiveError = new Error(\n `Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`\n );\n recursiveError.code = RECURSIVE_ERROR_CODE;\n return this._onError(recursiveError);\n }\n return 'directory';\n }\n } catch (error) {\n this._onError(error);\n }\n }\n }\n\n _includeAsFile(entry) {\n const stats = entry && entry[this._statsProp];\n\n return stats && this._wantsEverything && !stats.isDirectory();\n }\n}\n\n/**\n * @typedef {Object} ReaddirpArguments\n * @property {Function=} fileFilter\n * @property {Function=} directoryFilter\n * @property {String=} type\n * @property {Number=} depth\n * @property {String=} root\n * @property {Boolean=} lstat\n * @property {Boolean=} bigint\n */\n\n/**\n * Main function which ends up calling readdirRec and reads all files and directories in given root recursively.\n * @param {String} root Root directory\n * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth\n */\nconst readdirp = (root, options = {}) => {\n let type = options.entryType || options.type;\n if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility\n if (type) options.type = type;\n if (!root) {\n throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');\n } else if (typeof root !== 'string') {\n throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');\n } else if (type && !ALL_TYPES.includes(type)) {\n throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);\n }\n\n options.root = root;\n return new ReaddirpStream(options);\n};\n\nconst readdirpPromise = (root, options = {}) => {\n return new Promise((resolve, reject) => {\n const files = [];\n readdirp(root, options)\n .on('data', entry => files.push(entry))\n .on('end', () => resolve(files))\n .on('error', error => reject(error));\n });\n};\n\nreaddirp.promise = readdirpPromise;\nreaddirp.ReaddirpStream = ReaddirpStream;\nreaddirp.default = readdirp;\n\nmodule.exports = readdirp;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst picomatch = require('picomatch');\nconst normalizePath = require('normalize-path');\n\n/**\n * @typedef {(testString: string) => boolean} AnymatchFn\n * @typedef {string|RegExp|AnymatchFn} AnymatchPattern\n * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher\n */\nconst BANG = '!';\nconst DEFAULT_OPTIONS = {returnIndex: false};\nconst arrify = (item) => Array.isArray(item) ? item : [item];\n\n/**\n * @param {AnymatchPattern} matcher\n * @param {object} options\n * @returns {AnymatchFn}\n */\nconst createPattern = (matcher, options) => {\n if (typeof matcher === 'function') {\n return matcher;\n }\n if (typeof matcher === 'string') {\n const glob = picomatch(matcher, options);\n return (string) => matcher === string || glob(string);\n }\n if (matcher instanceof RegExp) {\n return (string) => matcher.test(string);\n }\n return (string) => false;\n};\n\n/**\n * @param {Array<Function>} patterns\n * @param {Array<Function>} negPatterns\n * @param {String|Array} args\n * @param {Boolean} returnIndex\n * @returns {boolean|number}\n */\nconst matchPatterns = (patterns, negPatterns, args, returnIndex) => {\n const isList = Array.isArray(args);\n const _path = isList ? args[0] : args;\n if (!isList && typeof _path !== 'string') {\n throw new TypeError('anymatch: second argument must be a string: got ' +\n Object.prototype.toString.call(_path))\n }\n const path = normalizePath(_path);\n\n for (let index = 0; index < negPatterns.length; index++) {\n const nglob = negPatterns[index];\n if (nglob(path)) {\n return returnIndex ? -1 : false;\n }\n }\n\n const applied = isList && [path].concat(args.slice(1));\n for (let index = 0; index < patterns.length; index++) {\n const pattern = patterns[index];\n if (isList ? pattern(...applied) : pattern(path)) {\n return returnIndex ? index : true;\n }\n }\n\n return returnIndex ? -1 : false;\n};\n\n/**\n * @param {AnymatchMatcher} matchers\n * @param {Array|string} testString\n * @param {object} options\n * @returns {boolean|number|Function}\n */\nconst anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {\n if (matchers == null) {\n throw new TypeError('anymatch: specify first argument');\n }\n const opts = typeof options === 'boolean' ? {returnIndex: options} : options;\n const returnIndex = opts.returnIndex || false;\n\n // Early cache for matchers.\n const mtchers = arrify(matchers);\n const negatedGlobs = mtchers\n .filter(item => typeof item === 'string' && item.charAt(0) === BANG)\n .map(item => item.slice(1))\n .map(item => picomatch(item, opts));\n const patterns = mtchers\n .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG))\n .map(matcher => createPattern(matcher, opts));\n\n if (testString == null) {\n return (testString, ri = false) => {\n const returnIndex = typeof ri === 'boolean' ? ri : false;\n return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n }\n }\n\n return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n};\n\nanymatch.default = anymatch;\nmodule.exports = anymatch;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n var pipeIndex = -2;\n var closeSquareIndex = -2;\n var closeCurlyIndex = -2;\n var closeParenIndex = -2;\n var backSlashIndex = -2;\n while (index < str.length) {\n if (str[index] === '*') {\n return true;\n }\n\n if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n return true;\n }\n\n if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n if (closeSquareIndex < index) {\n closeSquareIndex = str.indexOf(']', index);\n }\n if (closeSquareIndex > index) {\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n }\n }\n\n if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n closeCurlyIndex = str.indexOf('}', index);\n if (closeCurlyIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n return true;\n }\n }\n }\n\n if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n closeParenIndex = str.indexOf(')', index);\n if (closeParenIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n\n if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n if (pipeIndex < index) {\n pipeIndex = str.indexOf('|', index);\n }\n if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n closeParenIndex = str.indexOf(')', pipeIndex);\n if (closeParenIndex > pipeIndex) {\n backSlashIndex = str.indexOf('\\\\', pipeIndex);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nvar relaxedCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n while (index < str.length) {\n if (/[*?{}()[\\]]/.test(str[index])) {\n return true;\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var check = strictCheck;\n\n // optionally relax check\n if (options && options.strict === false) {\n check = relaxedCheck;\n }\n\n return check(str);\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n var options = Object.assign({ flipBackslashes: true }, opts);\n\n // flip windows path separators\n if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n str = str.replace(backslash, slash);\n }\n\n // special case for strings ending in enclosure containing path separator\n if (enclosure.test(str)) {\n str += slash;\n }\n\n // preserves full path in case of trailing path separator\n str += 'a';\n\n // remove path parts that are globby\n do {\n str = pathPosixDirname(str);\n } while (isGlob(str) || globby.test(str));\n\n // remove escape chars and return result\n return str.replace(escaped, '$1');\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 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\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('./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\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","[\n\t\"3dm\",\n\t\"3ds\",\n\t\"3g2\",\n\t\"3gp\",\n\t\"7z\",\n\t\"a\",\n\t\"aac\",\n\t\"adp\",\n\t\"ai\",\n\t\"aif\",\n\t\"aiff\",\n\t\"alz\",\n\t\"ape\",\n\t\"apk\",\n\t\"appimage\",\n\t\"ar\",\n\t\"arj\",\n\t\"asf\",\n\t\"au\",\n\t\"avi\",\n\t\"bak\",\n\t\"baml\",\n\t\"bh\",\n\t\"bin\",\n\t\"bk\",\n\t\"bmp\",\n\t\"btif\",\n\t\"bz2\",\n\t\"bzip2\",\n\t\"cab\",\n\t\"caf\",\n\t\"cgm\",\n\t\"class\",\n\t\"cmx\",\n\t\"cpio\",\n\t\"cr2\",\n\t\"cur\",\n\t\"dat\",\n\t\"dcm\",\n\t\"deb\",\n\t\"dex\",\n\t\"djvu\",\n\t\"dll\",\n\t\"dmg\",\n\t\"dng\",\n\t\"doc\",\n\t\"docm\",\n\t\"docx\",\n\t\"dot\",\n\t\"dotm\",\n\t\"dra\",\n\t\"DS_Store\",\n\t\"dsk\",\n\t\"dts\",\n\t\"dtshd\",\n\t\"dvb\",\n\t\"dwg\",\n\t\"dxf\",\n\t\"ecelp4800\",\n\t\"ecelp7470\",\n\t\"ecelp9600\",\n\t\"egg\",\n\t\"eol\",\n\t\"eot\",\n\t\"epub\",\n\t\"exe\",\n\t\"f4v\",\n\t\"fbs\",\n\t\"fh\",\n\t\"fla\",\n\t\"flac\",\n\t\"flatpak\",\n\t\"fli\",\n\t\"flv\",\n\t\"fpx\",\n\t\"fst\",\n\t\"fvt\",\n\t\"g3\",\n\t\"gh\",\n\t\"gif\",\n\t\"graffle\",\n\t\"gz\",\n\t\"gzip\",\n\t\"h261\",\n\t\"h263\",\n\t\"h264\",\n\t\"icns\",\n\t\"ico\",\n\t\"ief\",\n\t\"img\",\n\t\"ipa\",\n\t\"iso\",\n\t\"jar\",\n\t\"jpeg\",\n\t\"jpg\",\n\t\"jpgv\",\n\t\"jpm\",\n\t\"jxr\",\n\t\"key\",\n\t\"ktx\",\n\t\"lha\",\n\t\"lib\",\n\t\"lvp\",\n\t\"lz\",\n\t\"lzh\",\n\t\"lzma\",\n\t\"lzo\",\n\t\"m3u\",\n\t\"m4a\",\n\t\"m4v\",\n\t\"mar\",\n\t\"mdi\",\n\t\"mht\",\n\t\"mid\",\n\t\"midi\",\n\t\"mj2\",\n\t\"mka\",\n\t\"mkv\",\n\t\"mmr\",\n\t\"mng\",\n\t\"mobi\",\n\t\"mov\",\n\t\"movie\",\n\t\"mp3\",\n\t\"mp4\",\n\t\"mp4a\",\n\t\"mpeg\",\n\t\"mpg\",\n\t\"mpga\",\n\t\"mxu\",\n\t\"nef\",\n\t\"npx\",\n\t\"numbers\",\n\t\"nupkg\",\n\t\"o\",\n\t\"odp\",\n\t\"ods\",\n\t\"odt\",\n\t\"oga\",\n\t\"ogg\",\n\t\"ogv\",\n\t\"otf\",\n\t\"ott\",\n\t\"pages\",\n\t\"pbm\",\n\t\"pcx\",\n\t\"pdb\",\n\t\"pdf\",\n\t\"pea\",\n\t\"pgm\",\n\t\"pic\",\n\t\"png\",\n\t\"pnm\",\n\t\"pot\",\n\t\"potm\",\n\t\"potx\",\n\t\"ppa\",\n\t\"ppam\",\n\t\"ppm\",\n\t\"pps\",\n\t\"ppsm\",\n\t\"ppsx\",\n\t\"ppt\",\n\t\"pptm\",\n\t\"pptx\",\n\t\"psd\",\n\t\"pya\",\n\t\"pyc\",\n\t\"pyo\",\n\t\"pyv\",\n\t\"qt\",\n\t\"rar\",\n\t\"ras\",\n\t\"raw\",\n\t\"resources\",\n\t\"rgb\",\n\t\"rip\",\n\t\"rlc\",\n\t\"rmf\",\n\t\"rmvb\",\n\t\"rpm\",\n\t\"rtf\",\n\t\"rz\",\n\t\"s3m\",\n\t\"s7z\",\n\t\"scpt\",\n\t\"sgi\",\n\t\"shar\",\n\t\"snap\",\n\t\"sil\",\n\t\"sketch\",\n\t\"slk\",\n\t\"smv\",\n\t\"snk\",\n\t\"so\",\n\t\"stl\",\n\t\"suo\",\n\t\"sub\",\n\t\"swf\",\n\t\"tar\",\n\t\"tbz\",\n\t\"tbz2\",\n\t\"tga\",\n\t\"tgz\",\n\t\"thmx\",\n\t\"tif\",\n\t\"tiff\",\n\t\"tlz\",\n\t\"ttc\",\n\t\"ttf\",\n\t\"txz\",\n\t\"udf\",\n\t\"uvh\",\n\t\"uvi\",\n\t\"uvm\",\n\t\"uvp\",\n\t\"uvs\",\n\t\"uvu\",\n\t\"viv\",\n\t\"vob\",\n\t\"war\",\n\t\"wav\",\n\t\"wax\",\n\t\"wbmp\",\n\t\"wdp\",\n\t\"weba\",\n\t\"webm\",\n\t\"webp\",\n\t\"whl\",\n\t\"wim\",\n\t\"wm\",\n\t\"wma\",\n\t\"wmv\",\n\t\"wmx\",\n\t\"woff\",\n\t\"woff2\",\n\t\"wrm\",\n\t\"wvx\",\n\t\"xbm\",\n\t\"xif\",\n\t\"xla\",\n\t\"xlam\",\n\t\"xls\",\n\t\"xlsb\",\n\t\"xlsm\",\n\t\"xlsx\",\n\t\"xlt\",\n\t\"xltm\",\n\t\"xltx\",\n\t\"xm\",\n\t\"xmind\",\n\t\"xpi\",\n\t\"xpm\",\n\t\"xwd\",\n\t\"xz\",\n\t\"z\",\n\t\"zip\",\n\t\"zipx\"\n]\n","module.exports = require('./binary-extensions.json');\n","'use strict';\nconst path = require('path');\nconst binaryExtensions = require('binary-extensions');\n\nconst extensions = new Set(binaryExtensions);\n\nmodule.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase());\n","'use strict';\n\nconst {sep} = require('path');\nconst {platform} = process;\nconst os = require('os');\n\nexports.EV_ALL = 'all';\nexports.EV_READY = 'ready';\nexports.EV_ADD = 'add';\nexports.EV_CHANGE = 'change';\nexports.EV_ADD_DIR = 'addDir';\nexports.EV_UNLINK = 'unlink';\nexports.EV_UNLINK_DIR = 'unlinkDir';\nexports.EV_RAW = 'raw';\nexports.EV_ERROR = 'error';\n\nexports.STR_DATA = 'data';\nexports.STR_END = 'end';\nexports.STR_CLOSE = 'close';\n\nexports.FSEVENT_CREATED = 'created';\nexports.FSEVENT_MODIFIED = 'modified';\nexports.FSEVENT_DELETED = 'deleted';\nexports.FSEVENT_MOVED = 'moved';\nexports.FSEVENT_CLONED = 'cloned';\nexports.FSEVENT_UNKNOWN = 'unknown';\nexports.FSEVENT_FLAG_MUST_SCAN_SUBDIRS = 1;\nexports.FSEVENT_TYPE_FILE = 'file';\nexports.FSEVENT_TYPE_DIRECTORY = 'directory';\nexports.FSEVENT_TYPE_SYMLINK = 'symlink';\n\nexports.KEY_LISTENERS = 'listeners';\nexports.KEY_ERR = 'errHandlers';\nexports.KEY_RAW = 'rawEmitters';\nexports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];\n\nexports.DOT_SLASH = `.${sep}`;\n\nexports.BACK_SLASH_RE = /\\\\/g;\nexports.DOUBLE_SLASH_RE = /\\/\\//;\nexports.SLASH_OR_BACK_SLASH_RE = /[/\\\\]/;\nexports.DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nexports.REPLACER_RE = /^\\.[/\\\\]/;\n\nexports.SLASH = '/';\nexports.SLASH_SLASH = '//';\nexports.BRACE_START = '{';\nexports.BANG = '!';\nexports.ONE_DOT = '.';\nexports.TWO_DOTS = '..';\nexports.STAR = '*';\nexports.GLOBSTAR = '**';\nexports.ROOT_GLOBSTAR = '/**/*';\nexports.SLASH_GLOBSTAR = '/**';\nexports.DIR_SUFFIX = 'Dir';\nexports.ANYMATCH_OPTS = {dot: true};\nexports.STRING_TYPE = 'string';\nexports.FUNCTION_TYPE = 'function';\nexports.EMPTY_STR = '';\nexports.EMPTY_FN = () => {};\nexports.IDENTITY_FN = val => val;\n\nexports.isWindows = platform === 'win32';\nexports.isMacos = platform === 'darwin';\nexports.isLinux = platform === 'linux';\nexports.isIBMi = os.type() === 'OS400';\n","'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst isBinaryPath = require('is-binary-path');\nconst {\n isWindows,\n isLinux,\n EMPTY_FN,\n EMPTY_STR,\n KEY_LISTENERS,\n KEY_ERR,\n KEY_RAW,\n HANDLER_KEYS,\n EV_CHANGE,\n EV_ADD,\n EV_ADD_DIR,\n EV_ERROR,\n STR_DATA,\n STR_END,\n BRACE_START,\n STAR\n} = require('./constants');\n\nconst THROTTLE_MODE_WATCH = 'watch';\n\nconst open = promisify(fs.open);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst close = promisify(fs.close);\nconst fsrealpath = promisify(fs.realpath);\n\nconst statMethods = { lstat, stat };\n\n// TODO: emit errors properly. Example: EMFILE on Macos.\nconst foreach = (val, fn) => {\n if (val instanceof Set) {\n val.forEach(fn);\n } else {\n fn(val);\n }\n};\n\nconst addAndConvert = (main, prop, item) => {\n let container = main[prop];\n if (!(container instanceof Set)) {\n main[prop] = container = new Set([container]);\n }\n container.add(item);\n};\n\nconst clearItem = cont => key => {\n const set = cont[key];\n if (set instanceof Set) {\n set.clear();\n } else {\n delete cont[key];\n }\n};\n\nconst delFromSet = (main, prop, item) => {\n const container = main[prop];\n if (container instanceof Set) {\n container.delete(item);\n } else if (container === item) {\n delete main[prop];\n }\n};\n\nconst isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val;\n\n/**\n * @typedef {String} Path\n */\n\n// fs_watch helpers\n\n// object to hold per-process fs_watch instances\n// (may be shared across chokidar FSWatcher instances)\n\n/**\n * @typedef {Object} FsWatchContainer\n * @property {Set} listeners\n * @property {Set} errHandlers\n * @property {Set} rawEmitters\n * @property {fs.FSWatcher=} watcher\n * @property {Boolean=} watcherUnusable\n */\n\n/**\n * @type {Map<String,FsWatchContainer>}\n */\nconst FsWatchInstances = new Map();\n\n/**\n * Instantiates the fs_watch interface\n * @param {String} path to be watched\n * @param {Object} options to be passed to fs_watch\n * @param {Function} listener main event handler\n * @param {Function} errHandler emits info about errors\n * @param {Function} emitRaw emits raw event data\n * @returns {fs.FSWatcher} new fsevents instance\n */\nfunction createFsWatchInstance(path, options, listener, errHandler, emitRaw) {\n const handleEvent = (rawEvent, evPath) => {\n listener(path);\n emitRaw(rawEvent, evPath, {watchedPath: path});\n\n // emit based on events occurring for files from a directory's watcher in\n // case the file's watcher misses it (and rely on throttling to de-dupe)\n if (evPath && path !== evPath) {\n fsWatchBroadcast(\n sysPath.resolve(path, evPath), KEY_LISTENERS, sysPath.join(path, evPath)\n );\n }\n };\n try {\n return fs.watch(path, options, handleEvent);\n } catch (error) {\n errHandler(error);\n }\n}\n\n/**\n * Helper for passing fs_watch event data to a collection of listeners\n * @param {Path} fullPath absolute path bound to fs_watch instance\n * @param {String} type listener type\n * @param {*=} val1 arguments to be passed to listeners\n * @param {*=} val2\n * @param {*=} val3\n */\nconst fsWatchBroadcast = (fullPath, type, val1, val2, val3) => {\n const cont = FsWatchInstances.get(fullPath);\n if (!cont) return;\n foreach(cont[type], (listener) => {\n listener(val1, val2, val3);\n });\n};\n\n/**\n * Instantiates the fs_watch interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path\n * @param {String} fullPath absolute path\n * @param {Object} options to be passed to fs_watch\n * @param {Object} handlers container for event listener functions\n */\nconst setFsWatchListener = (path, fullPath, options, handlers) => {\n const {listener, errHandler, rawEmitter} = handlers;\n let cont = FsWatchInstances.get(fullPath);\n\n /** @type {fs.FSWatcher=} */\n let watcher;\n if (!options.persistent) {\n watcher = createFsWatchInstance(\n path, options, listener, errHandler, rawEmitter\n );\n return watcher.close.bind(watcher);\n }\n if (cont) {\n addAndConvert(cont, KEY_LISTENERS, listener);\n addAndConvert(cont, KEY_ERR, errHandler);\n addAndConvert(cont, KEY_RAW, rawEmitter);\n } else {\n watcher = createFsWatchInstance(\n path,\n options,\n fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS),\n errHandler, // no need to use broadcast here\n fsWatchBroadcast.bind(null, fullPath, KEY_RAW)\n );\n if (!watcher) return;\n watcher.on(EV_ERROR, async (error) => {\n const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);\n cont.watcherUnusable = true; // documented since Node 10.4.1\n // Workaround for https://github.com/joyent/node/issues/4337\n if (isWindows && error.code === 'EPERM') {\n try {\n const fd = await open(path, 'r');\n await close(fd);\n broadcastErr(error);\n } catch (err) {}\n } else {\n broadcastErr(error);\n }\n });\n cont = {\n listeners: listener,\n errHandlers: errHandler,\n rawEmitters: rawEmitter,\n watcher\n };\n FsWatchInstances.set(fullPath, cont);\n }\n // const index = cont.listeners.indexOf(listener);\n\n // removes this instance's listeners and closes the underlying fs_watch\n // instance if there are no more listeners left\n return () => {\n delFromSet(cont, KEY_LISTENERS, listener);\n delFromSet(cont, KEY_ERR, errHandler);\n delFromSet(cont, KEY_RAW, rawEmitter);\n if (isEmptySet(cont.listeners)) {\n // Check to protect against issue gh-730.\n // if (cont.watcherUnusable) {\n cont.watcher.close();\n // }\n FsWatchInstances.delete(fullPath);\n HANDLER_KEYS.forEach(clearItem(cont));\n cont.watcher = undefined;\n Object.freeze(cont);\n }\n };\n};\n\n// fs_watchFile helpers\n\n// object to hold per-process fs_watchFile instances\n// (may be shared across chokidar FSWatcher instances)\nconst FsWatchFileInstances = new Map();\n\n/**\n * Instantiates the fs_watchFile interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path to be watched\n * @param {String} fullPath absolute path\n * @param {Object} options options to be passed to fs_watchFile\n * @param {Object} handlers container for event listener functions\n * @returns {Function} closer\n */\nconst setFsWatchFileListener = (path, fullPath, options, handlers) => {\n const {listener, rawEmitter} = handlers;\n let cont = FsWatchFileInstances.get(fullPath);\n\n /* eslint-disable no-unused-vars, prefer-destructuring */\n let listeners = new Set();\n let rawEmitters = new Set();\n\n const copts = cont && cont.options;\n if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {\n // \"Upgrade\" the watcher to persistence or a quicker interval.\n // This creates some unlikely edge case issues if the user mixes\n // settings in a very weird way, but solving for those cases\n // doesn't seem worthwhile for the added complexity.\n listeners = cont.listeners;\n rawEmitters = cont.rawEmitters;\n fs.unwatchFile(fullPath);\n cont = undefined;\n }\n\n /* eslint-enable no-unused-vars, prefer-destructuring */\n\n if (cont) {\n addAndConvert(cont, KEY_LISTENERS, listener);\n addAndConvert(cont, KEY_RAW, rawEmitter);\n } else {\n // TODO\n // listeners.add(listener);\n // rawEmitters.add(rawEmitter);\n cont = {\n listeners: listener,\n rawEmitters: rawEmitter,\n options,\n watcher: fs.watchFile(fullPath, options, (curr, prev) => {\n foreach(cont.rawEmitters, (rawEmitter) => {\n rawEmitter(EV_CHANGE, fullPath, {curr, prev});\n });\n const currmtime = curr.mtimeMs;\n if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {\n foreach(cont.listeners, (listener) => listener(path, curr));\n }\n })\n };\n FsWatchFileInstances.set(fullPath, cont);\n }\n // const index = cont.listeners.indexOf(listener);\n\n // Removes this instance's listeners and closes the underlying fs_watchFile\n // instance if there are no more listeners left.\n return () => {\n delFromSet(cont, KEY_LISTENERS, listener);\n delFromSet(cont, KEY_RAW, rawEmitter);\n if (isEmptySet(cont.listeners)) {\n FsWatchFileInstances.delete(fullPath);\n fs.unwatchFile(fullPath);\n cont.options = cont.watcher = undefined;\n Object.freeze(cont);\n }\n };\n};\n\n/**\n * @mixin\n */\nclass NodeFsHandler {\n\n/**\n * @param {import(\"../index\").FSWatcher} fsW\n */\nconstructor(fsW) {\n this.fsw = fsW;\n this._boundHandleError = (error) => fsW._handleError(error);\n}\n\n/**\n * Watch file for changes with fs_watchFile or fs_watch.\n * @param {String} path to file or dir\n * @param {Function} listener on fs change\n * @returns {Function} closer for the watcher instance\n */\n_watchWithNodeFs(path, listener) {\n const opts = this.fsw.options;\n const directory = sysPath.dirname(path);\n const basename = sysPath.basename(path);\n const parent = this.fsw._getWatchedDir(directory);\n parent.add(basename);\n const absolutePath = sysPath.resolve(path);\n const options = {persistent: opts.persistent};\n if (!listener) listener = EMPTY_FN;\n\n let closer;\n if (opts.usePolling) {\n options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ?\n opts.binaryInterval : opts.interval;\n closer = setFsWatchFileListener(path, absolutePath, options, {\n listener,\n rawEmitter: this.fsw._emitRaw\n });\n } else {\n closer = setFsWatchListener(path, absolutePath, options, {\n listener,\n errHandler: this._boundHandleError,\n rawEmitter: this.fsw._emitRaw\n });\n }\n return closer;\n}\n\n/**\n * Watch a file and emit add event if warranted.\n * @param {Path} file Path\n * @param {fs.Stats} stats result of fs_stat\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @returns {Function} closer for the watcher instance\n */\n_handleFile(file, stats, initialAdd) {\n if (this.fsw.closed) {\n return;\n }\n const dirname = sysPath.dirname(file);\n const basename = sysPath.basename(file);\n const parent = this.fsw._getWatchedDir(dirname);\n // stats is always present\n let prevStats = stats;\n\n // if the file is already being watched, do nothing\n if (parent.has(basename)) return;\n\n const listener = async (path, newStats) => {\n if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;\n if (!newStats || newStats.mtimeMs === 0) {\n try {\n const newStats = await stat(file);\n if (this.fsw.closed) return;\n // Check that change event was not fired because of changed only accessTime.\n const at = newStats.atimeMs;\n const mt = newStats.mtimeMs;\n if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n this.fsw._emit(EV_CHANGE, file, newStats);\n }\n if (isLinux && prevStats.ino !== newStats.ino) {\n this.fsw._closeFile(path)\n prevStats = newStats;\n this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener));\n } else {\n prevStats = newStats;\n }\n } catch (error) {\n // Fix issues where mtime is null but file is still present\n this.fsw._remove(dirname, basename);\n }\n // add is about to be emitted if file not already tracked in parent\n } else if (parent.has(basename)) {\n // Check that change event was not fired because of changed only accessTime.\n const at = newStats.atimeMs;\n const mt = newStats.mtimeMs;\n if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n this.fsw._emit(EV_CHANGE, file, newStats);\n }\n prevStats = newStats;\n }\n }\n // kick off the watcher\n const closer = this._watchWithNodeFs(file, listener);\n\n // emit an add event if we're supposed to\n if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {\n if (!this.fsw._throttle(EV_ADD, file, 0)) return;\n this.fsw._emit(EV_ADD, file, stats);\n }\n\n return closer;\n}\n\n/**\n * Handle symlinks encountered while reading a dir.\n * @param {Object} entry returned by readdirp\n * @param {String} directory path of dir being read\n * @param {String} path of this item\n * @param {String} item basename of this item\n * @returns {Promise<Boolean>} true if no more processing is needed for this entry.\n */\nasync _handleSymlink(entry, directory, path, item) {\n if (this.fsw.closed) {\n return;\n }\n const full = entry.fullPath;\n const dir = this.fsw._getWatchedDir(directory);\n\n if (!this.fsw.options.followSymlinks) {\n // watch symlink directly (don't follow) and detect changes\n this.fsw._incrReadyCount();\n\n let linkPath;\n try {\n linkPath = await fsrealpath(path);\n } catch (e) {\n this.fsw._emitReady();\n return true;\n }\n\n if (this.fsw.closed) return;\n if (dir.has(item)) {\n if (this.fsw._symlinkPaths.get(full) !== linkPath) {\n this.fsw._symlinkPaths.set(full, linkPath);\n this.fsw._emit(EV_CHANGE, path, entry.stats);\n }\n } else {\n dir.add(item);\n this.fsw._symlinkPaths.set(full, linkPath);\n this.fsw._emit(EV_ADD, path, entry.stats);\n }\n this.fsw._emitReady();\n return true;\n }\n\n // don't follow the same symlink more than once\n if (this.fsw._symlinkPaths.has(full)) {\n return true;\n }\n\n this.fsw._symlinkPaths.set(full, true);\n}\n\n_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {\n // Normalize the directory name on Windows\n directory = sysPath.join(directory, EMPTY_STR);\n\n if (!wh.hasGlob) {\n throttler = this.fsw._throttle('readdir', directory, 1000);\n if (!throttler) return;\n }\n\n const previous = this.fsw._getWatchedDir(wh.path);\n const current = new Set();\n\n let stream = this.fsw._readdirp(directory, {\n fileFilter: entry => wh.filterPath(entry),\n directoryFilter: entry => wh.filterDir(entry),\n depth: 0\n }).on(STR_DATA, async (entry) => {\n if (this.fsw.closed) {\n stream = undefined;\n return;\n }\n const item = entry.path;\n let path = sysPath.join(directory, item);\n current.add(item);\n\n if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {\n return;\n }\n\n if (this.fsw.closed) {\n stream = undefined;\n return;\n }\n // Files that present in current directory snapshot\n // but absent in previous are added to watch list and\n // emit `add` event.\n if (item === target || !target && !previous.has(item)) {\n this.fsw._incrReadyCount();\n\n // ensure relativeness of path is preserved in case of watcher reuse\n path = sysPath.join(dir, sysPath.relative(dir, path));\n\n this._addToNodeFs(path, initialAdd, wh, depth + 1);\n }\n }).on(EV_ERROR, this._boundHandleError);\n\n return new Promise(resolve =>\n stream.once(STR_END, () => {\n if (this.fsw.closed) {\n stream = undefined;\n return;\n }\n const wasThrottled = throttler ? throttler.clear() : false;\n\n resolve();\n\n // Files that absent in current directory snapshot\n // but present in previous emit `remove` event\n // and are removed from @watched[directory].\n previous.getChildren().filter((item) => {\n return item !== directory &&\n !current.has(item) &&\n // in case of intersecting globs;\n // a path may have been filtered out of this readdir, but\n // shouldn't be removed because it matches a different glob\n (!wh.hasGlob || wh.filterPath({\n fullPath: sysPath.resolve(directory, item)\n }));\n }).forEach((item) => {\n this.fsw._remove(directory, item);\n });\n\n stream = undefined;\n\n // one more time for any missed in case changes came in extremely quickly\n if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);\n })\n );\n}\n\n/**\n * Read directory to add / remove files from `@watched` list and re-read it on change.\n * @param {String} dir fs path\n * @param {fs.Stats} stats\n * @param {Boolean} initialAdd\n * @param {Number} depth relative to user-supplied path\n * @param {String} target child path targeted for watch\n * @param {Object} wh Common watch helpers for this path\n * @param {String} realpath\n * @returns {Promise<Function>} closer for the watcher instance.\n */\nasync _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {\n const parentDir = this.fsw._getWatchedDir(sysPath.dirname(dir));\n const tracked = parentDir.has(sysPath.basename(dir));\n if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {\n if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats);\n }\n\n // ensure dir is tracked (harmless if redundant)\n parentDir.add(sysPath.basename(dir));\n this.fsw._getWatchedDir(dir);\n let throttler;\n let closer;\n\n const oDepth = this.fsw.options.depth;\n if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {\n if (!target) {\n await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);\n if (this.fsw.closed) return;\n }\n\n closer = this._watchWithNodeFs(dir, (dirPath, stats) => {\n // if current directory is removed, do nothing\n if (stats && stats.mtimeMs === 0) return;\n\n this._handleRead(dirPath, false, wh, target, dir, depth, throttler);\n });\n }\n return closer;\n}\n\n/**\n * Handle added file, directory, or glob pattern.\n * Delegates call to _handleFile / _handleDir after checks.\n * @param {String} path to file or ir\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @param {Object} priorWh depth relative to user-supplied path\n * @param {Number} depth Child path actually targeted for watch\n * @param {String=} target Child path actually targeted for watch\n * @returns {Promise}\n */\nasync _addToNodeFs(path, initialAdd, priorWh, depth, target) {\n const ready = this.fsw._emitReady;\n if (this.fsw._isIgnored(path) || this.fsw.closed) {\n ready();\n return false;\n }\n\n const wh = this.fsw._getWatchHelpers(path, depth);\n if (!wh.hasGlob && priorWh) {\n wh.hasGlob = priorWh.hasGlob;\n wh.globFilter = priorWh.globFilter;\n wh.filterPath = entry => priorWh.filterPath(entry);\n wh.filterDir = entry => priorWh.filterDir(entry);\n }\n\n // evaluate what is at the path we're being asked to watch\n try {\n const stats = await statMethods[wh.statMethod](wh.watchPath);\n if (this.fsw.closed) return;\n if (this.fsw._isIgnored(wh.watchPath, stats)) {\n ready();\n return false;\n }\n\n const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START);\n let closer;\n if (stats.isDirectory()) {\n const absPath = sysPath.resolve(path);\n const targetPath = follow ? await fsrealpath(path) : path;\n if (this.fsw.closed) return;\n closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);\n if (this.fsw.closed) return;\n // preserve this symlink's target path\n if (absPath !== targetPath && targetPath !== undefined) {\n this.fsw._symlinkPaths.set(absPath, targetPath);\n }\n } else if (stats.isSymbolicLink()) {\n const targetPath = follow ? await fsrealpath(path) : path;\n if (this.fsw.closed) return;\n const parent = sysPath.dirname(wh.watchPath);\n this.fsw._getWatchedDir(parent).add(wh.watchPath);\n this.fsw._emit(EV_ADD, wh.watchPath, stats);\n closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);\n if (this.fsw.closed) return;\n\n // preserve this symlink's target path\n if (targetPath !== undefined) {\n this.fsw._symlinkPaths.set(sysPath.resolve(path), targetPath);\n }\n } else {\n closer = this._handleFile(wh.watchPath, stats, initialAdd);\n }\n ready();\n\n this.fsw._addPathCloser(path, closer);\n return false;\n\n } catch (error) {\n if (this.fsw._handleError(error)) {\n ready();\n return path;\n }\n }\n}\n\n}\n\nmodule.exports = NodeFsHandler;\n","'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\n\nlet fsevents;\ntry {\n fsevents = require('fsevents');\n} catch (error) {\n if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);\n}\n\nif (fsevents) {\n // TODO: real check\n const mtch = process.version.match(/v(\\d+)\\.(\\d+)/);\n if (mtch && mtch[1] && mtch[2]) {\n const maj = Number.parseInt(mtch[1], 10);\n const min = Number.parseInt(mtch[2], 10);\n if (maj === 8 && min < 16) {\n fsevents = undefined;\n }\n }\n}\n\nconst {\n EV_ADD,\n EV_CHANGE,\n EV_ADD_DIR,\n EV_UNLINK,\n EV_ERROR,\n STR_DATA,\n STR_END,\n FSEVENT_CREATED,\n FSEVENT_MODIFIED,\n FSEVENT_DELETED,\n FSEVENT_MOVED,\n // FSEVENT_CLONED,\n FSEVENT_UNKNOWN,\n FSEVENT_FLAG_MUST_SCAN_SUBDIRS,\n FSEVENT_TYPE_FILE,\n FSEVENT_TYPE_DIRECTORY,\n FSEVENT_TYPE_SYMLINK,\n\n ROOT_GLOBSTAR,\n DIR_SUFFIX,\n DOT_SLASH,\n FUNCTION_TYPE,\n EMPTY_FN,\n IDENTITY_FN\n} = require('./constants');\n\nconst Depth = (value) => isNaN(value) ? {} : {depth: value};\n\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\nconst statMethods = { stat, lstat };\n\n/**\n * @typedef {String} Path\n */\n\n/**\n * @typedef {Object} FsEventsWatchContainer\n * @property {Set<Function>} listeners\n * @property {Function} rawEmitter\n * @property {{stop: Function}} watcher\n */\n\n// fsevents instance helper functions\n/**\n * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)\n * @type {Map<Path,FsEventsWatchContainer>}\n */\nconst FSEventsWatchers = new Map();\n\n// Threshold of duplicate path prefixes at which to start\n// consolidating going forward\nconst consolidateThreshhold = 10;\n\nconst wrongEventFlags = new Set([\n 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912\n]);\n\n/**\n * Instantiates the fsevents interface\n * @param {Path} path path to be watched\n * @param {Function} callback called when fsevents is bound and ready\n * @returns {{stop: Function}} new fsevents instance\n */\nconst createFSEventsInstance = (path, callback) => {\n const stop = fsevents.watch(path, callback);\n return {stop};\n};\n\n/**\n * Instantiates the fsevents interface or binds listeners to an existing one covering\n * the same file tree.\n * @param {Path} path - to be watched\n * @param {Path} realPath - real path for symlinks\n * @param {Function} listener - called when fsevents emits events\n * @param {Function} rawEmitter - passes data to listeners of the 'raw' event\n * @returns {Function} closer\n */\nfunction setFSEventsListener(path, realPath, listener, rawEmitter) {\n let watchPath = sysPath.extname(realPath) ? sysPath.dirname(realPath) : realPath;\n\n const parentPath = sysPath.dirname(watchPath);\n let cont = FSEventsWatchers.get(watchPath);\n\n // If we've accumulated a substantial number of paths that\n // could have been consolidated by watching one directory\n // above the current one, create a watcher on the parent\n // path instead, so that we do consolidate going forward.\n if (couldConsolidate(parentPath)) {\n watchPath = parentPath;\n }\n\n const resolvedPath = sysPath.resolve(path);\n const hasSymlink = resolvedPath !== realPath;\n\n const filteredListener = (fullPath, flags, info) => {\n if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);\n if (\n fullPath === resolvedPath ||\n !fullPath.indexOf(resolvedPath + sysPath.sep)\n ) listener(fullPath, flags, info);\n };\n\n // check if there is already a watcher on a parent path\n // modifies `watchPath` to the parent path when it finds a match\n let watchedParent = false;\n for (const watchedPath of FSEventsWatchers.keys()) {\n if (realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep) === 0) {\n watchPath = watchedPath;\n cont = FSEventsWatchers.get(watchPath);\n watchedParent = true;\n break;\n }\n }\n\n if (cont || watchedParent) {\n cont.listeners.add(filteredListener);\n } else {\n cont = {\n listeners: new Set([filteredListener]),\n rawEmitter,\n watcher: createFSEventsInstance(watchPath, (fullPath, flags) => {\n if (!cont.listeners.size) return;\n if (flags & FSEVENT_FLAG_MUST_SCAN_SUBDIRS) return;\n const info = fsevents.getInfo(fullPath, flags);\n cont.listeners.forEach(list => {\n list(fullPath, flags, info);\n });\n\n cont.rawEmitter(info.event, fullPath, info);\n })\n };\n FSEventsWatchers.set(watchPath, cont);\n }\n\n // removes this instance's listeners and closes the underlying fsevents\n // instance if there are no more listeners left\n return () => {\n const lst = cont.listeners;\n\n lst.delete(filteredListener);\n if (!lst.size) {\n FSEventsWatchers.delete(watchPath);\n if (cont.watcher) return cont.watcher.stop().then(() => {\n cont.rawEmitter = cont.watcher = undefined;\n Object.freeze(cont);\n });\n }\n };\n}\n\n// Decide whether or not we should start a new higher-level\n// parent watcher\nconst couldConsolidate = (path) => {\n let count = 0;\n for (const watchPath of FSEventsWatchers.keys()) {\n if (watchPath.indexOf(path) === 0) {\n count++;\n if (count >= consolidateThreshhold) {\n return true;\n }\n }\n }\n\n return false;\n};\n\n// returns boolean indicating whether fsevents can be used\nconst canUse = () => fsevents && FSEventsWatchers.size < 128;\n\n// determines subdirectory traversal levels from root to path\nconst calcDepth = (path, root) => {\n let i = 0;\n while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++;\n return i;\n};\n\n// returns boolean indicating whether the fsevents' event info has the same type\n// as the one returned by fs.stat\nconst sameTypes = (info, stats) => (\n info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() ||\n info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() ||\n info.type === FSEVENT_TYPE_FILE && stats.isFile()\n)\n\n/**\n * @mixin\n */\nclass FsEventsHandler {\n\n/**\n * @param {import('../index').FSWatcher} fsw\n */\nconstructor(fsw) {\n this.fsw = fsw;\n}\ncheckIgnored(path, stats) {\n const ipaths = this.fsw._ignoredPaths;\n if (this.fsw._isIgnored(path, stats)) {\n ipaths.add(path);\n if (stats && stats.isDirectory()) {\n ipaths.add(path + ROOT_GLOBSTAR);\n }\n return true;\n }\n\n ipaths.delete(path);\n ipaths.delete(path + ROOT_GLOBSTAR);\n}\n\naddOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n const event = watchedDir.has(item) ? EV_CHANGE : EV_ADD;\n this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n}\n\nasync checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n try {\n const stats = await stat(path)\n if (this.fsw.closed) return;\n if (sameTypes(info, stats)) {\n this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n } else {\n this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n } catch (error) {\n if (error.code === 'EACCES') {\n this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n } else {\n this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n }\n}\n\nhandleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n if (this.fsw.closed || this.checkIgnored(path)) return;\n\n if (event === EV_UNLINK) {\n const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY\n // suppress unlink events on never before seen files\n if (isDirectory || watchedDir.has(item)) {\n this.fsw._remove(parent, item, isDirectory);\n }\n } else {\n if (event === EV_ADD) {\n // track new directories\n if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path);\n\n if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) {\n // push symlinks back to the top of the stack to get handled\n const curDepth = opts.depth === undefined ?\n undefined : calcDepth(fullPath, realPath) + 1;\n return this._addToFsEvents(path, false, true, curDepth);\n }\n\n // track new paths\n // (other than symlinks being followed, which will be tracked soon)\n this.fsw._getWatchedDir(parent).add(item);\n }\n /**\n * @type {'add'|'addDir'|'unlink'|'unlinkDir'}\n */\n const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event;\n this.fsw._emit(eventName, path);\n if (eventName === EV_ADD_DIR) this._addToFsEvents(path, false, true);\n }\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} watchPath - file/dir path to be watched with fsevents\n * @param {String} realPath - real path (in case of symlinks)\n * @param {Function} transform - path transformer\n * @param {Function} globFilter - path filter in case a glob pattern was provided\n * @returns {Function} closer for the watcher instance\n*/\n_watchWithFsEvents(watchPath, realPath, transform, globFilter) {\n if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return;\n const opts = this.fsw.options;\n const watchCallback = async (fullPath, flags, info) => {\n if (this.fsw.closed) return;\n if (\n opts.depth !== undefined &&\n calcDepth(fullPath, realPath) > opts.depth\n ) return;\n const path = transform(sysPath.join(\n watchPath, sysPath.relative(watchPath, fullPath)\n ));\n if (globFilter && !globFilter(path)) return;\n // ensure directories are tracked\n const parent = sysPath.dirname(path);\n const item = sysPath.basename(path);\n const watchedDir = this.fsw._getWatchedDir(\n info.type === FSEVENT_TYPE_DIRECTORY ? path : parent\n );\n\n // correct for wrong events emitted\n if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) {\n if (typeof opts.ignored === FUNCTION_TYPE) {\n let stats;\n try {\n stats = await stat(path);\n } catch (error) {}\n if (this.fsw.closed) return;\n if (this.checkIgnored(path, stats)) return;\n if (sameTypes(info, stats)) {\n this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n } else {\n this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n } else {\n this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n } else {\n switch (info.event) {\n case FSEVENT_CREATED:\n case FSEVENT_MODIFIED:\n return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n case FSEVENT_DELETED:\n case FSEVENT_MOVED:\n return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n }\n };\n\n const closer = setFSEventsListener(\n watchPath,\n realPath,\n watchCallback,\n this.fsw._emitRaw\n );\n\n this.fsw._emitReady();\n return closer;\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} linkPath path to symlink\n * @param {String} fullPath absolute path to the symlink\n * @param {Function} transform pre-existing path transformer\n * @param {Number} curDepth level of subdirectories traversed to where symlink is\n * @returns {Promise<void>}\n */\nasync _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) {\n // don't follow the same symlink more than once\n if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return;\n\n this.fsw._symlinkPaths.set(fullPath, true);\n this.fsw._incrReadyCount();\n\n try {\n const linkTarget = await realpath(linkPath);\n if (this.fsw.closed) return;\n if (this.fsw._isIgnored(linkTarget)) {\n return this.fsw._emitReady();\n }\n\n this.fsw._incrReadyCount();\n\n // add the linkTarget for watching with a wrapper for transform\n // that causes emitted paths to incorporate the link's path\n this._addToFsEvents(linkTarget || linkPath, (path) => {\n let aliasedPath = linkPath;\n if (linkTarget && linkTarget !== DOT_SLASH) {\n aliasedPath = path.replace(linkTarget, linkPath);\n } else if (path !== DOT_SLASH) {\n aliasedPath = sysPath.join(linkPath, path);\n }\n return transform(aliasedPath);\n }, false, curDepth);\n } catch(error) {\n if (this.fsw._handleError(error)) {\n return this.fsw._emitReady();\n }\n }\n}\n\n/**\n *\n * @param {Path} newPath\n * @param {fs.Stats} stats\n */\nemitAdd(newPath, stats, processPath, opts, forceAdd) {\n const pp = processPath(newPath);\n const isDir = stats.isDirectory();\n const dirObj = this.fsw._getWatchedDir(sysPath.dirname(pp));\n const base = sysPath.basename(pp);\n\n // ensure empty dirs get tracked\n if (isDir) this.fsw._getWatchedDir(pp);\n if (dirObj.has(base)) return;\n dirObj.add(base);\n\n if (!opts.ignoreInitial || forceAdd === true) {\n this.fsw._emit(isDir ? EV_ADD_DIR : EV_ADD, pp, stats);\n }\n}\n\ninitWatch(realPath, path, wh, processPath) {\n if (this.fsw.closed) return;\n const closer = this._watchWithFsEvents(\n wh.watchPath,\n sysPath.resolve(realPath || wh.watchPath),\n processPath,\n wh.globFilter\n );\n this.fsw._addPathCloser(path, closer);\n}\n\n/**\n * Handle added path with fsevents\n * @param {String} path file/dir path or glob pattern\n * @param {Function|Boolean=} transform converts working path to what the user expects\n * @param {Boolean=} forceAdd ensure add is emitted\n * @param {Number=} priorDepth Level of subdirectories already traversed.\n * @returns {Promise<void>}\n */\nasync _addToFsEvents(path, transform, forceAdd, priorDepth) {\n if (this.fsw.closed) {\n return;\n }\n const opts = this.fsw.options;\n const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN;\n\n const wh = this.fsw._getWatchHelpers(path);\n\n // evaluate what is at the path we're being asked to watch\n try {\n const stats = await statMethods[wh.statMethod](wh.watchPath);\n if (this.fsw.closed) return;\n if (this.fsw._isIgnored(wh.watchPath, stats)) {\n throw null;\n }\n if (stats.isDirectory()) {\n // emit addDir unless this is a glob parent\n if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);\n\n // don't recurse further if it would exceed depth setting\n if (priorDepth && priorDepth > opts.depth) return;\n\n // scan the contents of the dir\n this.fsw._readdirp(wh.watchPath, {\n fileFilter: entry => wh.filterPath(entry),\n directoryFilter: entry => wh.filterDir(entry),\n ...Depth(opts.depth - (priorDepth || 0))\n }).on(STR_DATA, (entry) => {\n // need to check filterPath on dirs b/c filterDir is less restrictive\n if (this.fsw.closed) {\n return;\n }\n if (entry.stats.isDirectory() && !wh.filterPath(entry)) return;\n\n const joinedPath = sysPath.join(wh.watchPath, entry.path);\n const {fullPath} = entry;\n\n if (wh.followSymlinks && entry.stats.isSymbolicLink()) {\n // preserve the current depth here since it can't be derived from\n // real paths past the symlink\n const curDepth = opts.depth === undefined ?\n undefined : calcDepth(joinedPath, sysPath.resolve(wh.watchPath)) + 1;\n\n this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);\n } else {\n this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd);\n }\n }).on(EV_ERROR, EMPTY_FN).on(STR_END, () => {\n this.fsw._emitReady();\n });\n } else {\n this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd);\n this.fsw._emitReady();\n }\n } catch (error) {\n if (!error || this.fsw._handleError(error)) {\n // TODO: Strange thing: \"should not choke on an ignored watch path\" will be failed without 2 ready calls -__-\n this.fsw._emitReady();\n this.fsw._emitReady();\n }\n }\n\n if (opts.persistent && forceAdd !== true) {\n if (typeof transform === FUNCTION_TYPE) {\n // realpath has already been resolved\n this.initWatch(undefined, path, wh, processPath);\n } else {\n let realPath;\n try {\n realPath = await realpath(wh.watchPath);\n } catch (e) {}\n this.initWatch(realPath, path, wh, processPath);\n }\n }\n}\n\n}\n\nmodule.exports = FsEventsHandler;\nmodule.exports.canUse = canUse;\n","'use strict';\n\nconst { EventEmitter } = require('events');\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst readdirp = require('readdirp');\nconst anymatch = require('anymatch').default;\nconst globParent = require('glob-parent');\nconst isGlob = require('is-glob');\nconst braces = require('braces');\nconst normalizePath = require('normalize-path');\n\nconst NodeFsHandler = require('./lib/nodefs-handler');\nconst FsEventsHandler = require('./lib/fsevents-handler');\nconst {\n EV_ALL,\n EV_READY,\n EV_ADD,\n EV_CHANGE,\n EV_UNLINK,\n EV_ADD_DIR,\n EV_UNLINK_DIR,\n EV_RAW,\n EV_ERROR,\n\n STR_CLOSE,\n STR_END,\n\n BACK_SLASH_RE,\n DOUBLE_SLASH_RE,\n SLASH_OR_BACK_SLASH_RE,\n DOT_RE,\n REPLACER_RE,\n\n SLASH,\n SLASH_SLASH,\n BRACE_START,\n BANG,\n ONE_DOT,\n TWO_DOTS,\n GLOBSTAR,\n SLASH_GLOBSTAR,\n ANYMATCH_OPTS,\n STRING_TYPE,\n FUNCTION_TYPE,\n EMPTY_STR,\n EMPTY_FN,\n\n isWindows,\n isMacos,\n isIBMi\n} = require('./lib/constants');\n\nconst stat = promisify(fs.stat);\nconst readdir = promisify(fs.readdir);\n\n/**\n * @typedef {String} Path\n * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName\n * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType\n */\n\n/**\n *\n * @typedef {Object} WatchHelpers\n * @property {Boolean} followSymlinks\n * @property {'stat'|'lstat'} statMethod\n * @property {Path} path\n * @property {Path} watchPath\n * @property {Function} entryPath\n * @property {Boolean} hasGlob\n * @property {Object} globFilter\n * @property {Function} filterPath\n * @property {Function} filterDir\n */\n\nconst arrify = (value = []) => Array.isArray(value) ? value : [value];\nconst flatten = (list, result = []) => {\n list.forEach(item => {\n if (Array.isArray(item)) {\n flatten(item, result);\n } else {\n result.push(item);\n }\n });\n return result;\n};\n\nconst unifyPaths = (paths_) => {\n /**\n * @type {Array<String>}\n */\n const paths = flatten(arrify(paths_));\n if (!paths.every(p => typeof p === STRING_TYPE)) {\n throw new TypeError(`Non-string provided as watch path: ${paths}`);\n }\n return paths.map(normalizePathToUnix);\n};\n\n// If SLASH_SLASH occurs at the beginning of path, it is not replaced\n// because \"//StoragePC/DrivePool/Movies\" is a valid network path\nconst toUnix = (string) => {\n let str = string.replace(BACK_SLASH_RE, SLASH);\n let prepend = false;\n if (str.startsWith(SLASH_SLASH)) {\n prepend = true;\n }\n while (str.match(DOUBLE_SLASH_RE)) {\n str = str.replace(DOUBLE_SLASH_RE, SLASH);\n }\n if (prepend) {\n str = SLASH + str;\n }\n return str;\n};\n\n// Our version of upath.normalize\n// TODO: this is not equal to path-normalize module - investigate why\nconst normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path)));\n\nconst normalizeIgnored = (cwd = EMPTY_STR) => (path) => {\n if (typeof path !== STRING_TYPE) return path;\n return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path));\n};\n\nconst getAbsolutePath = (path, cwd) => {\n if (sysPath.isAbsolute(path)) {\n return path;\n }\n if (path.startsWith(BANG)) {\n return BANG + sysPath.join(cwd, path.slice(1));\n }\n return sysPath.join(cwd, path);\n};\n\nconst undef = (opts, key) => opts[key] === undefined;\n\n/**\n * Directory entry.\n * @property {Path} path\n * @property {Set<Path>} items\n */\nclass DirEntry {\n /**\n * @param {Path} dir\n * @param {Function} removeWatcher\n */\n constructor(dir, removeWatcher) {\n this.path = dir;\n this._removeWatcher = removeWatcher;\n /** @type {Set<Path>} */\n this.items = new Set();\n }\n\n add(item) {\n const {items} = this;\n if (!items) return;\n if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);\n }\n\n async remove(item) {\n const {items} = this;\n if (!items) return;\n items.delete(item);\n if (items.size > 0) return;\n\n const dir = this.path;\n try {\n await readdir(dir);\n } catch (err) {\n if (this._removeWatcher) {\n this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));\n }\n }\n }\n\n has(item) {\n const {items} = this;\n if (!items) return;\n return items.has(item);\n }\n\n /**\n * @returns {Array<String>}\n */\n getChildren() {\n const {items} = this;\n if (!items) return;\n return [...items.values()];\n }\n\n dispose() {\n this.items.clear();\n delete this.path;\n delete this._removeWatcher;\n delete this.items;\n Object.freeze(this);\n }\n}\n\nconst STAT_METHOD_F = 'stat';\nconst STAT_METHOD_L = 'lstat';\nclass WatchHelper {\n constructor(path, watchPath, follow, fsw) {\n this.fsw = fsw;\n this.path = path = path.replace(REPLACER_RE, EMPTY_STR);\n this.watchPath = watchPath;\n this.fullWatchPath = sysPath.resolve(watchPath);\n this.hasGlob = watchPath !== path;\n /** @type {object|boolean} */\n if (path === EMPTY_STR) this.hasGlob = false;\n this.globSymlink = this.hasGlob && follow ? undefined : false;\n this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false;\n this.dirParts = this.getDirParts(path);\n this.dirParts.forEach((parts) => {\n if (parts.length > 1) parts.pop();\n });\n this.followSymlinks = follow;\n this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;\n }\n\n checkGlobSymlink(entry) {\n // only need to resolve once\n // first entry should always have entry.parentDir === EMPTY_STR\n if (this.globSymlink === undefined) {\n this.globSymlink = entry.fullParentDir === this.fullWatchPath ?\n false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath};\n }\n\n if (this.globSymlink) {\n return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath);\n }\n\n return entry.fullPath;\n }\n\n entryPath(entry) {\n return sysPath.join(this.watchPath,\n sysPath.relative(this.watchPath, this.checkGlobSymlink(entry))\n );\n }\n\n filterPath(entry) {\n const {stats} = entry;\n if (stats && stats.isSymbolicLink()) return this.filterDir(entry);\n const resolvedPath = this.entryPath(entry);\n const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ?\n this.globFilter(resolvedPath) : true;\n return matchesGlob &&\n this.fsw._isntIgnored(resolvedPath, stats) &&\n this.fsw._hasReadPermissions(stats);\n }\n\n getDirParts(path) {\n if (!this.hasGlob) return [];\n const parts = [];\n const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path];\n expandedPath.forEach((path) => {\n parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE));\n });\n return parts;\n }\n\n filterDir(entry) {\n if (this.hasGlob) {\n const entryParts = this.getDirParts(this.checkGlobSymlink(entry));\n let globstar = false;\n this.unmatchedGlob = !this.dirParts.some((parts) => {\n return parts.every((part, i) => {\n if (part === GLOBSTAR) globstar = true;\n return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS);\n });\n });\n }\n return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats);\n }\n}\n\n/**\n * Watches files & directories for changes. Emitted events:\n * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n *\n * new FSWatcher()\n * .add(directories)\n * .on('add', path => log('File', path, 'was added'))\n */\nclass FSWatcher extends EventEmitter {\n// Not indenting methods for history sake; for now.\nconstructor(_opts) {\n super();\n\n const opts = {};\n if (_opts) Object.assign(opts, _opts); // for frozen objects\n\n /** @type {Map<String, DirEntry>} */\n this._watched = new Map();\n /** @type {Map<String, Array>} */\n this._closers = new Map();\n /** @type {Set<String>} */\n this._ignoredPaths = new Set();\n\n /** @type {Map<ThrottleType, Map>} */\n this._throttled = new Map();\n\n /** @type {Map<Path, String|Boolean>} */\n this._symlinkPaths = new Map();\n\n this._streams = new Set();\n this.closed = false;\n\n // Set up default options.\n if (undef(opts, 'persistent')) opts.persistent = true;\n if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false;\n if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false;\n if (undef(opts, 'interval')) opts.interval = 100;\n if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300;\n if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false;\n opts.enableBinaryInterval = opts.binaryInterval !== opts.interval;\n\n // Enable fsevents on OS X when polling isn't explicitly enabled.\n if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling;\n\n // If we can't use fsevents, ensure the options reflect it's disabled.\n const canUseFsEvents = FsEventsHandler.canUse();\n if (!canUseFsEvents) opts.useFsEvents = false;\n\n // Use polling on Mac if not using fsevents.\n // Other platforms use non-polling fs_watch.\n if (undef(opts, 'usePolling') && !opts.useFsEvents) {\n opts.usePolling = isMacos;\n }\n\n // Always default to polling on IBM i because fs.watch() is not available on IBM i.\n if(isIBMi) {\n opts.usePolling = true;\n }\n\n // Global override (useful for end-developers that need to force polling for all\n // instances of chokidar, regardless of usage/dependency depth)\n const envPoll = process.env.CHOKIDAR_USEPOLLING;\n if (envPoll !== undefined) {\n const envLower = envPoll.toLowerCase();\n\n if (envLower === 'false' || envLower === '0') {\n opts.usePolling = false;\n } else if (envLower === 'true' || envLower === '1') {\n opts.usePolling = true;\n } else {\n opts.usePolling = !!envLower;\n }\n }\n const envInterval = process.env.CHOKIDAR_INTERVAL;\n if (envInterval) {\n opts.interval = Number.parseInt(envInterval, 10);\n }\n\n // Editor atomic write normalization enabled by default with fs.watch\n if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;\n if (opts.atomic) this._pendingUnlinks = new Map();\n\n if (undef(opts, 'followSymlinks')) opts.followSymlinks = true;\n\n if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false;\n if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};\n const awf = opts.awaitWriteFinish;\n if (awf) {\n if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;\n if (!awf.pollInterval) awf.pollInterval = 100;\n this._pendingWrites = new Map();\n }\n if (opts.ignored) opts.ignored = arrify(opts.ignored);\n\n let readyCalls = 0;\n this._emitReady = () => {\n readyCalls++;\n if (readyCalls >= this._readyCount) {\n this._emitReady = EMPTY_FN;\n this._readyEmitted = true;\n // use process.nextTick to allow time for listener to be bound\n process.nextTick(() => this.emit(EV_READY));\n }\n };\n this._emitRaw = (...args) => this.emit(EV_RAW, ...args);\n this._readyEmitted = false;\n this.options = opts;\n\n // Initialize with proper watcher.\n if (opts.useFsEvents) {\n this._fsEventsHandler = new FsEventsHandler(this);\n } else {\n this._nodeFsHandler = new NodeFsHandler(this);\n }\n\n // You’re frozen when your heart’s not open.\n Object.freeze(opts);\n}\n\n// Public methods\n\n/**\n * Adds paths to be watched on an existing FSWatcher instance\n * @param {Path|Array<Path>} paths_\n * @param {String=} _origAdd private; for handling non-existent paths to be watched\n * @param {Boolean=} _internal private; indicates a non-user add\n * @returns {FSWatcher} for chaining\n */\nadd(paths_, _origAdd, _internal) {\n const {cwd, disableGlobbing} = this.options;\n this.closed = false;\n let paths = unifyPaths(paths_);\n if (cwd) {\n paths = paths.map((path) => {\n const absPath = getAbsolutePath(path, cwd);\n\n // Check `path` instead of `absPath` because the cwd portion can't be a glob\n if (disableGlobbing || !isGlob(path)) {\n return absPath;\n }\n return normalizePath(absPath);\n });\n }\n\n // set aside negated glob strings\n paths = paths.filter((path) => {\n if (path.startsWith(BANG)) {\n this._ignoredPaths.add(path.slice(1));\n return false;\n }\n\n // if a path is being added that was previously ignored, stop ignoring it\n this._ignoredPaths.delete(path);\n this._ignoredPaths.delete(path + SLASH_GLOBSTAR);\n\n // reset the cached userIgnored anymatch fn\n // to make ignoredPaths changes effective\n this._userIgnored = undefined;\n\n return true;\n });\n\n if (this.options.useFsEvents && this._fsEventsHandler) {\n if (!this._readyCount) this._readyCount = paths.length;\n if (this.options.persistent) this._readyCount += paths.length;\n paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path));\n } else {\n if (!this._readyCount) this._readyCount = 0;\n this._readyCount += paths.length;\n Promise.all(\n paths.map(async path => {\n const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd);\n if (res) this._emitReady();\n return res;\n })\n ).then(results => {\n if (this.closed) return;\n results.filter(item => item).forEach(item => {\n this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));\n });\n });\n }\n\n return this;\n}\n\n/**\n * Close watchers or start ignoring events from specified paths.\n * @param {Path|Array<Path>} paths_ - string or array of strings, file/directory paths and/or globs\n * @returns {FSWatcher} for chaining\n*/\nunwatch(paths_) {\n if (this.closed) return this;\n const paths = unifyPaths(paths_);\n const {cwd} = this.options;\n\n paths.forEach((path) => {\n // convert to absolute path unless relative path already matches\n if (!sysPath.isAbsolute(path) && !this._closers.has(path)) {\n if (cwd) path = sysPath.join(cwd, path);\n path = sysPath.resolve(path);\n }\n\n this._closePath(path);\n\n this._ignoredPaths.add(path);\n if (this._watched.has(path)) {\n this._ignoredPaths.add(path + SLASH_GLOBSTAR);\n }\n\n // reset the cached userIgnored anymatch fn\n // to make ignoredPaths changes effective\n this._userIgnored = undefined;\n });\n\n return this;\n}\n\n/**\n * Close watchers and remove all listeners from watched paths.\n * @returns {Promise<void>}.\n*/\nclose() {\n if (this.closed) return this._closePromise;\n this.closed = true;\n\n // Memory management.\n this.removeAllListeners();\n const closers = [];\n this._closers.forEach(closerList => closerList.forEach(closer => {\n const promise = closer();\n if (promise instanceof Promise) closers.push(promise);\n }));\n this._streams.forEach(stream => stream.destroy());\n this._userIgnored = undefined;\n this._readyCount = 0;\n this._readyEmitted = false;\n this._watched.forEach(dirent => dirent.dispose());\n ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => {\n this[`_${key}`].clear();\n });\n\n this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();\n return this._closePromise;\n}\n\n/**\n * Expose list of watched paths\n * @returns {Object} for chaining\n*/\ngetWatched() {\n const watchList = {};\n this._watched.forEach((entry, dir) => {\n const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;\n watchList[key || ONE_DOT] = entry.getChildren().sort();\n });\n return watchList;\n}\n\nemitWithAll(event, args) {\n this.emit(...args);\n if (event !== EV_ERROR) this.emit(EV_ALL, ...args);\n}\n\n// Common helpers\n// --------------\n\n/**\n * Normalize and emit events.\n * Calling _emit DOES NOT MEAN emit() would be called!\n * @param {EventName} event Type of event\n * @param {Path} path File or directory path\n * @param {*=} val1 arguments to be passed with event\n * @param {*=} val2\n * @param {*=} val3\n * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\nasync _emit(event, path, val1, val2, val3) {\n if (this.closed) return;\n\n const opts = this.options;\n if (isWindows) path = sysPath.normalize(path);\n if (opts.cwd) path = sysPath.relative(opts.cwd, path);\n /** @type Array<any> */\n const args = [event, path];\n if (val3 !== undefined) args.push(val1, val2, val3);\n else if (val2 !== undefined) args.push(val1, val2);\n else if (val1 !== undefined) args.push(val1);\n\n const awf = opts.awaitWriteFinish;\n let pw;\n if (awf && (pw = this._pendingWrites.get(path))) {\n pw.lastChange = new Date();\n return this;\n }\n\n if (opts.atomic) {\n if (event === EV_UNLINK) {\n this._pendingUnlinks.set(path, args);\n setTimeout(() => {\n this._pendingUnlinks.forEach((entry, path) => {\n this.emit(...entry);\n this.emit(EV_ALL, ...entry);\n this._pendingUnlinks.delete(path);\n });\n }, typeof opts.atomic === 'number' ? opts.atomic : 100);\n return this;\n }\n if (event === EV_ADD && this._pendingUnlinks.has(path)) {\n event = args[0] = EV_CHANGE;\n this._pendingUnlinks.delete(path);\n }\n }\n\n if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) {\n const awfEmit = (err, stats) => {\n if (err) {\n event = args[0] = EV_ERROR;\n args[1] = err;\n this.emitWithAll(event, args);\n } else if (stats) {\n // if stats doesn't exist the file must have been deleted\n if (args.length > 2) {\n args[2] = stats;\n } else {\n args.push(stats);\n }\n this.emitWithAll(event, args);\n }\n };\n\n this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);\n return this;\n }\n\n if (event === EV_CHANGE) {\n const isThrottled = !this._throttle(EV_CHANGE, path, 50);\n if (isThrottled) return this;\n }\n\n if (opts.alwaysStat && val1 === undefined &&\n (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE)\n ) {\n const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;\n let stats;\n try {\n stats = await stat(fullPath);\n } catch (err) {}\n // Suppress event when fs_stat fails, to avoid sending undefined 'stat'\n if (!stats || this.closed) return;\n args.push(stats);\n }\n this.emitWithAll(event, args);\n\n return this;\n}\n\n/**\n * Common handler for errors\n * @param {Error} error\n * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\n_handleError(error) {\n const code = error && error.code;\n if (error && code !== 'ENOENT' && code !== 'ENOTDIR' &&\n (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))\n ) {\n this.emit(EV_ERROR, error);\n }\n return error || this.closed;\n}\n\n/**\n * Helper utility for throttling\n * @param {ThrottleType} actionType type being throttled\n * @param {Path} path being acted upon\n * @param {Number} timeout duration of time to suppress duplicate actions\n * @returns {Object|false} tracking object or false if action should be suppressed\n */\n_throttle(actionType, path, timeout) {\n if (!this._throttled.has(actionType)) {\n this._throttled.set(actionType, new Map());\n }\n\n /** @type {Map<Path, Object>} */\n const action = this._throttled.get(actionType);\n /** @type {Object} */\n const actionPath = action.get(path);\n\n if (actionPath) {\n actionPath.count++;\n return false;\n }\n\n let timeoutObject;\n const clear = () => {\n const item = action.get(path);\n const count = item ? item.count : 0;\n action.delete(path);\n clearTimeout(timeoutObject);\n if (item) clearTimeout(item.timeoutObject);\n return count;\n };\n timeoutObject = setTimeout(clear, timeout);\n const thr = {timeoutObject, clear, count: 0};\n action.set(path, thr);\n return thr;\n}\n\n_incrReadyCount() {\n return this._readyCount++;\n}\n\n/**\n * Awaits write operation to finish.\n * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.\n * @param {Path} path being acted upon\n * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished\n * @param {EventName} event\n * @param {Function} awfEmit Callback to be called when ready for event to be emitted.\n */\n_awaitWriteFinish(path, threshold, event, awfEmit) {\n let timeoutHandler;\n\n let fullPath = path;\n if (this.options.cwd && !sysPath.isAbsolute(path)) {\n fullPath = sysPath.join(this.options.cwd, path);\n }\n\n const now = new Date();\n\n const awaitWriteFinish = (prevStat) => {\n fs.stat(fullPath, (err, curStat) => {\n if (err || !this._pendingWrites.has(path)) {\n if (err && err.code !== 'ENOENT') awfEmit(err);\n return;\n }\n\n const now = Number(new Date());\n\n if (prevStat && curStat.size !== prevStat.size) {\n this._pendingWrites.get(path).lastChange = now;\n }\n const pw = this._pendingWrites.get(path);\n const df = now - pw.lastChange;\n\n if (df >= threshold) {\n this._pendingWrites.delete(path);\n awfEmit(undefined, curStat);\n } else {\n timeoutHandler = setTimeout(\n awaitWriteFinish,\n this.options.awaitWriteFinish.pollInterval,\n curStat\n );\n }\n });\n };\n\n if (!this._pendingWrites.has(path)) {\n this._pendingWrites.set(path, {\n lastChange: now,\n cancelWait: () => {\n this._pendingWrites.delete(path);\n clearTimeout(timeoutHandler);\n return event;\n }\n });\n timeoutHandler = setTimeout(\n awaitWriteFinish,\n this.options.awaitWriteFinish.pollInterval\n );\n }\n}\n\n_getGlobIgnored() {\n return [...this._ignoredPaths.values()];\n}\n\n/**\n * Determines whether user has asked to ignore this path.\n * @param {Path} path filepath or dir\n * @param {fs.Stats=} stats result of fs.stat\n * @returns {Boolean}\n */\n_isIgnored(path, stats) {\n if (this.options.atomic && DOT_RE.test(path)) return true;\n if (!this._userIgnored) {\n const {cwd} = this.options;\n const ign = this.options.ignored;\n\n const ignored = ign && ign.map(normalizeIgnored(cwd));\n const paths = arrify(ignored)\n .filter((path) => typeof path === STRING_TYPE && !isGlob(path))\n .map((path) => path + SLASH_GLOBSTAR);\n const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths);\n this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS);\n }\n\n return this._userIgnored([path, stats]);\n}\n\n_isntIgnored(path, stat) {\n return !this._isIgnored(path, stat);\n}\n\n/**\n * Provides a set of common helpers and properties relating to symlink and glob handling.\n * @param {Path} path file, directory, or glob pattern being watched\n * @param {Number=} depth at any depth > 0, this isn't a glob\n * @returns {WatchHelper} object containing helpers for this path\n */\n_getWatchHelpers(path, depth) {\n const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);\n const follow = this.options.followSymlinks;\n\n return new WatchHelper(path, watchPath, follow, this);\n}\n\n// Directory helpers\n// -----------------\n\n/**\n * Provides directory tracking objects\n * @param {String} directory path of the directory\n * @returns {DirEntry} the directory's tracking object\n */\n_getWatchedDir(directory) {\n if (!this._boundRemove) this._boundRemove = this._remove.bind(this);\n const dir = sysPath.resolve(directory);\n if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove));\n return this._watched.get(dir);\n}\n\n// File helpers\n// ------------\n\n/**\n * Check for read permissions.\n * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405\n * @param {fs.Stats} stats - object, result of fs_stat\n * @returns {Boolean} indicates whether the file can be read\n*/\n_hasReadPermissions(stats) {\n if (this.options.ignorePermissionErrors) return true;\n\n // stats.mode may be bigint\n const md = stats && Number.parseInt(stats.mode, 10);\n const st = md & 0o777;\n const it = Number.parseInt(st.toString(8)[0], 10);\n return Boolean(4 & it);\n}\n\n/**\n * Handles emitting unlink events for\n * files and directories, and via recursion, for\n * files and directories within directories that are unlinked\n * @param {String} directory within which the following item is located\n * @param {String} item base path of item/directory\n * @returns {void}\n*/\n_remove(directory, item, isDirectory) {\n // if what is being deleted is a directory, get that directory's paths\n // for recursive deleting and cleaning of watched object\n // if it is not a directory, nestedDirectoryChildren will be empty array\n const path = sysPath.join(directory, item);\n const fullPath = sysPath.resolve(path);\n isDirectory = isDirectory != null\n ? isDirectory\n : this._watched.has(path) || this._watched.has(fullPath);\n\n // prevent duplicate handling in case of arriving here nearly simultaneously\n // via multiple paths (such as _handleFile and _handleDir)\n if (!this._throttle('remove', path, 100)) return;\n\n // if the only watched file is removed, watch for its return\n if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {\n this.add(directory, item, true);\n }\n\n // This will create a new entry in the watched object in either case\n // so we got to do the directory check beforehand\n const wp = this._getWatchedDir(path);\n const nestedDirectoryChildren = wp.getChildren();\n\n // Recursively remove children directories / files.\n nestedDirectoryChildren.forEach(nested => this._remove(path, nested));\n\n // Check if item was on the watched list and remove it\n const parent = this._getWatchedDir(directory);\n const wasTracked = parent.has(item);\n parent.remove(item);\n\n // Fixes issue #1042 -> Relative paths were detected and added as symlinks\n // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),\n // but never removed from the map in case the path was deleted.\n // This leads to an incorrect state if the path was recreated:\n // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553\n if (this._symlinkPaths.has(fullPath)) {\n this._symlinkPaths.delete(fullPath);\n }\n\n // If we wait for this file to be fully written, cancel the wait.\n let relPath = path;\n if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);\n if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {\n const event = this._pendingWrites.get(relPath).cancelWait();\n if (event === EV_ADD) return;\n }\n\n // The Entry will either be a directory that just got removed\n // or a bogus entry to a file, in either case we have to remove it\n this._watched.delete(path);\n this._watched.delete(fullPath);\n const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK;\n if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);\n\n // Avoid conflicts if we later create another file with the same name\n if (!this.options.useFsEvents) {\n this._closePath(path);\n }\n}\n\n/**\n * Closes all watchers for a path\n * @param {Path} path\n */\n_closePath(path) {\n this._closeFile(path)\n const dir = sysPath.dirname(path);\n this._getWatchedDir(dir).remove(sysPath.basename(path));\n}\n\n/**\n * Closes only file-specific watchers\n * @param {Path} path\n */\n_closeFile(path) {\n const closers = this._closers.get(path);\n if (!closers) return;\n closers.forEach(closer => closer());\n this._closers.delete(path);\n}\n\n/**\n *\n * @param {Path} path\n * @param {Function} closer\n */\n_addPathCloser(path, closer) {\n if (!closer) return;\n let list = this._closers.get(path);\n if (!list) {\n list = [];\n this._closers.set(path, list);\n }\n list.push(closer);\n}\n\n_readdirp(root, opts) {\n if (this.closed) return;\n const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts};\n let stream = readdirp(root, options);\n this._streams.add(stream);\n stream.once(STR_CLOSE, () => {\n stream = undefined;\n });\n stream.once(STR_END, () => {\n if (stream) {\n this._streams.delete(stream);\n stream = undefined;\n }\n });\n return stream;\n}\n\n}\n\n// Export FSWatcher class\nexports.FSWatcher = FSWatcher;\n\n/**\n * Instantiates watcher with paths to be tracked.\n * @param {String|Array<String>} paths file/directory paths and/or globs\n * @param {Object=} options chokidar opts\n * @returns an instance of FSWatcher for chaining.\n */\nconst watch = (paths, options) => {\n const watcher = new FSWatcher(options);\n watcher.add(paths);\n return watcher;\n};\n\nexports.watch = watch;\n","const defaultOpts = {\n wait: 0,\n maxWait: Infinity,\n leading: false,\n trailing: true\n};\nconst debug = () => {}; // console.debug\n\nmodule.exports = debounceQueue\n\nfunction debounceQueue(func, opts = {}) {\n if (typeof func !== 'function') {\n throw new Error('Required: the function to debounce');\n }\n\n if (typeof opts === 'number') {\n opts = { wait: opts };\n }\n\n opts = Object.assign({}, defaultOpts, opts);\n\n const queue = [];\n const time = { lastCall: new Date(0), lastFlush: new Date, };\n let timer;\n\n return function debounced(...args) {\n clearTimeout(timer);\n queue.push(args);\n const vars = { now: new Date, ...time };\n time.lastCall = vars.now;\n vars.sinceLastCall = vars.now - vars.lastCall;\n vars.sinceLastFlush = vars.now - vars.lastFlush;\n\n debug('[0] Data:', {\n opts,\n vars,\n [`sinceLastFlush (${vars.sinceLastFlush}) >= (${opts.maxWait}) maxWait`]: vars.sinceLastFlush >= opts.maxWait,\n [`sinceLastCall (${vars.sinceLastCall}) >= (${opts.wait}) wait`]: vars.sinceLastCall >= opts.wait,\n [`leading (${opts.leading}) && (sinceLastCall >= wait)`]: opts.leading && (vars.sinceLastCall >= opts.wait),\n });\n\n if (false\n || (vars.sinceLastFlush >= opts.maxWait)\n || (opts.leading && (vars.sinceLastCall >= opts.wait))\n ) {\n debug('[1] Calling now');\n return func(flush(vars.now, queue));\n }\n\n if (opts.trailing !== false) {\n debug('[2] Setting timer');\n timer = setTimeout(() => {\n debug('[3] Timer launching');\n return func(flush(vars.now, queue));\n }, opts.wait);\n }\n }\n\n function flush(now = new Date, q = queue) {\n time.lastFlush = now;\n return q.splice(0, q.length);\n }\n};\n","export { dev } from './dev.js';\n","import { createVeloCLIServer } from '@wix/editor-velo-cli-comm-api';\nimport { openBrowser } from '@wix/user-browser';\nimport { asyncExitHook } from 'exit-hook';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { ErrorViewer } from '@wix/cli-error-reporting';\nimport { writeCrashReport } from '@wix/cli-debug-log';\nimport { getDebugLogFilePath } from '@wix/cli-core-definitions';\nimport { cwd } from 'node:process';\nimport type { CommandServices } from '@wix/cli-command-contract';\nimport { createElement } from 'react';\nimport { renderSync } from '@wix/cli-ui-kit';\nimport { isHttpError } from '@wix/cli-http-client';\nimport { getDevEditorBaseUrl } from '../environment.js';\nimport { createMutableGridApp } from '../gridapp/createGridApp.js';\nimport { startGridAppUpdater } from '../gridapp/startGridAppUpdater.js';\nimport { KeyWatcher } from '../key-watcher.js';\nimport { loadProjectModel, saveProjectModel } from '../model.js';\nimport { createLogger } from '../logger.js';\nimport { sitesBiEvents } from '../bi.js';\nimport { createI18nT } from '../i18n.js';\nimport { authenticate } from '../authentication.js';\nimport { syncAllToRevision } from './sync-all-to-revision.js';\n\nexport async function dev(\n { biLogger, errorReporter }: CommandServices,\n {\n https = false,\n }: {\n https?: boolean;\n }\n) {\n let model = await loadProjectModel(cwd());\n const authState = await authenticate({\n metaSiteId: model.metaSiteId,\n biLogger,\n errorReporter,\n });\n\n const t = createI18nT();\n const logger = createLogger({ t });\n const biEvents = sitesBiEvents(biLogger);\n\n const server = createVeloCLIServer({ https });\n\n let gridAppId: string;\n try {\n gridAppId = await createMutableGridApp(model.projectFolder, {\n authState,\n });\n } catch (error) {\n const message = isHttpError(error) && error.response?.data?.message;\n\n throw new CliError({\n code: CliErrorCode.FailedToCreateGridApp({\n error: message,\n }),\n cause: error,\n });\n }\n\n await syncAllToRevision(model, { authState }, logger);\n\n const { close } = startGridAppUpdater(\n model,\n gridAppId,\n {\n authState,\n onError(error) {\n logger.logNewLine();\n errorReporter.reportError(error);\n writeCrashReport(getDebugLogFilePath(model.projectFolder), error);\n renderSync(createElement(ErrorViewer, { error }));\n },\n },\n logger,\n biEvents\n );\n\n const onServerDisconnected = (devEditorUrl: string) => {\n const message = logger.logNoOpenedTab(devEditorUrl);\n biEvents.messageDisplayed({ model, message });\n };\n\n const onSyncDevEditorChanges = async (revision: string) => {\n if (revision !== model.revision) {\n const newModel = { ...model, revision };\n\n await saveProjectModel(newModel);\n const message = logger.logUpdatedLocalCodeToRevision({\n revision: newModel.revision,\n });\n biEvents.messageDisplayed({ message, model });\n\n await syncAllToRevision(newModel, { authState }, logger);\n\n model = newModel;\n }\n };\n\n const openLocalEditor = async (serverPort: number) => {\n biEvents.userResponse({\n action: 'Browser opened',\n message: 'Opening the Local Editor',\n model,\n });\n\n const devEditorUrl = getDevEditorUrl(serverPort);\n\n if (https) {\n await openBrowser(new URL(`https://localhost:${serverPort}`).href);\n } else {\n await openBrowser(devEditorUrl);\n }\n };\n\n const getDevEditorUrl = (serverPort: number) => {\n const url = new URL(model.metaSiteId, getDevEditorBaseUrl());\n\n url.searchParams.append('localPort', serverPort.toString());\n url.searchParams.append('secureSocket', https.toString());\n\n return url.toString();\n };\n\n let keyWatcher: KeyWatcher | undefined;\n try {\n const { port: serverPort } = await server.serve(gridAppId, getDevEditorUrl);\n\n const devEditorUrl = getDevEditorUrl(serverPort);\n\n server.on('disconnected', () => onServerDisconnected(devEditorUrl));\n server.on('syncDevEditorChanges', onSyncDevEditorChanges);\n\n keyWatcher = new KeyWatcher();\n\n logger.logOpeningBrowser(https);\n\n await openLocalEditor(serverPort);\n const { ctrlCPromise } = keyWatcher.watch();\n keyWatcher.on('e', () => openLocalEditor(serverPort));\n\n asyncExitHook(server.close, { minimumWait: 500 });\n await ctrlCPromise;\n } finally {\n keyWatcher?.unwatch();\n await Promise.all([server.close(), close()]);\n }\n}\n","import process from 'node:process';\n\nconst asyncCallbacks = new Set();\nconst callbacks = new Set();\n\nlet isCalled = false;\nlet isRegistered = false;\n\nasync function exit(shouldManuallyExit, isSynchronous, signal) {\n\tif (isCalled) {\n\t\treturn;\n\t}\n\n\tisCalled = true;\n\n\tif (asyncCallbacks.size > 0 && isSynchronous) {\n\t\tconsole.error([\n\t\t\t'SYNCHRONOUS TERMINATION NOTICE:',\n\t\t\t'When explicitly exiting the process via process.exit or via a parent process,',\n\t\t\t'asynchronous tasks in your exitHooks will not run. Either remove these tasks,',\n\t\t\t'use gracefulExit() instead of process.exit(), or ensure your parent process',\n\t\t\t'sends a SIGINT to the process running this code.',\n\t\t].join(' '));\n\t}\n\n\tconst exitCode = 128 + signal;\n\n\tconst done = (force = false) => {\n\t\tif (force === true || shouldManuallyExit === true) {\n\t\t\tprocess.exit(exitCode); // eslint-disable-line unicorn/no-process-exit\n\t\t}\n\t};\n\n\tfor (const callback of callbacks) {\n\t\tcallback(exitCode);\n\t}\n\n\tif (isSynchronous) {\n\t\tdone();\n\t\treturn;\n\t}\n\n\tconst promises = [];\n\tlet forceAfter = 0;\n\tfor (const [callback, wait] of asyncCallbacks) {\n\t\tforceAfter = Math.max(forceAfter, wait);\n\t\tpromises.push(Promise.resolve(callback(exitCode)));\n\t}\n\n\t// Force exit if we exceeded our wait value\n\tconst asyncTimer = setTimeout(() => {\n\t\tdone(true);\n\t}, forceAfter);\n\n\tawait Promise.all(promises);\n\tclearTimeout(asyncTimer);\n\tdone();\n}\n\nfunction addHook(options) {\n\tconst {onExit, minimumWait, isSynchronous} = options;\n\tconst asyncCallbackConfig = [onExit, minimumWait];\n\n\tif (isSynchronous) {\n\t\tcallbacks.add(onExit);\n\t} else {\n\t\tasyncCallbacks.add(asyncCallbackConfig);\n\t}\n\n\tif (!isRegistered) {\n\t\tisRegistered = true;\n\n\t\t// Exit cases that support asynchronous handling\n\t\tprocess.once('beforeExit', exit.bind(undefined, true, false, -128));\n\t\tprocess.once('SIGINT', exit.bind(undefined, true, false, 2));\n\t\tprocess.once('SIGTERM', exit.bind(undefined, true, false, 15));\n\n\t\t// Explicit exit events. Calling will force an immediate exit and run all\n\t\t// synchronous hooks. Explicit exits must not extend the node process\n\t\t// artificially. Will log errors if asynchronous calls exist.\n\t\tprocess.once('exit', exit.bind(undefined, false, true, 0));\n\n\t\t// PM2 Cluster shutdown message. Caught to support async handlers with pm2,\n\t\t// needed because explicitly calling process.exit() doesn't trigger the\n\t\t// beforeExit event, and the exit event cannot support async handlers,\n\t\t// since the event loop is never called after it.\n\t\tprocess.on('message', message => {\n\t\t\tif (message === 'shutdown') {\n\t\t\t\texit(true, true, -128);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn () => {\n\t\tif (isSynchronous) {\n\t\t\tcallbacks.delete(onExit);\n\t\t} else {\n\t\t\tasyncCallbacks.delete(asyncCallbackConfig);\n\t\t}\n\t};\n}\n\nexport default function exitHook(onExit) {\n\tif (typeof onExit !== 'function') {\n\t\tthrow new TypeError('onExit must be a function');\n\t}\n\n\treturn addHook({\n\t\tonExit,\n\t\tisSynchronous: true,\n\t});\n}\n\nexport function asyncExitHook(onExit, options = {}) {\n\tif (typeof onExit !== 'function') {\n\t\tthrow new TypeError('onExit must be a function');\n\t}\n\n\tif (!(typeof options.minimumWait === 'number' && options.minimumWait > 0)) {\n\t\tthrow new TypeError('minimumWait must be set to a positive numeric value');\n\t}\n\n\treturn addHook({\n\t\tonExit,\n\t\tminimumWait: options.minimumWait,\n\t\tisSynchronous: false,\n\t});\n}\n\nexport function gracefulExit(signal = 0) {\n\texit(true, false, -128 + signal);\n}\n","import { getTestOverrides } from '@wix/cli-test-overrides';\n\nconst DEV_EDITOR_BASE_URL = 'https://wix.com/editor/';\n\nexport function getDevEditorBaseUrl(): string {\n return getTestOverrides().devEditorBaseUrl ?? DEV_EDITOR_BASE_URL;\n}\n","import type { AuthState } from '@wix/cli-auth';\nimport { createApp } from '@wix/ambassador-velo-apps-v1-app/http';\nimport type {\n App,\n CreateAppRequest,\n} from '@wix/ambassador-velo-apps-v1-app/types';\nimport { AppType } from '@wix/ambassador-velo-apps-v1-app/types';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { httpRequest } from '../http-request.js';\nimport { catchFilesMaxSizeError } from './error-handlers/maxFileSizeErrorHandler.js';\nimport { loadProjectGridAppContent } from './loadProjectGridAppContent.js';\n\nasync function createAppWithParams(\n params: CreateAppRequest,\n opts: {\n authState: AuthState;\n }\n): Promise<string> {\n let app: App | undefined;\n\n try {\n const response = await httpRequest(\n { type: 'code', authState: opts.authState },\n createApp(params)\n );\n app = response.data.app;\n } catch (err) {\n catchFilesMaxSizeError(err, params.content?.files);\n\n throw err;\n }\n\n if (!app?.id) {\n throw new CliError({\n code: CliErrorCode.InvalidCreateAppResponse(),\n info: {\n app,\n },\n });\n }\n\n return app.id;\n}\n\nexport async function createMutableGridApp(\n projectFolder: string,\n opts: {\n authState: AuthState;\n }\n) {\n const content = await loadProjectGridAppContent(projectFolder);\n\n return createAppWithParams(\n {\n app: {\n mutable: true,\n appType: AppType.VELO_ISOLATED,\n },\n content,\n },\n opts\n );\n}\n","import type { File } from '@wix/ambassador-velo-apps-v1-app/types';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { extractHttpError } from '@wix/cli-http-client';\n\nexport function catchFilesMaxSizeError(err: unknown, files: File[] = []) {\n if (!files.length) {\n return;\n }\n\n const httpError = extractHttpError(err);\n\n if (!httpError) {\n return;\n }\n\n const filesMaxSizeRawViolations =\n httpError.response?.data?.details?.validationError?.fieldViolations?.filter(\n (v: { violatedRule: string }) => v.violatedRule === 'MAX_LENGTH'\n );\n\n if (!filesMaxSizeRawViolations?.length) {\n return;\n }\n\n const maxSizeViolationsData = tryExtractMaxSizeViolationMetadata(\n filesMaxSizeRawViolations\n );\n\n throw new CliError({\n code: CliErrorCode.GridAppFilesMaxLengthExcceeded({\n maxSizeViolationsData,\n filePaths: files.map((f) => f.path ?? '[unknown file path]'),\n }),\n });\n}\n\nfunction tryExtractMaxSizeViolationMetadata(\n filesMaxSizeViolations: Array<{ field: string; description: string }>\n) {\n const fileIndexRegex = /\\[(?<fileIndex>\\d+)\\].content/;\n const expectedAndReceivedSizeRegex =\n /has size (?<receivedSize>\\d+), expected (?<expectedSize>\\d+) or less/;\n const violationsData: {\n expectedSize?: number;\n files: Array<{ fileIndex: number; receivedSize: number }>;\n } = {\n expectedSize: undefined,\n files: [],\n };\n\n for (const filesMaxSizeViolation of filesMaxSizeViolations) {\n const fileIndexMatchResult = fileIndexRegex.exec(\n filesMaxSizeViolation.field\n );\n const expectedAndReceivedSizeMatchResult =\n expectedAndReceivedSizeRegex.exec(filesMaxSizeViolation.description);\n\n if (\n !(\n fileIndexMatchResult?.groups?.fileIndex &&\n expectedAndReceivedSizeMatchResult?.groups?.receivedSize &&\n expectedAndReceivedSizeMatchResult.groups.expectedSize\n )\n ) {\n return null;\n }\n\n violationsData.expectedSize =\n violationsData.expectedSize ??\n Math.trunc(\n parseInt(expectedAndReceivedSizeMatchResult.groups.expectedSize, 10) /\n 1000\n );\n\n violationsData.files.push({\n receivedSize: Math.trunc(\n parseInt(expectedAndReceivedSizeMatchResult.groups.receivedSize, 10) /\n 1000\n ),\n fileIndex: parseInt(fileIndexMatchResult.groups.fileIndex, 10),\n });\n }\n\n return violationsData;\n}\n","import { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { AuthState } from '@wix/cli-auth';\nimport { updateFiles } from '@wix/ambassador-velo-ide-v1-gridapp-filestructure/http';\nimport { GridAppLayout } from '@wix/ambassador-velo-ide-v1-gridapp-filestructure/types';\nimport { getSourceFolder } from '@wix/velo-github-layout-definitions';\nimport { watch } from 'chokidar';\nimport debounceQueue from 'debounce-queue';\nimport pLimit from 'p-limit';\nimport normalizePath from 'normalize-path';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { httpRequest } from '../http-request.js';\nimport type { ProjectModel } from '../model.js';\nimport type { Logger } from '../logger.js';\nimport type { SitesBiEvents } from '../bi.js';\nimport { catchFilesMaxSizeError } from './error-handlers/maxFileSizeErrorHandler.js';\n\ntype ChokidarEventParams = [\n 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir',\n string,\n];\n\nconst WATCH_FS_EVENTS_DEBOUNCE_TIME = 1000;\n\nconst getSectionName = (path: string) => {\n if (path.startsWith('src/pages')) {\n return 'public';\n }\n if (path.startsWith('src/backend')) {\n return 'backend';\n }\n return 'other';\n};\n\nexport function startGridAppUpdater(\n model: ProjectModel,\n gridAppId: string,\n opts: {\n onError: (e: CliError) => void;\n authState: AuthState;\n },\n logger: Logger,\n biEvents: SitesBiEvents\n) {\n const { projectFolder } = model;\n const limit = pLimit(1);\n\n const watcher = watch(getSourceFolder(projectFolder), {\n disableGlobbing: true,\n cwd: projectFolder,\n ignoreInitial: true,\n })\n .on(\n 'all',\n debounceQueue(async (events: ChokidarEventParams[]) => {\n await limit(async () => {\n const logSynced = logger.logSyncingLocalCode();\n const { added, changed, removed } =\n normalizeChokidarBatchedEvents(events);\n const addedArray = Array.from(added.values()).map((path) => ({\n path,\n type: 'create',\n }));\n const changedArray = Array.from(changed.values()).map((path) => ({\n path,\n type: 'update',\n }));\n const removedArray = Array.from(removed.values()).map((path) => ({\n path,\n type: 'delete',\n }));\n\n addedArray\n .concat(changedArray)\n .concat(removedArray)\n .forEach((val) => {\n biEvents.file({\n model,\n action: val.type as 'create' | 'update' | 'delete',\n path: val.path,\n oldPath: '',\n sectionName: getSectionName(val.path),\n });\n if (val.type === 'update') {\n biEvents.codeChanged(model, val.path);\n }\n });\n\n try {\n await writeFiles({\n filesToUpdate: await Promise.all(\n addedArray.concat(changedArray).map(async (val) => ({\n path: normalizePath(val.path),\n content: await readFile(\n join(projectFolder, val.path),\n 'utf8'\n ),\n }))\n ),\n removedArray,\n gridAppId,\n authState: opts.authState,\n });\n\n const message = logSynced.success();\n biEvents.messageDisplayed({ message, model });\n biEvents.readyForReloadAfterCodeChanged(model);\n } catch (e) {\n logSynced.fail();\n const error = new CliError({\n code: CliErrorCode.GridAppFailedToUpdateFiles(),\n cause: e,\n info: {\n added,\n changed,\n removed,\n },\n });\n opts.onError(error);\n }\n });\n }, WATCH_FS_EVENTS_DEBOUNCE_TIME)\n )\n .on('error', (e) => {\n const error = new CliError({\n code: CliErrorCode.FailedToWatchFiles({ cause: e }),\n cause: e,\n });\n\n opts.onError(error);\n });\n\n return { close: () => watcher.close() };\n}\n\nfunction normalizeChokidarBatchedEvents(events: ChokidarEventParams[]) {\n return events.reduce(\n (result, [eventType, filePath]) => {\n switch (eventType) {\n case 'add': {\n result.added.add(filePath);\n break;\n }\n case 'change': {\n result.changed.add(filePath);\n break;\n }\n case 'unlink': {\n result.added.delete(filePath);\n result.changed.delete(filePath);\n result.removed.add(filePath);\n break;\n }\n case 'unlinkDir': {\n const filePathAsDir = filePath.endsWith('/')\n ? filePath\n : `${filePath}/`;\n result.added.forEach((filePath) => {\n if (filePath.startsWith(filePathAsDir)) {\n result.added.delete(filePath);\n }\n });\n result.changed.forEach((filePath) => {\n if (filePath.startsWith(filePathAsDir)) {\n result.changed.delete(filePath);\n }\n });\n result.removed.add(filePath);\n break;\n }\n case 'addDir': {\n break;\n }\n }\n return result;\n },\n {\n added: new Set<string>(),\n changed: new Set<string>(),\n removed: new Set<string>(),\n }\n );\n}\n\nasync function writeFiles({\n filesToUpdate,\n removedArray,\n gridAppId,\n authState,\n}: {\n filesToUpdate: Array<{ path: string; content: string }>;\n removedArray: Array<{ path: string; type: string }>;\n gridAppId: string;\n authState: AuthState;\n}) {\n try {\n await httpRequest(\n {\n type: 'code',\n authState,\n },\n updateFiles({\n gridAppId,\n layout: GridAppLayout.GITHUB,\n filesToUpdate,\n ignoreForbiddenPaths: true,\n pathsToDelete: removedArray.map((val) => val.path),\n })\n );\n } catch (err) {\n catchFilesMaxSizeError(err, filesToUpdate);\n throw err;\n }\n}\n",null,null,"import readline from 'node:readline';\nimport { stdin } from 'node:process';\n\ninterface Key {\n ctrl: boolean;\n name: string;\n sequence: string;\n meta: boolean;\n shift: boolean;\n}\n\ntype Callback = (key: Key) => void;\nexport class KeyWatcher {\n private actions = new Map<string, Callback>();\n\n private watchExitProcess() {\n return new Promise<void>((resolve) => {\n this.on('c', (key) => {\n if (key.ctrl) {\n resolve();\n }\n });\n });\n }\n\n on(key: string, callback: Callback) {\n this.actions.set(key, callback);\n }\n\n watch() {\n const rl = readline.createInterface(stdin);\n\n readline.emitKeypressEvents(stdin, rl);\n\n if (stdin.isTTY) {\n // This is required since in test we don't have a terminal and setRawMode is undefined\n stdin.setRawMode(true);\n stdin.setEncoding('utf8');\n }\n\n stdin.on('keypress', this.handleKeyPress);\n\n return {\n ctrlCPromise: this.watchExitProcess(),\n };\n }\n\n unwatch() {\n if (stdin.isTTY) {\n // This is required since in test we don't have a terminal and setRawMode is undefined\n stdin.setRawMode(false);\n }\n stdin.off('keypress', this.handleKeyPress);\n this.actions.clear();\n }\n\n handleKeyPress = (_: string, key: Key) => {\n this.actions.get(key.name)?.(key);\n };\n}\n","import { randomUUID } from 'node:crypto';\nimport {\n wixCliFileFolderCreatedRenamedDeleted,\n wixCliCliMessageDisplayed,\n wixCliCodeHasBeenChanged,\n wixCliUserResponseToCliMessage,\n wixCliReadyForReloadAfterCodeChange,\n} from '@wix/bi-logger-wix-cli/v2';\nimport type { BiLogger } from '@wix/cli-telemetry';\nimport type { ProjectModel } from './model.js';\n\nexport const sitesBiEvents = (biLogger: BiLogger) => ({\n file: ({\n model,\n action,\n path,\n sectionName,\n oldPath,\n }: {\n model: ProjectModel;\n action: 'create' | 'update' | 'delete';\n path: string;\n sectionName: string;\n oldPath: string;\n }) => {\n void biLogger.report(\n wixCliFileFolderCreatedRenamedDeleted({\n action,\n path,\n sectionName,\n oldPath,\n siteRevision: +model.revision,\n })\n );\n },\n codeChanged: (model: ProjectModel, fileName: string) => {\n void biLogger.report(\n wixCliCodeHasBeenChanged({\n fileName,\n siteRevision: +model.revision,\n })\n );\n },\n readyForReloadAfterCodeChanged: (model: ProjectModel) => {\n void biLogger.report(\n wixCliReadyForReloadAfterCodeChange({\n siteRevision: +model.revision,\n })\n );\n },\n messageDisplayed: ({\n message,\n model,\n }: {\n message: string;\n model: ProjectModel;\n }) => {\n void biLogger.report(\n wixCliCliMessageDisplayed({\n message,\n messageId: randomUUID(),\n siteRevision: +model.revision,\n })\n );\n },\n userResponse: ({\n model,\n action,\n message,\n }: {\n model: ProjectModel;\n action: 'Browser opened';\n message: string;\n }) => {\n void biLogger.report(\n wixCliUserResponseToCliMessage({\n action,\n message,\n messageId: randomUUID(),\n siteRevision: +model.revision,\n })\n );\n },\n});\n\nexport type SitesBiEvents = ReturnType<typeof sitesBiEvents>;\n","import { rm } from 'node:fs/promises';\nimport type { AuthState } from '@wix/cli-auth';\nimport { writeCrashReport } from '@wix/cli-debug-log';\nimport { getTypesDir } from '@wix/velo-github-layout-definitions';\nimport { getDebugLogFilePath } from '@wix/cli-core-definitions';\nimport type { ProjectModel } from '../model.js';\nimport { syncPages } from '../sources/index.js';\nimport { syncTypesWithAuth } from '../sync-types/index.js';\nimport type { Logger } from '../logger.js';\n\nexport async function syncAllToRevision(\n model: ProjectModel,\n opts: {\n authState: AuthState;\n },\n logger: Logger\n) {\n const logTypesSynced = logger.logSyncingTypesToRevision(model.revision);\n try {\n await syncTypesWithAuth(model, { authState: opts.authState });\n logTypesSynced.success();\n } catch (error) {\n // As a workaround until the types sync can handle large projects, this error is recoverable\n writeCrashReport(getDebugLogFilePath(model.projectFolder), error);\n logTypesSynced.fail();\n await rm(getTypesDir(model.projectFolder), {\n recursive: true,\n force: true,\n }).catch((e: unknown) => {\n writeCrashReport(getDebugLogFilePath(model.projectFolder), e);\n logger.logRecoverableFailureToRemoveTypesDir(e);\n });\n }\n\n const logPagesSynced = logger.logSyncingPagesToRevision(model.revision);\n try {\n await syncPages(model, { authState: opts.authState });\n logPagesSynced.success();\n } catch (error) {\n logPagesSynced.fail();\n throw error;\n }\n}\n","import { readdir } from 'node:fs/promises';\nimport { pagesDiff } from '@wix/ambassador-velo-apps-v1-app/http';\nimport type { PagesDiffRequest } from '@wix/ambassador-velo-apps-v1-app/types';\nimport { GridAppLayout } from '@wix/ambassador-velo-apps-v1-app/types';\nimport {\n getPagesFolder,\n getSourceFolder,\n} from '@wix/velo-github-layout-definitions';\nimport type { AuthState } from '@wix/cli-auth';\nimport { CliError, CliErrorCode } from '@wix/cli-error';\nimport { pathExists } from '@wix/cli-fs';\nimport { httpRequest } from '../http-request.js';\nimport type { ProjectModel } from '../model.js';\nimport { createPages, deletePages, renamePages } from './pages-diff.js';\n\nexport async function syncPages(\n model: ProjectModel,\n opts: {\n authState: AuthState;\n }\n): Promise<void> {\n const pagesFolder = getPagesFolder(model.projectFolder);\n\n if (!(await pathExists(pagesFolder))) {\n throw new CliError({\n code: CliErrorCode.NoPagesDirectoryFound({\n srcDir: getSourceFolder(model.projectFolder),\n }),\n });\n }\n\n const params: PagesDiffRequest = {\n layout: GridAppLayout.GITHUB,\n sourcePagesPaths: await readdir(pagesFolder),\n targetRevision: model.revision,\n };\n const { data } = await httpRequest(\n {\n authState: opts.authState,\n type: 'code',\n },\n pagesDiff(params)\n ).catch((e: unknown) => {\n throw new CliError({\n code: CliErrorCode.FailedToGetPagesDiff(),\n cause: e,\n info: { ...params },\n });\n });\n\n await Promise.all([\n createPages(model.projectFolder, data.pagesDiff?.created ?? []),\n renamePages(model.projectFolder, data.pagesDiff?.renamed ?? []),\n deletePages(model.projectFolder, data.pagesDiff?.deleted ?? []),\n ]);\n}\n","import { join } from 'node:path';\nimport { rm, rename } from 'node:fs/promises';\nimport type {\n NewPage,\n RenamedPage,\n PageId,\n} from '@wix/ambassador-velo-apps-v1-app/types';\nimport { pathExists, outputFile } from '@wix/cli-fs';\n\nexport async function createPages(\n projectFolder: string,\n pages: NewPage[]\n): Promise<void> {\n await Promise.all(\n pages.map((page) => {\n if (!page.pageId?.path || !page.content) {\n return Promise.resolve();\n }\n\n return outputFile(join(projectFolder, page.pageId.path), page.content);\n })\n );\n}\n\nexport async function renamePages(\n projectFolder: string,\n pages: RenamedPage[]\n): Promise<void> {\n await Promise.all(\n pages.map(async (page) => {\n if (!page.sourcePath?.path || !page.targetPath?.path) {\n return;\n }\n\n const sourcePath = join(projectFolder, page.sourcePath.path);\n const targetPath = join(projectFolder, page.targetPath.path);\n\n if (await pathExists(targetPath)) {\n return rm(sourcePath, { force: true });\n }\n\n return rename(sourcePath, targetPath);\n })\n );\n}\n\nexport async function deletePages(\n projectFolder: string,\n pages: PageId[]\n): Promise<void> {\n await Promise.all(\n pages.map((page) => {\n if (!page.path) {\n return Promise.resolve();\n }\n\n return rm(join(projectFolder, page.path), { force: true });\n })\n );\n}\n"],"mappings":"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,WACnBA,EAAQD,EAAO,MAAMC,EAAOC,CAAO,GAGrC,IAAIG,EAASP,GAAOG,EAAOC,CAAO,EAGlC,OAAIA,EAAQ,UAAY,KACtBG,EAASA,EAAO,OAAO,OAAO,GAI5BH,EAAQ,UAAY,KACtBG,EAAS,CAAC,GAAG,IAAI,IAAIA,CAAM,CAAC,GAGvBA,CACT,EAkBAL,EAAO,OAAS,CAACC,EAAOC,EAAU,CAAC,IAC7BD,IAAU,IAAMA,EAAM,OAAS,EAC1B,CAACA,CAAK,EAGRC,EAAQ,SAAW,GACtBF,EAAO,QAAQC,EAAOC,CAAO,EAC7BF,EAAO,OAAOC,EAAOC,CAAO,EAOlCR,GAAO,QAAUM,ICzKjB,IAAAM,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAA,SACC,MACA,MACA,MACA,MACA,KACA,IACA,MACA,MACA,KACA,MACA,OACA,MACA,MACA,MACA,WACA,KACA,MACA,MACA,KACA,MACA,MACA,OACA,KACA,MACA,KACA,MACA,OACA,MACA,QACA,MACA,MACA,MACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,WACA,MACA,MACA,QACA,MACA,MACA,MACA,YACA,YACA,YACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,KACA,MACA,OACA,UACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,UACA,KACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,QACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,MACA,MACA,UACA,QACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA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","names":["require_constants","__commonJSMin","exports","module","init_esm_shims","path","WIN_SLASH","WIN_NO_SLASH","DOT_LITERAL","PLUS_LITERAL","QMARK_LITERAL","SLASH_LITERAL","ONE_CHAR","QMARK","END_ANCHOR","START_ANCHOR","DOTS_SLASH","NO_DOT","NO_DOTS","NO_DOT_SLASH","NO_DOTS_SLASH","QMARK_NO_DOT","STAR","POSIX_CHARS","WINDOWS_CHARS","POSIX_REGEX_SOURCE","chars","win32","require_utils","__commonJSMin","exports","init_esm_shims","path","win32","REGEX_BACKSLASH","REGEX_REMOVE_BACKSLASH","REGEX_SPECIAL_CHARS","REGEX_SPECIAL_CHARS_GLOBAL","val","str","match","segs","options","input","char","lastIdx","idx","state","output","prepend","append","require_scan","__commonJSMin","exports","module","init_esm_shims","utils","CHAR_ASTERISK","CHAR_AT","CHAR_BACKWARD_SLASH","CHAR_COMMA","CHAR_DOT","CHAR_EXCLAMATION_MARK","CHAR_FORWARD_SLASH","CHAR_LEFT_CURLY_BRACE","CHAR_LEFT_PARENTHESES","CHAR_LEFT_SQUARE_BRACKET","CHAR_PLUS","CHAR_QUESTION_MARK","CHAR_RIGHT_CURLY_BRACE","CHAR_RIGHT_PARENTHESES","CHAR_RIGHT_SQUARE_BRACKET","isPathSeparator","code","depth","token","scan","input","options","opts","length","scanToEnd","slashes","tokens","parts","str","index","start","lastIndex","isBrace","isBracket","isGlob","isExtglob","isGlobstar","braceEscaped","backslashes","negated","negatedExtglob","finished","braces","prev","eos","peek","advance","next","base","prefix","glob","state","prevIndex","idx","n","i","value","require_parse","__commonJSMin","exports","module","init_esm_shims","constants","utils","MAX_LENGTH","POSIX_REGEX_SOURCE","REGEX_NON_SPECIAL_CHARS","REGEX_SPECIAL_CHARS_BACKREF","REPLACEMENTS","expandRange","args","options","value","v","syntaxError","type","char","parse","input","opts","max","len","bos","tokens","capture","win32","PLATFORM_CHARS","EXTGLOB_CHARS","DOT_LITERAL","PLUS_LITERAL","SLASH_LITERAL","ONE_CHAR","DOTS_SLASH","NO_DOT","NO_DOT_SLASH","NO_DOTS_SLASH","QMARK","QMARK_NO_DOT","STAR","START_ANCHOR","globstar","nodot","qmarkNoDot","star","state","extglobs","braces","stack","prev","eos","peek","n","advance","remaining","consume","num","append","token","negate","count","increment","decrement","push","tok","isBrace","isExtglob","extglobOpen","output","extglobClose","rest","extglobStar","expression","backslashes","m","esc","chars","first","index","next","match","slashes","inner","idx","pre","posix","extglob","prevValue","escaped","open","brace","arr","range","i","out","toks","t","prior","before","isStart","afterStar","after","end","NO_DOTS","slashDot","create","str","source","require_picomatch","__commonJSMin","exports","module","init_esm_shims","path","scan","parse","utils","constants","isObject","val","picomatch","glob","options","returnState","fns","input","str","isMatch","state","isState","opts","posix","regex","isIgnored","ignoreOpts","matcher","returnObject","match","output","result","format","patterns","pattern","p","returnOutput","prepend","append","source","parsed","err","require_picomatch","__commonJSMin","exports","module","init_esm_shims","require_readdirp","__commonJSMin","exports","module","init_esm_shims","fs","Readable","sysPath","promisify","picomatch","readdir","stat","lstat","realpath","BANG","RECURSIVE_ERROR_CODE","NORMAL_FLOW_ERRORS","FILE_TYPE","DIR_TYPE","FILE_DIR_TYPE","EVERYTHING_TYPE","ALL_TYPES","isNormalFlowError","error","maj","min","n","wantBigintFsStats","normalizeFilter","filter","glob","entry","positive","negative","item","trimmed","f","ReaddirpStream","_ReaddirpStream","path","options","opts","root","type","statMethod","batch","depth","files","slice","dirent","entryType","parent","basename","fullPath","err","stats","full","entryRealPath","entryRealPathStats","len","recursiveError","readdirp","readdirpPromise","resolve","reject","require_anymatch","__commonJSMin","exports","module","init_esm_shims","picomatch","normalizePath","BANG","DEFAULT_OPTIONS","arrify","item","createPattern","matcher","options","glob","string","matchPatterns","patterns","negPatterns","args","returnIndex","isList","_path","path","index","nglob","applied","pattern","anymatch","matchers","testString","opts","mtchers","negatedGlobs","ri","require_is_extglob","__commonJSMin","exports","module","init_esm_shims","str","match","require_is_glob","__commonJSMin","exports","module","init_esm_shims","isExtglob","chars","strictCheck","str","index","pipeIndex","closeSquareIndex","closeCurlyIndex","closeParenIndex","backSlashIndex","open","close","n","relaxedCheck","options","check","require_glob_parent","__commonJSMin","exports","module","init_esm_shims","isGlob","pathPosixDirname","isWin32","slash","backslash","enclosure","globby","escaped","str","opts","options","require_utils","__commonJSMin","exports","init_esm_shims","num","node","type","min","max","step","limit","block","n","nodes","acc","args","result","flat","arr","ele","require_stringify","__commonJSMin","exports","module","init_esm_shims","utils","ast","options","stringify","node","parent","invalidBlock","invalidNode","output","child","require_is_number","__commonJSMin","exports","module","init_esm_shims","num","require_to_regex_range","__commonJSMin","exports","module","init_esm_shims","isNumber","toRegexRange","min","max","options","opts","relax","shorthand","capture","wrap","cacheKey","a","b","result","isPadded","hasPadding","state","positives","negatives","newMin","splitToPatterns","collatePatterns","neg","pos","onlyNegative","filterPatterns","onlyPositive","intersected","splitToRanges","nines","zeros","stop","countNines","stops","countZeros","compare","rangeToPattern","start","zipped","zip","digits","pattern","count","i","startDigit","stopDigit","toCharacterClass","tok","ranges","tokens","prev","obj","toQuantifier","padZeros","arr","comparison","prefix","intersection","ele","string","contains","key","val","len","integer","str","value","diff","require_fill_range","__commonJSMin","exports","module","init_esm_shims","util","toRegexRange","isObject","val","transform","toNumber","value","isValidValue","isNumber","num","zeros","input","index","stringify","start","end","options","pad","maxLength","dash","toMaxLen","negative","toSequence","parts","maxLen","b","prefix","positives","negatives","result","v","toRange","a","isNumbers","stop","toRegex","wrap","rangeError","args","invalidRange","invalidStep","step","fillNumbers","descending","startString","endString","stepString","padded","format","push","range","fillLetters","min","max","fill","opts","require_compile","__commonJSMin","exports","module","init_esm_shims","fill","utils","compile","ast","options","walk","node","parent","invalidBlock","invalidNode","invalid","prefix","output","args","range","child","require_expand","__commonJSMin","exports","module","init_esm_shims","fill","stringify","utils","append","queue","stash","enclose","result","ele","item","value","expand","ast","options","rangeLimit","walk","node","parent","p","q","args","range","block","i","child","require_constants","__commonJSMin","exports","module","init_esm_shims","require_parse","__commonJSMin","exports","module","init_esm_shims","stringify","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","parse","input","options","opts","max","ast","stack","block","prev","brackets","length","index","depth","value","advance","push","node","next","open","brace","type","siblings","before","parent","require_braces","__commonJSMin","exports","module","init_esm_shims","stringify","compile","expand","parse","braces","input","options","output","pattern","result","require_binary_extensions","__commonJSMin","exports","module","require_binary_extensions","__commonJSMin","exports","module","init_esm_shims","require_is_binary_path","__commonJSMin","exports","module","init_esm_shims","path","binaryExtensions","extensions","filePath","require_constants","__commonJSMin","exports","init_esm_shims","sep","platform","os","val","require_nodefs_handler","__commonJSMin","exports","module","init_esm_shims","fs","sysPath","promisify","isBinaryPath","isWindows","isLinux","EMPTY_FN","EMPTY_STR","KEY_LISTENERS","KEY_ERR","KEY_RAW","HANDLER_KEYS","EV_CHANGE","EV_ADD","EV_ADD_DIR","EV_ERROR","STR_DATA","STR_END","BRACE_START","STAR","THROTTLE_MODE_WATCH","open","stat","lstat","close","fsrealpath","statMethods","foreach","val","fn","addAndConvert","main","prop","item","container","clearItem","cont","key","set","delFromSet","isEmptySet","FsWatchInstances","createFsWatchInstance","path","options","listener","errHandler","emitRaw","handleEvent","rawEvent","evPath","fsWatchBroadcast","error","fullPath","type","val1","val2","val3","setFsWatchListener","handlers","rawEmitter","watcher","broadcastErr","fd","FsWatchFileInstances","setFsWatchFileListener","listeners","rawEmitters","copts","curr","prev","currmtime","NodeFsHandler","fsW","opts","directory","basename","absolutePath","closer","file","stats","initialAdd","dirname","parent","prevStats","newStats","at","mt","entry","full","dir","linkPath","wh","target","depth","throttler","previous","current","stream","resolve","wasThrottled","realpath","parentDir","tracked","oDepth","dirPath","priorWh","ready","follow","absPath","targetPath","require_fsevents_handler","__commonJSMin","exports","module","init_esm_shims","fs","sysPath","promisify","fsevents","error","mtch","maj","min","EV_ADD","EV_CHANGE","EV_ADD_DIR","EV_UNLINK","EV_ERROR","STR_DATA","STR_END","FSEVENT_CREATED","FSEVENT_MODIFIED","FSEVENT_DELETED","FSEVENT_MOVED","FSEVENT_UNKNOWN","FSEVENT_FLAG_MUST_SCAN_SUBDIRS","FSEVENT_TYPE_FILE","FSEVENT_TYPE_DIRECTORY","FSEVENT_TYPE_SYMLINK","ROOT_GLOBSTAR","DIR_SUFFIX","DOT_SLASH","FUNCTION_TYPE","EMPTY_FN","IDENTITY_FN","Depth","value","stat","lstat","realpath","statMethods","FSEventsWatchers","consolidateThreshhold","wrongEventFlags","createFSEventsInstance","path","callback","setFSEventsListener","realPath","listener","rawEmitter","watchPath","parentPath","cont","couldConsolidate","resolvedPath","hasSymlink","filteredListener","fullPath","flags","info","watchedParent","watchedPath","list","lst","count","canUse","calcDepth","root","i","sameTypes","stats","FsEventsHandler","fsw","ipaths","parent","watchedDir","item","opts","event","isDirectory","curDepth","eventName","transform","globFilter","closer","linkPath","linkTarget","aliasedPath","newPath","processPath","forceAdd","pp","isDir","dirObj","base","wh","priorDepth","entry","joinedPath","require_chokidar","__commonJSMin","exports","init_esm_shims","EventEmitter","fs","sysPath","promisify","readdirp","anymatch","globParent","isGlob","braces","normalizePath","NodeFsHandler","FsEventsHandler","EV_ALL","EV_READY","EV_ADD","EV_CHANGE","EV_UNLINK","EV_ADD_DIR","EV_UNLINK_DIR","EV_RAW","EV_ERROR","STR_CLOSE","STR_END","BACK_SLASH_RE","DOUBLE_SLASH_RE","SLASH_OR_BACK_SLASH_RE","DOT_RE","REPLACER_RE","SLASH","SLASH_SLASH","BRACE_START","BANG","ONE_DOT","TWO_DOTS","GLOBSTAR","SLASH_GLOBSTAR","ANYMATCH_OPTS","STRING_TYPE","FUNCTION_TYPE","EMPTY_STR","EMPTY_FN","isWindows","isMacos","isIBMi","stat","readdir","arrify","value","flatten","list","result","item","unifyPaths","paths_","paths","p","normalizePathToUnix","toUnix","string","str","prepend","path","normalizeIgnored","cwd","getAbsolutePath","undef","opts","key","DirEntry","dir","removeWatcher","items","STAT_METHOD_F","STAT_METHOD_L","WatchHelper","watchPath","follow","fsw","parts","entry","stats","resolvedPath","entryParts","globstar","part","i","FSWatcher","_opts","envPoll","envLower","envInterval","awf","readyCalls","args","_origAdd","_internal","disableGlobbing","absPath","res","results","closers","closerList","closer","promise","stream","dirent","watchList","event","val1","val2","val3","pw","awfEmit","err","fullPath","error","code","actionType","timeout","action","actionPath","timeoutObject","clear","count","thr","threshold","timeoutHandler","now","awaitWriteFinish","prevStat","curStat","ign","ignored","depth","directory","st","isDirectory","nested","parent","wasTracked","relPath","eventName","root","options","watch","watcher","require_debounce_queue","__commonJSMin","exports","module","init_esm_shims","defaultOpts","debug","debounceQueue","func","opts","queue","time","timer","args","vars","flush","now","q","init_esm_shims","init_esm_shims","init_esm_shims","process","asyncCallbacks","callbacks","isCalled","isRegistered","exit","shouldManuallyExit","isSynchronous","signal","exitCode","done","force","callback","promises","forceAfter","wait","asyncTimer","addHook","options","onExit","minimumWait","asyncCallbackConfig","message","asyncExitHook","onExit","options","addHook","import_react","cwd","init_esm_shims","DEV_EDITOR_BASE_URL","getDevEditorBaseUrl","getTestOverrides","init_esm_shims","init_esm_shims","catchFilesMaxSizeError","err","files","httpError","extractHttpError","filesMaxSizeRawViolations","v","maxSizeViolationsData","tryExtractMaxSizeViolationMetadata","CliError","CliErrorCode","f","filesMaxSizeViolations","fileIndexRegex","expectedAndReceivedSizeRegex","violationsData","filesMaxSizeViolation","fileIndexMatchResult","expectedAndReceivedSizeMatchResult","createAppWithParams","params","opts","app","httpRequest","createApp","err","catchFilesMaxSizeError","CliError","CliErrorCode","createMutableGridApp","projectFolder","content","loadProjectGridAppContent","AppType","init_esm_shims","readFile","join","init_esm_shims","_updateFilesRequest","_updateFilesResponse","resolveWixVeloIdeV1IdeServiceUrl","opts","domainToMappings","resolveUrl","updateFiles","payload","_a","serializer","_updateFilesRequest","toReq","fromReq","fromRes","_updateFilesResponse","__updateFiles","host","serializedData","metadata","resolveWixVeloIdeV1IdeServiceUrl","init_esm_shims","FileType","GridAppLayout","Action","WebhookIdentityType","import_chokidar","import_debounce_queue","import_normalize_path","WATCH_FS_EVENTS_DEBOUNCE_TIME","getSectionName","path","startGridAppUpdater","model","gridAppId","opts","logger","biEvents","projectFolder","limit","pLimit","watcher","getSourceFolder","debounceQueue","events","logSynced","added","changed","removed","normalizeChokidarBatchedEvents","addedArray","changedArray","removedArray","val","writeFiles","normalizePath","readFile","join","message","e","error","CliError","CliErrorCode","result","eventType","filePath","filePathAsDir","filesToUpdate","authState","httpRequest","updateFiles","GridAppLayout","err","catchFilesMaxSizeError","init_esm_shims","readline","stdin","KeyWatcher","resolve","key","callback","rl","_","init_esm_shims","randomUUID","sitesBiEvents","biLogger","model","action","path","sectionName","oldPath","wixCliFileFolderCreatedRenamedDeleted","fileName","wixCliCodeHasBeenChanged","wixCliReadyForReloadAfterCodeChange","message","wixCliCliMessageDisplayed","randomUUID","wixCliUserResponseToCliMessage","init_esm_shims","rm","init_esm_shims","readdir","init_esm_shims","join","rm","rename","createPages","projectFolder","pages","page","outputFile","join","renamePages","sourcePath","targetPath","pathExists","rm","rename","deletePages","syncPages","model","opts","pagesFolder","getPagesFolder","pathExists","CliError","CliErrorCode","getSourceFolder","params","GridAppLayout","readdir","data","httpRequest","pagesDiff","e","createPages","renamePages","deletePages","syncAllToRevision","model","opts","logger","logTypesSynced","syncTypesWithAuth","error","writeCrashReport","getDebugLogFilePath","rm","getTypesDir","e","logPagesSynced","syncPages","dev","biLogger","errorReporter","https","model","loadProjectModel","cwd","authState","authenticate","t","createI18nT","logger","createLogger","biEvents","sitesBiEvents","server","createVeloCLIServer","gridAppId","createMutableGridApp","error","message","isHttpError","CliError","CliErrorCode","syncAllToRevision","close","startGridAppUpdater","writeCrashReport","getDebugLogFilePath","renderSync","ErrorViewer","onServerDisconnected","devEditorUrl","onSyncDevEditorChanges","revision","newModel","saveProjectModel","openLocalEditor","serverPort","getDevEditorUrl","openBrowser","url","getDevEditorBaseUrl","keyWatcher","KeyWatcher","ctrlCPromise","asyncExitHook"]}