test-tracer-for-playwright-js
Version:
Package to allow collecting Playwright test results for use in Test Tracer.
1 lines • 1.7 MB
Source Map (JSON)
{"version":3,"sources":["../node_modules/readdir-glob/node_modules/minimatch/lib/path.js","../node_modules/balanced-match/index.js","../node_modules/brace-expansion/index.js","../node_modules/readdir-glob/node_modules/minimatch/minimatch.js","../node_modules/readdir-glob/index.js","../node_modules/async/dist/async.mjs","../node_modules/graceful-fs/polyfills.js","../node_modules/graceful-fs/legacy-streams.js","../node_modules/graceful-fs/clone.js","../node_modules/graceful-fs/graceful-fs.js","../node_modules/is-stream/index.js","../node_modules/process-nextick-args/index.js","../node_modules/isarray/index.js","../node_modules/lazystream/node_modules/readable-stream/lib/internal/streams/stream.js","../node_modules/lazystream/node_modules/safe-buffer/index.js","../node_modules/core-util-is/lib/util.js","../node_modules/inherits/inherits_browser.js","../node_modules/inherits/inherits.js","../node_modules/lazystream/node_modules/readable-stream/lib/internal/streams/BufferList.js","../node_modules/lazystream/node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/util-deprecate/node.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_writable.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/lazystream/node_modules/string_decoder/lib/string_decoder.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_readable.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_transform.js","../node_modules/lazystream/node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/lazystream/node_modules/readable-stream/readable.js","../node_modules/lazystream/node_modules/readable-stream/passthrough.js","../node_modules/lazystream/lib/lazystream.js","../node_modules/normalize-path/index.js","../node_modules/lodash/identity.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/constant.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_setToString.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/eq.js","../node_modules/lodash/isLength.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isArray.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_nativeKeysIn.js","../node_modules/lodash/_baseKeysIn.js","../node_modules/lodash/keysIn.js","../node_modules/lodash/defaults.js","../node_modules/readable-stream/lib/ours/primordials.js","../node_modules/event-target-shim/src/event.mjs","../node_modules/event-target-shim/src/event-target.mjs","../node_modules/abort-controller/src/abort-signal.ts","../node_modules/abort-controller/src/abort-controller.ts","../node_modules/readable-stream/lib/ours/util.js","../node_modules/readable-stream/lib/ours/errors.js","../node_modules/readable-stream/lib/internal/validators.js","../node_modules/process/index.js","../node_modules/readable-stream/lib/internal/streams/utils.js","../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/readable-stream/lib/internal/streams/legacy.js","../node_modules/readable-stream/lib/internal/streams/add-abort-signal.js","../node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/readable-stream/lib/internal/streams/from.js","../node_modules/readable-stream/lib/internal/streams/readable.js","../node_modules/readable-stream/lib/internal/streams/writable.js","../node_modules/readable-stream/lib/internal/streams/duplexify.js","../node_modules/readable-stream/lib/internal/streams/duplex.js","../node_modules/readable-stream/lib/internal/streams/transform.js","../node_modules/readable-stream/lib/internal/streams/passthrough.js","../node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/readable-stream/lib/internal/streams/compose.js","../node_modules/readable-stream/lib/internal/streams/operators.js","../node_modules/readable-stream/lib/stream/promises.js","../node_modules/readable-stream/lib/stream.js","../node_modules/readable-stream/lib/ours/index.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/_isFlattenable.js","../node_modules/lodash/_baseFlatten.js","../node_modules/lodash/flatten.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_baseFindIndex.js","../node_modules/lodash/_baseIsNaN.js","../node_modules/lodash/_strictIndexOf.js","../node_modules/lodash/_baseIndexOf.js","../node_modules/lodash/_arrayIncludes.js","../node_modules/lodash/_arrayIncludesWith.js","../node_modules/lodash/_arrayMap.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_baseDifference.js","../node_modules/lodash/isArrayLikeObject.js","../node_modules/lodash/difference.js","../node_modules/lodash/_Set.js","../node_modules/lodash/noop.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_createSet.js","../node_modules/lodash/_baseUniq.js","../node_modules/lodash/union.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_getPrototype.js","../node_modules/lodash/isPlainObject.js","../node_modules/minimatch/src/assert-valid-pattern.ts","../node_modules/minimatch/src/brace-expressions.ts","../node_modules/minimatch/src/unescape.ts","../node_modules/minimatch/src/ast.ts","../node_modules/minimatch/src/escape.ts","../node_modules/minimatch/src/index.ts","../node_modules/lru-cache/src/index.ts","../node_modules/minipass/src/index.ts","../node_modules/path-scurry/src/index.ts","../node_modules/glob/src/pattern.ts","../node_modules/glob/src/ignore.ts","../node_modules/glob/src/processor.ts","../node_modules/glob/src/walker.ts","../node_modules/glob/src/glob.ts","../node_modules/glob/src/has-magic.ts","../node_modules/glob/src/index.ts","../node_modules/archiver-utils/file.js","../node_modules/archiver-utils/index.js","../node_modules/archiver/lib/error.js","../node_modules/archiver/lib/core.js","../node_modules/compress-commons/lib/archivers/archive-entry.js","../node_modules/compress-commons/lib/archivers/zip/util.js","../node_modules/compress-commons/lib/archivers/zip/general-purpose-bit.js","../node_modules/compress-commons/lib/archivers/zip/unix-stat.js","../node_modules/compress-commons/lib/archivers/zip/constants.js","../node_modules/compress-commons/lib/archivers/zip/zip-archive-entry.js","../node_modules/compress-commons/lib/util/index.js","../node_modules/compress-commons/lib/archivers/archive-output-stream.js","../node_modules/crc-32/crc32.js","../node_modules/crc32-stream/lib/crc32-stream.js","../node_modules/crc32-stream/lib/deflate-crc32-stream.js","../node_modules/crc32-stream/lib/index.js","../node_modules/compress-commons/lib/archivers/zip/zip-archive-output-stream.js","../node_modules/compress-commons/lib/compress-commons.js","../node_modules/zip-stream/index.js","../node_modules/archiver/lib/plugins/zip.js","../node_modules/queue-tick/queue-microtask.js","../node_modules/queue-tick/process-next-tick.js","../node_modules/fast-fifo/fixed-size.js","../node_modules/fast-fifo/index.js","../node_modules/b4a/index.js","../node_modules/text-decoder/lib/pass-through-decoder.js","../node_modules/text-decoder/lib/utf8-decoder.js","../node_modules/text-decoder/index.js","../node_modules/streamx/index.js","../node_modules/tar-stream/headers.js","../node_modules/tar-stream/extract.js","../node_modules/tar-stream/constants.js","../node_modules/tar-stream/pack.js","../node_modules/tar-stream/index.js","../node_modules/archiver/lib/plugins/tar.js","../node_modules/buffer-crc32/dist/index.cjs","../node_modules/archiver/lib/plugins/json.js","../node_modules/archiver/index.js","../src/index.ts","../node_modules/uuid/dist/esm-node/stringify.js","../node_modules/uuid/dist/esm-node/rng.js","../node_modules/uuid/dist/esm-node/native.js","../node_modules/uuid/dist/esm-node/v4.js","../src/TestResult.ts"],"sourcesContent":["const isWindows = typeof process === 'object' &&\n process &&\n process.platform === 'win32'\nmodule.exports = isWindows ? { sep: '\\\\' } : { sep: '/' }\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","var balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m) return [str];\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n if (/\\$$/.test(m.pre)) { \n for (var k = 0; k < post.length; k++) {\n var expansion = pre+ '{' + m.body + '}' + post[k];\n expansions.push(expansion);\n }\n } else {\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = [];\n\n for (var j = 0; j < n.length; j++) {\n N.push.apply(N, expand(n[j], false));\n }\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n }\n\n return expansions;\n}\n\n","const minimatch = module.exports = (p, pattern, options = {}) => {\n assertValidPattern(pattern)\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n return new Minimatch(pattern, options).match(p)\n}\n\nmodule.exports = minimatch\n\nconst path = require('./lib/path.js')\nminimatch.sep = path.sep\n\nconst GLOBSTAR = Symbol('globstar **')\nminimatch.GLOBSTAR = GLOBSTAR\nconst expand = require('brace-expansion')\n\nconst plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// \"abc\" -> { a:true, b:true, c:true }\nconst charSet = s => s.split('').reduce((set, c) => {\n set[c] = true\n return set\n}, {})\n\n// characters that need to be escaped in RegExp.\nconst reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// characters that indicate we have to add the pattern start\nconst addPatternStartSet = charSet('[.(')\n\n// normalizes slashes.\nconst slashSplit = /\\/+/\n\nminimatch.filter = (pattern, options = {}) =>\n (p, i, list) => minimatch(p, pattern, options)\n\nconst ext = (a, b = {}) => {\n const t = {}\n Object.keys(a).forEach(k => t[k] = a[k])\n Object.keys(b).forEach(k => t[k] = b[k])\n return t\n}\n\nminimatch.defaults = def => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch\n }\n\n const orig = minimatch\n\n const m = (p, pattern, options) => orig(p, pattern, ext(def, options))\n m.Minimatch = class Minimatch extends orig.Minimatch {\n constructor (pattern, options) {\n super(pattern, ext(def, options))\n }\n }\n m.Minimatch.defaults = options => orig.defaults(ext(def, options)).Minimatch\n m.filter = (pattern, options) => orig.filter(pattern, ext(def, options))\n m.defaults = options => orig.defaults(ext(def, options))\n m.makeRe = (pattern, options) => orig.makeRe(pattern, ext(def, options))\n m.braceExpand = (pattern, options) => orig.braceExpand(pattern, ext(def, options))\n m.match = (list, pattern, options) => orig.match(list, pattern, ext(def, options))\n\n return m\n}\n\n\n\n\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = (pattern, options) => braceExpand(pattern, options)\n\nconst braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern)\n\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\nconst MAX_PATTERN_LENGTH = 1024 * 64\nconst assertValidPattern = pattern => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern')\n }\n\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long')\n }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nconst SUBPARSE = Symbol('subparse')\n\nminimatch.makeRe = (pattern, options) =>\n new Minimatch(pattern, options || {}).makeRe()\n\nminimatch.match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options)\n list = list.filter(f => mm.match(f))\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\n// replace stuff like \\* with *\nconst globUnescape = s => s.replace(/\\\\(.)/g, '$1')\nconst charUnescape = s => s.replace(/\\\\([^-\\]])/g, '$1')\nconst regExpEscape = s => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\nconst braExpEscape = s => s.replace(/[[\\]\\\\]/g, '\\\\$&')\n\nclass Minimatch {\n constructor (pattern, options) {\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.windowsPathsNoEscape = !!options.windowsPathsNoEscape ||\n options.allowWindowsEscape === false\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/')\n }\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n this.partial = !!options.partial\n\n // make the set of regexps etc.\n this.make()\n }\n\n debug () {}\n\n make () {\n const pattern = this.pattern\n const options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n let set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = (...args) => console.error(...args)\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(s => s.split(slashSplit))\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map((s, si, set) => s.map(this.parse, this))\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(s => s.indexOf(false) === -1)\n\n this.debug(this.pattern, set)\n\n this.set = set\n }\n\n parseNegate () {\n if (this.options.nonegate) return\n\n const pattern = this.pattern\n let negate = false\n let negateOffset = 0\n\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.slice(negateOffset)\n this.negate = negate\n }\n\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* istanbul ignore if */\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n /* istanbul ignore if */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n hit = f === p\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else /* istanbul ignore else */ if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return (fi === fl - 1) && (file[fi] === '')\n }\n\n // should be unreachable.\n /* istanbul ignore next */\n throw new Error('wtf?')\n }\n\n braceExpand () {\n return braceExpand(this.pattern, this.options)\n }\n\n parse (pattern, isSub) {\n assertValidPattern(pattern)\n\n const options = this.options\n\n // shortcuts\n if (pattern === '**') {\n if (!options.noglobstar)\n return GLOBSTAR\n else\n pattern = '*'\n }\n if (pattern === '') return ''\n\n let re = ''\n let hasMagic = false\n let escaping = false\n // ? => one single character\n const patternListStack = []\n const negativeLists = []\n let stateChar\n let inClass = false\n let reClassStart = -1\n let classStart = -1\n let cs\n let pl\n let sp\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set. However, if the pattern\n // starts with ., then traversal patterns can match.\n let dotTravAllowed = pattern.charAt(0) === '.'\n let dotFileAllowed = options.dot || dotTravAllowed\n const patternStart = () =>\n dotTravAllowed\n ? ''\n : dotFileAllowed\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)'\n const subPatternStart = (p) =>\n p.charAt(0) === '.'\n ? ''\n : options.dot\n ? '(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))'\n : '(?!\\\\.)'\n\n\n const clearStateChar = () => {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n this.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (let i = 0, c; (i < pattern.length) && (c = pattern.charAt(i)); i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping) {\n /* istanbul ignore next - completely not allowed, even escaped. */\n if (c === '/') {\n return false\n }\n\n if (reSpecials[c]) {\n re += '\\\\'\n }\n re += c\n escaping = false\n continue\n }\n\n switch (c) {\n /* istanbul ignore next */\n case '/': {\n // Should already be path-split by now.\n return false\n }\n\n case '\\\\':\n if (inClass && pattern.charAt(i + 1) === '-') {\n re += c\n continue\n }\n\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n this.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(': {\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n const plEntry = {\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close,\n }\n this.debug(this.pattern, '\\t', plEntry)\n patternListStack.push(plEntry)\n // negation is (?:(?!(?:js)(?:<rest>))[^/]*)\n re += plEntry.open\n // next entry starts with a dot maybe?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true\n re += subPatternStart(pattern.slice(i + 1))\n }\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n }\n\n case ')': {\n const plEntry = patternListStack[patternListStack.length - 1]\n if (inClass || !plEntry) {\n re += '\\\\)'\n continue\n }\n patternListStack.pop()\n\n // closing an extglob\n clearStateChar()\n hasMagic = true\n pl = plEntry\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(Object.assign(pl, { reEnd: re.length }))\n }\n continue\n }\n\n case '|': {\n const plEntry = patternListStack[patternListStack.length - 1]\n if (inClass || !plEntry) {\n re += '\\\\|'\n continue\n }\n\n clearStateChar()\n re += '|'\n // next subpattern can start with a dot?\n if (plEntry.start === 0 && plEntry.type !== '!') {\n dotTravAllowed = true\n re += subPatternStart(pattern.slice(i + 1))\n }\n continue\n }\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n continue\n }\n\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + braExpEscape(charUnescape(cs)) + ']')\n // looks good, finish up the class.\n re += c\n } catch (er) {\n // out of order ranges in JS are errors, but in glob syntax,\n // they're just a range that matches nothing.\n re = re.substring(0, reClassStart) + '(?:$.)' // match nothing ever\n }\n hasMagic = true\n inClass = false\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (reSpecials[c] && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n break\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.slice(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substring(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n let tail\n tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, (_, $1, $2) => {\n /* istanbul ignore else - should already be done */\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n const t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n const addPatternStart = addPatternStartSet[re.charAt(0)]\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (let n = negativeLists.length - 1; n > -1; n--) {\n const nl = negativeLists[n]\n\n const nlBefore = re.slice(0, nl.reStart)\n const nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n let nlAfter = re.slice(nl.reEnd)\n const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n const closeParensBefore = nlBefore.split(')').length\n const openParensBefore = nlBefore.split('(').length - closeParensBefore\n let cleanAfter = nlAfter\n for (let i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n const dollar = nlAfter === '' && isSub !== SUBPARSE ? '(?:$|\\\\/)' : ''\n\n re = nlBefore + nlFirst + nlAfter + dollar + nlLast\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart() + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // if it's nocase, and the lcase/uppercase don't match, it's magic\n if (options.nocase && !hasMagic) {\n hasMagic = pattern.toUpperCase() !== pattern.toLowerCase()\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n const flags = options.nocase ? 'i' : ''\n try {\n return Object.assign(new RegExp('^' + re + '$', flags), {\n _glob: pattern,\n _src: re,\n })\n } catch (er) /* istanbul ignore next - should be impossible */ {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n }\n\n makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n const options = this.options\n\n const twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n const flags = options.nocase ? 'i' : ''\n\n // coalesce globstars and regexpify non-globstar patterns\n // if it's the only item, then we just do one twoStar\n // if it's the first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if it's the last, append (\\/twoStar|) to previous\n // if it's in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set.map(pattern => {\n pattern = pattern.map(p =>\n typeof p === 'string' ? regExpEscape(p)\n : p === GLOBSTAR ? GLOBSTAR\n : p._src\n ).reduce((set, p) => {\n if (!(set[set.length - 1] === GLOBSTAR && p === GLOBSTAR)) {\n set.push(p)\n }\n return set\n }, [])\n pattern.forEach((p, i) => {\n if (p !== GLOBSTAR || pattern[i-1] === GLOBSTAR) {\n return\n }\n if (i === 0) {\n if (pattern.length > 1) {\n pattern[i+1] = '(?:\\\\\\/|' + twoStar + '\\\\\\/)?' + pattern[i+1]\n } else {\n pattern[i] = twoStar\n }\n } else if (i === pattern.length - 1) {\n pattern[i-1] += '(?:\\\\\\/|' + twoStar + ')?'\n } else {\n pattern[i-1] += '(?:\\\\\\/|\\\\\\/' + twoStar + '\\\\\\/)' + pattern[i+1]\n pattern[i+1] = GLOBSTAR\n }\n })\n return pattern.filter(p => p !== GLOBSTAR).join('/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) /* istanbul ignore next - should be impossible */ {\n this.regexp = false\n }\n return this.regexp\n }\n\n match (f, partial = this.partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n const options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n const set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n let filename\n for (let i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i]\n let file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n const hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n }\n\n static defaults (def) {\n return minimatch.defaults(def).Minimatch\n }\n}\n\nminimatch.Minimatch = Minimatch\n","module.exports = readdirGlob;\n\nconst fs = require('fs');\nconst { EventEmitter } = require('events');\nconst { Minimatch } = require('minimatch');\nconst { resolve } = require('path');\n\nfunction readdir(dir, strict) {\n return new Promise((resolve, reject) => {\n fs.readdir(dir, {withFileTypes: true} ,(err, files) => {\n if(err) {\n switch (err.code) {\n case 'ENOTDIR': // Not a directory\n if(strict) {\n reject(err);\n } else {\n resolve([]);\n }\n break;\n case 'ENOTSUP': // Operation not supported\n case 'ENOENT': // No such file or directory\n case 'ENAMETOOLONG': // Filename too long\n case 'UNKNOWN':\n resolve([]);\n break;\n case 'ELOOP': // Too many levels of symbolic links\n default:\n reject(err);\n break;\n }\n } else {\n resolve(files);\n }\n });\n });\n}\nfunction stat(file, followSymlinks) {\n return new Promise((resolve, reject) => {\n const statFunc = followSymlinks ? fs.stat : fs.lstat;\n statFunc(file, (err, stats) => {\n if(err) {\n switch (err.code) {\n case 'ENOENT':\n if(followSymlinks) {\n // Fallback to lstat to handle broken links as files\n resolve(stat(file, false)); \n } else {\n resolve(null);\n }\n break;\n default:\n resolve(null);\n break;\n }\n } else {\n resolve(stats);\n }\n });\n });\n}\n\nasync function* exploreWalkAsync(dir, path, followSymlinks, useStat, shouldSkip, strict) {\n let files = await readdir(path + dir, strict);\n for(const file of files) {\n let name = file.name;\n if(name === undefined) {\n // undefined file.name means the `withFileTypes` options is not supported by node\n // we have to call the stat function to know if file is directory or not.\n name = file;\n useStat = true;\n }\n const filename = dir + '/' + name;\n const relative = filename.slice(1); // Remove the leading /\n const absolute = path + '/' + relative;\n let stats = null;\n if(useStat || followSymlinks) {\n stats = await stat(absolute, followSymlinks);\n }\n if(!stats && file.name !== undefined) {\n stats = file;\n }\n if(stats === null) {\n stats = { isDirectory: () => false };\n }\n\n if(stats.isDirectory()) {\n if(!shouldSkip(relative)) {\n yield {relative, absolute, stats};\n yield* exploreWalkAsync(filename, path, followSymlinks, useStat, shouldSkip, false);\n }\n } else {\n yield {relative, absolute, stats};\n }\n }\n}\nasync function* explore(path, followSymlinks, useStat, shouldSkip) {\n yield* exploreWalkAsync('', path, followSymlinks, useStat, shouldSkip, true);\n}\n\n\nfunction readOptions(options) {\n return {\n pattern: options.pattern,\n dot: !!options.dot,\n noglobstar: !!options.noglobstar,\n matchBase: !!options.matchBase,\n nocase: !!options.nocase,\n ignore: options.ignore,\n skip: options.skip,\n\n follow: !!options.follow,\n stat: !!options.stat,\n nodir: !!options.nodir,\n mark: !!options.mark,\n silent: !!options.silent,\n absolute: !!options.absolute\n };\n}\n\nclass ReaddirGlob extends EventEmitter {\n constructor(cwd, options, cb) {\n super();\n if(typeof options === 'function') {\n cb = options;\n options = null;\n }\n\n this.options = readOptions(options || {});\n \n this.matchers = [];\n if(this.options.pattern) {\n const matchers = Array.isArray(this.options.pattern) ? this.options.pattern : [this.options.pattern];\n this.matchers = matchers.map( m =>\n new Minimatch(m, {\n dot: this.options.dot,\n noglobstar:this.options.noglobstar,\n matchBase:this.options.matchBase,\n nocase:this.options.nocase\n })\n );\n }\n \n this.ignoreMatchers = [];\n if(this.options.ignore) {\n const ignorePatterns = Array.isArray(this.options.ignore) ? this.options.ignore : [this.options.ignore];\n this.ignoreMatchers = ignorePatterns.map( ignore =>\n new Minimatch(ignore, {dot: true})\n );\n }\n \n this.skipMatchers = [];\n if(this.options.skip) {\n const skipPatterns = Array.isArray(this.options.skip) ? this.options.skip : [this.options.skip];\n this.skipMatchers = skipPatterns.map( skip =>\n new Minimatch(skip, {dot: true})\n );\n }\n\n this.iterator = explore(resolve(cwd || '.'), this.options.follow, this.options.stat, this._shouldSkipDirectory.bind(this));\n this.paused = false;\n this.inactive = false;\n this.aborted = false;\n \n if(cb) {\n this._matches = []; \n this.on('match', match => this._matches.push(this.options.absolute ? match.absolute : match.relative));\n this.on('error', err => cb(err));\n this.on('end', () => cb(null, this._matches));\n }\n\n setTimeout( () => this._next(), 0);\n }\n\n _shouldSkipDirectory(relative) {\n //console.log(relative, this.skipMatchers.some(m => m.match(relative)));\n return this.skipMatchers.some(m => m.match(relative));\n }\n\n _fileMatches(relative, isDirectory) {\n const file = relative + (isDirectory ? '/' : '');\n return (this.matchers.length === 0 || this.matchers.some(m => m.match(file)))\n && !this.ignoreMatchers.some(m => m.match(file))\n && (!this.options.nodir || !isDirectory);\n }\n\n _next() {\n if(!this.paused && !this.aborted) {\n this.iterator.next()\n .then((obj)=> {\n if(!obj.done) {\n const isDirectory = obj.value.stats.isDirectory();\n if(this._fileMatches(obj.value.relative, isDirectory )) {\n let relative = obj.value.relative;\n let absolute = obj.value.absolute;\n if(this.options.mark && isDirectory) {\n relative += '/';\n absolute += '/';\n }\n if(this.options.stat) {\n this.emit('match', {relative, absolute, stat:obj.value.stats});\n } else {\n this.emit('match', {relative, absolute});\n }\n }\n this._next(this.iterator);\n } else {\n this.emit('end');\n }\n })\n .catch((err) => {\n this.abort();\n this.emit('error', err);\n if(!err.code && !this.options.silent) {\n console.error(err);\n }\n });\n } else {\n this.inactive = true;\n }\n }\n\n abort() {\n this.aborted = true;\n }\n\n pause() {\n this.paused = true;\n }\n\n resume() {\n this.paused = false;\n if(this.inactive) {\n this.inactive = false;\n this._next();\n }\n }\n}\n\n\nfunction readdirGlob(pattern, options, cb) {\n return new ReaddirGlob(pattern, options, cb);\n}\nreaddirGlob.ReaddirGlob = ReaddirGlob;","/**\n * Creates a continuation function with some arguments already applied.\n *\n * Useful as a shorthand when combined with other control flow functions. Any\n * arguments passed to the returned function are added to the arguments\n * originally passed to apply.\n *\n * @name apply\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} fn - The function you want to eventually apply all\n * arguments to. Invokes with (arguments...).\n * @param {...*} arguments... - Any number of arguments to automatically apply\n * when the continuation is called.\n * @returns {Function} the partially-applied function\n * @example\n *\n * // using apply\n * async.parallel([\n * async.apply(fs.writeFile, 'testfile1', 'test1'),\n * async.apply(fs.writeFile, 'testfile2', 'test2')\n * ]);\n *\n *\n * // the same process without using apply\n * async.parallel([\n * function(callback) {\n * fs.writeFile('testfile1', 'test1', callback);\n * },\n * function(callback) {\n * fs.writeFile('testfile2', 'test2', callback);\n * }\n * ]);\n *\n * // It's possible to pass any number of additional arguments when calling the\n * // continuation:\n *\n * node> var fn = async.apply(sys.puts, 'one');\n * node> fn('two', 'three');\n * one\n * two\n * three\n */\nfunction apply(fn, ...args) {\n return (...callArgs) => fn(...args,...callArgs);\n}\n\nfunction initialParams (fn) {\n return function (...args/*, callback*/) {\n var callback = args.pop();\n return fn.call(this, args, callback);\n };\n}\n\n/* istanbul ignore file */\n\nvar hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask;\nvar hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\nvar hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\nfunction fallback(fn) {\n setTimeout(fn, 0);\n}\n\nfunction wrap(defer) {\n return (fn, ...args) => defer(() => fn(...args));\n}\n\nvar _defer$1;\n\nif (hasQueueMicrotask) {\n _defer$1 = queueMicrotask;\n} else if (hasSetImmediate) {\n _defer$1 = setImmediate;\n} else if (hasNextTick) {\n _defer$1 = process.nextTick;\n} else {\n _defer$1 = fallback;\n}\n\nvar setImmediate$1 = wrap(_defer$1);\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(JSON.parse),\n * function (data, next) {\n * // data is the result of parsing the text.\n * // If there was a parsing error, it would have been caught.\n * }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(function (contents) {\n * return db.model.create(contents);\n * }),\n * function (model, next) {\n * // `model` is the instantiated model object.\n * // If there was an error, this function would be skipped.\n * }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n * var intermediateStep = await processFile(file);\n * return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n if (isAsync(func)) {\n return function (...args/*, callback*/) {\n const callback = args.pop();\n const promise = func.apply(this, args);\n return handlePromise(promise, callback)\n }\n }\n\n return initialParams(function (args, callback) {\n var result;\n try {\n result = func.apply(this, args);\n } catch (e) {\n return callback(e);\n }\n // if result is Promise object\n if (result && typeof result.then === 'function') {\n return handlePromise(result, callback)\n } else {\n callback(null, result);\n }\n });\n}\n\nfunction handlePromise(promise, callback) {\n return promise.then(value => {\n invokeCallback(callback, null, value);\n }, err => {\n invokeCallback(callback, err && (err instanceof Error || err.message) ? err : new Error(err));\n });\n}\n\nfunction invokeCallback(callback, error, value) {\n try {\n callback(error, value);\n } catch (err) {\n setImmediate$1(e => { throw e }, err);\n }\n}\n\nfunction isAsync(fn) {\n return fn[Symbol.toStringTag] === 'AsyncFunction';\n}\n\nfunction isAsyncGenerator(fn) {\n return fn[Symbol.toStringTag] === 'AsyncGenerator';\n}\n\nfunction isAsyncIterable(obj) {\n return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\nfunction wrapAsync(asyncFn) {\n if (typeof asyncFn !== 'function') throw new Error('expected a function')\n return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;\n}\n\n// conditionally promisify a function.\n// only return a promise if a callback is omitted\nfunction awaitify (asyncFn, arity) {\n if (!arity) arity = asyncFn.length;\n if (!arity) throw new Error('arity is undefined')\n function awaitable (...args) {\n if (typeof args[arity - 1] === 'function') {\n return asyncFn.apply(this, args)\n }\n\n return new Promise((resolve, reject) => {\n args[arity - 1] = (err, ...cbArgs) => {\n if (err) return reject(err)\n resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]);\n };\n asyncFn.apply(this, args);\n })\n }\n\n return awaitable\n}\n\nfunction applyEach$1 (eachfn) {\n return function applyEach(fns, ...callArgs) {\n const go = awaitify(function (callback) {\n var that = this;\n return eachfn(fns, (fn, cb) => {\n wrapAsync(fn).apply(that, callArgs.concat(cb));\n }, callback);\n });\n return go;\n };\n}\n\nfunction _asyncMap(eachfn, arr, iteratee, callback) {\n arr = arr || [];\n var results = [];\n var counter = 0;\n var _iteratee = wrapAsync(iteratee);\n\n return eachfn(arr, (value, _, iterCb) => {\n var index = counter++;\n _iteratee(value, (err, v) => {\n results[index] = v;\n iterCb(err);\n });\n }, err => {\n callback(err, results);\n });\n}\n\nfunction isArrayLike(value) {\n return value &&\n typeof value.length === 'number' &&\n value.length >= 0 &&\n value.length % 1 === 0;\n}\n\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nconst breakLoop = {};\n\nfunction once(fn) {\n function wrapper (...args) {\n if (fn === null) return;\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n }\n Object.assign(wrapper, fn);\n return wrapper\n}\n\nfunction getIterator (coll) {\n return coll[Symbol.iterator] && coll[Symbol.iterator]();\n}\n\nfunction createArrayIterator(coll) {\n var i = -1;\n var len = coll.length;\n return function next() {\n return ++i < len ? {value: coll[i], key: i} : null;\n }\n}\n\nfunction createES2015Iterator(iterator) {\n var i = -1;\n return function next() {\n var item = iterator.next();\n if (item.done)\n return null;\n i++;\n return {value: item.value, key: i};\n }\n}\n\nfunction createObjectIterator(obj) {\n var okeys = obj ? Object.keys(obj) : [];\n var i = -1;\n var len = okeys.length;\n return function next() {\n var key = okeys[++i];\n if (key === '__proto__') {\n return next();\n }\n return i < len ? {value: obj[key], key} : null;\n };\n}\n\nfunction createIterator(coll) {\n if (isArrayLike(coll)) {\n return createArrayIterator(coll);\n }\n\n var iterator = getIterator(coll);\n return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\n\nfunction onlyOnce(fn) {\n return function (...args) {\n if (fn === null) throw new Error(\"Callback was already called.\");\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n };\n}\n\n// for async generators\nfunction asyncEachOfLimit(generator, limit, iteratee, callback) {\n let done = false;\n let canceled = false;\n let awaiting = false;\n let running = 0;\n let idx = 0;\n\n function replenish() {\n //console.log('replenish')\n if (running >= limit || awaiting || done) return\n //console.log('replenish awaiting')\n awaiting = true;\n generator.next().then(({value, done: iterDone}) => {\n //console.log('got value', value)\n if (canceled || done) return\n awaiting = false;\n if (iterDone) {\n done = true;\n if (running <= 0) {\n //console.log('done nextCb')\n callback(null);\n }\n return;\n }\n running++;\n iteratee(value, idx, iterateeCallback);\n idx++;\n replenish();\n }).catch(handleError);\n }\n\n function iterateeCallback(err, result) {\n //console.log('iterateeCallback')\n running -= 1;\n if (canceled) return\n if (err) return handleError(err)\n\n if (err === false) {\n done = true;\n canceled = true;\n return\n }\n\n if (result === breakLoop || (done && running <= 0)) {\n done = true;\n //console.log('done iterCb')\n return callback(null);\n }\n replenish();\n }\n\n function handleError(err) {\n if (canceled) return\n awaiting = false;\n done = true;\n callback(err);\n }\n\n replenish();\n}\n\nvar eachOfLimit$2 = (limit) => {\n return (obj, iteratee, callback) => {\n callback = once(callback);\n if (limit <= 0) {\n throw new RangeError('concurrency limit cannot be less than 1')\n }\n if (!obj) {\n return callback(null);\n }\n if (isAsyncGenerator(obj)) {\n return asyncEachOfLimit(obj, limit, iteratee, callback)\n }\n if (isAsyncIterable(obj)) {\n return asyncEachOfLimit(obj[Symbol.asyncIterator](), limit, iteratee, callback)\n }\n var nextElem = createIterator(obj);\n var done = false;\n var canceled = false;\n var running = 0;\n var looping = false;\n\n function iterateeCallback(err, value) {\n if (canceled) return\n running -= 1;\n if (err) {\n done = true;\n callback(err);\n }\n else if (err === false) {\n done = true;\n canceled = true;\n }\n else if (value === breakLoop || (done && running <= 0)) {\n done = true;\n return callback(null);\n }\n else if (!looping) {\n replenish();\n }\n }\n\n function replenish () {\n looping = true;\n while (running < limit && !done) {\n var elem = nextElem();\n if (elem === null) {\n done = true;\n if (running <= 0) {\n callback(null);\n }\n return;\n }\n running += 1;\n iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));\n }\n looping = false;\n }\n\n replenish();\n };\n};\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name eachOfLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`. The `key` is the item's key, or index in the case of an\n * array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfLimit(coll, limit, iteratee, callback) {\n return eachOfLimit$2(limit)(coll, wrapAsync(iteratee), callback);\n}\n\nvar eachOfLimit$1 = awaitify(eachOfLimit, 4);\n\n// eachOf implementation optimized for array-likes\nfunction eachOfArrayLike(coll, iteratee, callback) {\n callback = once(callback);\n var index = 0,\n completed = 0,\n {length} = coll,\n canceled = false;\n if (length === 0) {\n callback(null);\n }\n\n function iteratorCallback(err, value) {\n if (err === false) {\n canceled = true;\n }\n if (canceled === true) return\n if (err) {\n callback(err);\n } else if ((++completed === length) || value === breakLoop) {\n callback(null);\n }\n }\n\n for (; index < length; index++) {\n iteratee(coll[index], index, onlyOnce(iteratorCallback));\n }\n}\n\n// a generic version of eachOf which can handle array, object, and iterator cases.\nfunction eachOfGeneric (coll, iteratee, callback) {\n return eachOfLimit$1(coll, Infinity, iteratee, callback);\n}\n\n/**\n * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument\n * to the iteratee.\n *\n * @name eachOf\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEachOf\n * @category Collection\n * @see [async.each]{@link module:Collections.each}\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each\n * item in `coll`.\n * The `key` is the item's key, or index in the case of an array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dev.json is a file containing a valid json object config for dev environment\n * // dev.json is a file containing a valid json object config for test environment\n * // prod.json is a file containing a valid json object config for prod environment\n * // invalid.json is a file with a malformed json object\n *\n * let configs = {}; //global variable\n * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'};\n * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'};\n *\n * // asynchronous function that reads a json file and parses the contents as json object\n * function parseFile(file, key, callback) {\n * fs.readFile(file, \"utf8\", function(err, data) {\n * if (err) return calback(err);\n * try {\n * configs[key] = JSON.parse(data);\n * } catch (e) {\n * return callback(e);\n * }\n * callback();\n * });\n * }\n *\n * // Using callbacks\n * async.forEachOf(validConfigFileMap, parseFile, function (err) {\n * if (err) {\n * console.error(err);\n * } else {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile, function (err) {\n * if (err) {\n * console.error(err);\n * // JSON parse error exception\n * } else {\n * console.log(configs);\n * }\n * });\n *\n * // Using Promises\n * async.forEachOf(validConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }).catch( err => {\n * console.error(err);\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * }).catch( err => {\n * console.error(err);\n * // JSON parse error exception\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.forEachOf(validConfigFileMap, parseFile);\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * //Error handing\n * async () => {\n * try {\n * let result = await async.forEachOf(invalidConfigFileMap, parseFile);\n * console.log(configs);\n * }\n * catch (err) {\n * console.log(err);\n * // JSON parse error exception\n * }\n * }\n *\n */\nfunction eachOf(coll, iteratee, callback) {\n var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric;\n return eachOfImplementation(coll, wrapAsync(iteratee), callback);\n}\n\nvar eachOf$1 = awaitify(eachOf, 3);\n\n/**\n * Produces a new collection of values by mapping each value in `coll` through\n * the `iteratee` function. The `iteratee` is called with an item from `coll`\n * and a callback for when it has finished processing. Each of these callbacks\n * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n * `iteratee` passes an error to its callback, the main `callback` (for the\n * `map` function) is immediately called with the error.\n *\n * Note, that since this function applies the `iteratee` to each item in\n * parallel, there is no guarantee that the `iteratee` functions will complete\n * in order. However, the results array will be in the same order as the\n * original `coll`.\n *\n * If `map` is passed an Object, the results will be an Array. The results\n * will roughly be in the order of the original Objects' keys (but this can\n * vary across JavaScript engines).\n *\n * @name map\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an Array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.map(fileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * });\n *\n * // Using Promises\n * async.map(fileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.map(fileList, getFileSizeInBytes);\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.map(withMissingFileList, getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction map (coll, iteratee, callback) {\n return _asyncMap(eachOf$1, coll, iteratee, callback)\n}\nvar map$1 = awaitify(map, 3);\n\n/**\n * Applies the provided arguments to each function in the array, calling\n * `callback` after all functions have completed. If you only provide the first\n * argument, `fns`, then it will return a function which lets you pass in the\n * arguments as if it were a single function call. If more arguments are\n * provided, `callback` is required while `args` is still optional. The results\n * for each of the applied async functions are passed to the final callback\n * as an array.\n *\n * @name applyEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s\n * to all call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {AsyncFunction} - Returns a function that takes no args other than\n * an optional callback, that is the result of applying the `args` to each\n * of the functions.\n * @example\n *\n * const appliedFn = async.applyEach([enableSearch, updateSchema], 'bucket')\n *\n * appliedFn((err, results) => {\n * // results[0] is the results for `enableSearch`\n * // results[1] is the results for `updateSchema`\n * });\n *\n * // partial application example:\n * async.each(\n * buckets,\n * async (bucket) => async.applyEach([enableSearch, updateSchema], bucket)(),\n * callback\n * );\n */\nvar applyEach = applyEach$1(map$1);\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n *\n * @name eachOfSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfSeries(coll, iteratee, callback) {\n return eachOfLimit$1(coll, 1, iteratee, callback)\n}\nvar eachOfSeries$1 = awaitify(eachOfSeries, 3);\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.\n *\n * @name mapSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapSeries (coll, iteratee, callback) {\n return _asyncMap(eachOfSeries$1, coll, iteratee, callback)\n}\nvar mapSeries$1 = awaitify(mapSeries, 3);\n\n/**\n * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time.\n *\n * @name applyEachSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.applyEach]{@link module:ControlFlow.applyEach}\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s to all\n * call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {AsyncFunction} - A function, that when called, is the result of\n * appling the `args` to the list of functions. It takes no args, other than\n * a callback.\n */\nvar applyEachSeries = applyEach$1(mapSeries$1);\n\nconst PROMISE_SYMBOL = Symbol('promiseCallback');\n\nfunction promiseCallback () {\n let resolve, reject;\n function callback (err, ...args) {\n if (err) return reject(err)\n resolve(args.length > 1 ? args : args[0]);\n }\n\n callback[PROMISE_SYMBOL] = new Promise((res, rej) => {\n resolve = res,\n reject = rej;\n });\n\n return callback\n}\n\n/**\n * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on\n * their requirements. Each function can optionally depend on other functions\n * being completed first, and each function is run as soon as its requirements\n * are satisfied.\n *\n * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence\n * will stop. Further tasks will not execute (so any other functions depending\n * on it will not run), and the main `callback` is immediately called with the\n * error.\n *\n * {@link AsyncFunction}s also receive an object containing the results of functions which\n * have completed so far as the first argument, if they have dependencies. If a\n * task function has no dependencies, it will only be passed a callback.\n *\n * @name auto\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Object} tasks - An object. Each of its properties is either a\n * function or an array of requirements, with the {@link AsyncFunction} itself the last item\n * in the array. The object's key of a property serves as the name of the task\n * defined by that property, i.e. can be used when specifying requirements for\n * other tasks. The function receives one or two arguments:\n * * a `results` object, containing the results of the previously executed\n * functions, only passed if the task has any dependencies,\n * * a `callback(err, result)` function, which must be called when finished,\n * passing an `error` (which can be `null`) and the result of the function's\n * execution.\n * @param {number} [concurrency=Infinity] - An optional `integer` for\n * determining the maximum number of tasks that can be run in parallel. By\n * default, as many as possible.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback. Results are always returned; however, if an\n * error occurs, no further `tasks` will be performed, and the results object\n * will only contain partial results. Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n * @example\n *\n * //Using Callbacks\n * async.auto({\n * get_data: function(callback) {\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: ['get_data', 'make_folder', function(results, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(results, callback) {\n * // once the file is written let's email a link to it...\n * callback(null, {'file':results.write_file, 'email':'user@example.com'});\n * }]\n * }, function(err, results) {\n * if (err) {\n * console.log('err = ', err);\n * }\n * console.log('results = ', results);\n * // results = {\n * // get_data: ['data', 'converted to array']\n * // make_folder; 'folder',\n * // write_file: 'filename'\n * // email_link: { file: 'filename', email: 'user@example.com' }\n * // }\n * });\n *\n * //Using Promises\n * async.auto({\n * get_data: function(callback) {\n * console.log('in get_data');\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * console.log('in make_folder');\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: ['get_data', 'make_folder', function(results, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(results, callback) {\n * // once the file is written let's email a link to it...\n * callback(null, {'file':results.write_file, 'email':'user@example.com'});\n * }]\n * }).then(results => {\n * console.log('results = ', results);\n * // results = {\n * // get_data: ['data', 'converted to array']\n * // make_folder; 'folder',\n * // write_file: 'filename'\n * // email_link: { file: 'filename', email: 'user@example.com' }\n * // }\n * }).catch(err => {\n * console.log('err = ', err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.auto({\n * get_data: function(callback) {\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: ['get_data', 'make_folder', function(results, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(results, callback) {\n * // once the file is written let's email a link to it...\n * callback(null, {'file':results.write_file, 'email':'user@example.com'});\n * }]\n * });\n * console.log('results = ', results);\n * // results = {\n * // get_data: ['data', 'converted to array']\n * // make_folder; 'folder',\n * // write_file: 'filename'\n * // email_link: { file: 'filename', email: 'user@example.com' }\n * // }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction auto(tasks, concurrency, callback) {\n if (typeof concurrency !== 'number') {\n // concurrency is optional, shift the args.\n callback = concurrency;\n concurrency = null;\n }\n callback = once(callback || promiseCallback());\n var numTasks = Object.keys(tasks).length;\n if (!numTasks) {\n return callback(null);\n }\n if (!concurrency) {\n concurrency = numTasks;\n }\n\n var results = {};\n var runningTasks = 0;\n var canceled = false;\n var hasError = false;\n\n var listeners = Object.create(null);\n\n var readyTasks = [];\n\n // for cycle detection:\n var readyToCheck = []; // tasks that have been identified as reachable\n // without the possibility of returning to an ancestor task\n var uncheckedDependencies = {};\n\n Object.keys(tasks).forEach(key => {\n var task = tasks[key];\n if (!Array.isArray(task)) {\n // no dependencies\n enqueueTask(key, [task]);\n readyToCheck.push(key);\n return;\n }\n\n var dependencies = task.slice(0, task.length - 1);\n var remainingDependencies = dependencies.length;\n if (remainingDependencies === 0) {\n enqueueTask(key, task);\n readyToCheck.push(key);\n return;\n }\n uncheckedDependencies[key] = remainingDependencies;\n\n dependencies.forEach(dependencyName => {\n if (!tasks[dependencyName]) {\n throw new Error('async.auto task `' + key +\n '` has a non-existent dependency `' +\n dependencyName + '` in ' +\n dependencies.join(', '));\n }\n addListener(dependencyName, () => {\n remainingDependencies--;\n if (remainingDependencies === 0) {\n enqueueTask(key, task);\n }\n });\n });\n });\n\n checkForDeadlocks();\n processQueue();\n\n function enqueueTask(key, task) {\n readyTasks.push(() => runTask(key, task));\n }\n\n function processQueue() {\n if (canceled) return\n if (readyTasks.length === 0 && runningTasks === 0) {\n return callback(null, results);\n }\n while(readyTasks.length && runningTasks < concurrency) {\n var run = readyTasks.shift();\n run();\n }\n\n }\n\n function addListener(taskName, fn) {\n var taskListeners = listeners[taskName];\n if (!taskListeners) {\n taskListeners = listeners[taskName] = [];\n }\n\n taskListeners.push(fn);\n }\n\n function taskComplete(taskName) {\n var taskListeners = listeners[taskName] || [];\n taskListeners.forEach(fn => fn());\n processQueue();\n }\n\n\n function runTask(key, task) {\n if (hasError) return;\n\n var taskCallback = onlyOnce((err, ...result) => {\n runningTasks--;\n if (err === false) {\n canceled = true;\n return\n }\n if (result.length < 2) {\n [result] = result;\n }\n if (err) {\n var safeResults = {};\n Object.keys(results).forEach(rkey => {\n safeResults[rkey] = results[rkey];\n });\n safeResults[key] = result;\n hasError = true;\n listeners = Object.create(null);\n if (canceled) return\n callback(err, safeResults);\n } else {\n results[key] = result;\n taskComplete(key);\n }\n });\n\n runningTasks++;\n var taskFn = wrapAsync(task[task.length - 1]);\n if (task.length > 1) {\n taskFn(results, taskCallback);\n } else {\n taskFn(taskCallback);\n }\n }\n\n function checkForDeadlocks() {\n // Kahn's algorithm\n // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm\n // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html\n var currentTask;\n var counter = 0;\n while (readyToCheck.length) {\n currentTask = readyToCheck.pop();\n counter++;\n getDependents(currentTask).forEach(dependent => {\n if (--uncheckedDependencies[dependent] === 0) {\n readyToCheck.push(dependent);\n }\n });\n }\n\n if (counter !== numTasks) {\n throw new Error(\n 'async.auto cannot execute tasks due to a recursive dependency'\n );\n }\n }\n\n function getDependents(taskName) {\n var result = [];\n Object.keys(tasks).forEach(key => {\n const task = tasks[key];\n if (Array.isArray(task) && task.indexOf(taskName) >= 0) {\n result.push(key);\n }\n });\n return result;\n }\n\n return callback[PROMISE_SYMBOL]\n}\n\nvar FN_ARGS = /^(?:async\\s)?(?:function)?\\s*(?:\\w+\\s*)?\\(([^)]+)\\)(?:\\s*{)/;\nvar ARROW_FN_ARGS = /^(?:async\\s)?\\s*(?:\\(\\s*)?((?:[^)=\\s]\\s*)*)(?:\\)\\s*)?=>/;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /(=.+)?(\\s*)$/;\n\nfunction stripComments(string) {\n let stripped = '';\n let index = 0;\n let endBlockComment = string.indexOf('*/');\n while (index < string.length) {\n if (string[index] === '/' && string[index+1] === '/') {\n // inline comment\n let endIndex = string.indexOf('\\n', index);\n index = (endIndex === -1) ? string.length : endIndex;\n } else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) {\n // block comment\n let endIndex = string.indexOf('*/', index);\n if (endIndex !== -1) {\n index = endIndex + 2;\n endBlockComment = string.indexOf('*/', index);\n } else {\n stripped += string[index];\n index++;\n }\n } else {\n stripped += string[index];\n index++;\n }\n }\n return stripped;\n}\n\nfunction parseParams(func) {\n const src = stripComments(func.toString());\n let match = src.match(FN_ARGS);\n if (!match) {\n match = src.match(ARROW_FN_ARGS);\n }\n if (!match) throw new Error('could not parse args in autoInject\\nSource:\\n' + src)\n let [, args] = match;\n return args\n .replace(/\\s/g, '')\n .split(FN_ARG_SPLIT)\n .map((arg) => arg.replace(FN_ARG, '').trim());\n}\n\n/**\n * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent\n * tasks are specified as parameters to the function, after the usual callback\n * parameter, with the parameter names matching the names of the tasks it\n * depends on. This can provide even more readable task graphs which can be\n * easier to maintain.\n *\n * If a final callback is specified, the task results are similarly injected,\n * specified as named parameters after the initial error parameter.\n *\n * The autoInject function is purely syntactic sugar and its semantics are\n * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}.\n *\n * @name autoInject\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.auto]{@link module:ControlFlow.auto}\n * @category Control Flow\n * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of\n * the form 'func([dependencies...], callback). The object's key of a property\n * serves as the name of the task defined by that property, i.e. can be used\n * when specifying requirements for other tasks.\n * * The `callback` parameter is a `callback(err, result)` which must be called\n * when finished, passing an `error` (which can be `null`) and the result of\n * the function's execution. The remaining parameters name other tasks on\n * which the task is dependent, and the results from those tasks are the\n * arguments of those parameters.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback, and a `results` object with any completed\n * task results, similar to `auto`.\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // The example from `auto` can be rewritten as follows:\n * async.autoInject({\n * get_data: function(callback) {\n * // async code to get some data\n * callback(null, 'data', 'converted to array');\n * },\n * make_folder: function(callback) {\n * // async code to create a directory to store a file in\n * // this is run at the same time as getting the data\n * callback(null, 'folder');\n * },\n * write_file: function(get_data, make_folder, callback) {\n * // once there is some data and the directory exists,\n * // write the data to a file in the directory\n * callback(null, 'filename');\n * },\n * email_link: function(write_file, callback) {\n * // once the file is written let's email a link to it...\n * // write_file contains the filename returned by write_file.\n * callback(null, {'file':write_file, 'email':'user@example.com'});\n * }\n * }, function(err, results) {\n * console.log('err = ', err);\n * console.log('email_link = ', results.email_link);\n * });\n *\n * // If you are using a JS minifier that mangles parameter names, `autoInject`\n * // will not work with plain functions, since the parameter names will be\n * // collapsed to a single letter identifier. To work around this, you can\n * // explicitly specify the names of the parameters your task function needs\n * // in an array, similar to Angular.js dependency injection.\n *\n * // This still has an advantage over plain `auto`, since the results a task\n * // depends on are still spread into arguments.\n * async.autoInject({\n * //...\n * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) {\n * callback(null, 'filename');\n * }],\n * email_link: ['write_file', function(write_file, callback) {\n * callback(null, {'file':write_file, 'email':'user@example.com'});\n * }]\n * //...\n * }, function(err, results) {\n * console.log('err = ', err);\n * console.log('email_link = ', results.email_link);\n * });\n */\nfunction autoInject(tasks, callback) {\n var newTasks = {};\n\n Object.keys(tasks).forEach(key => {\n var taskFn = tasks[key];\n var params;\n var fnIsAsync = isAsync(taskFn);\n var hasNoDeps =\n (!fnIsAsync && taskFn.length === 1) ||\n (fnIsAsync && taskFn.length === 0);\n\n if (Array.isArray(taskFn)) {\n params = [...taskFn];\n taskFn = params.pop();\n\n newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn);\n } else if (hasNoDeps) {\n // no dependencies, use the function as-is\n newTasks[key] = taskFn;\n } else {\n params = parseParams(taskFn);\n if ((taskFn.length === 0 && !fnIsAsync) && params.length === 0) {\n throw new Error(\"autoInject task functions require explicit parameters.\");\n }\n\n // remove callback param\n if (!fnIsAsync) params.pop();\n\n newTasks[key] = params.concat(newTask);\n }\n\n function newTask(results, taskCb) {\n var newArgs = params.map(name => results[name]);\n newArgs.push(taskCb);\n wrapAsync(taskFn)(...newArgs);\n }\n });\n\n return auto(newTasks, callback);\n}\n\n// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation\n// used for queues. This implementation assumes that the node provided by the user can be modified\n// to adjust the next and last properties. We implement only the minimal functionality\n// for queue support.\nclass DLL {\n constructor() {\n this.head = this.tail = null;\n this.length = 0;\n }\n\n removeLink(node) {\n if (node.prev) node.prev.next = node.next;\n else this.head = node.next;\n if (node.next) node.next.prev = node.prev;\n else this.tail = node.prev;\n\n node.prev = node.next = null;\n this.length -= 1;\n return node;\n }\n\n empty () {\n while(this.head) this.shift();\n return this;\n }\n\n insertAfter(node, newNode) {\n newNode.prev = node;\n newNode.next = node.next;\n if (node.next) node.next.prev = newNode;\n else this.tail = newNode;\n node.next = newNode;\n this.length += 1;\n }\n\n insertBefore(node, newNode) {\n newNode.prev = node.prev;\n newNode.next = node;\n if (node.prev) node.prev.next = newNode;\n else this.head = newNode;\n node.prev = newNode;\n this.length += 1;\n }\n\n unshift(node) {\n if (this.head) this.insertBefore(this.head, node);\n else setInitial(this, node);\n }\n\n push(node) {\n if (this.tail) this.insertAfter(this.tail, node);\n else setInitial(this, node);\n }\n\n shift() {\n return this.head && this.removeLink(this.head);\n }\n\n pop() {\n return this.tail && this.removeLink(this.tail);\n }\n\n toArray() {\n return [...this]\n }\n\n *[Symbol.iterator] () {\n var cur = this.head;\n while (cur) {\n yield cur.data;\n cur = cur.next;\n }\n }\n\n remove (testFn) {\n var curr = this.head;\n while(curr) {\n var {next} = curr;\n if (testFn(curr)) {\n this.removeLink(curr);\n }\n curr = next;\n }\n return this;\n }\n}\n\nfunction setInitial(dll, node) {\n dll.length = 1;\n dll.head = dll.tail = node;\n}\n\nfunction queue$1(worker, concurrency, payload) {\n if (concurrency == null) {\n concurrency = 1;\n }\n else if(concurrency === 0) {\n throw new RangeError('Concurrency must not be zero');\n }\n\n var _worker = wrapAsync(worker);\n var numRunning = 0;\n var workersList = [];\n const events = {\n error: [],\n drain: [],\n saturated: [],\n unsaturated: [],\n empty: []\n };\n\n function on (event, handler) {\n events[event].push(handler);\n }\n\n function once (event, handler) {\n const handleAndRemove = (...args) => {\n off(event, handleAndRemove);\n handler(...args);\n };\n events[event].push(handleAndRemove);\n }\n\n function off (event, handler) {\n if (!event) return Object.keys(events).forEach(ev => events[ev] = [])\n if (!handler) return events[event] = []\n events[event] = events[event].filter(ev => ev !== handler);\n }\n\n function trigger (event, ...args) {\n events[event].forEach(handler => handler(...args));\n }\n\n var processingScheduled = false;\n function _insert(data, insertAtFront, rejectOnError, callback) {\n if (callback != null && typeof callback !== 'function') {\n throw new Error('task callback must be a function');\n }\n q.started = true;\n\n var res, rej;\n function promiseCallback (err, ...args) {\n // we don't care about the error, let the global error handler\n // deal with it\n if (err) return rejectOnError ? rej(err) : res()\n if (args.length <= 1) return res(args[0])\n res(args);\n }\n\n var item = q._createTaskItem(\n data,\n rejectOnError ? promiseCallback :\n (callback || promiseCallback)\n );\n\n if (insertAtFront) {\n q._tasks.unshift(item);\n } else {\n q._tasks.push(item);\n }\n\n if (!processingScheduled) {\n processingScheduled = true;\n setImmediate$1(() => {\n processingScheduled = false;\n q.process();\n });\n }\n\n if (rejectOnError || !callback) {\n return new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n })\n }\n }\n\n function _createCB(tasks) {\n return function (err, ...args) {\n numRunning -= 1;\n\n for (var i = 0, l = tasks.length; i < l; i++) {\n var task = tasks[i];\n\n var index = workersList.indexOf(task);\n if (index === 0) {\n workersList.shift();\n } else if (index > 0) {\n workersList.splice(index, 1);\n }\n\n task.callback(err, ...args);\n\n if (err != null) {\n trigger('error', err, task.data);\n }\n }\n\n if (numRunning <= (q.concurrency - q.buffer) ) {\n trigger('unsaturated');\n }\n\n if (q.idle()) {\n trigger('drain');\n }\n q.process();\n };\n }\n\n function _maybeDrain(data) {\n if (data.length === 0 && q.idle()) {\n // call drain immediately if there are no tasks\n setImmediate$1(() => trigger('drain'));\n return true\n }\n return false\n }\n\n const eventMethod = (name) => (handler) => {\n if (!handler) {\n return new Promise((resolve, reject) => {\n once(name, (err, data) => {\n if (err) return reject(err)\n resolve(data);\n });\n })\n }\n off(name);\n on(name, handler);\n\n };\n\n var isProcessing = false;\n var q = {\n _tasks: new DLL(),\n _createTaskItem (data, callback) {\n return {\n data,\n callback\n };\n },\n *[Symbol.iterator] () {\n yield* q._tasks[Symbol.iterator]();\n },\n concurrency,\n payload,\n buffer: concurrency / 4,\n started: false,\n paused: false,\n push (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, false, false, callback))\n }\n return _insert(data, false, false, callback);\n },\n pushAsync (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, false, true, callback))\n }\n return _insert(data, false, true, callback);\n },\n kill () {\n off();\n q._tasks.empty();\n },\n unshift (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, true, false, callback))\n }\n return _insert(data, true, false, callback);\n },\n unshiftAsync (data, callback) {\n if (Array.isArray(data)) {\n if (_maybeDrain(data)) return\n return data.map(datum => _insert(datum, true, true, callback))\n }\n return _insert(data, true, true, callback);\n },\n remove (testFn) {\n q._tasks.remove(testFn);\n },\n process () {\n // Avoid trying to start too many processing operations. This can occur\n // when callbacks resolve synchronously (#1267).\n if (isProcessing) {\n return;\n }\n isProcessing = true;\n while(!q.paused && numRunning < q.concurrency && q._tasks.length){\n var tasks = [], data = [];\n var l = q._tasks.length;\n if (q.payload) l = Math.min(l, q.payload);\n for (var i = 0; i < l; i++) {\n var node = q._tasks.shift();\n tasks.push(node);\n workersList.push(node);\n data.push(node.data);\n }\n\n numRunning += 1;\n\n if (q._tasks.length === 0) {\n trigger('empty');\n }\n\n if (numRunning === q.concurrency) {\n trigger('saturated');\n }\n\n var cb = onlyOnce(_createCB(tasks));\n _worker(data, cb);\n }\n isProcessing = false;\n },\n length () {\n return q._tasks.length;\n },\n running () {\n return numRunning;\n },\n workersList () {\n return workersList;\n },\n idle() {\n return q._tasks.length + numRunning === 0;\n },\n pause () {\n q.paused = true;\n },\n resume () {\n if (q.paused === false) { return; }\n q.paused = false;\n setImmediate$1(q.process);\n }\n };\n // define these as fixed properties, so people get useful errors when updating\n Object.defineProperties(q, {\n saturated: {\n writable: false,\n value: eventMethod('saturated')\n },\n unsaturated: {\n writable: false,\n value: eventMethod('unsaturated')\n },\n empty: {\n writable: false,\n value: eventMethod('empty')\n },\n drain: {\n writable: false,\n value: eventMethod('drain')\n },\n error: {\n writable: false,\n value: eventMethod('error')\n },\n });\n return q;\n}\n\n/**\n * Creates a `cargo` object with the specified payload. Tasks added to the\n * cargo will be processed altogether (up to the `payload` limit). If the\n * `worker` is in progress, the task is queued until it becomes available. Once\n * the `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, cargo passes an array of tasks to a single worker, repeating\n * when the worker is finished.\n *\n * @name cargo\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An asynchronous function for processing an array\n * of queued tasks. Invoked with `(tasks, callback)`.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.QueueObject} A cargo object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargo and inner queue.\n * @example\n *\n * // create a cargo object with payload 2\n * var cargo = async.cargo(function(tasks, callback) {\n * for (var i=0; i<tasks.length; i++) {\n * console.log('hello ' + tasks[i].name);\n * }\n * callback();\n * }, 2);\n *\n * // add some items\n * cargo.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * cargo.push({name: 'bar'}, function(err) {\n * console.log('finished processing bar');\n * });\n * await cargo.push({name: 'baz'});\n * console.log('finished processing baz');\n */\nfunction cargo$1(worker, payload) {\n return queue$1(worker, 1, payload);\n}\n\n/**\n * Creates a `cargoQueue` object with the specified payload. Tasks added to the\n * cargoQueue will be processed together (up to the `payload` limit) in `concurrency` parallel workers.\n * If the all `workers` are in progress, the task is queued until one becomes available. Once\n * a `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, and [`cargo`]{@link module:ControlFlow.cargo} passes an array of tasks to a single worker,\n * the cargoQueue passes an array of tasks to multiple parallel workers.\n *\n * @name cargoQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @see [async.cargo]{@link module:ControlFLow.cargo}\n * @category Control Flow\n * @param {AsyncFunction} worker - An asynchronous function for processing an array\n * of queued tasks. Invoked with `(tasks, callback)`.\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel. If omitted, the concurrency\n * defaults to `1`. If the concurrency is `0`, an error is thrown.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.QueueObject} A cargoQueue object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargoQueue and inner queue.\n * @example\n *\n * // create a cargoQueue object with payload 2 and concurrency 2\n * var cargoQueue = async.cargoQueue(function(tasks, callback) {\n * for (var i=0; i<tasks.length; i++) {\n * console.log('hello ' + tasks[i].name);\n * }\n * callback();\n * }, 2, 2);\n *\n * // add some items\n * cargoQueue.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * cargoQueue.push({name: 'bar'}, function(err) {\n * console.log('finished processing bar');\n * });\n * cargoQueue.push({name: 'baz'}, function(err) {\n * console.log('finished processing baz');\n * });\n * cargoQueue.push({name: 'boo'}, function(err) {\n * console.log('finished processing boo');\n * });\n */\nfunction cargo(worker, concurrency, payload) {\n return queue$1(worker, concurrency, payload);\n}\n\n/**\n * Reduces `coll` into a single value using an async `iteratee` to return each\n * successive step. `memo` is the initial state of the reduction. This function\n * only operates in series.\n *\n * For performance reasons, it may make sense to split a call to this function\n * into a parallel map, and then use the normal `Array.prototype.reduce` on the\n * results. This function is for situations where each step in the reduction\n * needs to be async; if you can get the data before reducing it, then it's\n * probably a good idea to do so.\n *\n * @name reduce\n * @static\n * @memberOf module:Collections\n * @method\n * @alias inject\n * @alias foldl\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee completes with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file3.txt', 'file4.txt'];\n *\n * // asynchronous function that computes the file size in bytes\n * // file size is added to the memoized value, then returned\n * function getFileSizeInBytes(memo, file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, memo + stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.reduce(fileList, 0, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(result);\n * }\n * });\n *\n * // Using Promises\n * async.reduce(fileList, 0, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.reduce(fileList, 0, getFileSizeInBytes);\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes);\n * console.log(result);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction reduce(coll, memo, iteratee, callback) {\n callback = once(callback);\n var _iteratee = wrapAsync(iteratee);\n return eachOfSeries$1(coll, (x, i, iterCb) => {\n _iteratee(memo, x, (err, v) => {\n memo = v;\n iterCb(err);\n });\n }, err => callback(err, memo));\n}\nvar reduce$1 = awaitify(reduce, 4);\n\n/**\n * Version of the compose function that is more natural to read. Each function\n * consumes the return value of the previous function. It is the equivalent of\n * [compose]{@link module:ControlFlow.compose} with the arguments reversed.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name seq\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.compose]{@link module:ControlFlow.compose}\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} a function that composes the `functions` in order\n * @example\n *\n * // Requires lodash (or underscore), express3 and dresende's orm2.\n * // Part of an app, that fetches cats of the logged user.\n * // This example uses `seq` function to avoid overnesting and error\n * // handling clutter.\n * app.get('/cats', function(request, response) {\n * var User = request.models.User;\n * async.seq(\n * User.get.bind(User), // 'User.get' has signature (id, callback(err, data))\n * function(user, fn) {\n * user.getCats(fn); // 'getCats' has signature (callback(err, data))\n * }\n * )(req.session.user_id, function (err, cats) {\n * if (err) {\n * console.error(err);\n * response.json({ status: 'error', message: err.message });\n * } else {\n * response.json({ status: 'ok', message: 'Cats found', data: cats });\n * }\n * });\n * });\n */\nfunction seq(...functions) {\n var _functions = functions.map(wrapAsync);\n return function (...args) {\n var that = this;\n\n var cb = args[args.length - 1];\n if (typeof cb == 'function') {\n args.pop();\n } else {\n cb = promiseCallback();\n }\n\n reduce$1(_functions, args, (newargs, fn, iterCb) => {\n fn.apply(that, newargs.concat((err, ...nextargs) => {\n iterCb(err, nextargs);\n }));\n },\n (err, results) => cb(err, ...results));\n\n return cb[PROMISE_SYMBOL]\n };\n}\n\n/**\n * Creates a function which is a composition of the passed asynchronous\n * functions. Each function consumes the return value of the function that\n * follows. Composing functions `f()`, `g()`, and `h()` would produce the result\n * of `f(g(h()))`, only this version uses callbacks to obtain the return values.\n *\n * If the last argument to the composed function is not a function, a promise\n * is returned when you call it.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name compose\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} an asynchronous function that is the composed\n * asynchronous `functions`\n * @example\n *\n * function add1(n, callback) {\n * setTimeout(function () {\n * callback(null, n + 1);\n * }, 10);\n * }\n *\n * function mul3(n, callback) {\n * setTimeout(function () {\n * callback(null, n * 3);\n * }, 10);\n * }\n *\n * var add1mul3 = async.compose(mul3, add1);\n * add1mul3(4, function (err, result) {\n * // result now equals 15\n * });\n */\nfunction compose(...args) {\n return seq(...args.reverse());\n}\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.\n *\n * @name mapLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapLimit (coll, limit, iteratee, callback) {\n return _asyncMap(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar mapLimit$1 = awaitify(mapLimit, 4);\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.\n *\n * @name concatLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapLimit\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */\nfunction concatLimit(coll, limit, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return mapLimit$1(coll, limit, (val, iterCb) => {\n _iteratee(val, (err, ...args) => {\n if (err) return iterCb(err);\n return iterCb(err, args);\n });\n }, (err, mapResults) => {\n var result = [];\n for (var i = 0; i < mapResults.length; i++) {\n if (mapResults[i]) {\n result = result.concat(...mapResults[i]);\n }\n }\n\n return callback(err, result);\n });\n}\nvar concatLimit$1 = awaitify(concatLimit, 4);\n\n/**\n * Applies `iteratee` to each item in `coll`, concatenating the results. Returns\n * the concatenated list. The `iteratee`s are called in parallel, and the\n * results are concatenated as they return. The results array will be returned in\n * the original order of `coll` passed to the `iteratee` function.\n *\n * @name concat\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @alias flatMap\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * let directoryList = ['dir1','dir2','dir3'];\n * let withMissingDirectoryList = ['dir1','dir2','dir3', 'dir4'];\n *\n * // Using callbacks\n * async.concat(directoryList, fs.readdir, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * }\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir, function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * } else {\n * console.log(results);\n * }\n * });\n *\n * // Using Promises\n * async.concat(directoryList, fs.readdir)\n * .then(results => {\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir)\n * .then(results => {\n * console.log(results);\n * }).catch(err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.concat(directoryList, fs.readdir);\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * } catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.concat(withMissingDirectoryList, fs.readdir);\n * console.log(results);\n * } catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * }\n * }\n *\n */\nfunction concat(coll, iteratee, callback) {\n return concatLimit$1(coll, Infinity, iteratee, callback)\n}\nvar concat$1 = awaitify(concat, 3);\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.\n *\n * @name concatSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapSeries\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`.\n * The iteratee should complete with an array an array of results.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */\nfunction concatSeries(coll, iteratee, callback) {\n return concatLimit$1(coll, 1, iteratee, callback)\n}\nvar concatSeries$1 = awaitify(concatSeries, 3);\n\n/**\n * Returns a function that when called, calls-back with the values provided.\n * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to\n * [`auto`]{@link module:ControlFlow.auto}.\n *\n * @name constant\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {...*} arguments... - Any number of arguments to automatically invoke\n * callback with.\n * @returns {AsyncFunction} Returns a function that when invoked, automatically\n * invokes the callback with the previous given arguments.\n * @example\n *\n * async.waterfall([\n * async.constant(42),\n * function (value, next) {\n * // value === 42\n * },\n * //...\n * ], callback);\n *\n * async.waterfall([\n * async.constant(filename, \"utf8\"),\n * fs.readFile,\n * function (fileData, next) {\n * //...\n * }\n * //...\n * ], callback);\n *\n * async.auto({\n * hostname: async.constant(\"https://server.net/\"),\n * port: findFreePort,\n * launchServer: [\"hostname\", \"port\", function (options, cb) {\n * startServer(options, cb);\n * }],\n * //...\n * }, callback);\n */\nfunction constant$1(...args) {\n return function (...ignoredArgs/*, callback*/) {\n var callback = ignoredArgs.pop();\n return callback(null, ...args);\n };\n}\n\nfunction _createTester(check, getResult) {\n return (eachfn, arr, _iteratee, cb) => {\n var testPassed = false;\n var testResult;\n const iteratee = wrapAsync(_iteratee);\n eachfn(arr, (value, _, callback) => {\n iteratee(value, (err, result) => {\n if (err || err === false) return callback(err);\n\n if (check(result) && !testResult) {\n testPassed = true;\n testResult = getResult(true, value);\n return callback(null, breakLoop);\n }\n callback();\n });\n }, err => {\n if (err) return cb(err);\n cb(null, testPassed ? testResult : getResult(false));\n });\n };\n}\n\n/**\n * Returns the first value in `coll` that passes an async truth test. The\n * `iteratee` is applied in parallel, meaning the first iteratee to return\n * `true` will fire the detect `callback` with that result. That means the\n * result might not be the first item in the original `coll` (in terms of order)\n * that passes the test.\n\n * If order within the original `coll` is important, then look at\n * [`detectSeries`]{@link module:Collections.detectSeries}.\n *\n * @name detect\n * @static\n * @memberOf module:Collections\n * @method\n * @alias find\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }\n *);\n *\n * // Using Promises\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists)\n * .then(result => {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists);\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the file in the list that exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction detect(coll, iteratee, callback) {\n return _createTester(bool => bool, (res, item) => item)(eachOf$1, coll, iteratee, callback)\n}\nvar detect$1 = awaitify(detect, 3);\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name detectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findLimit\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction detectLimit(coll, limit, iteratee, callback) {\n return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar detectLimit$1 = awaitify(detectLimit, 4);\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.\n *\n * @name detectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findSeries\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction detectSeries(coll, iteratee, callback) {\n return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(1), coll, iteratee, callback)\n}\n\nvar detectSeries$1 = awaitify(detectSeries, 3);\n\nfunction consoleFunc(name) {\n return (fn, ...args) => wrapAsync(fn)(...args, (err, ...resultArgs) => {\n /* istanbul ignore else */\n if (typeof console === 'object') {\n /* istanbul ignore else */\n if (err) {\n /* istanbul ignore else */\n if (console.error) {\n console.error(err);\n }\n } else if (console[name]) { /* istanbul ignore else */\n resultArgs.forEach(x => console[name](x));\n }\n }\n })\n}\n\n/**\n * Logs the result of an [`async` function]{@link AsyncFunction} to the\n * `console` using `console.dir` to display the properties of the resulting object.\n * Only works in Node.js or in browsers that support `console.dir` and\n * `console.error` (such as FF and Chrome).\n * If multiple arguments are returned from the async function,\n * `console.dir` is called on each argument in order.\n *\n * @name dir\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n * setTimeout(function() {\n * callback(null, {hello: name});\n * }, 1000);\n * };\n *\n * // in the node repl\n * node> async.dir(hello, 'world');\n * {hello: 'world'}\n */\nvar dir = consoleFunc('dir');\n\n/**\n * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in\n * the order of operations, the arguments `test` and `iteratee` are switched.\n *\n * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n *\n * @name doWhilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - A function which is called each time `test`\n * passes. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped.\n * `callback` will be passed an error and any arguments passed to the final\n * `iteratee`'s callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction doWhilst(iteratee, test, callback) {\n callback = onlyOnce(callback);\n var _fn = wrapAsync(iteratee);\n var _test = wrapAsync(test);\n var results;\n\n function next(err, ...args) {\n if (err) return callback(err);\n if (err === false) return;\n results = args;\n _test(...args, check);\n }\n\n function check(err, truth) {\n if (err) return callback(err);\n if (err === false) return;\n if (!truth) return callback(null, ...results);\n _fn(next);\n }\n\n return check(null, true);\n}\n\nvar doWhilst$1 = awaitify(doWhilst, 3);\n\n/**\n * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the\n * argument ordering differs from `until`.\n *\n * @name doUntil\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.doWhilst]{@link module:ControlFlow.doWhilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction doUntil(iteratee, test, callback) {\n const _test = wrapAsync(test);\n return doWhilst$1(iteratee, (...args) => {\n const cb = args.pop();\n _test(...args, (err, truth) => cb (err, !truth));\n }, callback);\n}\n\nfunction _withoutIndex(iteratee) {\n return (value, index, callback) => iteratee(value, callback);\n}\n\n/**\n * Applies the function `iteratee` to each item in `coll`, in parallel.\n * The `iteratee` is called with an item from the list, and a callback for when\n * it has finished. If the `iteratee` passes an error to its `callback`, the\n * main `callback` (for the `each` function) is immediately called with the\n * error.\n *\n * Note, that since this function applies `iteratee` to each item in parallel,\n * there is no guarantee that the iteratee functions will complete in order.\n *\n * @name each\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEach\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to\n * each item in `coll`. Invoked with (item, callback).\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOf`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt'];\n * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt'];\n *\n * // asynchronous function that deletes a file\n * const deleteFile = function(file, callback) {\n * fs.unlink(file, callback);\n * };\n *\n * // Using callbacks\n * async.each(fileList, deleteFile, function(err) {\n * if( err ) {\n * console.log(err);\n * } else {\n * console.log('All files have been deleted successfully');\n * }\n * });\n *\n * // Error Handling\n * async.each(withMissingFileList, deleteFile, function(err){\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using Promises\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * await async.each(files, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * await async.each(withMissingFileList, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * }\n * }\n *\n */\nfunction eachLimit$2(coll, iteratee, callback) {\n return eachOf$1(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\n\nvar each = awaitify(eachLimit$2, 3);\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfLimit`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachLimit(coll, limit, iteratee, callback) {\n return eachOfLimit$2(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\nvar eachLimit$1 = awaitify(eachLimit, 4);\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item\n * in series and therefore the iteratee functions will complete in order.\n\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachSeries(coll, iteratee, callback) {\n return eachLimit$1(coll, 1, iteratee, callback)\n}\nvar eachSeries$1 = awaitify(eachSeries, 3);\n\n/**\n * Wrap an async function and ensure it calls its callback on a later tick of\n * the event loop. If the function already calls its callback on a next tick,\n * no extra deferral is added. This is useful for preventing stack overflows\n * (`RangeError: Maximum call stack size exceeded`) and generally keeping\n * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)\n * contained. ES2017 `async` functions are returned as-is -- they are immune\n * to Zalgo's corrupting influences, as they always resolve on a later tick.\n *\n * @name ensureAsync\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - an async function, one that expects a node-style\n * callback as its last argument.\n * @returns {AsyncFunction} Returns a wrapped function with the exact same call\n * signature as the function passed in.\n * @example\n *\n * function sometimesAsync(arg, callback) {\n * if (cache[arg]) {\n * return callback(null, cache[arg]); // this would be synchronous!!\n * } else {\n * doSomeIO(arg, callback); // this IO would be asynchronous\n * }\n * }\n *\n * // this has a risk of stack overflows if many results are cached in a row\n * async.mapSeries(args, sometimesAsync, done);\n *\n * // this will defer sometimesAsync's callback if necessary,\n * // preventing stack overflows\n * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n */\nfunction ensureAsync(fn) {\n if (isAsync(fn)) return fn;\n return function (...args/*, callback*/) {\n var callback = args.pop();\n var sync = true;\n args.push((...innerArgs) => {\n if (sync) {\n setImmediate$1(() => callback(...innerArgs));\n } else {\n callback(...innerArgs);\n }\n });\n fn.apply(this, args);\n sync = false;\n };\n}\n\n/**\n * Returns `true` if every element in `coll` satisfies an async test. If any\n * iteratee call returns `false`, the main `callback` is immediately called.\n *\n * @name every\n * @static\n * @memberOf module:Collections\n * @method\n * @alias all\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.every(fileList, fileExists, function(err, result) {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * });\n *\n * async.every(withMissingFileList, fileExists, function(err, result) {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * });\n *\n * // Using Promises\n * async.every(fileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.every(withMissingFileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.every(fileList, fileExists);\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.every(withMissingFileList, fileExists);\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction every(coll, iteratee, callback) {\n return _createTester(bool => !bool, res => !res)(eachOf$1, coll, iteratee, callback)\n}\nvar every$1 = awaitify(every, 3);\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.\n *\n * @name everyLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction everyLimit(coll, limit, iteratee, callback) {\n return _createTester(bool => !bool, res => !res)(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar everyLimit$1 = awaitify(everyLimit, 4);\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.\n *\n * @name everySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in series.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction everySeries(coll, iteratee, callback) {\n return _createTester(bool => !bool, res => !res)(eachOfSeries$1, coll, iteratee, callback)\n}\nvar everySeries$1 = awaitify(everySeries, 3);\n\nfunction filterArray(eachfn, arr, iteratee, callback) {\n var truthValues = new Array(arr.length);\n eachfn(arr, (x, index, iterCb) => {\n iteratee(x, (err, v) => {\n truthValues[index] = !!v;\n iterCb(err);\n });\n }, err => {\n if (err) return callback(err);\n var results = [];\n for (var i = 0; i < arr.length; i++) {\n if (truthValues[i]) results.push(arr[i]);\n }\n callback(null, results);\n });\n}\n\nfunction filterGeneric(eachfn, coll, iteratee, callback) {\n var results = [];\n eachfn(coll, (x, index, iterCb) => {\n iteratee(x, (err, v) => {\n if (err) return iterCb(err);\n if (v) {\n results.push({index, value: x});\n }\n iterCb(err);\n });\n }, err => {\n if (err) return callback(err);\n callback(null, results\n .sort((a, b) => a.index - b.index)\n .map(v => v.value));\n });\n}\n\nfunction _filter(eachfn, coll, iteratee, callback) {\n var filter = isArrayLike(coll) ? filterArray : filterGeneric;\n return filter(eachfn, coll, wrapAsync(iteratee), callback);\n}\n\n/**\n * Returns a new array of all the values in `coll` which pass an async truth\n * test. This operation is performed in parallel, but the results array will be\n * in the same order as the original.\n *\n * @name filter\n * @static\n * @memberOf module:Collections\n * @method\n * @alias select\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.filter(files, fileExists, function(err, results) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * });\n *\n * // Using Promises\n * async.filter(files, fileExists)\n * .then(results => {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.filter(files, fileExists);\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction filter (coll, iteratee, callback) {\n return _filter(eachOf$1, coll, iteratee, callback)\n}\nvar filter$1 = awaitify(filter, 3);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name filterLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction filterLimit (coll, limit, iteratee, callback) {\n return _filter(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar filterLimit$1 = awaitify(filterLimit, 4);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.\n *\n * @name filterSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results)\n * @returns {Promise} a promise, if no callback provided\n */\nfunction filterSeries (coll, iteratee, callback) {\n return _filter(eachOfSeries$1, coll, iteratee, callback)\n}\nvar filterSeries$1 = awaitify(filterSeries, 3);\n\n/**\n * Calls the asynchronous function `fn` with a callback parameter that allows it\n * to call itself again, in series, indefinitely.\n\n * If an error is passed to the callback then `errback` is called with the\n * error, and execution stops, otherwise it will never be called.\n *\n * @name forever\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} fn - an async function to call repeatedly.\n * Invoked with (next).\n * @param {Function} [errback] - when `fn` passes an error to it's callback,\n * this function will be called, and execution stops. Invoked with (err).\n * @returns {Promise} a promise that rejects if an error occurs and an errback\n * is not passed\n * @example\n *\n * async.forever(\n * function(next) {\n * // next is suitable for passing to things that need a callback(err [, whatever]);\n * // it will result in this function being called again.\n * },\n * function(err) {\n * // if next is called with a value in its first parameter, it will appear\n * // in here as 'err', and execution will stop.\n * }\n * );\n */\nfunction forever(fn, errback) {\n var done = onlyOnce(errback);\n var task = wrapAsync(ensureAsync(fn));\n\n function next(err) {\n if (err) return done(err);\n if (err === false) return;\n task(next);\n }\n return next();\n}\nvar forever$1 = awaitify(forever, 2);\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.\n *\n * @name groupByLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction groupByLimit(coll, limit, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return mapLimit$1(coll, limit, (val, iterCb) => {\n _iteratee(val, (err, key) => {\n if (err) return iterCb(err);\n return iterCb(err, {key, val});\n });\n }, (err, mapResults) => {\n var result = {};\n // from MDN, handle object having an `hasOwnProperty` prop\n var {hasOwnProperty} = Object.prototype;\n\n for (var i = 0; i < mapResults.length; i++) {\n if (mapResults[i]) {\n var {key} = mapResults[i];\n var {val} = mapResults[i];\n\n if (hasOwnProperty.call(result, key)) {\n result[key].push(val);\n } else {\n result[key] = [val];\n }\n }\n }\n\n return callback(err, result);\n });\n}\n\nvar groupByLimit$1 = awaitify(groupByLimit, 4);\n\n/**\n * Returns a new object, where each value corresponds to an array of items, from\n * `coll`, that returned the corresponding key. That is, the keys of the object\n * correspond to the values passed to the `iteratee` callback.\n *\n * Note: Since this function applies the `iteratee` to each item in parallel,\n * there is no guarantee that the `iteratee` functions will complete in order.\n * However, the values for each key in the `result` will be in the same order as\n * the original `coll`. For Objects, the values will roughly be in the order of\n * the original Objects' keys (but this can vary across JavaScript engines).\n *\n * @name groupBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const files = ['dir1/file1.txt','dir2','dir4']\n *\n * // asynchronous function that detects file type as none, file, or directory\n * function detectFile(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(null, 'none');\n * }\n * callback(null, stat.isDirectory() ? 'directory' : 'file');\n * });\n * }\n *\n * //Using callbacks\n * async.groupBy(files, detectFile, function(err, result) {\n * if(err) {\n * console.log(err);\n * } else {\n *\t console.log(result);\n * // {\n * // file: [ 'dir1/file1.txt' ],\n * // none: [ 'dir4' ],\n * // directory: [ 'dir2']\n * // }\n * // result is object containing the files grouped by type\n * }\n * });\n *\n * // Using Promises\n * async.groupBy(files, detectFile)\n * .then( result => {\n * console.log(result);\n * // {\n * // file: [ 'dir1/file1.txt' ],\n * // none: [ 'dir4' ],\n * // directory: [ 'dir2']\n * // }\n * // result is object containing the files grouped by type\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.groupBy(files, detectFile);\n * console.log(result);\n * // {\n * // file: [ 'dir1/file1.txt' ],\n * // none: [ 'dir4' ],\n * // directory: [ 'dir2']\n * // }\n * // result is object containing the files grouped by type\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction groupBy (coll, iteratee, callback) {\n return groupByLimit$1(coll, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time.\n *\n * @name groupBySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whose\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction groupBySeries (coll, iteratee, callback) {\n return groupByLimit$1(coll, 1, iteratee, callback)\n}\n\n/**\n * Logs the result of an `async` function to the `console`. Only works in\n * Node.js or in browsers that support `console.log` and `console.error` (such\n * as FF and Chrome). If multiple arguments are returned from the async\n * function, `console.log` is called on each argument in order.\n *\n * @name log\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n * setTimeout(function() {\n * callback(null, 'hello ' + name);\n * }, 1000);\n * };\n *\n * // in the node repl\n * node> async.log(hello, 'world');\n * 'hello world'\n */\nvar log = consoleFunc('log');\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name mapValuesLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapValuesLimit(obj, limit, iteratee, callback) {\n callback = once(callback);\n var newObj = {};\n var _iteratee = wrapAsync(iteratee);\n return eachOfLimit$2(limit)(obj, (val, key, next) => {\n _iteratee(val, key, (err, result) => {\n if (err) return next(err);\n newObj[key] = result;\n next(err);\n });\n }, err => callback(err, newObj));\n}\n\nvar mapValuesLimit$1 = awaitify(mapValuesLimit, 4);\n\n/**\n * A relative of [`map`]{@link module:Collections.map}, designed for use with objects.\n *\n * Produces a new Object by mapping each value of `obj` through the `iteratee`\n * function. The `iteratee` is called each `value` and `key` from `obj` and a\n * callback for when it has finished processing. Each of these callbacks takes\n * two arguments: an `error`, and the transformed item from `obj`. If `iteratee`\n * passes an error to its callback, the main `callback` (for the `mapValues`\n * function) is immediately called with the error.\n *\n * Note, the order of the keys in the result is not guaranteed. The keys will\n * be roughly in the order they complete, (but this is very engine-specific)\n *\n * @name mapValues\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileMap = {\n * f1: 'file1.txt',\n * f2: 'file2.txt',\n * f3: 'file3.txt'\n * };\n *\n * const withMissingFileMap = {\n * f1: 'file1.txt',\n * f2: 'file2.txt',\n * f3: 'file4.txt'\n * };\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, key, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.mapValues(fileMap, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // result is now a map of file size in bytes for each file, e.g.\n * // {\n * // f1: 1000,\n * // f2: 2000,\n * // f3: 3000\n * // }\n * }\n * });\n *\n * // Error handling\n * async.mapValues(withMissingFileMap, getFileSizeInBytes, function(err, result) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(result);\n * }\n * });\n *\n * // Using Promises\n * async.mapValues(fileMap, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * // result is now a map of file size in bytes for each file, e.g.\n * // {\n * // f1: 1000,\n * // f2: 2000,\n * // f3: 3000\n * // }\n * }).catch (err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.mapValues(withMissingFileMap, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * }).catch (err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.mapValues(fileMap, getFileSizeInBytes);\n * console.log(result);\n * // result is now a map of file size in bytes for each file, e.g.\n * // {\n * // f1: 1000,\n * // f2: 2000,\n * // f3: 3000\n * // }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let result = await async.mapValues(withMissingFileMap, getFileSizeInBytes);\n * console.log(result);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction mapValues(obj, iteratee, callback) {\n return mapValuesLimit$1(obj, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time.\n *\n * @name mapValuesSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction mapValuesSeries(obj, iteratee, callback) {\n return mapValuesLimit$1(obj, 1, iteratee, callback)\n}\n\n/**\n * Caches the results of an async function. When creating a hash to store\n * function results against, the callback is omitted from the hash and an\n * optional hash function can be used.\n *\n * **Note: if the async function errs, the result will not be cached and\n * subsequent calls will call the wrapped function.**\n *\n * If no hash function is specified, the first argument is used as a hash key,\n * which may work reasonably if it is a string or a data type that converts to a\n * distinct string. Note that objects and arrays will not behave reasonably.\n * Neither will cases where the other arguments are significant. In such cases,\n * specify your own hash function.\n *\n * The cache of results is exposed as the `memo` property of the function\n * returned by `memoize`.\n *\n * @name memoize\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function to proxy and cache results from.\n * @param {Function} hasher - An optional function for generating a custom hash\n * for storing results. It has all the arguments applied to it apart from the\n * callback, and must be synchronous.\n * @returns {AsyncFunction} a memoized version of `fn`\n * @example\n *\n * var slow_fn = function(name, callback) {\n * // do something\n * callback(null, result);\n * };\n * var fn = async.memoize(slow_fn);\n *\n * // fn can now be used as if it were slow_fn\n * fn('some name', function() {\n * // callback\n * });\n */\nfunction memoize(fn, hasher = v => v) {\n var memo = Object.create(null);\n var queues = Object.create(null);\n var _fn = wrapAsync(fn);\n var memoized = initialParams((args, callback) => {\n var key = hasher(...args);\n if (key in memo) {\n setImmediate$1(() => callback(null, ...memo[key]));\n } else if (key in queues) {\n queues[key].push(callback);\n } else {\n queues[key] = [callback];\n _fn(...args, (err, ...resultArgs) => {\n // #1465 don't memoize if an error occurred\n if (!err) {\n memo[key] = resultArgs;\n }\n var q = queues[key];\n delete queues[key];\n for (var i = 0, l = q.length; i < l; i++) {\n q[i](err, ...resultArgs);\n }\n });\n }\n });\n memoized.memo = memo;\n memoized.unmemoized = fn;\n return memoized;\n}\n\n/* istanbul ignore file */\n\n/**\n * Calls `callback` on a later loop around the event loop. In Node.js this just\n * calls `process.nextTick`. In the browser it will use `setImmediate` if\n * available, otherwise `setTimeout(callback, 0)`, which means other higher\n * priority events may precede the execution of `callback`.\n *\n * This is used internally for browser-compatibility purposes.\n *\n * @name nextTick\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.setImmediate]{@link module:Utils.setImmediate}\n * @category Util\n * @param {Function} callback - The function to call on a later loop around\n * the event loop. Invoked with (args...).\n * @param {...*} args... - any number of additional arguments to pass to the\n * callback on the next tick.\n * @example\n *\n * var call_order = [];\n * async.nextTick(function() {\n * call_order.push('two');\n * // call_order now equals ['one','two']\n * });\n * call_order.push('one');\n *\n * async.setImmediate(function (a, b, c) {\n * // a, b, and c equal 1, 2, and 3\n * }, 1, 2, 3);\n */\nvar _defer;\n\nif (hasNextTick) {\n _defer = process.nextTick;\n} else if (hasSetImmediate) {\n _defer = setImmediate;\n} else {\n _defer = fallback;\n}\n\nvar nextTick = wrap(_defer);\n\nvar _parallel = awaitify((eachfn, tasks, callback) => {\n var results = isArrayLike(tasks) ? [] : {};\n\n eachfn(tasks, (task, key, taskCb) => {\n wrapAsync(task)((err, ...result) => {\n if (result.length < 2) {\n [result] = result;\n }\n results[key] = result;\n taskCb(err);\n });\n }, err => callback(err, results));\n}, 3);\n\n/**\n * Run the `tasks` collection of functions in parallel, without waiting until\n * the previous function has completed. If any of the functions pass an error to\n * its callback, the main `callback` is immediately called with the value of the\n * error. Once the `tasks` have completed, the results are passed to the final\n * `callback` as an array.\n *\n * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about\n * parallel execution of code. If your tasks do not use any timers or perform\n * any I/O, they will actually be executed in series. Any synchronous setup\n * sections for each task will happen one after the other. JavaScript remains\n * single-threaded.\n *\n * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the\n * execution of other tasks when a task fails.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.parallel}.\n *\n * @name parallel\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n *\n * @example\n *\n * //Using Callbacks\n * async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ], function(err, results) {\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * }, function(err, results) {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]).then(results => {\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * }).then(results => {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]);\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n * try {\n * let results = await async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * });\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction parallel(tasks, callback) {\n return _parallel(eachOf$1, tasks, callback);\n}\n\n/**\n * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name parallelLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.parallel]{@link module:ControlFlow.parallel}\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n */\nfunction parallelLimit(tasks, limit, callback) {\n return _parallel(eachOfLimit$2(limit), tasks, callback);\n}\n\n/**\n * A queue of tasks for the worker function to complete.\n * @typedef {Iterable} QueueObject\n * @memberOf module:ControlFlow\n * @property {Function} length - a function returning the number of items\n * waiting to be processed. Invoke with `queue.length()`.\n * @property {boolean} started - a boolean indicating whether or not any\n * items have been pushed and processed by the queue.\n * @property {Function} running - a function returning the number of items\n * currently being processed. Invoke with `queue.running()`.\n * @property {Function} workersList - a function returning the array of items\n * currently being processed. Invoke with `queue.workersList()`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke with `queue.idle()`.\n * @property {number} concurrency - an integer for determining how many `worker`\n * functions should be run in parallel. This property can be changed after a\n * `queue` is created to alter the concurrency on-the-fly.\n * @property {number} payload - an integer that specifies how many items are\n * passed to the worker function at a time. only applies if this is a\n * [cargo]{@link module:ControlFlow.cargo} object\n * @property {AsyncFunction} push - add a new task to the `queue`. Calls `callback`\n * once the `worker` has finished processing the task. Instead of a single task,\n * a `tasks` array can be submitted. The respective callback is used for every\n * task in the list. Invoke with `queue.push(task, [callback])`,\n * @property {AsyncFunction} unshift - add a new task to the front of the `queue`.\n * Invoke with `queue.unshift(task, [callback])`.\n * @property {AsyncFunction} pushAsync - the same as `q.push`, except this returns\n * a promise that rejects if an error occurs.\n * @property {AsyncFunction} unshiftAsync - the same as `q.unshift`, except this returns\n * a promise that rejects if an error occurs.\n * @property {Function} remove - remove items from the queue that match a test\n * function. The test function will be passed an object with a `data` property,\n * and a `priority` property, if this is a\n * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.\n * Invoked with `queue.remove(testFn)`, where `testFn` is of the form\n * `function ({data, priority}) {}` and returns a Boolean.\n * @property {Function} saturated - a function that sets a callback that is\n * called when the number of running workers hits the `concurrency` limit, and\n * further tasks will be queued. If the callback is omitted, `q.saturated()`\n * returns a promise for the next occurrence.\n * @property {Function} unsaturated - a function that sets a callback that is\n * called when the number of running workers is less than the `concurrency` &\n * `buffer` limits, and further tasks will not be queued. If the callback is\n * omitted, `q.unsaturated()` returns a promise for the next occurrence.\n * @property {number} buffer - A minimum threshold buffer in order to say that\n * the `queue` is `unsaturated`.\n * @property {Function} empty - a function that sets a callback that is called\n * when the last item from the `queue` is given to a `worker`. If the callback\n * is omitted, `q.empty()` returns a promise for the next occurrence.\n * @property {Function} drain - a function that sets a callback that is called\n * when the last item from the `queue` has returned from the `worker`. If the\n * callback is omitted, `q.drain()` returns a promise for the next occurrence.\n * @property {Function} error - a function that sets a callback that is called\n * when a task errors. Has the signature `function(error, task)`. If the\n * callback is omitted, `error()` returns a promise that rejects on the next\n * error.\n * @property {boolean} paused - a boolean for determining whether the queue is\n * in a paused state.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke with `queue.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke with `queue.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. No more tasks\n * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.\n *\n * @example\n * const q = async.queue(worker, 2)\n * q.push(item1)\n * q.push(item2)\n * q.push(item3)\n * // queues are iterable, spread into an array to inspect\n * const items = [...q] // [item1, item2, item3]\n * // or use for of\n * for (let item of q) {\n * console.log(item)\n * }\n *\n * q.drain(() => {\n * console.log('all done')\n * })\n * // or\n * await q.drain()\n */\n\n/**\n * Creates a `queue` object with the specified `concurrency`. Tasks added to the\n * `queue` are processed in parallel (up to the `concurrency` limit). If all\n * `worker`s are in progress, the task is queued until one becomes available.\n * Once a `worker` completes a `task`, that `task`'s callback is called.\n *\n * @name queue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`. Invoked with (task, callback).\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel. If omitted, the concurrency\n * defaults to `1`. If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can be\n * attached as certain properties to listen for specific events during the\n * lifecycle of the queue.\n * @example\n *\n * // create a queue object with concurrency 2\n * var q = async.queue(function(task, callback) {\n * console.log('hello ' + task.name);\n * callback();\n * }, 2);\n *\n * // assign a callback\n * q.drain(function() {\n * console.log('all items have been processed');\n * });\n * // or await the end\n * await q.drain()\n *\n * // assign an error callback\n * q.error(function(err, task) {\n * console.error('task experienced an error');\n * });\n *\n * // add some items to the queue\n * q.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * // callback is optional\n * q.push({name: 'bar'});\n *\n * // add some items to the queue (batch-wise)\n * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {\n * console.log('finished processing item');\n * });\n *\n * // add some items to the front of the queue\n * q.unshift({name: 'bar'}, function (err) {\n * console.log('finished processing bar');\n * });\n */\nfunction queue (worker, concurrency) {\n var _worker = wrapAsync(worker);\n return queue$1((items, cb) => {\n _worker(items[0], cb);\n }, concurrency, 1);\n}\n\n// Binary min-heap implementation used for priority queue.\n// Implementation is stable, i.e. push time is considered for equal priorities\nclass Heap {\n constructor() {\n this.heap = [];\n this.pushCount = Number.MIN_SAFE_INTEGER;\n }\n\n get length() {\n return this.heap.length;\n }\n\n empty () {\n this.heap = [];\n return this;\n }\n\n percUp(index) {\n let p;\n\n while (index > 0 && smaller(this.heap[index], this.heap[p=parent(index)])) {\n let t = this.heap[index];\n this.heap[index] = this.heap[p];\n this.heap[p] = t;\n\n index = p;\n }\n }\n\n percDown(index) {\n let l;\n\n while ((l=leftChi(index)) < this.heap.length) {\n if (l+1 < this.heap.length && smaller(this.heap[l+1], this.heap[l])) {\n l = l+1;\n }\n\n if (smaller(this.heap[index], this.heap[l])) {\n break;\n }\n\n let t = this.heap[index];\n this.heap[index] = this.heap[l];\n this.heap[l] = t;\n\n index = l;\n }\n }\n\n push(node) {\n node.pushCount = ++this.pushCount;\n this.heap.push(node);\n this.percUp(this.heap.length-1);\n }\n\n unshift(node) {\n return this.heap.push(node);\n }\n\n shift() {\n let [top] = this.heap;\n\n this.heap[0] = this.heap[this.heap.length-1];\n this.heap.pop();\n this.percDown(0);\n\n return top;\n }\n\n toArray() {\n return [...this];\n }\n\n *[Symbol.iterator] () {\n for (let i = 0; i < this.heap.length; i++) {\n yield this.heap[i].data;\n }\n }\n\n remove (testFn) {\n let j = 0;\n for (let i = 0; i < this.heap.length; i++) {\n if (!testFn(this.heap[i])) {\n this.heap[j] = this.heap[i];\n j++;\n }\n }\n\n this.heap.splice(j);\n\n for (let i = parent(this.heap.length-1); i >= 0; i--) {\n this.percDown(i);\n }\n\n return this;\n }\n}\n\nfunction leftChi(i) {\n return (i<<1)+1;\n}\n\nfunction parent(i) {\n return ((i+1)>>1)-1;\n}\n\nfunction smaller(x, y) {\n if (x.priority !== y.priority) {\n return x.priority < y.priority;\n }\n else {\n return x.pushCount < y.pushCount;\n }\n}\n\n/**\n * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and\n * completed in ascending priority order.\n *\n * @name priorityQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`.\n * Invoked with (task, callback).\n * @param {number} concurrency - An `integer` for determining how many `worker`\n * functions should be run in parallel. If omitted, the concurrency defaults to\n * `1`. If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are three\n * differences between `queue` and `priorityQueue` objects:\n * * `push(task, priority, [callback])` - `priority` should be a number. If an\n * array of `tasks` is given, all tasks will be assigned the same priority.\n * * `pushAsync(task, priority, [callback])` - the same as `priorityQueue.push`,\n * except this returns a promise that rejects if an error occurs.\n * * The `unshift` and `unshiftAsync` methods were removed.\n */\nfunction priorityQueue(worker, concurrency) {\n // Start with a normal queue\n var q = queue(worker, concurrency);\n\n var {\n push,\n pushAsync\n } = q;\n\n q._tasks = new Heap();\n q._createTaskItem = ({data, priority}, callback) => {\n return {\n data,\n priority,\n callback\n };\n };\n\n function createDataItems(tasks, priority) {\n if (!Array.isArray(tasks)) {\n return {data: tasks, priority};\n }\n return tasks.map(data => { return {data, priority}; });\n }\n\n // Override push to accept second parameter representing priority\n q.push = function(data, priority = 0, callback) {\n return push(createDataItems(data, priority), callback);\n };\n\n q.pushAsync = function(data, priority = 0, callback) {\n return pushAsync(createDataItems(data, priority), callback);\n };\n\n // Remove unshift functions\n delete q.unshift;\n delete q.unshiftAsync;\n\n return q;\n}\n\n/**\n * Runs the `tasks` array of functions in parallel, without waiting until the\n * previous function has completed. Once any of the `tasks` complete or pass an\n * error to its callback, the main `callback` is immediately called. It's\n * equivalent to `Promise.race()`.\n *\n * @name race\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction}\n * to run. Each function can complete with an optional `result` value.\n * @param {Function} callback - A callback to run once any of the functions have\n * completed. This function gets an error or result from the first function that\n * completed. Invoked with (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.race([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ],\n * // main callback\n * function(err, result) {\n * // the result will be equal to 'two' as it finishes earlier\n * });\n */\nfunction race(tasks, callback) {\n callback = once(callback);\n if (!Array.isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions'));\n if (!tasks.length) return callback();\n for (var i = 0, l = tasks.length; i < l; i++) {\n wrapAsync(tasks[i])(callback);\n }\n}\n\nvar race$1 = awaitify(race, 2);\n\n/**\n * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.\n *\n * @name reduceRight\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reduce]{@link module:Collections.reduce}\n * @alias foldr\n * @category Collection\n * @param {Array} array - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee completes with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction reduceRight (array, memo, iteratee, callback) {\n var reversed = [...array].reverse();\n return reduce$1(reversed, memo, iteratee, callback);\n}\n\n/**\n * Wraps the async function in another function that always completes with a\n * result object, even when it errors.\n *\n * The result object has either the property `error` or `value`.\n *\n * @name reflect\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function you want to wrap\n * @returns {Function} - A function that always passes null to it's callback as\n * the error. The second argument to the callback will be an `object` with\n * either an `error` or a `value` property.\n * @example\n *\n * async.parallel([\n * async.reflect(function(callback) {\n * // do some stuff ...\n * callback(null, 'one');\n * }),\n * async.reflect(function(callback) {\n * // do some more stuff but error ...\n * callback('bad stuff happened');\n * }),\n * async.reflect(function(callback) {\n * // do some more stuff ...\n * callback(null, 'two');\n * })\n * ],\n * // optional callback\n * function(err, results) {\n * // values\n * // results[0].value = 'one'\n * // results[1].error = 'bad stuff happened'\n * // results[2].value = 'two'\n * });\n */\nfunction reflect(fn) {\n var _fn = wrapAsync(fn);\n return initialParams(function reflectOn(args, reflectCallback) {\n args.push((error, ...cbArgs) => {\n let retVal = {};\n if (error) {\n retVal.error = error;\n }\n if (cbArgs.length > 0){\n var value = cbArgs;\n if (cbArgs.length <= 1) {\n [value] = cbArgs;\n }\n retVal.value = value;\n }\n reflectCallback(null, retVal);\n });\n\n return _fn.apply(this, args);\n });\n}\n\n/**\n * A helper function that wraps an array or an object of functions with `reflect`.\n *\n * @name reflectAll\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.reflect]{@link module:Utils.reflect}\n * @category Util\n * @param {Array|Object|Iterable} tasks - The collection of\n * [async functions]{@link AsyncFunction} to wrap in `async.reflect`.\n * @returns {Array} Returns an array of async functions, each wrapped in\n * `async.reflect`\n * @example\n *\n * let tasks = [\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * // do some more stuff but error ...\n * callback(new Error('bad stuff happened'));\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ];\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n * // values\n * // results[0].value = 'one'\n * // results[1].error = Error('bad stuff happened')\n * // results[2].value = 'two'\n * });\n *\n * // an example using an object instead of an array\n * let tasks = {\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * two: function(callback) {\n * callback('two');\n * },\n * three: function(callback) {\n * setTimeout(function() {\n * callback(null, 'three');\n * }, 100);\n * }\n * };\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n * // values\n * // results.one.value = 'one'\n * // results.two.error = 'two'\n * // results.three.value = 'three'\n * });\n */\nfunction reflectAll(tasks) {\n var results;\n if (Array.isArray(tasks)) {\n results = tasks.map(reflect);\n } else {\n results = {};\n Object.keys(tasks).forEach(key => {\n results[key] = reflect.call(this, tasks[key]);\n });\n }\n return results;\n}\n\nfunction reject$2(eachfn, arr, _iteratee, callback) {\n const iteratee = wrapAsync(_iteratee);\n return _filter(eachfn, arr, (value, cb) => {\n iteratee(value, (err, v) => {\n cb(err, !v);\n });\n }, callback);\n}\n\n/**\n * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.\n *\n * @name reject\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.reject(fileList, fileExists, function(err, results) {\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * });\n *\n * // Using Promises\n * async.reject(fileList, fileExists)\n * .then( results => {\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.reject(fileList, fileExists);\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction reject (coll, iteratee, callback) {\n return reject$2(eachOf$1, coll, iteratee, callback)\n}\nvar reject$1 = awaitify(reject, 3);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name rejectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction rejectLimit (coll, limit, iteratee, callback) {\n return reject$2(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar rejectLimit$1 = awaitify(rejectLimit, 4);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.\n *\n * @name rejectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */\nfunction rejectSeries (coll, iteratee, callback) {\n return reject$2(eachOfSeries$1, coll, iteratee, callback)\n}\nvar rejectSeries$1 = awaitify(rejectSeries, 3);\n\nfunction constant(value) {\n return function () {\n return value;\n }\n}\n\n/**\n * Attempts to get a successful response from `task` no more than `times` times\n * before returning an error. If the task is successful, the `callback` will be\n * passed the result of the successful task. If all attempts fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name retry\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @see [async.retryable]{@link module:ControlFlow.retryable}\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an\n * object with `times` and `interval` or a number.\n * * `times` - The number of attempts to make before giving up. The default\n * is `5`.\n * * `interval` - The time to wait between retries, in milliseconds. The\n * default is `0`. The interval may also be specified as a function of the\n * retry count (see example).\n * * `errorFilter` - An optional synchronous function that is invoked on\n * erroneous result. If it returns `true` the retry attempts will continue;\n * if the function returns `false` the retry flow is aborted with the current\n * attempt's error and result being returned to the final callback.\n * Invoked with (err).\n * * If `opts` is a number, the number specifies the number of times to retry,\n * with the default interval of `0`.\n * @param {AsyncFunction} task - An async function to retry.\n * Invoked with (callback).\n * @param {Function} [callback] - An optional callback which is called when the\n * task has succeeded, or after the final failed attempt. It receives the `err`\n * and `result` arguments of the last attempt at completing the `task`. Invoked\n * with (err, results).\n * @returns {Promise} a promise if no callback provided\n *\n * @example\n *\n * // The `retry` function can be used as a stand-alone control flow by passing\n * // a callback, as shown below:\n *\n * // try calling apiMethod 3 times\n * async.retry(3, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod 3 times, waiting 200 ms between each retry\n * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod 10 times with exponential backoff\n * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds)\n * async.retry({\n * times: 10,\n * interval: function(retryCount) {\n * return 50 * Math.pow(2, retryCount);\n * }\n * }, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod the default 5 times no delay between each retry\n * async.retry(apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // try calling apiMethod only when error condition satisfies, all other\n * // errors will abort the retry control flow and return to final callback\n * async.retry({\n * errorFilter: function(err) {\n * return err.message === 'Temporary error'; // only retry on a specific error\n * }\n * }, apiMethod, function(err, result) {\n * // do something with the result\n * });\n *\n * // to retry individual methods that are not as reliable within other\n * // control flow functions, use the `retryable` wrapper:\n * async.auto({\n * users: api.getUsers.bind(api),\n * payments: async.retryable(3, api.getPayments.bind(api))\n * }, function(err, results) {\n * // do something with the results\n * });\n *\n */\nconst DEFAULT_TIMES = 5;\nconst DEFAULT_INTERVAL = 0;\n\nfunction retry(opts, task, callback) {\n var options = {\n times: DEFAULT_TIMES,\n intervalFunc: constant(DEFAULT_INTERVAL)\n };\n\n if (arguments.length < 3 && typeof opts === 'function') {\n callback = task || promiseCallback();\n task = opts;\n } else {\n parseTimes(options, opts);\n callback = callback || promiseCallback();\n }\n\n if (typeof task !== 'function') {\n throw new Error(\"Invalid arguments for async.retry\");\n }\n\n var _task = wrapAsync(task);\n\n var attempt = 1;\n function retryAttempt() {\n _task((err, ...args) => {\n if (err === false) return\n if (err && attempt++ < options.times &&\n (typeof options.errorFilter != 'function' ||\n options.errorFilter(err))) {\n setTimeout(retryAttempt, options.intervalFunc(attempt - 1));\n } else {\n callback(err, ...args);\n }\n });\n }\n\n retryAttempt();\n return callback[PROMISE_SYMBOL]\n}\n\nfunction parseTimes(acc, t) {\n if (typeof t === 'object') {\n acc.times = +t.times || DEFAULT_TIMES;\n\n acc.intervalFunc = typeof t.interval === 'function' ?\n t.interval :\n constant(+t.interval || DEFAULT_INTERVAL);\n\n acc.errorFilter = t.errorFilter;\n } else if (typeof t === 'number' || typeof t === 'string') {\n acc.times = +t || DEFAULT_TIMES;\n } else {\n throw new Error(\"Invalid arguments for async.retry\");\n }\n}\n\n/**\n * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method\n * wraps a task and makes it retryable, rather than immediately calling it\n * with retries.\n *\n * @name retryable\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.retry]{@link module:ControlFlow.retry}\n * @category Control Flow\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional\n * options, exactly the same as from `retry`, except for a `opts.arity` that\n * is the arity of the `task` function, defaulting to `task.length`\n * @param {AsyncFunction} task - the asynchronous function to wrap.\n * This function will be passed any arguments passed to the returned wrapper.\n * Invoked with (...args, callback).\n * @returns {AsyncFunction} The wrapped function, which when invoked, will\n * retry on an error, based on the parameters specified in `opts`.\n * This function will accept the same parameters as `task`.\n * @example\n *\n * async.auto({\n * dep1: async.retryable(3, getFromFlakyService),\n * process: [\"dep1\", async.retryable(3, function (results, cb) {\n * maybeProcessData(results.dep1, cb);\n * })]\n * }, callback);\n */\nfunction retryable (opts, task) {\n if (!task) {\n task = opts;\n opts = null;\n }\n let arity = (opts && opts.arity) || task.length;\n if (isAsync(task)) {\n arity += 1;\n }\n var _task = wrapAsync(task);\n return initialParams((args, callback) => {\n if (args.length < arity - 1 || callback == null) {\n args.push(callback);\n callback = promiseCallback();\n }\n function taskFn(cb) {\n _task(...args, cb);\n }\n\n if (opts) retry(opts, taskFn, callback);\n else retry(taskFn, callback);\n\n return callback[PROMISE_SYMBOL]\n });\n}\n\n/**\n * Run the functions in the `tasks` collection in series, each one running once\n * the previous function has completed. If any functions in the series pass an\n * error to its callback, no more functions are run, and `callback` is\n * immediately called with the value of the error. Otherwise, `callback`\n * receives an array of results when `tasks` have completed.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function, and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.series}.\n *\n * **Note** that while many implementations preserve the order of object\n * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)\n * explicitly states that\n *\n * > The mechanics and order of enumerating the properties is not specified.\n *\n * So if you rely on the order in which your series of functions are executed,\n * and want this to work on all platforms, consider using an array.\n *\n * @name series\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing\n * [async functions]{@link AsyncFunction} to run in series.\n * Each function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This function gets a results array (or object)\n * containing all the result arguments passed to the `task` callbacks. Invoked\n * with (err, result).\n * @return {Promise} a promise, if no callback is passed\n * @example\n *\n * //Using Callbacks\n * async.series([\n * function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 'two');\n * }, 100);\n * }\n * ], function(err, results) {\n * console.log(results);\n * // results is equal to ['one','two']\n * });\n *\n * // an example using objects instead of arrays\n * async.series({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * }, function(err, results) {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.series([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]).then(results => {\n * console.log(results);\n * // results is equal to ['one','two']\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.series({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * }).then(results => {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.series([\n * function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 'two');\n * }, 100);\n * }\n * ]);\n * console.log(results);\n * // results is equal to ['one','two']\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n * try {\n * let results = await async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * });\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction series(tasks, callback) {\n return _parallel(eachOfSeries$1, tasks, callback);\n}\n\n/**\n * Returns `true` if at least one element in the `coll` satisfies an async test.\n * If any iteratee call returns `true`, the main `callback` is immediately\n * called.\n *\n * @name some\n * @static\n * @memberOf module:Collections\n * @method\n * @alias any\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n *);\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n *);\n *\n * // Using Promises\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists);\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists);\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction some(coll, iteratee, callback) {\n return _createTester(Boolean, res => res)(eachOf$1, coll, iteratee, callback)\n}\nvar some$1 = awaitify(some, 3);\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.\n *\n * @name someLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anyLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction someLimit(coll, limit, iteratee, callback) {\n return _createTester(Boolean, res => res)(eachOfLimit$2(limit), coll, iteratee, callback)\n}\nvar someLimit$1 = awaitify(someLimit, 4);\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.\n *\n * @name someSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anySeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in series.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */\nfunction someSeries(coll, iteratee, callback) {\n return _createTester(Boolean, res => res)(eachOfSeries$1, coll, iteratee, callback)\n}\nvar someSeries$1 = awaitify(someSeries, 3);\n\n/**\n * Sorts a list by the results of running each `coll` value through an async\n * `iteratee`.\n *\n * @name sortBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a value to use as the sort criteria as\n * its `result`.\n * Invoked with (item, callback).\n * @param {Function} callback - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is the items\n * from the original `coll` sorted by the values returned by the `iteratee`\n * calls. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback passed\n * @example\n *\n * // bigfile.txt is a file that is 251100 bytes in size\n * // mediumfile.txt is a file that is 11000 bytes in size\n * // smallfile.txt is a file that is 121 bytes in size\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // By modifying the callback parameter the\n * // sorting order can be influenced:\n *\n * // ascending order\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) return callback(getFileSizeErr);\n * callback(null, fileSize);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // descending order\n * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) {\n * return callback(getFileSizeErr);\n * }\n * callback(null, fileSize * -1);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt']\n * }\n * }\n * );\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * }\n * );\n *\n * // Using Promises\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * (async () => {\n * try {\n * let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * catch (err) {\n * console.log(err);\n * }\n * })();\n *\n * // Error handling\n * async () => {\n * try {\n * let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */\nfunction sortBy (coll, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return map$1(coll, (x, iterCb) => {\n _iteratee(x, (err, criteria) => {\n if (err) return iterCb(err);\n iterCb(err, {value: x, criteria});\n });\n }, (err, results) => {\n if (err) return callback(err);\n callback(null, results.sort(comparator).map(v => v.value));\n });\n\n function comparator(left, right) {\n var a = left.criteria, b = right.criteria;\n return a < b ? -1 : a > b ? 1 : 0;\n }\n}\nvar sortBy$1 = awaitify(sortBy, 3);\n\n/**\n * Sets a time limit on an asynchronous function. If the function does not call\n * its callback within the specified milliseconds, it will be called with a\n * timeout error. The code property for the error object will be `'ETIMEDOUT'`.\n *\n * @name timeout\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} asyncFn - The async function to limit in time.\n * @param {number} milliseconds - The specified time limit.\n * @param {*} [info] - Any variable you want attached (`string`, `object`, etc)\n * to timeout Error for more information..\n * @returns {AsyncFunction} Returns a wrapped function that can be used with any\n * of the control flow functions.\n * Invoke this function with the same parameters as you would `asyncFunc`.\n * @example\n *\n * function myFunction(foo, callback) {\n * doAsyncTask(foo, function(err, data) {\n * // handle errors\n * if (err) return callback(err);\n *\n * // do some stuff ...\n *\n * // return processed data\n * return callback(null, data);\n * });\n * }\n *\n * var wrapped = async.timeout(myFunction, 1000);\n *\n * // call `wrapped` as you would `myFunction`\n * wrapped({ bar: 'bar' }, function(err, data) {\n * // if `myFunction` takes < 1000 ms to execute, `err`\n * // and `data` will have their expected values\n *\n * // else `err` will be an Error with the code 'ETIMEDOUT'\n * });\n */\nfunction timeout(asyncFn, milliseconds, info) {\n var fn = wrapAsync(asyncFn);\n\n return initialParams((args, callback) => {\n var timedOut = false;\n var timer;\n\n function timeoutCallback() {\n var name = asyncFn.name || 'anonymous';\n var error = new Error('Callback function \"' + name + '\" timed out.');\n error.code = 'ETIMEDOUT';\n if (info) {\n error.info = info;\n }\n timedOut = true;\n callback(error);\n }\n\n args.push((...cbArgs) => {\n if (!timedOut) {\n callback(...cbArgs);\n clearTimeout(timer);\n }\n });\n\n // setup timer and call original function\n timer = setTimeout(timeoutCallback, milliseconds);\n fn(...args);\n });\n}\n\nfunction range(size) {\n var result = Array(size);\n while (size--) {\n result[size] = size;\n }\n return result;\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name timesLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} count - The number of times to run the function.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see [async.map]{@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n */\nfunction timesLimit(count, limit, iteratee, callback) {\n var _iteratee = wrapAsync(iteratee);\n return mapLimit$1(range(count), limit, _iteratee, callback);\n}\n\n/**\n * Calls the `iteratee` function `n` times, and accumulates results in the same\n * manner you would use with [map]{@link module:Collections.map}.\n *\n * @name times\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n * @example\n *\n * // Pretend this is some complicated async factory\n * var createUser = function(id, callback) {\n * callback(null, {\n * id: 'user' + id\n * });\n * };\n *\n * // generate 5 users\n * async.times(5, function(n, next) {\n * createUser(n, function(err, user) {\n * next(err, user);\n * });\n * }, function(err, users) {\n * // we should now have 5 users\n * });\n */\nfunction times (n, iteratee, callback) {\n return timesLimit(n, Infinity, iteratee, callback)\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time.\n *\n * @name timesSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @returns {Promise} a promise, if no callback is provided\n */\nfunction timesSeries (n, iteratee, callback) {\n return timesLimit(n, 1, iteratee, callback)\n}\n\n/**\n * A relative of `reduce`. Takes an Object or Array, and iterates over each\n * element in parallel, each step potentially mutating an `accumulator` value.\n * The type of the accumulator defaults to the type of collection passed in.\n *\n * @name transform\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {*} [accumulator] - The initial state of the transform. If omitted,\n * it will default to an empty Object or Array, depending on the type of `coll`\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * collection that potentially modifies the accumulator.\n * Invoked with (accumulator, item, key, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the transformed accumulator.\n * Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n *\n * // helper function that returns human-readable size format from bytes\n * function formatBytes(bytes, decimals = 2) {\n * // implementation not included for brevity\n * return humanReadbleFilesize;\n * }\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n *\n * // asynchronous function that returns the file size, transformed to human-readable format\n * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n * function transformFileSize(acc, value, key, callback) {\n * fs.stat(value, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * acc[key] = formatBytes(stat.size);\n * callback(null);\n * });\n * }\n *\n * // Using callbacks\n * async.transform(fileList, transformFileSize, function(err, result) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }\n * });\n *\n * // Using Promises\n * async.transform(fileList, transformFileSize)\n * .then(result => {\n * console.log(result);\n * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * (async () => {\n * try {\n * let result = await async.transform(fileList, transformFileSize);\n * console.log(result);\n * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ]\n * }\n * catch (err) {\n * console.log(err);\n * }\n * })();\n *\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n *\n * // helper function that returns human-readable size format from bytes\n * function formatBytes(bytes, decimals = 2) {\n * // implementation not included for brevity\n * return humanReadbleFilesize;\n * }\n *\n * const fileMap = { f1: 'file1.txt', f2: 'file2.txt', f3: 'file3.txt' };\n *\n * // asynchronous function that returns the file size, transformed to human-readable format\n * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc.\n * function transformFileSize(acc, value, key, callback) {\n * fs.stat(value, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * acc[key] = formatBytes(stat.size);\n * callback(null);\n * });\n * }\n *\n * // Using callbacks\n * async.transform(fileMap, transformFileSize, function(err, result) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(result);\n * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }\n * });\n *\n * // Using Promises\n * async.transform(fileMap, transformFileSize)\n * .then(result => {\n * console.log(result);\n * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.transform(fileMap, transformFileSize);\n * console.log(result);\n * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction transform (coll, accumulator, iteratee, callback) {\n if (arguments.length <= 3 && typeof accumulator === 'function') {\n callback = iteratee;\n iteratee = accumulator;\n accumulator = Array.isArray(coll) ? [] : {};\n }\n callback = once(callback || promiseCallback());\n var _iteratee = wrapAsync(iteratee);\n\n eachOf$1(coll, (v, k, cb) => {\n _iteratee(accumulator, v, k, cb);\n }, err => callback(err, accumulator));\n return callback[PROMISE_SYMBOL]\n}\n\n/**\n * It runs each task in series but stops whenever any of the functions were\n * successful. If one of the tasks were successful, the `callback` will be\n * passed the result of the successful task. If all tasks fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name tryEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to\n * run, each function is passed a `callback(err, result)` it must call on\n * completion with an error `err` (which can be `null`) and an optional `result`\n * value.\n * @param {Function} [callback] - An optional callback which is called when one\n * of the tasks has succeeded, or all have failed. It receives the `err` and\n * `result` arguments of the last attempt at completing the `task`. Invoked with\n * (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n * async.tryEach([\n * function getDataFromFirstWebsite(callback) {\n * // Try getting the data from the first website\n * callback(err, data);\n * },\n * function getDataFromSecondWebsite(callback) {\n * // First website failed,\n * // Try getting the data from the backup website\n * callback(err, data);\n * }\n * ],\n * // optional callback\n * function(err, results) {\n * Now do something with the data.\n * });\n *\n */\nfunction tryEach(tasks, callback) {\n var error = null;\n var result;\n return eachSeries$1(tasks, (task, taskCb) => {\n wrapAsync(task)((err, ...args) => {\n if (err === false) return taskCb(err);\n\n if (args.length < 2) {\n [result] = args;\n } else {\n result = args;\n }\n error = err;\n taskCb(err ? null : {});\n });\n }, () => callback(error, result));\n}\n\nvar tryEach$1 = awaitify(tryEach);\n\n/**\n * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original,\n * unmemoized form. Handy for testing.\n *\n * @name unmemoize\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.memoize]{@link module:Utils.memoize}\n * @category Util\n * @param {AsyncFunction} fn - the memoized function\n * @returns {AsyncFunction} a function that calls the original unmemoized function\n */\nfunction unmemoize(fn) {\n return (...args) => {\n return (fn.unmemoized || fn)(...args);\n };\n}\n\n/**\n * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs.\n *\n * @name whilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with (callback).\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` passes. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * var count = 0;\n * async.whilst(\n * function test(cb) { cb(null, count < 5); },\n * function iter(callback) {\n * count++;\n * setTimeout(function() {\n * callback(null, count);\n * }, 1000);\n * },\n * function (err, n) {\n * // 5 seconds have passed, n = 5\n * }\n * );\n */\nfunction whilst(test, iteratee, callback) {\n callback = onlyOnce(callback);\n var _fn = wrapAsync(iteratee);\n var _test = wrapAsync(test);\n var results = [];\n\n function next(err, ...rest) {\n if (err) return callback(err);\n results = rest;\n if (err === false) return;\n _test(check);\n }\n\n function check(err, truth) {\n if (err) return callback(err);\n if (err === false) return;\n if (!truth) return callback(null, ...results);\n _fn(next);\n }\n\n return _test(check);\n}\nvar whilst$1 = awaitify(whilst, 3);\n\n/**\n * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs. `callback` will be passed an error and any\n * arguments passed to the final `iteratee`'s callback.\n *\n * The inverse of [whilst]{@link module:ControlFlow.whilst}.\n *\n * @name until\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with (callback).\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if a callback is not passed\n *\n * @example\n * const results = []\n * let finished = false\n * async.until(function test(cb) {\n * cb(null, finished)\n * }, function iter(next) {\n * fetchPage(url, (err, body) => {\n * if (err) return next(err)\n * results = results.concat(body.objects)\n * finished = !!body.next\n * next(err)\n * })\n * }, function done (err) {\n * // all pages have been fetched\n * })\n */\nfunction until(test, iteratee, callback) {\n const _test = wrapAsync(test);\n return whilst$1((cb) => _test((err, truth) => cb (err, !truth)), iteratee, callback);\n}\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.waterfall([\n * function(callback) {\n * callback(null, 'one', 'two');\n * },\n * function(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * },\n * function(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n * myFirstFunction,\n * mySecondFunction,\n * myLastFunction,\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n * callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n */\nfunction waterfall (tasks, callback) {\n callback = once(callback);\n if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n if (!tasks.length) return callback();\n var taskIndex = 0;\n\n function nextTask(args) {\n var task = wrapAsync(tasks[taskIndex++]);\n task(...args, onlyOnce(next));\n }\n\n function next(err, ...args) {\n if (err === false) return\n if (err || taskIndex === tasks.length) {\n return callback(err, ...args);\n }\n nextTask(args);\n }\n\n nextTask([]);\n}\n\nvar waterfall$1 = awaitify(waterfall);\n\n/**\n * An \"async function\" in the context of Async is an asynchronous function with\n * a variable number of parameters, with the final parameter being a callback.\n * (`function (arg1, arg2, ..., callback) {}`)\n * The final callback is of the form `callback(err, results...)`, which must be\n * called once the function is completed. The callback should be called with a\n * Error as its first argument to signal that an error occurred.\n * Otherwise, if no error occurred, it should be called with `null` as the first\n * argument, and any additional `result` arguments that may apply, to signal\n * successful completion.\n * The callback must be called exactly once, ideally on a later tick of the\n * JavaScript event loop.\n *\n * This type of function is also referred to as a \"Node-style async function\",\n * or a \"continuation passing-style function\" (CPS). Most of the methods of this\n * library are themselves CPS/Node-style async functions, or functions that\n * return CPS/Node-style async functions.\n *\n * Wherever we accept a Node-style async function, we also directly accept an\n * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}.\n * In this case, the `async` function will not be passed a final callback\n * argument, and any thrown error will be used as the `err` argument of the\n * implicit callback, and the return value will be used as the `result` value.\n * (i.e. a `rejected` of the returned Promise becomes the `err` callback\n * argument, and a `resolved` value becomes the `result`.)\n *\n * Note, due to JavaScript limitations, we can only detect native `async`\n * functions and not transpilied implementations.\n * Your environment must have `async`/`await` support for this to work.\n * (e.g. Node > v7.6, or a recent version of a modern browser).\n * If you are using `async` functions through a transpiler (e.g. Babel), you\n * must still wrap the function with [asyncify]{@link module:Utils.asyncify},\n * because the `async function` will be compiled to an ordinary function that\n * returns a promise.\n *\n * @typedef {Function} AsyncFunction\n * @static\n */\n\n\nvar index = {\n apply,\n applyEach,\n applyEachSeries,\n asyncify,\n auto,\n autoInject,\n cargo: cargo$1,\n cargoQueue: cargo,\n compose,\n concat: concat$1,\n concatLimit: concatLimit$1,\n concatSeries: concatSeries$1,\n constant: constant$1,\n detect: detect$1,\n detectLimit: detectLimit$1,\n detectSeries: detectSeries$1,\n dir,\n doUntil,\n doWhilst: doWhilst$1,\n each,\n eachLimit: eachLimit$1,\n eachOf: eachOf$1,\n eachOfLimit: eachOfLimit$1,\n eachOfSeries: eachOfSeries$1,\n eachSeries: eachSeries$1,\n ensureAsync,\n every: every$1,\n everyLimit: everyLimit$1,\n everySeries: everySeries$1,\n filter: filter$1,\n filterLimit: filterLimit$1,\n filterSeries: filterSeries$1,\n forever: forever$1,\n groupBy,\n groupByLimit: groupByLimit$1,\n groupBySeries,\n log,\n map: map$1,\n mapLimit: mapLimit$1,\n mapSeries: mapSeries$1,\n mapValues,\n mapValuesLimit: mapValuesLimit$1,\n mapValuesSeries,\n memoize,\n nextTick,\n parallel,\n parallelLimit,\n priorityQueue,\n queue,\n race: race$1,\n reduce: reduce$1,\n reduceRight,\n reflect,\n reflectAll,\n reject: reject$1,\n rejectLimit: rejectLimit$1,\n rejectSeries: rejectSeries$1,\n retry,\n retryable,\n seq,\n series,\n setImmediate: setImmediate$1,\n some: some$1,\n someLimit: someLimit$1,\n someSeries: someSeries$1,\n sortBy: sortBy$1,\n timeout,\n times,\n timesLimit,\n timesSeries,\n transform,\n tryEach: tryEach$1,\n unmemoize,\n until,\n waterfall: waterfall$1,\n whilst: whilst$1,\n\n // aliases\n all: every$1,\n allLimit: everyLimit$1,\n allSeries: everySeries$1,\n any: some$1,\n anyLimit: someLimit$1,\n anySeries: someSeries$1,\n find: detect$1,\n findLimit: detectLimit$1,\n findSeries: detectSeries$1,\n flatMap: concat$1,\n flatMapLimit: concatLimit$1,\n flatMapSeries: concatSeries$1,\n forEach: each,\n forEachSeries: eachSeries$1,\n forEachLimit: eachLimit$1,\n forEachOf: eachOf$1,\n forEachOfSeries: eachOfSeries$1,\n forEachOfLimit: eachOfLimit$1,\n inject: reduce$1,\n foldl: reduce$1,\n foldr: reduceRight,\n select: filter$1,\n selectLimit: filterLimit$1,\n selectSeries: filterSeries$1,\n wrapSync: asyncify,\n during: whilst$1,\n doDuring: doWhilst$1\n};\n\nexport { every$1 as all, everyLimit$1 as allLimit, everySeries$1 as allSeries, some$1 as any, someLimit$1 as anyLimit, someSeries$1 as anySeries, apply, applyEach, applyEachSeries, asyncify, auto, autoInject, cargo$1 as cargo, cargo as cargoQueue, compose, concat$1 as concat, concatLimit$1 as concatLimit, concatSeries$1 as concatSeries, constant$1 as constant, index as default, detect$1 as detect, detectLimit$1 as detectLimit, detectSeries$1 as detectSeries, dir, doWhilst$1 as doDuring, doUntil, doWhilst$1 as doWhilst, whilst$1 as during, each, eachLimit$1 as eachLimit, eachOf$1 as eachOf, eachOfLimit$1 as eachOfLimit, eachOfSeries$1 as eachOfSeries, eachSeries$1 as eachSeries, ensureAsync, every$1 as every, everyLimit$1 as everyLimit, everySeries$1 as everySeries, filter$1 as filter, filterLimit$1 as filterLimit, filterSeries$1 as filterSeries, detect$1 as find, detectLimit$1 as findLimit, detectSeries$1 as findSeries, concat$1 as flatMap, concatLimit$1 as flatMapLimit, concatSeries$1 as flatMapSeries, reduce$1 as foldl, reduceRight as foldr, each as forEach, eachLimit$1 as forEachLimit, eachOf$1 as forEachOf, eachOfLimit$1 as forEachOfLimit, eachOfSeries$1 as forEachOfSeries, eachSeries$1 as forEachSeries, forever$1 as forever, groupBy, groupByLimit$1 as groupByLimit, groupBySeries, reduce$1 as inject, log, map$1 as map, mapLimit$1 as mapLimit, mapSeries$1 as mapSeries, mapValues, mapValuesLimit$1 as mapValuesLimit, mapValuesSeries, memoize, nextTick, parallel, parallelLimit, priorityQueue, queue, race$1 as race, reduce$1 as reduce, reduceRight, reflect, reflectAll, reject$1 as reject, rejectLimit$1 as rejectLimit, rejectSeries$1 as rejectSeries, retry, retryable, filter$1 as select, filterLimit$1 as selectLimit, filterSeries$1 as selectSeries, seq, series, setImmediate$1 as setImmediate, some$1 as some, someLimit$1 as someLimit, someSeries$1 as someSeries, sortBy$1 as sortBy, timeout, times, timesLimit, timesSeries, transform, tryEach$1 as tryEach, unmemoize, until, waterfall$1 as waterfall, whilst$1 as whilst, asyncify as wrapSync };\n","var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n","var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n","'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n","var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n","'use strict';\n\nconst isStream = stream =>\n\tstream !== null &&\n\ttypeof stream === 'object' &&\n\ttypeof stream.pipe === 'function';\n\nisStream.writable = stream =>\n\tisStream(stream) &&\n\tstream.writable !== false &&\n\ttypeof stream._write === 'function' &&\n\ttypeof stream._writableState === 'object';\n\nisStream.readable = stream =>\n\tisStream(stream) &&\n\tstream.readable !== false &&\n\ttypeof stream._read === 'function' &&\n\ttypeof stream._readableState === 'object';\n\nisStream.duplex = stream =>\n\tisStream.writable(stream) &&\n\tisStream.readable(stream);\n\nisStream.transform = stream =>\n\tisStream.duplex(stream) &&\n\ttypeof stream._transform === 'function';\n\nmodule.exports = isStream;\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","module.exports = require('stream');\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","try {\n var util = require('util');\n /* istanbul ignore next */\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n /* istanbul ignore next */\n module.exports = require('./inherits_browser.js');\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n module.exports = Stream;\n exports = module.exports = Stream.Readable;\n exports.Readable = Stream.Readable;\n exports.Writable = Stream.Writable;\n exports.Duplex = Stream.Duplex;\n exports.Transform = Stream.Transform;\n exports.PassThrough = Stream.PassThrough;\n exports.Stream = Stream;\n} else {\n exports = module.exports = require('./lib/_stream_readable.js');\n exports.Stream = Stream || exports;\n exports.Readable = exports;\n exports.Writable = require('./lib/_stream_writable.js');\n exports.Duplex = require('./lib/_stream_duplex.js');\n exports.Transform = require('./lib/_stream_transform.js');\n exports.PassThrough = require('./lib/_stream_passthrough.js');\n}\n","module.exports = require('./readable').PassThrough\n","var util = require('util');\nvar PassThrough = require('readable-stream/passthrough');\n\nmodule.exports = {\n Readable: Readable,\n Writable: Writable\n};\n\nutil.inherits(Readable, PassThrough);\nutil.inherits(Writable, PassThrough);\n\n// Patch the given method of instance so that the callback\n// is executed once, before the actual method is called the\n// first time.\nfunction beforeFirstCall(instance, method, callback) {\n instance[method] = function() {\n delete instance[method];\n callback.apply(this, arguments);\n return this[method].apply(this, arguments);\n };\n}\n\nfunction Readable(fn, options) {\n if (!(this instanceof Readable))\n return new Readable(fn, options);\n\n PassThrough.call(this, options);\n\n beforeFirstCall(this, '_read', function() {\n var source = fn.call(this, options);\n var emit = this.emit.bind(this, 'error');\n source.on('error', emit);\n source.pipe(this);\n });\n\n this.emit('readable');\n}\n\nfunction Writable(fn, options) {\n if (!(this instanceof Writable))\n return new Writable(fn, options);\n\n PassThrough.call(this, options);\n\n beforeFirstCall(this, '_write', function() {\n var destination = fn.call(this, options);\n var emit = this.emit.bind(this, 'error');\n destination.on('error', emit);\n this.pipe(destination);\n });\n\n this.emit('writable');\n}\n\n","/*!\n * normalize-path <https://github.com/jonschlinkert/normalize-path>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nmodule.exports = function(path, stripTrailing) {\n if (typeof path !== 'string') {\n throw new TypeError('expected path to be a string');\n }\n\n if (path === '\\\\' || path === '/') return '/';\n\n var len = path.length;\n if (len <= 1) return path;\n\n // ensure that win32 namespaces has two leading slashes, so that the path is\n // handled properly by the win32 version of path.parse() after being normalized\n // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces\n var prefix = '';\n if (len > 4 && path[3] === '\\\\') {\n var ch = path[2];\n if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\\\\\') {\n path = path.slice(2);\n prefix = '//';\n }\n }\n\n var segs = path.split(/[/\\\\]+/);\n if (stripTrailing !== false && segs[segs.length - 1] === '') {\n segs.pop();\n }\n return prefix + segs.join('/');\n};\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var baseRest = require('./_baseRest'),\n eq = require('./eq'),\n isIterateeCall = require('./_isIterateeCall'),\n keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nmodule.exports = defaults;\n","'use strict'\n\n/*\n This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n https://github.com/nodejs/node/blob/master/lib/internal/per_context/primordials.js\n\n Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n ArrayIsArray(self) {\n return Array.isArray(self)\n },\n ArrayPrototypeIncludes(self, el) {\n return self.includes(el)\n },\n ArrayPrototypeIndexOf(self, el) {\n return self.indexOf(el)\n },\n ArrayPrototypeJoin(self, sep) {\n return self.join(sep)\n },\n ArrayPrototypeMap(self, fn) {\n return self.map(fn)\n },\n ArrayPrototypePop(self, el) {\n return self.pop(el)\n },\n ArrayPrototypePush(self, el) {\n return self.push(el)\n },\n ArrayPrototypeSlice(self, start, end) {\n return self.slice(start, end)\n },\n Error,\n FunctionPrototypeCall(fn, thisArgs, ...args) {\n return fn.call(thisArgs, ...args)\n },\n FunctionPrototypeSymbolHasInstance(self, instance) {\n return Function.prototype[Symbol.hasInstance].call(self, instance)\n },\n MathFloor: Math.floor,\n Number,\n NumberIsInteger: Number.isInteger,\n NumberIsNaN: Number.isNaN,\n NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n NumberParseInt: Number.parseInt,\n ObjectDefineProperties(self, props) {\n return Object.defineProperties(self, props)\n },\n ObjectDefineProperty(self, name, prop) {\n return Object.defineProperty(self, name, prop)\n },\n ObjectGetOwnPropertyDescriptor(self, name) {\n return Object.getOwnPropertyDescriptor(self, name)\n },\n ObjectKeys(obj) {\n return Object.keys(obj)\n },\n ObjectSetPrototypeOf(target, proto) {\n return Object.setPrototypeOf(target, proto)\n },\n Promise,\n PromisePrototypeCatch(self, fn) {\n return self.catch(fn)\n },\n PromisePrototypeThen(self, thenFn, catchFn) {\n return self.then(thenFn, catchFn)\n },\n PromiseReject(err) {\n return Promise.reject(err)\n },\n PromiseResolve(val) {\n return Promise.resolve(val)\n },\n ReflectApply: Reflect.apply,\n RegExpPrototypeTest(self, value) {\n return self.test(value)\n },\n SafeSet: Set,\n String,\n StringPrototypeSlice(self, start, end) {\n return self.slice(start, end)\n },\n StringPrototypeToLowerCase(self) {\n return self.toLowerCase()\n },\n StringPrototypeToUpperCase(self) {\n return self.toUpperCase()\n },\n StringPrototypeTrim(self) {\n return self.trim()\n },\n Symbol,\n SymbolFor: Symbol.for,\n SymbolAsyncIterator: Symbol.asyncIterator,\n SymbolHasInstance: Symbol.hasInstance,\n SymbolIterator: Symbol.iterator,\n SymbolDispose: Symbol.dispose || Symbol('Symbol.dispose'),\n SymbolAsyncDispose: Symbol.asyncDispose || Symbol('Symbol.asyncDispose'),\n TypedArrayPrototypeSet(self, buf, len) {\n return self.set(buf, len)\n },\n Boolean: Boolean,\n Uint8Array\n}\n","/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap<Event, PrivateData>}\n * @private\n */\nconst privateData = new WeakMap()\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrappers = new WeakMap()\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n const retv = privateData.get(event)\n console.assert(\n retv != null,\n \"'this' is expected an Event object, but got\",\n event\n )\n return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n if (data.passiveListener != null) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(\n \"Unable to preventDefault inside passive event listener invocation.\",\n data.passiveListener\n )\n }\n return\n }\n if (!data.event.cancelable) {\n return\n }\n\n data.canceled = true\n if (typeof data.event.preventDefault === \"function\") {\n data.event.preventDefault()\n }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n privateData.set(this, {\n eventTarget,\n event,\n eventPhase: 2,\n currentTarget: eventTarget,\n canceled: false,\n stopped: false,\n immediateStopped: false,\n passiveListener: null,\n timeStamp: event.timeStamp || Date.now(),\n })\n\n // https://heycam.github.io/webidl/#Unforgeable\n Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true })\n\n // Define accessors\n const keys = Object.keys(event)\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n if (!(key in this)) {\n Object.defineProperty(this, key, defineRedirectDescriptor(key))\n }\n }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n /**\n * The type of this event.\n * @type {string}\n */\n get type() {\n return pd(this).event.type\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get target() {\n return pd(this).eventTarget\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get currentTarget() {\n return pd(this).currentTarget\n },\n\n /**\n * @returns {EventTarget[]} The composed path of this event.\n */\n composedPath() {\n const currentTarget = pd(this).currentTarget\n if (currentTarget == null) {\n return []\n }\n return [currentTarget]\n },\n\n /**\n * Constant of NONE.\n * @type {number}\n */\n get NONE() {\n return 0\n },\n\n /**\n * Constant of CAPTURING_PHASE.\n * @type {number}\n */\n get CAPTURING_PHASE() {\n return 1\n },\n\n /**\n * Constant of AT_TARGET.\n * @type {number}\n */\n get AT_TARGET() {\n return 2\n },\n\n /**\n * Constant of BUBBLING_PHASE.\n * @type {number}\n */\n get BUBBLING_PHASE() {\n return 3\n },\n\n /**\n * The target of this event.\n * @type {number}\n */\n get eventPhase() {\n return pd(this).eventPhase\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopPropagation() {\n const data = pd(this)\n\n data.stopped = true\n if (typeof data.event.stopPropagation === \"function\") {\n data.event.stopPropagation()\n }\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopImmediatePropagation() {\n const data = pd(this)\n\n data.stopped = true\n data.immediateStopped = true\n if (typeof data.event.stopImmediatePropagation === \"function\") {\n data.event.stopImmediatePropagation()\n }\n },\n\n /**\n * The flag to be bubbling.\n * @type {boolean}\n */\n get bubbles() {\n return Boolean(pd(this).event.bubbles)\n },\n\n /**\n * The flag to be cancelable.\n * @type {boolean}\n */\n get cancelable() {\n return Boolean(pd(this).event.cancelable)\n },\n\n /**\n * Cancel this event.\n * @returns {void}\n */\n preventDefault() {\n setCancelFlag(pd(this))\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n */\n get defaultPrevented() {\n return pd(this).canceled\n },\n\n /**\n * The flag to be composed.\n * @type {boolean}\n */\n get composed() {\n return Boolean(pd(this).event.composed)\n },\n\n /**\n * The unix time of this event.\n * @type {number}\n */\n get timeStamp() {\n return pd(this).timeStamp\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n * @deprecated\n */\n get srcElement() {\n return pd(this).eventTarget\n },\n\n /**\n * The flag to stop event bubbling.\n * @type {boolean}\n * @deprecated\n */\n get cancelBubble() {\n return pd(this).stopped\n },\n set cancelBubble(value) {\n if (!value) {\n return\n }\n const data = pd(this)\n\n data.stopped = true\n if (typeof data.event.cancelBubble === \"boolean\") {\n data.event.cancelBubble = true\n }\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n * @deprecated\n */\n get returnValue() {\n return !pd(this).canceled\n },\n set returnValue(value) {\n if (!value) {\n setCancelFlag(pd(this))\n }\n },\n\n /**\n * Initialize this event object. But do nothing under event dispatching.\n * @param {string} type The event type.\n * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n * @deprecated\n */\n initEvent() {\n // Do nothing.\n },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n value: Event,\n configurable: true,\n writable: true,\n})\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n Object.setPrototypeOf(Event.prototype, window.Event.prototype)\n\n // Make association for wrappers.\n wrappers.set(window.Event.prototype, Event)\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n return {\n get() {\n return pd(this).event[key]\n },\n set(value) {\n pd(this).event[key] = value\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n return {\n value() {\n const event = pd(this).event\n return event[key].apply(event, arguments)\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n const keys = Object.keys(proto)\n if (keys.length === 0) {\n return BaseEvent\n }\n\n /** CustomEvent */\n function CustomEvent(eventTarget, event) {\n BaseEvent.call(this, eventTarget, event)\n }\n\n CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n constructor: { value: CustomEvent, configurable: true, writable: true },\n })\n\n // Define accessors.\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i]\n if (!(key in BaseEvent.prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, key)\n const isFunc = typeof descriptor.value === \"function\"\n Object.defineProperty(\n CustomEvent.prototype,\n key,\n isFunc\n ? defineCallDescriptor(key)\n : defineRedirectDescriptor(key)\n )\n }\n }\n\n return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n if (proto == null || proto === Object.prototype) {\n return Event\n }\n\n let wrapper = wrappers.get(proto)\n if (wrapper == null) {\n wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto)\n wrappers.set(proto, wrapper)\n }\n return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nexport function wrapEvent(eventTarget, event) {\n const Wrapper = getWrapper(Object.getPrototypeOf(event))\n return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nexport function isStopped(event) {\n return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nexport function setEventPhase(event, eventPhase) {\n pd(event).eventPhase = eventPhase\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nexport function setCurrentTarget(event, currentTarget) {\n pd(event).currentTarget = currentTarget\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nexport function setPassiveListener(event, passiveListener) {\n pd(event).passiveListener = passiveListener\n}\n","import {\n isStopped,\n setCurrentTarget,\n setEventPhase,\n setPassiveListener,\n wrapEvent,\n} from \"./event.mjs\"\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap<object, Map<string, ListenerNode>>}\n * @private\n */\nconst listenersMap = new WeakMap()\n\n// Listener types\nconst CAPTURE = 1\nconst BUBBLE = 2\nconst ATTRIBUTE = 3\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map<string, ListenerNode>} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n const listeners = listenersMap.get(eventTarget)\n if (listeners == null) {\n throw new TypeError(\n \"'this' is expected an EventTarget object, but got another value.\"\n )\n }\n return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n return {\n get() {\n const listeners = getListeners(this)\n let node = listeners.get(eventName)\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n return node.listener\n }\n node = node.next\n }\n return null\n },\n\n set(listener) {\n if (typeof listener !== \"function\" && !isObject(listener)) {\n listener = null // eslint-disable-line no-param-reassign\n }\n const listeners = getListeners(this)\n\n // Traverse to the tail while removing old value.\n let prev = null\n let node = listeners.get(eventName)\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n // Remove old value.\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n } else {\n prev = node\n }\n\n node = node.next\n }\n\n // Add new value.\n if (listener !== null) {\n const newNode = {\n listener,\n listenerType: ATTRIBUTE,\n passive: false,\n once: false,\n next: null,\n }\n if (prev === null) {\n listeners.set(eventName, newNode)\n } else {\n prev.next = newNode\n }\n }\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n Object.defineProperty(\n eventTargetPrototype,\n `on${eventName}`,\n defineEventAttributeDescriptor(eventName)\n )\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n /** CustomEventTarget */\n function CustomEventTarget() {\n EventTarget.call(this)\n }\n\n CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n constructor: {\n value: CustomEventTarget,\n configurable: true,\n writable: true,\n },\n })\n\n for (let i = 0; i < eventNames.length; ++i) {\n defineEventAttribute(CustomEventTarget.prototype, eventNames[i])\n }\n\n return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n * class A extends EventTarget {}\n * class B extends EventTarget(\"message\") {}\n * class C extends EventTarget(\"message\", \"error\") {}\n * class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n /*eslint-disable consistent-return */\n if (this instanceof EventTarget) {\n listenersMap.set(this, new Map())\n return\n }\n if (arguments.length === 1 && Array.isArray(arguments[0])) {\n return defineCustomEventTarget(arguments[0])\n }\n if (arguments.length > 0) {\n const types = new Array(arguments.length)\n for (let i = 0; i < arguments.length; ++i) {\n types[i] = arguments[i]\n }\n return defineCustomEventTarget(types)\n }\n throw new TypeError(\"Cannot call a class as a function\")\n /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n /**\n * Add a given listener to this event target.\n * @param {string} eventName The event name to add.\n * @param {Function} listener The listener to add.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n addEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n if (typeof listener !== \"function\" && !isObject(listener)) {\n throw new TypeError(\"'listener' should be a function or an object.\")\n }\n\n const listeners = getListeners(this)\n const optionsIsObj = isObject(options)\n const capture = optionsIsObj\n ? Boolean(options.capture)\n : Boolean(options)\n const listenerType = capture ? CAPTURE : BUBBLE\n const newNode = {\n listener,\n listenerType,\n passive: optionsIsObj && Boolean(options.passive),\n once: optionsIsObj && Boolean(options.once),\n next: null,\n }\n\n // Set it as the first node if the first node is null.\n let node = listeners.get(eventName)\n if (node === undefined) {\n listeners.set(eventName, newNode)\n return\n }\n\n // Traverse to the tail while checking duplication..\n let prev = null\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n // Should ignore duplication.\n return\n }\n prev = node\n node = node.next\n }\n\n // Add it.\n prev.next = newNode\n },\n\n /**\n * Remove a given listener from this event target.\n * @param {string} eventName The event name to remove.\n * @param {Function} listener The listener to remove.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {void}\n */\n removeEventListener(eventName, listener, options) {\n if (listener == null) {\n return\n }\n\n const listeners = getListeners(this)\n const capture = isObject(options)\n ? Boolean(options.capture)\n : Boolean(options)\n const listenerType = capture ? CAPTURE : BUBBLE\n\n let prev = null\n let node = listeners.get(eventName)\n while (node != null) {\n if (\n node.listener === listener &&\n node.listenerType === listenerType\n ) {\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n return\n }\n\n prev = node\n node = node.next\n }\n },\n\n /**\n * Dispatch a given event.\n * @param {Event|{type:string}} event The event to dispatch.\n * @returns {boolean} `false` if canceled.\n */\n dispatchEvent(event) {\n if (event == null || typeof event.type !== \"string\") {\n throw new TypeError('\"event.type\" should be a string.')\n }\n\n // If listeners aren't registered, terminate.\n const listeners = getListeners(this)\n const eventName = event.type\n let node = listeners.get(eventName)\n if (node == null) {\n return true\n }\n\n // Since we cannot rewrite several properties, so wrap object.\n const wrappedEvent = wrapEvent(this, event)\n\n // This doesn't process capturing phase and bubbling phase.\n // This isn't participating in a tree.\n let prev = null\n while (node != null) {\n // Remove this listener if it's once\n if (node.once) {\n if (prev !== null) {\n prev.next = node.next\n } else if (node.next !== null) {\n listeners.set(eventName, node.next)\n } else {\n listeners.delete(eventName)\n }\n } else {\n prev = node\n }\n\n // Call this listener\n setPassiveListener(\n wrappedEvent,\n node.passive ? node.listener : null\n )\n if (typeof node.listener === \"function\") {\n try {\n node.listener.call(this, wrappedEvent)\n } catch (err) {\n if (\n typeof console !== \"undefined\" &&\n typeof console.error === \"function\"\n ) {\n console.error(err)\n }\n }\n } else if (\n node.listenerType !== ATTRIBUTE &&\n typeof node.listener.handleEvent === \"function\"\n ) {\n node.listener.handleEvent(wrappedEvent)\n }\n\n // Break if `event.stopImmediatePropagation` was called.\n if (isStopped(wrappedEvent)) {\n break\n }\n\n node = node.next\n }\n setPassiveListener(wrappedEvent, null)\n setEventPhase(wrappedEvent, 0)\n setCurrentTarget(wrappedEvent, null)\n\n return !wrappedEvent.defaultPrevented\n },\n}\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n value: EventTarget,\n configurable: true,\n writable: true,\n})\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n typeof window !== \"undefined\" &&\n typeof window.EventTarget !== \"undefined\"\n) {\n Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype)\n}\n\nexport { defineEventAttribute, EventTarget }\nexport default EventTarget\n","import {\n // Event,\n EventTarget,\n // Type,\n defineEventAttribute,\n} from \"event-target-shim\"\n\n// Known Limitation\n// Use `any` because the type of `AbortSignal` in `lib.dom.d.ts` is wrong and\n// to make assignable our `AbortSignal` into that.\n// https://github.com/Microsoft/TSJS-lib-generator/pull/623\ntype Events = {\n abort: any // Event & Type<\"abort\">\n}\ntype EventAttributes = {\n onabort: any // Event & Type<\"abort\">\n}\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nexport default class AbortSignal extends EventTarget<Events, EventAttributes> {\n /**\n * AbortSignal cannot be constructed directly.\n */\n public constructor() {\n super()\n throw new TypeError(\"AbortSignal cannot be constructed directly\")\n }\n\n /**\n * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n */\n public get aborted(): boolean {\n const aborted = abortedFlags.get(this)\n if (typeof aborted !== \"boolean\") {\n throw new TypeError(\n `Expected 'this' to be an 'AbortSignal' object, but got ${\n this === null ? \"null\" : typeof this\n }`,\n )\n }\n return aborted\n }\n}\ndefineEventAttribute(AbortSignal.prototype, \"abort\")\n\n/**\n * Create an AbortSignal object.\n */\nexport function createAbortSignal(): AbortSignal {\n const signal = Object.create(AbortSignal.prototype)\n EventTarget.call(signal)\n abortedFlags.set(signal, false)\n return signal\n}\n\n/**\n * Abort a given signal.\n */\nexport function abortSignal(signal: AbortSignal): void {\n if (abortedFlags.get(signal) !== false) {\n return\n }\n\n abortedFlags.set(signal, true)\n signal.dispatchEvent<\"abort\">({ type: \"abort\" })\n}\n\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap<AbortSignal, boolean>()\n\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n aborted: { enumerable: true },\n})\n\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortSignal\",\n })\n}\n","import AbortSignal, { abortSignal, createAbortSignal } from \"./abort-signal\"\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nexport default class AbortController {\n /**\n * Initialize this controller.\n */\n public constructor() {\n signals.set(this, createAbortSignal())\n }\n\n /**\n * Returns the `AbortSignal` object associated with this object.\n */\n public get signal(): AbortSignal {\n return getSignal(this)\n }\n\n /**\n * Abort and signal to any observers that the associated activity is to be aborted.\n */\n public abort(): void {\n abortSignal(getSignal(this))\n }\n}\n\n/**\n * Associated signals.\n */\nconst signals = new WeakMap<AbortController, AbortSignal>()\n\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller: AbortController): AbortSignal {\n const signal = signals.get(controller)\n if (signal == null) {\n throw new TypeError(\n `Expected 'this' to be an 'AbortController' object, but got ${\n controller === null ? \"null\" : typeof controller\n }`,\n )\n }\n return signal\n}\n\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n signal: { enumerable: true },\n abort: { enumerable: true },\n})\n\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n configurable: true,\n value: \"AbortController\",\n })\n}\n\nexport { AbortController, AbortSignal }\n","'use strict'\n\nconst bufferModule = require('buffer')\nconst { kResistStopPropagation, SymbolDispose } = require('./primordials')\nconst AbortSignal = globalThis.AbortSignal || require('abort-controller').AbortSignal\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n typeof Blob !== 'undefined'\n ? function isBlob(b) {\n // eslint-disable-next-line indent\n return b instanceof Blob\n }\n : function isBlob(b) {\n return false\n }\n/* eslint-enable indent */\n\nconst validateAbortSignal = (signal, name) => {\n if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n}\nconst validateFunction = (value, name) => {\n if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n}\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n constructor(errors) {\n if (!Array.isArray(errors)) {\n throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n }\n let message = ''\n for (let i = 0; i < errors.length; i++) {\n message += ` ${errors[i].stack}\\n`\n }\n super(message)\n this.name = 'AggregateError'\n this.errors = errors\n }\n}\nmodule.exports = {\n AggregateError,\n kEmptyObject: Object.freeze({}),\n once(callback) {\n let called = false\n return function (...args) {\n if (called) {\n return\n }\n called = true\n callback.apply(this, args)\n }\n },\n createDeferredPromise: function () {\n let resolve\n let reject\n\n // eslint-disable-next-line promise/param-names\n const promise = new Promise((res, rej) => {\n resolve = res\n reject = rej\n })\n return {\n promise,\n resolve,\n reject\n }\n },\n promisify(fn) {\n return new Promise((resolve, reject) => {\n fn((err, ...args) => {\n if (err) {\n return reject(err)\n }\n return resolve(...args)\n })\n })\n },\n debuglog() {\n return function () {}\n },\n format(format, ...args) {\n // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n const replacement = args.shift()\n if (type === 'f') {\n return replacement.toFixed(6)\n } else if (type === 'j') {\n return JSON.stringify(replacement)\n } else if (type === 's' && typeof replacement === 'object') {\n const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n return `${ctor} {}`.trim()\n } else {\n return replacement.toString()\n }\n })\n },\n inspect(value) {\n // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n switch (typeof value) {\n case 'string':\n if (value.includes(\"'\")) {\n if (!value.includes('\"')) {\n return `\"${value}\"`\n } else if (!value.includes('`') && !value.includes('${')) {\n return `\\`${value}\\``\n }\n }\n return `'${value}'`\n case 'number':\n if (isNaN(value)) {\n return 'NaN'\n } else if (Object.is(value, -0)) {\n return String(value)\n }\n return value\n case 'bigint':\n return `${String(value)}n`\n case 'boolean':\n case 'undefined':\n return String(value)\n case 'object':\n return '{}'\n }\n },\n types: {\n isAsyncFunction(fn) {\n return fn instanceof AsyncFunction\n },\n isArrayBufferView(arr) {\n return ArrayBuffer.isView(arr)\n }\n },\n isBlob,\n deprecate(fn, message) {\n return fn\n },\n addAbortListener:\n require('events').addAbortListener ||\n function addAbortListener(signal, listener) {\n if (signal === undefined) {\n throw new ERR_INVALID_ARG_TYPE('signal', 'AbortSignal', signal)\n }\n validateAbortSignal(signal, 'signal')\n validateFunction(listener, 'listener')\n let removeEventListener\n if (signal.aborted) {\n queueMicrotask(() => listener())\n } else {\n signal.addEventListener('abort', listener, {\n __proto__: null,\n once: true,\n [kResistStopPropagation]: true\n })\n removeEventListener = () => {\n signal.removeEventListener('abort', listener)\n }\n }\n return {\n __proto__: null,\n [SymbolDispose]() {\n var _removeEventListener\n ;(_removeEventListener = removeEventListener) === null || _removeEventListener === undefined\n ? undefined\n : _removeEventListener()\n }\n }\n },\n AbortSignalAny:\n AbortSignal.any ||\n function AbortSignalAny(signals) {\n // Fast path if there is only one signal.\n if (signals.length === 1) {\n return signals[0]\n }\n const ac = new AbortController()\n const abort = () => ac.abort()\n signals.forEach((signal) => {\n validateAbortSignal(signal, 'signals')\n signal.addEventListener('abort', abort, {\n once: true\n })\n })\n ac.signal.addEventListener(\n 'abort',\n () => {\n signals.forEach((signal) => signal.removeEventListener('abort', abort))\n },\n {\n once: true\n }\n )\n return ac.signal\n }\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n","'use strict'\n\nconst { format, inspect, AggregateError: CustomAggregateError } = require('./util')\n\n/*\n This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n https://github.com/nodejs/node/blob/master/lib/internal/errors.js\n\n Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n 'string',\n 'function',\n 'number',\n 'object',\n // Accept 'Function' and 'Object' as alternative to the lower cased version.\n 'Function',\n 'Object',\n 'boolean',\n 'bigint',\n 'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n if (!value) {\n throw new codes.ERR_INTERNAL_ASSERTION(message)\n }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\nfunction getMessage(key, msg, args) {\n if (typeof msg === 'function') {\n assert(\n msg.length <= args.length,\n // Default options do not count.\n `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n )\n return msg(...args)\n }\n const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n assert(\n expectedLength === args.length,\n `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n )\n if (args.length === 0) {\n return msg\n }\n return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n if (!Base) {\n Base = Error\n }\n class NodeError extends Base {\n constructor(...args) {\n super(getMessage(code, message, args))\n }\n toString() {\n return `${this.name} [${code}]: ${this.message}`\n }\n }\n Object.defineProperties(NodeError.prototype, {\n name: {\n value: Base.name,\n writable: true,\n enumerable: false,\n configurable: true\n },\n toString: {\n value() {\n return `${this.name} [${code}]: ${this.message}`\n },\n writable: true,\n enumerable: false,\n configurable: true\n }\n })\n NodeError.prototype.code = code\n NodeError.prototype[kIsNodeError] = true\n codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n // We rename the functions that will be hidden to cut off the stacktrace\n // at the outermost one\n const hidden = nodeInternalPrefix + fn.name\n Object.defineProperty(fn, 'name', {\n value: hidden\n })\n return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n if (innerError && outerError && innerError !== outerError) {\n if (Array.isArray(outerError.errors)) {\n // If `outerError` is already an `AggregateError`.\n outerError.errors.push(innerError)\n return outerError\n }\n const err = new AggregateError([outerError, innerError], outerError.message)\n err.code = outerError.code\n return err\n }\n return innerError || outerError\n}\nclass AbortError extends Error {\n constructor(message = 'The operation was aborted', options = undefined) {\n if (options !== undefined && typeof options !== 'object') {\n throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n }\n super(message, options)\n this.code = 'ABORT_ERR'\n this.name = 'AbortError'\n }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n 'ERR_INVALID_ARG_TYPE',\n (name, expected, actual) => {\n assert(typeof name === 'string', \"'name' must be a string\")\n if (!Array.isArray(expected)) {\n expected = [expected]\n }\n let msg = 'The '\n if (name.endsWith(' argument')) {\n // For cases like 'first argument'\n msg += `${name} `\n } else {\n msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n }\n msg += 'must be '\n const types = []\n const instances = []\n const other = []\n for (const value of expected) {\n assert(typeof value === 'string', 'All expected entries have to be of type string')\n if (kTypes.includes(value)) {\n types.push(value.toLowerCase())\n } else if (classRegExp.test(value)) {\n instances.push(value)\n } else {\n assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n other.push(value)\n }\n }\n\n // Special handle `object` in case other instances are allowed to outline\n // the differences between each other.\n if (instances.length > 0) {\n const pos = types.indexOf('object')\n if (pos !== -1) {\n types.splice(types, pos, 1)\n instances.push('Object')\n }\n }\n if (types.length > 0) {\n switch (types.length) {\n case 1:\n msg += `of type ${types[0]}`\n break\n case 2:\n msg += `one of type ${types[0]} or ${types[1]}`\n break\n default: {\n const last = types.pop()\n msg += `one of type ${types.join(', ')}, or ${last}`\n }\n }\n if (instances.length > 0 || other.length > 0) {\n msg += ' or '\n }\n }\n if (instances.length > 0) {\n switch (instances.length) {\n case 1:\n msg += `an instance of ${instances[0]}`\n break\n case 2:\n msg += `an instance of ${instances[0]} or ${instances[1]}`\n break\n default: {\n const last = instances.pop()\n msg += `an instance of ${instances.join(', ')}, or ${last}`\n }\n }\n if (other.length > 0) {\n msg += ' or '\n }\n }\n switch (other.length) {\n case 0:\n break\n case 1:\n if (other[0].toLowerCase() !== other[0]) {\n msg += 'an '\n }\n msg += `${other[0]}`\n break\n case 2:\n msg += `one of ${other[0]} or ${other[1]}`\n break\n default: {\n const last = other.pop()\n msg += `one of ${other.join(', ')}, or ${last}`\n }\n }\n if (actual == null) {\n msg += `. Received ${actual}`\n } else if (typeof actual === 'function' && actual.name) {\n msg += `. Received function ${actual.name}`\n } else if (typeof actual === 'object') {\n var _actual$constructor\n if (\n (_actual$constructor = actual.constructor) !== null &&\n _actual$constructor !== undefined &&\n _actual$constructor.name\n ) {\n msg += `. Received an instance of ${actual.constructor.name}`\n } else {\n const inspected = inspect(actual, {\n depth: -1\n })\n msg += `. Received ${inspected}`\n }\n } else {\n let inspected = inspect(actual, {\n colors: false\n })\n if (inspected.length > 25) {\n inspected = `${inspected.slice(0, 25)}...`\n }\n msg += `. Received type ${typeof actual} (${inspected})`\n }\n return msg\n },\n TypeError\n)\nE(\n 'ERR_INVALID_ARG_VALUE',\n (name, value, reason = 'is invalid') => {\n let inspected = inspect(value)\n if (inspected.length > 128) {\n inspected = inspected.slice(0, 128) + '...'\n }\n const type = name.includes('.') ? 'property' : 'argument'\n return `The ${type} '${name}' ${reason}. Received ${inspected}`\n },\n TypeError\n)\nE(\n 'ERR_INVALID_RETURN_VALUE',\n (input, name, value) => {\n var _value$constructor\n const type =\n value !== null &&\n value !== undefined &&\n (_value$constructor = value.constructor) !== null &&\n _value$constructor !== undefined &&\n _value$constructor.name\n ? `instance of ${value.constructor.name}`\n : `type ${typeof value}`\n return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n },\n TypeError\n)\nE(\n 'ERR_MISSING_ARGS',\n (...args) => {\n assert(args.length > 0, 'At least one arg needs to be specified')\n let msg\n const len = args.length\n args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n switch (len) {\n case 1:\n msg += `The ${args[0]} argument`\n break\n case 2:\n msg += `The ${args[0]} and ${args[1]} arguments`\n break\n default:\n {\n const last = args.pop()\n msg += `The ${args.join(', ')}, and ${last} arguments`\n }\n break\n }\n return `${msg} must be specified`\n },\n TypeError\n)\nE(\n 'ERR_OUT_OF_RANGE',\n (str, range, input) => {\n assert(range, 'Missing \"range\" argument')\n let received\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > 2n ** 32n || input < -(2n ** 32n)) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n } else {\n received = inspect(input)\n }\n return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n },\n RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n AbortError,\n aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n hideStackFrames,\n codes\n}\n","/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n ArrayIsArray,\n ArrayPrototypeIncludes,\n ArrayPrototypeJoin,\n ArrayPrototypeMap,\n NumberIsInteger,\n NumberIsNaN,\n NumberMAX_SAFE_INTEGER,\n NumberMIN_SAFE_INTEGER,\n NumberParseInt,\n ObjectPrototypeHasOwnProperty,\n RegExpPrototypeExec,\n String,\n StringPrototypeToUpperCase,\n StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n hideStackFrames,\n codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n if (typeof value === 'undefined') {\n value = def\n }\n if (typeof value === 'string') {\n if (RegExpPrototypeExec(octalReg, value) === null) {\n throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n }\n value = NumberParseInt(value, 8)\n }\n validateUint32(value, name)\n return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n // The defaults for min and max correspond to the limits of 32-bit integers.\n if (typeof value !== 'number') {\n throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n if (!NumberIsInteger(value)) {\n throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n }\n if (value < min || value > max) {\n throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n if (typeof value !== 'number') {\n throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n if (!NumberIsInteger(value)) {\n throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n }\n const min = positive ? 1 : 0\n // 2 ** 32 === 4294967296\n const max = 4294967295\n if (value < min || value > max) {\n throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n if (\n (min != null && value < min) ||\n (max != null && value > max) ||\n ((min != null || max != null) && NumberIsNaN(value))\n ) {\n throw new ERR_OUT_OF_RANGE(\n name,\n `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n value\n )\n }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n if (!ArrayPrototypeIncludes(oneOf, value)) {\n const allowed = ArrayPrototypeJoin(\n ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n ', '\n )\n const reason = 'must be one of: ' + allowed\n throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n * allowArray?: boolean,\n * allowFunction?: boolean,\n * nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n if (\n (!nullable && value === null) ||\n (!allowArray && ArrayIsArray(value)) ||\n (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n ) {\n throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n * of \"dictionary\" here, which means any value\n * whose Type is either Undefined, Null, or\n * Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n if (!ArrayIsArray(value)) {\n throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n }\n if (value.length < minLength) {\n const reason = `must be longer than ${minLength}`\n throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n validateString(value[i], `${name}[${i}]`)\n }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n validateBoolean(value[i], `${name}[${i}]`)\n }\n}\n\n/**\n * @callback validateAbortSignalArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is AbortSignal[]}\n */\n\n/** @type {validateAbortSignalArray} */\nfunction validateAbortSignalArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n const signal = value[i]\n const indexedName = `${name}[${i}]`\n if (signal == null) {\n throw new ERR_INVALID_ARG_TYPE(indexedName, 'AbortSignal', signal)\n }\n validateAbortSignal(signal, indexedName)\n }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n validateString(signal, name)\n if (signals[signal] === undefined) {\n if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n }\n throw new ERR_UNKNOWN_SIGNAL(signal)\n }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n if (!isArrayBufferView(buffer)) {\n throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n const normalizedEncoding = normalizeEncoding(encoding)\n const length = data.length\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n if (\n (typeof port !== 'number' && typeof port !== 'string') ||\n (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n +port !== +port >>> 0 ||\n port > 0xffff ||\n (port === 0 && !allowZero)\n ) {\n throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n }\n return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n if (!ArrayPrototypeIncludes(union, value)) {\n throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n }\n}\n\n/*\n The rules for the Link header field are described here:\n https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n This regex validates any string surrounded by angle brackets\n (not necessarily a valid URI reference) followed by zero or more\n link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n throw new ERR_INVALID_ARG_VALUE(\n name,\n value,\n 'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n )\n }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n if (typeof hints === 'string') {\n validateLinkHeaderFormat(hints, 'hints')\n return hints\n } else if (ArrayIsArray(hints)) {\n const hintsLength = hints.length\n let result = ''\n if (hintsLength === 0) {\n return result\n }\n for (let i = 0; i < hintsLength; i++) {\n const link = hints[i]\n validateLinkHeaderFormat(link, 'hints')\n result += link\n if (i !== hintsLength - 1) {\n result += ', '\n }\n }\n return result\n }\n throw new ERR_INVALID_ARG_VALUE(\n 'hints',\n hints,\n 'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n )\n}\nmodule.exports = {\n isInt32,\n isUint32,\n parseFileMode,\n validateArray,\n validateStringArray,\n validateBooleanArray,\n validateAbortSignalArray,\n validateBoolean,\n validateBuffer,\n validateDictionary,\n validateEncoding,\n validateFunction,\n validateInt32,\n validateInteger,\n validateNumber,\n validateObject,\n validateOneOf,\n validatePlainFunction,\n validatePort,\n validateSignalName,\n validateString,\n validateUint32,\n validateUndefined,\n validateUnion,\n validateAbortSignal,\n validateLinkHeaderValue\n}\n","// for now just expose the builtin process global from node.js\nmodule.exports = global.process;\n","'use strict'\n\nconst { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\n\n// We need to use SymbolFor to make these globally available\n// for interopt with readable-stream, i.e. readable-stream\n// and node core needs to be able to read/write private state\n// from each other for proper interoperability.\nconst kIsDestroyed = SymbolFor('nodejs.stream.destroyed')\nconst kIsErrored = SymbolFor('nodejs.stream.errored')\nconst kIsReadable = SymbolFor('nodejs.stream.readable')\nconst kIsWritable = SymbolFor('nodejs.stream.writable')\nconst kIsDisturbed = SymbolFor('nodejs.stream.disturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n var _obj$_readableState\n return !!(\n (\n obj &&\n typeof obj.pipe === 'function' &&\n typeof obj.on === 'function' &&\n (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n (!obj._writableState ||\n ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n ? undefined\n : _obj$_readableState.readable) !== false) &&\n // Duplex\n (!obj._writableState || obj._readableState)\n ) // Writable has .pipe.\n )\n}\n\nfunction isWritableNodeStream(obj) {\n var _obj$_writableState\n return !!(\n (\n obj &&\n typeof obj.write === 'function' &&\n typeof obj.on === 'function' &&\n (!obj._readableState ||\n ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n ? undefined\n : _obj$_writableState.writable) !== false)\n ) // Duplex\n )\n}\n\nfunction isDuplexNodeStream(obj) {\n return !!(\n obj &&\n typeof obj.pipe === 'function' &&\n obj._readableState &&\n typeof obj.on === 'function' &&\n typeof obj.write === 'function'\n )\n}\nfunction isNodeStream(obj) {\n return (\n obj &&\n (obj._readableState ||\n obj._writableState ||\n (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n )\n}\nfunction isReadableStream(obj) {\n return !!(\n obj &&\n !isNodeStream(obj) &&\n typeof obj.pipeThrough === 'function' &&\n typeof obj.getReader === 'function' &&\n typeof obj.cancel === 'function'\n )\n}\nfunction isWritableStream(obj) {\n return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n if (obj == null) return false\n if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n if (!isNodeStream(stream)) return null\n const wState = stream._writableState\n const rState = stream._readableState\n const state = wState || rState\n return !!(stream.destroyed || stream[kIsDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n if (!isWritableNodeStream(stream)) return null\n if (stream.writableEnded === true) return true\n const wState = stream._writableState\n if (wState !== null && wState !== undefined && wState.errored) return false\n if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n if (!isWritableNodeStream(stream)) return null\n if (stream.writableFinished === true) return true\n const wState = stream._writableState\n if (wState !== null && wState !== undefined && wState.errored) return false\n if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n if (!isReadableNodeStream(stream)) return null\n if (stream.readableEnded === true) return true\n const rState = stream._readableState\n if (!rState || rState.errored) return false\n if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n if (!isReadableNodeStream(stream)) return null\n const rState = stream._readableState\n if (rState !== null && rState !== undefined && rState.errored) return false\n if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n if (isDestroyed(stream)) return false\n return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n if (stream && stream[kIsWritable] != null) return stream[kIsWritable]\n if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n if (isDestroyed(stream)) return false\n return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n if (!isNodeStream(stream)) {\n return null\n }\n if (isDestroyed(stream)) {\n return true\n }\n if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n return false\n }\n if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n return false\n }\n return true\n}\nfunction isWritableErrored(stream) {\n var _stream$_writableStat, _stream$_writableStat2\n if (!isNodeStream(stream)) {\n return null\n }\n if (stream.writableErrored) {\n return stream.writableErrored\n }\n return (_stream$_writableStat =\n (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n ? undefined\n : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n ? _stream$_writableStat\n : null\n}\nfunction isReadableErrored(stream) {\n var _stream$_readableStat, _stream$_readableStat2\n if (!isNodeStream(stream)) {\n return null\n }\n if (stream.readableErrored) {\n return stream.readableErrored\n }\n return (_stream$_readableStat =\n (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n ? undefined\n : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n ? _stream$_readableStat\n : null\n}\nfunction isClosed(stream) {\n if (!isNodeStream(stream)) {\n return null\n }\n if (typeof stream.closed === 'boolean') {\n return stream.closed\n }\n const wState = stream._writableState\n const rState = stream._readableState\n if (\n typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n ) {\n return (\n (wState === null || wState === undefined ? undefined : wState.closed) ||\n (rState === null || rState === undefined ? undefined : rState.closed)\n )\n }\n if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n return stream._closed\n }\n return null\n}\nfunction isOutgoingMessage(stream) {\n return (\n typeof stream._closed === 'boolean' &&\n typeof stream._defaultKeepAlive === 'boolean' &&\n typeof stream._removedConnection === 'boolean' &&\n typeof stream._removedContLen === 'boolean'\n )\n}\nfunction isServerResponse(stream) {\n return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n var _stream$req\n return (\n typeof stream._consuming === 'boolean' &&\n typeof stream._dumped === 'boolean' &&\n ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n undefined\n )\n}\nfunction willEmitClose(stream) {\n if (!isNodeStream(stream)) return null\n const wState = stream._writableState\n const rState = stream._readableState\n const state = wState || rState\n return (\n (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n )\n}\nfunction isDisturbed(stream) {\n var _stream$kIsDisturbed\n return !!(\n stream &&\n ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n ? _stream$kIsDisturbed\n : stream.readableDidRead || stream.readableAborted)\n )\n}\nfunction isErrored(stream) {\n var _ref,\n _ref2,\n _ref3,\n _ref4,\n _ref5,\n _stream$kIsErrored,\n _stream$_readableStat3,\n _stream$_writableStat3,\n _stream$_readableStat4,\n _stream$_writableStat4\n return !!(\n stream &&\n ((_ref =\n (_ref2 =\n (_ref3 =\n (_ref4 =\n (_ref5 =\n (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n ? _stream$kIsErrored\n : stream.readableErrored) !== null && _ref5 !== undefined\n ? _ref5\n : stream.writableErrored) !== null && _ref4 !== undefined\n ? _ref4\n : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n ? undefined\n : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n ? _ref3\n : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n ? undefined\n : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n ? _ref2\n : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n ? undefined\n : _stream$_readableStat4.errored) !== null && _ref !== undefined\n ? _ref\n : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n ? undefined\n : _stream$_writableStat4.errored)\n )\n}\nmodule.exports = {\n isDestroyed,\n kIsDestroyed,\n isDisturbed,\n kIsDisturbed,\n isErrored,\n kIsErrored,\n isReadable,\n kIsReadable,\n kIsClosedPromise,\n kControllerErrorFunction,\n kIsWritable,\n isClosed,\n isDuplexNodeStream,\n isFinished,\n isIterable,\n isReadableNodeStream,\n isReadableStream,\n isReadableEnded,\n isReadableFinished,\n isReadableErrored,\n isNodeStream,\n isWebStream,\n isWritable,\n isWritableNodeStream,\n isWritableStream,\n isWritableEnded,\n isWritableFinished,\n isWritableErrored,\n isServerRequest,\n isServerResponse,\n willEmitClose,\n isTransformStream\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen, SymbolDispose } = require('../../ours/primordials')\nconst {\n isClosed,\n isReadable,\n isReadableNodeStream,\n isReadableStream,\n isReadableFinished,\n isReadableErrored,\n isWritable,\n isWritableNodeStream,\n isWritableStream,\n isWritableFinished,\n isWritableErrored,\n isNodeStream,\n willEmitClose: _willEmitClose,\n kIsClosedPromise\n} = require('./utils')\nlet addAbortListener\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n var _options$readable, _options$writable\n if (arguments.length === 2) {\n callback = options\n options = kEmptyObject\n } else if (options == null) {\n options = kEmptyObject\n } else {\n validateObject(options, 'options')\n }\n validateFunction(callback, 'callback')\n validateAbortSignal(options.signal, 'options.signal')\n callback = once(callback)\n if (isReadableStream(stream) || isWritableStream(stream)) {\n return eosWeb(stream, options, callback)\n }\n if (!isNodeStream(stream)) {\n throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n }\n const readable =\n (_options$readable = options.readable) !== null && _options$readable !== undefined\n ? _options$readable\n : isReadableNodeStream(stream)\n const writable =\n (_options$writable = options.writable) !== null && _options$writable !== undefined\n ? _options$writable\n : isWritableNodeStream(stream)\n const wState = stream._writableState\n const rState = stream._readableState\n const onlegacyfinish = () => {\n if (!stream.writable) {\n onfinish()\n }\n }\n\n // TODO (ronag): Improve soft detection to include core modules and\n // common ecosystem modules that do properly emit 'close' but fail\n // this generic check.\n let willEmitClose =\n _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n let writableFinished = isWritableFinished(stream, false)\n const onfinish = () => {\n writableFinished = true\n // Stream should not be destroyed here. If it is that\n // means that user space is doing something differently and\n // we cannot trust willEmitClose.\n if (stream.destroyed) {\n willEmitClose = false\n }\n if (willEmitClose && (!stream.readable || readable)) {\n return\n }\n if (!readable || readableFinished) {\n callback.call(stream)\n }\n }\n let readableFinished = isReadableFinished(stream, false)\n const onend = () => {\n readableFinished = true\n // Stream should not be destroyed here. If it is that\n // means that user space is doing something differently and\n // we cannot trust willEmitClose.\n if (stream.destroyed) {\n willEmitClose = false\n }\n if (willEmitClose && (!stream.writable || writable)) {\n return\n }\n if (!writable || writableFinished) {\n callback.call(stream)\n }\n }\n const onerror = (err) => {\n callback.call(stream, err)\n }\n let closed = isClosed(stream)\n const onclose = () => {\n closed = true\n const errored = isWritableErrored(stream) || isReadableErrored(stream)\n if (errored && typeof errored !== 'boolean') {\n return callback.call(stream, errored)\n }\n if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n }\n if (writable && !writableFinished) {\n if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n }\n callback.call(stream)\n }\n const onclosed = () => {\n closed = true\n const errored = isWritableErrored(stream) || isReadableErrored(stream)\n if (errored && typeof errored !== 'boolean') {\n return callback.call(stream, errored)\n }\n callback.call(stream)\n }\n const onrequest = () => {\n stream.req.on('finish', onfinish)\n }\n if (isRequest(stream)) {\n stream.on('complete', onfinish)\n if (!willEmitClose) {\n stream.on('abort', onclose)\n }\n if (stream.req) {\n onrequest()\n } else {\n stream.on('request', onrequest)\n }\n } else if (writable && !wState) {\n // legacy streams\n stream.on('end', onlegacyfinish)\n stream.on('close', onlegacyfinish)\n }\n\n // Not all streams will emit 'close' after 'aborted'.\n if (!willEmitClose && typeof stream.aborted === 'boolean') {\n stream.on('aborted', onclose)\n }\n stream.on('end', onend)\n stream.on('finish', onfinish)\n if (options.error !== false) {\n stream.on('error', onerror)\n }\n stream.on('close', onclose)\n if (closed) {\n process.nextTick(onclose)\n } else if (\n (wState !== null && wState !== undefined && wState.errorEmitted) ||\n (rState !== null && rState !== undefined && rState.errorEmitted)\n ) {\n if (!willEmitClose) {\n process.nextTick(onclosed)\n }\n } else if (\n !readable &&\n (!willEmitClose || isReadable(stream)) &&\n (writableFinished || isWritable(stream) === false)\n ) {\n process.nextTick(onclosed)\n } else if (\n !writable &&\n (!willEmitClose || isWritable(stream)) &&\n (readableFinished || isReadable(stream) === false)\n ) {\n process.nextTick(onclosed)\n } else if (rState && stream.req && stream.aborted) {\n process.nextTick(onclosed)\n }\n const cleanup = () => {\n callback = nop\n stream.removeListener('aborted', onclose)\n stream.removeListener('complete', onfinish)\n stream.removeListener('abort', onclose)\n stream.removeListener('request', onrequest)\n if (stream.req) stream.req.removeListener('finish', onfinish)\n stream.removeListener('end', onlegacyfinish)\n stream.removeListener('close', onlegacyfinish)\n stream.removeListener('finish', onfinish)\n stream.removeListener('end', onend)\n stream.removeListener('error', onerror)\n stream.removeListener('close', onclose)\n }\n if (options.signal && !closed) {\n const abort = () => {\n // Keep it because cleanup removes it.\n const endCallback = callback\n cleanup()\n endCallback.call(\n stream,\n new AbortError(undefined, {\n cause: options.signal.reason\n })\n )\n }\n if (options.signal.aborted) {\n process.nextTick(abort)\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(options.signal, abort)\n const originalCallback = callback\n callback = once((...args) => {\n disposable[SymbolDispose]()\n originalCallback.apply(stream, args)\n })\n }\n }\n return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n let isAborted = false\n let abort = nop\n if (options.signal) {\n abort = () => {\n isAborted = true\n callback.call(\n stream,\n new AbortError(undefined, {\n cause: options.signal.reason\n })\n )\n }\n if (options.signal.aborted) {\n process.nextTick(abort)\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(options.signal, abort)\n const originalCallback = callback\n callback = once((...args) => {\n disposable[SymbolDispose]()\n originalCallback.apply(stream, args)\n })\n }\n }\n const resolverFn = (...args) => {\n if (!isAborted) {\n process.nextTick(() => callback.apply(stream, args))\n }\n }\n PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n return nop\n}\nfunction finished(stream, opts) {\n var _opts\n let autoCleanup = false\n if (opts === null) {\n opts = kEmptyObject\n }\n if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n validateBoolean(opts.cleanup, 'cleanup')\n autoCleanup = opts.cleanup\n }\n return new Promise((resolve, reject) => {\n const cleanup = eos(stream, opts, (err) => {\n if (autoCleanup) {\n cleanup()\n }\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n","'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n aggregateTwoErrors,\n codes: { ERR_MULTIPLE_CALLBACK },\n AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kIsDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n if (err) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n err.stack // eslint-disable-line no-unused-expressions\n\n if (w && !w.errored) {\n w.errored = err\n }\n if (r && !r.errored) {\n r.errored = err\n }\n }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n const r = this._readableState\n const w = this._writableState\n // With duplex streams we use the writable side for state.\n const s = w || r\n if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n if (typeof cb === 'function') {\n cb()\n }\n return this\n }\n\n // We set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n checkError(err, w, r)\n if (w) {\n w.destroyed = true\n }\n if (r) {\n r.destroyed = true\n }\n\n // If still constructing then defer calling _destroy.\n if (!s.constructed) {\n this.once(kDestroy, function (er) {\n _destroy(this, aggregateTwoErrors(er, err), cb)\n })\n } else {\n _destroy(this, err, cb)\n }\n return this\n}\nfunction _destroy(self, err, cb) {\n let called = false\n function onDestroy(err) {\n if (called) {\n return\n }\n called = true\n const r = self._readableState\n const w = self._writableState\n checkError(err, w, r)\n if (w) {\n w.closed = true\n }\n if (r) {\n r.closed = true\n }\n if (typeof cb === 'function') {\n cb(err)\n }\n if (err) {\n process.nextTick(emitErrorCloseNT, self, err)\n } else {\n process.nextTick(emitCloseNT, self)\n }\n }\n try {\n self._destroy(err || null, onDestroy)\n } catch (err) {\n onDestroy(err)\n }\n}\nfunction emitErrorCloseNT(self, err) {\n emitErrorNT(self, err)\n emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n const r = self._readableState\n const w = self._writableState\n if (w) {\n w.closeEmitted = true\n }\n if (r) {\n r.closeEmitted = true\n }\n if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n self.emit('close')\n }\n}\nfunction emitErrorNT(self, err) {\n const r = self._readableState\n const w = self._writableState\n if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n return\n }\n if (w) {\n w.errorEmitted = true\n }\n if (r) {\n r.errorEmitted = true\n }\n self.emit('error', err)\n}\nfunction undestroy() {\n const r = this._readableState\n const w = this._writableState\n if (r) {\n r.constructed = true\n r.closed = false\n r.closeEmitted = false\n r.destroyed = false\n r.errored = null\n r.errorEmitted = false\n r.reading = false\n r.ended = r.readable === false\n r.endEmitted = r.readable === false\n }\n if (w) {\n w.constructed = true\n w.destroyed = false\n w.closed = false\n w.closeEmitted = false\n w.errored = null\n w.errorEmitted = false\n w.finalCalled = false\n w.prefinished = false\n w.ended = w.writable === false\n w.ending = w.writable === false\n w.finished = w.writable === false\n }\n}\nfunction errorOrDestroy(stream, err, sync) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n const r = stream._readableState\n const w = stream._writableState\n if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n return this\n }\n if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n stream.destroy(err)\n else if (err) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n err.stack // eslint-disable-line no-unused-expressions\n\n if (w && !w.errored) {\n w.errored = err\n }\n if (r && !r.errored) {\n r.errored = err\n }\n if (sync) {\n process.nextTick(emitErrorNT, stream, err)\n } else {\n emitErrorNT(stream, err)\n }\n }\n}\nfunction construct(stream, cb) {\n if (typeof stream._construct !== 'function') {\n return\n }\n const r = stream._readableState\n const w = stream._writableState\n if (r) {\n r.constructed = false\n }\n if (w) {\n w.constructed = false\n }\n stream.once(kConstruct, cb)\n if (stream.listenerCount(kConstruct) > 1) {\n // Duplex\n return\n }\n process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n let called = false\n function onConstruct(err) {\n if (called) {\n errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n return\n }\n called = true\n const r = stream._readableState\n const w = stream._writableState\n const s = w || r\n if (r) {\n r.constructed = true\n }\n if (w) {\n w.constructed = true\n }\n if (s.destroyed) {\n stream.emit(kDestroy, err)\n } else if (err) {\n errorOrDestroy(stream, err, true)\n } else {\n process.nextTick(emitConstructNT, stream)\n }\n }\n try {\n stream._construct((err) => {\n process.nextTick(onConstruct, err)\n })\n } catch (err) {\n process.nextTick(onConstruct, err)\n }\n}\nfunction emitConstructNT(stream) {\n stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n stream.emit('error', err)\n process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n if (!stream || isDestroyed(stream)) {\n return\n }\n if (!err && !isFinished(stream)) {\n err = new AbortError()\n }\n\n // TODO: Remove isRequest branches.\n if (isServerRequest(stream)) {\n stream.socket = null\n stream.destroy(err)\n } else if (isRequest(stream)) {\n stream.abort()\n } else if (isRequest(stream.req)) {\n stream.req.abort()\n } else if (typeof stream.destroy === 'function') {\n stream.destroy(err)\n } else if (typeof stream.close === 'function') {\n // TODO: Don't lose err?\n stream.close()\n } else if (err) {\n process.nextTick(emitErrorCloseLegacy, stream, err)\n } else {\n process.nextTick(emitCloseLegacy, stream)\n }\n if (!stream.destroyed) {\n stream[kIsDestroyed] = true\n }\n}\nmodule.exports = {\n construct,\n destroyer,\n destroy,\n undestroy,\n errorOrDestroy\n}\n","'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n const source = this\n function ondata(chunk) {\n if (dest.writable && dest.write(chunk) === false && source.pause) {\n source.pause()\n }\n }\n source.on('data', ondata)\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume()\n }\n }\n dest.on('drain', ondrain)\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend)\n source.on('close', onclose)\n }\n let didOnEnd = false\n function onend() {\n if (didOnEnd) return\n didOnEnd = true\n dest.end()\n }\n function onclose() {\n if (didOnEnd) return\n didOnEnd = true\n if (typeof dest.destroy === 'function') dest.destroy()\n }\n\n // Don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup()\n if (EE.listenerCount(this, 'error') === 0) {\n this.emit('error', er)\n }\n }\n prependListener(source, 'error', onerror)\n prependListener(dest, 'error', onerror)\n\n // Remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata)\n dest.removeListener('drain', ondrain)\n source.removeListener('end', onend)\n source.removeListener('close', onclose)\n source.removeListener('error', onerror)\n dest.removeListener('error', onerror)\n source.removeListener('end', cleanup)\n source.removeListener('close', cleanup)\n dest.removeListener('close', cleanup)\n }\n source.on('end', cleanup)\n source.on('close', cleanup)\n dest.on('close', cleanup)\n dest.emit('pipe', source)\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest\n}\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n Stream,\n prependListener\n}\n","'use strict'\n\nconst { SymbolDispose } = require('../../ours/primordials')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\nlet addAbortListener\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n if (typeof signal !== 'object' || !('aborted' in signal)) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n validateAbortSignal(signal, 'signal')\n if (!isNodeStream(stream) && !isWebStream(stream)) {\n throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n }\n return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n if (typeof signal !== 'object' || !('aborted' in signal)) {\n return stream\n }\n const onAbort = isNodeStream(stream)\n ? () => {\n stream.destroy(\n new AbortError(undefined, {\n cause: signal.reason\n })\n )\n }\n : () => {\n stream[kControllerErrorFunction](\n new AbortError(undefined, {\n cause: signal.reason\n })\n )\n }\n if (signal.aborted) {\n onAbort()\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(signal, onAbort)\n eos(stream, disposable[SymbolDispose])\n }\n return stream\n}\n","'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n constructor() {\n this.head = null\n this.tail = null\n this.length = 0\n }\n push(v) {\n const entry = {\n data: v,\n next: null\n }\n if (this.length > 0) this.tail.next = entry\n else this.head = entry\n this.tail = entry\n ++this.length\n }\n unshift(v) {\n const entry = {\n data: v,\n next: this.head\n }\n if (this.length === 0) this.tail = entry\n this.head = entry\n ++this.length\n }\n shift() {\n if (this.length === 0) return\n const ret = this.head.data\n if (this.length === 1) this.head = this.tail = null\n else this.head = this.head.next\n --this.length\n return ret\n }\n clear() {\n this.head = this.tail = null\n this.length = 0\n }\n join(s) {\n if (this.length === 0) return ''\n let p = this.head\n let ret = '' + p.data\n while ((p = p.next) !== null) ret += s + p.data\n return ret\n }\n concat(n) {\n if (this.length === 0) return Buffer.alloc(0)\n const ret = Buffer.allocUnsafe(n >>> 0)\n let p = this.head\n let i = 0\n while (p) {\n TypedArrayPrototypeSet(ret, p.data, i)\n i += p.data.length\n p = p.next\n }\n return ret\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n consume(n, hasStrings) {\n const data = this.head.data\n if (n < data.length) {\n // `slice` is the same for buffers and strings.\n const slice = data.slice(0, n)\n this.head.data = data.slice(n)\n return slice\n }\n if (n === data.length) {\n // First chunk is a perfect match.\n return this.shift()\n }\n // Result spans more than one buffer.\n return hasStrings ? this._getString(n) : this._getBuffer(n)\n }\n first() {\n return this.head.data\n }\n *[SymbolIterator]() {\n for (let p = this.head; p; p = p.next) {\n yield p.data\n }\n }\n\n // Consumes a specified amount of characters from the buffered data.\n _getString(n) {\n let ret = ''\n let p = this.head\n let c = 0\n do {\n const str = p.data\n if (n > str.length) {\n ret += str\n n -= str.length\n } else {\n if (n === str.length) {\n ret += str\n ++c\n if (p.next) this.head = p.next\n else this.head = this.tail = null\n } else {\n ret += StringPrototypeSlice(str, 0, n)\n this.head = p\n p.data = StringPrototypeSlice(str, n)\n }\n break\n }\n ++c\n } while ((p = p.next) !== null)\n this.length -= c\n return ret\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n _getBuffer(n) {\n const ret = Buffer.allocUnsafe(n)\n const retLen = n\n let p = this.head\n let c = 0\n do {\n const buf = p.data\n if (n > buf.length) {\n TypedArrayPrototypeSet(ret, buf, retLen - n)\n n -= buf.length\n } else {\n if (n === buf.length) {\n TypedArrayPrototypeSet(ret, buf, retLen - n)\n ++c\n if (p.next) this.head = p.next\n else this.head = this.tail = null\n } else {\n TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n this.head = p\n p.data = buf.slice(n)\n }\n break\n }\n ++c\n } while ((p = p.next) !== null)\n this.length -= c\n return ret\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n return inspect(this, {\n ...options,\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n })\n }\n}\n","'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { validateInteger } = require('../validators')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nlet defaultHighWaterMarkBytes = 16 * 1024\nlet defaultHighWaterMarkObjectMode = 16\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes\n}\nfunction setDefaultHighWaterMark(objectMode, value) {\n validateInteger(value, 'value', 0)\n if (objectMode) {\n defaultHighWaterMarkObjectMode = value\n } else {\n defaultHighWaterMarkBytes = value\n }\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n if (hwm != null) {\n if (!NumberIsInteger(hwm) || hwm < 0) {\n const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n throw new ERR_INVALID_ARG_VALUE(name, hwm)\n }\n return MathFloor(hwm)\n }\n\n // Default value\n return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n getHighWaterMark,\n getDefaultHighWaterMark,\n setDefaultHighWaterMark\n}\n","'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n let iterator\n if (typeof iterable === 'string' || iterable instanceof Buffer) {\n return new Readable({\n objectMode: true,\n ...opts,\n read() {\n this.push(iterable)\n this.push(null)\n }\n })\n }\n let isAsync\n if (iterable && iterable[SymbolAsyncIterator]) {\n isAsync = true\n iterator = iterable[SymbolAsyncIterator]()\n } else if (iterable && iterable[SymbolIterator]) {\n isAsync = false\n iterator = iterable[SymbolIterator]()\n } else {\n throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n }\n const readable = new Readable({\n objectMode: true,\n highWaterMark: 1,\n // TODO(ronag): What options should be allowed?\n ...opts\n })\n\n // Flag to protect against _read\n // being called before last iteration completion.\n let reading = false\n readable._read = function () {\n if (!reading) {\n reading = true\n next()\n }\n }\n readable._destroy = function (error, cb) {\n PromisePrototypeThen(\n close(error),\n () => process.nextTick(cb, error),\n // nextTick is here in case cb throws\n (e) => process.nextTick(cb, e || error)\n )\n }\n async function close(error) {\n const hadError = error !== undefined && error !== null\n const hasThrow = typeof iterator.throw === 'function'\n if (hadError && hasThrow) {\n const { value, done } = await iterator.throw(error)\n await value\n if (done) {\n return\n }\n }\n if (typeof iterator.return === 'function') {\n const { value } = await iterator.return()\n await value\n }\n }\n async function next() {\n for (;;) {\n try {\n const { value, done } = isAsync ? await iterator.next() : iterator.next()\n if (done) {\n readable.push(null)\n } else {\n const res = value && typeof value.then === 'function' ? await value : value\n if (res === null) {\n reading = false\n throw new ERR_STREAM_NULL_VALUES()\n } else if (readable.push(res)) {\n continue\n } else {\n reading = false\n }\n }\n } catch (err) {\n readable.destroy(err)\n }\n break\n }\n }\n return readable\n}\nmodule.exports = from\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst {\n ArrayPrototypeIndexOf,\n NumberIsInteger,\n NumberIsNaN,\n NumberParseInt,\n ObjectDefineProperties,\n ObjectKeys,\n ObjectSetPrototypeOf,\n Promise,\n SafeSet,\n SymbolAsyncDispose,\n SymbolAsyncIterator,\n Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n aggregateTwoErrors,\n codes: {\n ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED,\n ERR_OUT_OF_RANGE,\n ERR_STREAM_PUSH_AFTER_EOF,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n },\n AbortError\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nconst kObjectMode = 1 << 0\nconst kEnded = 1 << 1\nconst kEndEmitted = 1 << 2\nconst kReading = 1 << 3\nconst kConstructed = 1 << 4\nconst kSync = 1 << 5\nconst kNeedReadable = 1 << 6\nconst kEmittedReadable = 1 << 7\nconst kReadableListening = 1 << 8\nconst kResumeScheduled = 1 << 9\nconst kErrorEmitted = 1 << 10\nconst kEmitClose = 1 << 11\nconst kAutoDestroy = 1 << 12\nconst kDestroyed = 1 << 13\nconst kClosed = 1 << 14\nconst kCloseEmitted = 1 << 15\nconst kMultiAwaitDrain = 1 << 16\nconst kReadingMore = 1 << 17\nconst kDataEmitted = 1 << 18\n\n// TODO(benjamingr) it is likely slower to do it this way than with free functions\nfunction makeBitMapDescriptor(bit) {\n return {\n enumerable: false,\n get() {\n return (this.state & bit) !== 0\n },\n set(value) {\n if (value) this.state |= bit\n else this.state &= ~bit\n }\n }\n}\nObjectDefineProperties(ReadableState.prototype, {\n objectMode: makeBitMapDescriptor(kObjectMode),\n ended: makeBitMapDescriptor(kEnded),\n endEmitted: makeBitMapDescriptor(kEndEmitted),\n reading: makeBitMapDescriptor(kReading),\n // Stream is still being constructed and cannot be\n // destroyed until construction finished or failed.\n // Async construction is opt in, therefore we start as\n // constructed.\n constructed: makeBitMapDescriptor(kConstructed),\n // A flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n sync: makeBitMapDescriptor(kSync),\n // Whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n needReadable: makeBitMapDescriptor(kNeedReadable),\n emittedReadable: makeBitMapDescriptor(kEmittedReadable),\n readableListening: makeBitMapDescriptor(kReadableListening),\n resumeScheduled: makeBitMapDescriptor(kResumeScheduled),\n // True if the error was already emitted and should not be thrown again.\n errorEmitted: makeBitMapDescriptor(kErrorEmitted),\n emitClose: makeBitMapDescriptor(kEmitClose),\n autoDestroy: makeBitMapDescriptor(kAutoDestroy),\n // Has it been destroyed.\n destroyed: makeBitMapDescriptor(kDestroyed),\n // Indicates whether the stream has finished destroying.\n closed: makeBitMapDescriptor(kClosed),\n // True if close has been emitted or would have been emitted\n // depending on emitClose.\n closeEmitted: makeBitMapDescriptor(kCloseEmitted),\n multiAwaitDrain: makeBitMapDescriptor(kMultiAwaitDrain),\n // If true, a maybeReadMore has been scheduled.\n readingMore: makeBitMapDescriptor(kReadingMore),\n dataEmitted: makeBitMapDescriptor(kDataEmitted)\n})\nfunction ReadableState(options, stream, isDuplex) {\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n // Bit map field to store ReadableState more effciently with 1 bit per field\n // instead of a V8 slot per field.\n this.state = kEmitClose | kAutoDestroy | kConstructed | kSync\n // Object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away.\n if (options && options.objectMode) this.state |= kObjectMode\n if (isDuplex && options && options.readableObjectMode) this.state |= kObjectMode\n\n // The point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = options\n ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n : getDefaultHighWaterMark(false)\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift().\n this.buffer = new BufferList()\n this.length = 0\n this.pipes = []\n this.flowing = null\n this[kPaused] = null\n\n // Should close be emitted on destroy. Defaults to true.\n if (options && options.emitClose === false) this.state &= ~kEmitClose\n\n // Should .destroy() be called after 'end' (and potentially 'finish').\n if (options && options.autoDestroy === false) this.state &= ~kAutoDestroy\n\n // Indicates whether the stream has errored. When true no further\n // _read calls, 'data' or 'readable' events should occur. This is needed\n // since when autoDestroy is disabled we need a way to tell whether the\n // stream has failed.\n this.errored = null\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n // Ref the piped dest which we need a drain event on it\n // type: null | Writable | Set<Writable>.\n this.awaitDrainWriters = null\n this.decoder = null\n this.encoding = null\n if (options && options.encoding) {\n this.decoder = new StringDecoder(options.encoding)\n this.encoding = options.encoding\n }\n}\nfunction Readable(options) {\n if (!(this instanceof Readable)) return new Readable(options)\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5.\n const isDuplex = this instanceof require('./duplex')\n this._readableState = new ReadableState(options, this, isDuplex)\n if (options) {\n if (typeof options.read === 'function') this._read = options.read\n if (typeof options.destroy === 'function') this._destroy = options.destroy\n if (typeof options.construct === 'function') this._construct = options.construct\n if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n }\n Stream.call(this, options)\n destroyImpl.construct(this, () => {\n if (this._readableState.needReadable) {\n maybeReadMore(this, this._readableState)\n }\n })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n this.destroy(err)\n}\nReadable.prototype[SymbolAsyncDispose] = function () {\n let error\n if (!this.destroyed) {\n error = this.readableEnded ? null : new AbortError()\n this.destroy(error)\n }\n return new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null))))\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n debug('readableAddChunk', chunk)\n const state = stream._readableState\n let err\n if ((state.state & kObjectMode) === 0) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding\n if (state.encoding !== encoding) {\n if (addToFront && state.encoding) {\n // When unshifting, if state.encoding is set, we have to save\n // the string in the BufferList with the state encoding.\n chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n } else {\n chunk = Buffer.from(chunk, encoding)\n encoding = ''\n }\n }\n } else if (chunk instanceof Buffer) {\n encoding = ''\n } else if (Stream._isUint8Array(chunk)) {\n chunk = Stream._uint8ArrayToBuffer(chunk)\n encoding = ''\n } else if (chunk != null) {\n err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n }\n }\n if (err) {\n errorOrDestroy(stream, err)\n } else if (chunk === null) {\n state.state &= ~kReading\n onEofChunk(stream, state)\n } else if ((state.state & kObjectMode) !== 0 || (chunk && chunk.length > 0)) {\n if (addToFront) {\n if ((state.state & kEndEmitted) !== 0) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n else if (state.destroyed || state.errored) return false\n else addChunk(stream, state, chunk, true)\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n } else if (state.destroyed || state.errored) {\n return false\n } else {\n state.state &= ~kReading\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk)\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n else maybeReadMore(stream, state)\n } else {\n addChunk(stream, state, chunk, false)\n }\n }\n } else if (!addToFront) {\n state.state &= ~kReading\n maybeReadMore(stream, state)\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n // Use the guard to avoid creating `Set()` repeatedly\n // when we have multiple pipes.\n if ((state.state & kMultiAwaitDrain) !== 0) {\n state.awaitDrainWriters.clear()\n } else {\n state.awaitDrainWriters = null\n }\n state.dataEmitted = true\n stream.emit('data', chunk)\n } else {\n // Update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length\n if (addToFront) state.buffer.unshift(chunk)\n else state.buffer.push(chunk)\n if ((state.state & kNeedReadable) !== 0) emitReadable(stream)\n }\n maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n const state = this._readableState\n return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n const decoder = new StringDecoder(enc)\n this._readableState.decoder = decoder\n // If setEncoding(null), decoder.encoding equals utf8.\n this._readableState.encoding = this._readableState.decoder.encoding\n const buffer = this._readableState.buffer\n // Iterate over current buffer to convert already stored Buffers:\n let content = ''\n for (const data of buffer) {\n content += decoder.write(data)\n }\n buffer.clear()\n if (content !== '') buffer.push(content)\n this._readableState.length = content.length\n return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n if (n > MAX_HWM) {\n throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts.\n n--\n n |= n >>> 1\n n |= n >>> 2\n n |= n >>> 4\n n |= n >>> 8\n n |= n >>> 16\n n++\n }\n return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || (state.length === 0 && state.ended)) return 0\n if ((state.state & kObjectMode) !== 0) return 1\n if (NumberIsNaN(n)) {\n // Only flow one buffer at a time.\n if (state.flowing && state.length) return state.buffer.first().length\n return state.length\n }\n if (n <= state.length) return n\n return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n)\n // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n // in this scenario, so we are doing it manually.\n if (n === undefined) {\n n = NaN\n } else if (!NumberIsInteger(n)) {\n n = NumberParseInt(n, 10)\n }\n const state = this._readableState\n const nOrig = n\n\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n if (n !== 0) state.state &= ~kEmittedReadable\n\n // If we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (\n n === 0 &&\n state.needReadable &&\n ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n ) {\n debug('read: emitReadable', state.length, state.ended)\n if (state.length === 0 && state.ended) endReadable(this)\n else emitReadable(this)\n return null\n }\n n = howMuchToRead(n, state)\n\n // If we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this)\n return null\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n let doRead = (state.state & kNeedReadable) !== 0\n debug('need readable', doRead)\n\n // If we currently have less than the highWaterMark, then also read some.\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true\n debug('length less than watermark', doRead)\n }\n\n // However, if we've ended, then there's no point, if we're already\n // reading, then it's unnecessary, if we're constructing we have to wait,\n // and if we're destroyed or errored, then it's not allowed,\n if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n doRead = false\n debug('reading, ended or constructing', doRead)\n } else if (doRead) {\n debug('do read')\n state.state |= kReading | kSync\n // If the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.state |= kNeedReadable\n\n // Call internal read method\n try {\n this._read(state.highWaterMark)\n } catch (err) {\n errorOrDestroy(this, err)\n }\n state.state &= ~kSync\n\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state)\n }\n let ret\n if (n > 0) ret = fromList(n, state)\n else ret = null\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark\n n = 0\n } else {\n state.length -= n\n if (state.multiAwaitDrain) {\n state.awaitDrainWriters.clear()\n } else {\n state.awaitDrainWriters = null\n }\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this)\n }\n if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n state.dataEmitted = true\n this.emit('data', ret)\n }\n return ret\n}\nfunction onEofChunk(stream, state) {\n debug('onEofChunk')\n if (state.ended) return\n if (state.decoder) {\n const chunk = state.decoder.end()\n if (chunk && chunk.length) {\n state.buffer.push(chunk)\n state.length += state.objectMode ? 1 : chunk.length\n }\n }\n state.ended = true\n if (state.sync) {\n // If we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call.\n emitReadable(stream)\n } else {\n // Emit 'readable' now to make sure it gets picked up.\n state.needReadable = false\n state.emittedReadable = true\n // We have to emit readable now that we are EOF. Modules\n // in the ecosystem (e.g. dicer) rely on this event being sync.\n emitReadable_(stream)\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n const state = stream._readableState\n debug('emitReadable', state.needReadable, state.emittedReadable)\n state.needReadable = false\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing)\n state.emittedReadable = true\n process.nextTick(emitReadable_, stream)\n }\n}\nfunction emitReadable_(stream) {\n const state = stream._readableState\n debug('emitReadable_', state.destroyed, state.length, state.ended)\n if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n stream.emit('readable')\n state.emittedReadable = false\n }\n\n // The stream needs another readable event if:\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore && state.constructed) {\n state.readingMore = true\n process.nextTick(maybeReadMore_, stream, state)\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (\n !state.reading &&\n !state.ended &&\n (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n ) {\n const len = state.length\n debug('maybeReadMore read 0')\n stream.read(0)\n if (len === state.length)\n // Didn't get any data, stop spinning.\n break\n }\n state.readingMore = false\n}\n\n// Abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n const src = this\n const state = this._readableState\n if (state.pipes.length === 1) {\n if (!state.multiAwaitDrain) {\n state.multiAwaitDrain = true\n state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n }\n }\n state.pipes.push(dest)\n debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n const endFn = doEnd ? onend : unpipe\n if (state.endEmitted) process.nextTick(endFn)\n else src.once('end', endFn)\n dest.on('unpipe', onunpipe)\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe')\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true\n cleanup()\n }\n }\n }\n function onend() {\n debug('onend')\n dest.end()\n }\n let ondrain\n let cleanedUp = false\n function cleanup() {\n debug('cleanup')\n // Cleanup event handlers once the pipe is broken.\n dest.removeListener('close', onclose)\n dest.removeListener('finish', onfinish)\n if (ondrain) {\n dest.removeListener('drain', ondrain)\n }\n dest.removeListener('error', onerror)\n dest.removeListener('unpipe', onunpipe)\n src.removeListener('end', onend)\n src.removeListener('end', unpipe)\n src.removeListener('data', ondata)\n cleanedUp = true\n\n // If the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n }\n function pause() {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if (!cleanedUp) {\n if (state.pipes.length === 1 && state.pipes[0] === dest) {\n debug('false write response, pause', 0)\n state.awaitDrainWriters = dest\n state.multiAwaitDrain = false\n } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n debug('false write response, pause', state.awaitDrainWriters.size)\n state.awaitDrainWriters.add(dest)\n }\n src.pause()\n }\n if (!ondrain) {\n // When the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n ondrain = pipeOnDrain(src, dest)\n dest.on('drain', ondrain)\n }\n }\n src.on('data', ondata)\n function ondata(chunk) {\n debug('ondata')\n const ret = dest.write(chunk)\n debug('dest.write', ret)\n if (ret === false) {\n pause()\n }\n }\n\n // If the dest has an error, then stop piping into it.\n // However, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er)\n unpipe()\n dest.removeListener('error', onerror)\n if (dest.listenerCount('error') === 0) {\n const s = dest._writableState || dest._readableState\n if (s && !s.errorEmitted) {\n // User incorrectly emitted 'error' directly on the stream.\n errorOrDestroy(dest, er)\n } else {\n dest.emit('error', er)\n }\n }\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror)\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish)\n unpipe()\n }\n dest.once('close', onclose)\n function onfinish() {\n debug('onfinish')\n dest.removeListener('close', onclose)\n unpipe()\n }\n dest.once('finish', onfinish)\n function unpipe() {\n debug('unpipe')\n src.unpipe(dest)\n }\n\n // Tell the dest that it's being piped to.\n dest.emit('pipe', src)\n\n // Start the flow if it hasn't been started already.\n\n if (dest.writableNeedDrain === true) {\n pause()\n } else if (!state.flowing) {\n debug('pipe resume')\n src.resume()\n }\n return dest\n}\nfunction pipeOnDrain(src, dest) {\n return function pipeOnDrainFunctionResult() {\n const state = src._readableState\n\n // `ondrain` will call directly,\n // `this` maybe not a reference to dest,\n // so we use the real dest here.\n if (state.awaitDrainWriters === dest) {\n debug('pipeOnDrain', 1)\n state.awaitDrainWriters = null\n } else if (state.multiAwaitDrain) {\n debug('pipeOnDrain', state.awaitDrainWriters.size)\n state.awaitDrainWriters.delete(dest)\n }\n if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n src.resume()\n }\n }\n}\nReadable.prototype.unpipe = function (dest) {\n const state = this._readableState\n const unpipeInfo = {\n hasUnpiped: false\n }\n\n // If we're not piping anywhere, then do nothing.\n if (state.pipes.length === 0) return this\n if (!dest) {\n // remove all.\n const dests = state.pipes\n state.pipes = []\n this.pause()\n for (let i = 0; i < dests.length; i++)\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n })\n return this\n }\n\n // Try to find the right one.\n const index = ArrayPrototypeIndexOf(state.pipes, dest)\n if (index === -1) return this\n state.pipes.splice(index, 1)\n if (state.pipes.length === 0) this.pause()\n dest.emit('unpipe', this, unpipeInfo)\n return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n const res = Stream.prototype.on.call(this, ev, fn)\n const state = this._readableState\n if (ev === 'data') {\n // Update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0\n\n // Try start flowing on next tick if stream isn't explicitly paused.\n if (state.flowing !== false) this.resume()\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true\n state.flowing = false\n state.emittedReadable = false\n debug('on readable', state.length, state.reading)\n if (state.length) {\n emitReadable(this)\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this)\n }\n }\n }\n return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n const res = Stream.prototype.removeListener.call(this, ev, fn)\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this)\n }\n return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this)\n }\n return res\n}\nfunction updateReadableListening(self) {\n const state = self._readableState\n state.readableListening = self.listenerCount('readable') > 0\n if (state.resumeScheduled && state[kPaused] === false) {\n // Flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true\n\n // Crude way to check if we should resume.\n } else if (self.listenerCount('data') > 0) {\n self.resume()\n } else if (!state.readableListening) {\n state.flowing = null\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0')\n self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n const state = this._readableState\n if (!state.flowing) {\n debug('resume')\n // We flow only if there is no one listening\n // for readable, but we still have to call\n // resume().\n state.flowing = !state.readableListening\n resume(this, state)\n }\n state[kPaused] = false\n return this\n}\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true\n process.nextTick(resume_, stream, state)\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading)\n if (!state.reading) {\n stream.read(0)\n }\n state.resumeScheduled = false\n stream.emit('resume')\n flow(stream)\n if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing)\n if (this._readableState.flowing !== false) {\n debug('pause')\n this._readableState.flowing = false\n this.emit('pause')\n }\n this._readableState[kPaused] = true\n return this\n}\nfunction flow(stream) {\n const state = stream._readableState\n debug('flow', state.flowing)\n while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n let paused = false\n\n // TODO (ronag): Should this.destroy(err) emit\n // 'error' on the wrapped stream? Would require\n // a static factory method, e.g. Readable.wrap(stream).\n\n stream.on('data', (chunk) => {\n if (!this.push(chunk) && stream.pause) {\n paused = true\n stream.pause()\n }\n })\n stream.on('end', () => {\n this.push(null)\n })\n stream.on('error', (err) => {\n errorOrDestroy(this, err)\n })\n stream.on('close', () => {\n this.destroy()\n })\n stream.on('destroy', () => {\n this.destroy()\n })\n this._read = () => {\n if (paused && stream.resume) {\n paused = false\n stream.resume()\n }\n }\n\n // Proxy all the other methods. Important when wrapping filters and duplexes.\n const streamKeys = ObjectKeys(stream)\n for (let j = 1; j < streamKeys.length; j++) {\n const i = streamKeys[j]\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = stream[i].bind(stream)\n }\n }\n return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n if (options !== undefined) {\n validateObject(options, 'options')\n }\n return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n if (typeof stream.read !== 'function') {\n stream = Readable.wrap(stream, {\n objectMode: true\n })\n }\n const iter = createAsyncIterator(stream, options)\n iter.stream = stream\n return iter\n}\nasync function* createAsyncIterator(stream, options) {\n let callback = nop\n function next(resolve) {\n if (this === stream) {\n callback()\n callback = nop\n } else {\n callback = resolve\n }\n }\n stream.on('readable', next)\n let error\n const cleanup = eos(\n stream,\n {\n writable: false\n },\n (err) => {\n error = err ? aggregateTwoErrors(error, err) : null\n callback()\n callback = nop\n }\n )\n try {\n while (true) {\n const chunk = stream.destroyed ? null : stream.read()\n if (chunk !== null) {\n yield chunk\n } else if (error) {\n throw error\n } else if (error === null) {\n return\n } else {\n await new Promise(next)\n }\n }\n } catch (err) {\n error = aggregateTwoErrors(error, err)\n throw error\n } finally {\n if (\n (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n (error === undefined || stream._readableState.autoDestroy)\n ) {\n destroyImpl.destroyer(stream, null)\n } else {\n stream.off('readable', next)\n cleanup()\n }\n }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n readable: {\n __proto__: null,\n get() {\n const r = this._readableState\n // r.readable === false means that this is part of a Duplex stream\n // where the readable side was disabled upon construction.\n // Compat. The user might manually disable readable side through\n // deprecated setter.\n return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n },\n set(val) {\n // Backwards compat.\n if (this._readableState) {\n this._readableState.readable = !!val\n }\n }\n },\n readableDidRead: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.dataEmitted\n }\n },\n readableAborted: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return !!(\n this._readableState.readable !== false &&\n (this._readableState.destroyed || this._readableState.errored) &&\n !this._readableState.endEmitted\n )\n }\n },\n readableHighWaterMark: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark\n }\n },\n readableBuffer: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState && this._readableState.buffer\n }\n },\n readableFlowing: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.flowing\n },\n set: function (state) {\n if (this._readableState) {\n this._readableState.flowing = state\n }\n }\n },\n readableLength: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState.length\n }\n },\n readableObjectMode: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.objectMode : false\n }\n },\n readableEncoding: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.encoding : null\n }\n },\n errored: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.errored : null\n }\n },\n closed: {\n __proto__: null,\n get() {\n return this._readableState ? this._readableState.closed : false\n }\n },\n destroyed: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.destroyed : false\n },\n set(value) {\n // We ignore the value if the stream\n // has not been initialized yet.\n if (!this._readableState) {\n return\n }\n\n // Backward compatibility, the user is explicitly\n // managing destroyed.\n this._readableState.destroyed = value\n }\n },\n readableEnded: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.endEmitted : false\n }\n }\n})\nObjectDefineProperties(ReadableState.prototype, {\n // Legacy getter for `pipesCount`.\n pipesCount: {\n __proto__: null,\n get() {\n return this.pipes.length\n }\n },\n // Legacy property for `paused`.\n paused: {\n __proto__: null,\n get() {\n return this[kPaused] !== false\n },\n set(value) {\n this[kPaused] = !!value\n }\n }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered.\n if (state.length === 0) return null\n let ret\n if (state.objectMode) ret = state.buffer.shift()\n else if (!n || n >= state.length) {\n // Read it all, truncate the list.\n if (state.decoder) ret = state.buffer.join('')\n else if (state.buffer.length === 1) ret = state.buffer.first()\n else ret = state.buffer.concat(state.length)\n state.buffer.clear()\n } else {\n // read part of list.\n ret = state.buffer.consume(n, state.decoder)\n }\n return ret\n}\nfunction endReadable(stream) {\n const state = stream._readableState\n debug('endReadable', state.endEmitted)\n if (!state.endEmitted) {\n state.ended = true\n process.nextTick(endReadableNT, state, stream)\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length)\n\n // Check that we didn't get one last unshift.\n if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n state.endEmitted = true\n stream.emit('end')\n if (stream.writable && stream.allowHalfOpen === false) {\n process.nextTick(endWritableNT, stream)\n } else if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well.\n const wState = stream._writableState\n const autoDestroy =\n !wState ||\n (wState.autoDestroy &&\n // We don't expect the writable to ever 'finish'\n // if writable is explicitly set to false.\n (wState.finished || wState.writable === false))\n if (autoDestroy) {\n stream.destroy()\n }\n }\n }\n}\nfunction endWritableNT(stream) {\n const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n if (writable) {\n stream.end()\n }\n}\nReadable.from = function (iterable, opts) {\n return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n var _ref, _src$readableObjectMo\n return new Readable({\n objectMode:\n (_ref =\n (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n ? _src$readableObjectMo\n : src.objectMode) !== null && _ref !== undefined\n ? _ref\n : true,\n ...options,\n destroy(err, callback) {\n destroyImpl.destroyer(src, err)\n callback(err)\n }\n }).wrap(src)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n;('use strict')\nconst {\n ArrayPrototypeSlice,\n Error,\n FunctionPrototypeSymbolHasInstance,\n ObjectDefineProperty,\n ObjectDefineProperties,\n ObjectSetPrototypeOf,\n StringPrototypeToLowerCase,\n Symbol,\n SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED,\n ERR_STREAM_ALREADY_FINISHED,\n ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n // Object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!(options && options.objectMode)\n if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n // The point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write().\n this.highWaterMark = options\n ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n : getDefaultHighWaterMark(false)\n\n // if _final has been called.\n this.finalCalled = false\n\n // drain event flag.\n this.needDrain = false\n // At the start of calling end()\n this.ending = false\n // When end() has been called, and returned.\n this.ended = false\n // When 'finish' is emitted.\n this.finished = false\n\n // Has it been destroyed\n this.destroyed = false\n\n // Should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n const noDecode = !!(options && options.decodeStrings === false)\n this.decodeStrings = !noDecode\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n // Not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0\n\n // A flag to see when we're in the middle of a write.\n this.writing = false\n\n // When true all writes will be buffered until .uncork() call.\n this.corked = 0\n\n // A flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true\n\n // A flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false\n\n // The callback that's passed to _write(chunk, cb).\n this.onwrite = onwrite.bind(undefined, stream)\n\n // The callback that the user supplies to write(chunk, encoding, cb).\n this.writecb = null\n\n // The amount that is being written when _write is called.\n this.writelen = 0\n\n // Storage for data passed to the afterWrite() callback in case of\n // synchronous _write() completion.\n this.afterWriteTickInfo = null\n resetBuffer(this)\n\n // Number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted.\n this.pendingcb = 0\n\n // Stream is still being constructed and cannot be\n // destroyed until construction finished or failed.\n // Async construction is opt in, therefore we start as\n // constructed.\n this.constructed = true\n\n // Emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams.\n this.prefinished = false\n\n // True if the error was already emitted and should not be thrown again.\n this.errorEmitted = false\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = !options || options.emitClose !== false\n\n // Should .destroy() be called after 'finish' (and potentially 'end').\n this.autoDestroy = !options || options.autoDestroy !== false\n\n // Indicates whether the stream has errored. When true all write() calls\n // should return false. This is needed since when autoDestroy\n // is disabled we need a way to tell whether the stream has failed.\n this.errored = null\n\n // Indicates whether the stream has finished destroying.\n this.closed = false\n\n // True if close has been emitted or would have been emitted\n // depending on emitClose.\n this.closeEmitted = false\n this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n state.buffered = []\n state.bufferedIndex = 0\n state.allBuffers = true\n state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n __proto__: null,\n get() {\n return this.buffered.length - this.bufferedIndex\n }\n})\nfunction Writable(options) {\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5.\n const isDuplex = this instanceof require('./duplex')\n if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n this._writableState = new WritableState(options, this, isDuplex)\n if (options) {\n if (typeof options.write === 'function') this._write = options.write\n if (typeof options.writev === 'function') this._writev = options.writev\n if (typeof options.destroy === 'function') this._destroy = options.destroy\n if (typeof options.final === 'function') this._final = options.final\n if (typeof options.construct === 'function') this._construct = options.construct\n if (options.signal) addAbortSignal(options.signal, this)\n }\n Stream.call(this, options)\n destroyImpl.construct(this, () => {\n const state = this._writableState\n if (!state.writing) {\n clearBuffer(this, state)\n }\n finishMaybe(this, state)\n })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n __proto__: null,\n value: function (object) {\n if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n if (this !== Writable) return false\n return object && object._writableState instanceof WritableState\n }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n const state = stream._writableState\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = state.defaultEncoding\n } else {\n if (!encoding) encoding = state.defaultEncoding\n else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n if (typeof cb !== 'function') cb = nop\n }\n if (chunk === null) {\n throw new ERR_STREAM_NULL_VALUES()\n } else if (!state.objectMode) {\n if (typeof chunk === 'string') {\n if (state.decodeStrings !== false) {\n chunk = Buffer.from(chunk, encoding)\n encoding = 'buffer'\n }\n } else if (chunk instanceof Buffer) {\n encoding = 'buffer'\n } else if (Stream._isUint8Array(chunk)) {\n chunk = Stream._uint8ArrayToBuffer(chunk)\n encoding = 'buffer'\n } else {\n throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n }\n }\n let err\n if (state.ending) {\n err = new ERR_STREAM_WRITE_AFTER_END()\n } else if (state.destroyed) {\n err = new ERR_STREAM_DESTROYED('write')\n }\n if (err) {\n process.nextTick(cb, err)\n errorOrDestroy(stream, err, true)\n return err\n }\n state.pendingcb++\n return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n const state = this._writableState\n if (state.corked) {\n state.corked--\n if (!state.writing) clearBuffer(this, state)\n }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n this._writableState.defaultEncoding = encoding\n return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n const len = state.objectMode ? 1 : chunk.length\n state.length += len\n\n // stream._write resets state.length\n const ret = state.length < state.highWaterMark\n // We must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true\n if (state.writing || state.corked || state.errored || !state.constructed) {\n state.buffered.push({\n chunk,\n encoding,\n callback\n })\n if (state.allBuffers && encoding !== 'buffer') {\n state.allBuffers = false\n }\n if (state.allNoop && callback !== nop) {\n state.allNoop = false\n }\n } else {\n state.writelen = len\n state.writecb = callback\n state.writing = true\n state.sync = true\n stream._write(chunk, encoding, state.onwrite)\n state.sync = false\n }\n\n // Return false if errored or destroyed in order to break\n // any synchronous while(stream.write(data)) loops.\n return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len\n state.writecb = cb\n state.writing = true\n state.sync = true\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n else if (writev) stream._writev(chunk, state.onwrite)\n else stream._write(chunk, encoding, state.onwrite)\n state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n --state.pendingcb\n cb(er)\n // Ensure callbacks are invoked even when autoDestroy is\n // not enabled. Passing `er` here doesn't make sense since\n // it's related to one specific write, not to the buffered\n // writes.\n errorBuffer(state)\n // This can emit error, but error must always follow cb.\n errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n const state = stream._writableState\n const sync = state.sync\n const cb = state.writecb\n if (typeof cb !== 'function') {\n errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n return\n }\n state.writing = false\n state.writecb = null\n state.length -= state.writelen\n state.writelen = 0\n if (er) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n er.stack // eslint-disable-line no-unused-expressions\n\n if (!state.errored) {\n state.errored = er\n }\n\n // In case of duplex streams we need to notify the readable side of the\n // error.\n if (stream._readableState && !stream._readableState.errored) {\n stream._readableState.errored = er\n }\n if (sync) {\n process.nextTick(onwriteError, stream, state, er, cb)\n } else {\n onwriteError(stream, state, er, cb)\n }\n } else {\n if (state.buffered.length > state.bufferedIndex) {\n clearBuffer(stream, state)\n }\n if (sync) {\n // It is a common case that the callback passed to .write() is always\n // the same. In that case, we do not schedule a new nextTick(), but\n // rather just increase a counter, to improve performance and avoid\n // memory allocations.\n if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n state.afterWriteTickInfo.count++\n } else {\n state.afterWriteTickInfo = {\n count: 1,\n cb,\n stream,\n state\n }\n process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n }\n } else {\n afterWrite(stream, state, 1, cb)\n }\n }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n state.afterWriteTickInfo = null\n return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n if (needDrain) {\n state.needDrain = false\n stream.emit('drain')\n }\n while (count-- > 0) {\n state.pendingcb--\n cb()\n }\n if (state.destroyed) {\n errorBuffer(state)\n }\n finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n if (state.writing) {\n return\n }\n for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n var _state$errored\n const { chunk, callback } = state.buffered[n]\n const len = state.objectMode ? 1 : chunk.length\n state.length -= len\n callback(\n (_state$errored = state.errored) !== null && _state$errored !== undefined\n ? _state$errored\n : new ERR_STREAM_DESTROYED('write')\n )\n }\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n var _state$errored2\n onfinishCallbacks[i](\n (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n ? _state$errored2\n : new ERR_STREAM_DESTROYED('end')\n )\n }\n resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n return\n }\n const { buffered, bufferedIndex, objectMode } = state\n const bufferedLength = buffered.length - bufferedIndex\n if (!bufferedLength) {\n return\n }\n let i = bufferedIndex\n state.bufferProcessing = true\n if (bufferedLength > 1 && stream._writev) {\n state.pendingcb -= bufferedLength - 1\n const callback = state.allNoop\n ? nop\n : (err) => {\n for (let n = i; n < buffered.length; ++n) {\n buffered[n].callback(err)\n }\n }\n // Make a copy of `buffered` if it's going to be used by `callback` above,\n // since `doWrite` will mutate the array.\n const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n chunks.allBuffers = state.allBuffers\n doWrite(stream, state, true, state.length, chunks, '', callback)\n resetBuffer(state)\n } else {\n do {\n const { chunk, encoding, callback } = buffered[i]\n buffered[i++] = null\n const len = objectMode ? 1 : chunk.length\n doWrite(stream, state, false, len, chunk, encoding, callback)\n } while (i < buffered.length && !state.writing)\n if (i === buffered.length) {\n resetBuffer(state)\n } else if (i > 256) {\n buffered.splice(0, i)\n state.bufferedIndex = 0\n } else {\n state.bufferedIndex = i\n }\n }\n state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n if (this._writev) {\n this._writev(\n [\n {\n chunk,\n encoding\n }\n ],\n cb\n )\n } else {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n const state = this._writableState\n if (typeof chunk === 'function') {\n cb = chunk\n chunk = null\n encoding = null\n } else if (typeof encoding === 'function') {\n cb = encoding\n encoding = null\n }\n let err\n if (chunk !== null && chunk !== undefined) {\n const ret = _write(this, chunk, encoding)\n if (ret instanceof Error) {\n err = ret\n }\n }\n\n // .end() fully uncorks.\n if (state.corked) {\n state.corked = 1\n this.uncork()\n }\n if (err) {\n // Do nothing...\n } else if (!state.errored && !state.ending) {\n // This is forgiving in terms of unnecessary calls to end() and can hide\n // logic errors. However, usually such errors are harmless and causing a\n // hard error can be disproportionately destructive. It is not always\n // trivial for the user to determine whether end() needs to be called\n // or not.\n\n state.ending = true\n finishMaybe(this, state, true)\n state.ended = true\n } else if (state.finished) {\n err = new ERR_STREAM_ALREADY_FINISHED('end')\n } else if (state.destroyed) {\n err = new ERR_STREAM_DESTROYED('end')\n }\n if (typeof cb === 'function') {\n if (err || state.finished) {\n process.nextTick(cb, err)\n } else {\n state[kOnFinished].push(cb)\n }\n }\n return this\n}\nfunction needFinish(state) {\n return (\n state.ending &&\n !state.destroyed &&\n state.constructed &&\n state.length === 0 &&\n !state.errored &&\n state.buffered.length === 0 &&\n !state.finished &&\n !state.writing &&\n !state.errorEmitted &&\n !state.closeEmitted\n )\n}\nfunction callFinal(stream, state) {\n let called = false\n function onFinish(err) {\n if (called) {\n errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n return\n }\n called = true\n state.pendingcb--\n if (err) {\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n onfinishCallbacks[i](err)\n }\n errorOrDestroy(stream, err, state.sync)\n } else if (needFinish(state)) {\n state.prefinished = true\n stream.emit('prefinish')\n // Backwards compat. Don't check state.sync here.\n // Some streams assume 'finish' will be emitted\n // asynchronously relative to _final callback.\n state.pendingcb++\n process.nextTick(finish, stream, state)\n }\n }\n state.sync = true\n state.pendingcb++\n try {\n stream._final(onFinish)\n } catch (err) {\n onFinish(err)\n }\n state.sync = false\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.finalCalled = true\n callFinal(stream, state)\n } else {\n state.prefinished = true\n stream.emit('prefinish')\n }\n }\n}\nfunction finishMaybe(stream, state, sync) {\n if (needFinish(state)) {\n prefinish(stream, state)\n if (state.pendingcb === 0) {\n if (sync) {\n state.pendingcb++\n process.nextTick(\n (stream, state) => {\n if (needFinish(state)) {\n finish(stream, state)\n } else {\n state.pendingcb--\n }\n },\n stream,\n state\n )\n } else if (needFinish(state)) {\n state.pendingcb++\n finish(stream, state)\n }\n }\n }\n}\nfunction finish(stream, state) {\n state.pendingcb--\n state.finished = true\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n onfinishCallbacks[i]()\n }\n stream.emit('finish')\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well.\n const rState = stream._readableState\n const autoDestroy =\n !rState ||\n (rState.autoDestroy &&\n // We don't expect the readable to ever 'end'\n // if readable is explicitly set to false.\n (rState.endEmitted || rState.readable === false))\n if (autoDestroy) {\n stream.destroy()\n }\n }\n}\nObjectDefineProperties(Writable.prototype, {\n closed: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.closed : false\n }\n },\n destroyed: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.destroyed : false\n },\n set(value) {\n // Backward compatibility, the user is explicitly managing destroyed.\n if (this._writableState) {\n this._writableState.destroyed = value\n }\n }\n },\n writable: {\n __proto__: null,\n get() {\n const w = this._writableState\n // w.writable === false means that this is part of a Duplex stream\n // where the writable side was disabled upon construction.\n // Compat. The user might manually disable writable side through\n // deprecated setter.\n return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n },\n set(val) {\n // Backwards compatible.\n if (this._writableState) {\n this._writableState.writable = !!val\n }\n }\n },\n writableFinished: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.finished : false\n }\n },\n writableObjectMode: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.objectMode : false\n }\n },\n writableBuffer: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.getBuffer()\n }\n },\n writableEnded: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.ending : false\n }\n },\n writableNeedDrain: {\n __proto__: null,\n get() {\n const wState = this._writableState\n if (!wState) return false\n return !wState.destroyed && !wState.ending && wState.needDrain\n }\n },\n writableHighWaterMark: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.highWaterMark\n }\n },\n writableCorked: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.corked : 0\n }\n },\n writableLength: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.length\n }\n },\n errored: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._writableState ? this._writableState.errored : null\n }\n },\n writableAborted: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return !!(\n this._writableState.writable !== false &&\n (this._writableState.destroyed || this._writableState.errored) &&\n !this._writableState.finished\n )\n }\n }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n const state = this._writableState\n\n // Invoke pending callbacks.\n if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n process.nextTick(errorBuffer, state)\n }\n destroy.call(this, err, cb)\n return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n isReadable,\n isWritable,\n isIterable,\n isNodeStream,\n isReadableNodeStream,\n isWritableNodeStream,\n isDuplexNodeStream,\n isReadableStream,\n isWritableStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n AbortError,\n codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n typeof Blob !== 'undefined'\n ? function isBlob(b) {\n return b instanceof Blob\n }\n : function isBlob(b) {\n return false\n }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n constructor(options) {\n super(options)\n\n // https://github.com/nodejs/node/pull/34385\n\n if ((options === null || options === undefined ? undefined : options.readable) === false) {\n this._readableState.readable = false\n this._readableState.ended = true\n this._readableState.endEmitted = true\n }\n if ((options === null || options === undefined ? undefined : options.writable) === false) {\n this._writableState.writable = false\n this._writableState.ending = true\n this._writableState.ended = true\n this._writableState.finished = true\n }\n }\n}\nmodule.exports = function duplexify(body, name) {\n if (isDuplexNodeStream(body)) {\n return body\n }\n if (isReadableNodeStream(body)) {\n return _duplexify({\n readable: body\n })\n }\n if (isWritableNodeStream(body)) {\n return _duplexify({\n writable: body\n })\n }\n if (isNodeStream(body)) {\n return _duplexify({\n writable: false,\n readable: false\n })\n }\n if (isReadableStream(body)) {\n return _duplexify({\n readable: Readable.fromWeb(body)\n })\n }\n if (isWritableStream(body)) {\n return _duplexify({\n writable: Writable.fromWeb(body)\n })\n }\n if (typeof body === 'function') {\n const { value, write, final, destroy } = fromAsyncGen(body)\n if (isIterable(value)) {\n return from(Duplexify, value, {\n // TODO (ronag): highWaterMark?\n objectMode: true,\n write,\n final,\n destroy\n })\n }\n const then = value === null || value === undefined ? undefined : value.then\n if (typeof then === 'function') {\n let d\n const promise = FunctionPrototypeCall(\n then,\n value,\n (val) => {\n if (val != null) {\n throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n }\n },\n (err) => {\n destroyer(d, err)\n }\n )\n return (d = new Duplexify({\n // TODO (ronag): highWaterMark?\n objectMode: true,\n readable: false,\n write,\n final(cb) {\n final(async () => {\n try {\n await promise\n process.nextTick(cb, null)\n } catch (err) {\n process.nextTick(cb, err)\n }\n })\n },\n destroy\n }))\n }\n throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n }\n if (isBlob(body)) {\n return duplexify(body.arrayBuffer())\n }\n if (isIterable(body)) {\n return from(Duplexify, body, {\n // TODO (ronag): highWaterMark?\n objectMode: true,\n writable: false\n })\n }\n if (\n isReadableStream(body === null || body === undefined ? undefined : body.readable) &&\n isWritableStream(body === null || body === undefined ? undefined : body.writable)\n ) {\n return Duplexify.fromWeb(body)\n }\n if (\n typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n ) {\n const readable =\n body !== null && body !== undefined && body.readable\n ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n ? body === null || body === undefined\n ? undefined\n : body.readable\n : duplexify(body.readable)\n : undefined\n const writable =\n body !== null && body !== undefined && body.writable\n ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n ? body === null || body === undefined\n ? undefined\n : body.writable\n : duplexify(body.writable)\n : undefined\n return _duplexify({\n readable,\n writable\n })\n }\n const then = body === null || body === undefined ? undefined : body.then\n if (typeof then === 'function') {\n let d\n FunctionPrototypeCall(\n then,\n body,\n (val) => {\n if (val != null) {\n d.push(val)\n }\n d.push(null)\n },\n (err) => {\n destroyer(d, err)\n }\n )\n return (d = new Duplexify({\n objectMode: true,\n writable: false,\n read() {}\n }))\n }\n throw new ERR_INVALID_ARG_TYPE(\n name,\n [\n 'Blob',\n 'ReadableStream',\n 'WritableStream',\n 'Stream',\n 'Iterable',\n 'AsyncIterable',\n 'Function',\n '{ readable, writable } pair',\n 'Promise'\n ],\n body\n )\n}\nfunction fromAsyncGen(fn) {\n let { promise, resolve } = createDeferredPromise()\n const ac = new AbortController()\n const signal = ac.signal\n const value = fn(\n (async function* () {\n while (true) {\n const _promise = promise\n promise = null\n const { chunk, done, cb } = await _promise\n process.nextTick(cb)\n if (done) return\n if (signal.aborted)\n throw new AbortError(undefined, {\n cause: signal.reason\n })\n ;({ promise, resolve } = createDeferredPromise())\n yield chunk\n }\n })(),\n {\n signal\n }\n )\n return {\n value,\n write(chunk, encoding, cb) {\n const _resolve = resolve\n resolve = null\n _resolve({\n chunk,\n done: false,\n cb\n })\n },\n final(cb) {\n const _resolve = resolve\n resolve = null\n _resolve({\n done: true,\n cb\n })\n },\n destroy(err, cb) {\n ac.abort()\n cb(err)\n }\n }\n}\nfunction _duplexify(pair) {\n const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n const w = pair.writable\n let readable = !!isReadable(r)\n let writable = !!isWritable(w)\n let ondrain\n let onfinish\n let onreadable\n let onclose\n let d\n function onfinished(err) {\n const cb = onclose\n onclose = null\n if (cb) {\n cb(err)\n } else if (err) {\n d.destroy(err)\n }\n }\n\n // TODO(ronag): Avoid double buffering.\n // Implement Writable/Readable/Duplex traits.\n // See, https://github.com/nodejs/node/pull/33515.\n d = new Duplexify({\n // TODO (ronag): highWaterMark?\n readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n readable,\n writable\n })\n if (writable) {\n eos(w, (err) => {\n writable = false\n if (err) {\n destroyer(r, err)\n }\n onfinished(err)\n })\n d._write = function (chunk, encoding, callback) {\n if (w.write(chunk, encoding)) {\n callback()\n } else {\n ondrain = callback\n }\n }\n d._final = function (callback) {\n w.end()\n onfinish = callback\n }\n w.on('drain', function () {\n if (ondrain) {\n const cb = ondrain\n ondrain = null\n cb()\n }\n })\n w.on('finish', function () {\n if (onfinish) {\n const cb = onfinish\n onfinish = null\n cb()\n }\n })\n }\n if (readable) {\n eos(r, (err) => {\n readable = false\n if (err) {\n destroyer(r, err)\n }\n onfinished(err)\n })\n r.on('readable', function () {\n if (onreadable) {\n const cb = onreadable\n onreadable = null\n cb()\n }\n })\n r.on('end', function () {\n d.push(null)\n })\n d._read = function () {\n while (true) {\n const buf = r.read()\n if (buf === null) {\n onreadable = d._read\n return\n }\n if (!d.push(buf)) {\n return\n }\n }\n }\n }\n d._destroy = function (err, callback) {\n if (!err && onclose !== null) {\n err = new AbortError()\n }\n onreadable = null\n ondrain = null\n onfinish = null\n if (onclose === null) {\n callback(err)\n } else {\n onclose = callback\n destroyer(w, err)\n destroyer(r, err)\n }\n }\n return d\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n ObjectDefineProperties,\n ObjectGetOwnPropertyDescriptor,\n ObjectKeys,\n ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n const keys = ObjectKeys(Writable.prototype)\n // Allow the keys array to be GC'ed.\n for (let i = 0; i < keys.length; i++) {\n const method = keys[i]\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options)\n Readable.call(this, options)\n Writable.call(this, options)\n if (options) {\n this.allowHalfOpen = options.allowHalfOpen !== false\n if (options.readable === false) {\n this._readableState.readable = false\n this._readableState.ended = true\n this._readableState.endEmitted = true\n }\n if (options.writable === false) {\n this._writableState.writable = false\n this._writableState.ending = true\n this._writableState.ended = true\n this._writableState.finished = true\n }\n } else {\n this.allowHalfOpen = true\n }\n}\nObjectDefineProperties(Duplex.prototype, {\n writable: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n },\n writableHighWaterMark: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n },\n writableObjectMode: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n },\n writableBuffer: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n },\n writableLength: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n },\n writableFinished: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n },\n writableCorked: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n },\n writableEnded: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n },\n writableNeedDrain: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n },\n destroyed: {\n __proto__: null,\n get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false\n }\n return this._readableState.destroyed && this._writableState.destroyed\n },\n set(value) {\n // Backward compatibility, the user is explicitly\n // managing destroyed.\n if (this._readableState && this._writableState) {\n this._readableState.destroyed = value\n this._writableState.destroyed = value\n }\n }\n }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n if (!duplexify) {\n duplexify = require('./duplexify')\n }\n return duplexify(body, 'body')\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options)\n\n // TODO (ronag): This should preferably always be\n // applied but would be semver-major. Or even better;\n // make Transform a Readable with the Writable interface.\n const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n if (readableHighWaterMark === 0) {\n // A Duplex will buffer both on the writable and readable side while\n // a Transform just wants to buffer hwm number of elements. To avoid\n // buffering twice we disable buffering on the writable side.\n options = {\n ...options,\n highWaterMark: null,\n readableHighWaterMark,\n // TODO (ronag): 0 is not optimal since we have\n // a \"bug\" where we check needDrain before calling _write and not after.\n // Refs: https://github.com/nodejs/node/pull/32887\n // Refs: https://github.com/nodejs/node/pull/35941\n writableHighWaterMark: options.writableHighWaterMark || 0\n }\n }\n Duplex.call(this, options)\n\n // We have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false\n this[kCallback] = null\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform\n if (typeof options.flush === 'function') this._flush = options.flush\n }\n\n // When the writable side finishes, then flush out anything remaining.\n // Backwards compat. Some Transform streams incorrectly implement _final\n // instead of or in addition to _flush. By using 'prefinish' instead of\n // implementing _final we continue supporting this unfortunate use case.\n this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n if (typeof this._flush === 'function' && !this.destroyed) {\n this._flush((er, data) => {\n if (er) {\n if (cb) {\n cb(er)\n } else {\n this.destroy(er)\n }\n return\n }\n if (data != null) {\n this.push(data)\n }\n this.push(null)\n if (cb) {\n cb()\n }\n })\n } else {\n this.push(null)\n if (cb) {\n cb()\n }\n }\n}\nfunction prefinish() {\n if (this._final !== final) {\n final.call(this)\n }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n const rState = this._readableState\n const wState = this._writableState\n const length = rState.length\n this._transform(chunk, encoding, (err, val) => {\n if (err) {\n callback(err)\n return\n }\n if (val != null) {\n this.push(val)\n }\n if (\n wState.ended ||\n // Backwards compat.\n length === rState.length ||\n // Backwards compat.\n rState.length < rState.highWaterMark\n ) {\n callback()\n } else {\n this[kCallback] = callback\n }\n })\n}\nTransform.prototype._read = function () {\n if (this[kCallback]) {\n const callback = this[kCallback]\n this[kCallback] = null\n callback()\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options)\n Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk)\n}\n","/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator, SymbolDispose } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n aggregateTwoErrors,\n codes: {\n ERR_INVALID_ARG_TYPE,\n ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED,\n ERR_STREAM_PREMATURE_CLOSE\n },\n AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n isIterable,\n isReadable,\n isReadableNodeStream,\n isNodeStream,\n isTransformStream,\n isWebStream,\n isReadableStream,\n isReadableFinished\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nlet addAbortListener\nfunction destroyer(stream, reading, writing) {\n let finished = false\n stream.on('close', () => {\n finished = true\n })\n const cleanup = eos(\n stream,\n {\n readable: reading,\n writable: writing\n },\n (err) => {\n finished = !err\n }\n )\n return {\n destroy: (err) => {\n if (finished) return\n finished = true\n destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n },\n cleanup\n }\n}\nfunction popCallback(streams) {\n // Streams should never be an empty array. It should always contain at least\n // a single stream. Therefore optimize for the average case instead of\n // checking for length === 0 as well.\n validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n if (isIterable(val)) {\n return val\n } else if (isReadableNodeStream(val)) {\n // Legacy streams are not Iterable.\n return fromReadable(val)\n }\n throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n if (!Readable) {\n Readable = require('./readable')\n }\n yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n let error\n let onresolve = null\n const resume = (err) => {\n if (err) {\n error = err\n }\n if (onresolve) {\n const callback = onresolve\n onresolve = null\n callback()\n }\n }\n const wait = () =>\n new Promise((resolve, reject) => {\n if (error) {\n reject(error)\n } else {\n onresolve = () => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n }\n }\n })\n writable.on('drain', resume)\n const cleanup = eos(\n writable,\n {\n readable: false\n },\n resume\n )\n try {\n if (writable.writableNeedDrain) {\n await wait()\n }\n for await (const chunk of iterable) {\n if (!writable.write(chunk)) {\n await wait()\n }\n }\n if (end) {\n writable.end()\n await wait()\n }\n finish()\n } catch (err) {\n finish(error !== err ? aggregateTwoErrors(error, err) : err)\n } finally {\n cleanup()\n writable.off('drain', resume)\n }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n if (isTransformStream(writable)) {\n writable = writable.writable\n }\n // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n const writer = writable.getWriter()\n try {\n for await (const chunk of readable) {\n await writer.ready\n writer.write(chunk).catch(() => {})\n }\n await writer.ready\n if (end) {\n await writer.close()\n }\n finish()\n } catch (err) {\n try {\n await writer.abort(err)\n finish(err)\n } catch (err) {\n finish(err)\n }\n }\n}\nfunction pipeline(...streams) {\n return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n if (streams.length === 1 && ArrayIsArray(streams[0])) {\n streams = streams[0]\n }\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams')\n }\n const ac = new AbortController()\n const signal = ac.signal\n const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n // Need to cleanup event listeners if last stream is readable\n // https://github.com/nodejs/node/issues/35452\n const lastStreamCleanup = []\n validateAbortSignal(outerSignal, 'options.signal')\n function abort() {\n finishImpl(new AbortError())\n }\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n let disposable\n if (outerSignal) {\n disposable = addAbortListener(outerSignal, abort)\n }\n let error\n let value\n const destroys = []\n let finishCount = 0\n function finish(err) {\n finishImpl(err, --finishCount === 0)\n }\n function finishImpl(err, final) {\n var _disposable\n if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n error = err\n }\n if (!error && !final) {\n return\n }\n while (destroys.length) {\n destroys.shift()(error)\n }\n ;(_disposable = disposable) === null || _disposable === undefined ? undefined : _disposable[SymbolDispose]()\n ac.abort()\n if (final) {\n if (!error) {\n lastStreamCleanup.forEach((fn) => fn())\n }\n process.nextTick(callback, error, value)\n }\n }\n let ret\n for (let i = 0; i < streams.length; i++) {\n const stream = streams[i]\n const reading = i < streams.length - 1\n const writing = i > 0\n const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n const isLastStream = i === streams.length - 1\n if (isNodeStream(stream)) {\n if (end) {\n const { destroy, cleanup } = destroyer(stream, reading, writing)\n destroys.push(destroy)\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n }\n\n // Catch stream errors that occur after pipe/pump has completed.\n function onError(err) {\n if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n finish(err)\n }\n }\n stream.on('error', onError)\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(() => {\n stream.removeListener('error', onError)\n })\n }\n }\n if (i === 0) {\n if (typeof stream === 'function') {\n ret = stream({\n signal\n })\n if (!isIterable(ret)) {\n throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n }\n } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n ret = stream\n } else {\n ret = Duplex.from(stream)\n }\n } else if (typeof stream === 'function') {\n if (isTransformStream(ret)) {\n var _ret\n ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n } else {\n ret = makeAsyncIterable(ret)\n }\n ret = stream(ret, {\n signal\n })\n if (reading) {\n if (!isIterable(ret, true)) {\n throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n }\n } else {\n var _ret2\n if (!PassThrough) {\n PassThrough = require('./passthrough')\n }\n\n // If the last argument to pipeline is not a stream\n // we must create a proxy stream so that pipeline(...)\n // always returns a stream which can be further\n // composed through `.pipe(stream)`.\n\n const pt = new PassThrough({\n objectMode: true\n })\n\n // Handle Promises/A+ spec, `then` could be a getter that throws on\n // second use.\n const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n if (typeof then === 'function') {\n finishCount++\n then.call(\n ret,\n (val) => {\n value = val\n if (val != null) {\n pt.write(val)\n }\n if (end) {\n pt.end()\n }\n process.nextTick(finish)\n },\n (err) => {\n pt.destroy(err)\n process.nextTick(finish, err)\n }\n )\n } else if (isIterable(ret, true)) {\n finishCount++\n pumpToNode(ret, pt, finish, {\n end\n })\n } else if (isReadableStream(ret) || isTransformStream(ret)) {\n const toRead = ret.readable || ret\n finishCount++\n pumpToNode(toRead, pt, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n }\n ret = pt\n const { destroy, cleanup } = destroyer(ret, false, true)\n destroys.push(destroy)\n if (isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n }\n } else if (isNodeStream(stream)) {\n if (isReadableNodeStream(ret)) {\n finishCount += 2\n const cleanup = pipe(ret, stream, finish, {\n end\n })\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n } else if (isTransformStream(ret) || isReadableStream(ret)) {\n const toRead = ret.readable || ret\n finishCount++\n pumpToNode(toRead, stream, finish, {\n end\n })\n } else if (isIterable(ret)) {\n finishCount++\n pumpToNode(ret, stream, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_ARG_TYPE(\n 'val',\n ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n ret\n )\n }\n ret = stream\n } else if (isWebStream(stream)) {\n if (isReadableNodeStream(ret)) {\n finishCount++\n pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n end\n })\n } else if (isReadableStream(ret) || isIterable(ret)) {\n finishCount++\n pumpToWeb(ret, stream, finish, {\n end\n })\n } else if (isTransformStream(ret)) {\n finishCount++\n pumpToWeb(ret.readable, stream, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_ARG_TYPE(\n 'val',\n ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n ret\n )\n }\n ret = stream\n } else {\n ret = Duplex.from(stream)\n }\n }\n if (\n (signal !== null && signal !== undefined && signal.aborted) ||\n (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n ) {\n process.nextTick(abort)\n }\n return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n let ended = false\n dst.on('close', () => {\n if (!ended) {\n // Finish if the destination closes before the source has completed.\n finish(new ERR_STREAM_PREMATURE_CLOSE())\n }\n })\n src.pipe(dst, {\n end: false\n }) // If end is true we already will have a listener to end dst.\n\n if (end) {\n // Compat. Before node v10.12.0 stdio used to throw an error so\n // pipe() did/does not end() stdio destinations.\n // Now they allow it but \"secretly\" don't close the underlying fd.\n\n function endFn() {\n ended = true\n dst.end()\n }\n if (isReadableFinished(src)) {\n // End the destination if the source has already ended.\n process.nextTick(endFn)\n } else {\n src.once('end', endFn)\n }\n } else {\n finish()\n }\n eos(\n src,\n {\n readable: true,\n writable: false\n },\n (err) => {\n const rState = src._readableState\n if (\n err &&\n err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n rState &&\n rState.ended &&\n !rState.errored &&\n !rState.errorEmitted\n ) {\n // Some readable streams will emit 'close' before 'end'. However, since\n // this is on the readable side 'end' should still be emitted if the\n // stream has been ended and no error emitted. This should be allowed in\n // favor of backwards compatibility. Since the stream is piped to a\n // destination this should not result in any observable difference.\n // We don't need to check if this is a writable premature close since\n // eos will only fail with premature close on the reading side for\n // duplex streams.\n src.once('end', finish).once('error', finish)\n } else {\n finish(err)\n }\n }\n )\n return eos(\n dst,\n {\n readable: false,\n writable: true\n },\n finish\n )\n}\nmodule.exports = {\n pipelineImpl,\n pipeline\n}\n","'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n isNodeStream,\n isReadable,\n isWritable,\n isWebStream,\n isTransformStream,\n isWritableStream,\n isReadableStream\n} = require('./utils')\nconst {\n AbortError,\n codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n if (streams.length === 0) {\n throw new ERR_MISSING_ARGS('streams')\n }\n if (streams.length === 1) {\n return Duplex.from(streams[0])\n }\n const orgStreams = [...streams]\n if (typeof streams[0] === 'function') {\n streams[0] = Duplex.from(streams[0])\n }\n if (typeof streams[streams.length - 1] === 'function') {\n const idx = streams.length - 1\n streams[idx] = Duplex.from(streams[idx])\n }\n for (let n = 0; n < streams.length; ++n) {\n if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n // TODO(ronag): Add checks for non streams.\n continue\n }\n if (\n n < streams.length - 1 &&\n !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n ) {\n throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n }\n if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n }\n }\n let ondrain\n let onfinish\n let onreadable\n let onclose\n let d\n function onfinished(err) {\n const cb = onclose\n onclose = null\n if (cb) {\n cb(err)\n } else if (err) {\n d.destroy(err)\n } else if (!readable && !writable) {\n d.destroy()\n }\n }\n const head = streams[0]\n const tail = pipeline(streams, onfinished)\n const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n // TODO(ronag): Avoid double buffering.\n // Implement Writable/Readable/Duplex traits.\n // See, https://github.com/nodejs/node/pull/33515.\n d = new Duplex({\n // TODO (ronag): highWaterMark?\n writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n readableObjectMode: !!(tail !== null && tail !== undefined && tail.readableObjectMode),\n writable,\n readable\n })\n if (writable) {\n if (isNodeStream(head)) {\n d._write = function (chunk, encoding, callback) {\n if (head.write(chunk, encoding)) {\n callback()\n } else {\n ondrain = callback\n }\n }\n d._final = function (callback) {\n head.end()\n onfinish = callback\n }\n head.on('drain', function () {\n if (ondrain) {\n const cb = ondrain\n ondrain = null\n cb()\n }\n })\n } else if (isWebStream(head)) {\n const writable = isTransformStream(head) ? head.writable : head\n const writer = writable.getWriter()\n d._write = async function (chunk, encoding, callback) {\n try {\n await writer.ready\n writer.write(chunk).catch(() => {})\n callback()\n } catch (err) {\n callback(err)\n }\n }\n d._final = async function (callback) {\n try {\n await writer.ready\n writer.close().catch(() => {})\n onfinish = callback\n } catch (err) {\n callback(err)\n }\n }\n }\n const toRead = isTransformStream(tail) ? tail.readable : tail\n eos(toRead, () => {\n if (onfinish) {\n const cb = onfinish\n onfinish = null\n cb()\n }\n })\n }\n if (readable) {\n if (isNodeStream(tail)) {\n tail.on('readable', function () {\n if (onreadable) {\n const cb = onreadable\n onreadable = null\n cb()\n }\n })\n tail.on('end', function () {\n d.push(null)\n })\n d._read = function () {\n while (true) {\n const buf = tail.read()\n if (buf === null) {\n onreadable = d._read\n return\n }\n if (!d.push(buf)) {\n return\n }\n }\n }\n } else if (isWebStream(tail)) {\n const readable = isTransformStream(tail) ? tail.readable : tail\n const reader = readable.getReader()\n d._read = async function () {\n while (true) {\n try {\n const { value, done } = await reader.read()\n if (!d.push(value)) {\n return\n }\n if (done) {\n d.push(null)\n return\n }\n } catch {\n return\n }\n }\n }\n }\n }\n d._destroy = function (err, callback) {\n if (!err && onclose !== null) {\n err = new AbortError()\n }\n onreadable = null\n ondrain = null\n onfinish = null\n if (onclose === null) {\n callback(err)\n } else {\n onclose = callback\n if (isNodeStream(tail)) {\n destroyer(tail, err)\n }\n }\n }\n return d\n}\n","'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst kResistStopPropagation = require('../../ours/primordials').Symbol('kResistStopPropagation')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst { deprecate } = require('../../ours/util')\nconst {\n ArrayPrototypePush,\n Boolean,\n MathFloor,\n Number,\n NumberIsNaN,\n Promise,\n PromiseReject,\n PromiseResolve,\n PromisePrototypeThen,\n Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n if (isNodeStream(stream) && !isWritable(stream)) {\n throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n }\n const composedStream = staticCompose(this, stream)\n if (options !== null && options !== undefined && options.signal) {\n // Not validating as we already validated before\n addAbortSignalNoValidate(options.signal, composedStream)\n }\n return composedStream\n}\nfunction map(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n let concurrency = 1\n if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n concurrency = MathFloor(options.concurrency)\n }\n let highWaterMark = concurrency - 1\n if ((options === null || options === undefined ? undefined : options.highWaterMark) != null) {\n highWaterMark = MathFloor(options.highWaterMark)\n }\n validateInteger(concurrency, 'options.concurrency', 1)\n validateInteger(highWaterMark, 'options.highWaterMark', 0)\n highWaterMark += concurrency\n return async function* map() {\n const signal = require('../../ours/util').AbortSignalAny(\n [options === null || options === undefined ? undefined : options.signal].filter(Boolean)\n )\n const stream = this\n const queue = []\n const signalOpt = {\n signal\n }\n let next\n let resume\n let done = false\n let cnt = 0\n function onCatch() {\n done = true\n afterItemProcessed()\n }\n function afterItemProcessed() {\n cnt -= 1\n maybeResume()\n }\n function maybeResume() {\n if (resume && !done && cnt < concurrency && queue.length < highWaterMark) {\n resume()\n resume = null\n }\n }\n async function pump() {\n try {\n for await (let val of stream) {\n if (done) {\n return\n }\n if (signal.aborted) {\n throw new AbortError()\n }\n try {\n val = fn(val, signalOpt)\n if (val === kEmpty) {\n continue\n }\n val = PromiseResolve(val)\n } catch (err) {\n val = PromiseReject(err)\n }\n cnt += 1\n PromisePrototypeThen(val, afterItemProcessed, onCatch)\n queue.push(val)\n if (next) {\n next()\n next = null\n }\n if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {\n await new Promise((resolve) => {\n resume = resolve\n })\n }\n }\n queue.push(kEof)\n } catch (err) {\n const val = PromiseReject(err)\n PromisePrototypeThen(val, afterItemProcessed, onCatch)\n queue.push(val)\n } finally {\n done = true\n if (next) {\n next()\n next = null\n }\n }\n }\n pump()\n try {\n while (true) {\n while (queue.length > 0) {\n const val = await queue[0]\n if (val === kEof) {\n return\n }\n if (signal.aborted) {\n throw new AbortError()\n }\n if (val !== kEmpty) {\n yield val\n }\n queue.shift()\n maybeResume()\n }\n await new Promise((resolve) => {\n next = resolve\n })\n }\n } finally {\n done = true\n if (resume) {\n resume()\n resume = null\n }\n }\n }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n return async function* asIndexedPairs() {\n let index = 0\n for await (const val of this) {\n var _options$signal\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal = options.signal) !== null &&\n _options$signal !== undefined &&\n _options$signal.aborted\n ) {\n throw new AbortError({\n cause: options.signal.reason\n })\n }\n yield [index++, val]\n }\n }.call(this)\n}\nasync function some(fn, options = undefined) {\n for await (const unused of filter.call(this, fn, options)) {\n return true\n }\n return false\n}\nasync function every(fn, options = undefined) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n return !(await some.call(\n this,\n async (...args) => {\n return !(await fn(...args))\n },\n options\n ))\n}\nasync function find(fn, options) {\n for await (const result of filter.call(this, fn, options)) {\n return result\n }\n return undefined\n}\nasync function forEach(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n async function forEachFn(value, options) {\n await fn(value, options)\n return kEmpty\n }\n // eslint-disable-next-line no-unused-vars\n for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n async function filterFn(value, options) {\n if (await fn(value, options)) {\n return value\n }\n return kEmpty\n }\n return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n constructor() {\n super('reduce')\n this.message = 'Reduce of an empty stream requires an initial value'\n }\n}\nasync function reduce(reducer, initialValue, options) {\n var _options$signal2\n if (typeof reducer !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n }\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n let hasInitialValue = arguments.length > 1\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal2 = options.signal) !== null &&\n _options$signal2 !== undefined &&\n _options$signal2.aborted\n ) {\n const err = new AbortError(undefined, {\n cause: options.signal.reason\n })\n this.once('error', () => {}) // The error is already propagated\n await finished(this.destroy(err))\n throw err\n }\n const ac = new AbortController()\n const signal = ac.signal\n if (options !== null && options !== undefined && options.signal) {\n const opts = {\n once: true,\n [kWeakHandler]: this,\n [kResistStopPropagation]: true\n }\n options.signal.addEventListener('abort', () => ac.abort(), opts)\n }\n let gotAnyItemFromStream = false\n try {\n for await (const value of this) {\n var _options$signal3\n gotAnyItemFromStream = true\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal3 = options.signal) !== null &&\n _options$signal3 !== undefined &&\n _options$signal3.aborted\n ) {\n throw new AbortError()\n }\n if (!hasInitialValue) {\n initialValue = value\n hasInitialValue = true\n } else {\n initialValue = await reducer(initialValue, value, {\n signal\n })\n }\n }\n if (!gotAnyItemFromStream && !hasInitialValue) {\n throw new ReduceAwareErrMissingArgs()\n }\n } finally {\n ac.abort()\n }\n return initialValue\n}\nasync function toArray(options) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n const result = []\n for await (const val of this) {\n var _options$signal4\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal4 = options.signal) !== null &&\n _options$signal4 !== undefined &&\n _options$signal4.aborted\n ) {\n throw new AbortError(undefined, {\n cause: options.signal.reason\n })\n }\n ArrayPrototypePush(result, val)\n }\n return result\n}\nfunction flatMap(fn, options) {\n const values = map.call(this, fn, options)\n return async function* flatMap() {\n for await (const val of values) {\n yield* val\n }\n }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n // We coerce here to align with the spec\n // https://github.com/tc39/proposal-iterator-helpers/issues/169\n number = Number(number)\n if (NumberIsNaN(number)) {\n return 0\n }\n if (number < 0) {\n throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n }\n return number\n}\nfunction drop(number, options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n number = toIntegerOrInfinity(number)\n return async function* drop() {\n var _options$signal5\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal5 = options.signal) !== null &&\n _options$signal5 !== undefined &&\n _options$signal5.aborted\n ) {\n throw new AbortError()\n }\n for await (const val of this) {\n var _options$signal6\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal6 = options.signal) !== null &&\n _options$signal6 !== undefined &&\n _options$signal6.aborted\n ) {\n throw new AbortError()\n }\n if (number-- <= 0) {\n yield val\n }\n }\n }.call(this)\n}\nfunction take(number, options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n number = toIntegerOrInfinity(number)\n return async function* take() {\n var _options$signal7\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal7 = options.signal) !== null &&\n _options$signal7 !== undefined &&\n _options$signal7.aborted\n ) {\n throw new AbortError()\n }\n for await (const val of this) {\n var _options$signal8\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal8 = options.signal) !== null &&\n _options$signal8 !== undefined &&\n _options$signal8.aborted\n ) {\n throw new AbortError()\n }\n if (number-- > 0) {\n yield val\n }\n\n // Don't get another item from iterator in case we reached the end\n if (number <= 0) {\n return\n }\n }\n }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n asIndexedPairs: deprecate(asIndexedPairs, 'readable.asIndexedPairs will be removed in a future version.'),\n drop,\n filter,\n flatMap,\n map,\n take,\n compose\n}\nmodule.exports.promiseReturningOperators = {\n every,\n forEach,\n reduce,\n toArray,\n some,\n find\n}\n","'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n return new Promise((resolve, reject) => {\n let signal\n let end\n const lastArg = streams[streams.length - 1]\n if (\n lastArg &&\n typeof lastArg === 'object' &&\n !isNodeStream(lastArg) &&\n !isIterable(lastArg) &&\n !isWebStream(lastArg)\n ) {\n const options = ArrayPrototypePop(streams)\n signal = options.signal\n end = options.end\n }\n pl(\n streams,\n (err, value) => {\n if (err) {\n reject(err)\n } else {\n resolve(value)\n }\n },\n {\n signal,\n end\n }\n )\n })\n}\nmodule.exports = {\n finished,\n pipeline\n}\n","/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { setDefaultHighWaterMark, getDefaultHighWaterMark } = require('./internal/streams/state')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDestroyed = utils.isDestroyed\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.isWritable = utils.isWritable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n const op = streamReturningOperators[key]\n function fn(...args) {\n if (new.target) {\n throw ERR_ILLEGAL_CONSTRUCTOR()\n }\n return Stream.Readable.from(ReflectApply(op, this, args))\n }\n ObjectDefineProperty(fn, 'name', {\n __proto__: null,\n value: op.name\n })\n ObjectDefineProperty(fn, 'length', {\n __proto__: null,\n value: op.length\n })\n ObjectDefineProperty(Stream.Readable.prototype, key, {\n __proto__: null,\n value: fn,\n enumerable: false,\n configurable: true,\n writable: true\n })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n const op = promiseReturningOperators[key]\n function fn(...args) {\n if (new.target) {\n throw ERR_ILLEGAL_CONSTRUCTOR()\n }\n return ReflectApply(op, this, args)\n }\n ObjectDefineProperty(fn, 'name', {\n __proto__: null,\n value: op.name\n })\n ObjectDefineProperty(fn, 'length', {\n __proto__: null,\n value: op.length\n })\n ObjectDefineProperty(Stream.Readable.prototype, key, {\n __proto__: null,\n value: fn,\n enumerable: false,\n configurable: true,\n writable: true\n })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nStream.setDefaultHighWaterMark = setDefaultHighWaterMark\nStream.getDefaultHighWaterMark = getDefaultHighWaterMark\nObjectDefineProperty(Stream, 'promises', {\n __proto__: null,\n configurable: true,\n enumerable: true,\n get() {\n return promises\n }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n __proto__: null,\n enumerable: true,\n get() {\n return promises.pipeline\n }\n})\nObjectDefineProperty(eos, customPromisify, {\n __proto__: null,\n enumerable: true,\n get() {\n return promises.finished\n }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n","'use strict'\n\nconst Stream = require('stream')\nif (Stream && process.env.READABLE_STREAM === 'disable') {\n const promises = Stream.promises\n\n // Explicit export naming is needed for ESM\n module.exports._uint8ArrayToBuffer = Stream._uint8ArrayToBuffer\n module.exports._isUint8Array = Stream._isUint8Array\n module.exports.isDisturbed = Stream.isDisturbed\n module.exports.isErrored = Stream.isErrored\n module.exports.isReadable = Stream.isReadable\n module.exports.Readable = Stream.Readable\n module.exports.Writable = Stream.Writable\n module.exports.Duplex = Stream.Duplex\n module.exports.Transform = Stream.Transform\n module.exports.PassThrough = Stream.PassThrough\n module.exports.addAbortSignal = Stream.addAbortSignal\n module.exports.finished = Stream.finished\n module.exports.destroy = Stream.destroy\n module.exports.pipeline = Stream.pipeline\n module.exports.compose = Stream.compose\n Object.defineProperty(Stream, 'promises', {\n configurable: true,\n enumerable: true,\n get() {\n return promises\n }\n })\n module.exports.Stream = Stream.Stream\n} else {\n const CustomStream = require('../stream')\n const promises = require('../stream/promises')\n const originalDestroy = CustomStream.Readable.destroy\n module.exports = CustomStream.Readable\n\n // Explicit export naming is needed for ESM\n module.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\n module.exports._isUint8Array = CustomStream._isUint8Array\n module.exports.isDisturbed = CustomStream.isDisturbed\n module.exports.isErrored = CustomStream.isErrored\n module.exports.isReadable = CustomStream.isReadable\n module.exports.Readable = CustomStream.Readable\n module.exports.Writable = CustomStream.Writable\n module.exports.Duplex = CustomStream.Duplex\n module.exports.Transform = CustomStream.Transform\n module.exports.PassThrough = CustomStream.PassThrough\n module.exports.addAbortSignal = CustomStream.addAbortSignal\n module.exports.finished = CustomStream.finished\n module.exports.destroy = CustomStream.destroy\n module.exports.destroy = originalDestroy\n module.exports.pipeline = CustomStream.pipeline\n module.exports.compose = CustomStream.compose\n Object.defineProperty(CustomStream, 'promises', {\n configurable: true,\n enumerable: true,\n get() {\n return promises\n }\n })\n module.exports.Stream = CustomStream.Stream\n}\n\n// Allow default importing\nmodule.exports.default = module.exports\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseDifference;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nmodule.exports = difference;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n baseUniq = require('./_baseUniq'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nmodule.exports = union;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","const MAX_PATTERN_LENGTH = 1024 * 64\nexport const assertValidPattern: (pattern: any) => void = (\n pattern: any\n): asserts pattern is string => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern')\n }\n\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long')\n }\n}\n","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses: { [k: string]: [e: string, u: boolean, n?: boolean] } = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n}\n\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s: string) => s.replace(/[[\\]\\\\-]/g, '\\\\$&')\n// escape all regexp magic characters\nconst regexpEscape = (s: string) =>\n s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges: string[]): string => ranges.join('')\n\nexport type ParseClassResult = [\n src: string,\n uFlag: boolean,\n consumed: number,\n hasMagic: boolean\n]\n\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (\n glob: string,\n position: number\n): ParseClassResult => {\n const pos = position\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression')\n }\n /* c8 ignore stop */\n const ranges: string[] = []\n const negs: string[] = []\n\n let i = pos + 1\n let sawStart = false\n let uflag = false\n let escaping = false\n let negate = false\n let endPos = pos\n let rangeStart = ''\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i)\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true\n i++\n continue\n }\n\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1\n break\n }\n\n sawStart = true\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true\n i++\n continue\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true]\n }\n i += cls.length\n if (neg) negs.push(unip)\n else ranges.push(unip)\n uflag = uflag || u\n continue WHILE\n }\n }\n }\n\n // now it's just a normal character, effectively\n escaping = false\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c))\n } else if (c === rangeStart) {\n ranges.push(braceEscape(c))\n }\n rangeStart = ''\n i++\n continue\n }\n\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'))\n i += 2\n continue\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c\n i += 2\n continue\n }\n\n // not the start of a range, just a single character\n ranges.push(braceEscape(c))\n i++\n }\n\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false]\n }\n\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true]\n }\n\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (\n negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate\n ) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]\n return [regexpEscape(r), false, endPos - pos, false]\n }\n\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']'\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']'\n const comb =\n ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs\n\n return [comb, uflag, endPos - pos, true]\n}\n","import { MinimatchOptions } from './index.js'\n/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes. For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (\n s: string,\n {\n windowsPathsNoEscape = false,\n }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n return windowsPathsNoEscape\n ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1')\n}\n","// parse a single path portion\n\nimport { parseClass } from './brace-expressions.js'\nimport { MinimatchOptions, MMRegExp } from './index.js'\nimport { unescape } from './unescape.js'\n\n// classes [] are handled by the parseClass method\n// for positive extglobs, we sub-parse the contents, and combine,\n// with the appropriate regexp close.\n// for negative extglobs, we sub-parse the contents, but then\n// have to include the rest of the pattern, then the parent, etc.,\n// as the thing that cannot be because RegExp negative lookaheads\n// are different from globs.\n//\n// So for example:\n// a@(i|w!(x|y)z|j)b => ^a(i|w((!?(x|y)zb).*)z|j)b$\n// 1 2 3 4 5 6 1 2 3 46 5 6\n//\n// Assembling the extglob requires not just the negated patterns themselves,\n// but also anything following the negative patterns up to the boundary\n// of the current pattern, plus anything following in the parent pattern.\n//\n//\n// So, first, we parse the string into an AST of extglobs, without turning\n// anything into regexps yet.\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y']}, 'z'], ['j']]}, 'b']\n//\n// Then, for all the negative extglobs, we append whatever comes after in\n// each parent as their tail\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y'], 'z', 'b'}, 'z'], ['j']]}, 'b']\n//\n// Lastly, we turn each of these pieces into a regexp, and join\n//\n// v----- .* because there's more following,\n// v v otherwise, .+ because it must be\n// v v *something* there.\n// ['^a', {@ ['i', 'w(?:(!?(?:x|y).*zb$).*)z', 'j' ]}, 'b$']\n// copy what follows into here--^^^^^\n// ['^a', '(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)', 'b$']\n// ['^a(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)b$']\n\nexport type ExtglobType = '!' | '?' | '+' | '*' | '@'\nconst types = new Set<ExtglobType>(['!', '?', '+', '*', '@'])\nconst isExtglobType = (c: string): c is ExtglobType =>\n types.has(c as ExtglobType)\n\n// Patterns that get prepended to bind to the start of either the\n// entire string, or just a single path portion, to prevent dots\n// and/or traversal patterns, when needed.\n// Exts don't need the ^ or / bit, because the root binds that already.\nconst startNoTraversal = '(?!(?:^|/)\\\\.\\\\.?(?:$|/))'\nconst startNoDot = '(?!\\\\.)'\n\n// characters that indicate a start of pattern needs the \"no dots\" bit,\n// because a dot *might* be matched. ( is not in the list, because in\n// the case of a child extglob, it will handle the prevention itself.\nconst addPatternStart = new Set(['[', '.'])\n// cases where traversal is A-OK, no dot prevention needed\nconst justDots = new Set(['..', '.'])\nconst reSpecials = new Set('().*{}+?[]^$\\\\!')\nconst regExpEscape = (s: string) =>\n s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// any single thing other than /\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n// use + when we need to ensure that *something* matches, because the * is\n// the only thing in the path portion.\nconst starNoEmpty = qmark + '+?'\n\n// remove the \\ chars that we added if we end up doing a nonmagic compare\n// const deslash = (s: string) => s.replace(/\\\\(.)/g, '$1')\n\nexport class AST {\n type: ExtglobType | null\n readonly #root: AST\n\n #hasMagic?: boolean\n #uflag: boolean = false\n #parts: (string | AST)[] = []\n readonly #parent?: AST\n readonly #parentIndex: number\n #negs: AST[]\n #filledNegs: boolean = false\n #options: MinimatchOptions\n #toString?: string\n // set to true if it's an extglob with no children\n // (which really means one child of '')\n #emptyExt: boolean = false\n\n constructor(\n type: ExtglobType | null,\n parent?: AST,\n options: MinimatchOptions = {}\n ) {\n this.type = type\n // extglobs are inherently magical\n if (type) this.#hasMagic = true\n this.#parent = parent\n this.#root = this.#parent ? this.#parent.#root : this\n this.#options = this.#root === this ? options : this.#root.#options\n this.#negs = this.#root === this ? [] : this.#root.#negs\n if (type === '!' && !this.#root.#filledNegs) this.#negs.push(this)\n this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0\n }\n\n get hasMagic(): boolean | undefined {\n /* c8 ignore start */\n if (this.#hasMagic !== undefined) return this.#hasMagic\n /* c8 ignore stop */\n for (const p of this.#parts) {\n if (typeof p === 'string') continue\n if (p.type || p.hasMagic) return (this.#hasMagic = true)\n }\n // note: will be undefined until we generate the regexp src and find out\n return this.#hasMagic\n }\n\n // reconstructs the pattern\n toString(): string {\n if (this.#toString !== undefined) return this.#toString\n if (!this.type) {\n return (this.#toString = this.#parts.map(p => String(p)).join(''))\n } else {\n return (this.#toString =\n this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')')\n }\n }\n\n #fillNegs() {\n /* c8 ignore start */\n if (this !== this.#root) throw new Error('should only call on root')\n if (this.#filledNegs) return this\n /* c8 ignore stop */\n\n // call toString() once to fill this out\n this.toString()\n this.#filledNegs = true\n let n: AST | undefined\n while ((n = this.#negs.pop())) {\n if (n.type !== '!') continue\n // walk up the tree, appending everthing that comes AFTER parentIndex\n let p: AST | undefined = n\n let pp = p.#parent\n while (pp) {\n for (\n let i = p.#parentIndex + 1;\n !pp.type && i < pp.#parts.length;\n i++\n ) {\n for (const part of n.#parts) {\n /* c8 ignore start */\n if (typeof part === 'string') {\n throw new Error('string part in extglob AST??')\n }\n /* c8 ignore stop */\n part.copyIn(pp.#parts[i])\n }\n }\n p = pp\n pp = p.#parent\n }\n }\n return this\n }\n\n push(...parts: (string | AST)[]) {\n for (const p of parts) {\n if (p === '') continue\n /* c8 ignore start */\n if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {\n throw new Error('invalid part: ' + p)\n }\n /* c8 ignore stop */\n this.#parts.push(p)\n }\n }\n\n toJSON() {\n const ret: any[] =\n this.type === null\n ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))\n : [this.type, ...this.#parts.map(p => (p as AST).toJSON())]\n if (this.isStart() && !this.type) ret.unshift([])\n if (\n this.isEnd() &&\n (this === this.#root ||\n (this.#root.#filledNegs && this.#parent?.type === '!'))\n ) {\n ret.push({})\n }\n return ret\n }\n\n isStart(): boolean {\n if (this.#root === this) return true\n // if (this.type) return !!this.#parent?.isStart()\n if (!this.#parent?.isStart()) return false\n if (this.#parentIndex === 0) return true\n // if everything AHEAD of this is a negation, then it's still the \"start\"\n const p = this.#parent\n for (let i = 0; i < this.#parentIndex; i++) {\n const pp = p.#parts[i]\n if (!(pp instanceof AST && pp.type === '!')) {\n return false\n }\n }\n return true\n }\n\n isEnd(): boolean {\n if (this.#root === this) return true\n if (this.#parent?.type === '!') return true\n if (!this.#parent?.isEnd()) return false\n if (!this.type) return this.#parent?.isEnd()\n // if not root, it'll always have a parent\n /* c8 ignore start */\n const pl = this.#parent ? this.#parent.#parts.length : 0\n /* c8 ignore stop */\n return this.#parentIndex === pl - 1\n }\n\n copyIn(part: AST | string) {\n if (typeof part === 'string') this.push(part)\n else this.push(part.clone(this))\n }\n\n clone(parent: AST) {\n const c = new AST(this.type, parent)\n for (const p of this.#parts) {\n c.copyIn(p)\n }\n return c\n }\n\n static #parseAST(\n str: string,\n ast: AST,\n pos: number,\n opt: MinimatchOptions\n ): number {\n let escaping = false\n let inBrace = false\n let braceStart = -1\n let braceNeg = false\n if (ast.type === null) {\n // outside of a extglob, append until we find a start\n let i = pos\n let acc = ''\n while (i < str.length) {\n const c = str.charAt(i++)\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping\n acc += c\n continue\n }\n\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true\n }\n } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false\n }\n acc += c\n continue\n } else if (c === '[') {\n inBrace = true\n braceStart = i\n braceNeg = false\n acc += c\n continue\n }\n\n if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {\n ast.push(acc)\n acc = ''\n const ext = new AST(c, ast)\n i = AST.#parseAST(str, ext, i, opt)\n ast.push(ext)\n continue\n }\n acc += c\n }\n ast.push(acc)\n return i\n }\n\n // some kind of extglob, pos is at the (\n // find the next | or )\n let i = pos + 1\n let part = new AST(null, ast)\n const parts: AST[] = []\n let acc = ''\n while (i < str.length) {\n const c = str.charAt(i++)\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping\n acc += c\n continue\n }\n\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true\n }\n } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false\n }\n acc += c\n continue\n } else if (c === '[') {\n inBrace = true\n braceStart = i\n braceNeg = false\n acc += c\n continue\n }\n\n if (isExtglobType(c) && str.charAt(i) === '(') {\n part.push(acc)\n acc = ''\n const ext = new AST(c, part)\n part.push(ext)\n i = AST.#parseAST(str, ext, i, opt)\n continue\n }\n if (c === '|') {\n part.push(acc)\n acc = ''\n parts.push(part)\n part = new AST(null, ast)\n continue\n }\n if (c === ')') {\n if (acc === '' && ast.#parts.length === 0) {\n ast.#emptyExt = true\n }\n part.push(acc)\n acc = ''\n ast.push(...parts, part)\n return i\n }\n acc += c\n }\n\n // unfinished extglob\n // if we got here, it was a malformed extglob! not an extglob, but\n // maybe something else in there.\n ast.type = null\n ast.#hasMagic = undefined\n ast.#parts = [str.substring(pos - 1)]\n return i\n }\n\n static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n const ast = new AST(null, undefined, options)\n AST.#parseAST(pattern, ast, 0, options)\n return ast\n }\n\n // returns the regular expression if there's magic, or the unescaped\n // string if not.\n toMMPattern(): MMRegExp | string {\n // should only be called on root\n /* c8 ignore start */\n if (this !== this.#root) return this.#root.toMMPattern()\n /* c8 ignore stop */\n const glob = this.toString()\n const [re, body, hasMagic, uflag] = this.toRegExpSource()\n // if we're in nocase mode, and not nocaseMagicOnly, then we do\n // still need a regular expression if we have to case-insensitively\n // match capital/lowercase characters.\n const anyMagic =\n hasMagic ||\n this.#hasMagic ||\n (this.#options.nocase &&\n !this.#options.nocaseMagicOnly &&\n glob.toUpperCase() !== glob.toLowerCase())\n if (!anyMagic) {\n return body\n }\n\n const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '')\n return Object.assign(new RegExp(`^${re}$`, flags), {\n _src: re,\n _glob: glob,\n })\n }\n\n get options() {\n return this.#options\n }\n\n // returns the string match, the regexp source, whether there's magic\n // in the regexp (so a regular expression is required) and whether or\n // not the uflag is needed for the regular expression (for posix classes)\n // TODO: instead of injecting the start/end at this point, just return\n // the BODY of the regexp, along with the start/end portions suitable\n // for binding the start/end in either a joined full-path makeRe context\n // (where we bind to (^|/), or a standalone matchPart context (where\n // we bind to ^, and not /). Otherwise slashes get duped!\n //\n // In part-matching mode, the start is:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: ^(?!\\.\\.?$)\n // - if dots allowed or not possible: ^\n // - if dots possible and not allowed: ^(?!\\.)\n // end is:\n // - if not isEnd(): nothing\n // - else: $\n //\n // In full-path matching mode, we put the slash at the START of the\n // pattern, so start is:\n // - if first pattern: same as part-matching mode\n // - if not isStart(): nothing\n // - if traversal possible, but not allowed: /(?!\\.\\.?(?:$|/))\n // - if dots allowed or not possible: /\n // - if dots possible and not allowed: /(?!\\.)\n // end is:\n // - if last pattern, same as part-matching mode\n // - else nothing\n //\n // Always put the (?:$|/) on negated tails, though, because that has to be\n // there to bind the end of the negated pattern portion, and it's easier to\n // just stick it in now rather than try to inject it later in the middle of\n // the pattern.\n //\n // We can just always return the same end, and leave it up to the caller\n // to know whether it's going to be used joined or in parts.\n // And, if the start is adjusted slightly, can do the same there:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: (?:/|^)(?!\\.\\.?$)\n // - if dots allowed or not possible: (?:/|^)\n // - if dots possible and not allowed: (?:/|^)(?!\\.)\n //\n // But it's better to have a simpler binding without a conditional, for\n // performance, so probably better to return both start options.\n //\n // Then the caller just ignores the end if it's not the first pattern,\n // and the start always gets applied.\n //\n // But that's always going to be $ if it's the ending pattern, or nothing,\n // so the caller can just attach $ at the end of the pattern when building.\n //\n // So the todo is:\n // - better detect what kind of start is needed\n // - return both flavors of starting pattern\n // - attach $ at the end of the pattern when creating the actual RegExp\n //\n // Ah, but wait, no, that all only applies to the root when the first pattern\n // is not an extglob. If the first pattern IS an extglob, then we need all\n // that dot prevention biz to live in the extglob portions, because eg\n // +(*|.x*) can match .xy but not .yx.\n //\n // So, return the two flavors if it's #root and the first child is not an\n // AST, otherwise leave it to the child AST to handle it, and there,\n // use the (?:^|/) style of start binding.\n //\n // Even simplified further:\n // - Since the start for a join is eg /(?!\\.) and the start for a part\n // is ^(?!\\.), we can just prepend (?!\\.) to the pattern (either root\n // or start or whatever) and prepend ^ or / at the Regexp construction.\n toRegExpSource(\n allowDot?: boolean\n ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n const dot = allowDot ?? !!this.#options.dot\n if (this.#root === this) this.#fillNegs()\n if (!this.type) {\n const noEmpty = this.isStart() && this.isEnd()\n const src = this.#parts\n .map(p => {\n const [re, _, hasMagic, uflag] =\n typeof p === 'string'\n ? AST.#parseGlob(p, this.#hasMagic, noEmpty)\n : p.toRegExpSource(allowDot)\n this.#hasMagic = this.#hasMagic || hasMagic\n this.#uflag = this.#uflag || uflag\n return re\n })\n .join('')\n\n let start = ''\n if (this.isStart()) {\n if (typeof this.#parts[0] === 'string') {\n // this is the string that will match the start of the pattern,\n // so we need to protect against dots and such.\n\n // '.' and '..' cannot match unless the pattern is that exactly,\n // even if it starts with . or dot:true is set.\n const dotTravAllowed =\n this.#parts.length === 1 && justDots.has(this.#parts[0])\n if (!dotTravAllowed) {\n const aps = addPatternStart\n // check if we have a possibility of matching . or ..,\n // and prevent that.\n const needNoTrav =\n // dots are allowed, and the pattern starts with [ or .\n (dot && aps.has(src.charAt(0))) ||\n // the pattern starts with \\., and then [ or .\n (src.startsWith('\\\\.') && aps.has(src.charAt(2))) ||\n // the pattern starts with \\.\\., and then [ or .\n (src.startsWith('\\\\.\\\\.') && aps.has(src.charAt(4)))\n // no need to prevent dots if it can't match a dot, or if a\n // sub-pattern will be preventing it anyway.\n const needNoDot = !dot && !allowDot && aps.has(src.charAt(0))\n\n start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ''\n }\n }\n }\n\n // append the \"end of path portion\" pattern to negation tails\n let end = ''\n if (\n this.isEnd() &&\n this.#root.#filledNegs &&\n this.#parent?.type === '!'\n ) {\n end = '(?:$|\\\\/)'\n }\n const final = start + src + end\n return [\n final,\n unescape(src),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ]\n }\n\n // We need to calculate the body *twice* if it's a repeat pattern\n // at the start, once in nodot mode, then again in dot mode, so a\n // pattern like *(?) can match 'x.y'\n\n const repeated = this.type === '*' || this.type === '+'\n // some kind of extglob\n const start = this.type === '!' ? '(?:(?!(?:' : '(?:'\n let body = this.#partsToRegExp(dot)\n\n if (this.isStart() && this.isEnd() && !body && this.type !== '!') {\n // invalid extglob, has to at least be *something* present, if it's\n // the entire path portion.\n const s = this.toString()\n this.#parts = [s]\n this.type = null\n this.#hasMagic = undefined\n return [s, unescape(this.toString()), false, false]\n }\n\n // XXX abstract out this map method\n let bodyDotAllowed =\n !repeated || allowDot || dot || !startNoDot\n ? ''\n : this.#partsToRegExp(true)\n if (bodyDotAllowed === body) {\n bodyDotAllowed = ''\n }\n if (bodyDotAllowed) {\n body = `(?:${body})(?:${bodyDotAllowed})*?`\n }\n\n // an empty !() is exactly equivalent to a starNoEmpty\n let final = ''\n if (this.type === '!' && this.#emptyExt) {\n final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty\n } else {\n const close =\n this.type === '!'\n ? // !() must match something,but !(x) can match ''\n '))' +\n (this.isStart() && !dot && !allowDot ? startNoDot : '') +\n star +\n ')'\n : this.type === '@'\n ? ')'\n : this.type === '?'\n ? ')?'\n : this.type === '+' && bodyDotAllowed\n ? ')'\n : this.type === '*' && bodyDotAllowed\n ? `)?`\n : `)${this.type}`\n final = start + body + close\n }\n return [\n final,\n unescape(body),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ]\n }\n\n #partsToRegExp(dot: boolean) {\n return this.#parts\n .map(p => {\n // extglob ASTs should only contain parent ASTs\n /* c8 ignore start */\n if (typeof p === 'string') {\n throw new Error('string type in extglob ast??')\n }\n /* c8 ignore stop */\n // can ignore hasMagic, because extglobs are already always magic\n const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot)\n this.#uflag = this.#uflag || uflag\n return re\n })\n .filter(p => !(this.isStart() && this.isEnd()) || !!p)\n .join('|')\n }\n\n static #parseGlob(\n glob: string,\n hasMagic: boolean | undefined,\n noEmpty: boolean = false\n ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n let escaping = false\n let re = ''\n let uflag = false\n for (let i = 0; i < glob.length; i++) {\n const c = glob.charAt(i)\n if (escaping) {\n escaping = false\n re += (reSpecials.has(c) ? '\\\\' : '') + c\n continue\n }\n if (c === '\\\\') {\n if (i === glob.length - 1) {\n re += '\\\\\\\\'\n } else {\n escaping = true\n }\n continue\n }\n if (c === '[') {\n const [src, needUflag, consumed, magic] = parseClass(glob, i)\n if (consumed) {\n re += src\n uflag = uflag || needUflag\n i += consumed - 1\n hasMagic = hasMagic || magic\n continue\n }\n }\n if (c === '*') {\n if (noEmpty && glob === '*') re += starNoEmpty\n else re += star\n hasMagic = true\n continue\n }\n if (c === '?') {\n re += qmark\n hasMagic = true\n continue\n }\n re += regExpEscape(c)\n }\n return [re, unescape(glob), !!hasMagic, uflag]\n }\n}\n","import { MinimatchOptions } from './index.js'\n/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (\n s: string,\n {\n windowsPathsNoEscape = false,\n }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&')\n}\n","import expand from 'brace-expansion'\nimport { assertValidPattern } from './assert-valid-pattern.js'\nimport { AST, ExtglobType } from './ast.js'\nimport { escape } from './escape.js'\nimport { unescape } from './unescape.js'\n\ntype Platform =\n | 'aix'\n | 'android'\n | 'darwin'\n | 'freebsd'\n | 'haiku'\n | 'linux'\n | 'openbsd'\n | 'sunos'\n | 'win32'\n | 'cygwin'\n | 'netbsd'\n\nexport interface MinimatchOptions {\n nobrace?: boolean\n nocomment?: boolean\n nonegate?: boolean\n debug?: boolean\n noglobstar?: boolean\n noext?: boolean\n nonull?: boolean\n windowsPathsNoEscape?: boolean\n allowWindowsEscape?: boolean\n partial?: boolean\n dot?: boolean\n nocase?: boolean\n nocaseMagicOnly?: boolean\n magicalBraces?: boolean\n matchBase?: boolean\n flipNegate?: boolean\n preserveMultipleSlashes?: boolean\n optimizationLevel?: number\n platform?: Platform\n windowsNoMagicRoot?: boolean\n}\n\nexport const minimatch = (\n p: string,\n pattern: string,\n options: MinimatchOptions = {}\n) => {\n assertValidPattern(pattern)\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n return new Minimatch(pattern, options).match(p)\n}\n\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/\nconst starDotExtTest = (ext: string) => (f: string) =>\n !f.startsWith('.') && f.endsWith(ext)\nconst starDotExtTestDot = (ext: string) => (f: string) => f.endsWith(ext)\nconst starDotExtTestNocase = (ext: string) => {\n ext = ext.toLowerCase()\n return (f: string) => !f.startsWith('.') && f.toLowerCase().endsWith(ext)\n}\nconst starDotExtTestNocaseDot = (ext: string) => {\n ext = ext.toLowerCase()\n return (f: string) => f.toLowerCase().endsWith(ext)\n}\nconst starDotStarRE = /^\\*+\\.\\*+$/\nconst starDotStarTest = (f: string) => !f.startsWith('.') && f.includes('.')\nconst starDotStarTestDot = (f: string) =>\n f !== '.' && f !== '..' && f.includes('.')\nconst dotStarRE = /^\\.\\*+$/\nconst dotStarTest = (f: string) => f !== '.' && f !== '..' && f.startsWith('.')\nconst starRE = /^\\*+$/\nconst starTest = (f: string) => f.length !== 0 && !f.startsWith('.')\nconst starTestDot = (f: string) => f.length !== 0 && f !== '.' && f !== '..'\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/\nconst qmarksTestNocase = ([$0, ext = '']: RegExpMatchArray) => {\n const noext = qmarksTestNoExt([$0])\n if (!ext) return noext\n ext = ext.toLowerCase()\n return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestNocaseDot = ([$0, ext = '']: RegExpMatchArray) => {\n const noext = qmarksTestNoExtDot([$0])\n if (!ext) return noext\n ext = ext.toLowerCase()\n return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestDot = ([$0, ext = '']: RegExpMatchArray) => {\n const noext = qmarksTestNoExtDot([$0])\n return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTest = ([$0, ext = '']: RegExpMatchArray) => {\n const noext = qmarksTestNoExt([$0])\n return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTestNoExt = ([$0]: RegExpMatchArray) => {\n const len = $0.length\n return (f: string) => f.length === len && !f.startsWith('.')\n}\nconst qmarksTestNoExtDot = ([$0]: RegExpMatchArray) => {\n const len = $0.length\n return (f: string) => f.length === len && f !== '.' && f !== '..'\n}\n\n/* c8 ignore start */\nconst defaultPlatform: Platform = (\n typeof process === 'object' && process\n ? (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix'\n) as Platform\ntype Sep = '\\\\' | '/'\nconst path: { [k: string]: { sep: Sep } } = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n}\n/* c8 ignore stop */\n\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep\nminimatch.sep = sep\n\nexport const GLOBSTAR = Symbol('globstar **')\nminimatch.GLOBSTAR = GLOBSTAR\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?'\n\nexport const filter =\n (pattern: string, options: MinimatchOptions = {}) =>\n (p: string) =>\n minimatch(p, pattern, options)\nminimatch.filter = filter\n\nconst ext = (a: MinimatchOptions, b: MinimatchOptions = {}) =>\n Object.assign({}, a, b)\n\nexport const defaults = (def: MinimatchOptions): typeof minimatch => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch\n }\n\n const orig = minimatch\n\n const m = (p: string, pattern: string, options: MinimatchOptions = {}) =>\n orig(p, pattern, ext(def, options))\n\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern: string, options: MinimatchOptions = {}) {\n super(pattern, ext(def, options))\n }\n static defaults(options: MinimatchOptions) {\n return orig.defaults(ext(def, options)).Minimatch\n }\n },\n\n AST: class AST extends orig.AST {\n /* c8 ignore start */\n constructor(\n type: ExtglobType | null,\n parent?: AST,\n options: MinimatchOptions = {}\n ) {\n super(type, parent, ext(def, options))\n }\n /* c8 ignore stop */\n\n static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n return orig.AST.fromGlob(pattern, ext(def, options))\n }\n },\n\n unescape: (\n s: string,\n options: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n ) => orig.unescape(s, ext(def, options)),\n\n escape: (\n s: string,\n options: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n ) => orig.escape(s, ext(def, options)),\n\n filter: (pattern: string, options: MinimatchOptions = {}) =>\n orig.filter(pattern, ext(def, options)),\n\n defaults: (options: MinimatchOptions) => orig.defaults(ext(def, options)),\n\n makeRe: (pattern: string, options: MinimatchOptions = {}) =>\n orig.makeRe(pattern, ext(def, options)),\n\n braceExpand: (pattern: string, options: MinimatchOptions = {}) =>\n orig.braceExpand(pattern, ext(def, options)),\n\n match: (list: string[], pattern: string, options: MinimatchOptions = {}) =>\n orig.match(list, pattern, ext(def, options)),\n\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR as typeof GLOBSTAR,\n })\n}\nminimatch.defaults = defaults\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (\n pattern: string,\n options: MinimatchOptions = {}\n) => {\n assertValidPattern(pattern)\n\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\nminimatch.braceExpand = braceExpand\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\n\nexport const makeRe = (pattern: string, options: MinimatchOptions = {}) =>\n new Minimatch(pattern, options).makeRe()\nminimatch.makeRe = makeRe\n\nexport const match = (\n list: string[],\n pattern: string,\n options: MinimatchOptions = {}\n) => {\n const mm = new Minimatch(pattern, options)\n list = list.filter(f => mm.match(f))\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\nminimatch.match = match\n\n// replace stuff like \\* with *\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/\nconst regExpEscape = (s: string) =>\n s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\nexport type MMRegExp = RegExp & {\n _src?: string\n _glob?: string\n}\n\nexport type ParseReturnFiltered = string | MMRegExp | typeof GLOBSTAR\nexport type ParseReturn = ParseReturnFiltered | false\n\nexport class Minimatch {\n options: MinimatchOptions\n set: ParseReturnFiltered[][]\n pattern: string\n\n windowsPathsNoEscape: boolean\n nonegate: boolean\n negate: boolean\n comment: boolean\n empty: boolean\n preserveMultipleSlashes: boolean\n partial: boolean\n globSet: string[]\n globParts: string[][]\n nocase: boolean\n\n isWindows: boolean\n platform: Platform\n windowsNoMagicRoot: boolean\n\n regexp: false | null | MMRegExp\n constructor(pattern: string, options: MinimatchOptions = {}) {\n assertValidPattern(pattern)\n\n options = options || {}\n this.options = options\n this.pattern = pattern\n this.platform = options.platform || defaultPlatform\n this.isWindows = this.platform === 'win32'\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options.allowWindowsEscape === false\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/')\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes\n this.regexp = null\n this.negate = false\n this.nonegate = !!options.nonegate\n this.comment = false\n this.empty = false\n this.partial = !!options.partial\n this.nocase = !!this.options.nocase\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined\n ? options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase)\n\n this.globSet = []\n this.globParts = []\n this.set = []\n\n // make the set of regexps etc.\n this.make()\n }\n\n hasMagic(): boolean {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string') return true\n }\n }\n return false\n }\n\n debug(..._: any[]) {}\n\n make() {\n const pattern = this.pattern\n const options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())]\n\n if (options.debug) {\n this.debug = (...args: any[]) => console.error(...args)\n }\n\n this.debug(this.pattern, this.globSet)\n\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s))\n this.globParts = this.preprocess(rawGlobParts)\n this.debug(this.pattern, this.globParts)\n\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC =\n s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3])\n const isDrive = /^[a-z]:/i.test(s[0])\n if (isUNC) {\n return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))]\n } else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))]\n }\n }\n return s.map(ss => this.parse(ss))\n })\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n this.set = set.filter(\n s => s.indexOf(false) === -1\n ) as ParseReturnFiltered[][]\n\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i]\n if (\n p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])\n ) {\n p[2] = '?'\n }\n }\n }\n\n this.debug(this.pattern, this.set)\n }\n\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts: string[][]) {\n // if we're not in globstar mode, then turn all ** into *\n if (this.options.noglobstar) {\n for (let i = 0; i < globParts.length; i++) {\n for (let j = 0; j < globParts[i].length; j++) {\n if (globParts[i][j] === '**') {\n globParts[i][j] = '*'\n }\n }\n }\n }\n\n const { optimizationLevel = 1 } = this.options\n\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts)\n globParts = this.secondPhasePreProcess(globParts)\n } else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts)\n } else {\n // just collapse multiple ** portions into one\n globParts = this.adjascentGlobstarOptimize(globParts)\n }\n\n return globParts\n }\n\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts: string[][]) {\n return globParts.map(parts => {\n let gs: number = -1\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs\n while (parts[i + 1] === '**') {\n i++\n }\n if (i !== gs) {\n parts.splice(gs, i - gs)\n }\n }\n return parts\n })\n }\n\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts: string[][]) {\n return globParts.map(parts => {\n parts = parts.reduce((set: string[], part) => {\n const prev = set[set.length - 1]\n if (part === '**' && prev === '**') {\n return set\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop()\n return set\n }\n }\n set.push(part)\n return set\n }, [])\n return parts.length === 0 ? [''] : parts\n })\n }\n\n levelTwoFileOptimize(parts: string | string[]) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts)\n }\n let didSomething: boolean = false\n do {\n didSomething = false\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i]\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '') continue\n if (p === '.' || p === '') {\n didSomething = true\n parts.splice(i, 1)\n i--\n }\n }\n if (\n parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')\n ) {\n didSomething = true\n parts.pop()\n }\n }\n\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd: number = 0\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1]\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true\n parts.splice(dd - 1, 2)\n dd -= 2\n }\n }\n } while (didSomething)\n return parts.length === 0 ? [''] : parts\n }\n\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts: string[][]) {\n let didSomething = false\n do {\n didSomething = false\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs: number = -1\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss: number = gs\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs)\n }\n\n let next = parts[gs + 1]\n const p = parts[gs + 2]\n const p2 = parts[gs + 3]\n if (next !== '..') continue\n if (\n !p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..'\n ) {\n continue\n }\n didSomething = true\n // edit parts in place, and push the new one\n parts.splice(gs, 1)\n const other = parts.slice(0)\n other[gs] = '**'\n globParts.push(other)\n gs--\n }\n\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i]\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '') continue\n if (p === '.' || p === '') {\n didSomething = true\n parts.splice(i, 1)\n i--\n }\n }\n if (\n parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')\n ) {\n didSomething = true\n parts.pop()\n }\n }\n\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd: number = 0\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1]\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true\n const needDot = dd === 1 && parts[dd + 1] === '**'\n const splin = needDot ? ['.'] : []\n parts.splice(dd - 1, 2, ...splin)\n if (parts.length === 0) parts.push('')\n dd -= 2\n }\n }\n }\n } while (didSomething)\n\n return globParts\n }\n\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts: string[][]): string[][] {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(\n globParts[i],\n globParts[j],\n !this.preserveMultipleSlashes\n )\n if (matched) {\n globParts[i] = []\n globParts[j] = matched\n break\n }\n }\n }\n return globParts.filter(gs => gs.length)\n }\n\n partsMatch(\n a: string[],\n b: string[],\n emptyGSMatch: boolean = false\n ): false | string[] {\n let ai = 0\n let bi = 0\n let result: string[] = []\n let which: string = ''\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai])\n ai++\n bi++\n } else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai])\n ai++\n } else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi])\n bi++\n } else if (\n a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**'\n ) {\n if (which === 'b') return false\n which = 'a'\n result.push(a[ai])\n ai++\n bi++\n } else if (\n b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**'\n ) {\n if (which === 'a') return false\n which = 'b'\n result.push(b[bi])\n ai++\n bi++\n } else {\n return false\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result\n }\n\n parseNegate() {\n if (this.nonegate) return\n\n const pattern = this.pattern\n let negate = false\n let negateOffset = 0\n\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.slice(negateOffset)\n this.negate = negate\n }\n\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file: string[], pattern: ParseReturn[], partial: boolean = false) {\n const options = this.options\n\n // UNC paths like //?/X:/... can match X:/... and vice versa\n // Drive letters in absolute drive or unc paths are always compared\n // case-insensitively.\n if (this.isWindows) {\n const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0])\n const fileUNC =\n !fileDrive &&\n file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n /^[a-z]:$/i.test(file[3])\n\n const patternDrive =\n typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0])\n const patternUNC =\n !patternDrive &&\n pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3])\n\n const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined\n const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined\n if (typeof fdi === 'number' && typeof pdi === 'number') {\n const [fd, pd]: [string, string] = [file[fdi], pattern[pdi] as string]\n if (fd.toLowerCase() === pd.toLowerCase()) {\n pattern[pdi] = fd\n if (pdi > fdi) {\n pattern = pattern.slice(pdi)\n } else if (fdi > pdi) {\n file = file.slice(fdi)\n }\n }\n }\n }\n\n // resolve and reduce . and .. portions in the file as well.\n // dont' need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file)\n }\n\n this.debug('matchOne', this, { file, pattern })\n this.debug('matchOne', file.length, pattern.length)\n\n for (\n var fi = 0, pi = 0, fl = file.length, pl = pattern.length;\n fi < fl && pi < pl;\n fi++, pi++\n ) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false) {\n return false\n }\n /* c8 ignore stop */\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (\n file[fi] === '.' ||\n file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')\n )\n return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (\n swallowee === '.' ||\n swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')\n ) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n /* c8 ignore start */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) {\n return true\n }\n }\n /* c8 ignore stop */\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit: boolean\n if (typeof p === 'string') {\n hit = f === p\n this.debug('string match', p, f, hit)\n } else {\n hit = p.test(f)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === ''\n\n /* c8 ignore start */\n } else {\n // should be unreachable.\n throw new Error('wtf?')\n }\n /* c8 ignore stop */\n }\n\n braceExpand() {\n return braceExpand(this.pattern, this.options)\n }\n\n parse(pattern: string): ParseReturn {\n assertValidPattern(pattern)\n\n const options = this.options\n\n // shortcuts\n if (pattern === '**') return GLOBSTAR\n if (pattern === '') return ''\n\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m: RegExpMatchArray | null\n let fastTest: null | ((f: string) => boolean) = null\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest\n } else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (\n options.nocase\n ? options.dot\n ? starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot\n ? starDotExtTestDot\n : starDotExtTest\n )(m[1])\n } else if ((m = pattern.match(qmarksRE))) {\n fastTest = (\n options.nocase\n ? options.dot\n ? qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot\n ? qmarksTestDot\n : qmarksTest\n )(m)\n } else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest\n } else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest\n }\n\n const re = AST.fromGlob(pattern, this.options).toMMPattern()\n if (fastTest && typeof re === 'object') {\n // Avoids overriding in frozen environments\n Reflect.defineProperty(re, 'test', { value: fastTest })\n }\n return re\n }\n\n makeRe() {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n const options = this.options\n\n const twoStar = options.noglobstar\n ? star\n : options.dot\n ? twoStarDot\n : twoStarNoDot\n const flags = new Set(options.nocase ? ['i'] : [])\n\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp: (string | typeof GLOBSTAR)[] = pattern.map(p => {\n if (p instanceof RegExp) {\n for (const f of p.flags.split('')) flags.add(f)\n }\n return typeof p === 'string'\n ? regExpEscape(p)\n : p === GLOBSTAR\n ? GLOBSTAR\n : p._src\n }) as (string | typeof GLOBSTAR)[]\n pp.forEach((p, i) => {\n const next = pp[i + 1]\n const prev = pp[i - 1]\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next\n } else {\n pp[i] = twoStar\n }\n } else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?'\n } else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next\n pp[i + 1] = GLOBSTAR\n }\n })\n return pp.filter(p => p !== GLOBSTAR).join('/')\n })\n .join('|')\n\n // need to wrap in parens if we had more than one thing with |,\n // otherwise only the first will be anchored to ^ and the last to $\n const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', '']\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^' + open + re + close + '$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').+$'\n\n try {\n this.regexp = new RegExp(re, [...flags].join(''))\n /* c8 ignore start */\n } catch (ex) {\n // should be impossible\n this.regexp = false\n }\n /* c8 ignore stop */\n return this.regexp\n }\n\n slashSplit(p: string) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/')\n } else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)]\n } else {\n return p.split(/\\/+/)\n }\n }\n\n match(f: string, partial = this.partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false\n }\n if (this.empty) {\n return f === ''\n }\n\n if (f === '/' && partial) {\n return true\n }\n\n const options = this.options\n\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/')\n }\n\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f)\n this.debug(this.pattern, 'split', ff)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n const set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n let filename: string = ff[ff.length - 1]\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i]\n }\n }\n\n for (let i = 0; i < set.length; i++) {\n const pattern = set[i]\n let file = ff\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n const hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) {\n return true\n }\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false\n }\n return this.negate\n }\n\n static defaults(def: MinimatchOptions) {\n return minimatch.defaults(def).Minimatch\n }\n}\n/* c8 ignore start */\nexport { AST } from './ast.js'\nexport { escape } from './escape.js'\nexport { unescape } from './unescape.js'\n/* c8 ignore stop */\nminimatch.AST = AST\nminimatch.Minimatch = Minimatch\nminimatch.escape = escape\nminimatch.unescape = unescape\n","/**\n * @module LRUCache\n */\n\n// module-private names and types\ntype Perf = { now: () => number }\nconst perf: Perf =\n typeof performance === 'object' &&\n performance &&\n typeof performance.now === 'function'\n ? performance\n : Date\n\nconst warned = new Set<string>()\n\n// either a function or a class\ntype ForC = ((...a: any[]) => any) | { new (...a: any[]): any }\n\n/* c8 ignore start */\nconst PROCESS = (\n typeof process === 'object' && !!process ? process : {}\n) as { [k: string]: any }\n/* c8 ignore start */\n\nconst emitWarning = (\n msg: string,\n type: string,\n code: string,\n fn: ForC\n) => {\n typeof PROCESS.emitWarning === 'function'\n ? PROCESS.emitWarning(msg, type, code, fn)\n : console.error(`[${code}] ${type}: ${msg}`)\n}\n\nlet AC = globalThis.AbortController\nlet AS = globalThis.AbortSignal\n\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n //@ts-ignore\n AS = class AbortSignal {\n onabort?: (...a: any[]) => any\n _onabort: ((...a: any[]) => any)[] = []\n reason?: any\n aborted: boolean = false\n addEventListener(_: string, fn: (...a: any[]) => any) {\n this._onabort.push(fn)\n }\n }\n //@ts-ignore\n AC = class AbortController {\n constructor() {\n warnACPolyfill()\n }\n signal = new AS()\n abort(reason: any) {\n if (this.signal.aborted) return\n //@ts-ignore\n this.signal.reason = reason\n //@ts-ignore\n this.signal.aborted = true\n //@ts-ignore\n for (const fn of this.signal._onabort) {\n fn(reason)\n }\n this.signal.onabort?.(reason)\n }\n }\n let printACPolyfillWarning =\n PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'\n const warnACPolyfill = () => {\n if (!printACPolyfillWarning) return\n printACPolyfillWarning = false\n emitWarning(\n 'AbortController is not defined. If using lru-cache in ' +\n 'node 14, load an AbortController polyfill from the ' +\n '`node-abort-controller` package. A minimal polyfill is ' +\n 'provided for use by LRUCache.fetch(), but it should not be ' +\n 'relied upon in other contexts (eg, passing it to other APIs that ' +\n 'use AbortController/AbortSignal might have undesirable effects). ' +\n 'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.',\n 'NO_ABORT_CONTROLLER',\n 'ENOTSUP',\n warnACPolyfill\n )\n }\n}\n/* c8 ignore stop */\n\nconst shouldWarn = (code: string) => !warned.has(code)\n\nconst TYPE = Symbol('type')\nexport type PosInt = number & { [TYPE]: 'Positive Integer' }\nexport type Index = number & { [TYPE]: 'LRUCache Index' }\n\nconst isPosInt = (n: any): n is PosInt =>\n n && n === Math.floor(n) && n > 0 && isFinite(n)\n\nexport type UintArray = Uint8Array | Uint16Array | Uint32Array\nexport type NumberArray = UintArray | number[]\n\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values. Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max: number) =>\n !isPosInt(max)\n ? null\n : max <= Math.pow(2, 8)\n ? Uint8Array\n : max <= Math.pow(2, 16)\n ? Uint16Array\n : max <= Math.pow(2, 32)\n ? Uint32Array\n : max <= Number.MAX_SAFE_INTEGER\n ? ZeroArray\n : null\n/* c8 ignore stop */\n\nclass ZeroArray extends Array<number> {\n constructor(size: number) {\n super(size)\n this.fill(0)\n }\n}\nexport type { ZeroArray }\nexport type { Stack }\n\nexport type StackLike = Stack | Index[]\nclass Stack {\n heap: NumberArray\n length: number\n // private constructor\n static #constructing: boolean = false\n static create(max: number): StackLike {\n const HeapCls = getUintArray(max)\n if (!HeapCls) return []\n Stack.#constructing = true\n const s = new Stack(max, HeapCls)\n Stack.#constructing = false\n return s\n }\n constructor(\n max: number,\n HeapCls: { new (n: number): NumberArray }\n ) {\n /* c8 ignore start */\n if (!Stack.#constructing) {\n throw new TypeError('instantiate Stack using Stack.create(n)')\n }\n /* c8 ignore stop */\n this.heap = new HeapCls(max)\n this.length = 0\n }\n push(n: Index) {\n this.heap[this.length++] = n\n }\n pop(): Index {\n return this.heap[--this.length] as Index\n }\n}\n\n/**\n * Promise representing an in-progress {@link LRUCache#fetch} call\n */\nexport type BackgroundFetch<V> = Promise<V | undefined> & {\n __returned: BackgroundFetch<V> | undefined\n __abortController: AbortController\n __staleWhileFetching: V | undefined\n}\n\nexport type DisposeTask<K, V> = [\n value: V,\n key: K,\n reason: LRUCache.DisposeReason\n]\n\nexport namespace LRUCache {\n /**\n * An integer greater than 0, reflecting the calculated size of items\n */\n export type Size = number\n\n /**\n * Integer greater than 0, representing some number of milliseconds, or the\n * time at which a TTL started counting from.\n */\n export type Milliseconds = number\n\n /**\n * An integer greater than 0, reflecting a number of items\n */\n export type Count = number\n\n /**\n * The reason why an item was removed from the cache, passed\n * to the {@link Disposer} methods.\n *\n * - `evict`: The item was evicted because it is the least recently used,\n * and the cache is full.\n * - `set`: A new value was set, overwriting the old value being disposed.\n * - `delete`: The item was explicitly deleted, either by calling\n * {@link LRUCache#delete}, {@link LRUCache#clear}, or\n * {@link LRUCache#set} with an undefined value.\n * - `expire`: The item was removed due to exceeding its TTL.\n * - `fetch`: A {@link OptionsBase#fetchMethod} operation returned\n * `undefined` or was aborted, causing the item to be deleted.\n */\n export type DisposeReason =\n | 'evict'\n | 'set'\n | 'delete'\n | 'expire'\n | 'fetch'\n /**\n * A method called upon item removal, passed as the\n * {@link OptionsBase.dispose} and/or\n * {@link OptionsBase.disposeAfter} options.\n */\n export type Disposer<K, V> = (\n value: V,\n key: K,\n reason: DisposeReason\n ) => void\n\n /**\n * A function that returns the effective calculated size\n * of an entry in the cache.\n */\n export type SizeCalculator<K, V> = (value: V, key: K) => Size\n\n /**\n * Options provided to the\n * {@link OptionsBase.fetchMethod} function.\n */\n export interface FetcherOptions<K, V, FC = unknown> {\n signal: AbortSignal\n options: FetcherFetchOptions<K, V, FC>\n /**\n * Object provided in the {@link FetchOptions.context} option to\n * {@link LRUCache#fetch}\n */\n context: FC\n }\n\n /**\n * Occasionally, it may be useful to track the internal behavior of the\n * cache, particularly for logging, debugging, or for behavior within the\n * `fetchMethod`. To do this, you can pass a `status` object to the\n * {@link LRUCache#fetch}, {@link LRUCache#get}, {@link LRUCache#set},\n * {@link LRUCache#memo}, and {@link LRUCache#has} methods.\n *\n * The `status` option should be a plain JavaScript object. The following\n * fields will be set on it appropriately, depending on the situation.\n */\n export interface Status<V> {\n /**\n * The status of a set() operation.\n *\n * - add: the item was not found in the cache, and was added\n * - update: the item was in the cache, with the same value provided\n * - replace: the item was in the cache, and replaced\n * - miss: the item was not added to the cache for some reason\n */\n set?: 'add' | 'update' | 'replace' | 'miss'\n\n /**\n * the ttl stored for the item, or undefined if ttls are not used.\n */\n ttl?: Milliseconds\n\n /**\n * the start time for the item, or undefined if ttls are not used.\n */\n start?: Milliseconds\n\n /**\n * The timestamp used for TTL calculation\n */\n now?: Milliseconds\n\n /**\n * the remaining ttl for the item, or undefined if ttls are not used.\n */\n remainingTTL?: Milliseconds\n\n /**\n * The calculated size for the item, if sizes are used.\n */\n entrySize?: Size\n\n /**\n * The total calculated size of the cache, if sizes are used.\n */\n totalCalculatedSize?: Size\n\n /**\n * A flag indicating that the item was not stored, due to exceeding the\n * {@link OptionsBase.maxEntrySize}\n */\n maxEntrySizeExceeded?: true\n\n /**\n * The old value, specified in the case of `set:'update'` or\n * `set:'replace'`\n */\n oldValue?: V\n\n /**\n * The results of a {@link LRUCache#has} operation\n *\n * - hit: the item was found in the cache\n * - stale: the item was found in the cache, but is stale\n * - miss: the item was not found in the cache\n */\n has?: 'hit' | 'stale' | 'miss'\n\n /**\n * The status of a {@link LRUCache#fetch} operation.\n * Note that this can change as the underlying fetch() moves through\n * various states.\n *\n * - inflight: there is another fetch() for this key which is in process\n * - get: there is no {@link OptionsBase.fetchMethod}, so\n * {@link LRUCache#get} was called.\n * - miss: the item is not in cache, and will be fetched.\n * - hit: the item is in the cache, and was resolved immediately.\n * - stale: the item is in the cache, but stale.\n * - refresh: the item is in the cache, and not stale, but\n * {@link FetchOptions.forceRefresh} was specified.\n */\n fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n /**\n * The {@link OptionsBase.fetchMethod} was called\n */\n fetchDispatched?: true\n\n /**\n * The cached value was updated after a successful call to\n * {@link OptionsBase.fetchMethod}\n */\n fetchUpdated?: true\n\n /**\n * The reason for a fetch() rejection. Either the error raised by the\n * {@link OptionsBase.fetchMethod}, or the reason for an\n * AbortSignal.\n */\n fetchError?: Error\n\n /**\n * The fetch received an abort signal\n */\n fetchAborted?: true\n\n /**\n * The abort signal received was ignored, and the fetch was allowed to\n * continue.\n */\n fetchAbortIgnored?: true\n\n /**\n * The fetchMethod promise resolved successfully\n */\n fetchResolved?: true\n\n /**\n * The fetchMethod promise was rejected\n */\n fetchRejected?: true\n\n /**\n * The status of a {@link LRUCache#get} operation.\n *\n * - fetching: The item is currently being fetched. If a previous value\n * is present and allowed, that will be returned.\n * - stale: The item is in the cache, and is stale.\n * - hit: the item is in the cache\n * - miss: the item is not in the cache\n */\n get?: 'stale' | 'hit' | 'miss'\n\n /**\n * A fetch or get operation returned a stale value.\n */\n returnedStale?: true\n }\n\n /**\n * options which override the options set in the LRUCache constructor\n * when calling {@link LRUCache#fetch}.\n *\n * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n * {@link OptionsBase.noDeleteOnFetchRejection},\n * {@link OptionsBase.allowStaleOnFetchRejection},\n * {@link FetchOptions.forceRefresh}, and\n * {@link FetcherOptions.context}\n *\n * Any of these may be modified in the {@link OptionsBase.fetchMethod}\n * function, but the {@link GetOptions} fields will of course have no\n * effect, as the {@link LRUCache#get} call already happened by the time\n * the fetchMethod is called.\n */\n export interface FetcherFetchOptions<K, V, FC = unknown>\n extends Pick<\n OptionsBase<K, V, FC>,\n | 'allowStale'\n | 'updateAgeOnGet'\n | 'noDeleteOnStaleGet'\n | 'sizeCalculation'\n | 'ttl'\n | 'noDisposeOnSet'\n | 'noUpdateTTL'\n | 'noDeleteOnFetchRejection'\n | 'allowStaleOnFetchRejection'\n | 'ignoreFetchAbort'\n | 'allowStaleOnFetchAbort'\n > {\n status?: Status<V>\n size?: Size\n }\n\n /**\n * Options that may be passed to the {@link LRUCache#fetch} method.\n */\n export interface FetchOptions<K, V, FC>\n extends FetcherFetchOptions<K, V, FC> {\n /**\n * Set to true to force a re-load of the existing data, even if it\n * is not yet stale.\n */\n forceRefresh?: boolean\n /**\n * Context provided to the {@link OptionsBase.fetchMethod} as\n * the {@link FetcherOptions.context} param.\n *\n * If the FC type is specified as unknown (the default),\n * undefined or void, then this is optional. Otherwise, it will\n * be required.\n */\n context?: FC\n signal?: AbortSignal\n status?: Status<V>\n }\n /**\n * Options provided to {@link LRUCache#fetch} when the FC type is something\n * other than `unknown`, `undefined`, or `void`\n */\n export interface FetchOptionsWithContext<K, V, FC>\n extends FetchOptions<K, V, FC> {\n context: FC\n }\n /**\n * Options provided to {@link LRUCache#fetch} when the FC type is\n * `undefined` or `void`\n */\n export interface FetchOptionsNoContext<K, V>\n extends FetchOptions<K, V, undefined> {\n context?: undefined\n }\n\n export interface MemoOptions<K, V, FC = unknown>\n extends Pick<\n OptionsBase<K, V, FC>,\n | 'allowStale'\n | 'updateAgeOnGet'\n | 'noDeleteOnStaleGet'\n | 'sizeCalculation'\n | 'ttl'\n | 'noDisposeOnSet'\n | 'noUpdateTTL'\n | 'noDeleteOnFetchRejection'\n | 'allowStaleOnFetchRejection'\n | 'ignoreFetchAbort'\n | 'allowStaleOnFetchAbort'\n > {\n /**\n * Set to true to force a re-load of the existing data, even if it\n * is not yet stale.\n */\n forceRefresh?: boolean\n /**\n * Context provided to the {@link OptionsBase.memoMethod} as\n * the {@link MemoizerOptions.context} param.\n *\n * If the FC type is specified as unknown (the default),\n * undefined or void, then this is optional. Otherwise, it will\n * be required.\n */\n context?: FC\n status?: Status<V>\n }\n /**\n * Options provided to {@link LRUCache#memo} when the FC type is something\n * other than `unknown`, `undefined`, or `void`\n */\n export interface MemoOptionsWithContext<K, V, FC>\n extends MemoOptions<K, V, FC> {\n context: FC\n }\n /**\n * Options provided to {@link LRUCache#memo} when the FC type is\n * `undefined` or `void`\n */\n export interface MemoOptionsNoContext<K, V>\n extends MemoOptions<K, V, undefined> {\n context?: undefined\n }\n\n /**\n * Options provided to the\n * {@link OptionsBase.memoMethod} function.\n */\n export interface MemoizerOptions<K, V, FC = unknown> {\n options: MemoizerMemoOptions<K, V, FC>\n /**\n * Object provided in the {@link MemoOptions.context} option to\n * {@link LRUCache#memo}\n */\n context: FC\n }\n\n /**\n * options which override the options set in the LRUCache constructor\n * when calling {@link LRUCache#memo}.\n *\n * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n * {@link MemoOptions.forceRefresh}, and\n * {@link MemoerOptions.context}\n *\n * Any of these may be modified in the {@link OptionsBase.memoMethod}\n * function, but the {@link GetOptions} fields will of course have no\n * effect, as the {@link LRUCache#get} call already happened by the time\n * the memoMethod is called.\n */\n export interface MemoizerMemoOptions<K, V, FC = unknown>\n extends Pick<\n OptionsBase<K, V, FC>,\n | 'allowStale'\n | 'updateAgeOnGet'\n | 'noDeleteOnStaleGet'\n | 'sizeCalculation'\n | 'ttl'\n | 'noDisposeOnSet'\n | 'noUpdateTTL'\n > {\n status?: Status<V>\n size?: Size\n start?: Milliseconds\n }\n\n /**\n * Options that may be passed to the {@link LRUCache#has} method.\n */\n export interface HasOptions<K, V, FC>\n extends Pick<OptionsBase<K, V, FC>, 'updateAgeOnHas'> {\n status?: Status<V>\n }\n\n /**\n * Options that may be passed to the {@link LRUCache#get} method.\n */\n export interface GetOptions<K, V, FC>\n extends Pick<\n OptionsBase<K, V, FC>,\n 'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'\n > {\n status?: Status<V>\n }\n\n /**\n * Options that may be passed to the {@link LRUCache#peek} method.\n */\n export interface PeekOptions<K, V, FC>\n extends Pick<OptionsBase<K, V, FC>, 'allowStale'> {}\n\n /**\n * Options that may be passed to the {@link LRUCache#set} method.\n */\n export interface SetOptions<K, V, FC>\n extends Pick<\n OptionsBase<K, V, FC>,\n 'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'\n > {\n /**\n * If size tracking is enabled, then setting an explicit size\n * in the {@link LRUCache#set} call will prevent calling the\n * {@link OptionsBase.sizeCalculation} function.\n */\n size?: Size\n /**\n * If TTL tracking is enabled, then setting an explicit start\n * time in the {@link LRUCache#set} call will override the\n * default time from `performance.now()` or `Date.now()`.\n *\n * Note that it must be a valid value for whichever time-tracking\n * method is in use.\n */\n start?: Milliseconds\n status?: Status<V>\n }\n\n /**\n * The type signature for the {@link OptionsBase.fetchMethod} option.\n */\n export type Fetcher<K, V, FC = unknown> = (\n key: K,\n staleValue: V | undefined,\n options: FetcherOptions<K, V, FC>\n ) => Promise<V | undefined | void> | V | undefined | void\n\n /**\n * the type signature for the {@link OptionsBase.memoMethod} option.\n */\n export type Memoizer<K, V, FC = unknown> = (\n key: K,\n staleValue: V | undefined,\n options: MemoizerOptions<K, V, FC>\n ) => V\n\n /**\n * Options which may be passed to the {@link LRUCache} constructor.\n *\n * Most of these may be overridden in the various options that use\n * them.\n *\n * Despite all being technically optional, the constructor requires that\n * a cache is at minimum limited by one or more of {@link OptionsBase.max},\n * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.\n *\n * If {@link OptionsBase.ttl} is used alone, then it is strongly advised\n * (and in fact required by the type definitions here) that the cache\n * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially\n * unbounded storage.\n *\n * All options are also available on the {@link LRUCache} instance, making\n * it safe to pass an LRUCache instance as the options argumemnt to\n * make another empty cache of the same type.\n *\n * Some options are marked as read-only, because changing them after\n * instantiation is not safe. Changing any of the other options will of\n * course only have an effect on subsequent method calls.\n */\n export interface OptionsBase<K, V, FC> {\n /**\n * The maximum number of items to store in the cache before evicting\n * old entries. This is read-only on the {@link LRUCache} instance,\n * and may not be overridden.\n *\n * If set, then storage space will be pre-allocated at construction\n * time, and the cache will perform significantly faster.\n *\n * Note that significantly fewer items may be stored, if\n * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also\n * set.\n *\n * **It is strongly recommended to set a `max` to prevent unbounded growth\n * of the cache.**\n */\n max?: Count\n\n /**\n * Max time in milliseconds for items to live in cache before they are\n * considered stale. Note that stale items are NOT preemptively removed by\n * default, and MAY live in the cache, contributing to its LRU max, long\n * after they have expired, unless {@link OptionsBase.ttlAutopurge} is\n * set.\n *\n * If set to `0` (the default value), then that means \"do not track\n * TTL\", not \"expire immediately\".\n *\n * Also, as this cache is optimized for LRU/MRU operations, some of\n * the staleness/TTL checks will reduce performance, as they will incur\n * overhead by deleting items.\n *\n * This is not primarily a TTL cache, and does not make strong TTL\n * guarantees. There is no pre-emptive pruning of expired items, but you\n * _may_ set a TTL on the cache, and it will treat expired items as missing\n * when they are fetched, and delete them.\n *\n * Optional, but must be a non-negative integer in ms if specified.\n *\n * This may be overridden by passing an options object to `cache.set()`.\n *\n * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n * positive integer if set.\n *\n * Even if ttl tracking is enabled, **it is strongly recommended to set a\n * `max` to prevent unbounded growth of the cache.**\n *\n * If ttl tracking is enabled, and `max` and `maxSize` are not set,\n * and `ttlAutopurge` is not set, then a warning will be emitted\n * cautioning about the potential for unbounded memory consumption.\n * (The TypeScript definitions will also discourage this.)\n */\n ttl?: Milliseconds\n\n /**\n * Minimum amount of time in ms in which to check for staleness.\n * Defaults to 1, which means that the current time is checked\n * at most once per millisecond.\n *\n * Set to 0 to check the current time every time staleness is tested.\n * (This reduces performance, and is theoretically unnecessary.)\n *\n * Setting this to a higher value will improve performance somewhat\n * while using ttl tracking, albeit at the expense of keeping stale\n * items around a bit longer than their TTLs would indicate.\n *\n * @default 1\n */\n ttlResolution?: Milliseconds\n\n /**\n * Preemptively remove stale items from the cache.\n *\n * Note that this may *significantly* degrade performance, especially if\n * the cache is storing a large number of items. It is almost always best\n * to just leave the stale items in the cache, and let them fall out as new\n * items are added.\n *\n * Note that this means that {@link OptionsBase.allowStale} is a bit\n * pointless, as stale items will be deleted almost as soon as they\n * expire.\n *\n * Use with caution!\n */\n ttlAutopurge?: boolean\n\n /**\n * When using time-expiring entries with `ttl`, setting this to `true` will\n * make each item's age reset to 0 whenever it is retrieved from cache with\n * {@link LRUCache#get}, causing it to not expire. (It can still fall out\n * of cache based on recency of use, of course.)\n *\n * Has no effect if {@link OptionsBase.ttl} is not set.\n *\n * This may be overridden by passing an options object to `cache.get()`.\n */\n updateAgeOnGet?: boolean\n\n /**\n * When using time-expiring entries with `ttl`, setting this to `true` will\n * make each item's age reset to 0 whenever its presence in the cache is\n * checked with {@link LRUCache#has}, causing it to not expire. (It can\n * still fall out of cache based on recency of use, of course.)\n *\n * Has no effect if {@link OptionsBase.ttl} is not set.\n */\n updateAgeOnHas?: boolean\n\n /**\n * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return\n * stale data, if available.\n *\n * By default, if you set `ttl`, stale items will only be deleted from the\n * cache when you `get(key)`. That is, it's not preemptively pruning items,\n * unless {@link OptionsBase.ttlAutopurge} is set.\n *\n * If you set `allowStale:true`, it'll return the stale value *as well as*\n * deleting it. If you don't set this, then it'll return `undefined` when\n * you try to get a stale entry.\n *\n * Note that when a stale entry is fetched, _even if it is returned due to\n * `allowStale` being set_, it is removed from the cache immediately. You\n * can suppress this behavior by setting\n * {@link OptionsBase.noDeleteOnStaleGet}, either in the constructor, or in\n * the options provided to {@link LRUCache#get}.\n *\n * This may be overridden by passing an options object to `cache.get()`.\n * The `cache.has()` method will always return `false` for stale items.\n *\n * Only relevant if a ttl is set.\n */\n allowStale?: boolean\n\n /**\n * Function that is called on items when they are dropped from the\n * cache, as `dispose(value, key, reason)`.\n *\n * This can be handy if you want to close file descriptors or do\n * other cleanup tasks when items are no longer stored in the cache.\n *\n * **NOTE**: It is called _before_ the item has been fully removed\n * from the cache, so if you want to put it right back in, you need\n * to wait until the next tick. If you try to add it back in during\n * the `dispose()` function call, it will break things in subtle and\n * weird ways.\n *\n * Unlike several other options, this may _not_ be overridden by\n * passing an option to `set()`, for performance reasons.\n *\n * The `reason` will be one of the following strings, corresponding\n * to the reason for the item's deletion:\n *\n * - `evict` Item was evicted to make space for a new addition\n * - `set` Item was overwritten by a new value\n * - `expire` Item expired its TTL\n * - `fetch` Item was deleted due to a failed or aborted fetch, or a\n * fetchMethod returning `undefined.\n * - `delete` Item was removed by explicit `cache.delete(key)`,\n * `cache.clear()`, or `cache.set(key, undefined)`.\n */\n dispose?: Disposer<K, V>\n\n /**\n * The same as {@link OptionsBase.dispose}, but called *after* the entry\n * is completely removed and the cache is once again in a clean state.\n *\n * It is safe to add an item right back into the cache at this point.\n * However, note that it is *very* easy to inadvertently create infinite\n * recursion this way.\n */\n disposeAfter?: Disposer<K, V>\n\n /**\n * Set to true to suppress calling the\n * {@link OptionsBase.dispose} function if the entry key is\n * still accessible within the cache.\n *\n * This may be overridden by passing an options object to\n * {@link LRUCache#set}.\n *\n * Only relevant if `dispose` or `disposeAfter` are set.\n */\n noDisposeOnSet?: boolean\n\n /**\n * Boolean flag to tell the cache to not update the TTL when setting a new\n * value for an existing key (ie, when updating a value rather than\n * inserting a new value). Note that the TTL value is _always_ set (if\n * provided) when adding a new entry into the cache.\n *\n * Has no effect if a {@link OptionsBase.ttl} is not set.\n *\n * May be passed as an option to {@link LRUCache#set}.\n */\n noUpdateTTL?: boolean\n\n /**\n * Set to a positive integer to track the sizes of items added to the\n * cache, and automatically evict items in order to stay below this size.\n * Note that this may result in fewer than `max` items being stored.\n *\n * Attempting to add an item to the cache whose calculated size is greater\n * that this amount will be a no-op. The item will not be cached, and no\n * other items will be evicted.\n *\n * Optional, must be a positive integer if provided.\n *\n * Sets `maxEntrySize` to the same value, unless a different value is\n * provided for `maxEntrySize`.\n *\n * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n * positive integer if set.\n *\n * Even if size tracking is enabled, **it is strongly recommended to set a\n * `max` to prevent unbounded growth of the cache.**\n *\n * Note also that size tracking can negatively impact performance,\n * though for most cases, only minimally.\n */\n maxSize?: Size\n\n /**\n * The maximum allowed size for any single item in the cache.\n *\n * If a larger item is passed to {@link LRUCache#set} or returned by a\n * {@link OptionsBase.fetchMethod} or {@link OptionsBase.memoMethod}, then\n * it will not be stored in the cache.\n *\n * Attempting to add an item whose calculated size is greater than\n * this amount will not cache the item or evict any old items, but\n * WILL delete an existing value if one is already present.\n *\n * Optional, must be a positive integer if provided. Defaults to\n * the value of `maxSize` if provided.\n */\n maxEntrySize?: Size\n\n /**\n * A function that returns a number indicating the item's size.\n *\n * Requires {@link OptionsBase.maxSize} to be set.\n *\n * If not provided, and {@link OptionsBase.maxSize} or\n * {@link OptionsBase.maxEntrySize} are set, then all\n * {@link LRUCache#set} calls **must** provide an explicit\n * {@link SetOptions.size} or sizeCalculation param.\n */\n sizeCalculation?: SizeCalculator<K, V>\n\n /**\n * Method that provides the implementation for {@link LRUCache#fetch}\n *\n * ```ts\n * fetchMethod(key, staleValue, { signal, options, context })\n * ```\n *\n * If `fetchMethod` is not provided, then `cache.fetch(key)` is equivalent\n * to `Promise.resolve(cache.get(key))`.\n *\n * If at any time, `signal.aborted` is set to `true`, or if the\n * `signal.onabort` method is called, or if it emits an `'abort'` event\n * which you can listen to with `addEventListener`, then that means that\n * the fetch should be abandoned. This may be passed along to async\n * functions aware of AbortController/AbortSignal behavior.\n *\n * The `fetchMethod` should **only** return `undefined` or a Promise\n * resolving to `undefined` if the AbortController signaled an `abort`\n * event. In all other cases, it should return or resolve to a value\n * suitable for adding to the cache.\n *\n * The `options` object is a union of the options that may be provided to\n * `set()` and `get()`. If they are modified, then that will result in\n * modifying the settings to `cache.set()` when the value is resolved, and\n * in the case of\n * {@link OptionsBase.noDeleteOnFetchRejection} and\n * {@link OptionsBase.allowStaleOnFetchRejection}, the handling of\n * `fetchMethod` failures.\n *\n * For example, a DNS cache may update the TTL based on the value returned\n * from a remote DNS server by changing `options.ttl` in the `fetchMethod`.\n */\n fetchMethod?: Fetcher<K, V, FC>\n\n /**\n * Method that provides the implementation for {@link LRUCache#memo}\n */\n memoMethod?: Memoizer<K, V, FC>\n\n /**\n * Set to true to suppress the deletion of stale data when a\n * {@link OptionsBase.fetchMethod} returns a rejected promise.\n */\n noDeleteOnFetchRejection?: boolean\n\n /**\n * Do not delete stale items when they are retrieved with\n * {@link LRUCache#get}.\n *\n * Note that the `get` return value will still be `undefined`\n * unless {@link OptionsBase.allowStale} is true.\n *\n * When using time-expiring entries with `ttl`, by default stale\n * items will be removed from the cache when the key is accessed\n * with `cache.get()`.\n *\n * Setting this option will cause stale items to remain in the cache, until\n * they are explicitly deleted with `cache.delete(key)`, or retrieved with\n * `noDeleteOnStaleGet` set to `false`.\n *\n * This may be overridden by passing an options object to `cache.get()`.\n *\n * Only relevant if a ttl is used.\n */\n noDeleteOnStaleGet?: boolean\n\n /**\n * Set to true to allow returning stale data when a\n * {@link OptionsBase.fetchMethod} throws an error or returns a rejected\n * promise.\n *\n * This differs from using {@link OptionsBase.allowStale} in that stale\n * data will ONLY be returned in the case that the {@link LRUCache#fetch}\n * fails, not any other times.\n *\n * If a `fetchMethod` fails, and there is no stale value available, the\n * `fetch()` will resolve to `undefined`. Ie, all `fetchMethod` errors are\n * suppressed.\n *\n * Implies `noDeleteOnFetchRejection`.\n *\n * This may be set in calls to `fetch()`, or defaulted on the constructor,\n * or overridden by modifying the options object in the `fetchMethod`.\n */\n allowStaleOnFetchRejection?: boolean\n\n /**\n * Set to true to return a stale value from the cache when the\n * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches\n * an `'abort'` event, whether user-triggered, or due to internal cache\n * behavior.\n *\n * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying\n * {@link OptionsBase.fetchMethod} will still be considered canceled, and\n * any value it returns will be ignored and not cached.\n *\n * Caveat: since fetches are aborted when a new value is explicitly\n * set in the cache, this can lead to fetch returning a stale value,\n * since that was the fallback value _at the moment the `fetch()` was\n * initiated_, even though the new updated value is now present in\n * the cache.\n *\n * For example:\n *\n * ```ts\n * const cache = new LRUCache<string, any>({\n * ttl: 100,\n * fetchMethod: async (url, oldValue, { signal }) => {\n * const res = await fetch(url, { signal })\n * return await res.json()\n * }\n * })\n * cache.set('https://example.com/', { some: 'data' })\n * // 100ms go by...\n * const result = cache.fetch('https://example.com/')\n * cache.set('https://example.com/', { other: 'thing' })\n * console.log(await result) // { some: 'data' }\n * console.log(cache.get('https://example.com/')) // { other: 'thing' }\n * ```\n */\n allowStaleOnFetchAbort?: boolean\n\n /**\n * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n * object passed to {@link OptionsBase.fetchMethod}, and still cache the\n * resulting resolution value, as long as it is not `undefined`.\n *\n * When used on its own, this means aborted {@link LRUCache#fetch} calls\n * are not immediately resolved or rejected when they are aborted, and\n * instead take the full time to await.\n *\n * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted\n * {@link LRUCache#fetch} calls will resolve immediately to their stale\n * cached value or `undefined`, and will continue to process and eventually\n * update the cache when they resolve, as long as the resulting value is\n * not `undefined`, thus supporting a \"return stale on timeout while\n * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n *\n * For example:\n *\n * ```ts\n * const c = new LRUCache({\n * ttl: 100,\n * ignoreFetchAbort: true,\n * allowStaleOnFetchAbort: true,\n * fetchMethod: async (key, oldValue, { signal }) => {\n * // note: do NOT pass the signal to fetch()!\n * // let's say this fetch can take a long time.\n * const res = await fetch(`https://slow-backend-server/${key}`)\n * return await res.json()\n * },\n * })\n *\n * // this will return the stale value after 100ms, while still\n * // updating in the background for next time.\n * const val = await c.fetch('key', { signal: AbortSignal.timeout(100) })\n * ```\n *\n * **Note**: regardless of this setting, an `abort` event _is still\n * emitted on the `AbortSignal` object_, so may result in invalid results\n * when passed to other underlying APIs that use AbortSignals.\n *\n * This may be overridden in the {@link OptionsBase.fetchMethod} or the\n * call to {@link LRUCache#fetch}.\n */\n ignoreFetchAbort?: boolean\n }\n\n export interface OptionsMaxLimit<K, V, FC>\n extends OptionsBase<K, V, FC> {\n max: Count\n }\n export interface OptionsTTLLimit<K, V, FC>\n extends OptionsBase<K, V, FC> {\n ttl: Milliseconds\n ttlAutopurge: boolean\n }\n export interface OptionsSizeLimit<K, V, FC>\n extends OptionsBase<K, V, FC> {\n maxSize: Size\n }\n\n /**\n * The valid safe options for the {@link LRUCache} constructor\n */\n export type Options<K, V, FC> =\n | OptionsMaxLimit<K, V, FC>\n | OptionsSizeLimit<K, V, FC>\n | OptionsTTLLimit<K, V, FC>\n\n /**\n * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump},\n * and returned by {@link LRUCache#info}.\n */\n export interface Entry<V> {\n value: V\n ttl?: Milliseconds\n size?: Size\n start?: Milliseconds\n }\n}\n\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache<K extends {}, V extends {}, FC = unknown>\n implements Map<K, V>\n{\n // options that cannot be changed without disaster\n readonly #max: LRUCache.Count\n readonly #maxSize: LRUCache.Size\n readonly #dispose?: LRUCache.Disposer<K, V>\n readonly #disposeAfter?: LRUCache.Disposer<K, V>\n readonly #fetchMethod?: LRUCache.Fetcher<K, V, FC>\n readonly #memoMethod?: LRUCache.Memoizer<K, V, FC>\n\n /**\n * {@link LRUCache.OptionsBase.ttl}\n */\n ttl: LRUCache.Milliseconds\n\n /**\n * {@link LRUCache.OptionsBase.ttlResolution}\n */\n ttlResolution: LRUCache.Milliseconds\n /**\n * {@link LRUCache.OptionsBase.ttlAutopurge}\n */\n ttlAutopurge: boolean\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnGet}\n */\n updateAgeOnGet: boolean\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnHas}\n */\n updateAgeOnHas: boolean\n /**\n * {@link LRUCache.OptionsBase.allowStale}\n */\n allowStale: boolean\n\n /**\n * {@link LRUCache.OptionsBase.noDisposeOnSet}\n */\n noDisposeOnSet: boolean\n /**\n * {@link LRUCache.OptionsBase.noUpdateTTL}\n */\n noUpdateTTL: boolean\n /**\n * {@link LRUCache.OptionsBase.maxEntrySize}\n */\n maxEntrySize: LRUCache.Size\n /**\n * {@link LRUCache.OptionsBase.sizeCalculation}\n */\n sizeCalculation?: LRUCache.SizeCalculator<K, V>\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n */\n noDeleteOnFetchRejection: boolean\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n */\n noDeleteOnStaleGet: boolean\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n */\n allowStaleOnFetchAbort: boolean\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n */\n allowStaleOnFetchRejection: boolean\n /**\n * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n */\n ignoreFetchAbort: boolean\n\n // computed properties\n #size: LRUCache.Count\n #calculatedSize: LRUCache.Size\n #keyMap: Map<K, Index>\n #keyList: (K | undefined)[]\n #valList: (V | BackgroundFetch<V> | undefined)[]\n #next: NumberArray\n #prev: NumberArray\n #head: Index\n #tail: Index\n #free: StackLike\n #disposed?: DisposeTask<K, V>[]\n #sizes?: ZeroArray\n #starts?: ZeroArray\n #ttls?: ZeroArray\n\n #hasDispose: boolean\n #hasFetchMethod: boolean\n #hasDisposeAfter: boolean\n\n /**\n * Do not call this method unless you need to inspect the\n * inner workings of the cache. If anything returned by this\n * object is modified in any way, strange breakage may occur.\n *\n * These fields are private for a reason!\n *\n * @internal\n */\n static unsafeExposeInternals<\n K extends {},\n V extends {},\n FC extends unknown = unknown\n >(c: LRUCache<K, V, FC>) {\n return {\n // properties\n starts: c.#starts,\n ttls: c.#ttls,\n sizes: c.#sizes,\n keyMap: c.#keyMap as Map<K, number>,\n keyList: c.#keyList,\n valList: c.#valList,\n next: c.#next,\n prev: c.#prev,\n get head() {\n return c.#head\n },\n get tail() {\n return c.#tail\n },\n free: c.#free,\n // methods\n isBackgroundFetch: (p: any) => c.#isBackgroundFetch(p),\n backgroundFetch: (\n k: K,\n index: number | undefined,\n options: LRUCache.FetchOptions<K, V, FC>,\n context: any\n ): BackgroundFetch<V> =>\n c.#backgroundFetch(\n k,\n index as Index | undefined,\n options,\n context\n ),\n moveToTail: (index: number): void =>\n c.#moveToTail(index as Index),\n indexes: (options?: { allowStale: boolean }) =>\n c.#indexes(options),\n rindexes: (options?: { allowStale: boolean }) =>\n c.#rindexes(options),\n isStale: (index: number | undefined) =>\n c.#isStale(index as Index),\n }\n }\n\n // Protected read-only members\n\n /**\n * {@link LRUCache.OptionsBase.max} (read-only)\n */\n get max(): LRUCache.Count {\n return this.#max\n }\n /**\n * {@link LRUCache.OptionsBase.maxSize} (read-only)\n */\n get maxSize(): LRUCache.Count {\n return this.#maxSize\n }\n /**\n * The total computed size of items in the cache (read-only)\n */\n get calculatedSize(): LRUCache.Size {\n return this.#calculatedSize\n }\n /**\n * The number of items stored in the cache (read-only)\n */\n get size(): LRUCache.Count {\n return this.#size\n }\n /**\n * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n */\n get fetchMethod(): LRUCache.Fetcher<K, V, FC> | undefined {\n return this.#fetchMethod\n }\n get memoMethod(): LRUCache.Memoizer<K, V, FC> | undefined {\n return this.#memoMethod\n }\n /**\n * {@link LRUCache.OptionsBase.dispose} (read-only)\n */\n get dispose() {\n return this.#dispose\n }\n /**\n * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n */\n get disposeAfter() {\n return this.#disposeAfter\n }\n\n constructor(\n options: LRUCache.Options<K, V, FC> | LRUCache<K, V, FC>\n ) {\n const {\n max = 0,\n ttl,\n ttlResolution = 1,\n ttlAutopurge,\n updateAgeOnGet,\n updateAgeOnHas,\n allowStale,\n dispose,\n disposeAfter,\n noDisposeOnSet,\n noUpdateTTL,\n maxSize = 0,\n maxEntrySize = 0,\n sizeCalculation,\n fetchMethod,\n memoMethod,\n noDeleteOnFetchRejection,\n noDeleteOnStaleGet,\n allowStaleOnFetchRejection,\n allowStaleOnFetchAbort,\n ignoreFetchAbort,\n } = options\n\n if (max !== 0 && !isPosInt(max)) {\n throw new TypeError('max option must be a nonnegative integer')\n }\n\n const UintArray = max ? getUintArray(max) : Array\n if (!UintArray) {\n throw new Error('invalid max value: ' + max)\n }\n\n this.#max = max\n this.#maxSize = maxSize\n this.maxEntrySize = maxEntrySize || this.#maxSize\n this.sizeCalculation = sizeCalculation\n if (this.sizeCalculation) {\n if (!this.#maxSize && !this.maxEntrySize) {\n throw new TypeError(\n 'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n )\n }\n if (typeof this.sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation set to non-function')\n }\n }\n\n if (\n memoMethod !== undefined &&\n typeof memoMethod !== 'function'\n ) {\n throw new TypeError('memoMethod must be a function if defined')\n }\n this.#memoMethod = memoMethod\n\n if (\n fetchMethod !== undefined &&\n typeof fetchMethod !== 'function'\n ) {\n throw new TypeError(\n 'fetchMethod must be a function if specified'\n )\n }\n this.#fetchMethod = fetchMethod\n this.#hasFetchMethod = !!fetchMethod\n\n this.#keyMap = new Map()\n this.#keyList = new Array(max).fill(undefined)\n this.#valList = new Array(max).fill(undefined)\n this.#next = new UintArray(max)\n this.#prev = new UintArray(max)\n this.#head = 0 as Index\n this.#tail = 0 as Index\n this.#free = Stack.create(max)\n this.#size = 0\n this.#calculatedSize = 0\n\n if (typeof dispose === 'function') {\n this.#dispose = dispose\n }\n if (typeof disposeAfter === 'function') {\n this.#disposeAfter = disposeAfter\n this.#disposed = []\n } else {\n this.#disposeAfter = undefined\n this.#disposed = undefined\n }\n this.#hasDispose = !!this.#dispose\n this.#hasDisposeAfter = !!this.#disposeAfter\n\n this.noDisposeOnSet = !!noDisposeOnSet\n this.noUpdateTTL = !!noUpdateTTL\n this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n this.ignoreFetchAbort = !!ignoreFetchAbort\n\n // NB: maxEntrySize is set to maxSize if it's set\n if (this.maxEntrySize !== 0) {\n if (this.#maxSize !== 0) {\n if (!isPosInt(this.#maxSize)) {\n throw new TypeError(\n 'maxSize must be a positive integer if specified'\n )\n }\n }\n if (!isPosInt(this.maxEntrySize)) {\n throw new TypeError(\n 'maxEntrySize must be a positive integer if specified'\n )\n }\n this.#initializeSizeTracking()\n }\n\n this.allowStale = !!allowStale\n this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n this.updateAgeOnGet = !!updateAgeOnGet\n this.updateAgeOnHas = !!updateAgeOnHas\n this.ttlResolution =\n isPosInt(ttlResolution) || ttlResolution === 0\n ? ttlResolution\n : 1\n this.ttlAutopurge = !!ttlAutopurge\n this.ttl = ttl || 0\n if (this.ttl) {\n if (!isPosInt(this.ttl)) {\n throw new TypeError(\n 'ttl must be a positive integer if specified'\n )\n }\n this.#initializeTTLTracking()\n }\n\n // do not allow completely unbounded caches\n if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n throw new TypeError(\n 'At least one of max, maxSize, or ttl is required'\n )\n }\n if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n const code = 'LRU_CACHE_UNBOUNDED'\n if (shouldWarn(code)) {\n warned.add(code)\n const msg =\n 'TTL caching without ttlAutopurge, max, or maxSize can ' +\n 'result in unbounded memory consumption.'\n emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n }\n }\n }\n\n /**\n * Return the number of ms left in the item's TTL. If item is not in cache,\n * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n */\n getRemainingTTL(key: K) {\n return this.#keyMap.has(key) ? Infinity : 0\n }\n\n #initializeTTLTracking() {\n const ttls = new ZeroArray(this.#max)\n const starts = new ZeroArray(this.#max)\n this.#ttls = ttls\n this.#starts = starts\n\n this.#setItemTTL = (index, ttl, start = perf.now()) => {\n starts[index] = ttl !== 0 ? start : 0\n ttls[index] = ttl\n if (ttl !== 0 && this.ttlAutopurge) {\n const t = setTimeout(() => {\n if (this.#isStale(index)) {\n this.#delete(this.#keyList[index] as K, 'expire')\n }\n }, ttl + 1)\n // unref() not supported on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref()\n }\n /* c8 ignore stop */\n }\n }\n\n this.#updateItemAge = index => {\n starts[index] = ttls[index] !== 0 ? perf.now() : 0\n }\n\n this.#statusTTL = (status, index) => {\n if (ttls[index]) {\n const ttl = ttls[index]\n const start = starts[index]\n /* c8 ignore next */\n if (!ttl || !start) return\n status.ttl = ttl\n status.start = start\n status.now = cachedNow || getNow()\n const age = status.now - start\n status.remainingTTL = ttl - age\n }\n }\n\n // debounce calls to perf.now() to 1s so we're not hitting\n // that costly call repeatedly.\n let cachedNow = 0\n const getNow = () => {\n const n = perf.now()\n if (this.ttlResolution > 0) {\n cachedNow = n\n const t = setTimeout(\n () => (cachedNow = 0),\n this.ttlResolution\n )\n // not available on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref()\n }\n /* c8 ignore stop */\n }\n return n\n }\n\n this.getRemainingTTL = key => {\n const index = this.#keyMap.get(key)\n if (index === undefined) {\n return 0\n }\n const ttl = ttls[index]\n const start = starts[index]\n if (!ttl || !start) {\n return Infinity\n }\n const age = (cachedNow || getNow()) - start\n return ttl - age\n }\n\n this.#isStale = index => {\n const s = starts[index]\n const t = ttls[index]\n return !!t && !!s && (cachedNow || getNow()) - s > t\n }\n }\n\n // conditionally set private methods related to TTL\n #updateItemAge: (index: Index) => void = () => {}\n #statusTTL: (status: LRUCache.Status<V>, index: Index) => void =\n () => {}\n #setItemTTL: (\n index: Index,\n ttl: LRUCache.Milliseconds,\n start?: LRUCache.Milliseconds\n // ignore because we never call this if we're not already in TTL mode\n /* c8 ignore start */\n ) => void = () => {}\n /* c8 ignore stop */\n\n #isStale: (index: Index) => boolean = () => false\n\n #initializeSizeTracking() {\n const sizes = new ZeroArray(this.#max)\n this.#calculatedSize = 0\n this.#sizes = sizes\n this.#removeItemSize = index => {\n this.#calculatedSize -= sizes[index] as number\n sizes[index] = 0\n }\n this.#requireSize = (k, v, size, sizeCalculation) => {\n // provisionally accept background fetches.\n // actual value size will be checked when they return.\n if (this.#isBackgroundFetch(v)) {\n return 0\n }\n if (!isPosInt(size)) {\n if (sizeCalculation) {\n if (typeof sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation must be a function')\n }\n size = sizeCalculation(v, k)\n if (!isPosInt(size)) {\n throw new TypeError(\n 'sizeCalculation return invalid (expect positive integer)'\n )\n }\n } else {\n throw new TypeError(\n 'invalid size value (must be positive integer). ' +\n 'When maxSize or maxEntrySize is used, sizeCalculation ' +\n 'or size must be set.'\n )\n }\n }\n return size\n }\n this.#addItemSize = (\n index: Index,\n size: LRUCache.Size,\n status?: LRUCache.Status<V>\n ) => {\n sizes[index] = size\n if (this.#maxSize) {\n const maxSize = this.#maxSize - (sizes[index] as number)\n while (this.#calculatedSize > maxSize) {\n this.#evict(true)\n }\n }\n this.#calculatedSize += sizes[index] as number\n if (status) {\n status.entrySize = size\n status.totalCalculatedSize = this.#calculatedSize\n }\n }\n }\n\n #removeItemSize: (index: Index) => void = _i => {}\n #addItemSize: (\n index: Index,\n size: LRUCache.Size,\n status?: LRUCache.Status<V>\n ) => void = (_i, _s, _st) => {}\n #requireSize: (\n k: K,\n v: V | BackgroundFetch<V>,\n size?: LRUCache.Size,\n sizeCalculation?: LRUCache.SizeCalculator<K, V>\n ) => LRUCache.Size = (\n _k: K,\n _v: V | BackgroundFetch<V>,\n size?: LRUCache.Size,\n sizeCalculation?: LRUCache.SizeCalculator<K, V>\n ) => {\n if (size || sizeCalculation) {\n throw new TypeError(\n 'cannot set size without setting maxSize or maxEntrySize on cache'\n )\n }\n return 0\n };\n\n *#indexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#tail; true; ) {\n if (!this.#isValidIndex(i)) {\n break\n }\n if (allowStale || !this.#isStale(i)) {\n yield i\n }\n if (i === this.#head) {\n break\n } else {\n i = this.#prev[i] as Index\n }\n }\n }\n }\n\n *#rindexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#head; true; ) {\n if (!this.#isValidIndex(i)) {\n break\n }\n if (allowStale || !this.#isStale(i)) {\n yield i\n }\n if (i === this.#tail) {\n break\n } else {\n i = this.#next[i] as Index\n }\n }\n }\n }\n\n #isValidIndex(index: Index) {\n return (\n index !== undefined &&\n this.#keyMap.get(this.#keyList[index] as K) === index\n )\n }\n\n /**\n * Return a generator yielding `[key, value]` pairs,\n * in order from most recently used to least recently used.\n */\n *entries() {\n for (const i of this.#indexes()) {\n if (\n this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])\n ) {\n yield [this.#keyList[i], this.#valList[i]] as [K, V]\n }\n }\n }\n\n /**\n * Inverse order version of {@link LRUCache.entries}\n *\n * Return a generator yielding `[key, value]` pairs,\n * in order from least recently used to most recently used.\n */\n *rentries() {\n for (const i of this.#rindexes()) {\n if (\n this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])\n ) {\n yield [this.#keyList[i], this.#valList[i]]\n }\n }\n }\n\n /**\n * Return a generator yielding the keys in the cache,\n * in order from most recently used to least recently used.\n */\n *keys() {\n for (const i of this.#indexes()) {\n const k = this.#keyList[i]\n if (\n k !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])\n ) {\n yield k\n }\n }\n }\n\n /**\n * Inverse order version of {@link LRUCache.keys}\n *\n * Return a generator yielding the keys in the cache,\n * in order from least recently used to most recently used.\n */\n *rkeys() {\n for (const i of this.#rindexes()) {\n const k = this.#keyList[i]\n if (\n k !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])\n ) {\n yield k\n }\n }\n }\n\n /**\n * Return a generator yielding the values in the cache,\n * in order from most recently used to least recently used.\n */\n *values() {\n for (const i of this.#indexes()) {\n const v = this.#valList[i]\n if (\n v !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])\n ) {\n yield this.#valList[i] as V\n }\n }\n }\n\n /**\n * Inverse order version of {@link LRUCache.values}\n *\n * Return a generator yielding the values in the cache,\n * in order from least recently used to most recently used.\n */\n *rvalues() {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i]\n if (\n v !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])\n ) {\n yield this.#valList[i]\n }\n }\n }\n\n /**\n * Iterating over the cache itself yields the same results as\n * {@link LRUCache.entries}\n */\n [Symbol.iterator]() {\n return this.entries()\n }\n\n /**\n * A String value that is used in the creation of the default string\n * description of an object. Called by the built-in method\n * `Object.prototype.toString`.\n */\n [Symbol.toStringTag] = 'LRUCache'\n\n /**\n * Find a value for which the supplied fn method returns a truthy value,\n * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n */\n find(\n fn: (v: V, k: K, self: LRUCache<K, V, FC>) => boolean,\n getOptions: LRUCache.GetOptions<K, V, FC> = {}\n ) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i]\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v\n if (value === undefined) continue\n if (fn(value, this.#keyList[i] as K, this)) {\n return this.get(this.#keyList[i] as K, getOptions)\n }\n }\n }\n\n /**\n * Call the supplied function on each item in the cache, in order from most\n * recently used to least recently used.\n *\n * `fn` is called as `fn(value, key, cache)`.\n *\n * If `thisp` is provided, function will be called in the `this`-context of\n * the provided object, or the cache if no `thisp` object is provided.\n *\n * Does not update age or recenty of use, or iterate over stale values.\n */\n forEach(\n fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n thisp: any = this\n ) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i]\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v\n if (value === undefined) continue\n fn.call(thisp, value, this.#keyList[i] as K, this)\n }\n }\n\n /**\n * The same as {@link LRUCache.forEach} but items are iterated over in\n * reverse order. (ie, less recently used items are iterated over first.)\n */\n rforEach(\n fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n thisp: any = this\n ) {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i]\n const value = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v\n if (value === undefined) continue\n fn.call(thisp, value, this.#keyList[i] as K, this)\n }\n }\n\n /**\n * Delete any stale entries. Returns true if anything was removed,\n * false otherwise.\n */\n purgeStale() {\n let deleted = false\n for (const i of this.#rindexes({ allowStale: true })) {\n if (this.#isStale(i)) {\n this.#delete(this.#keyList[i] as K, 'expire')\n deleted = true\n }\n }\n return deleted\n }\n\n /**\n * Get the extended info about a given entry, to get its value, size, and\n * TTL info simultaneously. Returns `undefined` if the key is not present.\n *\n * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n * serialization, the `start` value is always the current timestamp, and the\n * `ttl` is a calculated remaining time to live (negative if expired).\n *\n * Always returns stale values, if their info is found in the cache, so be\n * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n * if relevant.\n */\n info(key: K): LRUCache.Entry<V> | undefined {\n const i = this.#keyMap.get(key)\n if (i === undefined) return undefined\n const v = this.#valList[i]\n const value: V | undefined = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v\n if (value === undefined) return undefined\n const entry: LRUCache.Entry<V> = { value }\n if (this.#ttls && this.#starts) {\n const ttl = this.#ttls[i]\n const start = this.#starts[i]\n if (ttl && start) {\n const remain = ttl - (perf.now() - start)\n entry.ttl = remain\n entry.start = Date.now()\n }\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i]\n }\n return entry\n }\n\n /**\n * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n * passed to {@link LRLUCache#load}.\n *\n * The `start` fields are calculated relative to a portable `Date.now()`\n * timestamp, even if `performance.now()` is available.\n *\n * Stale entries are always included in the `dump`, even if\n * {@link LRUCache.OptionsBase.allowStale} is false.\n *\n * Note: this returns an actual array, not a generator, so it can be more\n * easily passed around.\n */\n dump() {\n const arr: [K, LRUCache.Entry<V>][] = []\n for (const i of this.#indexes({ allowStale: true })) {\n const key = this.#keyList[i]\n const v = this.#valList[i]\n const value: V | undefined = this.#isBackgroundFetch(v)\n ? v.__staleWhileFetching\n : v\n if (value === undefined || key === undefined) continue\n const entry: LRUCache.Entry<V> = { value }\n if (this.#ttls && this.#starts) {\n entry.ttl = this.#ttls[i]\n // always dump the start relative to a portable timestamp\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = perf.now() - (this.#starts[i] as number)\n entry.start = Math.floor(Date.now() - age)\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i]\n }\n arr.unshift([key, entry])\n }\n return arr\n }\n\n /**\n * Reset the cache and load in the items in entries in the order listed.\n *\n * The shape of the resulting cache may be different if the same options are\n * not used in both caches.\n *\n * The `start` fields are assumed to be calculated relative to a portable\n * `Date.now()` timestamp, even if `performance.now()` is available.\n */\n load(arr: [K, LRUCache.Entry<V>][]) {\n this.clear()\n for (const [key, entry] of arr) {\n if (entry.start) {\n // entry.start is a portable timestamp, but we may be using\n // node's performance.now(), so calculate the offset, so that\n // we get the intended remaining TTL, no matter how long it's\n // been on ice.\n //\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = Date.now() - entry.start\n entry.start = perf.now() - age\n }\n this.set(key, entry.value, entry)\n }\n }\n\n /**\n * Add a value to the cache.\n *\n * Note: if `undefined` is specified as a value, this is an alias for\n * {@link LRUCache#delete}\n *\n * Fields on the {@link LRUCache.SetOptions} options param will override\n * their corresponding values in the constructor options for the scope\n * of this single `set()` operation.\n *\n * If `start` is provided, then that will set the effective start\n * time for the TTL calculation. Note that this must be a previous\n * value of `performance.now()` if supported, or a previous value of\n * `Date.now()` if not.\n *\n * Options object may also include `size`, which will prevent\n * calling the `sizeCalculation` function and just use the specified\n * number if it is a positive integer, and `noDisposeOnSet` which\n * will prevent calling a `dispose` function in the case of\n * overwrites.\n *\n * If the `size` (or return value of `sizeCalculation`) for a given\n * entry is greater than `maxEntrySize`, then the item will not be\n * added to the cache.\n *\n * Will update the recency of the entry.\n *\n * If the value is `undefined`, then this is an alias for\n * `cache.delete(key)`. `undefined` is never stored in the cache.\n */\n set(\n k: K,\n v: V | BackgroundFetch<V> | undefined,\n setOptions: LRUCache.SetOptions<K, V, FC> = {}\n ) {\n if (v === undefined) {\n this.delete(k)\n return this\n }\n const {\n ttl = this.ttl,\n start,\n noDisposeOnSet = this.noDisposeOnSet,\n sizeCalculation = this.sizeCalculation,\n status,\n } = setOptions\n let { noUpdateTTL = this.noUpdateTTL } = setOptions\n\n const size = this.#requireSize(\n k,\n v,\n setOptions.size || 0,\n sizeCalculation\n )\n // if the item doesn't fit, don't do anything\n // NB: maxEntrySize set to maxSize by default\n if (this.maxEntrySize && size > this.maxEntrySize) {\n if (status) {\n status.set = 'miss'\n status.maxEntrySizeExceeded = true\n }\n // have to delete, in case something is there already.\n this.#delete(k, 'set')\n return this\n }\n let index = this.#size === 0 ? undefined : this.#keyMap.get(k)\n if (index === undefined) {\n // addition\n index = (\n this.#size === 0\n ? this.#tail\n : this.#free.length !== 0\n ? this.#free.pop()\n : this.#size === this.#max\n ? this.#evict(false)\n : this.#size\n ) as Index\n this.#keyList[index] = k\n this.#valList[index] = v\n this.#keyMap.set(k, index)\n this.#next[this.#tail] = index\n this.#prev[index] = this.#tail\n this.#tail = index\n this.#size++\n this.#addItemSize(index, size, status)\n if (status) status.set = 'add'\n noUpdateTTL = false\n } else {\n // update\n this.#moveToTail(index)\n const oldVal = this.#valList[index] as V | BackgroundFetch<V>\n if (v !== oldVal) {\n if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n oldVal.__abortController.abort(new Error('replaced'))\n const { __staleWhileFetching: s } = oldVal\n if (s !== undefined && !noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(s as V, k, 'set')\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([s as V, k, 'set'])\n }\n }\n } else if (!noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(oldVal as V, k, 'set')\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([oldVal as V, k, 'set'])\n }\n }\n this.#removeItemSize(index)\n this.#addItemSize(index, size, status)\n this.#valList[index] = v\n if (status) {\n status.set = 'replace'\n const oldValue =\n oldVal && this.#isBackgroundFetch(oldVal)\n ? oldVal.__staleWhileFetching\n : oldVal\n if (oldValue !== undefined) status.oldValue = oldValue\n }\n } else if (status) {\n status.set = 'update'\n }\n }\n if (ttl !== 0 && !this.#ttls) {\n this.#initializeTTLTracking()\n }\n if (this.#ttls) {\n if (!noUpdateTTL) {\n this.#setItemTTL(index, ttl, start)\n }\n if (status) this.#statusTTL(status, index)\n }\n if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed\n let task: DisposeTask<K, V> | undefined\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task)\n }\n }\n return this\n }\n\n /**\n * Evict the least recently used item, returning its value or\n * `undefined` if cache is empty.\n */\n pop(): V | undefined {\n try {\n while (this.#size) {\n const val = this.#valList[this.#head]\n this.#evict(true)\n if (this.#isBackgroundFetch(val)) {\n if (val.__staleWhileFetching) {\n return val.__staleWhileFetching\n }\n } else if (val !== undefined) {\n return val\n }\n }\n } finally {\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed\n let task: DisposeTask<K, V> | undefined\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task)\n }\n }\n }\n }\n\n #evict(free: boolean) {\n const head = this.#head\n const k = this.#keyList[head] as K\n const v = this.#valList[head] as V\n if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('evicted'))\n } else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, 'evict')\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, 'evict'])\n }\n }\n this.#removeItemSize(head)\n // if we aren't about to use the index, then null these out\n if (free) {\n this.#keyList[head] = undefined\n this.#valList[head] = undefined\n this.#free.push(head)\n }\n if (this.#size === 1) {\n this.#head = this.#tail = 0 as Index\n this.#free.length = 0\n } else {\n this.#head = this.#next[head] as Index\n }\n this.#keyMap.delete(k)\n this.#size--\n return head\n }\n\n /**\n * Check if a key is in the cache, without updating the recency of use.\n * Will return false if the item is stale, even though it is technically\n * in the cache.\n *\n * Check if a key is in the cache, without updating the recency of\n * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n * to `true` in either the options or the constructor.\n *\n * Will return `false` if the item is stale, even though it is technically in\n * the cache. The difference can be determined (if it matters) by using a\n * `status` argument, and inspecting the `has` field.\n *\n * Will not update item age unless\n * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n */\n has(k: K, hasOptions: LRUCache.HasOptions<K, V, FC> = {}) {\n const { updateAgeOnHas = this.updateAgeOnHas, status } =\n hasOptions\n const index = this.#keyMap.get(k)\n if (index !== undefined) {\n const v = this.#valList[index]\n if (\n this.#isBackgroundFetch(v) &&\n v.__staleWhileFetching === undefined\n ) {\n return false\n }\n if (!this.#isStale(index)) {\n if (updateAgeOnHas) {\n this.#updateItemAge(index)\n }\n if (status) {\n status.has = 'hit'\n this.#statusTTL(status, index)\n }\n return true\n } else if (status) {\n status.has = 'stale'\n this.#statusTTL(status, index)\n }\n } else if (status) {\n status.has = 'miss'\n }\n return false\n }\n\n /**\n * Like {@link LRUCache#get} but doesn't update recency or delete stale\n * items.\n *\n * Returns `undefined` if the item is stale, unless\n * {@link LRUCache.OptionsBase.allowStale} is set.\n */\n peek(k: K, peekOptions: LRUCache.PeekOptions<K, V, FC> = {}) {\n const { allowStale = this.allowStale } = peekOptions\n const index = this.#keyMap.get(k)\n if (\n index === undefined ||\n (!allowStale && this.#isStale(index))\n ) {\n return\n }\n const v = this.#valList[index]\n // either stale and allowed, or forcing a refresh of non-stale value\n return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v\n }\n\n #backgroundFetch(\n k: K,\n index: Index | undefined,\n options: LRUCache.FetchOptions<K, V, FC>,\n context: any\n ): BackgroundFetch<V> {\n const v = index === undefined ? undefined : this.#valList[index]\n if (this.#isBackgroundFetch(v)) {\n return v\n }\n\n const ac = new AC()\n const { signal } = options\n // when/if our AC signals, then stop listening to theirs.\n signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n signal: ac.signal,\n })\n\n const fetchOpts = {\n signal: ac.signal,\n options,\n context,\n }\n\n const cb = (\n v: V | undefined,\n updateCache = false\n ): V | undefined => {\n const { aborted } = ac.signal\n const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n if (options.status) {\n if (aborted && !updateCache) {\n options.status.fetchAborted = true\n options.status.fetchError = ac.signal.reason\n if (ignoreAbort) options.status.fetchAbortIgnored = true\n } else {\n options.status.fetchResolved = true\n }\n }\n if (aborted && !ignoreAbort && !updateCache) {\n return fetchFail(ac.signal.reason)\n }\n // either we didn't abort, and are still here, or we did, and ignored\n const bf = p as BackgroundFetch<V>\n if (this.#valList[index as Index] === p) {\n if (v === undefined) {\n if (bf.__staleWhileFetching) {\n this.#valList[index as Index] = bf.__staleWhileFetching\n } else {\n this.#delete(k, 'fetch')\n }\n } else {\n if (options.status) options.status.fetchUpdated = true\n this.set(k, v, fetchOpts.options)\n }\n }\n return v\n }\n\n const eb = (er: any) => {\n if (options.status) {\n options.status.fetchRejected = true\n options.status.fetchError = er\n }\n return fetchFail(er)\n }\n\n const fetchFail = (er: any): V | undefined => {\n const { aborted } = ac.signal\n const allowStaleAborted =\n aborted && options.allowStaleOnFetchAbort\n const allowStale =\n allowStaleAborted || options.allowStaleOnFetchRejection\n const noDelete = allowStale || options.noDeleteOnFetchRejection\n const bf = p as BackgroundFetch<V>\n if (this.#valList[index as Index] === p) {\n // if we allow stale on fetch rejections, then we need to ensure that\n // the stale value is not removed from the cache when the fetch fails.\n const del = !noDelete || bf.__staleWhileFetching === undefined\n if (del) {\n this.#delete(k, 'fetch')\n } else if (!allowStaleAborted) {\n // still replace the *promise* with the stale value,\n // since we are done with the promise at this point.\n // leave it untouched if we're still waiting for an\n // aborted background fetch that hasn't yet returned.\n this.#valList[index as Index] = bf.__staleWhileFetching\n }\n }\n if (allowStale) {\n if (options.status && bf.__staleWhileFetching !== undefined) {\n options.status.returnedStale = true\n }\n return bf.__staleWhileFetching\n } else if (bf.__returned === bf) {\n throw er\n }\n }\n\n const pcall = (\n res: (v: V | undefined) => void,\n rej: (e: any) => void\n ) => {\n const fmp = this.#fetchMethod?.(k, v, fetchOpts)\n if (fmp && fmp instanceof Promise) {\n fmp.then(v => res(v === undefined ? undefined : v), rej)\n }\n // ignored, we go until we finish, regardless.\n // defer check until we are actually aborting,\n // so fetchMethod can override.\n ac.signal.addEventListener('abort', () => {\n if (\n !options.ignoreFetchAbort ||\n options.allowStaleOnFetchAbort\n ) {\n res(undefined)\n // when it eventually resolves, update the cache.\n if (options.allowStaleOnFetchAbort) {\n res = v => cb(v, true)\n }\n }\n })\n }\n\n if (options.status) options.status.fetchDispatched = true\n const p = new Promise(pcall).then(cb, eb)\n const bf: BackgroundFetch<V> = Object.assign(p, {\n __abortController: ac,\n __staleWhileFetching: v,\n __returned: undefined,\n })\n\n if (index === undefined) {\n // internal, don't expose status.\n this.set(k, bf, { ...fetchOpts.options, status: undefined })\n index = this.#keyMap.get(k)\n } else {\n this.#valList[index] = bf\n }\n return bf\n }\n\n #isBackgroundFetch(p: any): p is BackgroundFetch<V> {\n if (!this.#hasFetchMethod) return false\n const b = p as BackgroundFetch<V>\n return (\n !!b &&\n b instanceof Promise &&\n b.hasOwnProperty('__staleWhileFetching') &&\n b.__abortController instanceof AC\n )\n }\n\n /**\n * Make an asynchronous cached fetch using the\n * {@link LRUCache.OptionsBase.fetchMethod} function.\n *\n * If the value is in the cache and not stale, then the returned\n * Promise resolves to the value.\n *\n * If not in the cache, or beyond its TTL staleness, then\n * `fetchMethod(key, staleValue, { options, signal, context })` is\n * called, and the value returned will be added to the cache once\n * resolved.\n *\n * If called with `allowStale`, and an asynchronous fetch is\n * currently in progress to reload a stale value, then the former\n * stale value will be returned.\n *\n * If called with `forceRefresh`, then the cached item will be\n * re-fetched, even if it is not stale. However, if `allowStale` is also\n * set, then the old value will still be returned. This is useful\n * in cases where you want to force a reload of a cached value. If\n * a background fetch is already in progress, then `forceRefresh`\n * has no effect.\n *\n * If multiple fetches for the same key are issued, then they will all be\n * coalesced into a single call to fetchMethod.\n *\n * Note that this means that handling options such as\n * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},\n * {@link LRUCache.FetchOptions.signal},\n * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be\n * determined by the FIRST fetch() call for a given key.\n *\n * This is a known (fixable) shortcoming which will be addresed on when\n * someone complains about it, as the fix would involve added complexity and\n * may not be worth the costs for this edge case.\n *\n * If {@link LRUCache.OptionsBase.fetchMethod} is not specified, then this is\n * effectively an alias for `Promise.resolve(cache.get(key))`.\n *\n * When the fetch method resolves to a value, if the fetch has not\n * been aborted due to deletion, eviction, or being overwritten,\n * then it is added to the cache using the options provided.\n *\n * If the key is evicted or deleted before the `fetchMethod`\n * resolves, then the AbortSignal passed to the `fetchMethod` will\n * receive an `abort` event, and the promise returned by `fetch()`\n * will reject with the reason for the abort.\n *\n * If a `signal` is passed to the `fetch()` call, then aborting the\n * signal will abort the fetch and cause the `fetch()` promise to\n * reject with the reason provided.\n *\n * **Setting `context`**\n *\n * If an `FC` type is set to a type other than `unknown`, `void`, or\n * `undefined` in the {@link LRUCache} constructor, then all\n * calls to `cache.fetch()` _must_ provide a `context` option. If\n * set to `undefined` or `void`, then calls to fetch _must not_\n * provide a `context` option.\n *\n * The `context` param allows you to provide arbitrary data that\n * might be relevant in the course of fetching the data. It is only\n * relevant for the course of a single `fetch()` operation, and\n * discarded afterwards.\n *\n * **Note: `fetch()` calls are inflight-unique**\n *\n * If you call `fetch()` multiple times with the same key value,\n * then every call after the first will resolve on the same\n * promise<sup>1</sup>,\n * _even if they have different settings that would otherwise change\n * the behavior of the fetch_, such as `noDeleteOnFetchRejection`\n * or `ignoreFetchAbort`.\n *\n * In most cases, this is not a problem (in fact, only fetching\n * something once is what you probably want, if you're caching in\n * the first place). If you are changing the fetch() options\n * dramatically between runs, there's a good chance that you might\n * be trying to fit divergent semantics into a single object, and\n * would be better off with multiple cache instances.\n *\n * **1**: Ie, they're not the \"same Promise\", but they resolve at\n * the same time, because they're both waiting on the same\n * underlying fetchMethod response.\n */\n\n fetch(\n k: K,\n fetchOptions: unknown extends FC\n ? LRUCache.FetchOptions<K, V, FC>\n : FC extends undefined | void\n ? LRUCache.FetchOptionsNoContext<K, V>\n : LRUCache.FetchOptionsWithContext<K, V, FC>\n ): Promise<undefined | V>\n\n // this overload not allowed if context is required\n fetch(\n k: unknown extends FC\n ? K\n : FC extends undefined | void\n ? K\n : never,\n fetchOptions?: unknown extends FC\n ? LRUCache.FetchOptions<K, V, FC>\n : FC extends undefined | void\n ? LRUCache.FetchOptionsNoContext<K, V>\n : never\n ): Promise<undefined | V>\n\n async fetch(\n k: K,\n fetchOptions: LRUCache.FetchOptions<K, V, FC> = {}\n ): Promise<undefined | V> {\n const {\n // get options\n allowStale = this.allowStale,\n updateAgeOnGet = this.updateAgeOnGet,\n noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n // set options\n ttl = this.ttl,\n noDisposeOnSet = this.noDisposeOnSet,\n size = 0,\n sizeCalculation = this.sizeCalculation,\n noUpdateTTL = this.noUpdateTTL,\n // fetch exclusive options\n noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n ignoreFetchAbort = this.ignoreFetchAbort,\n allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n context,\n forceRefresh = false,\n status,\n signal,\n } = fetchOptions\n\n if (!this.#hasFetchMethod) {\n if (status) status.fetch = 'get'\n return this.get(k, {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n status,\n })\n }\n\n const options = {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n ttl,\n noDisposeOnSet,\n size,\n sizeCalculation,\n noUpdateTTL,\n noDeleteOnFetchRejection,\n allowStaleOnFetchRejection,\n allowStaleOnFetchAbort,\n ignoreFetchAbort,\n status,\n signal,\n }\n\n let index = this.#keyMap.get(k)\n if (index === undefined) {\n if (status) status.fetch = 'miss'\n const p = this.#backgroundFetch(k, index, options, context)\n return (p.__returned = p)\n } else {\n // in cache, maybe already fetching\n const v = this.#valList[index]\n if (this.#isBackgroundFetch(v)) {\n const stale =\n allowStale && v.__staleWhileFetching !== undefined\n if (status) {\n status.fetch = 'inflight'\n if (stale) status.returnedStale = true\n }\n return stale ? v.__staleWhileFetching : (v.__returned = v)\n }\n\n // if we force a refresh, that means do NOT serve the cached value,\n // unless we are already in the process of refreshing the cache.\n const isStale = this.#isStale(index)\n if (!forceRefresh && !isStale) {\n if (status) status.fetch = 'hit'\n this.#moveToTail(index)\n if (updateAgeOnGet) {\n this.#updateItemAge(index)\n }\n if (status) this.#statusTTL(status, index)\n return v\n }\n\n // ok, it is stale or a forced refresh, and not already fetching.\n // refresh the cache.\n const p = this.#backgroundFetch(k, index, options, context)\n const hasStale = p.__staleWhileFetching !== undefined\n const staleVal = hasStale && allowStale\n if (status) {\n status.fetch = isStale ? 'stale' : 'refresh'\n if (staleVal && isStale) status.returnedStale = true\n }\n return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n }\n }\n\n /**\n * In some cases, `cache.fetch()` may resolve to `undefined`, either because\n * a {@link LRUCache.OptionsBase#fetchMethod} was not provided (turning\n * `cache.fetch(k)` into just an async wrapper around `cache.get(k)`) or\n * because `ignoreFetchAbort` was specified (either to the constructor or\n * in the {@link LRUCache.FetchOptions}). Also, the\n * {@link OptionsBase.fetchMethod} may return `undefined` or `void`, making\n * the test even more complicated.\n *\n * Because inferring the cases where `undefined` might be returned are so\n * cumbersome, but testing for `undefined` can also be annoying, this method\n * can be used, which will reject if `this.fetch()` resolves to undefined.\n */\n forceFetch(\n k: K,\n fetchOptions: unknown extends FC\n ? LRUCache.FetchOptions<K, V, FC>\n : FC extends undefined | void\n ? LRUCache.FetchOptionsNoContext<K, V>\n : LRUCache.FetchOptionsWithContext<K, V, FC>\n ): Promise<V>\n // this overload not allowed if context is required\n forceFetch(\n k: unknown extends FC\n ? K\n : FC extends undefined | void\n ? K\n : never,\n fetchOptions?: unknown extends FC\n ? LRUCache.FetchOptions<K, V, FC>\n : FC extends undefined | void\n ? LRUCache.FetchOptionsNoContext<K, V>\n : never\n ): Promise<V>\n async forceFetch(\n k: K,\n fetchOptions: LRUCache.FetchOptions<K, V, FC> = {}\n ): Promise<V> {\n const v = await this.fetch(\n k,\n fetchOptions as unknown extends FC\n ? LRUCache.FetchOptions<K, V, FC>\n : FC extends undefined | void\n ? LRUCache.FetchOptionsNoContext<K, V>\n : LRUCache.FetchOptionsWithContext<K, V, FC>\n )\n if (v === undefined) throw new Error('fetch() returned undefined')\n return v\n }\n\n /**\n * If the key is found in the cache, then this is equivalent to\n * {@link LRUCache#get}. If not, in the cache, then calculate the value using\n * the {@link LRUCache.OptionsBase.memoMethod}, and add it to the cache.\n *\n * If an `FC` type is set to a type other than `unknown`, `void`, or\n * `undefined` in the LRUCache constructor, then all calls to `cache.memo()`\n * _must_ provide a `context` option. If set to `undefined` or `void`, then\n * calls to memo _must not_ provide a `context` option.\n *\n * The `context` param allows you to provide arbitrary data that might be\n * relevant in the course of fetching the data. It is only relevant for the\n * course of a single `memo()` operation, and discarded afterwards.\n */\n memo(\n k: K,\n memoOptions: unknown extends FC\n ? LRUCache.MemoOptions<K, V, FC>\n : FC extends undefined | void\n ? LRUCache.MemoOptionsNoContext<K, V>\n : LRUCache.MemoOptionsWithContext<K, V, FC>\n ): V\n // this overload not allowed if context is required\n memo(\n k: unknown extends FC\n ? K\n : FC extends undefined | void\n ? K\n : never,\n memoOptions?: unknown extends FC\n ? LRUCache.MemoOptions<K, V, FC>\n : FC extends undefined | void\n ? LRUCache.MemoOptionsNoContext<K, V>\n : never\n ): V\n memo(k: K, memoOptions: LRUCache.MemoOptions<K, V, FC> = {}) {\n const memoMethod = this.#memoMethod\n if (!memoMethod) {\n throw new Error('no memoMethod provided to constructor')\n }\n const { context, forceRefresh, ...options } = memoOptions\n const v = this.get(k, options)\n if (!forceRefresh && v !== undefined) return v\n const vv = memoMethod(k, v, {\n options,\n context,\n } as LRUCache.MemoizerOptions<K, V, FC>)\n this.set(k, vv, options)\n return vv\n }\n\n /**\n * Return a value from the cache. Will update the recency of the cache\n * entry found.\n *\n * If the key is not found, get() will return `undefined`.\n */\n get(k: K, getOptions: LRUCache.GetOptions<K, V, FC> = {}) {\n const {\n allowStale = this.allowStale,\n updateAgeOnGet = this.updateAgeOnGet,\n noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n status,\n } = getOptions\n const index = this.#keyMap.get(k)\n if (index !== undefined) {\n const value = this.#valList[index]\n const fetching = this.#isBackgroundFetch(value)\n if (status) this.#statusTTL(status, index)\n if (this.#isStale(index)) {\n if (status) status.get = 'stale'\n // delete only if not an in-flight background fetch\n if (!fetching) {\n if (!noDeleteOnStaleGet) {\n this.#delete(k, 'expire')\n }\n if (status && allowStale) status.returnedStale = true\n return allowStale ? value : undefined\n } else {\n if (\n status &&\n allowStale &&\n value.__staleWhileFetching !== undefined\n ) {\n status.returnedStale = true\n }\n return allowStale ? value.__staleWhileFetching : undefined\n }\n } else {\n if (status) status.get = 'hit'\n // if we're currently fetching it, we don't actually have it yet\n // it's not stale, which means this isn't a staleWhileRefetching.\n // If it's not stale, and fetching, AND has a __staleWhileFetching\n // value, then that means the user fetched with {forceRefresh:true},\n // so it's safe to return that value.\n if (fetching) {\n return value.__staleWhileFetching\n }\n this.#moveToTail(index)\n if (updateAgeOnGet) {\n this.#updateItemAge(index)\n }\n return value\n }\n } else if (status) {\n status.get = 'miss'\n }\n }\n\n #connect(p: Index, n: Index) {\n this.#prev[n] = p\n this.#next[p] = n\n }\n\n #moveToTail(index: Index): void {\n // if tail already, nothing to do\n // if head, move head to next[index]\n // else\n // move next[prev[index]] to next[index] (head has no prev)\n // move prev[next[index]] to prev[index]\n // prev[index] = tail\n // next[tail] = index\n // tail = index\n if (index !== this.#tail) {\n if (index === this.#head) {\n this.#head = this.#next[index] as Index\n } else {\n this.#connect(\n this.#prev[index] as Index,\n this.#next[index] as Index\n )\n }\n this.#connect(this.#tail, index)\n this.#tail = index\n }\n }\n\n /**\n * Deletes a key out of the cache.\n *\n * Returns true if the key was deleted, false otherwise.\n */\n delete(k: K) {\n return this.#delete(k, 'delete')\n }\n\n #delete(k: K, reason: LRUCache.DisposeReason) {\n let deleted = false\n if (this.#size !== 0) {\n const index = this.#keyMap.get(k)\n if (index !== undefined) {\n deleted = true\n if (this.#size === 1) {\n this.#clear(reason)\n } else {\n this.#removeItemSize(index)\n const v = this.#valList[index]\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'))\n } else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v as V, k, reason)\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v as V, k, reason])\n }\n }\n this.#keyMap.delete(k)\n this.#keyList[index] = undefined\n this.#valList[index] = undefined\n if (index === this.#tail) {\n this.#tail = this.#prev[index] as Index\n } else if (index === this.#head) {\n this.#head = this.#next[index] as Index\n } else {\n const pi = this.#prev[index] as number\n this.#next[pi] = this.#next[index] as number\n const ni = this.#next[index] as number\n this.#prev[ni] = this.#prev[index] as number\n }\n this.#size--\n this.#free.push(index)\n }\n }\n }\n if (this.#hasDisposeAfter && this.#disposed?.length) {\n const dt = this.#disposed\n let task: DisposeTask<K, V> | undefined\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task)\n }\n }\n return deleted\n }\n\n /**\n * Clear the cache entirely, throwing away all values.\n */\n clear() {\n return this.#clear('delete')\n }\n #clear(reason: LRUCache.DisposeReason) {\n for (const index of this.#rindexes({ allowStale: true })) {\n const v = this.#valList[index]\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'))\n } else {\n const k = this.#keyList[index]\n if (this.#hasDispose) {\n this.#dispose?.(v as V, k as K, reason)\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v as V, k as K, reason])\n }\n }\n }\n\n this.#keyMap.clear()\n this.#valList.fill(undefined)\n this.#keyList.fill(undefined)\n if (this.#ttls && this.#starts) {\n this.#ttls.fill(0)\n this.#starts.fill(0)\n }\n if (this.#sizes) {\n this.#sizes.fill(0)\n }\n this.#head = 0 as Index\n this.#tail = 0 as Index\n this.#free.length = 0\n this.#calculatedSize = 0\n this.#size = 0\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed\n let task: DisposeTask<K, V> | undefined\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task)\n }\n }\n }\n}\n","const proc =\n typeof process === 'object' && process\n ? process\n : {\n stdout: null,\n stderr: null,\n }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n s: any\n): s is Minipass.Readable | Minipass.Writable =>\n !!s &&\n typeof s === 'object' &&\n (s instanceof Minipass ||\n s instanceof Stream ||\n isReadable(s) ||\n isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Readable).pipe === 'function' &&\n // node core Writable streams have a pipe() method, but it throws\n (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof (s as Minipass.Writable).write === 'function' &&\n typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n b instanceof ArrayBuffer ||\n (!!b &&\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n /**\n * end the destination stream when the source stream ends\n */\n end?: boolean\n /**\n * proxy errors from the source stream to the destination stream\n */\n proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe<T extends unknown> {\n src: Minipass<T>\n dest: Minipass<any, T>\n opts: PipeOptions\n ondrain: () => any\n constructor(\n src: Minipass<T>,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n this.src = src\n this.dest = dest as Minipass<any, T>\n this.opts = opts\n this.ondrain = () => src[RESUME]()\n this.dest.on('drain', this.ondrain)\n }\n unpipe() {\n this.dest.removeListener('drain', this.ondrain)\n }\n // only here for the prototype\n /* c8 ignore start */\n proxyErrors(_er: any) {}\n /* c8 ignore stop */\n end() {\n this.unpipe()\n if (this.opts.end) this.dest.end()\n }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors<T> extends Pipe<T> {\n unpipe() {\n this.src.removeListener('error', this.proxyErrors)\n super.unpipe()\n }\n constructor(\n src: Minipass<T>,\n dest: Minipass.Writable,\n opts: PipeOptions\n ) {\n super(src, dest, opts)\n this.proxyErrors = er => dest.emit('error', er)\n src.on('error', this.proxyErrors)\n }\n}\n\nexport namespace Minipass {\n /**\n * Encoding used to create a stream that outputs strings rather than\n * Buffer objects.\n */\n export type Encoding = BufferEncoding | 'buffer' | null\n\n /**\n * Any stream that Minipass can pipe into\n */\n export type Writable =\n | Minipass<any, any, any>\n | NodeJS.WriteStream\n | (NodeJS.WriteStream & { fd: number })\n | (EventEmitter & {\n end(): any\n write(chunk: any, ...args: any[]): any\n })\n\n /**\n * Any stream that can be read from\n */\n export type Readable =\n | Minipass<any, any, any>\n | NodeJS.ReadStream\n | (NodeJS.ReadStream & { fd: number })\n | (EventEmitter & {\n pause(): any\n resume(): any\n pipe(...destArgs: any[]): any\n })\n\n /**\n * Utility type that can be iterated sync or async\n */\n export type DualIterable<T> = Iterable<T> & AsyncIterable<T>\n\n type EventArguments = Record<string | symbol, unknown[]>\n\n /**\n * The listing of events that a Minipass class can emit.\n * Extend this when extending the Minipass class, and pass as\n * the third template argument. The key is the name of the event,\n * and the value is the argument list.\n *\n * Any undeclared events will still be allowed, but the handler will get\n * arguments as `unknown[]`.\n */\n export interface Events<RType extends any = Buffer>\n extends EventArguments {\n readable: []\n data: [chunk: RType]\n error: [er: unknown]\n abort: [reason: unknown]\n drain: []\n resume: []\n end: []\n finish: []\n prefinish: []\n close: []\n [DESTROYED]: [er?: unknown]\n [ERROR]: [er: unknown]\n }\n\n /**\n * String or buffer-like data that can be joined and sliced\n */\n export type ContiguousData =\n | Buffer\n | ArrayBufferLike\n | ArrayBufferView\n | string\n export type BufferOrString = Buffer | string\n\n /**\n * Options passed to the Minipass constructor.\n */\n export type SharedOptions = {\n /**\n * Defer all data emission and other events until the end of the\n * current tick, similar to Node core streams\n */\n async?: boolean\n /**\n * A signal which will abort the stream\n */\n signal?: AbortSignal\n /**\n * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n * emit Buffer objects rather than strings.\n *\n * Conflicts with `objectMode`\n */\n encoding?: BufferEncoding | null | 'buffer'\n /**\n * Output data exactly as it was written, supporting non-buffer/string\n * data (such as arbitrary objects, falsey values, etc.)\n *\n * Conflicts with `encoding`\n */\n objectMode?: boolean\n }\n\n /**\n * Options for a string encoded output\n */\n export type EncodingOptions = SharedOptions & {\n encoding: BufferEncoding\n objectMode?: false\n }\n\n /**\n * Options for contiguous data buffer output\n */\n export type BufferOptions = SharedOptions & {\n encoding?: null | 'buffer'\n objectMode?: false\n }\n\n /**\n * Options for objectMode arbitrary output\n */\n export type ObjectModeOptions = SharedOptions & {\n objectMode: true\n encoding?: null\n }\n\n /**\n * Utility type to determine allowed options based on read type\n */\n export type Options<T> =\n | ObjectModeOptions\n | (T extends string\n ? EncodingOptions\n : T extends Buffer\n ? BufferOptions\n : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n RType extends unknown = Buffer,\n WType extends unknown = RType extends Minipass.BufferOrString\n ? Minipass.ContiguousData\n : RType,\n Events extends Minipass.Events<RType> = Minipass.Events<RType>\n >\n extends EventEmitter\n implements Minipass.DualIterable<RType>\n{\n [FLOWING]: boolean = false;\n [PAUSED]: boolean = false;\n [PIPES]: Pipe<RType>[] = [];\n [BUFFER]: RType[] = [];\n [OBJECTMODE]: boolean;\n [ENCODING]: BufferEncoding | null;\n [ASYNC]: boolean;\n [DECODER]: SD | null;\n [EOF]: boolean = false;\n [EMITTED_END]: boolean = false;\n [EMITTING_END]: boolean = false;\n [CLOSED]: boolean = false;\n [EMITTED_ERROR]: unknown = null;\n [BUFFERLENGTH]: number = 0;\n [DESTROYED]: boolean = false;\n [SIGNAL]?: AbortSignal;\n [ABORTED]: boolean = false;\n [DATALISTENERS]: number = 0;\n [DISCARDED]: boolean = false\n\n /**\n * true if the stream can be written\n */\n writable: boolean = true\n /**\n * true if the stream can be read\n */\n readable: boolean = true\n\n /**\n * If `RType` is Buffer, then options do not need to be provided.\n * Otherwise, an options object must be provided to specify either\n * {@link Minipass.SharedOptions.objectMode} or\n * {@link Minipass.SharedOptions.encoding}, as appropriate.\n */\n constructor(\n ...args:\n | [Minipass.ObjectModeOptions]\n | (RType extends Buffer\n ? [] | [Minipass.Options<RType>]\n : [Minipass.Options<RType>])\n ) {\n const options: Minipass.Options<RType> = (args[0] ||\n {}) as Minipass.Options<RType>\n super()\n if (options.objectMode && typeof options.encoding === 'string') {\n throw new TypeError(\n 'Encoding and objectMode may not be used together'\n )\n }\n if (isObjectModeOptions(options)) {\n this[OBJECTMODE] = true\n this[ENCODING] = null\n } else if (isEncodingOptions(options)) {\n this[ENCODING] = options.encoding\n this[OBJECTMODE] = false\n } else {\n this[OBJECTMODE] = false\n this[ENCODING] = null\n }\n this[ASYNC] = !!options.async\n this[DECODER] = this[ENCODING]\n ? (new StringDecoder(this[ENCODING]) as SD)\n : null\n\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposeBuffer === true) {\n Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n }\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposePipes === true) {\n Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n }\n\n const { signal } = options\n if (signal) {\n this[SIGNAL] = signal\n if (signal.aborted) {\n this[ABORT]()\n } else {\n signal.addEventListener('abort', () => this[ABORT]())\n }\n }\n }\n\n /**\n * The amount of data stored in the buffer waiting to be read.\n *\n * For Buffer strings, this will be the total byte length.\n * For string encoding streams, this will be the string character length,\n * according to JavaScript's `string.length` logic.\n * For objectMode streams, this is a count of the items waiting to be\n * emitted.\n */\n get bufferLength() {\n return this[BUFFERLENGTH]\n }\n\n /**\n * The `BufferEncoding` currently in use, or `null`\n */\n get encoding() {\n return this[ENCODING]\n }\n\n /**\n * @deprecated - This is a read only property\n */\n set encoding(_enc) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * @deprecated - Encoding may only be set at instantiation time\n */\n setEncoding(_enc: Minipass.Encoding) {\n throw new Error('Encoding must be set at instantiation time')\n }\n\n /**\n * True if this is an objectMode stream\n */\n get objectMode() {\n return this[OBJECTMODE]\n }\n\n /**\n * @deprecated - This is a read-only property\n */\n set objectMode(_om) {\n throw new Error('objectMode must be set at instantiation time')\n }\n\n /**\n * true if this is an async stream\n */\n get ['async'](): boolean {\n return this[ASYNC]\n }\n /**\n * Set to true to make this stream async.\n *\n * Once set, it cannot be unset, as this would potentially cause incorrect\n * behavior. Ie, a sync stream can be made async, but an async stream\n * cannot be safely made sync.\n */\n set ['async'](a: boolean) {\n this[ASYNC] = this[ASYNC] || !!a\n }\n\n // drop everything and get out of the flow completely\n [ABORT]() {\n this[ABORTED] = true\n this.emit('abort', this[SIGNAL]?.reason)\n this.destroy(this[SIGNAL]?.reason)\n }\n\n /**\n * True if the stream has been aborted.\n */\n get aborted() {\n return this[ABORTED]\n }\n /**\n * No-op setter. Stream aborted status is set via the AbortSignal provided\n * in the constructor options.\n */\n set aborted(_) {}\n\n /**\n * Write data into the stream\n *\n * If the chunk written is a string, and encoding is not specified, then\n * `utf8` will be assumed. If the stream encoding matches the encoding of\n * a written string, and the state of the string decoder allows it, then\n * the string will be passed through to either the output or the internal\n * buffer without any processing. Otherwise, it will be turned into a\n * Buffer object for processing into the desired encoding.\n *\n * If provided, `cb` function is called immediately before return for\n * sync streams, or on next tick for async streams, because for this\n * base class, a chunk is considered \"processed\" once it is accepted\n * and either emitted or buffered. That is, the callback does not indicate\n * that the chunk has been eventually emitted, though of course child\n * classes can override this function to do whatever processing is required\n * and call `super.write(...)` only once processing is completed.\n */\n write(chunk: WType, cb?: () => void): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding,\n cb?: () => void\n ): boolean\n write(\n chunk: WType,\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): boolean {\n if (this[ABORTED]) return false\n if (this[EOF]) throw new Error('write after end')\n\n if (this[DESTROYED]) {\n this.emit(\n 'error',\n Object.assign(\n new Error('Cannot call write after a stream was destroyed'),\n { code: 'ERR_STREAM_DESTROYED' }\n )\n )\n return true\n }\n\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n\n if (!encoding) encoding = 'utf8'\n\n const fn = this[ASYNC] ? defer : nodefer\n\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything is only allowed if in object mode, so throw\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(\n chunk.buffer,\n chunk.byteOffset,\n chunk.byteLength\n )\n } else if (isArrayBufferLike(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk)\n } else if (typeof chunk !== 'string') {\n throw new Error(\n 'Non-contiguous data written to non-objectMode stream'\n )\n }\n }\n\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n // maybe impossible?\n /* c8 ignore start */\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n /* c8 ignore stop */\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!(chunk as Minipass.BufferOrString).length) {\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n if (cb) fn(cb)\n return this[FLOWING]\n }\n\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (\n typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n ) {\n //@ts-ignore - sinful unsafe type change\n chunk = Buffer.from(chunk, encoding)\n }\n\n if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n //@ts-ignore - sinful unsafe type change\n chunk = this[DECODER].write(chunk)\n }\n\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n else this[BUFFERPUSH](chunk as unknown as RType)\n\n if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n if (cb) fn(cb)\n\n return this[FLOWING]\n }\n\n /**\n * Low-level explicit read method.\n *\n * In objectMode, the argument is ignored, and one item is returned if\n * available.\n *\n * `n` is the number of bytes (or in the case of encoding streams,\n * characters) to consume. If `n` is not provided, then the entire buffer\n * is returned, or `null` is returned if no data is available.\n *\n * If `n` is greater that the amount of data in the internal buffer,\n * then `null` is returned.\n */\n read(n?: number | null): RType | null {\n if (this[DESTROYED]) return null\n this[DISCARDED] = false\n\n if (\n this[BUFFERLENGTH] === 0 ||\n n === 0 ||\n (n && n > this[BUFFERLENGTH])\n ) {\n this[MAYBE_EMIT_END]()\n return null\n }\n\n if (this[OBJECTMODE]) n = null\n\n if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n // not object mode, so if we have an encoding, then RType is string\n // otherwise, must be Buffer\n this[BUFFER] = [\n (this[ENCODING]\n ? this[BUFFER].join('')\n : Buffer.concat(\n this[BUFFER] as Buffer[],\n this[BUFFERLENGTH]\n )) as RType,\n ]\n }\n\n const ret = this[READ](n || null, this[BUFFER][0] as RType)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [READ](n: number | null, chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n else {\n const c = chunk as Minipass.BufferOrString\n if (n === c.length || n === null) this[BUFFERSHIFT]()\n else if (typeof c === 'string') {\n this[BUFFER][0] = c.slice(n) as RType\n chunk = c.slice(0, n) as RType\n this[BUFFERLENGTH] -= n\n } else {\n this[BUFFER][0] = c.subarray(n) as RType\n chunk = c.subarray(0, n) as RType\n this[BUFFERLENGTH] -= n\n }\n }\n\n this.emit('data', chunk)\n\n if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n return chunk\n }\n\n /**\n * End the stream, optionally providing a final write.\n *\n * See {@link Minipass#write} for argument descriptions\n */\n end(cb?: () => void): this\n end(chunk: WType, cb?: () => void): this\n end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n end(\n chunk?: WType | (() => void),\n encoding?: Minipass.Encoding | (() => void),\n cb?: () => void\n ): this {\n if (typeof chunk === 'function') {\n cb = chunk as () => void\n chunk = undefined\n }\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = 'utf8'\n }\n if (chunk !== undefined) this.write(chunk, encoding)\n if (cb) this.once('end', cb)\n this[EOF] = true\n this.writable = false\n\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n return this\n }\n\n // don't let the internal resume be overwritten\n [RESUME]() {\n if (this[DESTROYED]) return\n\n if (!this[DATALISTENERS] && !this[PIPES].length) {\n this[DISCARDED] = true\n }\n this[PAUSED] = false\n this[FLOWING] = true\n this.emit('resume')\n if (this[BUFFER].length) this[FLUSH]()\n else if (this[EOF]) this[MAYBE_EMIT_END]()\n else this.emit('drain')\n }\n\n /**\n * Resume the stream if it is currently in a paused state\n *\n * If called when there are no pipe destinations or `data` event listeners,\n * this will place the stream in a \"discarded\" state, where all data will\n * be thrown away. The discarded state is removed if a pipe destination or\n * data handler is added, if pause() is called, or if any synchronous or\n * asynchronous iteration is started.\n */\n resume() {\n return this[RESUME]()\n }\n\n /**\n * Pause the stream\n */\n pause() {\n this[FLOWING] = false\n this[PAUSED] = true\n this[DISCARDED] = false\n }\n\n /**\n * true if the stream has been forcibly destroyed\n */\n get destroyed() {\n return this[DESTROYED]\n }\n\n /**\n * true if the stream is currently in a flowing state, meaning that\n * any writes will be immediately emitted.\n */\n get flowing() {\n return this[FLOWING]\n }\n\n /**\n * true if the stream is currently in a paused state\n */\n get paused() {\n return this[PAUSED]\n }\n\n [BUFFERPUSH](chunk: RType) {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n this[BUFFER].push(chunk)\n }\n\n [BUFFERSHIFT](): RType {\n if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n else\n this[BUFFERLENGTH] -= (\n this[BUFFER][0] as Minipass.BufferOrString\n ).length\n return this[BUFFER].shift() as RType\n }\n\n [FLUSH](noDrain: boolean = false) {\n do {} while (\n this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n this[BUFFER].length\n )\n\n if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n }\n\n [FLUSHCHUNK](chunk: RType) {\n this.emit('data', chunk)\n return this[FLOWING]\n }\n\n /**\n * Pipe all data emitted by this stream into the destination provided.\n *\n * Triggers the flow of data.\n */\n pipe<W extends Minipass.Writable>(dest: W, opts?: PipeOptions): W {\n if (this[DESTROYED]) return dest\n this[DISCARDED] = false\n\n const ended = this[EMITTED_END]\n opts = opts || {}\n if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n else opts.end = opts.end !== false\n opts.proxyErrors = !!opts.proxyErrors\n\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end) dest.end()\n } else {\n // \"as\" here just ignores the WType, which pipes don't care about,\n // since they're only consuming from us, and writing to the dest\n this[PIPES].push(\n !opts.proxyErrors\n ? new Pipe<RType>(this as Minipass<RType>, dest, opts)\n : new PipeProxyErrors<RType>(this as Minipass<RType>, dest, opts)\n )\n if (this[ASYNC]) defer(() => this[RESUME]())\n else this[RESUME]()\n }\n\n return dest\n }\n\n /**\n * Fully unhook a piped destination stream.\n *\n * If the destination stream was the only consumer of this stream (ie,\n * there are no other piped destinations or `'data'` event listeners)\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n unpipe<W extends Minipass.Writable>(dest: W) {\n const p = this[PIPES].find(p => p.dest === dest)\n if (p) {\n if (this[PIPES].length === 1) {\n if (this[FLOWING] && this[DATALISTENERS] === 0) {\n this[FLOWING] = false\n }\n this[PIPES] = []\n } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n p.unpipe()\n }\n }\n\n /**\n * Alias for {@link Minipass#on}\n */\n addListener<Event extends keyof Events>(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n return this.on(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.on`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * - Adding a 'data' event handler will trigger the flow of data\n *\n * - Adding a 'readable' event handler when there is data waiting to be read\n * will cause 'readable' to be emitted immediately.\n *\n * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n * already passed will cause the event to be emitted immediately and all\n * handlers removed.\n *\n * - Adding an 'error' event handler after an error has been emitted will\n * cause the event to be re-emitted immediately with the error previously\n * raised.\n */\n on<Event extends keyof Events>(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ): this {\n const ret = super.on(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n if (ev === 'data') {\n this[DISCARDED] = false\n this[DATALISTENERS]++\n if (!this[PIPES].length && !this[FLOWING]) {\n this[RESUME]()\n }\n } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n super.emit('readable')\n } else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev)\n this.removeAllListeners(ev)\n } else if (ev === 'error' && this[EMITTED_ERROR]) {\n const h = handler as (...a: Events['error']) => any\n if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n else h.call(this, this[EMITTED_ERROR])\n }\n return ret\n }\n\n /**\n * Alias for {@link Minipass#off}\n */\n removeListener<Event extends keyof Events>(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n return this.off(ev, handler)\n }\n\n /**\n * Mostly identical to `EventEmitter.off`\n *\n * If a 'data' event handler is removed, and it was the last consumer\n * (ie, there are no pipe destinations or other 'data' event listeners),\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n off<Event extends keyof Events>(\n ev: Event,\n handler: (...args: Events[Event]) => any\n ) {\n const ret = super.off(\n ev as string | symbol,\n handler as (...a: any[]) => any\n )\n // if we previously had listeners, and now we don't, and we don't\n // have any pipes, then stop the flow, unless it's been explicitly\n // put in a discarded flowing state via stream.resume().\n if (ev === 'data') {\n this[DATALISTENERS] = this.listeners('data').length\n if (\n this[DATALISTENERS] === 0 &&\n !this[DISCARDED] &&\n !this[PIPES].length\n ) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * Mostly identical to `EventEmitter.removeAllListeners`\n *\n * If all 'data' event handlers are removed, and they were the last consumer\n * (ie, there are no pipe destinations), then the flow of data will stop\n * until there is another consumer or {@link Minipass#resume} is explicitly\n * called.\n */\n removeAllListeners<Event extends keyof Events>(ev?: Event) {\n const ret = super.removeAllListeners(ev as string | symbol | undefined)\n if (ev === 'data' || ev === undefined) {\n this[DATALISTENERS] = 0\n if (!this[DISCARDED] && !this[PIPES].length) {\n this[FLOWING] = false\n }\n }\n return ret\n }\n\n /**\n * true if the 'end' event has been emitted\n */\n get emittedEnd() {\n return this[EMITTED_END]\n }\n\n [MAYBE_EMIT_END]() {\n if (\n !this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this[BUFFER].length === 0 &&\n this[EOF]\n ) {\n this[EMITTING_END] = true\n this.emit('end')\n this.emit('prefinish')\n this.emit('finish')\n if (this[CLOSED]) this.emit('close')\n this[EMITTING_END] = false\n }\n }\n\n /**\n * Mostly identical to `EventEmitter.emit`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * If the stream has been destroyed, and the event is something other\n * than 'close' or 'error', then `false` is returned and no handlers\n * are called.\n *\n * If the event is 'end', and has already been emitted, then the event\n * is ignored. If the stream is in a paused or non-flowing state, then\n * the event will be deferred until data flow resumes. If the stream is\n * async, then handlers will be called on the next tick rather than\n * immediately.\n *\n * If the event is 'close', and 'end' has not yet been emitted, then\n * the event will be deferred until after 'end' is emitted.\n *\n * If the event is 'error', and an AbortSignal was provided for the stream,\n * and there are no listeners, then the event is ignored, matching the\n * behavior of node core streams in the presense of an AbortSignal.\n *\n * If the event is 'finish' or 'prefinish', then all listeners will be\n * removed after emitting the event, to prevent double-firing.\n */\n emit<Event extends keyof Events>(\n ev: Event,\n ...args: Events[Event]\n ): boolean {\n const data = args[0]\n // error and close are only events allowed after calling destroy()\n if (\n ev !== 'error' &&\n ev !== 'close' &&\n ev !== DESTROYED &&\n this[DESTROYED]\n ) {\n return false\n } else if (ev === 'data') {\n return !this[OBJECTMODE] && !data\n ? false\n : this[ASYNC]\n ? (defer(() => this[EMITDATA](data as RType)), true)\n : this[EMITDATA](data as RType)\n } else if (ev === 'end') {\n return this[EMITEND]()\n } else if (ev === 'close') {\n this[CLOSED] = true\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED]) return false\n const ret = super.emit('close')\n this.removeAllListeners('close')\n return ret\n } else if (ev === 'error') {\n this[EMITTED_ERROR] = data\n super.emit(ERROR, data)\n const ret =\n !this[SIGNAL] || this.listeners('error').length\n ? super.emit('error', data)\n : false\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'resume') {\n const ret = super.emit('resume')\n this[MAYBE_EMIT_END]()\n return ret\n } else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev)\n this.removeAllListeners(ev)\n return ret\n }\n\n // Some other unknown event\n const ret = super.emit(ev as string, ...args)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITDATA](data: RType) {\n for (const p of this[PIPES]) {\n if (p.dest.write(data as RType) === false) this.pause()\n }\n const ret = this[DISCARDED] ? false : super.emit('data', data)\n this[MAYBE_EMIT_END]()\n return ret\n }\n\n [EMITEND]() {\n if (this[EMITTED_END]) return false\n\n this[EMITTED_END] = true\n this.readable = false\n return this[ASYNC]\n ? (defer(() => this[EMITEND2]()), true)\n : this[EMITEND2]()\n }\n\n [EMITEND2]() {\n if (this[DECODER]) {\n const data = this[DECODER].end()\n if (data) {\n for (const p of this[PIPES]) {\n p.dest.write(data as RType)\n }\n if (!this[DISCARDED]) super.emit('data', data)\n }\n }\n\n for (const p of this[PIPES]) {\n p.end()\n }\n const ret = super.emit('end')\n this.removeAllListeners('end')\n return ret\n }\n\n /**\n * Return a Promise that resolves to an array of all emitted data once\n * the stream ends.\n */\n async collect(): Promise<RType[] & { dataLength: number }> {\n const buf: RType[] & { dataLength: number } = Object.assign([], {\n dataLength: 0,\n })\n if (!this[OBJECTMODE]) buf.dataLength = 0\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise()\n this.on('data', c => {\n buf.push(c)\n if (!this[OBJECTMODE])\n buf.dataLength += (c as Minipass.BufferOrString).length\n })\n await p\n return buf\n }\n\n /**\n * Return a Promise that resolves to the concatenation of all emitted data\n * once the stream ends.\n *\n * Not allowed on objectMode streams.\n */\n async concat(): Promise<RType> {\n if (this[OBJECTMODE]) {\n throw new Error('cannot concat in objectMode')\n }\n const buf = await this.collect()\n return (\n this[ENCODING]\n ? buf.join('')\n : Buffer.concat(buf as Buffer[], buf.dataLength)\n ) as RType\n }\n\n /**\n * Return a void Promise that resolves once the stream ends.\n */\n async promise(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n this.on('error', er => reject(er))\n this.on('end', () => resolve())\n })\n }\n\n /**\n * Asynchronous `for await of` iteration.\n *\n * This will continue emitting all chunks until the stream terminates.\n */\n [Symbol.asyncIterator](): AsyncGenerator<RType, void, void> {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = async (): Promise<IteratorReturnResult<void>> => {\n this.pause()\n stopped = true\n return { value: undefined, done: true }\n }\n const next = (): Promise<IteratorResult<RType, void>> => {\n if (stopped) return stop()\n const res = this.read()\n if (res !== null) return Promise.resolve({ done: false, value: res })\n\n if (this[EOF]) return stop()\n\n let resolve!: (res: IteratorResult<RType>) => void\n let reject!: (er: unknown) => void\n const onerr = (er: unknown) => {\n this.off('data', ondata)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n stop()\n reject(er)\n }\n const ondata = (value: RType) => {\n this.off('error', onerr)\n this.off('end', onend)\n this.off(DESTROYED, ondestroy)\n this.pause()\n resolve({ value, done: !!this[EOF] })\n }\n const onend = () => {\n this.off('error', onerr)\n this.off('data', ondata)\n this.off(DESTROYED, ondestroy)\n stop()\n resolve({ done: true, value: undefined })\n }\n const ondestroy = () => onerr(new Error('stream destroyed'))\n return new Promise<IteratorResult<RType>>((res, rej) => {\n reject = rej\n resolve = res\n this.once(DESTROYED, ondestroy)\n this.once('error', onerr)\n this.once('end', onend)\n this.once('data', ondata)\n })\n }\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.asyncIterator]() {\n return this\n },\n }\n }\n\n /**\n * Synchronous `for of` iteration.\n *\n * The iteration will terminate when the internal buffer runs out, even\n * if the stream has not yet terminated.\n */\n [Symbol.iterator](): Generator<RType, void, void> {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false\n let stopped = false\n const stop = (): IteratorReturnResult<void> => {\n this.pause()\n this.off(ERROR, stop)\n this.off(DESTROYED, stop)\n this.off('end', stop)\n stopped = true\n return { done: true, value: undefined }\n }\n\n const next = (): IteratorResult<RType, void> => {\n if (stopped) return stop()\n const value = this.read()\n return value === null ? stop() : { done: false, value }\n }\n\n this.once('end', stop)\n this.once(ERROR, stop)\n this.once(DESTROYED, stop)\n\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.iterator]() {\n return this\n },\n }\n }\n\n /**\n * Destroy a stream, preventing it from being used for any further purpose.\n *\n * If the stream has a `close()` method, then it will be called on\n * destruction.\n *\n * After destruction, any attempt to write data, read data, or emit most\n * events will be ignored.\n *\n * If an error argument is provided, then it will be emitted in an\n * 'error' event.\n */\n destroy(er?: unknown) {\n if (this[DESTROYED]) {\n if (er) this.emit('error', er)\n else this.emit(DESTROYED)\n return this\n }\n\n this[DESTROYED] = true\n this[DISCARDED] = true\n\n // throw away all buffered data, it's never coming out\n this[BUFFER].length = 0\n this[BUFFERLENGTH] = 0\n\n const wc = this as Minipass<RType, WType, Events> & {\n close?: () => void\n }\n if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n if (er) this.emit('error', er)\n // if no error to emit, still reject pending promises\n else this.emit(DESTROYED)\n\n return this\n }\n\n /**\n * Alias for {@link isStream}\n *\n * Former export location, maintained for backwards compatibility.\n *\n * @deprecated\n */\n static get isStream() {\n return isStream\n }\n}\n","import { LRUCache } from 'lru-cache'\nimport { posix, win32 } from 'node:path'\n\nimport { fileURLToPath } from 'node:url'\n\nimport {\n lstatSync,\n readdir as readdirCB,\n readdirSync,\n readlinkSync,\n realpathSync as rps,\n} from 'fs'\nimport * as actualFS from 'node:fs'\n\nconst realpathSync = rps.native\n// TODO: test perf of fs/promises realpath vs realpathCB,\n// since the promises one uses realpath.native\n\nimport { lstat, readdir, readlink, realpath } from 'node:fs/promises'\n\nimport { Minipass } from 'minipass'\nimport type { Dirent, Stats } from 'node:fs'\n\n/**\n * An object that will be used to override the default `fs`\n * methods. Any methods that are not overridden will use Node's\n * built-in implementations.\n *\n * - lstatSync\n * - readdir (callback `withFileTypes` Dirent variant, used for\n * readdirCB and most walks)\n * - readdirSync\n * - readlinkSync\n * - realpathSync\n * - promises: Object containing the following async methods:\n * - lstat\n * - readdir (Dirent variant only)\n * - readlink\n * - realpath\n */\nexport interface FSOption {\n lstatSync?: (path: string) => Stats\n readdir?: (\n path: string,\n options: { withFileTypes: true },\n cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any,\n ) => void\n readdirSync?: (\n path: string,\n options: { withFileTypes: true },\n ) => Dirent[]\n readlinkSync?: (path: string) => string\n realpathSync?: (path: string) => string\n promises?: {\n lstat?: (path: string) => Promise<Stats>\n readdir?: (\n path: string,\n options: { withFileTypes: true },\n ) => Promise<Dirent[]>\n readlink?: (path: string) => Promise<string>\n realpath?: (path: string) => Promise<string>\n [k: string]: any\n }\n [k: string]: any\n}\n\ninterface FSValue {\n lstatSync: (path: string) => Stats\n readdir: (\n path: string,\n options: { withFileTypes: true },\n cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any,\n ) => void\n readdirSync: (path: string, options: { withFileTypes: true }) => Dirent[]\n readlinkSync: (path: string) => string\n realpathSync: (path: string) => string\n promises: {\n lstat: (path: string) => Promise<Stats>\n readdir: (\n path: string,\n options: { withFileTypes: true },\n ) => Promise<Dirent[]>\n readlink: (path: string) => Promise<string>\n realpath: (path: string) => Promise<string>\n [k: string]: any\n }\n [k: string]: any\n}\n\nconst defaultFS: FSValue = {\n lstatSync,\n readdir: readdirCB,\n readdirSync,\n readlinkSync,\n realpathSync,\n promises: {\n lstat,\n readdir,\n readlink,\n realpath,\n },\n}\n\n// if they just gave us require('fs') then use our default\nconst fsFromOption = (fsOption?: FSOption): FSValue =>\n !fsOption || fsOption === defaultFS || fsOption === actualFS ?\n defaultFS\n : {\n ...defaultFS,\n ...fsOption,\n promises: {\n ...defaultFS.promises,\n ...(fsOption.promises || {}),\n },\n }\n\n// turn something like //?/c:/ into c:\\\nconst uncDriveRegexp = /^\\\\\\\\\\?\\\\([a-z]:)\\\\?$/i\nconst uncToDrive = (rootPath: string): string =>\n rootPath.replace(/\\//g, '\\\\').replace(uncDriveRegexp, '$1\\\\')\n\n// windows paths are separated by either / or \\\nconst eitherSep = /[\\\\\\/]/\n\nconst UNKNOWN = 0 // may not even exist, for all we know\nconst IFIFO = 0b0001\nconst IFCHR = 0b0010\nconst IFDIR = 0b0100\nconst IFBLK = 0b0110\nconst IFREG = 0b1000\nconst IFLNK = 0b1010\nconst IFSOCK = 0b1100\nconst IFMT = 0b1111\n\nexport type Type =\n | 'Unknown'\n | 'FIFO'\n | 'CharacterDevice'\n | 'Directory'\n | 'BlockDevice'\n | 'File'\n | 'SymbolicLink'\n | 'Socket'\n\n// mask to unset low 4 bits\nconst IFMT_UNKNOWN = ~IFMT\n\n// set after successfully calling readdir() and getting entries.\nconst READDIR_CALLED = 0b0000_0001_0000\n// set after a successful lstat()\nconst LSTAT_CALLED = 0b0000_0010_0000\n// set if an entry (or one of its parents) is definitely not a dir\nconst ENOTDIR = 0b0000_0100_0000\n// set if an entry (or one of its parents) does not exist\n// (can also be set on lstat errors like EACCES or ENAMETOOLONG)\nconst ENOENT = 0b0000_1000_0000\n// cannot have child entries -- also verify &IFMT is either IFDIR or IFLNK\n// set if we fail to readlink\nconst ENOREADLINK = 0b0001_0000_0000\n// set if we know realpath() will fail\nconst ENOREALPATH = 0b0010_0000_0000\n\nconst ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH\nconst TYPEMASK = 0b0011_1111_1111\n\nconst entToType = (s: Dirent | Stats) =>\n s.isFile() ? IFREG\n : s.isDirectory() ? IFDIR\n : s.isSymbolicLink() ? IFLNK\n : s.isCharacterDevice() ? IFCHR\n : s.isBlockDevice() ? IFBLK\n : s.isSocket() ? IFSOCK\n : s.isFIFO() ? IFIFO\n : UNKNOWN\n\n// normalize unicode path names\nconst normalizeCache = new Map<string, string>()\nconst normalize = (s: string) => {\n const c = normalizeCache.get(s)\n if (c) return c\n const n = s.normalize('NFKD')\n normalizeCache.set(s, n)\n return n\n}\n\nconst normalizeNocaseCache = new Map<string, string>()\nconst normalizeNocase = (s: string) => {\n const c = normalizeNocaseCache.get(s)\n if (c) return c\n const n = normalize(s.toLowerCase())\n normalizeNocaseCache.set(s, n)\n return n\n}\n\n/**\n * Options that may be provided to the Path constructor\n */\nexport interface PathOpts {\n fullpath?: string\n relative?: string\n relativePosix?: string\n parent?: PathBase\n /**\n * See {@link FSOption}\n */\n fs?: FSOption\n}\n\n/**\n * An LRUCache for storing resolved path strings or Path objects.\n * @internal\n */\nexport class ResolveCache extends LRUCache<string, string> {\n constructor() {\n super({ max: 256 })\n }\n}\n\n// In order to prevent blowing out the js heap by allocating hundreds of\n// thousands of Path entries when walking extremely large trees, the \"children\"\n// in this tree are represented by storing an array of Path entries in an\n// LRUCache, indexed by the parent. At any time, Path.children() may return an\n// empty array, indicating that it doesn't know about any of its children, and\n// thus has to rebuild that cache. This is fine, it just means that we don't\n// benefit as much from having the cached entries, but huge directory walks\n// don't blow out the stack, and smaller ones are still as fast as possible.\n//\n//It does impose some complexity when building up the readdir data, because we\n//need to pass a reference to the children array that we started with.\n\n/**\n * an LRUCache for storing child entries.\n * @internal\n */\nexport class ChildrenCache extends LRUCache<PathBase, Children> {\n constructor(maxSize: number = 16 * 1024) {\n super({\n maxSize,\n // parent + children\n sizeCalculation: a => a.length + 1,\n })\n }\n}\n\n/**\n * Array of Path objects, plus a marker indicating the first provisional entry\n *\n * @internal\n */\nexport type Children = PathBase[] & { provisional: number }\n\nconst setAsCwd = Symbol('PathScurry setAsCwd')\n\n/**\n * Path objects are sort of like a super-powered\n * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent}\n *\n * Each one represents a single filesystem entry on disk, which may or may not\n * exist. It includes methods for reading various types of information via\n * lstat, readlink, and readdir, and caches all information to the greatest\n * degree possible.\n *\n * Note that fs operations that would normally throw will instead return an\n * \"empty\" value. This is in order to prevent excessive overhead from error\n * stack traces.\n */\nexport abstract class PathBase implements Dirent {\n /**\n * the basename of this path\n *\n * **Important**: *always* test the path name against any test string\n * usingthe {@link isNamed} method, and not by directly comparing this\n * string. Otherwise, unicode path strings that the system sees as identical\n * will not be properly treated as the same path, leading to incorrect\n * behavior and possible security issues.\n */\n name: string\n /**\n * the Path entry corresponding to the path root.\n *\n * @internal\n */\n root: PathBase\n /**\n * All roots found within the current PathScurry family\n *\n * @internal\n */\n roots: { [k: string]: PathBase }\n /**\n * a reference to the parent path, or undefined in the case of root entries\n *\n * @internal\n */\n parent?: PathBase\n /**\n * boolean indicating whether paths are compared case-insensitively\n * @internal\n */\n nocase: boolean\n\n /**\n * boolean indicating that this path is the current working directory\n * of the PathScurry collection that contains it.\n */\n isCWD: boolean = false\n\n /**\n * the string or regexp used to split paths. On posix, it is `'/'`, and on\n * windows it is a RegExp matching either `'/'` or `'\\\\'`\n */\n abstract splitSep: string | RegExp\n /**\n * The path separator string to use when joining paths\n */\n abstract sep: string\n\n // potential default fs override\n #fs: FSValue\n\n // Stats fields\n #dev?: number\n get dev() {\n return this.#dev\n }\n #mode?: number\n get mode() {\n return this.#mode\n }\n #nlink?: number\n get nlink() {\n return this.#nlink\n }\n #uid?: number\n get uid() {\n return this.#uid\n }\n #gid?: number\n get gid() {\n return this.#gid\n }\n #rdev?: number\n get rdev() {\n return this.#rdev\n }\n #blksize?: number\n get blksize() {\n return this.#blksize\n }\n #ino?: number\n get ino() {\n return this.#ino\n }\n #size?: number\n get size() {\n return this.#size\n }\n #blocks?: number\n get blocks() {\n return this.#blocks\n }\n #atimeMs?: number\n get atimeMs() {\n return this.#atimeMs\n }\n #mtimeMs?: number\n get mtimeMs() {\n return this.#mtimeMs\n }\n #ctimeMs?: number\n get ctimeMs() {\n return this.#ctimeMs\n }\n #birthtimeMs?: number\n get birthtimeMs() {\n return this.#birthtimeMs\n }\n #atime?: Date\n get atime() {\n return this.#atime\n }\n #mtime?: Date\n get mtime() {\n return this.#mtime\n }\n #ctime?: Date\n get ctime() {\n return this.#ctime\n }\n #birthtime?: Date\n get birthtime() {\n return this.#birthtime\n }\n\n #matchName: string\n #depth?: number\n #fullpath?: string\n #fullpathPosix?: string\n #relative?: string\n #relativePosix?: string\n #type: number\n #children: ChildrenCache\n #linkTarget?: PathBase\n #realpath?: PathBase\n\n /**\n * This property is for compatibility with the Dirent class as of\n * Node v20, where Dirent['parentPath'] refers to the path of the\n * directory that was passed to readdir. For root entries, it's the path\n * to the entry itself.\n */\n get parentPath(): string {\n return (this.parent || this).fullpath()\n }\n\n /**\n * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,\n * this property refers to the *parent* path, not the path object itself.\n */\n get path(): string {\n return this.parentPath\n }\n\n /**\n * Do not create new Path objects directly. They should always be accessed\n * via the PathScurry class or other methods on the Path class.\n *\n * @internal\n */\n constructor(\n name: string,\n type: number = UNKNOWN,\n root: PathBase | undefined,\n roots: { [k: string]: PathBase },\n nocase: boolean,\n children: ChildrenCache,\n opts: PathOpts,\n ) {\n this.name = name\n this.#matchName = nocase ? normalizeNocase(name) : normalize(name)\n this.#type = type & TYPEMASK\n this.nocase = nocase\n this.roots = roots\n this.root = root || this\n this.#children = children\n this.#fullpath = opts.fullpath\n this.#relative = opts.relative\n this.#relativePosix = opts.relativePosix\n this.parent = opts.parent\n if (this.parent) {\n this.#fs = this.parent.#fs\n } else {\n this.#fs = fsFromOption(opts.fs)\n }\n }\n\n /**\n * Returns the depth of the Path object from its root.\n *\n * For example, a path at `/foo/bar` would have a depth of 2.\n */\n depth(): number {\n if (this.#depth !== undefined) return this.#depth\n if (!this.parent) return (this.#depth = 0)\n return (this.#depth = this.parent.depth() + 1)\n }\n\n /**\n * @internal\n */\n abstract getRootString(path: string): string\n /**\n * @internal\n */\n abstract getRoot(rootPath: string): PathBase\n /**\n * @internal\n */\n abstract newChild(name: string, type?: number, opts?: PathOpts): PathBase\n\n /**\n * @internal\n */\n childrenCache() {\n return this.#children\n }\n\n /**\n * Get the Path object referenced by the string path, resolved from this Path\n */\n resolve(path?: string): PathBase {\n if (!path) {\n return this\n }\n const rootPath = this.getRootString(path)\n const dir = path.substring(rootPath.length)\n const dirParts = dir.split(this.splitSep)\n const result: PathBase =\n rootPath ?\n this.getRoot(rootPath).#resolveParts(dirParts)\n : this.#resolveParts(dirParts)\n return result\n }\n\n #resolveParts(dirParts: string[]) {\n let p: PathBase = this\n for (const part of dirParts) {\n p = p.child(part)\n }\n return p\n }\n\n /**\n * Returns the cached children Path objects, if still available. If they\n * have fallen out of the cache, then returns an empty array, and resets the\n * READDIR_CALLED bit, so that future calls to readdir() will require an fs\n * lookup.\n *\n * @internal\n */\n children(): Children {\n const cached = this.#children.get(this)\n if (cached) {\n return cached\n }\n const children: Children = Object.assign([], { provisional: 0 })\n this.#children.set(this, children)\n this.#type &= ~READDIR_CALLED\n return children\n }\n\n /**\n * Resolves a path portion and returns or creates the child Path.\n *\n * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is\n * `'..'`.\n *\n * This should not be called directly. If `pathPart` contains any path\n * separators, it will lead to unsafe undefined behavior.\n *\n * Use `Path.resolve()` instead.\n *\n * @internal\n */\n child(pathPart: string, opts?: PathOpts): PathBase {\n if (pathPart === '' || pathPart === '.') {\n return this\n }\n if (pathPart === '..') {\n return this.parent || this\n }\n\n // find the child\n const children = this.children()\n const name =\n this.nocase ? normalizeNocase(pathPart) : normalize(pathPart)\n for (const p of children) {\n if (p.#matchName === name) {\n return p\n }\n }\n\n // didn't find it, create provisional child, since it might not\n // actually exist. If we know the parent isn't a dir, then\n // in fact it CAN'T exist.\n const s = this.parent ? this.sep : ''\n const fullpath =\n this.#fullpath ? this.#fullpath + s + pathPart : undefined\n const pchild = this.newChild(pathPart, UNKNOWN, {\n ...opts,\n parent: this,\n fullpath,\n })\n\n if (!this.canReaddir()) {\n pchild.#type |= ENOENT\n }\n\n // don't have to update provisional, because if we have real children,\n // then provisional is set to children.length, otherwise a lower number\n children.push(pchild)\n return pchild\n }\n\n /**\n * The relative path from the cwd. If it does not share an ancestor with\n * the cwd, then this ends up being equivalent to the fullpath()\n */\n relative(): string {\n if (this.isCWD) return ''\n if (this.#relative !== undefined) {\n return this.#relative\n }\n const name = this.name\n const p = this.parent\n if (!p) {\n return (this.#relative = this.name)\n }\n const pv = p.relative()\n return pv + (!pv || !p.parent ? '' : this.sep) + name\n }\n\n /**\n * The relative path from the cwd, using / as the path separator.\n * If it does not share an ancestor with\n * the cwd, then this ends up being equivalent to the fullpathPosix()\n * On posix systems, this is identical to relative().\n */\n relativePosix(): string {\n if (this.sep === '/') return this.relative()\n if (this.isCWD) return ''\n if (this.#relativePosix !== undefined) return this.#relativePosix\n const name = this.name\n const p = this.parent\n if (!p) {\n return (this.#relativePosix = this.fullpathPosix())\n }\n const pv = p.relativePosix()\n return pv + (!pv || !p.parent ? '' : '/') + name\n }\n\n /**\n * The fully resolved path string for this Path entry\n */\n fullpath(): string {\n if (this.#fullpath !== undefined) {\n return this.#fullpath\n }\n const name = this.name\n const p = this.parent\n if (!p) {\n return (this.#fullpath = this.name)\n }\n const pv = p.fullpath()\n const fp = pv + (!p.parent ? '' : this.sep) + name\n return (this.#fullpath = fp)\n }\n\n /**\n * On platforms other than windows, this is identical to fullpath.\n *\n * On windows, this is overridden to return the forward-slash form of the\n * full UNC path.\n */\n fullpathPosix(): string {\n if (this.#fullpathPosix !== undefined) return this.#fullpathPosix\n if (this.sep === '/') return (this.#fullpathPosix = this.fullpath())\n if (!this.parent) {\n const p = this.fullpath().replace(/\\\\/g, '/')\n if (/^[a-z]:\\//i.test(p)) {\n return (this.#fullpathPosix = `//?/${p}`)\n } else {\n return (this.#fullpathPosix = p)\n }\n }\n const p = this.parent\n const pfpp = p.fullpathPosix()\n const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name\n return (this.#fullpathPosix = fpp)\n }\n\n /**\n * Is the Path of an unknown type?\n *\n * Note that we might know *something* about it if there has been a previous\n * filesystem operation, for example that it does not exist, or is not a\n * link, or whether it has child entries.\n */\n isUnknown(): boolean {\n return (this.#type & IFMT) === UNKNOWN\n }\n\n isType(type: Type): boolean {\n return this[`is${type}`]()\n }\n\n getType(): Type {\n return (\n this.isUnknown() ? 'Unknown'\n : this.isDirectory() ? 'Directory'\n : this.isFile() ? 'File'\n : this.isSymbolicLink() ? 'SymbolicLink'\n : this.isFIFO() ? 'FIFO'\n : this.isCharacterDevice() ? 'CharacterDevice'\n : this.isBlockDevice() ? 'BlockDevice'\n : /* c8 ignore start */ this.isSocket() ? 'Socket'\n : 'Unknown'\n )\n /* c8 ignore stop */\n }\n\n /**\n * Is the Path a regular file?\n */\n isFile(): boolean {\n return (this.#type & IFMT) === IFREG\n }\n\n /**\n * Is the Path a directory?\n */\n isDirectory(): boolean {\n return (this.#type & IFMT) === IFDIR\n }\n\n /**\n * Is the path a character device?\n */\n isCharacterDevice(): boolean {\n return (this.#type & IFMT) === IFCHR\n }\n\n /**\n * Is the path a block device?\n */\n isBlockDevice(): boolean {\n return (this.#type & IFMT) === IFBLK\n }\n\n /**\n * Is the path a FIFO pipe?\n */\n isFIFO(): boolean {\n return (this.#type & IFMT) === IFIFO\n }\n\n /**\n * Is the path a socket?\n */\n isSocket(): boolean {\n return (this.#type & IFMT) === IFSOCK\n }\n\n /**\n * Is the path a symbolic link?\n */\n isSymbolicLink(): boolean {\n return (this.#type & IFLNK) === IFLNK\n }\n\n /**\n * Return the entry if it has been subject of a successful lstat, or\n * undefined otherwise.\n *\n * Does not read the filesystem, so an undefined result *could* simply\n * mean that we haven't called lstat on it.\n */\n lstatCached(): PathBase | undefined {\n return this.#type & LSTAT_CALLED ? this : undefined\n }\n\n /**\n * Return the cached link target if the entry has been the subject of a\n * successful readlink, or undefined otherwise.\n *\n * Does not read the filesystem, so an undefined result *could* just mean we\n * don't have any cached data. Only use it if you are very sure that a\n * readlink() has been called at some point.\n */\n readlinkCached(): PathBase | undefined {\n return this.#linkTarget\n }\n\n /**\n * Returns the cached realpath target if the entry has been the subject\n * of a successful realpath, or undefined otherwise.\n *\n * Does not read the filesystem, so an undefined result *could* just mean we\n * don't have any cached data. Only use it if you are very sure that a\n * realpath() has been called at some point.\n */\n realpathCached(): PathBase | undefined {\n return this.#realpath\n }\n\n /**\n * Returns the cached child Path entries array if the entry has been the\n * subject of a successful readdir(), or [] otherwise.\n *\n * Does not read the filesystem, so an empty array *could* just mean we\n * don't have any cached data. Only use it if you are very sure that a\n * readdir() has been called recently enough to still be valid.\n */\n readdirCached(): PathBase[] {\n const children = this.children()\n return children.slice(0, children.provisional)\n }\n\n /**\n * Return true if it's worth trying to readlink. Ie, we don't (yet) have\n * any indication that readlink will definitely fail.\n *\n * Returns false if the path is known to not be a symlink, if a previous\n * readlink failed, or if the entry does not exist.\n */\n canReadlink(): boolean {\n if (this.#linkTarget) return true\n if (!this.parent) return false\n // cases where it cannot possibly succeed\n const ifmt = this.#type & IFMT\n return !(\n (ifmt !== UNKNOWN && ifmt !== IFLNK) ||\n this.#type & ENOREADLINK ||\n this.#type & ENOENT\n )\n }\n\n /**\n * Return true if readdir has previously been successfully called on this\n * path, indicating that cachedReaddir() is likely valid.\n */\n calledReaddir(): boolean {\n return !!(this.#type & READDIR_CALLED)\n }\n\n /**\n * Returns true if the path is known to not exist. That is, a previous lstat\n * or readdir failed to verify its existence when that would have been\n * expected, or a parent entry was marked either enoent or enotdir.\n */\n isENOENT(): boolean {\n return !!(this.#type & ENOENT)\n }\n\n /**\n * Return true if the path is a match for the given path name. This handles\n * case sensitivity and unicode normalization.\n *\n * Note: even on case-sensitive systems, it is **not** safe to test the\n * equality of the `.name` property to determine whether a given pathname\n * matches, due to unicode normalization mismatches.\n *\n * Always use this method instead of testing the `path.name` property\n * directly.\n */\n isNamed(n: string): boolean {\n return !this.nocase ?\n this.#matchName === normalize(n)\n : this.#matchName === normalizeNocase(n)\n }\n\n /**\n * Return the Path object corresponding to the target of a symbolic link.\n *\n * If the Path is not a symbolic link, or if the readlink call fails for any\n * reason, `undefined` is returned.\n *\n * Result is cached, and thus may be outdated if the filesystem is mutated.\n */\n async readlink(): Promise<PathBase | undefined> {\n const target = this.#linkTarget\n if (target) {\n return target\n }\n if (!this.canReadlink()) {\n return undefined\n }\n /* c8 ignore start */\n // already covered by the canReadlink test, here for ts grumples\n if (!this.parent) {\n return undefined\n }\n /* c8 ignore stop */\n try {\n const read = await this.#fs.promises.readlink(this.fullpath())\n const linkTarget = (await this.parent.realpath())?.resolve(read)\n if (linkTarget) {\n return (this.#linkTarget = linkTarget)\n }\n } catch (er) {\n this.#readlinkFail((er as NodeJS.ErrnoException).code)\n return undefined\n }\n }\n\n /**\n * Synchronous {@link PathBase.readlink}\n */\n readlinkSync(): PathBase | undefined {\n const target = this.#linkTarget\n if (target) {\n return target\n }\n if (!this.canReadlink()) {\n return undefined\n }\n /* c8 ignore start */\n // already covered by the canReadlink test, here for ts grumples\n if (!this.parent) {\n return undefined\n }\n /* c8 ignore stop */\n try {\n const read = this.#fs.readlinkSync(this.fullpath())\n const linkTarget = this.parent.realpathSync()?.resolve(read)\n if (linkTarget) {\n return (this.#linkTarget = linkTarget)\n }\n } catch (er) {\n this.#readlinkFail((er as NodeJS.ErrnoException).code)\n return undefined\n }\n }\n\n #readdirSuccess(children: Children) {\n // succeeded, mark readdir called bit\n this.#type |= READDIR_CALLED\n // mark all remaining provisional children as ENOENT\n for (let p = children.provisional; p < children.length; p++) {\n const c = children[p]\n if (c) c.#markENOENT()\n }\n }\n\n #markENOENT() {\n // mark as UNKNOWN and ENOENT\n if (this.#type & ENOENT) return\n this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN\n this.#markChildrenENOENT()\n }\n\n #markChildrenENOENT() {\n // all children are provisional and do not exist\n const children = this.children()\n children.provisional = 0\n for (const p of children) {\n p.#markENOENT()\n }\n }\n\n #markENOREALPATH() {\n this.#type |= ENOREALPATH\n this.#markENOTDIR()\n }\n\n // save the information when we know the entry is not a dir\n #markENOTDIR() {\n // entry is not a directory, so any children can't exist.\n // this *should* be impossible, since any children created\n // after it's been marked ENOTDIR should be marked ENOENT,\n // so it won't even get to this point.\n /* c8 ignore start */\n if (this.#type & ENOTDIR) return\n /* c8 ignore stop */\n let t = this.#type\n // this could happen if we stat a dir, then delete it,\n // then try to read it or one of its children.\n if ((t & IFMT) === IFDIR) t &= IFMT_UNKNOWN\n this.#type = t | ENOTDIR\n this.#markChildrenENOENT()\n }\n\n #readdirFail(code: string = '') {\n // markENOTDIR and markENOENT also set provisional=0\n if (code === 'ENOTDIR' || code === 'EPERM') {\n this.#markENOTDIR()\n } else if (code === 'ENOENT') {\n this.#markENOENT()\n } else {\n this.children().provisional = 0\n }\n }\n\n #lstatFail(code: string = '') {\n // Windows just raises ENOENT in this case, disable for win CI\n /* c8 ignore start */\n if (code === 'ENOTDIR') {\n // already know it has a parent by this point\n const p = this.parent as PathBase\n p.#markENOTDIR()\n } else if (code === 'ENOENT') {\n /* c8 ignore stop */\n this.#markENOENT()\n }\n }\n\n #readlinkFail(code: string = '') {\n let ter = this.#type\n ter |= ENOREADLINK\n if (code === 'ENOENT') ter |= ENOENT\n // windows gets a weird error when you try to readlink a file\n if (code === 'EINVAL' || code === 'UNKNOWN') {\n // exists, but not a symlink, we don't know WHAT it is, so remove\n // all IFMT bits.\n ter &= IFMT_UNKNOWN\n }\n this.#type = ter\n // windows just gets ENOENT in this case. We do cover the case,\n // just disabled because it's impossible on Windows CI\n /* c8 ignore start */\n if (code === 'ENOTDIR' && this.parent) {\n this.parent.#markENOTDIR()\n }\n /* c8 ignore stop */\n }\n\n #readdirAddChild(e: Dirent, c: Children) {\n return (\n this.#readdirMaybePromoteChild(e, c) ||\n this.#readdirAddNewChild(e, c)\n )\n }\n\n #readdirAddNewChild(e: Dirent, c: Children): PathBase {\n // alloc new entry at head, so it's never provisional\n const type = entToType(e)\n const child = this.newChild(e.name, type, { parent: this })\n const ifmt = child.#type & IFMT\n if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {\n child.#type |= ENOTDIR\n }\n c.unshift(child)\n c.provisional++\n return child\n }\n\n #readdirMaybePromoteChild(e: Dirent, c: Children): PathBase | undefined {\n for (let p = c.provisional; p < c.length; p++) {\n const pchild = c[p]\n const name =\n this.nocase ? normalizeNocase(e.name) : normalize(e.name)\n if (name !== pchild!.#matchName) {\n continue\n }\n\n return this.#readdirPromoteChild(e, pchild!, p, c)\n }\n }\n\n #readdirPromoteChild(\n e: Dirent,\n p: PathBase,\n index: number,\n c: Children,\n ): PathBase {\n const v = p.name\n // retain any other flags, but set ifmt from dirent\n p.#type = (p.#type & IFMT_UNKNOWN) | entToType(e)\n // case sensitivity fixing when we learn the true name.\n if (v !== e.name) p.name = e.name\n\n // just advance provisional index (potentially off the list),\n // otherwise we have to splice/pop it out and re-insert at head\n if (index !== c.provisional) {\n if (index === c.length - 1) c.pop()\n else c.splice(index, 1)\n c.unshift(p)\n }\n c.provisional++\n return p\n }\n\n /**\n * Call lstat() on this Path, and update all known information that can be\n * determined.\n *\n * Note that unlike `fs.lstat()`, the returned value does not contain some\n * information, such as `mode`, `dev`, `nlink`, and `ino`. If that\n * information is required, you will need to call `fs.lstat` yourself.\n *\n * If the Path refers to a nonexistent file, or if the lstat call fails for\n * any reason, `undefined` is returned. Otherwise the updated Path object is\n * returned.\n *\n * Results are cached, and thus may be out of date if the filesystem is\n * mutated.\n */\n async lstat(): Promise<PathBase | undefined> {\n if ((this.#type & ENOENT) === 0) {\n try {\n this.#applyStat(await this.#fs.promises.lstat(this.fullpath()))\n return this\n } catch (er) {\n this.#lstatFail((er as NodeJS.ErrnoException).code)\n }\n }\n }\n\n /**\n * synchronous {@link PathBase.lstat}\n */\n lstatSync(): PathBase | undefined {\n if ((this.#type & ENOENT) === 0) {\n try {\n this.#applyStat(this.#fs.lstatSync(this.fullpath()))\n return this\n } catch (er) {\n this.#lstatFail((er as NodeJS.ErrnoException).code)\n }\n }\n }\n\n #applyStat(st: Stats) {\n const {\n atime,\n atimeMs,\n birthtime,\n birthtimeMs,\n blksize,\n blocks,\n ctime,\n ctimeMs,\n dev,\n gid,\n ino,\n mode,\n mtime,\n mtimeMs,\n nlink,\n rdev,\n size,\n uid,\n } = st\n this.#atime = atime\n this.#atimeMs = atimeMs\n this.#birthtime = birthtime\n this.#birthtimeMs = birthtimeMs\n this.#blksize = blksize\n this.#blocks = blocks\n this.#ctime = ctime\n this.#ctimeMs = ctimeMs\n this.#dev = dev\n this.#gid = gid\n this.#ino = ino\n this.#mode = mode\n this.#mtime = mtime\n this.#mtimeMs = mtimeMs\n this.#nlink = nlink\n this.#rdev = rdev\n this.#size = size\n this.#uid = uid\n const ifmt = entToType(st)\n // retain any other flags, but set the ifmt\n this.#type = (this.#type & IFMT_UNKNOWN) | ifmt | LSTAT_CALLED\n if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {\n this.#type |= ENOTDIR\n }\n }\n\n #onReaddirCB: ((\n er: NodeJS.ErrnoException | null,\n entries: Path[],\n ) => any)[] = []\n #readdirCBInFlight: boolean = false\n #callOnReaddirCB(children: Path[]) {\n this.#readdirCBInFlight = false\n const cbs = this.#onReaddirCB.slice()\n this.#onReaddirCB.length = 0\n cbs.forEach(cb => cb(null, children))\n }\n\n /**\n * Standard node-style callback interface to get list of directory entries.\n *\n * If the Path cannot or does not contain any children, then an empty array\n * is returned.\n *\n * Results are cached, and thus may be out of date if the filesystem is\n * mutated.\n *\n * @param cb The callback called with (er, entries). Note that the `er`\n * param is somewhat extraneous, as all readdir() errors are handled and\n * simply result in an empty set of entries being returned.\n * @param allowZalgo Boolean indicating that immediately known results should\n * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release\n * zalgo at your peril, the dark pony lord is devious and unforgiving.\n */\n readdirCB(\n cb: (er: NodeJS.ErrnoException | null, entries: PathBase[]) => any,\n allowZalgo: boolean = false,\n ): void {\n if (!this.canReaddir()) {\n if (allowZalgo) cb(null, [])\n else queueMicrotask(() => cb(null, []))\n return\n }\n\n const children = this.children()\n if (this.calledReaddir()) {\n const c = children.slice(0, children.provisional)\n if (allowZalgo) cb(null, c)\n else queueMicrotask(() => cb(null, c))\n return\n }\n\n // don't have to worry about zalgo at this point.\n this.#onReaddirCB.push(cb)\n if (this.#readdirCBInFlight) {\n return\n }\n this.#readdirCBInFlight = true\n\n // else read the directory, fill up children\n // de-provisionalize any provisional children.\n const fullpath = this.fullpath()\n this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {\n if (er) {\n this.#readdirFail((er as NodeJS.ErrnoException).code)\n children.provisional = 0\n } else {\n // if we didn't get an error, we always get entries.\n //@ts-ignore\n for (const e of entries) {\n this.#readdirAddChild(e, children)\n }\n this.#readdirSuccess(children)\n }\n this.#callOnReaddirCB(children.slice(0, children.provisional))\n return\n })\n }\n\n #asyncReaddirInFlight?: Promise<void>\n\n /**\n * Return an array of known child entries.\n *\n * If the Path cannot or does not contain any children, then an empty array\n * is returned.\n *\n * Results are cached, and thus may be out of date if the filesystem is\n * mutated.\n */\n async readdir(): Promise<PathBase[]> {\n if (!this.canReaddir()) {\n return []\n }\n\n const children = this.children()\n if (this.calledReaddir()) {\n return children.slice(0, children.provisional)\n }\n\n // else read the directory, fill up children\n // de-provisionalize any provisional children.\n const fullpath = this.fullpath()\n if (this.#asyncReaddirInFlight) {\n await this.#asyncReaddirInFlight\n } else {\n /* c8 ignore start */\n let resolve: () => void = () => {}\n /* c8 ignore stop */\n this.#asyncReaddirInFlight = new Promise<void>(\n res => (resolve = res),\n )\n try {\n for (const e of await this.#fs.promises.readdir(fullpath, {\n withFileTypes: true,\n })) {\n this.#readdirAddChild(e, children)\n }\n this.#readdirSuccess(children)\n } catch (er) {\n this.#readdirFail((er as NodeJS.ErrnoException).code)\n children.provisional = 0\n }\n this.#asyncReaddirInFlight = undefined\n resolve()\n }\n return children.slice(0, children.provisional)\n }\n\n /**\n * synchronous {@link PathBase.readdir}\n */\n readdirSync(): PathBase[] {\n if (!this.canReaddir()) {\n return []\n }\n\n const children = this.children()\n if (this.calledReaddir()) {\n return children.slice(0, children.provisional)\n }\n\n // else read the directory, fill up children\n // de-provisionalize any provisional children.\n const fullpath = this.fullpath()\n try {\n for (const e of this.#fs.readdirSync(fullpath, {\n withFileTypes: true,\n })) {\n this.#readdirAddChild(e, children)\n }\n this.#readdirSuccess(children)\n } catch (er) {\n this.#readdirFail((er as NodeJS.ErrnoException).code)\n children.provisional = 0\n }\n return children.slice(0, children.provisional)\n }\n\n canReaddir() {\n if (this.#type & ENOCHILD) return false\n const ifmt = IFMT & this.#type\n // we always set ENOTDIR when setting IFMT, so should be impossible\n /* c8 ignore start */\n if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {\n return false\n }\n /* c8 ignore stop */\n return true\n }\n\n shouldWalk(\n dirs: Set<PathBase | undefined>,\n walkFilter?: (e: PathBase) => boolean,\n ): boolean {\n return (\n (this.#type & IFDIR) === IFDIR &&\n !(this.#type & ENOCHILD) &&\n !dirs.has(this) &&\n (!walkFilter || walkFilter(this))\n )\n }\n\n /**\n * Return the Path object corresponding to path as resolved\n * by realpath(3).\n *\n * If the realpath call fails for any reason, `undefined` is returned.\n *\n * Result is cached, and thus may be outdated if the filesystem is mutated.\n * On success, returns a Path object.\n */\n async realpath(): Promise<PathBase | undefined> {\n if (this.#realpath) return this.#realpath\n if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) return undefined\n try {\n const rp = await this.#fs.promises.realpath(this.fullpath())\n return (this.#realpath = this.resolve(rp))\n } catch (_) {\n this.#markENOREALPATH()\n }\n }\n\n /**\n * Synchronous {@link realpath}\n */\n realpathSync(): PathBase | undefined {\n if (this.#realpath) return this.#realpath\n if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) return undefined\n try {\n const rp = this.#fs.realpathSync(this.fullpath())\n return (this.#realpath = this.resolve(rp))\n } catch (_) {\n this.#markENOREALPATH()\n }\n }\n\n /**\n * Internal method to mark this Path object as the scurry cwd,\n * called by {@link PathScurry#chdir}\n *\n * @internal\n */\n [setAsCwd](oldCwd: PathBase): void {\n if (oldCwd === this) return\n oldCwd.isCWD = false\n this.isCWD = true\n\n const changed = new Set<PathBase>([])\n let rp = []\n let p: PathBase = this\n while (p && p.parent) {\n changed.add(p)\n p.#relative = rp.join(this.sep)\n p.#relativePosix = rp.join('/')\n p = p.parent\n rp.push('..')\n }\n // now un-memoize parents of old cwd\n p = oldCwd\n while (p && p.parent && !changed.has(p)) {\n p.#relative = undefined\n p.#relativePosix = undefined\n p = p.parent\n }\n }\n}\n\n/**\n * Path class used on win32 systems\n *\n * Uses `'\\\\'` as the path separator for returned paths, either `'\\\\'` or `'/'`\n * as the path separator for parsing paths.\n */\nexport class PathWin32 extends PathBase {\n /**\n * Separator for generating path strings.\n */\n sep: '\\\\' = '\\\\'\n /**\n * Separator for parsing path strings.\n */\n splitSep: RegExp = eitherSep\n\n /**\n * Do not create new Path objects directly. They should always be accessed\n * via the PathScurry class or other methods on the Path class.\n *\n * @internal\n */\n constructor(\n name: string,\n type: number = UNKNOWN,\n root: PathBase | undefined,\n roots: { [k: string]: PathBase },\n nocase: boolean,\n children: ChildrenCache,\n opts: PathOpts,\n ) {\n super(name, type, root, roots, nocase, children, opts)\n }\n\n /**\n * @internal\n */\n newChild(name: string, type: number = UNKNOWN, opts: PathOpts = {}) {\n return new PathWin32(\n name,\n type,\n this.root,\n this.roots,\n this.nocase,\n this.childrenCache(),\n opts,\n )\n }\n\n /**\n * @internal\n */\n getRootString(path: string): string {\n return win32.parse(path).root\n }\n\n /**\n * @internal\n */\n getRoot(rootPath: string): PathBase {\n rootPath = uncToDrive(rootPath.toUpperCase())\n if (rootPath === this.root.name) {\n return this.root\n }\n // ok, not that one, check if it matches another we know about\n for (const [compare, root] of Object.entries(this.roots)) {\n if (this.sameRoot(rootPath, compare)) {\n return (this.roots[rootPath] = root)\n }\n }\n // otherwise, have to create a new one.\n return (this.roots[rootPath] = new PathScurryWin32(\n rootPath,\n this,\n ).root)\n }\n\n /**\n * @internal\n */\n sameRoot(rootPath: string, compare: string = this.root.name): boolean {\n // windows can (rarely) have case-sensitive filesystem, but\n // UNC and drive letters are always case-insensitive, and canonically\n // represented uppercase.\n rootPath = rootPath\n .toUpperCase()\n .replace(/\\//g, '\\\\')\n .replace(uncDriveRegexp, '$1\\\\')\n return rootPath === compare\n }\n}\n\n/**\n * Path class used on all posix systems.\n *\n * Uses `'/'` as the path separator.\n */\nexport class PathPosix extends PathBase {\n /**\n * separator for parsing path strings\n */\n splitSep: '/' = '/'\n /**\n * separator for generating path strings\n */\n sep: '/' = '/'\n\n /**\n * Do not create new Path objects directly. They should always be accessed\n * via the PathScurry class or other methods on the Path class.\n *\n * @internal\n */\n constructor(\n name: string,\n type: number = UNKNOWN,\n root: PathBase | undefined,\n roots: { [k: string]: PathBase },\n nocase: boolean,\n children: ChildrenCache,\n opts: PathOpts,\n ) {\n super(name, type, root, roots, nocase, children, opts)\n }\n\n /**\n * @internal\n */\n getRootString(path: string): string {\n return path.startsWith('/') ? '/' : ''\n }\n\n /**\n * @internal\n */\n getRoot(_rootPath: string): PathBase {\n return this.root\n }\n\n /**\n * @internal\n */\n newChild(name: string, type: number = UNKNOWN, opts: PathOpts = {}) {\n return new PathPosix(\n name,\n type,\n this.root,\n this.roots,\n this.nocase,\n this.childrenCache(),\n opts,\n )\n }\n}\n\n/**\n * Options that may be provided to the PathScurry constructor\n */\nexport interface PathScurryOpts {\n /**\n * perform case-insensitive path matching. Default based on platform\n * subclass.\n */\n nocase?: boolean\n /**\n * Number of Path entries to keep in the cache of Path child references.\n *\n * Setting this higher than 65536 will dramatically increase the data\n * consumption and construction time overhead of each PathScurry.\n *\n * Setting this value to 256 or lower will significantly reduce the data\n * consumption and construction time overhead, but may also reduce resolve()\n * and readdir() performance on large filesystems.\n *\n * Default `16384`.\n */\n childrenCacheSize?: number\n /**\n * An object that overrides the built-in functions from the fs and\n * fs/promises modules.\n *\n * See {@link FSOption}\n */\n fs?: FSOption\n}\n\n/**\n * The base class for all PathScurry classes, providing the interface for path\n * resolution and filesystem operations.\n *\n * Typically, you should *not* instantiate this class directly, but rather one\n * of the platform-specific classes, or the exported {@link PathScurry} which\n * defaults to the current platform.\n */\nexport abstract class PathScurryBase {\n /**\n * The root Path entry for the current working directory of this Scurry\n */\n root: PathBase\n /**\n * The string path for the root of this Scurry's current working directory\n */\n rootPath: string\n /**\n * A collection of all roots encountered, referenced by rootPath\n */\n roots: { [k: string]: PathBase }\n /**\n * The Path entry corresponding to this PathScurry's current working directory.\n */\n cwd: PathBase\n #resolveCache: ResolveCache\n #resolvePosixCache: ResolveCache\n #children: ChildrenCache\n /**\n * Perform path comparisons case-insensitively.\n *\n * Defaults true on Darwin and Windows systems, false elsewhere.\n */\n nocase: boolean\n\n /**\n * The path separator used for parsing paths\n *\n * `'/'` on Posix systems, either `'/'` or `'\\\\'` on Windows\n */\n abstract sep: string | RegExp\n\n #fs: FSValue\n\n /**\n * This class should not be instantiated directly.\n *\n * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry\n *\n * @internal\n */\n constructor(\n cwd: URL | string = process.cwd(),\n pathImpl: typeof win32 | typeof posix,\n sep: string | RegExp,\n {\n nocase,\n childrenCacheSize = 16 * 1024,\n fs = defaultFS,\n }: PathScurryOpts = {},\n ) {\n this.#fs = fsFromOption(fs)\n if (cwd instanceof URL || cwd.startsWith('file://')) {\n cwd = fileURLToPath(cwd)\n }\n // resolve and split root, and then add to the store.\n // this is the only time we call path.resolve()\n const cwdPath = pathImpl.resolve(cwd)\n this.roots = Object.create(null)\n this.rootPath = this.parseRootPath(cwdPath)\n this.#resolveCache = new ResolveCache()\n this.#resolvePosixCache = new ResolveCache()\n this.#children = new ChildrenCache(childrenCacheSize)\n\n const split = cwdPath.substring(this.rootPath.length).split(sep)\n // resolve('/') leaves '', splits to [''], we don't want that.\n if (split.length === 1 && !split[0]) {\n split.pop()\n }\n /* c8 ignore start */\n if (nocase === undefined) {\n throw new TypeError(\n 'must provide nocase setting to PathScurryBase ctor',\n )\n }\n /* c8 ignore stop */\n this.nocase = nocase\n this.root = this.newRoot(this.#fs)\n this.roots[this.rootPath] = this.root\n let prev: PathBase = this.root\n let len = split.length - 1\n const joinSep = pathImpl.sep\n let abs = this.rootPath\n let sawFirst = false\n for (const part of split) {\n const l = len--\n prev = prev.child(part, {\n relative: new Array(l).fill('..').join(joinSep),\n relativePosix: new Array(l).fill('..').join('/'),\n fullpath: (abs += (sawFirst ? '' : joinSep) + part),\n })\n sawFirst = true\n }\n this.cwd = prev\n }\n\n /**\n * Get the depth of a provided path, string, or the cwd\n */\n depth(path: Path | string = this.cwd): number {\n if (typeof path === 'string') {\n path = this.cwd.resolve(path)\n }\n return path.depth()\n }\n\n /**\n * Parse the root portion of a path string\n *\n * @internal\n */\n abstract parseRootPath(dir: string): string\n /**\n * create a new Path to use as root during construction.\n *\n * @internal\n */\n abstract newRoot(fs: FSValue): PathBase\n /**\n * Determine whether a given path string is absolute\n */\n abstract isAbsolute(p: string): boolean\n\n /**\n * Return the cache of child entries. Exposed so subclasses can create\n * child Path objects in a platform-specific way.\n *\n * @internal\n */\n childrenCache() {\n return this.#children\n }\n\n /**\n * Resolve one or more path strings to a resolved string\n *\n * Same interface as require('path').resolve.\n *\n * Much faster than path.resolve() when called multiple times for the same\n * path, because the resolved Path objects are cached. Much slower\n * otherwise.\n */\n resolve(...paths: string[]): string {\n // first figure out the minimum number of paths we have to test\n // we always start at cwd, but any absolutes will bump the start\n let r = ''\n for (let i = paths.length - 1; i >= 0; i--) {\n const p = paths[i]\n if (!p || p === '.') continue\n r = r ? `${p}/${r}` : p\n if (this.isAbsolute(p)) {\n break\n }\n }\n const cached = this.#resolveCache.get(r)\n if (cached !== undefined) {\n return cached\n }\n const result = this.cwd.resolve(r).fullpath()\n this.#resolveCache.set(r, result)\n return result\n }\n\n /**\n * Resolve one or more path strings to a resolved string, returning\n * the posix path. Identical to .resolve() on posix systems, but on\n * windows will return a forward-slash separated UNC path.\n *\n * Same interface as require('path').resolve.\n *\n * Much faster than path.resolve() when called multiple times for the same\n * path, because the resolved Path objects are cached. Much slower\n * otherwise.\n */\n resolvePosix(...paths: string[]): string {\n // first figure out the minimum number of paths we have to test\n // we always start at cwd, but any absolutes will bump the start\n let r = ''\n for (let i = paths.length - 1; i >= 0; i--) {\n const p = paths[i]\n if (!p || p === '.') continue\n r = r ? `${p}/${r}` : p\n if (this.isAbsolute(p)) {\n break\n }\n }\n const cached = this.#resolvePosixCache.get(r)\n if (cached !== undefined) {\n return cached\n }\n const result = this.cwd.resolve(r).fullpathPosix()\n this.#resolvePosixCache.set(r, result)\n return result\n }\n\n /**\n * find the relative path from the cwd to the supplied path string or entry\n */\n relative(entry: PathBase | string = this.cwd): string {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n }\n return entry.relative()\n }\n\n /**\n * find the relative path from the cwd to the supplied path string or\n * entry, using / as the path delimiter, even on Windows.\n */\n relativePosix(entry: PathBase | string = this.cwd): string {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n }\n return entry.relativePosix()\n }\n\n /**\n * Return the basename for the provided string or Path object\n */\n basename(entry: PathBase | string = this.cwd): string {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n }\n return entry.name\n }\n\n /**\n * Return the dirname for the provided string or Path object\n */\n dirname(entry: PathBase | string = this.cwd): string {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n }\n return (entry.parent || entry).fullpath()\n }\n\n /**\n * Return an array of known child entries.\n *\n * First argument may be either a string, or a Path object.\n *\n * If the Path cannot or does not contain any children, then an empty array\n * is returned.\n *\n * Results are cached, and thus may be out of date if the filesystem is\n * mutated.\n *\n * Unlike `fs.readdir()`, the `withFileTypes` option defaults to `true`. Set\n * `{ withFileTypes: false }` to return strings.\n */\n\n readdir(): Promise<PathBase[]>\n readdir(opts: { withFileTypes: true }): Promise<PathBase[]>\n readdir(opts: { withFileTypes: false }): Promise<string[]>\n readdir(opts: { withFileTypes: boolean }): Promise<PathBase[] | string[]>\n readdir(entry: PathBase | string): Promise<PathBase[]>\n readdir(\n entry: PathBase | string,\n opts: { withFileTypes: true },\n ): Promise<PathBase[]>\n readdir(\n entry: PathBase | string,\n opts: { withFileTypes: false },\n ): Promise<string[]>\n readdir(\n entry: PathBase | string,\n opts: { withFileTypes: boolean },\n ): Promise<PathBase[] | string[]>\n async readdir(\n entry: PathBase | string | { withFileTypes: boolean } = this.cwd,\n opts: { withFileTypes: boolean } = {\n withFileTypes: true,\n },\n ): Promise<PathBase[] | string[]> {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n opts = entry\n entry = this.cwd\n }\n const { withFileTypes } = opts\n if (!entry.canReaddir()) {\n return []\n } else {\n const p = await entry.readdir()\n return withFileTypes ? p : p.map(e => e.name)\n }\n }\n\n /**\n * synchronous {@link PathScurryBase.readdir}\n */\n readdirSync(): PathBase[]\n readdirSync(opts: { withFileTypes: true }): PathBase[]\n readdirSync(opts: { withFileTypes: false }): string[]\n readdirSync(opts: { withFileTypes: boolean }): PathBase[] | string[]\n readdirSync(entry: PathBase | string): PathBase[]\n readdirSync(\n entry: PathBase | string,\n opts: { withFileTypes: true },\n ): PathBase[]\n readdirSync(\n entry: PathBase | string,\n opts: { withFileTypes: false },\n ): string[]\n readdirSync(\n entry: PathBase | string,\n opts: { withFileTypes: boolean },\n ): PathBase[] | string[]\n readdirSync(\n entry: PathBase | string | { withFileTypes: boolean } = this.cwd,\n opts: { withFileTypes: boolean } = {\n withFileTypes: true,\n },\n ): PathBase[] | string[] {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n opts = entry\n entry = this.cwd\n }\n const { withFileTypes = true } = opts\n if (!entry.canReaddir()) {\n return []\n } else if (withFileTypes) {\n return entry.readdirSync()\n } else {\n return entry.readdirSync().map(e => e.name)\n }\n }\n\n /**\n * Call lstat() on the string or Path object, and update all known\n * information that can be determined.\n *\n * Note that unlike `fs.lstat()`, the returned value does not contain some\n * information, such as `mode`, `dev`, `nlink`, and `ino`. If that\n * information is required, you will need to call `fs.lstat` yourself.\n *\n * If the Path refers to a nonexistent file, or if the lstat call fails for\n * any reason, `undefined` is returned. Otherwise the updated Path object is\n * returned.\n *\n * Results are cached, and thus may be out of date if the filesystem is\n * mutated.\n */\n async lstat(\n entry: string | PathBase = this.cwd,\n ): Promise<PathBase | undefined> {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n }\n return entry.lstat()\n }\n\n /**\n * synchronous {@link PathScurryBase.lstat}\n */\n lstatSync(entry: string | PathBase = this.cwd): PathBase | undefined {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n }\n return entry.lstatSync()\n }\n\n /**\n * Return the Path object or string path corresponding to the target of a\n * symbolic link.\n *\n * If the path is not a symbolic link, or if the readlink call fails for any\n * reason, `undefined` is returned.\n *\n * Result is cached, and thus may be outdated if the filesystem is mutated.\n *\n * `{withFileTypes}` option defaults to `false`.\n *\n * On success, returns a Path object if `withFileTypes` option is true,\n * otherwise a string.\n */\n readlink(): Promise<string | undefined>\n readlink(opt: { withFileTypes: false }): Promise<string | undefined>\n readlink(opt: { withFileTypes: true }): Promise<PathBase | undefined>\n readlink(opt: {\n withFileTypes: boolean\n }): Promise<PathBase | string | undefined>\n readlink(\n entry: string | PathBase,\n opt?: { withFileTypes: false },\n ): Promise<string | undefined>\n readlink(\n entry: string | PathBase,\n opt: { withFileTypes: true },\n ): Promise<PathBase | undefined>\n readlink(\n entry: string | PathBase,\n opt: { withFileTypes: boolean },\n ): Promise<string | PathBase | undefined>\n async readlink(\n entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n { withFileTypes }: { withFileTypes: boolean } = {\n withFileTypes: false,\n },\n ): Promise<string | PathBase | undefined> {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n withFileTypes = entry.withFileTypes\n entry = this.cwd\n }\n const e = await entry.readlink()\n return withFileTypes ? e : e?.fullpath()\n }\n\n /**\n * synchronous {@link PathScurryBase.readlink}\n */\n readlinkSync(): string | undefined\n readlinkSync(opt: { withFileTypes: false }): string | undefined\n readlinkSync(opt: { withFileTypes: true }): PathBase | undefined\n readlinkSync(opt: {\n withFileTypes: boolean\n }): PathBase | string | undefined\n readlinkSync(\n entry: string | PathBase,\n opt?: { withFileTypes: false },\n ): string | undefined\n readlinkSync(\n entry: string | PathBase,\n opt: { withFileTypes: true },\n ): PathBase | undefined\n readlinkSync(\n entry: string | PathBase,\n opt: { withFileTypes: boolean },\n ): string | PathBase | undefined\n readlinkSync(\n entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n { withFileTypes }: { withFileTypes: boolean } = {\n withFileTypes: false,\n },\n ): string | PathBase | undefined {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n withFileTypes = entry.withFileTypes\n entry = this.cwd\n }\n const e = entry.readlinkSync()\n return withFileTypes ? e : e?.fullpath()\n }\n\n /**\n * Return the Path object or string path corresponding to path as resolved\n * by realpath(3).\n *\n * If the realpath call fails for any reason, `undefined` is returned.\n *\n * Result is cached, and thus may be outdated if the filesystem is mutated.\n *\n * `{withFileTypes}` option defaults to `false`.\n *\n * On success, returns a Path object if `withFileTypes` option is true,\n * otherwise a string.\n */\n realpath(): Promise<string | undefined>\n realpath(opt: { withFileTypes: false }): Promise<string | undefined>\n realpath(opt: { withFileTypes: true }): Promise<PathBase | undefined>\n realpath(opt: {\n withFileTypes: boolean\n }): Promise<PathBase | string | undefined>\n realpath(\n entry: string | PathBase,\n opt?: { withFileTypes: false },\n ): Promise<string | undefined>\n realpath(\n entry: string | PathBase,\n opt: { withFileTypes: true },\n ): Promise<PathBase | undefined>\n realpath(\n entry: string | PathBase,\n opt: { withFileTypes: boolean },\n ): Promise<string | PathBase | undefined>\n async realpath(\n entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n { withFileTypes }: { withFileTypes: boolean } = {\n withFileTypes: false,\n },\n ): Promise<string | PathBase | undefined> {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n withFileTypes = entry.withFileTypes\n entry = this.cwd\n }\n const e = await entry.realpath()\n return withFileTypes ? e : e?.fullpath()\n }\n\n realpathSync(): string | undefined\n realpathSync(opt: { withFileTypes: false }): string | undefined\n realpathSync(opt: { withFileTypes: true }): PathBase | undefined\n realpathSync(opt: {\n withFileTypes: boolean\n }): PathBase | string | undefined\n realpathSync(\n entry: string | PathBase,\n opt?: { withFileTypes: false },\n ): string | undefined\n realpathSync(\n entry: string | PathBase,\n opt: { withFileTypes: true },\n ): PathBase | undefined\n realpathSync(\n entry: string | PathBase,\n opt: { withFileTypes: boolean },\n ): string | PathBase | undefined\n realpathSync(\n entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n { withFileTypes }: { withFileTypes: boolean } = {\n withFileTypes: false,\n },\n ): string | PathBase | undefined {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n withFileTypes = entry.withFileTypes\n entry = this.cwd\n }\n const e = entry.realpathSync()\n return withFileTypes ? e : e?.fullpath()\n }\n\n /**\n * Asynchronously walk the directory tree, returning an array of\n * all path strings or Path objects found.\n *\n * Note that this will be extremely memory-hungry on large filesystems.\n * In such cases, it may be better to use the stream or async iterator\n * walk implementation.\n */\n walk(): Promise<PathBase[]>\n walk(\n opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n ): Promise<PathBase[]>\n walk(opts: WalkOptionsWithFileTypesFalse): Promise<string[]>\n walk(opts: WalkOptions): Promise<string[] | PathBase[]>\n walk(entry: string | PathBase): Promise<PathBase[]>\n walk(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n ): Promise<PathBase[]>\n walk(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesFalse,\n ): Promise<string[]>\n walk(\n entry: string | PathBase,\n opts: WalkOptions,\n ): Promise<PathBase[] | string[]>\n async walk(\n entry: string | PathBase | WalkOptions = this.cwd,\n opts: WalkOptions = {},\n ): Promise<PathBase[] | string[]> {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n opts = entry\n entry = this.cwd\n }\n const {\n withFileTypes = true,\n follow = false,\n filter,\n walkFilter,\n } = opts\n const results: (string | PathBase)[] = []\n if (!filter || filter(entry)) {\n results.push(withFileTypes ? entry : entry.fullpath())\n }\n const dirs = new Set<PathBase>()\n const walk = (\n dir: PathBase,\n cb: (er?: NodeJS.ErrnoException) => void,\n ) => {\n dirs.add(dir)\n dir.readdirCB((er, entries) => {\n /* c8 ignore start */\n if (er) {\n return cb(er)\n }\n /* c8 ignore stop */\n let len = entries.length\n if (!len) return cb()\n const next = () => {\n if (--len === 0) {\n cb()\n }\n }\n for (const e of entries) {\n if (!filter || filter(e)) {\n results.push(withFileTypes ? e : e.fullpath())\n }\n if (follow && e.isSymbolicLink()) {\n e.realpath()\n .then(r => (r?.isUnknown() ? r.lstat() : r))\n .then(r =>\n r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next(),\n )\n } else {\n if (e.shouldWalk(dirs, walkFilter)) {\n walk(e, next)\n } else {\n next()\n }\n }\n }\n }, true) // zalgooooooo\n }\n\n const start = entry\n return new Promise<PathBase[] | string[]>((res, rej) => {\n walk(start, er => {\n /* c8 ignore start */\n if (er) return rej(er)\n /* c8 ignore stop */\n res(results as PathBase[] | string[])\n })\n })\n }\n\n /**\n * Synchronously walk the directory tree, returning an array of\n * all path strings or Path objects found.\n *\n * Note that this will be extremely memory-hungry on large filesystems.\n * In such cases, it may be better to use the stream or async iterator\n * walk implementation.\n */\n walkSync(): PathBase[]\n walkSync(\n opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n ): PathBase[]\n walkSync(opts: WalkOptionsWithFileTypesFalse): string[]\n walkSync(opts: WalkOptions): string[] | PathBase[]\n walkSync(entry: string | PathBase): PathBase[]\n walkSync(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n ): PathBase[]\n walkSync(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesFalse,\n ): string[]\n walkSync(\n entry: string | PathBase,\n opts: WalkOptions,\n ): PathBase[] | string[]\n walkSync(\n entry: string | PathBase | WalkOptions = this.cwd,\n opts: WalkOptions = {},\n ): PathBase[] | string[] {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n opts = entry\n entry = this.cwd\n }\n const {\n withFileTypes = true,\n follow = false,\n filter,\n walkFilter,\n } = opts\n const results: (string | PathBase)[] = []\n if (!filter || filter(entry)) {\n results.push(withFileTypes ? entry : entry.fullpath())\n }\n const dirs = new Set<PathBase>([entry])\n for (const dir of dirs) {\n const entries = dir.readdirSync()\n for (const e of entries) {\n if (!filter || filter(e)) {\n results.push(withFileTypes ? e : e.fullpath())\n }\n let r: PathBase | undefined = e\n if (e.isSymbolicLink()) {\n if (!(follow && (r = e.realpathSync()))) continue\n if (r.isUnknown()) r.lstatSync()\n }\n if (r.shouldWalk(dirs, walkFilter)) {\n dirs.add(r)\n }\n }\n }\n return results as string[] | PathBase[]\n }\n\n /**\n * Support for `for await`\n *\n * Alias for {@link PathScurryBase.iterate}\n *\n * Note: As of Node 19, this is very slow, compared to other methods of\n * walking. Consider using {@link PathScurryBase.stream} if memory overhead\n * and backpressure are concerns, or {@link PathScurryBase.walk} if not.\n */\n [Symbol.asyncIterator]() {\n return this.iterate()\n }\n\n /**\n * Async generator form of {@link PathScurryBase.walk}\n *\n * Note: As of Node 19, this is very slow, compared to other methods of\n * walking, especially if most/all of the directory tree has been previously\n * walked. Consider using {@link PathScurryBase.stream} if memory overhead\n * and backpressure are concerns, or {@link PathScurryBase.walk} if not.\n */\n iterate(): AsyncGenerator<PathBase, void, void>\n iterate(\n opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n ): AsyncGenerator<PathBase, void, void>\n iterate(\n opts: WalkOptionsWithFileTypesFalse,\n ): AsyncGenerator<string, void, void>\n iterate(opts: WalkOptions): AsyncGenerator<string | PathBase, void, void>\n iterate(entry: string | PathBase): AsyncGenerator<PathBase, void, void>\n iterate(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n ): AsyncGenerator<PathBase, void, void>\n iterate(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesFalse,\n ): AsyncGenerator<string, void, void>\n iterate(\n entry: string | PathBase,\n opts: WalkOptions,\n ): AsyncGenerator<PathBase | string, void, void>\n iterate(\n entry: string | PathBase | WalkOptions = this.cwd,\n options: WalkOptions = {},\n ): AsyncGenerator<PathBase | string, void, void> {\n // iterating async over the stream is significantly more performant,\n // especially in the warm-cache scenario, because it buffers up directory\n // entries in the background instead of waiting for a yield for each one.\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n options = entry\n entry = this.cwd\n }\n return this.stream(entry, options)[Symbol.asyncIterator]()\n }\n\n /**\n * Iterating over a PathScurry performs a synchronous walk.\n *\n * Alias for {@link PathScurryBase.iterateSync}\n */\n [Symbol.iterator]() {\n return this.iterateSync()\n }\n\n iterateSync(): Generator<PathBase, void, void>\n iterateSync(\n opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n ): Generator<PathBase, void, void>\n iterateSync(\n opts: WalkOptionsWithFileTypesFalse,\n ): Generator<string, void, void>\n iterateSync(opts: WalkOptions): Generator<string | PathBase, void, void>\n iterateSync(entry: string | PathBase): Generator<PathBase, void, void>\n iterateSync(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n ): Generator<PathBase, void, void>\n iterateSync(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesFalse,\n ): Generator<string, void, void>\n iterateSync(\n entry: string | PathBase,\n opts: WalkOptions,\n ): Generator<PathBase | string, void, void>\n *iterateSync(\n entry: string | PathBase | WalkOptions = this.cwd,\n opts: WalkOptions = {},\n ): Generator<PathBase | string, void, void> {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n opts = entry\n entry = this.cwd\n }\n const {\n withFileTypes = true,\n follow = false,\n filter,\n walkFilter,\n } = opts\n if (!filter || filter(entry)) {\n yield withFileTypes ? entry : entry.fullpath()\n }\n const dirs = new Set<PathBase>([entry])\n for (const dir of dirs) {\n const entries = dir.readdirSync()\n for (const e of entries) {\n if (!filter || filter(e)) {\n yield withFileTypes ? e : e.fullpath()\n }\n let r: PathBase | undefined = e\n if (e.isSymbolicLink()) {\n if (!(follow && (r = e.realpathSync()))) continue\n if (r.isUnknown()) r.lstatSync()\n }\n if (r.shouldWalk(dirs, walkFilter)) {\n dirs.add(r)\n }\n }\n }\n }\n\n /**\n * Stream form of {@link PathScurryBase.walk}\n *\n * Returns a Minipass stream that emits {@link PathBase} objects by default,\n * or strings if `{ withFileTypes: false }` is set in the options.\n */\n stream(): Minipass<PathBase>\n stream(\n opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n ): Minipass<PathBase>\n stream(opts: WalkOptionsWithFileTypesFalse): Minipass<string>\n stream(opts: WalkOptions): Minipass<string | PathBase>\n stream(entry: string | PathBase): Minipass<PathBase>\n stream(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n ): Minipass<PathBase>\n stream(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesFalse,\n ): Minipass<string>\n stream(\n entry: string | PathBase,\n opts: WalkOptions,\n ): Minipass<string> | Minipass<PathBase>\n stream(\n entry: string | PathBase | WalkOptions = this.cwd,\n opts: WalkOptions = {},\n ): Minipass<string> | Minipass<PathBase> {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n opts = entry\n entry = this.cwd\n }\n const {\n withFileTypes = true,\n follow = false,\n filter,\n walkFilter,\n } = opts\n const results = new Minipass<string | PathBase>({ objectMode: true })\n if (!filter || filter(entry)) {\n results.write(withFileTypes ? entry : entry.fullpath())\n }\n const dirs = new Set<PathBase>()\n const queue: PathBase[] = [entry]\n let processing = 0\n const process = () => {\n let paused = false\n while (!paused) {\n const dir = queue.shift()\n if (!dir) {\n if (processing === 0) results.end()\n return\n }\n\n processing++\n dirs.add(dir)\n\n const onReaddir = (\n er: null | NodeJS.ErrnoException,\n entries: PathBase[],\n didRealpaths: boolean = false,\n ) => {\n /* c8 ignore start */\n if (er) return results.emit('error', er)\n /* c8 ignore stop */\n if (follow && !didRealpaths) {\n const promises: Promise<PathBase | undefined>[] = []\n for (const e of entries) {\n if (e.isSymbolicLink()) {\n promises.push(\n e\n .realpath()\n .then((r: PathBase | undefined) =>\n r?.isUnknown() ? r.lstat() : r,\n ),\n )\n }\n }\n if (promises.length) {\n Promise.all(promises).then(() =>\n onReaddir(null, entries, true),\n )\n return\n }\n }\n\n for (const e of entries) {\n if (e && (!filter || filter(e))) {\n if (!results.write(withFileTypes ? e : e.fullpath())) {\n paused = true\n }\n }\n }\n\n processing--\n for (const e of entries) {\n const r = e.realpathCached() || e\n if (r.shouldWalk(dirs, walkFilter)) {\n queue.push(r)\n }\n }\n if (paused && !results.flowing) {\n results.once('drain', process)\n } else if (!sync) {\n process()\n }\n }\n\n // zalgo containment\n let sync = true\n dir.readdirCB(onReaddir, true)\n sync = false\n }\n }\n process()\n return results as Minipass<string> | Minipass<PathBase>\n }\n\n /**\n * Synchronous form of {@link PathScurryBase.stream}\n *\n * Returns a Minipass stream that emits {@link PathBase} objects by default,\n * or strings if `{ withFileTypes: false }` is set in the options.\n *\n * Will complete the walk in a single tick if the stream is consumed fully.\n * Otherwise, will pause as needed for stream backpressure.\n */\n streamSync(): Minipass<PathBase>\n streamSync(\n opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n ): Minipass<PathBase>\n streamSync(opts: WalkOptionsWithFileTypesFalse): Minipass<string>\n streamSync(opts: WalkOptions): Minipass<string | PathBase>\n streamSync(entry: string | PathBase): Minipass<PathBase>\n streamSync(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n ): Minipass<PathBase>\n streamSync(\n entry: string | PathBase,\n opts: WalkOptionsWithFileTypesFalse,\n ): Minipass<string>\n streamSync(\n entry: string | PathBase,\n opts: WalkOptions,\n ): Minipass<string> | Minipass<PathBase>\n streamSync(\n entry: string | PathBase | WalkOptions = this.cwd,\n opts: WalkOptions = {},\n ): Minipass<string> | Minipass<PathBase> {\n if (typeof entry === 'string') {\n entry = this.cwd.resolve(entry)\n } else if (!(entry instanceof PathBase)) {\n opts = entry\n entry = this.cwd\n }\n const {\n withFileTypes = true,\n follow = false,\n filter,\n walkFilter,\n } = opts\n const results = new Minipass<string | PathBase>({ objectMode: true })\n const dirs = new Set<PathBase>()\n if (!filter || filter(entry)) {\n results.write(withFileTypes ? entry : entry.fullpath())\n }\n const queue: PathBase[] = [entry]\n let processing = 0\n const process = () => {\n let paused = false\n while (!paused) {\n const dir = queue.shift()\n if (!dir) {\n if (processing === 0) results.end()\n return\n }\n processing++\n dirs.add(dir)\n\n const entries = dir.readdirSync()\n for (const e of entries) {\n if (!filter || filter(e)) {\n if (!results.write(withFileTypes ? e : e.fullpath())) {\n paused = true\n }\n }\n }\n processing--\n for (const e of entries) {\n let r: PathBase | undefined = e\n if (e.isSymbolicLink()) {\n if (!(follow && (r = e.realpathSync()))) continue\n if (r.isUnknown()) r.lstatSync()\n }\n if (r.shouldWalk(dirs, walkFilter)) {\n queue.push(r)\n }\n }\n }\n if (paused && !results.flowing) results.once('drain', process)\n }\n process()\n return results as Minipass<string> | Minipass<PathBase>\n }\n\n chdir(path: string | Path = this.cwd) {\n const oldCwd = this.cwd\n this.cwd = typeof path === 'string' ? this.cwd.resolve(path) : path\n this.cwd[setAsCwd](oldCwd)\n }\n}\n\n/**\n * Options provided to all walk methods.\n */\nexport interface WalkOptions {\n /**\n * Return results as {@link PathBase} objects rather than strings.\n * When set to false, results are fully resolved paths, as returned by\n * {@link PathBase.fullpath}.\n * @default true\n */\n withFileTypes?: boolean\n\n /**\n * Attempt to read directory entries from symbolic links. Otherwise, only\n * actual directories are traversed. Regardless of this setting, a given\n * target path will only ever be walked once, meaning that a symbolic link\n * to a previously traversed directory will never be followed.\n *\n * Setting this imposes a slight performance penalty, because `readlink`\n * must be called on all symbolic links encountered, in order to avoid\n * infinite cycles.\n * @default false\n */\n follow?: boolean\n\n /**\n * Only return entries where the provided function returns true.\n *\n * This will not prevent directories from being traversed, even if they do\n * not pass the filter, though it will prevent directories themselves from\n * being included in the result set. See {@link walkFilter}\n *\n * Asynchronous functions are not supported here.\n *\n * By default, if no filter is provided, all entries and traversed\n * directories are included.\n */\n filter?: (entry: PathBase) => boolean\n\n /**\n * Only traverse directories (and in the case of {@link follow} being set to\n * true, symbolic links to directories) if the provided function returns\n * true.\n *\n * This will not prevent directories from being included in the result set,\n * even if they do not pass the supplied filter function. See {@link filter}\n * to do that.\n *\n * Asynchronous functions are not supported here.\n */\n walkFilter?: (entry: PathBase) => boolean\n}\n\nexport type WalkOptionsWithFileTypesUnset = WalkOptions & {\n withFileTypes?: undefined\n}\nexport type WalkOptionsWithFileTypesTrue = WalkOptions & {\n withFileTypes: true\n}\nexport type WalkOptionsWithFileTypesFalse = WalkOptions & {\n withFileTypes: false\n}\n\n/**\n * Windows implementation of {@link PathScurryBase}\n *\n * Defaults to case insensitve, uses `'\\\\'` to generate path strings. Uses\n * {@link PathWin32} for Path objects.\n */\nexport class PathScurryWin32 extends PathScurryBase {\n /**\n * separator for generating path strings\n */\n sep: '\\\\' = '\\\\'\n\n constructor(\n cwd: URL | string = process.cwd(),\n opts: PathScurryOpts = {},\n ) {\n const { nocase = true } = opts\n super(cwd, win32, '\\\\', { ...opts, nocase })\n this.nocase = nocase\n for (let p: PathBase | undefined = this.cwd; p; p = p.parent) {\n p.nocase = this.nocase\n }\n }\n\n /**\n * @internal\n */\n parseRootPath(dir: string): string {\n // if the path starts with a single separator, it's not a UNC, and we'll\n // just get separator as the root, and driveFromUNC will return \\\n // In that case, mount \\ on the root from the cwd.\n return win32.parse(dir).root.toUpperCase()\n }\n\n /**\n * @internal\n */\n newRoot(fs: FSValue) {\n return new PathWin32(\n this.rootPath,\n IFDIR,\n undefined,\n this.roots,\n this.nocase,\n this.childrenCache(),\n { fs },\n )\n }\n\n /**\n * Return true if the provided path string is an absolute path\n */\n isAbsolute(p: string): boolean {\n return (\n p.startsWith('/') || p.startsWith('\\\\') || /^[a-z]:(\\/|\\\\)/i.test(p)\n )\n }\n}\n\n/**\n * {@link PathScurryBase} implementation for all posix systems other than Darwin.\n *\n * Defaults to case-sensitive matching, uses `'/'` to generate path strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryPosix extends PathScurryBase {\n /**\n * separator for generating path strings\n */\n sep: '/' = '/'\n constructor(\n cwd: URL | string = process.cwd(),\n opts: PathScurryOpts = {},\n ) {\n const { nocase = false } = opts\n super(cwd, posix, '/', { ...opts, nocase })\n this.nocase = nocase\n }\n\n /**\n * @internal\n */\n parseRootPath(_dir: string): string {\n return '/'\n }\n\n /**\n * @internal\n */\n newRoot(fs: FSValue) {\n return new PathPosix(\n this.rootPath,\n IFDIR,\n undefined,\n this.roots,\n this.nocase,\n this.childrenCache(),\n { fs },\n )\n }\n\n /**\n * Return true if the provided path string is an absolute path\n */\n isAbsolute(p: string): boolean {\n return p.startsWith('/')\n }\n}\n\n/**\n * {@link PathScurryBase} implementation for Darwin (macOS) systems.\n *\n * Defaults to case-insensitive matching, uses `'/'` for generating path\n * strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryDarwin extends PathScurryPosix {\n constructor(\n cwd: URL | string = process.cwd(),\n opts: PathScurryOpts = {},\n ) {\n const { nocase = true } = opts\n super(cwd, { ...opts, nocase })\n }\n}\n\n/**\n * Default {@link PathBase} implementation for the current platform.\n *\n * {@link PathWin32} on Windows systems, {@link PathPosix} on all others.\n */\nexport const Path = process.platform === 'win32' ? PathWin32 : PathPosix\nexport type Path = PathBase | InstanceType<typeof Path>\n\n/**\n * Default {@link PathScurryBase} implementation for the current platform.\n *\n * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on\n * Darwin (macOS) systems, {@link PathScurryPosix} on all others.\n */\nexport const PathScurry:\n | typeof PathScurryWin32\n | typeof PathScurryDarwin\n | typeof PathScurryPosix =\n process.platform === 'win32' ? PathScurryWin32\n : process.platform === 'darwin' ? PathScurryDarwin\n : PathScurryPosix\nexport type PathScurry = PathScurryBase | InstanceType<typeof PathScurry>\n","// this is just a very light wrapper around 2 arrays with an offset index\n\nimport { GLOBSTAR } from 'minimatch'\nexport type MMPattern = string | RegExp | typeof GLOBSTAR\n\n// an array of length >= 1\nexport type PatternList = [p: MMPattern, ...rest: MMPattern[]]\nexport type UNCPatternList = [\n p0: '',\n p1: '',\n p2: string,\n p3: string,\n ...rest: MMPattern[],\n]\nexport type DrivePatternList = [p0: string, ...rest: MMPattern[]]\nexport type AbsolutePatternList = [p0: '', ...rest: MMPattern[]]\nexport type GlobList = [p: string, ...rest: string[]]\n\nconst isPatternList = (pl: MMPattern[]): pl is PatternList =>\n pl.length >= 1\nconst isGlobList = (gl: string[]): gl is GlobList => gl.length >= 1\n\n/**\n * An immutable-ish view on an array of glob parts and their parsed\n * results\n */\nexport class Pattern {\n readonly #patternList: PatternList\n readonly #globList: GlobList\n readonly #index: number\n readonly length: number\n readonly #platform: NodeJS.Platform\n #rest?: Pattern | null\n #globString?: string\n #isDrive?: boolean\n #isUNC?: boolean\n #isAbsolute?: boolean\n #followGlobstar: boolean = true\n\n constructor(\n patternList: MMPattern[],\n globList: string[],\n index: number,\n platform: NodeJS.Platform,\n ) {\n if (!isPatternList(patternList)) {\n throw new TypeError('empty pattern list')\n }\n if (!isGlobList(globList)) {\n throw new TypeError('empty glob list')\n }\n if (globList.length !== patternList.length) {\n throw new TypeError('mismatched pattern list and glob list lengths')\n }\n this.length = patternList.length\n if (index < 0 || index >= this.length) {\n throw new TypeError('index out of range')\n }\n this.#patternList = patternList\n this.#globList = globList\n this.#index = index\n this.#platform = platform\n\n // normalize root entries of absolute patterns on initial creation.\n if (this.#index === 0) {\n // c: => ['c:/']\n // C:/ => ['C:/']\n // C:/x => ['C:/', 'x']\n // //host/share => ['//host/share/']\n // //host/share/ => ['//host/share/']\n // //host/share/x => ['//host/share/', 'x']\n // /etc => ['/', 'etc']\n // / => ['/']\n if (this.isUNC()) {\n // '' / '' / 'host' / 'share'\n const [p0, p1, p2, p3, ...prest] = this.#patternList\n const [g0, g1, g2, g3, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = [p0, p1, p2, p3, ''].join('/')\n const g = [g0, g1, g2, g3, ''].join('/')\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n } else if (this.isDrive() || this.isAbsolute()) {\n const [p1, ...prest] = this.#patternList\n const [g1, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = (p1 as string) + '/'\n const g = g1 + '/'\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n }\n }\n }\n\n /**\n * The first entry in the parsed list of patterns\n */\n pattern(): MMPattern {\n return this.#patternList[this.#index] as MMPattern\n }\n\n /**\n * true of if pattern() returns a string\n */\n isString(): boolean {\n return typeof this.#patternList[this.#index] === 'string'\n }\n /**\n * true of if pattern() returns GLOBSTAR\n */\n isGlobstar(): boolean {\n return this.#patternList[this.#index] === GLOBSTAR\n }\n /**\n * true if pattern() returns a regexp\n */\n isRegExp(): boolean {\n return this.#patternList[this.#index] instanceof RegExp\n }\n\n /**\n * The /-joined set of glob parts that make up this pattern\n */\n globString(): string {\n return (this.#globString =\n this.#globString ||\n (this.#index === 0 ?\n this.isAbsolute() ?\n this.#globList[0] + this.#globList.slice(1).join('/')\n : this.#globList.join('/')\n : this.#globList.slice(this.#index).join('/')))\n }\n\n /**\n * true if there are more pattern parts after this one\n */\n hasMore(): boolean {\n return this.length > this.#index + 1\n }\n\n /**\n * The rest of the pattern after this part, or null if this is the end\n */\n rest(): Pattern | null {\n if (this.#rest !== undefined) return this.#rest\n if (!this.hasMore()) return (this.#rest = null)\n this.#rest = new Pattern(\n this.#patternList,\n this.#globList,\n this.#index + 1,\n this.#platform,\n )\n this.#rest.#isAbsolute = this.#isAbsolute\n this.#rest.#isUNC = this.#isUNC\n this.#rest.#isDrive = this.#isDrive\n return this.#rest\n }\n\n /**\n * true if the pattern represents a //unc/path/ on windows\n */\n isUNC(): boolean {\n const pl = this.#patternList\n return this.#isUNC !== undefined ?\n this.#isUNC\n : (this.#isUNC =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n pl[0] === '' &&\n pl[1] === '' &&\n typeof pl[2] === 'string' &&\n !!pl[2] &&\n typeof pl[3] === 'string' &&\n !!pl[3])\n }\n\n // pattern like C:/...\n // split = ['C:', ...]\n // XXX: would be nice to handle patterns like `c:*` to test the cwd\n // in c: for *, but I don't know of a way to even figure out what that\n // cwd is without actually chdir'ing into it?\n /**\n * True if the pattern starts with a drive letter on Windows\n */\n isDrive(): boolean {\n const pl = this.#patternList\n return this.#isDrive !== undefined ?\n this.#isDrive\n : (this.#isDrive =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n this.length > 1 &&\n typeof pl[0] === 'string' &&\n /^[a-z]:$/i.test(pl[0]))\n }\n\n // pattern = '/' or '/...' or '/x/...'\n // split = ['', ''] or ['', ...] or ['', 'x', ...]\n // Drive and UNC both considered absolute on windows\n /**\n * True if the pattern is rooted on an absolute path\n */\n isAbsolute(): boolean {\n const pl = this.#patternList\n return this.#isAbsolute !== undefined ?\n this.#isAbsolute\n : (this.#isAbsolute =\n (pl[0] === '' && pl.length > 1) ||\n this.isDrive() ||\n this.isUNC())\n }\n\n /**\n * consume the root of the pattern, and return it\n */\n root(): string {\n const p = this.#patternList[0]\n return (\n typeof p === 'string' && this.isAbsolute() && this.#index === 0\n ) ?\n p\n : ''\n }\n\n /**\n * Check to see if the current globstar pattern is allowed to follow\n * a symbolic link.\n */\n checkFollowGlobstar(): boolean {\n return !(\n this.#index === 0 ||\n !this.isGlobstar() ||\n !this.#followGlobstar\n )\n }\n\n /**\n * Mark that the current globstar pattern is following a symbolic link\n */\n markFollowGlobstar(): boolean {\n if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)\n return false\n this.#followGlobstar = false\n return true\n }\n}\n","// give it a pattern, and it'll be able to tell you if\n// a given path should be ignored.\n// Ignoring a path ignores its children if the pattern ends in /**\n// Ignores are always parsed in dot:true mode\n\nimport { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\nexport interface IgnoreLike {\n ignored?: (p: Path) => boolean\n childrenIgnored?: (p: Path) => boolean\n add?: (ignore: string) => void\n}\n\nconst defaultPlatform: NodeJS.Platform =\n (\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ) ?\n process.platform\n : 'linux'\n\n/**\n * Class used to process ignored patterns\n */\nexport class Ignore implements IgnoreLike {\n relative: Minimatch[]\n relativeChildren: Minimatch[]\n absolute: Minimatch[]\n absoluteChildren: Minimatch[]\n platform: NodeJS.Platform\n mmopts: MinimatchOptions\n\n constructor(\n ignored: string[],\n {\n nobrace,\n nocase,\n noext,\n noglobstar,\n platform = defaultPlatform,\n }: GlobWalkerOpts,\n ) {\n this.relative = []\n this.absolute = []\n this.relativeChildren = []\n this.absoluteChildren = []\n this.platform = platform\n this.mmopts = {\n dot: true,\n nobrace,\n nocase,\n noext,\n noglobstar,\n optimizationLevel: 2,\n platform,\n nocomment: true,\n nonegate: true,\n }\n for (const ign of ignored) this.add(ign)\n }\n\n add(ign: string) {\n // this is a little weird, but it gives us a clean set of optimized\n // minimatch matchers, without getting tripped up if one of them\n // ends in /** inside a brace section, and it's only inefficient at\n // the start of the walk, not along it.\n // It'd be nice if the Pattern class just had a .test() method, but\n // handling globstars is a bit of a pita, and that code already lives\n // in minimatch anyway.\n // Another way would be if maybe Minimatch could take its set/globParts\n // as an option, and then we could at least just use Pattern to test\n // for absolute-ness.\n // Yet another way, Minimatch could take an array of glob strings, and\n // a cwd option, and do the right thing.\n const mm = new Minimatch(ign, this.mmopts)\n for (let i = 0; i < mm.set.length; i++) {\n const parsed = mm.set[i]\n const globParts = mm.globParts[i]\n /* c8 ignore start */\n if (!parsed || !globParts) {\n throw new Error('invalid pattern object')\n }\n // strip off leading ./ portions\n // https://github.com/isaacs/node-glob/issues/570\n while (parsed[0] === '.' && globParts[0] === '.') {\n parsed.shift()\n globParts.shift()\n }\n /* c8 ignore stop */\n const p = new Pattern(parsed, globParts, 0, this.platform)\n const m = new Minimatch(p.globString(), this.mmopts)\n const children = globParts[globParts.length - 1] === '**'\n const absolute = p.isAbsolute()\n if (absolute) this.absolute.push(m)\n else this.relative.push(m)\n if (children) {\n if (absolute) this.absoluteChildren.push(m)\n else this.relativeChildren.push(m)\n }\n }\n }\n\n ignored(p: Path): boolean {\n const fullpath = p.fullpath()\n const fullpaths = `${fullpath}/`\n const relative = p.relative() || '.'\n const relatives = `${relative}/`\n for (const m of this.relative) {\n if (m.match(relative) || m.match(relatives)) return true\n }\n for (const m of this.absolute) {\n if (m.match(fullpath) || m.match(fullpaths)) return true\n }\n return false\n }\n\n childrenIgnored(p: Path): boolean {\n const fullpath = p.fullpath() + '/'\n const relative = (p.relative() || '.') + '/'\n for (const m of this.relativeChildren) {\n if (m.match(relative)) return true\n }\n for (const m of this.absoluteChildren) {\n if (m.match(fullpath)) return true\n }\n return false\n }\n}\n","// synchronous utility for filtering entries and calculating subwalks\n\nimport { GLOBSTAR, MMRegExp } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { MMPattern, Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\n/**\n * A cache of which patterns have been processed for a given Path\n */\nexport class HasWalkedCache {\n store: Map<string, Set<string>>\n constructor(store: Map<string, Set<string>> = new Map()) {\n this.store = store\n }\n copy() {\n return new HasWalkedCache(new Map(this.store))\n }\n hasWalked(target: Path, pattern: Pattern) {\n return this.store.get(target.fullpath())?.has(pattern.globString())\n }\n storeWalked(target: Path, pattern: Pattern) {\n const fullpath = target.fullpath()\n const cached = this.store.get(fullpath)\n if (cached) cached.add(pattern.globString())\n else this.store.set(fullpath, new Set([pattern.globString()]))\n }\n}\n\n/**\n * A record of which paths have been matched in a given walk step,\n * and whether they only are considered a match if they are a directory,\n * and whether their absolute or relative path should be returned.\n */\nexport class MatchRecord {\n store: Map<Path, number> = new Map()\n add(target: Path, absolute: boolean, ifDir: boolean) {\n const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0)\n const current = this.store.get(target)\n this.store.set(target, current === undefined ? n : n & current)\n }\n // match, absolute, ifdir\n entries(): [Path, boolean, boolean][] {\n return [...this.store.entries()].map(([path, n]) => [\n path,\n !!(n & 2),\n !!(n & 1),\n ])\n }\n}\n\n/**\n * A collection of patterns that must be processed in a subsequent step\n * for a given path.\n */\nexport class SubWalks {\n store: Map<Path, Pattern[]> = new Map()\n add(target: Path, pattern: Pattern) {\n if (!target.canReaddir()) {\n return\n }\n const subs = this.store.get(target)\n if (subs) {\n if (!subs.find(p => p.globString() === pattern.globString())) {\n subs.push(pattern)\n }\n } else this.store.set(target, [pattern])\n }\n get(target: Path): Pattern[] {\n const subs = this.store.get(target)\n /* c8 ignore start */\n if (!subs) {\n throw new Error('attempting to walk unknown path')\n }\n /* c8 ignore stop */\n return subs\n }\n entries(): [Path, Pattern[]][] {\n return this.keys().map(k => [k, this.store.get(k) as Pattern[]])\n }\n keys(): Path[] {\n return [...this.store.keys()].filter(t => t.canReaddir())\n }\n}\n\n/**\n * The class that processes patterns for a given path.\n *\n * Handles child entry filtering, and determining whether a path's\n * directory contents must be read.\n */\nexport class Processor {\n hasWalkedCache: HasWalkedCache\n matches = new MatchRecord()\n subwalks = new SubWalks()\n patterns?: Pattern[]\n follow: boolean\n dot: boolean\n opts: GlobWalkerOpts\n\n constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache) {\n this.opts = opts\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.hasWalkedCache =\n hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache()\n }\n\n processPatterns(target: Path, patterns: Pattern[]) {\n this.patterns = patterns\n const processingSet: [Path, Pattern][] = patterns.map(p => [target, p])\n\n // map of paths to the magic-starting subwalks they need to walk\n // first item in patterns is the filter\n\n for (let [t, pattern] of processingSet) {\n this.hasWalkedCache.storeWalked(t, pattern)\n\n const root = pattern.root()\n const absolute = pattern.isAbsolute() && this.opts.absolute !== false\n\n // start absolute patterns at root\n if (root) {\n t = t.resolve(\n root === '/' && this.opts.root !== undefined ?\n this.opts.root\n : root,\n )\n const rest = pattern.rest()\n if (!rest) {\n this.matches.add(t, true, false)\n continue\n } else {\n pattern = rest\n }\n }\n\n if (t.isENOENT()) continue\n\n let p: MMPattern\n let rest: Pattern | null\n let changed = false\n while (\n typeof (p = pattern.pattern()) === 'string' &&\n (rest = pattern.rest())\n ) {\n const c = t.resolve(p)\n t = c\n pattern = rest\n changed = true\n }\n p = pattern.pattern()\n rest = pattern.rest()\n if (changed) {\n if (this.hasWalkedCache.hasWalked(t, pattern)) continue\n this.hasWalkedCache.storeWalked(t, pattern)\n }\n\n // now we have either a final string for a known entry,\n // more strings for an unknown entry,\n // or a pattern starting with magic, mounted on t.\n if (typeof p === 'string') {\n // must not be final entry, otherwise we would have\n // concatenated it earlier.\n const ifDir = p === '..' || p === '' || p === '.'\n this.matches.add(t.resolve(p), absolute, ifDir)\n continue\n } else if (p === GLOBSTAR) {\n // if no rest, match and subwalk pattern\n // if rest, process rest and subwalk pattern\n // if it's a symlink, but we didn't get here by way of a\n // globstar match (meaning it's the first time THIS globstar\n // has traversed a symlink), then we follow it. Otherwise, stop.\n if (\n !t.isSymbolicLink() ||\n this.follow ||\n pattern.checkFollowGlobstar()\n ) {\n this.subwalks.add(t, pattern)\n }\n const rp = rest?.pattern()\n const rrest = rest?.rest()\n if (!rest || ((rp === '' || rp === '.') && !rrest)) {\n // only HAS to be a dir if it ends in **/ or **/.\n // but ending in ** will match files as well.\n this.matches.add(t, absolute, rp === '' || rp === '.')\n } else {\n if (rp === '..') {\n // this would mean you're matching **/.. at the fs root,\n // and no thanks, I'm not gonna test that specific case.\n /* c8 ignore start */\n const tp = t.parent || t\n /* c8 ignore stop */\n if (!rrest) this.matches.add(tp, absolute, true)\n else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {\n this.subwalks.add(tp, rrest)\n }\n }\n }\n } else if (p instanceof RegExp) {\n this.subwalks.add(t, pattern)\n }\n }\n\n return this\n }\n\n subwalkTargets(): Path[] {\n return this.subwalks.keys()\n }\n\n child() {\n return new Processor(this.opts, this.hasWalkedCache)\n }\n\n // return a new Processor containing the subwalks for each\n // child entry, and a set of matches, and\n // a hasWalkedCache that's a copy of this one\n // then we're going to call\n filterEntries(parent: Path, entries: Path[]): Processor {\n const patterns = this.subwalks.get(parent)\n // put matches and entry walks into the results processor\n const results = this.child()\n for (const e of entries) {\n for (const pattern of patterns) {\n const absolute = pattern.isAbsolute()\n const p = pattern.pattern()\n const rest = pattern.rest()\n if (p === GLOBSTAR) {\n results.testGlobstar(e, pattern, rest, absolute)\n } else if (p instanceof RegExp) {\n results.testRegExp(e, p, rest, absolute)\n } else {\n results.testString(e, p, rest, absolute)\n }\n }\n }\n return results\n }\n\n testGlobstar(\n e: Path,\n pattern: Pattern,\n rest: Pattern | null,\n absolute: boolean,\n ) {\n if (this.dot || !e.name.startsWith('.')) {\n if (!pattern.hasMore()) {\n this.matches.add(e, absolute, false)\n }\n if (e.canReaddir()) {\n // if we're in follow mode or it's not a symlink, just keep\n // testing the same pattern. If there's more after the globstar,\n // then this symlink consumes the globstar. If not, then we can\n // follow at most ONE symlink along the way, so we mark it, which\n // also checks to ensure that it wasn't already marked.\n if (this.follow || !e.isSymbolicLink()) {\n this.subwalks.add(e, pattern)\n } else if (e.isSymbolicLink()) {\n if (rest && pattern.checkFollowGlobstar()) {\n this.subwalks.add(e, rest)\n } else if (pattern.markFollowGlobstar()) {\n this.subwalks.add(e, pattern)\n }\n }\n }\n }\n // if the NEXT thing matches this entry, then also add\n // the rest.\n if (rest) {\n const rp = rest.pattern()\n if (\n typeof rp === 'string' &&\n // dots and empty were handled already\n rp !== '..' &&\n rp !== '' &&\n rp !== '.'\n ) {\n this.testString(e, rp, rest.rest(), absolute)\n } else if (rp === '..') {\n /* c8 ignore start */\n const ep = e.parent || e\n /* c8 ignore stop */\n this.subwalks.add(ep, rest)\n } else if (rp instanceof RegExp) {\n this.testRegExp(e, rp, rest.rest(), absolute)\n }\n }\n }\n\n testRegExp(\n e: Path,\n p: MMRegExp,\n rest: Pattern | null,\n absolute: boolean,\n ) {\n if (!p.test(e.name)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n\n testString(e: Path, p: string, rest: Pattern | null, absolute: boolean) {\n // should never happen?\n if (!e.isNamed(p)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n}\n","/**\n * Single-use utility classes to provide functionality to the {@link Glob}\n * methods.\n *\n * @module\n */\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport { Ignore, IgnoreLike } from './ignore.js'\n\n// XXX can we somehow make it so that it NEVER processes a given path more than\n// once, enough that the match set tracking is no longer needed? that'd speed\n// things up a lot. Or maybe bring back nounique, and skip it in that case?\n\n// a single minimatch set entry with 1 or more parts\nimport { Pattern } from './pattern.js'\nimport { Processor } from './processor.js'\n\nexport interface GlobWalkerOpts {\n absolute?: boolean\n allowWindowsEscape?: boolean\n cwd?: string | URL\n dot?: boolean\n dotRelative?: boolean\n follow?: boolean\n ignore?: string | string[] | IgnoreLike\n mark?: boolean\n matchBase?: boolean\n // Note: maxDepth here means \"maximum actual Path.depth()\",\n // not \"maximum depth beyond cwd\"\n maxDepth?: number\n nobrace?: boolean\n nocase?: boolean\n nodir?: boolean\n noext?: boolean\n noglobstar?: boolean\n platform?: NodeJS.Platform\n posix?: boolean\n realpath?: boolean\n root?: string\n stat?: boolean\n signal?: AbortSignal\n windowsPathsNoEscape?: boolean\n withFileTypes?: boolean\n includeChildMatches?: boolean\n}\n\nexport type GWOFileTypesTrue = GlobWalkerOpts & {\n withFileTypes: true\n}\nexport type GWOFileTypesFalse = GlobWalkerOpts & {\n withFileTypes: false\n}\nexport type GWOFileTypesUnset = GlobWalkerOpts & {\n withFileTypes?: undefined\n}\n\nexport type Result<O extends GlobWalkerOpts> =\n O extends GWOFileTypesTrue ? Path\n : O extends GWOFileTypesFalse ? string\n : O extends GWOFileTypesUnset ? string\n : Path | string\n\nexport type Matches<O extends GlobWalkerOpts> =\n O extends GWOFileTypesTrue ? Set<Path>\n : O extends GWOFileTypesFalse ? Set<string>\n : O extends GWOFileTypesUnset ? Set<string>\n : Set<Path | string>\n\nexport type MatchStream<O extends GlobWalkerOpts> = Minipass<\n Result<O>,\n Result<O>\n>\n\nconst makeIgnore = (\n ignore: string | string[] | IgnoreLike,\n opts: GlobWalkerOpts,\n): IgnoreLike =>\n typeof ignore === 'string' ? new Ignore([ignore], opts)\n : Array.isArray(ignore) ? new Ignore(ignore, opts)\n : ignore\n\n/**\n * basic walking utilities that all the glob walker types use\n */\nexport abstract class GlobUtil<O extends GlobWalkerOpts = GlobWalkerOpts> {\n path: Path\n patterns: Pattern[]\n opts: O\n seen: Set<Path> = new Set<Path>()\n paused: boolean = false\n aborted: boolean = false\n #onResume: (() => any)[] = []\n #ignore?: IgnoreLike\n #sep: '\\\\' | '/'\n signal?: AbortSignal\n maxDepth: number\n includeChildMatches: boolean\n\n constructor(patterns: Pattern[], path: Path, opts: O)\n constructor(patterns: Pattern[], path: Path, opts: O) {\n this.patterns = patterns\n this.path = path\n this.opts = opts\n this.#sep = !opts.posix && opts.platform === 'win32' ? '\\\\' : '/'\n this.includeChildMatches = opts.includeChildMatches !== false\n if (opts.ignore || !this.includeChildMatches) {\n this.#ignore = makeIgnore(opts.ignore ?? [], opts)\n if (\n !this.includeChildMatches &&\n typeof this.#ignore.add !== 'function'\n ) {\n const m = 'cannot ignore child matches, ignore lacks add() method.'\n throw new Error(m)\n }\n }\n // ignore, always set with maxDepth, but it's optional on the\n // GlobOptions type\n /* c8 ignore start */\n this.maxDepth = opts.maxDepth || Infinity\n /* c8 ignore stop */\n if (opts.signal) {\n this.signal = opts.signal\n this.signal.addEventListener('abort', () => {\n this.#onResume.length = 0\n })\n }\n }\n\n #ignored(path: Path): boolean {\n return this.seen.has(path) || !!this.#ignore?.ignored?.(path)\n }\n #childrenIgnored(path: Path): boolean {\n return !!this.#ignore?.childrenIgnored?.(path)\n }\n\n // backpressure mechanism\n pause() {\n this.paused = true\n }\n resume() {\n /* c8 ignore start */\n if (this.signal?.aborted) return\n /* c8 ignore stop */\n this.paused = false\n let fn: (() => any) | undefined = undefined\n while (!this.paused && (fn = this.#onResume.shift())) {\n fn()\n }\n }\n onResume(fn: () => any) {\n if (this.signal?.aborted) return\n /* c8 ignore start */\n if (!this.paused) {\n fn()\n } else {\n /* c8 ignore stop */\n this.#onResume.push(fn)\n }\n }\n\n // do the requisite realpath/stat checking, and return the path\n // to add or undefined to filter it out.\n async matchCheck(e: Path, ifDir: boolean): Promise<Path | undefined> {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || (await e.realpath())\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n const s = needStat ? await e.lstat() : e\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = await s.realpath()\n /* c8 ignore start */\n if (target && (target.isUnknown() || this.opts.stat)) {\n await target.lstat()\n }\n /* c8 ignore stop */\n }\n return this.matchCheckTest(s, ifDir)\n }\n\n matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined {\n return (\n e &&\n (this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&\n (!ifDir || e.canReaddir()) &&\n (!this.opts.nodir || !e.isDirectory()) &&\n (!this.opts.nodir ||\n !this.opts.follow ||\n !e.isSymbolicLink() ||\n !e.realpathCached()?.isDirectory()) &&\n !this.#ignored(e)\n ) ?\n e\n : undefined\n }\n\n matchCheckSync(e: Path, ifDir: boolean): Path | undefined {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || e.realpathSync()\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n const s = needStat ? e.lstatSync() : e\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = s.realpathSync()\n if (target && (target?.isUnknown() || this.opts.stat)) {\n target.lstatSync()\n }\n }\n return this.matchCheckTest(s, ifDir)\n }\n\n abstract matchEmit(p: Result<O>): void\n abstract matchEmit(p: string | Path): void\n\n matchFinish(e: Path, absolute: boolean) {\n if (this.#ignored(e)) return\n // we know we have an ignore if this is false, but TS doesn't\n if (!this.includeChildMatches && this.#ignore?.add) {\n const ign = `${e.relativePosix()}/**`\n this.#ignore.add(ign)\n }\n const abs =\n this.opts.absolute === undefined ? absolute : this.opts.absolute\n this.seen.add(e)\n const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''\n // ok, we have what we need!\n if (this.opts.withFileTypes) {\n this.matchEmit(e)\n } else if (abs) {\n const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath()\n this.matchEmit(abs + mark)\n } else {\n const rel = this.opts.posix ? e.relativePosix() : e.relative()\n const pre =\n this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ?\n '.' + this.#sep\n : ''\n this.matchEmit(!rel ? '.' + mark : pre + rel + mark)\n }\n }\n\n async match(e: Path, absolute: boolean, ifDir: boolean): Promise<void> {\n const p = await this.matchCheck(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n matchSync(e: Path, absolute: boolean, ifDir: boolean): void {\n const p = this.matchCheckSync(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n walkCB(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any,\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() => this.walkCB2(target, patterns, processor, cb))\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const childrenCached = t.readdirCached()\n if (t.calledReaddir())\n this.walkCB3(t, childrenCached, processor, next)\n else {\n t.readdirCB(\n (_, entries) => this.walkCB3(t, entries, processor, next),\n true,\n )\n }\n }\n\n next()\n }\n\n walkCB3(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any,\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2(target, patterns, processor.child(), next)\n }\n\n next()\n }\n\n walkCBSync(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2Sync(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2Sync(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any,\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() =>\n this.walkCB2Sync(target, patterns, processor, cb),\n )\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const children = t.readdirSync()\n this.walkCB3Sync(t, children, processor, next)\n }\n\n next()\n }\n\n walkCB3Sync(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any,\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2Sync(target, patterns, processor.child(), next)\n }\n\n next()\n }\n}\n\nexport class GlobWalker<\n O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil<O> {\n matches = new Set<Result<O>>()\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n }\n\n matchEmit(e: Result<O>): void {\n this.matches.add(e)\n }\n\n async walk(): Promise<Set<Result<O>>> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n await this.path.lstat()\n }\n await new Promise((res, rej) => {\n this.walkCB(this.path, this.patterns, () => {\n if (this.signal?.aborted) {\n rej(this.signal.reason)\n } else {\n res(this.matches)\n }\n })\n })\n return this.matches\n }\n\n walkSync(): Set<Result<O>> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n // nothing for the callback to do, because this never pauses\n this.walkCBSync(this.path, this.patterns, () => {\n if (this.signal?.aborted) throw this.signal.reason\n })\n return this.matches\n }\n}\n\nexport class GlobStream<\n O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil<O> {\n results: Minipass<Result<O>, Result<O>>\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n this.results = new Minipass<Result<O>, Result<O>>({\n signal: this.signal,\n objectMode: true,\n })\n this.results.on('drain', () => this.resume())\n this.results.on('resume', () => this.resume())\n }\n\n matchEmit(e: Result<O>): void {\n this.results.write(e)\n if (!this.results.flowing) this.pause()\n }\n\n stream(): MatchStream<O> {\n const target = this.path\n if (target.isUnknown()) {\n target.lstat().then(() => {\n this.walkCB(target, this.patterns, () => this.results.end())\n })\n } else {\n this.walkCB(target, this.patterns, () => this.results.end())\n }\n return this.results\n }\n\n streamSync(): MatchStream<O> {\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n this.walkCBSync(this.path, this.patterns, () => this.results.end())\n return this.results\n }\n}\n","import { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { fileURLToPath } from 'node:url'\nimport {\n FSOption,\n Path,\n PathScurry,\n PathScurryDarwin,\n PathScurryPosix,\n PathScurryWin32,\n} from 'path-scurry'\nimport { IgnoreLike } from './ignore.js'\nimport { Pattern } from './pattern.js'\nimport { GlobStream, GlobWalker } from './walker.js'\n\nexport type MatchSet = Minimatch['set']\nexport type GlobParts = Exclude<Minimatch['globParts'], undefined>\n\n// if no process global, just call it linux.\n// so we default to case-sensitive, / separators\nconst defaultPlatform: NodeJS.Platform =\n (\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ) ?\n process.platform\n : 'linux'\n\n/**\n * A `GlobOptions` object may be provided to any of the exported methods, and\n * must be provided to the `Glob` constructor.\n *\n * All options are optional, boolean, and false by default, unless otherwise\n * noted.\n *\n * All resolved options are added to the Glob object as properties.\n *\n * If you are running many `glob` operations, you can pass a Glob object as the\n * `options` argument to a subsequent operation to share the previously loaded\n * cache.\n */\nexport interface GlobOptions {\n /**\n * Set to `true` to always receive absolute paths for\n * matched files. Set to `false` to always return relative paths.\n *\n * When this option is not set, absolute paths are returned for patterns\n * that are absolute, and otherwise paths are returned that are relative\n * to the `cwd` setting.\n *\n * This does _not_ make an extra system call to get\n * the realpath, it only does string path resolution.\n *\n * Conflicts with {@link withFileTypes}\n */\n absolute?: boolean\n\n /**\n * Set to false to enable {@link windowsPathsNoEscape}\n *\n * @deprecated\n */\n allowWindowsEscape?: boolean\n\n /**\n * The current working directory in which to search. Defaults to\n * `process.cwd()`.\n *\n * May be eiher a string path or a `file://` URL object or string.\n */\n cwd?: string | URL\n\n /**\n * Include `.dot` files in normal matches and `globstar`\n * matches. Note that an explicit dot in a portion of the pattern\n * will always match dot files.\n */\n dot?: boolean\n\n /**\n * Prepend all relative path strings with `./` (or `.\\` on Windows).\n *\n * Without this option, returned relative paths are \"bare\", so instead of\n * returning `'./foo/bar'`, they are returned as `'foo/bar'`.\n *\n * Relative patterns starting with `'../'` are not prepended with `./`, even\n * if this option is set.\n */\n dotRelative?: boolean\n\n /**\n * Follow symlinked directories when expanding `**`\n * patterns. This can result in a lot of duplicate references in\n * the presence of cyclic links, and make performance quite bad.\n *\n * By default, a `**` in a pattern will follow 1 symbolic link if\n * it is not the first item in the pattern, or none if it is the\n * first item in the pattern, following the same behavior as Bash.\n */\n follow?: boolean\n\n /**\n * string or string[], or an object with `ignore` and `ignoreChildren`\n * methods.\n *\n * If a string or string[] is provided, then this is treated as a glob\n * pattern or array of glob patterns to exclude from matches. To ignore all\n * children within a directory, as well as the entry itself, append `'/**'`\n * to the ignore pattern.\n *\n * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of\n * any other settings.\n *\n * If an object is provided that has `ignored(path)` and/or\n * `childrenIgnored(path)` methods, then these methods will be called to\n * determine whether any Path is a match or if its children should be\n * traversed, respectively.\n */\n ignore?: string | string[] | IgnoreLike\n\n /**\n * Treat brace expansion like `{a,b}` as a \"magic\" pattern. Has no\n * effect if {@link nobrace} is set.\n *\n * Only has effect on the {@link hasMagic} function.\n */\n magicalBraces?: boolean\n\n /**\n * Add a `/` character to directory matches. Note that this requires\n * additional stat calls in some cases.\n */\n mark?: boolean\n\n /**\n * Perform a basename-only match if the pattern does not contain any slash\n * characters. That is, `*.js` would be treated as equivalent to\n * `**\\/*.js`, matching all js files in all directories.\n */\n matchBase?: boolean\n\n /**\n * Limit the directory traversal to a given depth below the cwd.\n * Note that this does NOT prevent traversal to sibling folders,\n * root patterns, and so on. It only limits the maximum folder depth\n * that the walk will descend, relative to the cwd.\n */\n maxDepth?: number\n\n /**\n * Do not expand `{a,b}` and `{1..3}` brace sets.\n */\n nobrace?: boolean\n\n /**\n * Perform a case-insensitive match. This defaults to `true` on macOS and\n * Windows systems, and `false` on all others.\n *\n * **Note** `nocase` should only be explicitly set when it is\n * known that the filesystem's case sensitivity differs from the\n * platform default. If set `true` on case-sensitive file\n * systems, or `false` on case-insensitive file systems, then the\n * walk may return more or less results than expected.\n */\n nocase?: boolean\n\n /**\n * Do not match directories, only files. (Note: to match\n * _only_ directories, put a `/` at the end of the pattern.)\n */\n nodir?: boolean\n\n /**\n * Do not match \"extglob\" patterns such as `+(a|b)`.\n */\n noext?: boolean\n\n /**\n * Do not match `**` against multiple filenames. (Ie, treat it as a normal\n * `*` instead.)\n *\n * Conflicts with {@link matchBase}\n */\n noglobstar?: boolean\n\n /**\n * Defaults to value of `process.platform` if available, or `'linux'` if\n * not. Setting `platform:'win32'` on non-Windows systems may cause strange\n * behavior.\n */\n platform?: NodeJS.Platform\n\n /**\n * Set to true to call `fs.realpath` on all of the\n * results. In the case of an entry that cannot be resolved, the\n * entry is omitted. This incurs a slight performance penalty, of\n * course, because of the added system calls.\n */\n realpath?: boolean\n\n /**\n *\n * A string path resolved against the `cwd` option, which\n * is used as the starting point for absolute patterns that start\n * with `/`, (but not drive letters or UNC paths on Windows).\n *\n * Note that this _doesn't_ necessarily limit the walk to the\n * `root` directory, and doesn't affect the cwd starting point for\n * non-absolute patterns. A pattern containing `..` will still be\n * able to traverse out of the root directory, if it is not an\n * actual root directory on the filesystem, and any non-absolute\n * patterns will be matched in the `cwd`. For example, the\n * pattern `/../*` with `{root:'/some/path'}` will return all\n * files in `/some`, not all files in `/some/path`. The pattern\n * `*` with `{root:'/some/path'}` will return all the entries in\n * the cwd, not the entries in `/some/path`.\n *\n * To start absolute and non-absolute patterns in the same\n * path, you can use `{root:''}`. However, be aware that on\n * Windows systems, a pattern like `x:/*` or `//host/share/*` will\n * _always_ start in the `x:/` or `//host/share` directory,\n * regardless of the `root` setting.\n */\n root?: string\n\n /**\n * A [PathScurry](http://npm.im/path-scurry) object used\n * to traverse the file system. If the `nocase` option is set\n * explicitly, then any provided `scurry` object must match this\n * setting.\n */\n scurry?: PathScurry\n\n /**\n * Call `lstat()` on all entries, whether required or not to determine\n * if it's a valid match. When used with {@link withFileTypes}, this means\n * that matches will include data such as modified time, permissions, and\n * so on. Note that this will incur a performance cost due to the added\n * system calls.\n */\n stat?: boolean\n\n /**\n * An AbortSignal which will cancel the Glob walk when\n * triggered.\n */\n signal?: AbortSignal\n\n /**\n * Use `\\\\` as a path separator _only_, and\n * _never_ as an escape character. If set, all `\\\\` characters are\n * replaced with `/` in the pattern.\n *\n * Note that this makes it **impossible** to match against paths\n * containing literal glob pattern characters, but allows matching\n * with patterns constructed using `path.join()` and\n * `path.resolve()` on Windows platforms, mimicking the (buggy!)\n * behavior of Glob v7 and before on Windows. Please use with\n * caution, and be mindful of [the caveat below about Windows\n * paths](#windows). (For legacy reasons, this is also set if\n * `allowWindowsEscape` is set to the exact value `false`.)\n */\n windowsPathsNoEscape?: boolean\n\n /**\n * Return [PathScurry](http://npm.im/path-scurry)\n * `Path` objects instead of strings. These are similar to a\n * NodeJS `Dirent` object, but with additional methods and\n * properties.\n *\n * Conflicts with {@link absolute}\n */\n withFileTypes?: boolean\n\n /**\n * An fs implementation to override some or all of the defaults. See\n * http://npm.im/path-scurry for details about what can be overridden.\n */\n fs?: FSOption\n\n /**\n * Just passed along to Minimatch. Note that this makes all pattern\n * matching operations slower and *extremely* noisy.\n */\n debug?: boolean\n\n /**\n * Return `/` delimited paths, even on Windows.\n *\n * On posix systems, this has no effect. But, on Windows, it means that\n * paths will be `/` delimited, and absolute paths will be their full\n * resolved UNC forms, eg instead of `'C:\\\\foo\\\\bar'`, it would return\n * `'//?/C:/foo/bar'`\n */\n posix?: boolean\n\n /**\n * Do not match any children of any matches. For example, the pattern\n * `**\\/foo` would match `a/foo`, but not `a/foo/b/foo` in this mode.\n *\n * This is especially useful for cases like \"find all `node_modules`\n * folders, but not the ones in `node_modules`\".\n *\n * In order to support this, the `Ignore` implementation must support an\n * `add(pattern: string)` method. If using the default `Ignore` class, then\n * this is fine, but if this is set to `false`, and a custom `Ignore` is\n * provided that does not have an `add()` method, then it will throw an\n * error.\n *\n * **Caveat** It *only* ignores matches that would be a descendant of a\n * previous match, and only if that descendant is matched *after* the\n * ancestor is encountered. Since the file system walk happens in\n * indeterminate order, it's possible that a match will already be added\n * before its ancestor, if multiple or braced patterns are used.\n *\n * For example:\n *\n * ```ts\n * const results = await glob([\n * // likely to match first, since it's just a stat\n * 'a/b/c/d/e/f',\n *\n * // this pattern is more complicated! It must to various readdir()\n * // calls and test the results against a regular expression, and that\n * // is certainly going to take a little bit longer.\n * //\n * // So, later on, it encounters a match at 'a/b/c/d/e', but it's too\n * // late to ignore a/b/c/d/e/f, because it's already been emitted.\n * 'a/[bdf]/?/[a-z]/*',\n * ], { includeChildMatches: false })\n * ```\n *\n * It's best to only set this to `false` if you can be reasonably sure that\n * no components of the pattern will potentially match one another's file\n * system descendants, or if the occasional included child entry will not\n * cause problems.\n *\n * @default true\n */\n includeChildMatches?: boolean\n}\n\nexport type GlobOptionsWithFileTypesTrue = GlobOptions & {\n withFileTypes: true\n // string options not relevant if returning Path objects.\n absolute?: undefined\n mark?: undefined\n posix?: undefined\n}\n\nexport type GlobOptionsWithFileTypesFalse = GlobOptions & {\n withFileTypes?: false\n}\n\nexport type GlobOptionsWithFileTypesUnset = GlobOptions & {\n withFileTypes?: undefined\n}\n\nexport type Result<Opts> =\n Opts extends GlobOptionsWithFileTypesTrue ? Path\n : Opts extends GlobOptionsWithFileTypesFalse ? string\n : Opts extends GlobOptionsWithFileTypesUnset ? string\n : string | Path\nexport type Results<Opts> = Result<Opts>[]\n\nexport type FileTypes<Opts> =\n Opts extends GlobOptionsWithFileTypesTrue ? true\n : Opts extends GlobOptionsWithFileTypesFalse ? false\n : Opts extends GlobOptionsWithFileTypesUnset ? false\n : boolean\n\n/**\n * An object that can perform glob pattern traversals.\n */\nexport class Glob<Opts extends GlobOptions> implements GlobOptions {\n absolute?: boolean\n cwd: string\n root?: string\n dot: boolean\n dotRelative: boolean\n follow: boolean\n ignore?: string | string[] | IgnoreLike\n magicalBraces: boolean\n mark?: boolean\n matchBase: boolean\n maxDepth: number\n nobrace: boolean\n nocase: boolean\n nodir: boolean\n noext: boolean\n noglobstar: boolean\n pattern: string[]\n platform: NodeJS.Platform\n realpath: boolean\n scurry: PathScurry\n stat: boolean\n signal?: AbortSignal\n windowsPathsNoEscape: boolean\n withFileTypes: FileTypes<Opts>\n includeChildMatches: boolean\n\n /**\n * The options provided to the constructor.\n */\n opts: Opts\n\n /**\n * An array of parsed immutable {@link Pattern} objects.\n */\n patterns: Pattern[]\n\n /**\n * All options are stored as properties on the `Glob` object.\n *\n * See {@link GlobOptions} for full options descriptions.\n *\n * Note that a previous `Glob` object can be passed as the\n * `GlobOptions` to another `Glob` instantiation to re-use settings\n * and caches with a new pattern.\n *\n * Traversal functions can be called multiple times to run the walk\n * again.\n */\n constructor(pattern: string | string[], opts: Opts) {\n /* c8 ignore start */\n if (!opts) throw new TypeError('glob options required')\n /* c8 ignore stop */\n this.withFileTypes = !!opts.withFileTypes as FileTypes<Opts>\n this.signal = opts.signal\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.dotRelative = !!opts.dotRelative\n this.nodir = !!opts.nodir\n this.mark = !!opts.mark\n if (!opts.cwd) {\n this.cwd = ''\n } else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) {\n opts.cwd = fileURLToPath(opts.cwd)\n }\n this.cwd = opts.cwd || ''\n this.root = opts.root\n this.magicalBraces = !!opts.magicalBraces\n this.nobrace = !!opts.nobrace\n this.noext = !!opts.noext\n this.realpath = !!opts.realpath\n this.absolute = opts.absolute\n this.includeChildMatches = opts.includeChildMatches !== false\n\n this.noglobstar = !!opts.noglobstar\n this.matchBase = !!opts.matchBase\n this.maxDepth =\n typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity\n this.stat = !!opts.stat\n this.ignore = opts.ignore\n\n if (this.withFileTypes && this.absolute !== undefined) {\n throw new Error('cannot set absolute and withFileTypes:true')\n }\n\n if (typeof pattern === 'string') {\n pattern = [pattern]\n }\n\n this.windowsPathsNoEscape =\n !!opts.windowsPathsNoEscape ||\n (opts as { allowWindowsEscape?: boolean }).allowWindowsEscape ===\n false\n\n if (this.windowsPathsNoEscape) {\n pattern = pattern.map(p => p.replace(/\\\\/g, '/'))\n }\n\n if (this.matchBase) {\n if (opts.noglobstar) {\n throw new TypeError('base matching requires globstar')\n }\n pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`))\n }\n\n this.pattern = pattern\n\n this.platform = opts.platform || defaultPlatform\n this.opts = { ...opts, platform: this.platform }\n if (opts.scurry) {\n this.scurry = opts.scurry\n if (\n opts.nocase !== undefined &&\n opts.nocase !== opts.scurry.nocase\n ) {\n throw new Error('nocase option contradicts provided scurry option')\n }\n } else {\n const Scurry =\n opts.platform === 'win32' ? PathScurryWin32\n : opts.platform === 'darwin' ? PathScurryDarwin\n : opts.platform ? PathScurryPosix\n : PathScurry\n this.scurry = new Scurry(this.cwd, {\n nocase: opts.nocase,\n fs: opts.fs,\n })\n }\n this.nocase = this.scurry.nocase\n\n // If you do nocase:true on a case-sensitive file system, then\n // we need to use regexps instead of strings for non-magic\n // path portions, because statting `aBc` won't return results\n // for the file `AbC` for example.\n const nocaseMagicOnly =\n this.platform === 'darwin' || this.platform === 'win32'\n\n const mmo: MinimatchOptions = {\n // default nocase based on platform\n ...opts,\n dot: this.dot,\n matchBase: this.matchBase,\n nobrace: this.nobrace,\n nocase: this.nocase,\n nocaseMagicOnly,\n nocomment: true,\n noext: this.noext,\n nonegate: true,\n optimizationLevel: 2,\n platform: this.platform,\n windowsPathsNoEscape: this.windowsPathsNoEscape,\n debug: !!this.opts.debug,\n }\n\n const mms = this.pattern.map(p => new Minimatch(p, mmo))\n const [matchSet, globParts] = mms.reduce(\n (set: [MatchSet, GlobParts], m) => {\n set[0].push(...m.set)\n set[1].push(...m.globParts)\n return set\n },\n [[], []],\n )\n this.patterns = matchSet.map((set, i) => {\n const g = globParts[i]\n /* c8 ignore start */\n if (!g) throw new Error('invalid pattern object')\n /* c8 ignore stop */\n return new Pattern(set, g, 0, this.platform)\n })\n }\n\n /**\n * Returns a Promise that resolves to the results array.\n */\n async walk(): Promise<Results<Opts>>\n async walk(): Promise<(string | Path)[]> {\n // Walkers always return array of Path objects, so we just have to\n // coerce them into the right shape. It will have already called\n // realpath() if the option was set to do so, so we know that's cached.\n // start out knowing the cwd, at least\n return [\n ...(await new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).walk()),\n ]\n }\n\n /**\n * synchronous {@link Glob.walk}\n */\n walkSync(): Results<Opts>\n walkSync(): (string | Path)[] {\n return [\n ...new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).walkSync(),\n ]\n }\n\n /**\n * Stream results asynchronously.\n */\n stream(): Minipass<Result<Opts>, Result<Opts>>\n stream(): Minipass<string | Path, string | Path> {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).stream()\n }\n\n /**\n * Stream results synchronously.\n */\n streamSync(): Minipass<Result<Opts>, Result<Opts>>\n streamSync(): Minipass<string | Path, string | Path> {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).streamSync()\n }\n\n /**\n * Default sync iteration function. Returns a Generator that\n * iterates over the results.\n */\n iterateSync(): Generator<Result<Opts>, void, void> {\n return this.streamSync()[Symbol.iterator]()\n }\n [Symbol.iterator]() {\n return this.iterateSync()\n }\n\n /**\n * Default async iteration function. Returns an AsyncGenerator that\n * iterates over the results.\n */\n iterate(): AsyncGenerator<Result<Opts>, void, void> {\n return this.stream()[Symbol.asyncIterator]()\n }\n [Symbol.asyncIterator]() {\n return this.iterate()\n }\n}\n","import { Minimatch } from 'minimatch'\nimport { GlobOptions } from './glob.js'\n\n/**\n * Return true if the patterns provided contain any magic glob characters,\n * given the options provided.\n *\n * Brace expansion is not considered \"magic\" unless the `magicalBraces` option\n * is set, as brace expansion just turns one string into an array of strings.\n * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and\n * `'xby'` both do not contain any magic glob characters, and it's treated the\n * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`\n * is in the options, brace expansion _is_ treated as a pattern having magic.\n */\nexport const hasMagic = (\n pattern: string | string[],\n options: GlobOptions = {},\n): boolean => {\n if (!Array.isArray(pattern)) {\n pattern = [pattern]\n }\n for (const p of pattern) {\n if (new Minimatch(p, options).hasMagic()) return true\n }\n return false\n}\n","import { escape, unescape } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nimport { Glob } from './glob.js'\nimport { hasMagic } from './has-magic.js'\n\nexport { escape, unescape } from 'minimatch'\nexport type {\n FSOption,\n Path,\n WalkOptions,\n WalkOptionsWithFileTypesTrue,\n WalkOptionsWithFileTypesUnset,\n} from 'path-scurry'\nexport { Glob } from './glob.js'\nexport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nexport { hasMagic } from './has-magic.js'\nexport { Ignore } from './ignore.js'\nexport type { IgnoreLike } from './ignore.js'\nexport type { MatchStream } from './walker.js'\n\n/**\n * Syncronous form of {@link globStream}. Will read all the matches as fast as\n * you consume them, even all in a single tick if you consume them immediately,\n * but will still respond to backpressure if they're not consumed immediately.\n */\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass<Path, Path>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass<string, string>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesUnset,\n): Minipass<string, string>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass<Path, Path> | Minipass<string, string>\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).streamSync()\n}\n\n/**\n * Return a stream that emits all the strings or `Path` objects and\n * then emits `end` when completed.\n */\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass<string, string>\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass<Path, Path>\nexport function globStream(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Minipass<string, string>\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass<Path, Path> | Minipass<string, string>\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).stream()\n}\n\n/**\n * Synchronous form of {@link glob}\n */\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Path[]\nexport function globSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions,\n): Path[] | string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walkSync()\n}\n\n/**\n * Perform an asynchronous glob search for the pattern(s) specified. Returns\n * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the\n * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for\n * full option descriptions.\n */\nasync function glob_(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Promise<string[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Promise<Path[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Promise<string[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions,\n): Promise<Path[] | string[]>\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walk()\n}\n\n/**\n * Return a sync iterator for walking glob pattern matches.\n */\nexport function globIterateSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Generator<string, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Generator<Path, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Generator<string, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions,\n): Generator<Path, void, void> | Generator<string, void, void>\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterateSync()\n}\n\n/**\n * Return an async iterator for walking glob pattern matches.\n */\nexport function globIterate(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): AsyncGenerator<string, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): AsyncGenerator<Path, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): AsyncGenerator<string, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions,\n): AsyncGenerator<Path, void, void> | AsyncGenerator<string, void, void>\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterate()\n}\n\n// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc\nexport const streamSync = globStreamSync\nexport const stream = Object.assign(globStream, { sync: globStreamSync })\nexport const iterateSync = globIterateSync\nexport const iterate = Object.assign(globIterate, {\n sync: globIterateSync,\n})\nexport const sync = Object.assign(globSync, {\n stream: globStreamSync,\n iterate: globIterateSync,\n})\n\nexport const glob = Object.assign(glob_, {\n glob: glob_,\n globSync,\n sync,\n globStream,\n stream,\n globStreamSync,\n streamSync,\n globIterate,\n iterate,\n globIterateSync,\n iterateSync,\n Glob,\n hasMagic,\n escape,\n unescape,\n})\nglob.glob = glob\n","/**\n * archiver-utils\n *\n * Copyright (c) 2012-2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-archiver/blob/master/LICENSE-MIT\n */\nvar fs = require('graceful-fs');\nvar path = require('path');\n\nvar flatten = require('lodash/flatten');\nvar difference = require('lodash/difference');\nvar union = require('lodash/union');\nvar isPlainObject = require('lodash/isPlainObject');\n\nvar glob = require('glob');\n\nvar file = module.exports = {};\n\nvar pathSeparatorRe = /[\\/\\\\]/g;\n\n// Process specified wildcard glob patterns or filenames against a\n// callback, excluding and uniquing files in the result set.\nvar processPatterns = function(patterns, fn) {\n // Filepaths to return.\n var result = [];\n // Iterate over flattened patterns array.\n flatten(patterns).forEach(function(pattern) {\n // If the first character is ! it should be omitted\n var exclusion = pattern.indexOf('!') === 0;\n // If the pattern is an exclusion, remove the !\n if (exclusion) { pattern = pattern.slice(1); }\n // Find all matching files for this pattern.\n var matches = fn(pattern);\n if (exclusion) {\n // If an exclusion, remove matching files.\n result = difference(result, matches);\n } else {\n // Otherwise add matching files.\n result = union(result, matches);\n }\n });\n return result;\n};\n\n// True if the file path exists.\nfile.exists = function() {\n var filepath = path.join.apply(path, arguments);\n return fs.existsSync(filepath);\n};\n\n// Return an array of all file paths that match the given wildcard patterns.\nfile.expand = function(...args) {\n // If the first argument is an options object, save those options to pass\n // into the File.prototype.glob.sync method.\n var options = isPlainObject(args[0]) ? args.shift() : {};\n // Use the first argument if it's an Array, otherwise convert the arguments\n // object to an array and use that.\n var patterns = Array.isArray(args[0]) ? args[0] : args;\n // Return empty set if there are no patterns or filepaths.\n if (patterns.length === 0) { return []; }\n // Return all matching filepaths.\n var matches = processPatterns(patterns, function(pattern) {\n // Find all matching files for this pattern.\n return glob.sync(pattern, options);\n });\n // Filter result set?\n if (options.filter) {\n matches = matches.filter(function(filepath) {\n filepath = path.join(options.cwd || '', filepath);\n try {\n if (typeof options.filter === 'function') {\n return options.filter(filepath);\n } else {\n // If the file is of the right type and exists, this should work.\n return fs.statSync(filepath)[options.filter]();\n }\n } catch(e) {\n // Otherwise, it's probably not the right type.\n return false;\n }\n });\n }\n return matches;\n};\n\n// Build a multi task \"files\" object dynamically.\nfile.expandMapping = function(patterns, destBase, options) {\n options = Object.assign({\n rename: function(destBase, destPath) {\n return path.join(destBase || '', destPath);\n }\n }, options);\n var files = [];\n var fileByDest = {};\n // Find all files matching pattern, using passed-in options.\n file.expand(options, patterns).forEach(function(src) {\n var destPath = src;\n // Flatten?\n if (options.flatten) {\n destPath = path.basename(destPath);\n }\n // Change the extension?\n if (options.ext) {\n destPath = destPath.replace(/(\\.[^\\/]*)?$/, options.ext);\n }\n // Generate destination filename.\n var dest = options.rename(destBase, destPath, options);\n // Prepend cwd to src path if necessary.\n if (options.cwd) { src = path.join(options.cwd, src); }\n // Normalize filepaths to be unix-style.\n dest = dest.replace(pathSeparatorRe, '/');\n src = src.replace(pathSeparatorRe, '/');\n // Map correct src path to dest path.\n if (fileByDest[dest]) {\n // If dest already exists, push this src onto that dest's src array.\n fileByDest[dest].src.push(src);\n } else {\n // Otherwise create a new src-dest file mapping object.\n files.push({\n src: [src],\n dest: dest,\n });\n // And store a reference for later use.\n fileByDest[dest] = files[files.length - 1];\n }\n });\n return files;\n};\n\n// reusing bits of grunt's multi-task source normalization\nfile.normalizeFilesArray = function(data) {\n var files = [];\n\n data.forEach(function(obj) {\n var prop;\n if ('src' in obj || 'dest' in obj) {\n files.push(obj);\n }\n });\n\n if (files.length === 0) {\n return [];\n }\n\n files = _(files).chain().forEach(function(obj) {\n if (!('src' in obj) || !obj.src) { return; }\n // Normalize .src properties to flattened array.\n if (Array.isArray(obj.src)) {\n obj.src = flatten(obj.src);\n } else {\n obj.src = [obj.src];\n }\n }).map(function(obj) {\n // Build options object, removing unwanted properties.\n var expandOptions = Object.assign({}, obj);\n delete expandOptions.src;\n delete expandOptions.dest;\n\n // Expand file mappings.\n if (obj.expand) {\n return file.expandMapping(obj.src, obj.dest, expandOptions).map(function(mapObj) {\n // Copy obj properties to result.\n var result = Object.assign({}, obj);\n // Make a clone of the orig obj available.\n result.orig = Object.assign({}, obj);\n // Set .src and .dest, processing both as templates.\n result.src = mapObj.src;\n result.dest = mapObj.dest;\n // Remove unwanted properties.\n ['expand', 'cwd', 'flatten', 'rename', 'ext'].forEach(function(prop) {\n delete result[prop];\n });\n return result;\n });\n }\n\n // Copy obj properties to result, adding an .orig property.\n var result = Object.assign({}, obj);\n // Make a clone of the orig obj available.\n result.orig = Object.assign({}, obj);\n\n if ('src' in result) {\n // Expose an expand-on-demand getter method as .src.\n Object.defineProperty(result, 'src', {\n enumerable: true,\n get: function fn() {\n var src;\n if (!('result' in fn)) {\n src = obj.src;\n // If src is an array, flatten it. Otherwise, make it into an array.\n src = Array.isArray(src) ? flatten(src) : [src];\n // Expand src files, memoizing result.\n fn.result = file.expand(expandOptions, src);\n }\n return fn.result;\n }\n });\n }\n\n if ('dest' in result) {\n result.dest = obj.dest;\n }\n\n return result;\n }).flatten().value();\n\n return files;\n};\n","/**\n * archiver-utils\n *\n * Copyright (c) 2015 Chris Talkington.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/archiver-utils/blob/master/LICENSE\n */\nvar fs = require('graceful-fs');\nvar path = require('path');\nvar isStream = require('is-stream');\nvar lazystream = require('lazystream');\nvar normalizePath = require('normalize-path');\nvar defaults = require('lodash/defaults');\n\nvar Stream = require('stream').Stream;\nvar PassThrough = require('readable-stream').PassThrough;\n\nvar utils = module.exports = {};\nutils.file = require('./file.js');\n\nutils.collectStream = function(source, callback) {\n var collection = [];\n var size = 0;\n\n source.on('error', callback);\n\n source.on('data', function(chunk) {\n collection.push(chunk);\n size += chunk.length;\n });\n\n source.on('end', function() {\n var buf = Buffer.alloc(size);\n var offset = 0;\n\n collection.forEach(function(data) {\n data.copy(buf, offset);\n offset += data.length;\n });\n\n callback(null, buf);\n });\n};\n\nutils.dateify = function(dateish) {\n dateish = dateish || new Date();\n\n if (dateish instanceof Date) {\n dateish = dateish;\n } else if (typeof dateish === 'string') {\n dateish = new Date(dateish);\n } else {\n dateish = new Date();\n }\n\n return dateish;\n};\n\n// this is slightly different from lodash version\nutils.defaults = function(object, source, guard) {\n var args = arguments;\n args[0] = args[0] || {};\n\n return defaults(...args);\n};\n\nutils.isStream = function(source) {\n return isStream(source);\n};\n\nutils.lazyReadStream = function(filepath) {\n return new lazystream.Readable(function() {\n return fs.createReadStream(filepath);\n });\n};\n\nutils.normalizeInputSource = function(source) {\n if (source === null) {\n return Buffer.alloc(0);\n } else if (typeof source === 'string') {\n return Buffer.from(source);\n } else if (utils.isStream(source)) {\n // Always pipe through a PassThrough stream to guarantee pausing the stream if it's already flowing,\n // since it will only be processed in a (distant) future iteration of the event loop, and will lose\n // data if already flowing now.\n return source.pipe(new PassThrough());\n }\n\n return source;\n};\n\nutils.sanitizePath = function(filepath) {\n return normalizePath(filepath, false).replace(/^\\w+:/, '').replace(/^(\\.\\.\\/|\\/)+/, '');\n};\n\nutils.trailingSlashIt = function(str) {\n return str.slice(-1) !== '/' ? str + '/' : str;\n};\n\nutils.unixifyPath = function(filepath) {\n return normalizePath(filepath, false).replace(/^\\w+:/, '');\n};\n\nutils.walkdir = function(dirpath, base, callback) {\n var results = [];\n\n if (typeof base === 'function') {\n callback = base;\n base = dirpath;\n }\n\n fs.readdir(dirpath, function(err, list) {\n var i = 0;\n var file;\n var filepath;\n\n if (err) {\n return callback(err);\n }\n\n (function next() {\n file = list[i++];\n\n if (!file) {\n return callback(null, results);\n }\n\n filepath = path.join(dirpath, file);\n\n fs.stat(filepath, function(err, stats) {\n results.push({\n path: filepath,\n relative: path.relative(base, filepath).replace(/\\\\/g, '/'),\n stats: stats\n });\n\n if (stats && stats.isDirectory()) {\n utils.walkdir(filepath, base, function(err, res) {\n\t if(err){\n\t return callback(err);\n\t }\n\n res.forEach(function(dirEntry) {\n results.push(dirEntry);\n });\n\t\t \n next(); \n });\n } else {\n next();\n }\n });\n })();\n });\n};\n","/**\n * Archiver Core\n *\n * @ignore\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\n\nvar util = require('util');\n\nconst ERROR_CODES = {\n 'ABORTED': 'archive was aborted',\n 'DIRECTORYDIRPATHREQUIRED': 'diretory dirpath argument must be a non-empty string value',\n 'DIRECTORYFUNCTIONINVALIDDATA': 'invalid data returned by directory custom data function',\n 'ENTRYNAMEREQUIRED': 'entry name must be a non-empty string value',\n 'FILEFILEPATHREQUIRED': 'file filepath argument must be a non-empty string value',\n 'FINALIZING': 'archive already finalizing',\n 'QUEUECLOSED': 'queue closed',\n 'NOENDMETHOD': 'no suitable finalize/end method defined by module',\n 'DIRECTORYNOTSUPPORTED': 'support for directory entries not defined by module',\n 'FORMATSET': 'archive format already set',\n 'INPUTSTEAMBUFFERREQUIRED': 'input source must be valid Stream or Buffer instance',\n 'MODULESET': 'module already set',\n 'SYMLINKNOTSUPPORTED': 'support for symlink entries not defined by module',\n 'SYMLINKFILEPATHREQUIRED': 'symlink filepath argument must be a non-empty string value',\n 'SYMLINKTARGETREQUIRED': 'symlink target argument must be a non-empty string value',\n 'ENTRYNOTSUPPORTED': 'entry not supported'\n};\n\nfunction ArchiverError(code, data) {\n Error.captureStackTrace(this, this.constructor);\n //this.name = this.constructor.name;\n this.message = ERROR_CODES[code] || code;\n this.code = code;\n this.data = data;\n}\n\nutil.inherits(ArchiverError, Error);\n\nexports = module.exports = ArchiverError;","/**\n * Archiver Core\n *\n * @ignore\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar fs = require('fs');\nvar glob = require('readdir-glob');\nvar async = require('async');\nvar path = require('path');\nvar util = require('archiver-utils');\n\nvar inherits = require('util').inherits;\nvar ArchiverError = require('./error');\nvar Transform = require('readable-stream').Transform;\n\nvar win32 = process.platform === 'win32';\n\n/**\n * @constructor\n * @param {String} format The archive format to use.\n * @param {(CoreOptions|TransformOptions)} options See also {@link ZipOptions} and {@link TarOptions}.\n */\nvar Archiver = function(format, options) {\n if (!(this instanceof Archiver)) {\n return new Archiver(format, options);\n }\n\n if (typeof format !== 'string') {\n options = format;\n format = 'zip';\n }\n\n options = this.options = util.defaults(options, {\n highWaterMark: 1024 * 1024,\n statConcurrency: 4\n });\n\n Transform.call(this, options);\n\n this._format = false;\n this._module = false;\n this._pending = 0;\n this._pointer = 0;\n\n this._entriesCount = 0;\n this._entriesProcessedCount = 0;\n this._fsEntriesTotalBytes = 0;\n this._fsEntriesProcessedBytes = 0;\n\n this._queue = async.queue(this._onQueueTask.bind(this), 1);\n this._queue.drain(this._onQueueDrain.bind(this));\n\n this._statQueue = async.queue(this._onStatQueueTask.bind(this), options.statConcurrency);\n this._statQueue.drain(this._onQueueDrain.bind(this));\n\n this._state = {\n aborted: false,\n finalize: false,\n finalizing: false,\n finalized: false,\n modulePiped: false\n };\n\n this._streams = [];\n};\n\ninherits(Archiver, Transform);\n\n/**\n * Internal logic for `abort`.\n *\n * @private\n * @return void\n */\nArchiver.prototype._abort = function() {\n this._state.aborted = true;\n this._queue.kill();\n this._statQueue.kill();\n\n if (this._queue.idle()) {\n this._shutdown();\n }\n};\n\n/**\n * Internal helper for appending files.\n *\n * @private\n * @param {String} filepath The source filepath.\n * @param {EntryData} data The entry data.\n * @return void\n */\nArchiver.prototype._append = function(filepath, data) {\n data = data || {};\n\n var task = {\n source: null,\n filepath: filepath\n };\n\n if (!data.name) {\n data.name = filepath;\n }\n\n data.sourcePath = filepath;\n task.data = data;\n this._entriesCount++;\n\n if (data.stats && data.stats instanceof fs.Stats) {\n task = this._updateQueueTaskWithStats(task, data.stats);\n if (task) {\n if (data.stats.size) {\n this._fsEntriesTotalBytes += data.stats.size;\n }\n\n this._queue.push(task);\n }\n } else {\n this._statQueue.push(task);\n }\n};\n\n/**\n * Internal logic for `finalize`.\n *\n * @private\n * @return void\n */\nArchiver.prototype._finalize = function() {\n if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n return;\n }\n\n this._state.finalizing = true;\n\n this._moduleFinalize();\n\n this._state.finalizing = false;\n this._state.finalized = true;\n};\n\n/**\n * Checks the various state variables to determine if we can `finalize`.\n *\n * @private\n * @return {Boolean}\n */\nArchiver.prototype._maybeFinalize = function() {\n if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n return false;\n }\n\n if (this._state.finalize && this._pending === 0 && this._queue.idle() && this._statQueue.idle()) {\n this._finalize();\n return true;\n }\n\n return false;\n};\n\n/**\n * Appends an entry to the module.\n *\n * @private\n * @fires Archiver#entry\n * @param {(Buffer|Stream)} source\n * @param {EntryData} data\n * @param {Function} callback\n * @return void\n */\nArchiver.prototype._moduleAppend = function(source, data, callback) {\n if (this._state.aborted) {\n callback();\n return;\n }\n\n this._module.append(source, data, function(err) {\n this._task = null;\n\n if (this._state.aborted) {\n this._shutdown();\n return;\n }\n\n if (err) {\n this.emit('error', err);\n setImmediate(callback);\n return;\n }\n\n /**\n * Fires when the entry's input has been processed and appended to the archive.\n *\n * @event Archiver#entry\n * @type {EntryData}\n */\n this.emit('entry', data);\n this._entriesProcessedCount++;\n\n if (data.stats && data.stats.size) {\n this._fsEntriesProcessedBytes += data.stats.size;\n }\n\n /**\n * @event Archiver#progress\n * @type {ProgressData}\n */\n this.emit('progress', {\n entries: {\n total: this._entriesCount,\n processed: this._entriesProcessedCount\n },\n fs: {\n totalBytes: this._fsEntriesTotalBytes,\n processedBytes: this._fsEntriesProcessedBytes\n }\n });\n\n setImmediate(callback);\n }.bind(this));\n};\n\n/**\n * Finalizes the module.\n *\n * @private\n * @return void\n */\nArchiver.prototype._moduleFinalize = function() {\n if (typeof this._module.finalize === 'function') {\n this._module.finalize();\n } else if (typeof this._module.end === 'function') {\n this._module.end();\n } else {\n this.emit('error', new ArchiverError('NOENDMETHOD'));\n }\n};\n\n/**\n * Pipes the module to our internal stream with error bubbling.\n *\n * @private\n * @return void\n */\nArchiver.prototype._modulePipe = function() {\n this._module.on('error', this._onModuleError.bind(this));\n this._module.pipe(this);\n this._state.modulePiped = true;\n};\n\n/**\n * Determines if the current module supports a defined feature.\n *\n * @private\n * @param {String} key\n * @return {Boolean}\n */\nArchiver.prototype._moduleSupports = function(key) {\n if (!this._module.supports || !this._module.supports[key]) {\n return false;\n }\n\n return this._module.supports[key];\n};\n\n/**\n * Unpipes the module from our internal stream.\n *\n * @private\n * @return void\n */\nArchiver.prototype._moduleUnpipe = function() {\n this._module.unpipe(this);\n this._state.modulePiped = false;\n};\n\n/**\n * Normalizes entry data with fallbacks for key properties.\n *\n * @private\n * @param {Object} data\n * @param {fs.Stats} stats\n * @return {Object}\n */\nArchiver.prototype._normalizeEntryData = function(data, stats) {\n data = util.defaults(data, {\n type: 'file',\n name: null,\n date: null,\n mode: null,\n prefix: null,\n sourcePath: null,\n stats: false\n });\n\n if (stats && data.stats === false) {\n data.stats = stats;\n }\n\n var isDir = data.type === 'directory';\n\n if (data.name) {\n if (typeof data.prefix === 'string' && '' !== data.prefix) {\n data.name = data.prefix + '/' + data.name;\n data.prefix = null;\n }\n\n data.name = util.sanitizePath(data.name);\n\n if (data.type !== 'symlink' && data.name.slice(-1) === '/') {\n isDir = true;\n data.type = 'directory';\n } else if (isDir) {\n data.name += '/';\n }\n }\n\n // 511 === 0777; 493 === 0755; 438 === 0666; 420 === 0644\n if (typeof data.mode === 'number') {\n if (win32) {\n data.mode &= 511;\n } else {\n data.mode &= 4095\n }\n } else if (data.stats && data.mode === null) {\n if (win32) {\n data.mode = data.stats.mode & 511;\n } else {\n data.mode = data.stats.mode & 4095;\n }\n\n // stat isn't reliable on windows; force 0755 for dir\n if (win32 && isDir) {\n data.mode = 493;\n }\n } else if (data.mode === null) {\n data.mode = isDir ? 493 : 420;\n }\n\n if (data.stats && data.date === null) {\n data.date = data.stats.mtime;\n } else {\n data.date = util.dateify(data.date);\n }\n\n return data;\n};\n\n/**\n * Error listener that re-emits error on to our internal stream.\n *\n * @private\n * @param {Error} err\n * @return void\n */\nArchiver.prototype._onModuleError = function(err) {\n /**\n * @event Archiver#error\n * @type {ErrorData}\n */\n this.emit('error', err);\n};\n\n/**\n * Checks the various state variables after queue has drained to determine if\n * we need to `finalize`.\n *\n * @private\n * @return void\n */\nArchiver.prototype._onQueueDrain = function() {\n if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n return;\n }\n\n if (this._state.finalize && this._pending === 0 && this._queue.idle() && this._statQueue.idle()) {\n this._finalize();\n }\n};\n\n/**\n * Appends each queue task to the module.\n *\n * @private\n * @param {Object} task\n * @param {Function} callback\n * @return void\n */\nArchiver.prototype._onQueueTask = function(task, callback) {\n var fullCallback = () => {\n if(task.data.callback) {\n task.data.callback();\n }\n callback();\n }\n\n if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n fullCallback();\n return;\n }\n\n this._task = task;\n this._moduleAppend(task.source, task.data, fullCallback);\n};\n\n/**\n * Performs a file stat and reinjects the task back into the queue.\n *\n * @private\n * @param {Object} task\n * @param {Function} callback\n * @return void\n */\nArchiver.prototype._onStatQueueTask = function(task, callback) {\n if (this._state.finalizing || this._state.finalized || this._state.aborted) {\n callback();\n return;\n }\n\n fs.lstat(task.filepath, function(err, stats) {\n if (this._state.aborted) {\n setImmediate(callback);\n return;\n }\n\n if (err) {\n this._entriesCount--;\n\n /**\n * @event Archiver#warning\n * @type {ErrorData}\n */\n this.emit('warning', err);\n setImmediate(callback);\n return;\n }\n\n task = this._updateQueueTaskWithStats(task, stats);\n\n if (task) {\n if (stats.size) {\n this._fsEntriesTotalBytes += stats.size;\n }\n\n this._queue.push(task);\n }\n\n setImmediate(callback);\n }.bind(this));\n};\n\n/**\n * Unpipes the module and ends our internal stream.\n *\n * @private\n * @return void\n */\nArchiver.prototype._shutdown = function() {\n this._moduleUnpipe();\n this.end();\n};\n\n/**\n * Tracks the bytes emitted by our internal stream.\n *\n * @private\n * @param {Buffer} chunk\n * @param {String} encoding\n * @param {Function} callback\n * @return void\n */\nArchiver.prototype._transform = function(chunk, encoding, callback) {\n if (chunk) {\n this._pointer += chunk.length;\n }\n\n callback(null, chunk);\n};\n\n/**\n * Updates and normalizes a queue task using stats data.\n *\n * @private\n * @param {Object} task\n * @param {fs.Stats} stats\n * @return {Object}\n */\nArchiver.prototype._updateQueueTaskWithStats = function(task, stats) {\n if (stats.isFile()) {\n task.data.type = 'file';\n task.data.sourceType = 'stream';\n task.source = util.lazyReadStream(task.filepath);\n } else if (stats.isDirectory() && this._moduleSupports('directory')) {\n task.data.name = util.trailingSlashIt(task.data.name);\n task.data.type = 'directory';\n task.data.sourcePath = util.trailingSlashIt(task.filepath);\n task.data.sourceType = 'buffer';\n task.source = Buffer.concat([]);\n } else if (stats.isSymbolicLink() && this._moduleSupports('symlink')) {\n var linkPath = fs.readlinkSync(task.filepath);\n var dirName = path.dirname(task.filepath);\n task.data.type = 'symlink';\n task.data.linkname = path.relative(dirName, path.resolve(dirName, linkPath));\n task.data.sourceType = 'buffer';\n task.source = Buffer.concat([]);\n } else {\n if (stats.isDirectory()) {\n this.emit('warning', new ArchiverError('DIRECTORYNOTSUPPORTED', task.data));\n } else if (stats.isSymbolicLink()) {\n this.emit('warning', new ArchiverError('SYMLINKNOTSUPPORTED', task.data));\n } else {\n this.emit('warning', new ArchiverError('ENTRYNOTSUPPORTED', task.data));\n }\n\n return null;\n }\n\n task.data = this._normalizeEntryData(task.data, stats);\n\n return task;\n};\n\n/**\n * Aborts the archiving process, taking a best-effort approach, by:\n *\n * - removing any pending queue tasks\n * - allowing any active queue workers to finish\n * - detaching internal module pipes\n * - ending both sides of the Transform stream\n *\n * It will NOT drain any remaining sources.\n *\n * @return {this}\n */\nArchiver.prototype.abort = function() {\n if (this._state.aborted || this._state.finalized) {\n return this;\n }\n\n this._abort();\n\n return this;\n};\n\n/**\n * Appends an input source (text string, buffer, or stream) to the instance.\n *\n * When the instance has received, processed, and emitted the input, the `entry`\n * event is fired.\n *\n * @fires Archiver#entry\n * @param {(Buffer|Stream|String)} source The input source.\n * @param {EntryData} data See also {@link ZipEntryData} and {@link TarEntryData}.\n * @return {this}\n */\nArchiver.prototype.append = function(source, data) {\n if (this._state.finalize || this._state.aborted) {\n this.emit('error', new ArchiverError('QUEUECLOSED'));\n return this;\n }\n\n data = this._normalizeEntryData(data);\n\n if (typeof data.name !== 'string' || data.name.length === 0) {\n this.emit('error', new ArchiverError('ENTRYNAMEREQUIRED'));\n return this;\n }\n\n if (data.type === 'directory' && !this._moduleSupports('directory')) {\n this.emit('error', new ArchiverError('DIRECTORYNOTSUPPORTED', { name: data.name }));\n return this;\n }\n\n source = util.normalizeInputSource(source);\n\n if (Buffer.isBuffer(source)) {\n data.sourceType = 'buffer';\n } else if (util.isStream(source)) {\n data.sourceType = 'stream';\n } else {\n this.emit('error', new ArchiverError('INPUTSTEAMBUFFERREQUIRED', { name: data.name }));\n return this;\n }\n\n this._entriesCount++;\n this._queue.push({\n data: data,\n source: source\n });\n\n return this;\n};\n\n/**\n * Appends a directory and its files, recursively, given its dirpath.\n *\n * @param {String} dirpath The source directory path.\n * @param {String} destpath The destination path within the archive.\n * @param {(EntryData|Function)} data See also [ZipEntryData]{@link ZipEntryData} and\n * [TarEntryData]{@link TarEntryData}.\n * @return {this}\n */\nArchiver.prototype.directory = function(dirpath, destpath, data) {\n if (this._state.finalize || this._state.aborted) {\n this.emit('error', new ArchiverError('QUEUECLOSED'));\n return this;\n }\n\n if (typeof dirpath !== 'string' || dirpath.length === 0) {\n this.emit('error', new ArchiverError('DIRECTORYDIRPATHREQUIRED'));\n return this;\n }\n\n this._pending++;\n\n if (destpath === false) {\n destpath = '';\n } else if (typeof destpath !== 'string'){\n destpath = dirpath;\n }\n\n var dataFunction = false;\n if (typeof data === 'function') {\n dataFunction = data;\n data = {};\n } else if (typeof data !== 'object') {\n data = {};\n }\n\n var globOptions = {\n stat: true,\n dot: true\n };\n\n function onGlobEnd() {\n this._pending--;\n this._maybeFinalize();\n }\n\n function onGlobError(err) {\n this.emit('error', err);\n }\n\n function onGlobMatch(match){\n globber.pause();\n\n var ignoreMatch = false;\n var entryData = Object.assign({}, data);\n entryData.name = match.relative;\n entryData.prefix = destpath;\n entryData.stats = match.stat;\n entryData.callback = globber.resume.bind(globber);\n\n try {\n if (dataFunction) {\n entryData = dataFunction(entryData);\n\n if (entryData === false) {\n ignoreMatch = true;\n } else if (typeof entryData !== 'object') {\n throw new ArchiverError('DIRECTORYFUNCTIONINVALIDDATA', { dirpath: dirpath });\n }\n }\n } catch(e) {\n this.emit('error', e);\n return;\n }\n\n if (ignoreMatch) {\n globber.resume();\n return;\n }\n\n this._append(match.absolute, entryData);\n }\n\n var globber = glob(dirpath, globOptions);\n globber.on('error', onGlobError.bind(this));\n globber.on('match', onGlobMatch.bind(this));\n globber.on('end', onGlobEnd.bind(this));\n\n return this;\n};\n\n/**\n * Appends a file given its filepath using a\n * [lazystream]{@link https://github.com/jpommerening/node-lazystream} wrapper to\n * prevent issues with open file limits.\n *\n * When the instance has received, processed, and emitted the file, the `entry`\n * event is fired.\n *\n * @param {String} filepath The source filepath.\n * @param {EntryData} data See also [ZipEntryData]{@link ZipEntryData} and\n * [TarEntryData]{@link TarEntryData}.\n * @return {this}\n */\nArchiver.prototype.file = function(filepath, data) {\n if (this._state.finalize || this._state.aborted) {\n this.emit('error', new ArchiverError('QUEUECLOSED'));\n return this;\n }\n\n if (typeof filepath !== 'string' || filepath.length === 0) {\n this.emit('error', new ArchiverError('FILEFILEPATHREQUIRED'));\n return this;\n }\n\n this._append(filepath, data);\n\n return this;\n};\n\n/**\n * Appends multiple files that match a glob pattern.\n *\n * @param {String} pattern The [glob pattern]{@link https://github.com/isaacs/minimatch} to match.\n * @param {Object} options See [node-readdir-glob]{@link https://github.com/yqnn/node-readdir-glob#options}.\n * @param {EntryData} data See also [ZipEntryData]{@link ZipEntryData} and\n * [TarEntryData]{@link TarEntryData}.\n * @return {this}\n */\nArchiver.prototype.glob = function(pattern, options, data) {\n this._pending++;\n\n options = util.defaults(options, {\n stat: true,\n pattern: pattern\n });\n\n function onGlobEnd() {\n this._pending--;\n this._maybeFinalize();\n }\n\n function onGlobError(err) {\n this.emit('error', err);\n }\n\n function onGlobMatch(match){\n globber.pause();\n var entryData = Object.assign({}, data);\n entryData.callback = globber.resume.bind(globber);\n entryData.stats = match.stat;\n entryData.name = match.relative;\n\n this._append(match.absolute, entryData);\n }\n\n var globber = glob(options.cwd || '.', options);\n globber.on('error', onGlobError.bind(this));\n globber.on('match', onGlobMatch.bind(this));\n globber.on('end', onGlobEnd.bind(this));\n\n return this;\n};\n\n/**\n * Finalizes the instance and prevents further appending to the archive\n * structure (queue will continue til drained).\n *\n * The `end`, `close` or `finish` events on the destination stream may fire\n * right after calling this method so you should set listeners beforehand to\n * properly detect stream completion.\n *\n * @return {Promise}\n */\nArchiver.prototype.finalize = function() {\n if (this._state.aborted) {\n var abortedError = new ArchiverError('ABORTED');\n this.emit('error', abortedError);\n return Promise.reject(abortedError);\n }\n\n if (this._state.finalize) {\n var finalizingError = new ArchiverError('FINALIZING');\n this.emit('error', finalizingError);\n return Promise.reject(finalizingError);\n }\n\n this._state.finalize = true;\n\n if (this._pending === 0 && this._queue.idle() && this._statQueue.idle()) {\n this._finalize();\n }\n\n var self = this;\n\n return new Promise(function(resolve, reject) {\n var errored;\n\n self._module.on('end', function() {\n if (!errored) {\n resolve();\n }\n })\n\n self._module.on('error', function(err) {\n errored = true;\n reject(err);\n })\n })\n};\n\n/**\n * Sets the module format name used for archiving.\n *\n * @param {String} format The name of the format.\n * @return {this}\n */\nArchiver.prototype.setFormat = function(format) {\n if (this._format) {\n this.emit('error', new ArchiverError('FORMATSET'));\n return this;\n }\n\n this._format = format;\n\n return this;\n};\n\n/**\n * Sets the module used for archiving.\n *\n * @param {Function} module The function for archiver to interact with.\n * @return {this}\n */\nArchiver.prototype.setModule = function(module) {\n if (this._state.aborted) {\n this.emit('error', new ArchiverError('ABORTED'));\n return this;\n }\n\n if (this._state.module) {\n this.emit('error', new ArchiverError('MODULESET'));\n return this;\n }\n\n this._module = module;\n this._modulePipe();\n\n return this;\n};\n\n/**\n * Appends a symlink to the instance.\n *\n * This does NOT interact with filesystem and is used for programmatically creating symlinks.\n *\n * @param {String} filepath The symlink path (within archive).\n * @param {String} target The target path (within archive).\n * @param {Number} mode Sets the entry permissions.\n * @return {this}\n */\nArchiver.prototype.symlink = function(filepath, target, mode) {\n if (this._state.finalize || this._state.aborted) {\n this.emit('error', new ArchiverError('QUEUECLOSED'));\n return this;\n }\n\n if (typeof filepath !== 'string' || filepath.length === 0) {\n this.emit('error', new ArchiverError('SYMLINKFILEPATHREQUIRED'));\n return this;\n }\n\n if (typeof target !== 'string' || target.length === 0) {\n this.emit('error', new ArchiverError('SYMLINKTARGETREQUIRED', { filepath: filepath }));\n return this;\n }\n\n if (!this._moduleSupports('symlink')) {\n this.emit('error', new ArchiverError('SYMLINKNOTSUPPORTED', { filepath: filepath }));\n return this;\n }\n\n var data = {};\n data.type = 'symlink';\n data.name = filepath.replace(/\\\\/g, '/');\n data.linkname = target.replace(/\\\\/g, '/');\n data.sourceType = 'buffer';\n\n if (typeof mode === \"number\") {\n data.mode = mode;\n }\n\n this._entriesCount++;\n this._queue.push({\n data: data,\n source: Buffer.concat([])\n });\n\n return this;\n};\n\n/**\n * Returns the current length (in bytes) that has been emitted.\n *\n * @return {Number}\n */\nArchiver.prototype.pointer = function() {\n return this._pointer;\n};\n\n/**\n * Middleware-like helper that has yet to be fully implemented.\n *\n * @private\n * @param {Function} plugin\n * @return {this}\n */\nArchiver.prototype.use = function(plugin) {\n this._streams.push(plugin);\n return this;\n};\n\nmodule.exports = Archiver;\n\n/**\n * @typedef {Object} CoreOptions\n * @global\n * @property {Number} [statConcurrency=4] Sets the number of workers used to\n * process the internal fs stat queue.\n */\n\n/**\n * @typedef {Object} TransformOptions\n * @property {Boolean} [allowHalfOpen=true] If set to false, then the stream\n * will automatically end the readable side when the writable side ends and vice\n * versa.\n * @property {Boolean} [readableObjectMode=false] Sets objectMode for readable\n * side of the stream. Has no effect if objectMode is true.\n * @property {Boolean} [writableObjectMode=false] Sets objectMode for writable\n * side of the stream. Has no effect if objectMode is true.\n * @property {Boolean} [decodeStrings=true] Whether or not to decode strings\n * into Buffers before passing them to _write(). `Writable`\n * @property {String} [encoding=NULL] If specified, then buffers will be decoded\n * to strings using the specified encoding. `Readable`\n * @property {Number} [highWaterMark=16kb] The maximum number of bytes to store\n * in the internal buffer before ceasing to read from the underlying resource.\n * `Readable` `Writable`\n * @property {Boolean} [objectMode=false] Whether this stream should behave as a\n * stream of objects. Meaning that stream.read(n) returns a single value instead\n * of a Buffer of size n. `Readable` `Writable`\n */\n\n/**\n * @typedef {Object} EntryData\n * @property {String} name Sets the entry name including internal path.\n * @property {(String|Date)} [date=NOW()] Sets the entry date.\n * @property {Number} [mode=D:0755/F:0644] Sets the entry permissions.\n * @property {String} [prefix] Sets a path prefix for the entry name. Useful\n * when working with methods like `directory` or `glob`.\n * @property {fs.Stats} [stats] Sets the fs stat data for this entry allowing\n * for reduction of fs stat calls when stat data is already known.\n */\n\n/**\n * @typedef {Object} ErrorData\n * @property {String} message The message of the error.\n * @property {String} code The error code assigned to this error.\n * @property {String} data Additional data provided for reporting or debugging (where available).\n */\n\n/**\n * @typedef {Object} ProgressData\n * @property {Object} entries\n * @property {Number} entries.total Number of entries that have been appended.\n * @property {Number} entries.processed Number of entries that have been processed.\n * @property {Object} fs\n * @property {Number} fs.totalBytes Number of bytes that have been appended. Calculated asynchronously and might not be accurate: it growth while entries are added. (based on fs.Stats)\n * @property {Number} fs.processedBytes Number of bytes that have been processed. (based on fs.Stats)\n */\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar ArchiveEntry = module.exports = function() {};\n\nArchiveEntry.prototype.getName = function() {};\n\nArchiveEntry.prototype.getSize = function() {};\n\nArchiveEntry.prototype.getLastModifiedDate = function() {};\n\nArchiveEntry.prototype.isDirectory = function() {};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar util = module.exports = {};\n\nutil.dateToDos = function(d, forceLocalTime) {\n forceLocalTime = forceLocalTime || false;\n\n var year = forceLocalTime ? d.getFullYear() : d.getUTCFullYear();\n\n if (year < 1980) {\n return 2162688; // 1980-1-1 00:00:00\n } else if (year >= 2044) {\n return 2141175677; // 2043-12-31 23:59:58\n }\n\n var val = {\n year: year,\n month: forceLocalTime ? d.getMonth() : d.getUTCMonth(),\n date: forceLocalTime ? d.getDate() : d.getUTCDate(),\n hours: forceLocalTime ? d.getHours() : d.getUTCHours(),\n minutes: forceLocalTime ? d.getMinutes() : d.getUTCMinutes(),\n seconds: forceLocalTime ? d.getSeconds() : d.getUTCSeconds()\n };\n\n return ((val.year - 1980) << 25) | ((val.month + 1) << 21) | (val.date << 16) |\n (val.hours << 11) | (val.minutes << 5) | (val.seconds / 2);\n};\n\nutil.dosToDate = function(dos) {\n return new Date(((dos >> 25) & 0x7f) + 1980, ((dos >> 21) & 0x0f) - 1, (dos >> 16) & 0x1f, (dos >> 11) & 0x1f, (dos >> 5) & 0x3f, (dos & 0x1f) << 1);\n};\n\nutil.fromDosTime = function(buf) {\n return util.dosToDate(buf.readUInt32LE(0));\n};\n\nutil.getEightBytes = function(v) {\n var buf = Buffer.alloc(8);\n buf.writeUInt32LE(v % 0x0100000000, 0);\n buf.writeUInt32LE((v / 0x0100000000) | 0, 4);\n\n return buf;\n};\n\nutil.getShortBytes = function(v) {\n var buf = Buffer.alloc(2);\n buf.writeUInt16LE((v & 0xFFFF) >>> 0, 0);\n\n return buf;\n};\n\nutil.getShortBytesValue = function(buf, offset) {\n return buf.readUInt16LE(offset);\n};\n\nutil.getLongBytes = function(v) {\n var buf = Buffer.alloc(4);\n buf.writeUInt32LE((v & 0xFFFFFFFF) >>> 0, 0);\n\n return buf;\n};\n\nutil.getLongBytesValue = function(buf, offset) {\n return buf.readUInt32LE(offset);\n};\n\nutil.toDosTime = function(d) {\n return util.getLongBytes(util.dateToDos(d));\n};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar zipUtil = require('./util');\n\nvar DATA_DESCRIPTOR_FLAG = 1 << 3;\nvar ENCRYPTION_FLAG = 1 << 0;\nvar NUMBER_OF_SHANNON_FANO_TREES_FLAG = 1 << 2;\nvar SLIDING_DICTIONARY_SIZE_FLAG = 1 << 1;\nvar STRONG_ENCRYPTION_FLAG = 1 << 6;\nvar UFT8_NAMES_FLAG = 1 << 11;\n\nvar GeneralPurposeBit = module.exports = function() {\n if (!(this instanceof GeneralPurposeBit)) {\n return new GeneralPurposeBit();\n }\n\n this.descriptor = false;\n this.encryption = false;\n this.utf8 = false;\n this.numberOfShannonFanoTrees = 0;\n this.strongEncryption = false;\n this.slidingDictionarySize = 0;\n\n return this;\n};\n\nGeneralPurposeBit.prototype.encode = function() {\n return zipUtil.getShortBytes(\n (this.descriptor ? DATA_DESCRIPTOR_FLAG : 0) |\n (this.utf8 ? UFT8_NAMES_FLAG : 0) |\n (this.encryption ? ENCRYPTION_FLAG : 0) |\n (this.strongEncryption ? STRONG_ENCRYPTION_FLAG : 0)\n );\n};\n\nGeneralPurposeBit.prototype.parse = function(buf, offset) {\n var flag = zipUtil.getShortBytesValue(buf, offset);\n var gbp = new GeneralPurposeBit();\n\n gbp.useDataDescriptor((flag & DATA_DESCRIPTOR_FLAG) !== 0);\n gbp.useUTF8ForNames((flag & UFT8_NAMES_FLAG) !== 0);\n gbp.useStrongEncryption((flag & STRONG_ENCRYPTION_FLAG) !== 0);\n gbp.useEncryption((flag & ENCRYPTION_FLAG) !== 0);\n gbp.setSlidingDictionarySize((flag & SLIDING_DICTIONARY_SIZE_FLAG) !== 0 ? 8192 : 4096);\n gbp.setNumberOfShannonFanoTrees((flag & NUMBER_OF_SHANNON_FANO_TREES_FLAG) !== 0 ? 3 : 2);\n\n return gbp;\n};\n\nGeneralPurposeBit.prototype.setNumberOfShannonFanoTrees = function(n) {\n this.numberOfShannonFanoTrees = n;\n};\n\nGeneralPurposeBit.prototype.getNumberOfShannonFanoTrees = function() {\n return this.numberOfShannonFanoTrees;\n};\n\nGeneralPurposeBit.prototype.setSlidingDictionarySize = function(n) {\n this.slidingDictionarySize = n;\n};\n\nGeneralPurposeBit.prototype.getSlidingDictionarySize = function() {\n return this.slidingDictionarySize;\n};\n\nGeneralPurposeBit.prototype.useDataDescriptor = function(b) {\n this.descriptor = b;\n};\n\nGeneralPurposeBit.prototype.usesDataDescriptor = function() {\n return this.descriptor;\n};\n\nGeneralPurposeBit.prototype.useEncryption = function(b) {\n this.encryption = b;\n};\n\nGeneralPurposeBit.prototype.usesEncryption = function() {\n return this.encryption;\n};\n\nGeneralPurposeBit.prototype.useStrongEncryption = function(b) {\n this.strongEncryption = b;\n};\n\nGeneralPurposeBit.prototype.usesStrongEncryption = function() {\n return this.strongEncryption;\n};\n\nGeneralPurposeBit.prototype.useUTF8ForNames = function(b) {\n this.utf8 = b;\n};\n\nGeneralPurposeBit.prototype.usesUTF8ForNames = function() {\n return this.utf8;\n};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nmodule.exports = {\n /**\n * Bits used for permissions (and sticky bit)\n */\n PERM_MASK: 4095, // 07777\n\n /**\n * Bits used to indicate the filesystem object type.\n */\n FILE_TYPE_FLAG: 61440, // 0170000\n\n /**\n * Indicates symbolic links.\n */\n LINK_FLAG: 40960, // 0120000\n\n /**\n * Indicates plain files.\n */\n FILE_FLAG: 32768, // 0100000\n\n /**\n * Indicates directories.\n */\n DIR_FLAG: 16384, // 040000\n\n // ----------------------------------------------------------\n // somewhat arbitrary choices that are quite common for shared\n // installations\n // -----------------------------------------------------------\n\n /**\n * Default permissions for symbolic links.\n */\n DEFAULT_LINK_PERM: 511, // 0777\n\n /**\n * Default permissions for directories.\n */\n DEFAULT_DIR_PERM: 493, // 0755\n\n /**\n * Default permissions for plain files.\n */\n DEFAULT_FILE_PERM: 420 // 0644\n};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nmodule.exports = {\n WORD: 4,\n DWORD: 8,\n EMPTY: Buffer.alloc(0),\n\n SHORT: 2,\n SHORT_MASK: 0xffff,\n SHORT_SHIFT: 16,\n SHORT_ZERO: Buffer.from(Array(2)),\n LONG: 4,\n LONG_ZERO: Buffer.from(Array(4)),\n\n MIN_VERSION_INITIAL: 10,\n MIN_VERSION_DATA_DESCRIPTOR: 20,\n MIN_VERSION_ZIP64: 45,\n VERSION_MADEBY: 45,\n\n METHOD_STORED: 0,\n METHOD_DEFLATED: 8,\n\n PLATFORM_UNIX: 3,\n PLATFORM_FAT: 0,\n\n SIG_LFH: 0x04034b50,\n SIG_DD: 0x08074b50,\n SIG_CFH: 0x02014b50,\n SIG_EOCD: 0x06054b50,\n SIG_ZIP64_EOCD: 0x06064B50,\n SIG_ZIP64_EOCD_LOC: 0x07064B50,\n\n ZIP64_MAGIC_SHORT: 0xffff,\n ZIP64_MAGIC: 0xffffffff,\n ZIP64_EXTRA_ID: 0x0001,\n\n ZLIB_NO_COMPRESSION: 0,\n ZLIB_BEST_SPEED: 1,\n ZLIB_BEST_COMPRESSION: 9,\n ZLIB_DEFAULT_COMPRESSION: -1,\n\n MODE_MASK: 0xFFF,\n DEFAULT_FILE_MODE: 33188, // 010644 = -rw-r--r-- = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH\n DEFAULT_DIR_MODE: 16877, // 040755 = drwxr-xr-x = S_IFDIR | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH\n\n EXT_FILE_ATTR_DIR: 1106051088, // 010173200020 = drwxr-xr-x = (((S_IFDIR | 0755) << 16) | S_DOS_D)\n EXT_FILE_ATTR_FILE: 2175008800, // 020151000040 = -rw-r--r-- = (((S_IFREG | 0644) << 16) | S_DOS_A) >>> 0\n\n // Unix file types\n S_IFMT: 61440, // 0170000 type of file mask\n S_IFIFO: 4096, // 010000 named pipe (fifo)\n S_IFCHR: 8192, // 020000 character special\n S_IFDIR: 16384, // 040000 directory\n S_IFBLK: 24576, // 060000 block special\n S_IFREG: 32768, // 0100000 regular\n S_IFLNK: 40960, // 0120000 symbolic link\n S_IFSOCK: 49152, // 0140000 socket\n\n // DOS file type flags\n S_DOS_A: 32, // 040 Archive\n S_DOS_D: 16, // 020 Directory\n S_DOS_V: 8, // 010 Volume\n S_DOS_S: 4, // 04 System\n S_DOS_H: 2, // 02 Hidden\n S_DOS_R: 1 // 01 Read Only\n};\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar inherits = require('util').inherits;\nvar normalizePath = require('normalize-path');\n\nvar ArchiveEntry = require('../archive-entry');\nvar GeneralPurposeBit = require('./general-purpose-bit');\nvar UnixStat = require('./unix-stat');\n\nvar constants = require('./constants');\nvar zipUtil = require('./util');\n\nvar ZipArchiveEntry = module.exports = function(name) {\n if (!(this instanceof ZipArchiveEntry)) {\n return new ZipArchiveEntry(name);\n }\n\n ArchiveEntry.call(this);\n\n this.platform = constants.PLATFORM_FAT;\n this.method = -1;\n\n this.name = null;\n this.size = 0;\n this.csize = 0;\n this.gpb = new GeneralPurposeBit();\n this.crc = 0;\n this.time = -1;\n\n this.minver = constants.MIN_VERSION_INITIAL;\n this.mode = -1;\n this.extra = null;\n this.exattr = 0;\n this.inattr = 0;\n this.comment = null;\n\n if (name) {\n this.setName(name);\n }\n};\n\ninherits(ZipArchiveEntry, ArchiveEntry);\n\n/**\n * Returns the extra fields related to the entry.\n *\n * @returns {Buffer}\n */\nZipArchiveEntry.prototype.getCentralDirectoryExtra = function() {\n return this.getExtra();\n};\n\n/**\n * Returns the comment set for the entry.\n *\n * @returns {string}\n */\nZipArchiveEntry.prototype.getComment = function() {\n return this.comment !== null ? this.comment : '';\n};\n\n/**\n * Returns the compressed size of the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getCompressedSize = function() {\n return this.csize;\n};\n\n/**\n * Returns the CRC32 digest for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getCrc = function() {\n return this.crc;\n};\n\n/**\n * Returns the external file attributes for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getExternalAttributes = function() {\n return this.exattr;\n};\n\n/**\n * Returns the extra fields related to the entry.\n *\n * @returns {Buffer}\n */\nZipArchiveEntry.prototype.getExtra = function() {\n return this.extra !== null ? this.extra : constants.EMPTY;\n};\n\n/**\n * Returns the general purpose bits related to the entry.\n *\n * @returns {GeneralPurposeBit}\n */\nZipArchiveEntry.prototype.getGeneralPurposeBit = function() {\n return this.gpb;\n};\n\n/**\n * Returns the internal file attributes for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getInternalAttributes = function() {\n return this.inattr;\n};\n\n/**\n * Returns the last modified date of the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getLastModifiedDate = function() {\n return this.getTime();\n};\n\n/**\n * Returns the extra fields related to the entry.\n *\n * @returns {Buffer}\n */\nZipArchiveEntry.prototype.getLocalFileDataExtra = function() {\n return this.getExtra();\n};\n\n/**\n * Returns the compression method used on the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getMethod = function() {\n return this.method;\n};\n\n/**\n * Returns the filename of the entry.\n *\n * @returns {string}\n */\nZipArchiveEntry.prototype.getName = function() {\n return this.name;\n};\n\n/**\n * Returns the platform on which the entry was made.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getPlatform = function() {\n return this.platform;\n};\n\n/**\n * Returns the size of the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getSize = function() {\n return this.size;\n};\n\n/**\n * Returns a date object representing the last modified date of the entry.\n *\n * @returns {number|Date}\n */\nZipArchiveEntry.prototype.getTime = function() {\n return this.time !== -1 ? zipUtil.dosToDate(this.time) : -1;\n};\n\n/**\n * Returns the DOS timestamp for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getTimeDos = function() {\n return this.time !== -1 ? this.time : 0;\n};\n\n/**\n * Returns the UNIX file permissions for the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getUnixMode = function() {\n return this.platform !== constants.PLATFORM_UNIX ? 0 : ((this.getExternalAttributes() >> constants.SHORT_SHIFT) & constants.SHORT_MASK);\n};\n\n/**\n * Returns the version of ZIP needed to extract the entry.\n *\n * @returns {number}\n */\nZipArchiveEntry.prototype.getVersionNeededToExtract = function() {\n return this.minver;\n};\n\n/**\n * Sets the comment of the entry.\n *\n * @param comment\n */\nZipArchiveEntry.prototype.setComment = function(comment) {\n if (Buffer.byteLength(comment) !== comment.length) {\n this.getGeneralPurposeBit().useUTF8ForNames(true);\n }\n\n this.comment = comment;\n};\n\n/**\n * Sets the compressed size of the entry.\n *\n * @param size\n */\nZipArchiveEntry.prototype.setCompressedSize = function(size) {\n if (size < 0) {\n throw new Error('invalid entry compressed size');\n }\n\n this.csize = size;\n};\n\n/**\n * Sets the checksum of the entry.\n *\n * @param crc\n */\nZipArchiveEntry.prototype.setCrc = function(crc) {\n if (crc < 0) {\n throw new Error('invalid entry crc32');\n }\n\n this.crc = crc;\n};\n\n/**\n * Sets the external file attributes of the entry.\n *\n * @param attr\n */\nZipArchiveEntry.prototype.setExternalAttributes = function(attr) {\n this.exattr = attr >>> 0;\n};\n\n/**\n * Sets the extra fields related to the entry.\n *\n * @param extra\n */\nZipArchiveEntry.prototype.setExtra = function(extra) {\n this.extra = extra;\n};\n\n/**\n * Sets the general purpose bits related to the entry.\n *\n * @param gpb\n */\nZipArchiveEntry.prototype.setGeneralPurposeBit = function(gpb) {\n if (!(gpb instanceof GeneralPurposeBit)) {\n throw new Error('invalid entry GeneralPurposeBit');\n }\n\n this.gpb = gpb;\n};\n\n/**\n * Sets the internal file attributes of the entry.\n *\n * @param attr\n */\nZipArchiveEntry.prototype.setInternalAttributes = function(attr) {\n this.inattr = attr;\n};\n\n/**\n * Sets the compression method of the entry.\n *\n * @param method\n */\nZipArchiveEntry.prototype.setMethod = function(method) {\n if (method < 0) {\n throw new Error('invalid entry compression method');\n }\n\n this.method = method;\n};\n\n/**\n * Sets the name of the entry.\n *\n * @param name\n * @param prependSlash\n */\nZipArchiveEntry.prototype.setName = function(name, prependSlash = false) {\n name = normalizePath(name, false)\n .replace(/^\\w+:/, '')\n .replace(/^(\\.\\.\\/|\\/)+/, '');\n\n if (prependSlash) {\n name = `/${name}`;\n }\n\n if (Buffer.byteLength(name) !== name.length) {\n this.getGeneralPurposeBit().useUTF8ForNames(true);\n }\n\n this.name = name;\n};\n\n/**\n * Sets the platform on which the entry was made.\n *\n * @param platform\n */\nZipArchiveEntry.prototype.setPlatform = function(platform) {\n this.platform = platform;\n};\n\n/**\n * Sets the size of the entry.\n *\n * @param size\n */\nZipArchiveEntry.prototype.setSize = function(size) {\n if (size < 0) {\n throw new Error('invalid entry size');\n }\n\n this.size = size;\n};\n\n/**\n * Sets the time of the entry.\n *\n * @param time\n * @param forceLocalTime\n */\nZipArchiveEntry.prototype.setTime = function(time, forceLocalTime) {\n if (!(time instanceof Date)) {\n throw new Error('invalid entry time');\n }\n\n this.time = zipUtil.dateToDos(time, forceLocalTime);\n};\n\n/**\n * Sets the UNIX file permissions for the entry.\n *\n * @param mode\n */\nZipArchiveEntry.prototype.setUnixMode = function(mode) {\n mode |= this.isDirectory() ? constants.S_IFDIR : constants.S_IFREG;\n\n var extattr = 0;\n extattr |= (mode << constants.SHORT_SHIFT) | (this.isDirectory() ? constants.S_DOS_D : constants.S_DOS_A);\n\n this.setExternalAttributes(extattr);\n this.mode = mode & constants.MODE_MASK;\n this.platform = constants.PLATFORM_UNIX;\n};\n\n/**\n * Sets the version of ZIP needed to extract this entry.\n *\n * @param minver\n */\nZipArchiveEntry.prototype.setVersionNeededToExtract = function(minver) {\n this.minver = minver;\n};\n\n/**\n * Returns true if this entry represents a directory.\n *\n * @returns {boolean}\n */\nZipArchiveEntry.prototype.isDirectory = function() {\n return this.getName().slice(-1) === '/';\n};\n\n/**\n * Returns true if this entry represents a unix symlink,\n * in which case the entry's content contains the target path\n * for the symlink.\n *\n * @returns {boolean}\n */\nZipArchiveEntry.prototype.isUnixSymlink = function() {\n return (this.getUnixMode() & UnixStat.FILE_TYPE_FLAG) === UnixStat.LINK_FLAG;\n};\n\n/**\n * Returns true if this entry is using the ZIP64 extension of ZIP.\n *\n * @returns {boolean}\n */\nZipArchiveEntry.prototype.isZip64 = function() {\n return this.csize > constants.ZIP64_MAGIC || this.size > constants.ZIP64_MAGIC;\n};\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar Stream = require('stream').Stream;\nvar PassThrough = require('readable-stream').PassThrough;\nvar isStream = require('is-stream');\n\nvar util = module.exports = {};\n\nutil.normalizeInputSource = function(source) {\n if (source === null) {\n return Buffer.alloc(0);\n } else if (typeof source === 'string') {\n return Buffer.from(source);\n } else if (isStream(source) && !source._readableState) {\n var normalized = new PassThrough();\n source.pipe(normalized);\n\n return normalized;\n }\n\n return source;\n};","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar inherits = require('util').inherits;\nvar isStream = require('is-stream');\nvar Transform = require('readable-stream').Transform;\n\nvar ArchiveEntry = require('./archive-entry');\nvar util = require('../util');\n\nvar ArchiveOutputStream = module.exports = function(options) {\n if (!(this instanceof ArchiveOutputStream)) {\n return new ArchiveOutputStream(options);\n }\n\n Transform.call(this, options);\n\n this.offset = 0;\n this._archive = {\n finish: false,\n finished: false,\n processing: false\n };\n};\n\ninherits(ArchiveOutputStream, Transform);\n\nArchiveOutputStream.prototype._appendBuffer = function(zae, source, callback) {\n // scaffold only\n};\n\nArchiveOutputStream.prototype._appendStream = function(zae, source, callback) {\n // scaffold only\n};\n\nArchiveOutputStream.prototype._emitErrorCallback = function(err) {\n if (err) {\n this.emit('error', err);\n }\n};\n\nArchiveOutputStream.prototype._finish = function(ae) {\n // scaffold only\n};\n\nArchiveOutputStream.prototype._normalizeEntry = function(ae) {\n // scaffold only\n};\n\nArchiveOutputStream.prototype._transform = function(chunk, encoding, callback) {\n callback(null, chunk);\n};\n\nArchiveOutputStream.prototype.entry = function(ae, source, callback) {\n source = source || null;\n\n if (typeof callback !== 'function') {\n callback = this._emitErrorCallback.bind(this);\n }\n\n if (!(ae instanceof ArchiveEntry)) {\n callback(new Error('not a valid instance of ArchiveEntry'));\n return;\n }\n\n if (this._archive.finish || this._archive.finished) {\n callback(new Error('unacceptable entry after finish'));\n return;\n }\n\n if (this._archive.processing) {\n callback(new Error('already processing an entry'));\n return;\n }\n\n this._archive.processing = true;\n this._normalizeEntry(ae);\n this._entry = ae;\n\n source = util.normalizeInputSource(source);\n\n if (Buffer.isBuffer(source)) {\n this._appendBuffer(ae, source, callback);\n } else if (isStream(source)) {\n this._appendStream(ae, source, callback);\n } else {\n this._archive.processing = false;\n callback(new Error('input source must be valid Stream or Buffer instance'));\n return;\n }\n\n return this;\n};\n\nArchiveOutputStream.prototype.finish = function() {\n if (this._archive.processing) {\n this._archive.finish = true;\n return;\n }\n\n this._finish();\n};\n\nArchiveOutputStream.prototype.getBytesWritten = function() {\n return this.offset;\n};\n\nArchiveOutputStream.prototype.write = function(chunk, cb) {\n if (chunk) {\n this.offset += chunk.length;\n }\n\n return Transform.prototype.write.call(this, chunk, cb);\n};","/*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32;\n(function (factory) {\n\t/*jshint ignore:start */\n\t/*eslint-disable */\n\tif(typeof DO_NOT_EXPORT_CRC === 'undefined') {\n\t\tif('object' === typeof exports) {\n\t\t\tfactory(exports);\n\t\t} else if ('function' === typeof define && define.amd) {\n\t\t\tdefine(function () {\n\t\t\t\tvar module = {};\n\t\t\t\tfactory(module);\n\t\t\t\treturn module;\n\t\t\t});\n\t\t} else {\n\t\t\tfactory(CRC32 = {});\n\t\t}\n\t} else {\n\t\tfactory(CRC32 = {});\n\t}\n\t/*eslint-enable */\n\t/*jshint ignore:end */\n}(function(CRC32) {\nCRC32.version = '1.2.2';\n/*global Int32Array */\nfunction signed_crc_table() {\n\tvar c = 0, table = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4];\nvar T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B, seed) {\n\tvar C = seed ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\n// $FlowIgnore\nCRC32.bstr = crc32_bstr;\n// $FlowIgnore\nCRC32.buf = crc32_buf;\n// $FlowIgnore\nCRC32.str = crc32_str;\n}));\n","/**\n * node-crc32-stream\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT\n */\n\n 'use strict';\n\nconst {Transform} = require('readable-stream');\n\nconst crc32 = require('crc-32');\n\nclass CRC32Stream extends Transform {\n constructor(options) {\n super(options);\n this.checksum = Buffer.allocUnsafe(4);\n this.checksum.writeInt32BE(0, 0);\n\n this.rawSize = 0;\n }\n\n _transform(chunk, encoding, callback) {\n if (chunk) {\n this.checksum = crc32.buf(chunk, this.checksum) >>> 0;\n this.rawSize += chunk.length;\n }\n\n callback(null, chunk);\n }\n\n digest(encoding) {\n const checksum = Buffer.allocUnsafe(4);\n checksum.writeUInt32BE(this.checksum >>> 0, 0);\n return encoding ? checksum.toString(encoding) : checksum;\n }\n\n hex() {\n return this.digest('hex').toUpperCase();\n }\n\n size() {\n return this.rawSize;\n }\n}\n\nmodule.exports = CRC32Stream;\n","/**\n * node-crc32-stream\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT\n */\n\n'use strict';\n\nconst {DeflateRaw} = require('zlib');\n\nconst crc32 = require('crc-32');\n\nclass DeflateCRC32Stream extends DeflateRaw {\n constructor(options) {\n super(options);\n\n this.checksum = Buffer.allocUnsafe(4);\n this.checksum.writeInt32BE(0, 0);\n\n this.rawSize = 0;\n this.compressedSize = 0;\n }\n\n push(chunk, encoding) {\n if (chunk) {\n this.compressedSize += chunk.length;\n }\n\n return super.push(chunk, encoding);\n }\n\n _transform(chunk, encoding, callback) {\n if (chunk) {\n this.checksum = crc32.buf(chunk, this.checksum) >>> 0;\n this.rawSize += chunk.length;\n }\n\n super._transform(chunk, encoding, callback)\n }\n\n digest(encoding) {\n const checksum = Buffer.allocUnsafe(4);\n checksum.writeUInt32BE(this.checksum >>> 0, 0);\n return encoding ? checksum.toString(encoding) : checksum;\n }\n\n hex() {\n return this.digest('hex').toUpperCase();\n }\n\n size(compressed = false) {\n if (compressed) {\n return this.compressedSize;\n } else {\n return this.rawSize;\n }\n }\n}\n\nmodule.exports = DeflateCRC32Stream;\n","/**\n * node-crc32-stream\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT\n */\n\n'use strict';\n\nmodule.exports = {\n CRC32Stream: require('./crc32-stream'),\n DeflateCRC32Stream: require('./deflate-crc32-stream')\n}\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nvar inherits = require('util').inherits;\nvar crc32 = require('crc-32');\nvar {CRC32Stream} = require('crc32-stream');\nvar {DeflateCRC32Stream} = require('crc32-stream');\n\nvar ArchiveOutputStream = require('../archive-output-stream');\nvar ZipArchiveEntry = require('./zip-archive-entry');\nvar GeneralPurposeBit = require('./general-purpose-bit');\n\nvar constants = require('./constants');\nvar util = require('../../util');\nvar zipUtil = require('./util');\n\nvar ZipArchiveOutputStream = module.exports = function(options) {\n if (!(this instanceof ZipArchiveOutputStream)) {\n return new ZipArchiveOutputStream(options);\n }\n\n options = this.options = this._defaults(options);\n\n ArchiveOutputStream.call(this, options);\n\n this._entry = null;\n this._entries = [];\n this._archive = {\n centralLength: 0,\n centralOffset: 0,\n comment: '',\n finish: false,\n finished: false,\n processing: false,\n forceZip64: options.forceZip64,\n forceLocalTime: options.forceLocalTime\n };\n};\n\ninherits(ZipArchiveOutputStream, ArchiveOutputStream);\n\nZipArchiveOutputStream.prototype._afterAppend = function(ae) {\n this._entries.push(ae);\n\n if (ae.getGeneralPurposeBit().usesDataDescriptor()) {\n this._writeDataDescriptor(ae);\n }\n\n this._archive.processing = false;\n this._entry = null;\n\n if (this._archive.finish && !this._archive.finished) {\n this._finish();\n }\n};\n\nZipArchiveOutputStream.prototype._appendBuffer = function(ae, source, callback) {\n if (source.length === 0) {\n ae.setMethod(constants.METHOD_STORED);\n }\n\n var method = ae.getMethod();\n\n if (method === constants.METHOD_STORED) {\n ae.setSize(source.length);\n ae.setCompressedSize(source.length);\n ae.setCrc(crc32.buf(source) >>> 0);\n }\n\n this._writeLocalFileHeader(ae);\n\n if (method === constants.METHOD_STORED) {\n this.write(source);\n this._afterAppend(ae);\n callback(null, ae);\n return;\n } else if (method === constants.METHOD_DEFLATED) {\n this._smartStream(ae, callback).end(source);\n return;\n } else {\n callback(new Error('compression method ' + method + ' not implemented'));\n return;\n }\n};\n\nZipArchiveOutputStream.prototype._appendStream = function(ae, source, callback) {\n ae.getGeneralPurposeBit().useDataDescriptor(true);\n ae.setVersionNeededToExtract(constants.MIN_VERSION_DATA_DESCRIPTOR);\n\n this._writeLocalFileHeader(ae);\n\n var smart = this._smartStream(ae, callback);\n source.once('error', function(err) {\n smart.emit('error', err);\n smart.end();\n })\n source.pipe(smart);\n};\n\nZipArchiveOutputStream.prototype._defaults = function(o) {\n if (typeof o !== 'object') {\n o = {};\n }\n\n if (typeof o.zlib !== 'object') {\n o.zlib = {};\n }\n\n if (typeof o.zlib.level !== 'number') {\n o.zlib.level = constants.ZLIB_BEST_SPEED;\n }\n\n o.forceZip64 = !!o.forceZip64;\n o.forceLocalTime = !!o.forceLocalTime;\n\n return o;\n};\n\nZipArchiveOutputStream.prototype._finish = function() {\n this._archive.centralOffset = this.offset;\n\n this._entries.forEach(function(ae) {\n this._writeCentralFileHeader(ae);\n }.bind(this));\n\n this._archive.centralLength = this.offset - this._archive.centralOffset;\n\n if (this.isZip64()) {\n this._writeCentralDirectoryZip64();\n }\n\n this._writeCentralDirectoryEnd();\n\n this._archive.processing = false;\n this._archive.finish = true;\n this._archive.finished = true;\n this.end();\n};\n\nZipArchiveOutputStream.prototype._normalizeEntry = function(ae) {\n if (ae.getMethod() === -1) {\n ae.setMethod(constants.METHOD_DEFLATED);\n }\n\n if (ae.getMethod() === constants.METHOD_DEFLATED) {\n ae.getGeneralPurposeBit().useDataDescriptor(true);\n ae.setVersionNeededToExtract(constants.MIN_VERSION_DATA_DESCRIPTOR);\n }\n\n if (ae.getTime() === -1) {\n ae.setTime(new Date(), this._archive.forceLocalTime);\n }\n\n ae._offsets = {\n file: 0,\n data: 0,\n contents: 0,\n };\n};\n\nZipArchiveOutputStream.prototype._smartStream = function(ae, callback) {\n var deflate = ae.getMethod() === constants.METHOD_DEFLATED;\n var process = deflate ? new DeflateCRC32Stream(this.options.zlib) : new CRC32Stream();\n var error = null;\n\n function handleStuff() {\n var digest = process.digest().readUInt32BE(0);\n ae.setCrc(digest);\n ae.setSize(process.size());\n ae.setCompressedSize(process.size(true));\n this._afterAppend(ae);\n callback(error, ae);\n }\n\n process.once('end', handleStuff.bind(this));\n process.once('error', function(err) {\n error = err;\n });\n\n process.pipe(this, { end: false });\n\n return process;\n};\n\nZipArchiveOutputStream.prototype._writeCentralDirectoryEnd = function() {\n var records = this._entries.length;\n var size = this._archive.centralLength;\n var offset = this._archive.centralOffset;\n\n if (this.isZip64()) {\n records = constants.ZIP64_MAGIC_SHORT;\n size = constants.ZIP64_MAGIC;\n offset = constants.ZIP64_MAGIC;\n }\n\n // signature\n this.write(zipUtil.getLongBytes(constants.SIG_EOCD));\n\n // disk numbers\n this.write(constants.SHORT_ZERO);\n this.write(constants.SHORT_ZERO);\n\n // number of entries\n this.write(zipUtil.getShortBytes(records));\n this.write(zipUtil.getShortBytes(records));\n\n // length and location of CD\n this.write(zipUtil.getLongBytes(size));\n this.write(zipUtil.getLongBytes(offset));\n\n // archive comment\n var comment = this.getComment();\n var commentLength = Buffer.byteLength(comment);\n this.write(zipUtil.getShortBytes(commentLength));\n this.write(comment);\n};\n\nZipArchiveOutputStream.prototype._writeCentralDirectoryZip64 = function() {\n // signature\n this.write(zipUtil.getLongBytes(constants.SIG_ZIP64_EOCD));\n\n // size of the ZIP64 EOCD record\n this.write(zipUtil.getEightBytes(44));\n\n // version made by\n this.write(zipUtil.getShortBytes(constants.MIN_VERSION_ZIP64));\n\n // version to extract\n this.write(zipUtil.getShortBytes(constants.MIN_VERSION_ZIP64));\n\n // disk numbers\n this.write(constants.LONG_ZERO);\n this.write(constants.LONG_ZERO);\n\n // number of entries\n this.write(zipUtil.getEightBytes(this._entries.length));\n this.write(zipUtil.getEightBytes(this._entries.length));\n\n // length and location of CD\n this.write(zipUtil.getEightBytes(this._archive.centralLength));\n this.write(zipUtil.getEightBytes(this._archive.centralOffset));\n\n // extensible data sector\n // not implemented at this time\n\n // end of central directory locator\n this.write(zipUtil.getLongBytes(constants.SIG_ZIP64_EOCD_LOC));\n\n // disk number holding the ZIP64 EOCD record\n this.write(constants.LONG_ZERO);\n\n // relative offset of the ZIP64 EOCD record\n this.write(zipUtil.getEightBytes(this._archive.centralOffset + this._archive.centralLength));\n\n // total number of disks\n this.write(zipUtil.getLongBytes(1));\n};\n\nZipArchiveOutputStream.prototype._writeCentralFileHeader = function(ae) {\n var gpb = ae.getGeneralPurposeBit();\n var method = ae.getMethod();\n var fileOffset = ae._offsets.file;\n\n var size = ae.getSize();\n var compressedSize = ae.getCompressedSize();\n\n if (ae.isZip64() || fileOffset > constants.ZIP64_MAGIC) {\n size = constants.ZIP64_MAGIC;\n compressedSize = constants.ZIP64_MAGIC;\n fileOffset = constants.ZIP64_MAGIC;\n\n ae.setVersionNeededToExtract(constants.MIN_VERSION_ZIP64);\n\n var extraBuf = Buffer.concat([\n zipUtil.getShortBytes(constants.ZIP64_EXTRA_ID),\n zipUtil.getShortBytes(24),\n zipUtil.getEightBytes(ae.getSize()),\n zipUtil.getEightBytes(ae.getCompressedSize()),\n zipUtil.getEightBytes(ae._offsets.file)\n ], 28);\n\n ae.setExtra(extraBuf);\n }\n\n // signature\n this.write(zipUtil.getLongBytes(constants.SIG_CFH));\n\n // version made by\n this.write(zipUtil.getShortBytes((ae.getPlatform() << 8) | constants.VERSION_MADEBY));\n\n // version to extract and general bit flag\n this.write(zipUtil.getShortBytes(ae.getVersionNeededToExtract()));\n this.write(gpb.encode());\n\n // compression method\n this.write(zipUtil.getShortBytes(method));\n\n // datetime\n this.write(zipUtil.getLongBytes(ae.getTimeDos()));\n\n // crc32 checksum\n this.write(zipUtil.getLongBytes(ae.getCrc()));\n\n // sizes\n this.write(zipUtil.getLongBytes(compressedSize));\n this.write(zipUtil.getLongBytes(size));\n\n var name = ae.getName();\n var comment = ae.getComment();\n var extra = ae.getCentralDirectoryExtra();\n\n if (gpb.usesUTF8ForNames()) {\n name = Buffer.from(name);\n comment = Buffer.from(comment);\n }\n\n // name length\n this.write(zipUtil.getShortBytes(name.length));\n\n // extra length\n this.write(zipUtil.getShortBytes(extra.length));\n\n // comments length\n this.write(zipUtil.getShortBytes(comment.length));\n\n // disk number start\n this.write(constants.SHORT_ZERO);\n\n // internal attributes\n this.write(zipUtil.getShortBytes(ae.getInternalAttributes()));\n\n // external attributes\n this.write(zipUtil.getLongBytes(ae.getExternalAttributes()));\n\n // relative offset of LFH\n this.write(zipUtil.getLongBytes(fileOffset));\n\n // name\n this.write(name);\n\n // extra\n this.write(extra);\n\n // comment\n this.write(comment);\n};\n\nZipArchiveOutputStream.prototype._writeDataDescriptor = function(ae) {\n // signature\n this.write(zipUtil.getLongBytes(constants.SIG_DD));\n\n // crc32 checksum\n this.write(zipUtil.getLongBytes(ae.getCrc()));\n\n // sizes\n if (ae.isZip64()) {\n this.write(zipUtil.getEightBytes(ae.getCompressedSize()));\n this.write(zipUtil.getEightBytes(ae.getSize()));\n } else {\n this.write(zipUtil.getLongBytes(ae.getCompressedSize()));\n this.write(zipUtil.getLongBytes(ae.getSize()));\n }\n};\n\nZipArchiveOutputStream.prototype._writeLocalFileHeader = function(ae) {\n var gpb = ae.getGeneralPurposeBit();\n var method = ae.getMethod();\n var name = ae.getName();\n var extra = ae.getLocalFileDataExtra();\n\n if (ae.isZip64()) {\n gpb.useDataDescriptor(true);\n ae.setVersionNeededToExtract(constants.MIN_VERSION_ZIP64);\n }\n\n if (gpb.usesUTF8ForNames()) {\n name = Buffer.from(name);\n }\n\n ae._offsets.file = this.offset;\n\n // signature\n this.write(zipUtil.getLongBytes(constants.SIG_LFH));\n\n // version to extract and general bit flag\n this.write(zipUtil.getShortBytes(ae.getVersionNeededToExtract()));\n this.write(gpb.encode());\n\n // compression method\n this.write(zipUtil.getShortBytes(method));\n\n // datetime\n this.write(zipUtil.getLongBytes(ae.getTimeDos()));\n\n ae._offsets.data = this.offset;\n\n // crc32 checksum and sizes\n if (gpb.usesDataDescriptor()) {\n this.write(constants.LONG_ZERO);\n this.write(constants.LONG_ZERO);\n this.write(constants.LONG_ZERO);\n } else {\n this.write(zipUtil.getLongBytes(ae.getCrc()));\n this.write(zipUtil.getLongBytes(ae.getCompressedSize()));\n this.write(zipUtil.getLongBytes(ae.getSize()));\n }\n\n // name length\n this.write(zipUtil.getShortBytes(name.length));\n\n // extra length\n this.write(zipUtil.getShortBytes(extra.length));\n\n // name\n this.write(name);\n\n // extra\n this.write(extra);\n\n ae._offsets.contents = this.offset;\n};\n\nZipArchiveOutputStream.prototype.getComment = function(comment) {\n return this._archive.comment !== null ? this._archive.comment : '';\n};\n\nZipArchiveOutputStream.prototype.isZip64 = function() {\n return this._archive.forceZip64 || this._entries.length > constants.ZIP64_MAGIC_SHORT || this._archive.centralLength > constants.ZIP64_MAGIC || this._archive.centralOffset > constants.ZIP64_MAGIC;\n};\n\nZipArchiveOutputStream.prototype.setComment = function(comment) {\n this._archive.comment = comment;\n};\n","/**\n * node-compress-commons\n *\n * Copyright (c) 2014 Chris Talkington, contributors.\n * Licensed under the MIT license.\n * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT\n */\nmodule.exports = {\n ArchiveEntry: require('./archivers/archive-entry'),\n ZipArchiveEntry: require('./archivers/zip/zip-archive-entry'),\n ArchiveOutputStream: require('./archivers/archive-output-stream'),\n ZipArchiveOutputStream: require('./archivers/zip/zip-archive-output-stream')\n};","/**\n * ZipStream\n *\n * @ignore\n * @license [MIT]{@link https://github.com/archiverjs/node-zip-stream/blob/master/LICENSE}\n * @copyright (c) 2014 Chris Talkington, contributors.\n */\nvar inherits = require('util').inherits;\n\nvar ZipArchiveOutputStream = require('compress-commons').ZipArchiveOutputStream;\nvar ZipArchiveEntry = require('compress-commons').ZipArchiveEntry;\n\nvar util = require('archiver-utils');\n\n/**\n * @constructor\n * @extends external:ZipArchiveOutputStream\n * @param {Object} [options]\n * @param {String} [options.comment] Sets the zip archive comment.\n * @param {Boolean} [options.forceLocalTime=false] Forces the archive to contain local file times instead of UTC.\n * @param {Boolean} [options.forceZip64=false] Forces the archive to contain ZIP64 headers.\n * @param {Boolean} [options.store=false] Sets the compression method to STORE.\n * @param {Object} [options.zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}\n * to control compression.\n */\nvar ZipStream = module.exports = function(options) {\n if (!(this instanceof ZipStream)) {\n return new ZipStream(options);\n }\n\n options = this.options = options || {};\n options.zlib = options.zlib || {};\n\n ZipArchiveOutputStream.call(this, options);\n\n if (typeof options.level === 'number' && options.level >= 0) {\n options.zlib.level = options.level;\n delete options.level;\n }\n\n if (!options.forceZip64 && typeof options.zlib.level === 'number' && options.zlib.level === 0) {\n options.store = true;\n }\n\n options.namePrependSlash = options.namePrependSlash || false;\n\n if (options.comment && options.comment.length > 0) {\n this.setComment(options.comment);\n }\n};\n\ninherits(ZipStream, ZipArchiveOutputStream);\n\n/**\n * Normalizes entry data with fallbacks for key properties.\n *\n * @private\n * @param {Object} data\n * @return {Object}\n */\nZipStream.prototype._normalizeFileData = function(data) {\n data = util.defaults(data, {\n type: 'file',\n name: null,\n namePrependSlash: this.options.namePrependSlash,\n linkname: null,\n date: null,\n mode: null,\n store: this.options.store,\n comment: ''\n });\n\n var isDir = data.type === 'directory';\n var isSymlink = data.type === 'symlink';\n\n if (data.name) {\n data.name = util.sanitizePath(data.name);\n\n if (!isSymlink && data.name.slice(-1) === '/') {\n isDir = true;\n data.type = 'directory';\n } else if (isDir) {\n data.name += '/';\n }\n }\n\n if (isDir || isSymlink) {\n data.store = true;\n }\n\n data.date = util.dateify(data.date);\n\n return data;\n};\n\n/**\n * Appends an entry given an input source (text string, buffer, or stream).\n *\n * @param {(Buffer|Stream|String)} source The input source.\n * @param {Object} data\n * @param {String} data.name Sets the entry name including internal path.\n * @param {String} [data.comment] Sets the entry comment.\n * @param {(String|Date)} [data.date=NOW()] Sets the entry date.\n * @param {Number} [data.mode=D:0755/F:0644] Sets the entry permissions.\n * @param {Boolean} [data.store=options.store] Sets the compression method to STORE.\n * @param {String} [data.type=file] Sets the entry type. Defaults to `directory`\n * if name ends with trailing slash.\n * @param {Function} callback\n * @return this\n */\nZipStream.prototype.entry = function(source, data, callback) {\n if (typeof callback !== 'function') {\n callback = this._emitErrorCallback.bind(this);\n }\n\n data = this._normalizeFileData(data);\n\n if (data.type !== 'file' && data.type !== 'directory' && data.type !== 'symlink') {\n callback(new Error(data.type + ' entries not currently supported'));\n return;\n }\n\n if (typeof data.name !== 'string' || data.name.length === 0) {\n callback(new Error('entry name must be a non-empty string value'));\n return;\n }\n\n if (data.type === 'symlink' && typeof data.linkname !== 'string') {\n callback(new Error('entry linkname must be a non-empty string value when type equals symlink'));\n return;\n }\n\n var entry = new ZipArchiveEntry(data.name);\n entry.setTime(data.date, this.options.forceLocalTime);\n\n if (data.namePrependSlash) {\n entry.setName(data.name, true);\n }\n\n if (data.store) {\n entry.setMethod(0);\n }\n\n if (data.comment.length > 0) {\n entry.setComment(data.comment);\n }\n\n if (data.type === 'symlink' && typeof data.mode !== 'number') {\n data.mode = 40960; // 0120000\n }\n\n if (typeof data.mode === 'number') {\n if (data.type === 'symlink') {\n data.mode |= 40960;\n }\n\n entry.setUnixMode(data.mode);\n }\n\n if (data.type === 'symlink' && typeof data.linkname === 'string') {\n source = Buffer.from(data.linkname);\n }\n\n return ZipArchiveOutputStream.prototype.entry.call(this, entry, source, callback);\n};\n\n/**\n * Finalizes the instance and prevents further appending to the archive\n * structure (queue will continue til drained).\n *\n * @return void\n */\nZipStream.prototype.finalize = function() {\n this.finish();\n};\n\n/**\n * Returns the current number of bytes written to this stream.\n * @function ZipStream#getBytesWritten\n * @returns {Number}\n */\n\n/**\n * Compress Commons ZipArchiveOutputStream\n * @external ZipArchiveOutputStream\n * @see {@link https://github.com/archiverjs/node-compress-commons}\n */\n","/**\n * ZIP Format Plugin\n *\n * @module plugins/zip\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar engine = require('zip-stream');\nvar util = require('archiver-utils');\n\n/**\n * @constructor\n * @param {ZipOptions} [options]\n * @param {String} [options.comment] Sets the zip archive comment.\n * @param {Boolean} [options.forceLocalTime=false] Forces the archive to contain local file times instead of UTC.\n * @param {Boolean} [options.forceZip64=false] Forces the archive to contain ZIP64 headers.\n * @param {Boolean} [options.namePrependSlash=false] Prepends a forward slash to archive file paths.\n * @param {Boolean} [options.store=false] Sets the compression method to STORE.\n * @param {Object} [options.zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}\n */\nvar Zip = function(options) {\n if (!(this instanceof Zip)) {\n return new Zip(options);\n }\n\n options = this.options = util.defaults(options, {\n comment: '',\n forceUTC: false,\n namePrependSlash: false,\n store: false\n });\n\n this.supports = {\n directory: true,\n symlink: true\n };\n\n this.engine = new engine(options);\n};\n\n/**\n * @param {(Buffer|Stream)} source\n * @param {ZipEntryData} data\n * @param {String} data.name Sets the entry name including internal path.\n * @param {(String|Date)} [data.date=NOW()] Sets the entry date.\n * @param {Number} [data.mode=D:0755/F:0644] Sets the entry permissions.\n * @param {String} [data.prefix] Sets a path prefix for the entry name. Useful\n * when working with methods like `directory` or `glob`.\n * @param {fs.Stats} [data.stats] Sets the fs stat data for this entry allowing\n * for reduction of fs stat calls when stat data is already known.\n * @param {Boolean} [data.store=ZipOptions.store] Sets the compression method to STORE.\n * @param {Function} callback\n * @return void\n */\nZip.prototype.append = function(source, data, callback) {\n this.engine.entry(source, data, callback);\n};\n\n/**\n * @return void\n */\nZip.prototype.finalize = function() {\n this.engine.finalize();\n};\n\n/**\n * @return this.engine\n */\nZip.prototype.on = function() {\n return this.engine.on.apply(this.engine, arguments);\n};\n\n/**\n * @return this.engine\n */\nZip.prototype.pipe = function() {\n return this.engine.pipe.apply(this.engine, arguments);\n};\n\n/**\n * @return this.engine\n */\nZip.prototype.unpipe = function() {\n return this.engine.unpipe.apply(this.engine, arguments);\n};\n\nmodule.exports = Zip;\n\n/**\n * @typedef {Object} ZipOptions\n * @global\n * @property {String} [comment] Sets the zip archive comment.\n * @property {Boolean} [forceLocalTime=false] Forces the archive to contain local file times instead of UTC.\n * @property {Boolean} [forceZip64=false] Forces the archive to contain ZIP64 headers.\n * @prpperty {Boolean} [namePrependSlash=false] Prepends a forward slash to archive file paths.\n * @property {Boolean} [store=false] Sets the compression method to STORE.\n * @property {Object} [zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}\n * to control compression.\n * @property {*} [*] See [zip-stream]{@link https://archiverjs.com/zip-stream/ZipStream.html} documentation for current list of properties.\n */\n\n/**\n * @typedef {Object} ZipEntryData\n * @global\n * @property {String} name Sets the entry name including internal path.\n * @property {(String|Date)} [date=NOW()] Sets the entry date.\n * @property {Number} [mode=D:0755/F:0644] Sets the entry permissions.\n * @property {Boolean} [namePrependSlash=ZipOptions.namePrependSlash] Prepends a forward slash to archive file paths.\n * @property {String} [prefix] Sets a path prefix for the entry name. Useful\n * when working with methods like `directory` or `glob`.\n * @property {fs.Stats} [stats] Sets the fs stat data for this entry allowing\n * for reduction of fs stat calls when stat data is already known.\n * @property {Boolean} [store=ZipOptions.store] Sets the compression method to STORE.\n */\n\n/**\n * ZipStream Module\n * @external ZipStream\n * @see {@link https://www.archiverjs.com/zip-stream/ZipStream.html}\n */\n","module.exports = typeof queueMicrotask === 'function' ? queueMicrotask : (fn) => Promise.resolve().then(fn)\n","module.exports = (typeof process !== 'undefined' && typeof process.nextTick === 'function')\n ? process.nextTick.bind(process)\n : require('./queue-microtask')\n","module.exports = class FixedFIFO {\n constructor (hwm) {\n if (!(hwm > 0) || ((hwm - 1) & hwm) !== 0) throw new Error('Max size for a FixedFIFO should be a power of two')\n this.buffer = new Array(hwm)\n this.mask = hwm - 1\n this.top = 0\n this.btm = 0\n this.next = null\n }\n\n clear () {\n this.top = this.btm = 0\n this.next = null\n this.buffer.fill(undefined)\n }\n\n push (data) {\n if (this.buffer[this.top] !== undefined) return false\n this.buffer[this.top] = data\n this.top = (this.top + 1) & this.mask\n return true\n }\n\n shift () {\n const last = this.buffer[this.btm]\n if (last === undefined) return undefined\n this.buffer[this.btm] = undefined\n this.btm = (this.btm + 1) & this.mask\n return last\n }\n\n peek () {\n return this.buffer[this.btm]\n }\n\n isEmpty () {\n return this.buffer[this.btm] === undefined\n }\n}\n","const FixedFIFO = require('./fixed-size')\n\nmodule.exports = class FastFIFO {\n constructor (hwm) {\n this.hwm = hwm || 16\n this.head = new FixedFIFO(this.hwm)\n this.tail = this.head\n this.length = 0\n }\n\n clear () {\n this.head = this.tail\n this.head.clear()\n this.length = 0\n }\n\n push (val) {\n this.length++\n if (!this.head.push(val)) {\n const prev = this.head\n this.head = prev.next = new FixedFIFO(2 * this.head.buffer.length)\n this.head.push(val)\n }\n }\n\n shift () {\n if (this.length !== 0) this.length--\n const val = this.tail.shift()\n if (val === undefined && this.tail.next) {\n const next = this.tail.next\n this.tail.next = null\n this.tail = next\n return this.tail.shift()\n }\n\n return val\n }\n\n peek () {\n const val = this.tail.peek()\n if (val === undefined && this.tail.next) return this.tail.next.peek()\n return val\n }\n\n isEmpty () {\n return this.length === 0\n }\n}\n","function isBuffer (value) {\n return Buffer.isBuffer(value) || value instanceof Uint8Array\n}\n\nfunction isEncoding (encoding) {\n return Buffer.isEncoding(encoding)\n}\n\nfunction alloc (size, fill, encoding) {\n return Buffer.alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n return Buffer.allocUnsafe(size)\n}\n\nfunction allocUnsafeSlow (size) {\n return Buffer.allocUnsafeSlow(size)\n}\n\nfunction byteLength (string, encoding) {\n return Buffer.byteLength(string, encoding)\n}\n\nfunction compare (a, b) {\n return Buffer.compare(a, b)\n}\n\nfunction concat (buffers, totalLength) {\n return Buffer.concat(buffers, totalLength)\n}\n\nfunction copy (source, target, targetStart, start, end) {\n return toBuffer(source).copy(target, targetStart, start, end)\n}\n\nfunction equals (a, b) {\n return toBuffer(a).equals(b)\n}\n\nfunction fill (buffer, value, offset, end, encoding) {\n return toBuffer(buffer).fill(value, offset, end, encoding)\n}\n\nfunction from (value, encodingOrOffset, length) {\n return Buffer.from(value, encodingOrOffset, length)\n}\n\nfunction includes (buffer, value, byteOffset, encoding) {\n return toBuffer(buffer).includes(value, byteOffset, encoding)\n}\n\nfunction indexOf (buffer, value, byfeOffset, encoding) {\n return toBuffer(buffer).indexOf(value, byfeOffset, encoding)\n}\n\nfunction lastIndexOf (buffer, value, byteOffset, encoding) {\n return toBuffer(buffer).lastIndexOf(value, byteOffset, encoding)\n}\n\nfunction swap16 (buffer) {\n return toBuffer(buffer).swap16()\n}\n\nfunction swap32 (buffer) {\n return toBuffer(buffer).swap32()\n}\n\nfunction swap64 (buffer) {\n return toBuffer(buffer).swap64()\n}\n\nfunction toBuffer (buffer) {\n if (Buffer.isBuffer(buffer)) return buffer\n return Buffer.from(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n}\n\nfunction toString (buffer, encoding, start, end) {\n return toBuffer(buffer).toString(encoding, start, end)\n}\n\nfunction write (buffer, string, offset, length, encoding) {\n return toBuffer(buffer).write(string, offset, length, encoding)\n}\n\nfunction writeDoubleLE (buffer, value, offset) {\n return toBuffer(buffer).writeDoubleLE(value, offset)\n}\n\nfunction writeFloatLE (buffer, value, offset) {\n return toBuffer(buffer).writeFloatLE(value, offset)\n}\n\nfunction writeUInt32LE (buffer, value, offset) {\n return toBuffer(buffer).writeUInt32LE(value, offset)\n}\n\nfunction writeInt32LE (buffer, value, offset) {\n return toBuffer(buffer).writeInt32LE(value, offset)\n}\n\nfunction readDoubleLE (buffer, offset) {\n return toBuffer(buffer).readDoubleLE(offset)\n}\n\nfunction readFloatLE (buffer, offset) {\n return toBuffer(buffer).readFloatLE(offset)\n}\n\nfunction readUInt32LE (buffer, offset) {\n return toBuffer(buffer).readUInt32LE(offset)\n}\n\nfunction readInt32LE (buffer, offset) {\n return toBuffer(buffer).readInt32LE(offset)\n}\n\nmodule.exports = {\n isBuffer,\n isEncoding,\n alloc,\n allocUnsafe,\n allocUnsafeSlow,\n byteLength,\n compare,\n concat,\n copy,\n equals,\n fill,\n from,\n includes,\n indexOf,\n lastIndexOf,\n swap16,\n swap32,\n swap64,\n toBuffer,\n toString,\n write,\n writeDoubleLE,\n writeFloatLE,\n writeUInt32LE,\n writeInt32LE,\n readDoubleLE,\n readFloatLE,\n readUInt32LE,\n readInt32LE\n}\n","const b4a = require('b4a')\n\nmodule.exports = class PassThroughDecoder {\n constructor (encoding) {\n this.encoding = encoding\n }\n\n decode (tail) {\n return b4a.toString(tail, this.encoding)\n }\n\n flush () {\n return ''\n }\n}\n","const b4a = require('b4a')\n\n/**\n * https://encoding.spec.whatwg.org/#utf-8-decoder\n */\nmodule.exports = class UTF8Decoder {\n constructor () {\n this.codePoint = 0\n this.bytesSeen = 0\n this.bytesNeeded = 0\n this.lowerBoundary = 0x80\n this.upperBoundary = 0xbf\n }\n\n decode (data) {\n // If we have a fast path, just sniff if the last part is a boundary\n if (this.bytesNeeded === 0) {\n let isBoundary = true\n\n for (let i = Math.max(0, data.byteLength - 4), n = data.byteLength; i < n && isBoundary; i++) {\n isBoundary = data[i] <= 0x7f\n }\n\n if (isBoundary) return b4a.toString(data, 'utf8')\n }\n\n let result = ''\n\n for (let i = 0, n = data.byteLength; i < n; i++) {\n const byte = data[i]\n\n if (this.bytesNeeded === 0) {\n if (byte <= 0x7f) {\n result += String.fromCharCode(byte)\n } else if (byte >= 0xc2 && byte <= 0xdf) {\n this.bytesNeeded = 1\n this.codePoint = byte & 0x1f\n } else if (byte >= 0xe0 && byte <= 0xef) {\n if (byte === 0xe0) this.lowerBoundary = 0xa0\n else if (byte === 0xed) this.upperBoundary = 0x9f\n this.bytesNeeded = 2\n this.codePoint = byte & 0xf\n } else if (byte >= 0xf0 && byte <= 0xf4) {\n if (byte === 0xf0) this.lowerBoundary = 0x90\n if (byte === 0xf4) this.upperBoundary = 0x8f\n this.bytesNeeded = 3\n this.codePoint = byte & 0x7\n } else {\n result += '\\ufffd'\n }\n\n continue\n }\n\n if (byte < this.lowerBoundary || byte > this.upperBoundary) {\n this.codePoint = 0\n this.bytesNeeded = 0\n this.bytesSeen = 0\n this.lowerBoundary = 0x80\n this.upperBoundary = 0xbf\n\n result += '\\ufffd'\n\n continue\n }\n\n this.lowerBoundary = 0x80\n this.upperBoundary = 0xbf\n\n this.codePoint = (this.codePoint << 6) | (byte & 0x3f)\n this.bytesSeen++\n\n if (this.bytesSeen !== this.bytesNeeded) continue\n\n result += String.fromCodePoint(this.codePoint)\n\n this.codePoint = 0\n this.bytesNeeded = 0\n this.bytesSeen = 0\n }\n\n return result\n }\n\n flush () {\n const result = this.bytesNeeded > 0 ? '\\ufffd' : ''\n\n this.codePoint = 0\n this.bytesNeeded = 0\n this.bytesSeen = 0\n this.lowerBoundary = 0x80\n this.upperBoundary = 0xbf\n\n return result\n }\n}\n","const PassThroughDecoder = require('./lib/pass-through-decoder')\nconst UTF8Decoder = require('./lib/utf8-decoder')\n\nmodule.exports = class TextDecoder {\n constructor (encoding = 'utf8') {\n this.encoding = normalizeEncoding(encoding)\n\n switch (this.encoding) {\n case 'utf8':\n this.decoder = new UTF8Decoder()\n break\n case 'utf16le':\n case 'base64':\n throw new Error('Unsupported encoding: ' + this.encoding)\n default:\n this.decoder = new PassThroughDecoder(this.encoding)\n }\n }\n\n push (data) {\n if (typeof data === 'string') return data\n return this.decoder.decode(data)\n }\n\n // For Node.js compatibility\n write (data) {\n return this.push(data)\n }\n\n end (data) {\n let result = ''\n if (data) result = this.push(data)\n result += this.decoder.flush()\n return result\n }\n}\n\nfunction normalizeEncoding (encoding) {\n encoding = encoding.toLowerCase()\n\n switch (encoding) {\n case 'utf8':\n case 'utf-8':\n return 'utf8'\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le'\n case 'latin1':\n case 'binary':\n return 'latin1'\n case 'base64':\n case 'ascii':\n case 'hex':\n return encoding\n default:\n throw new Error('Unknown encoding: ' + encoding)\n }\n};\n","const { EventEmitter } = require('events')\nconst STREAM_DESTROYED = new Error('Stream was destroyed')\nconst PREMATURE_CLOSE = new Error('Premature close')\n\nconst queueTick = require('queue-tick')\nconst FIFO = require('fast-fifo')\nconst TextDecoder = require('text-decoder')\n\n/* eslint-disable no-multi-spaces */\n\n// 29 bits used total (4 from shared, 14 from read, and 11 from write)\nconst MAX = ((1 << 29) - 1)\n\n// Shared state\nconst OPENING = 0b0001\nconst PREDESTROYING = 0b0010\nconst DESTROYING = 0b0100\nconst DESTROYED = 0b1000\n\nconst NOT_OPENING = MAX ^ OPENING\nconst NOT_PREDESTROYING = MAX ^ PREDESTROYING\n\n// Read state (4 bit offset from shared state)\nconst READ_ACTIVE = 0b00000000000001 << 4\nconst READ_UPDATING = 0b00000000000010 << 4\nconst READ_PRIMARY = 0b00000000000100 << 4\nconst READ_QUEUED = 0b00000000001000 << 4\nconst READ_RESUMED = 0b00000000010000 << 4\nconst READ_PIPE_DRAINED = 0b00000000100000 << 4\nconst READ_ENDING = 0b00000001000000 << 4\nconst READ_EMIT_DATA = 0b00000010000000 << 4\nconst READ_EMIT_READABLE = 0b00000100000000 << 4\nconst READ_EMITTED_READABLE = 0b00001000000000 << 4\nconst READ_DONE = 0b00010000000000 << 4\nconst READ_NEXT_TICK = 0b00100000000000 << 4\nconst READ_NEEDS_PUSH = 0b01000000000000 << 4\nconst READ_READ_AHEAD = 0b10000000000000 << 4\n\n// Combined read state\nconst READ_FLOWING = READ_RESUMED | READ_PIPE_DRAINED\nconst READ_ACTIVE_AND_NEEDS_PUSH = READ_ACTIVE | READ_NEEDS_PUSH\nconst READ_PRIMARY_AND_ACTIVE = READ_PRIMARY | READ_ACTIVE\nconst READ_EMIT_READABLE_AND_QUEUED = READ_EMIT_READABLE | READ_QUEUED\nconst READ_RESUMED_READ_AHEAD = READ_RESUMED | READ_READ_AHEAD\n\nconst READ_NOT_ACTIVE = MAX ^ READ_ACTIVE\nconst READ_NON_PRIMARY = MAX ^ READ_PRIMARY\nconst READ_NON_PRIMARY_AND_PUSHED = MAX ^ (READ_PRIMARY | READ_NEEDS_PUSH)\nconst READ_PUSHED = MAX ^ READ_NEEDS_PUSH\nconst READ_PAUSED = MAX ^ READ_RESUMED\nconst READ_NOT_QUEUED = MAX ^ (READ_QUEUED | READ_EMITTED_READABLE)\nconst READ_NOT_ENDING = MAX ^ READ_ENDING\nconst READ_PIPE_NOT_DRAINED = MAX ^ READ_FLOWING\nconst READ_NOT_NEXT_TICK = MAX ^ READ_NEXT_TICK\nconst READ_NOT_UPDATING = MAX ^ READ_UPDATING\nconst READ_NO_READ_AHEAD = MAX ^ READ_READ_AHEAD\nconst READ_PAUSED_NO_READ_AHEAD = MAX ^ READ_RESUMED_READ_AHEAD\n\n// Write state (18 bit offset, 4 bit offset from shared state and 14 from read state)\nconst WRITE_ACTIVE = 0b00000000001 << 18\nconst WRITE_UPDATING = 0b00000000010 << 18\nconst WRITE_PRIMARY = 0b00000000100 << 18\nconst WRITE_QUEUED = 0b00000001000 << 18\nconst WRITE_UNDRAINED = 0b00000010000 << 18\nconst WRITE_DONE = 0b00000100000 << 18\nconst WRITE_EMIT_DRAIN = 0b00001000000 << 18\nconst WRITE_NEXT_TICK = 0b00010000000 << 18\nconst WRITE_WRITING = 0b00100000000 << 18\nconst WRITE_FINISHING = 0b01000000000 << 18\nconst WRITE_CORKED = 0b10000000000 << 18\n\nconst WRITE_NOT_ACTIVE = MAX ^ (WRITE_ACTIVE | WRITE_WRITING)\nconst WRITE_NON_PRIMARY = MAX ^ WRITE_PRIMARY\nconst WRITE_NOT_FINISHING = MAX ^ WRITE_FINISHING\nconst WRITE_DRAINED = MAX ^ WRITE_UNDRAINED\nconst WRITE_NOT_QUEUED = MAX ^ WRITE_QUEUED\nconst WRITE_NOT_NEXT_TICK = MAX ^ WRITE_NEXT_TICK\nconst WRITE_NOT_UPDATING = MAX ^ WRITE_UPDATING\nconst WRITE_NOT_CORKED = MAX ^ WRITE_CORKED\n\n// Combined shared state\nconst ACTIVE = READ_ACTIVE | WRITE_ACTIVE\nconst NOT_ACTIVE = MAX ^ ACTIVE\nconst DONE = READ_DONE | WRITE_DONE\nconst DESTROY_STATUS = DESTROYING | DESTROYED | PREDESTROYING\nconst OPEN_STATUS = DESTROY_STATUS | OPENING\nconst AUTO_DESTROY = DESTROY_STATUS | DONE\nconst NON_PRIMARY = WRITE_NON_PRIMARY & READ_NON_PRIMARY\nconst ACTIVE_OR_TICKING = WRITE_NEXT_TICK | READ_NEXT_TICK\nconst TICKING = ACTIVE_OR_TICKING & NOT_ACTIVE\nconst IS_OPENING = OPEN_STATUS | TICKING\n\n// Combined shared state and read state\nconst READ_PRIMARY_STATUS = OPEN_STATUS | READ_ENDING | READ_DONE\nconst READ_STATUS = OPEN_STATUS | READ_DONE | READ_QUEUED\nconst READ_ENDING_STATUS = OPEN_STATUS | READ_ENDING | READ_QUEUED\nconst READ_READABLE_STATUS = OPEN_STATUS | READ_EMIT_READABLE | READ_QUEUED | READ_EMITTED_READABLE\nconst SHOULD_NOT_READ = OPEN_STATUS | READ_ACTIVE | READ_ENDING | READ_DONE | READ_NEEDS_PUSH | READ_READ_AHEAD\nconst READ_BACKPRESSURE_STATUS = DESTROY_STATUS | READ_ENDING | READ_DONE\nconst READ_UPDATE_SYNC_STATUS = READ_UPDATING | OPEN_STATUS | READ_NEXT_TICK | READ_PRIMARY\n\n// Combined write state\nconst WRITE_PRIMARY_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_DONE\nconst WRITE_QUEUED_AND_UNDRAINED = WRITE_QUEUED | WRITE_UNDRAINED\nconst WRITE_QUEUED_AND_ACTIVE = WRITE_QUEUED | WRITE_ACTIVE\nconst WRITE_DRAIN_STATUS = WRITE_QUEUED | WRITE_UNDRAINED | OPEN_STATUS | WRITE_ACTIVE\nconst WRITE_STATUS = OPEN_STATUS | WRITE_ACTIVE | WRITE_QUEUED | WRITE_CORKED\nconst WRITE_PRIMARY_AND_ACTIVE = WRITE_PRIMARY | WRITE_ACTIVE\nconst WRITE_ACTIVE_AND_WRITING = WRITE_ACTIVE | WRITE_WRITING\nconst WRITE_FINISHING_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_QUEUED_AND_ACTIVE | WRITE_DONE\nconst WRITE_BACKPRESSURE_STATUS = WRITE_UNDRAINED | DESTROY_STATUS | WRITE_FINISHING | WRITE_DONE\nconst WRITE_UPDATE_SYNC_STATUS = WRITE_UPDATING | OPEN_STATUS | WRITE_NEXT_TICK | WRITE_PRIMARY\n\nconst asyncIterator = Symbol.asyncIterator || Symbol('asyncIterator')\n\nclass WritableState {\n constructor (stream, { highWaterMark = 16384, map = null, mapWritable, byteLength, byteLengthWritable } = {}) {\n this.stream = stream\n this.queue = new FIFO()\n this.highWaterMark = highWaterMark\n this.buffered = 0\n this.error = null\n this.pipeline = null\n this.drains = null // if we add more seldomly used helpers we might them into a subobject so its a single ptr\n this.byteLength = byteLengthWritable || byteLength || defaultByteLength\n this.map = mapWritable || map\n this.afterWrite = afterWrite.bind(this)\n this.afterUpdateNextTick = updateWriteNT.bind(this)\n }\n\n get ended () {\n return (this.stream._duplexState & WRITE_DONE) !== 0\n }\n\n push (data) {\n if (this.map !== null) data = this.map(data)\n\n this.buffered += this.byteLength(data)\n this.queue.push(data)\n\n if (this.buffered < this.highWaterMark) {\n this.stream._duplexState |= WRITE_QUEUED\n return true\n }\n\n this.stream._duplexState |= WRITE_QUEUED_AND_UNDRAINED\n return false\n }\n\n shift () {\n const data = this.queue.shift()\n\n this.buffered -= this.byteLength(data)\n if (this.buffered === 0) this.stream._duplexState &= WRITE_NOT_QUEUED\n\n return data\n }\n\n end (data) {\n if (typeof data === 'function') this.stream.once('finish', data)\n else if (data !== undefined && data !== null) this.push(data)\n this.stream._duplexState = (this.stream._duplexState | WRITE_FINISHING) & WRITE_NON_PRIMARY\n }\n\n autoBatch (data, cb) {\n const buffer = []\n const stream = this.stream\n\n buffer.push(data)\n while ((stream._duplexState & WRITE_STATUS) === WRITE_QUEUED_AND_ACTIVE) {\n buffer.push(stream._writableState.shift())\n }\n\n if ((stream._duplexState & OPEN_STATUS) !== 0) return cb(null)\n stream._writev(buffer, cb)\n }\n\n update () {\n const stream = this.stream\n\n stream._duplexState |= WRITE_UPDATING\n\n do {\n while ((stream._duplexState & WRITE_STATUS) === WRITE_QUEUED) {\n const data = this.shift()\n stream._duplexState |= WRITE_ACTIVE_AND_WRITING\n stream._write(data, this.afterWrite)\n }\n\n if ((stream._duplexState & WRITE_PRIMARY_AND_ACTIVE) === 0) this.updateNonPrimary()\n } while (this.continueUpdate() === true)\n\n stream._duplexState &= WRITE_NOT_UPDATING\n }\n\n updateNonPrimary () {\n const stream = this.stream\n\n if ((stream._duplexState & WRITE_FINISHING_STATUS) === WRITE_FINISHING) {\n stream._duplexState = (stream._duplexState | WRITE_ACTIVE) & WRITE_NOT_FINISHING\n stream._final(afterFinal.bind(this))\n return\n }\n\n if ((stream._duplexState & DESTROY_STATUS) === DESTROYING) {\n if ((stream._duplexState & ACTIVE_OR_TICKING) === 0) {\n stream._duplexState |= ACTIVE\n stream._destroy(afterDestroy.bind(this))\n }\n return\n }\n\n if ((stream._duplexState & IS_OPENING) === OPENING) {\n stream._duplexState = (stream._duplexState | ACTIVE) & NOT_OPENING\n stream._open(afterOpen.bind(this))\n }\n }\n\n continueUpdate () {\n if ((this.stream._duplexState & WRITE_NEXT_TICK) === 0) return false\n this.stream._duplexState &= WRITE_NOT_NEXT_TICK\n return true\n }\n\n updateCallback () {\n if ((this.stream._duplexState & WRITE_UPDATE_SYNC_STATUS) === WRITE_PRIMARY) this.update()\n else this.updateNextTick()\n }\n\n updateNextTick () {\n if ((this.stream._duplexState & WRITE_NEXT_TICK) !== 0) return\n this.stream._duplexState |= WRITE_NEXT_TICK\n if ((this.stream._duplexState & WRITE_UPDATING) === 0) queueTick(this.afterUpdateNextTick)\n }\n}\n\nclass ReadableState {\n constructor (stream, { highWaterMark = 16384, map = null, mapReadable, byteLength, byteLengthReadable } = {}) {\n this.stream = stream\n this.queue = new FIFO()\n this.highWaterMark = highWaterMark === 0 ? 1 : highWaterMark\n this.buffered = 0\n this.readAhead = highWaterMark > 0\n this.error = null\n this.pipeline = null\n this.byteLength = byteLengthReadable || byteLength || defaultByteLength\n this.map = mapReadable || map\n this.pipeTo = null\n this.afterRead = afterRead.bind(this)\n this.afterUpdateNextTick = updateReadNT.bind(this)\n }\n\n get ended () {\n return (this.stream._duplexState & READ_DONE) !== 0\n }\n\n pipe (pipeTo, cb) {\n if (this.pipeTo !== null) throw new Error('Can only pipe to one destination')\n if (typeof cb !== 'function') cb = null\n\n this.stream._duplexState |= READ_PIPE_DRAINED\n this.pipeTo = pipeTo\n this.pipeline = new Pipeline(this.stream, pipeTo, cb)\n\n if (cb) this.stream.on('error', noop) // We already error handle this so supress crashes\n\n if (isStreamx(pipeTo)) {\n pipeTo._writableState.pipeline = this.pipeline\n if (cb) pipeTo.on('error', noop) // We already error handle this so supress crashes\n pipeTo.on('finish', this.pipeline.finished.bind(this.pipeline)) // TODO: just call finished from pipeTo itself\n } else {\n const onerror = this.pipeline.done.bind(this.pipeline, pipeTo)\n const onclose = this.pipeline.done.bind(this.pipeline, pipeTo, null) // onclose has a weird bool arg\n pipeTo.on('error', onerror)\n pipeTo.on('close', onclose)\n pipeTo.on('finish', this.pipeline.finished.bind(this.pipeline))\n }\n\n pipeTo.on('drain', afterDrain.bind(this))\n this.stream.emit('piping', pipeTo)\n pipeTo.emit('pipe', this.stream)\n }\n\n push (data) {\n const stream = this.stream\n\n if (data === null) {\n this.highWaterMark = 0\n stream._duplexState = (stream._duplexState | READ_ENDING) & READ_NON_PRIMARY_AND_PUSHED\n return false\n }\n\n if (this.map !== null) {\n data = this.map(data)\n if (data === null) return this.buffered < this.highWaterMark\n }\n\n this.buffered += this.byteLength(data)\n this.queue.push(data)\n\n stream._duplexState = (stream._duplexState | READ_QUEUED) & READ_PUSHED\n\n return this.buffered < this.highWaterMark\n }\n\n shift () {\n const data = this.queue.shift()\n\n this.buffered -= this.byteLength(data)\n if (this.buffered === 0) this.stream._duplexState &= READ_NOT_QUEUED\n return data\n }\n\n unshift (data) {\n const pending = [this.map !== null ? this.map(data) : data]\n while (this.buffered > 0) pending.push(this.shift())\n\n for (let i = 0; i < pending.length - 1; i++) {\n const data = pending[i]\n this.buffered += this.byteLength(data)\n this.queue.push(data)\n }\n\n this.push(pending[pending.length - 1])\n }\n\n read () {\n const stream = this.stream\n\n if ((stream._duplexState & READ_STATUS) === READ_QUEUED) {\n const data = this.shift()\n if (this.pipeTo !== null && this.pipeTo.write(data) === false) stream._duplexState &= READ_PIPE_NOT_DRAINED\n if ((stream._duplexState & READ_EMIT_DATA) !== 0) stream.emit('data', data)\n return data\n }\n\n if (this.readAhead === false) {\n stream._duplexState |= READ_READ_AHEAD\n this.updateNextTick()\n }\n\n return null\n }\n\n drain () {\n const stream = this.stream\n\n while ((stream._duplexState & READ_STATUS) === READ_QUEUED && (stream._duplexState & READ_FLOWING) !== 0) {\n const data = this.shift()\n if (this.pipeTo !== null && this.pipeTo.write(data) === false) stream._duplexState &= READ_PIPE_NOT_DRAINED\n if ((stream._duplexState & READ_EMIT_DATA) !== 0) stream.emit('data', data)\n }\n }\n\n update () {\n const stream = this.stream\n\n stream._duplexState |= READ_UPDATING\n\n do {\n this.drain()\n\n while (this.buffered < this.highWaterMark && (stream._duplexState & SHOULD_NOT_READ) === READ_READ_AHEAD) {\n stream._duplexState |= READ_ACTIVE_AND_NEEDS_PUSH\n stream._read(this.afterRead)\n this.drain()\n }\n\n if ((stream._duplexState & READ_READABLE_STATUS) === READ_EMIT_READABLE_AND_QUEUED) {\n stream._duplexState |= READ_EMITTED_READABLE\n stream.emit('readable')\n }\n\n if ((stream._duplexState & READ_PRIMARY_AND_ACTIVE) === 0) this.updateNonPrimary()\n } while (this.continueUpdate() === true)\n\n stream._duplexState &= READ_NOT_UPDATING\n }\n\n updateNonPrimary () {\n const stream = this.stream\n\n if ((stream._duplexState & READ_ENDING_STATUS) === READ_ENDING) {\n stream._duplexState = (stream._duplexState | READ_DONE) & READ_NOT_ENDING\n stream.emit('end')\n if ((stream._duplexState & AUTO_DESTROY) === DONE) stream._duplexState |= DESTROYING\n if (this.pipeTo !== null) this.pipeTo.end()\n }\n\n if ((stream._duplexState & DESTROY_STATUS) === DESTROYING) {\n if ((stream._duplexState & ACTIVE_OR_TICKING) === 0) {\n stream._duplexState |= ACTIVE\n stream._destroy(afterDestroy.bind(this))\n }\n return\n }\n\n if ((stream._duplexState & IS_OPENING) === OPENING) {\n stream._duplexState = (stream._duplexState | ACTIVE) & NOT_OPENING\n stream._open(afterOpen.bind(this))\n }\n }\n\n continueUpdate () {\n if ((this.stream._duplexState & READ_NEXT_TICK) === 0) return false\n this.stream._duplexState &= READ_NOT_NEXT_TICK\n return true\n }\n\n updateCallback () {\n if ((this.stream._duplexState & READ_UPDATE_SYNC_STATUS) === READ_PRIMARY) this.update()\n else this.updateNextTick()\n }\n\n updateNextTick () {\n if ((this.stream._duplexState & READ_NEXT_TICK) !== 0) return\n this.stream._duplexState |= READ_NEXT_TICK\n if ((this.stream._duplexState & READ_UPDATING) === 0) queueTick(this.afterUpdateNextTick)\n }\n}\n\nclass TransformState {\n constructor (stream) {\n this.data = null\n this.afterTransform = afterTransform.bind(stream)\n this.afterFinal = null\n }\n}\n\nclass Pipeline {\n constructor (src, dst, cb) {\n this.from = src\n this.to = dst\n this.afterPipe = cb\n this.error = null\n this.pipeToFinished = false\n }\n\n finished () {\n this.pipeToFinished = true\n }\n\n done (stream, err) {\n if (err) this.error = err\n\n if (stream === this.to) {\n this.to = null\n\n if (this.from !== null) {\n if ((this.from._duplexState & READ_DONE) === 0 || !this.pipeToFinished) {\n this.from.destroy(this.error || new Error('Writable stream closed prematurely'))\n }\n return\n }\n }\n\n if (stream === this.from) {\n this.from = null\n\n if (this.to !== null) {\n if ((stream._duplexState & READ_DONE) === 0) {\n this.to.destroy(this.error || new Error('Readable stream closed before ending'))\n }\n return\n }\n }\n\n if (this.afterPipe !== null) this.afterPipe(this.error)\n this.to = this.from = this.afterPipe = null\n }\n}\n\nfunction afterDrain () {\n this.stream._duplexState |= READ_PIPE_DRAINED\n this.updateCallback()\n}\n\nfunction afterFinal (err) {\n const stream = this.stream\n if (err) stream.destroy(err)\n if ((stream._duplexState & DESTROY_STATUS) === 0) {\n stream._duplexState |= WRITE_DONE\n stream.emit('finish')\n }\n if ((stream._duplexState & AUTO_DESTROY) === DONE) {\n stream._duplexState |= DESTROYING\n }\n\n stream._duplexState &= WRITE_NOT_ACTIVE\n\n // no need to wait the extra tick here, so we short circuit that\n if ((stream._duplexState & WRITE_UPDATING) === 0) this.update()\n else this.updateNextTick()\n}\n\nfunction afterDestroy (err) {\n const stream = this.stream\n\n if (!err && this.error !== STREAM_DESTROYED) err = this.error\n if (err) stream.emit('error', err)\n stream._duplexState |= DESTROYED\n stream.emit('close')\n\n const rs = stream._readableState\n const ws = stream._writableState\n\n if (rs !== null && rs.pipeline !== null) rs.pipeline.done(stream, err)\n\n if (ws !== null) {\n while (ws.drains !== null && ws.drains.length > 0) ws.drains.shift().resolve(false)\n if (ws.pipeline !== null) ws.pipeline.done(stream, err)\n }\n}\n\nfunction afterWrite (err) {\n const stream = this.stream\n\n if (err) stream.destroy(err)\n stream._duplexState &= WRITE_NOT_ACTIVE\n\n if (this.drains !== null) tickDrains(this.drains)\n\n if ((stream._duplexState & WRITE_DRAIN_STATUS) === WRITE_UNDRAINED) {\n stream._duplexState &= WRITE_DRAINED\n if ((stream._duplexState & WRITE_EMIT_DRAIN) === WRITE_EMIT_DRAIN) {\n stream.emit('drain')\n }\n }\n\n this.updateCallback()\n}\n\nfunction afterRead (err) {\n if (err) this.stream.destroy(err)\n this.stream._duplexState &= READ_NOT_ACTIVE\n if (this.readAhead === false && (this.stream._duplexState & READ_RESUMED) === 0) this.stream._duplexState &= READ_NO_READ_AHEAD\n this.updateCallback()\n}\n\nfunction updateReadNT () {\n if ((this.stream._duplexState & READ_UPDATING) === 0) {\n this.stream._duplexState &= READ_NOT_NEXT_TICK\n this.update()\n }\n}\n\nfunction updateWriteNT () {\n if ((this.stream._duplexState & WRITE_UPDATING) === 0) {\n this.stream._duplexState &= WRITE_NOT_NEXT_TICK\n this.update()\n }\n}\n\nfunction tickDrains (drains) {\n for (let i = 0; i < drains.length; i++) {\n // drains.writes are monotonic, so if one is 0 its always the first one\n if (--drains[i].writes === 0) {\n drains.shift().resolve(true)\n i--\n }\n }\n}\n\nfunction afterOpen (err) {\n const stream = this.stream\n\n if (err) stream.destroy(err)\n\n if ((stream._duplexState & DESTROYING) === 0) {\n if ((stream._duplexState & READ_PRIMARY_STATUS) === 0) stream._duplexState |= READ_PRIMARY\n if ((stream._duplexState & WRITE_PRIMARY_STATUS) === 0) stream._duplexState |= WRITE_PRIMARY\n stream.emit('open')\n }\n\n stream._duplexState &= NOT_ACTIVE\n\n if (stream._writableState !== null) {\n stream._writableState.updateCallback()\n }\n\n if (stream._readableState !== null) {\n stream._readableState.updateCallback()\n }\n}\n\nfunction afterTransform (err, data) {\n if (data !== undefined && data !== null) this.push(data)\n this._writableState.afterWrite(err)\n}\n\nfunction newListener (name) {\n if (this._readableState !== null) {\n if (name === 'data') {\n this._duplexState |= (READ_EMIT_DATA | READ_RESUMED_READ_AHEAD)\n this._readableState.updateNextTick()\n }\n if (name === 'readable') {\n this._duplexState |= READ_EMIT_READABLE\n this._readableState.updateNextTick()\n }\n }\n\n if (this._writableState !== null) {\n if (name === 'drain') {\n this._duplexState |= WRITE_EMIT_DRAIN\n this._writableState.updateNextTick()\n }\n }\n}\n\nclass Stream extends EventEmitter {\n constructor (opts) {\n super()\n\n this._duplexState = 0\n this._readableState = null\n this._writableState = null\n\n if (opts) {\n if (opts.open) this._open = opts.open\n if (opts.destroy) this._destroy = opts.destroy\n if (opts.predestroy) this._predestroy = opts.predestroy\n if (opts.signal) {\n opts.signal.addEventListener('abort', abort.bind(this))\n }\n }\n\n this.on('newListener', newListener)\n }\n\n _open (cb) {\n cb(null)\n }\n\n _destroy (cb) {\n cb(null)\n }\n\n _predestroy () {\n // does nothing\n }\n\n get readable () {\n return this._readableState !== null ? true : undefined\n }\n\n get writable () {\n return this._writableState !== null ? true : undefined\n }\n\n get destroyed () {\n return (this._duplexState & DESTROYED) !== 0\n }\n\n get destroying () {\n return (this._duplexState & DESTROY_STATUS) !== 0\n }\n\n destroy (err) {\n if ((this._duplexState & DESTROY_STATUS) === 0) {\n if (!err) err = STREAM_DESTROYED\n this._duplexState = (this._duplexState | DESTROYING) & NON_PRIMARY\n\n if (this._readableState !== null) {\n this._readableState.highWaterMark = 0\n this._readableState.error = err\n }\n if (this._writableState !== null) {\n this._writableState.highWaterMark = 0\n this._writableState.error = err\n }\n\n this._duplexState |= PREDESTROYING\n this._predestroy()\n this._duplexState &= NOT_PREDESTROYING\n\n if (this._readableState !== null) this._readableState.updateNextTick()\n if (this._writableState !== null) this._writableState.updateNextTick()\n }\n }\n}\n\nclass Readable extends Stream {\n constructor (opts) {\n super(opts)\n\n this._duplexState |= OPENING | WRITE_DONE | READ_READ_AHEAD\n this._readableState = new ReadableState(this, opts)\n\n if (opts) {\n if (this._readableState.readAhead === false) this._duplexState &= READ_NO_READ_AHEAD\n if (opts.read) this._read = opts.read\n if (opts.eagerOpen) this._readableState.updateNextTick()\n if (opts.encoding) this.setEncoding(opts.encoding)\n }\n }\n\n setEncoding (encoding) {\n const dec = new TextDecoder(encoding)\n const map = this._readableState.map || echo\n this._readableState.map = mapOrSkip\n return this\n\n function mapOrSkip (data) {\n const next = dec.push(data)\n return next === '' ? null : map(next)\n }\n }\n\n _read (cb) {\n cb(null)\n }\n\n pipe (dest, cb) {\n this._readableState.updateNextTick()\n this._readableState.pipe(dest, cb)\n return dest\n }\n\n read () {\n this._readableState.updateNextTick()\n return this._readableState.read()\n }\n\n push (data) {\n this._readableState.updateNextTick()\n return this._readableState.push(data)\n }\n\n unshift (data) {\n this._readableState.updateNextTick()\n return this._readableState.unshift(data)\n }\n\n resume () {\n this._duplexState |= READ_RESUMED_READ_AHEAD\n this._readableState.updateNextTick()\n return this\n }\n\n pause () {\n this._duplexState &= (this._readableState.readAhead === false ? READ_PAUSED_NO_READ_AHEAD : READ_PAUSED)\n return this\n }\n\n static _fromAsyncIterator (ite, opts) {\n let destroy\n\n const rs = new Readable({\n ...opts,\n read (cb) {\n ite.next().then(push).then(cb.bind(null, null)).catch(cb)\n },\n predestroy () {\n destroy = ite.return()\n },\n destroy (cb) {\n if (!destroy) return cb(null)\n destroy.then(cb.bind(null, null)).catch(cb)\n }\n })\n\n return rs\n\n function push (data) {\n if (data.done) rs.push(null)\n else rs.push(data.value)\n }\n }\n\n static from (data, opts) {\n if (isReadStreamx(data)) return data\n if (data[asyncIterator]) return this._fromAsyncIterator(data[asyncIterator](), opts)\n if (!Array.isArray(data)) data = data === undefined ? [] : [data]\n\n let i = 0\n return new Readable({\n ...opts,\n read (cb) {\n this.push(i === data.length ? null : data[i++])\n cb(null)\n }\n })\n }\n\n static isBackpressured (rs) {\n return (rs._duplexState & READ_BACKPRESSURE_STATUS) !== 0 || rs._readableState.buffered >= rs._readableState.highWaterMark\n }\n\n static isPaused (rs) {\n return (rs._duplexState & READ_RESUMED) === 0\n }\n\n [asyncIterator] () {\n const stream = this\n\n let error = null\n let promiseResolve = null\n let promiseReject = null\n\n this.on('error', (err) => { error = err })\n this.on('readable', onreadable)\n this.on('close', onclose)\n\n return {\n [asyncIterator] () {\n return this\n },\n next () {\n return new Promise(function (resolve, reject) {\n promiseResolve = resolve\n promiseReject = reject\n const data = stream.read()\n if (data !== null) ondata(data)\n else if ((stream._duplexState & DESTROYED) !== 0) ondata(null)\n })\n },\n return () {\n return destroy(null)\n },\n throw (err) {\n return destroy(err)\n }\n }\n\n function onreadable () {\n if (promiseResolve !== null) ondata(stream.read())\n }\n\n function onclose () {\n if (promiseResolve !== null) ondata(null)\n }\n\n function ondata (data) {\n if (promiseReject === null) return\n if (error) promiseReject(error)\n else if (data === null && (stream._duplexState & READ_DONE) === 0) promiseReject(STREAM_DESTROYED)\n else promiseResolve({ value: data, done: data === null })\n promiseReject = promiseResolve = null\n }\n\n function destroy (err) {\n stream.destroy(err)\n return new Promise((resolve, reject) => {\n if (stream._duplexState & DESTROYED) return resolve({ value: undefined, done: true })\n stream.once('close', function () {\n if (err) reject(err)\n else resolve({ value: undefined, done: true })\n })\n })\n }\n }\n}\n\nclass Writable extends Stream {\n constructor (opts) {\n super(opts)\n\n this._duplexState |= OPENING | READ_DONE\n this._writableState = new WritableState(this, opts)\n\n if (opts) {\n if (opts.writev) this._writev = opts.writev\n if (opts.write) this._write = opts.write\n if (opts.final) this._final = opts.final\n if (opts.eagerOpen) this._writableState.updateNextTick()\n }\n }\n\n cork () {\n this._duplexState |= WRITE_CORKED\n }\n\n uncork () {\n this._duplexState &= WRITE_NOT_CORKED\n this._writableState.updateNextTick()\n }\n\n _writev (batch, cb) {\n cb(null)\n }\n\n _write (data, cb) {\n this._writableState.autoBatch(data, cb)\n }\n\n _final (cb) {\n cb(null)\n }\n\n static isBackpressured (ws) {\n return (ws._duplexState & WRITE_BACKPRESSURE_STATUS) !== 0\n }\n\n static drained (ws) {\n if (ws.destroyed) return Promise.resolve(false)\n const state = ws._writableState\n const pending = (isWritev(ws) ? Math.min(1, state.queue.length) : state.queue.length)\n const writes = pending + ((ws._duplexState & WRITE_WRITING) ? 1 : 0)\n if (writes === 0) return Promise.resolve(true)\n if (state.drains === null) state.drains = []\n return new Promise((resolve) => {\n state.drains.push({ writes, resolve })\n })\n }\n\n write (data) {\n this._writableState.updateNextTick()\n return this._writableState.push(data)\n }\n\n end (data) {\n this._writableState.updateNextTick()\n this._writableState.end(data)\n return this\n }\n}\n\nclass Duplex extends Readable { // and Writable\n constructor (opts) {\n super(opts)\n\n this._duplexState = OPENING | (this._duplexState & READ_READ_AHEAD)\n this._writableState = new WritableState(this, opts)\n\n if (opts) {\n if (opts.writev) this._writev = opts.writev\n if (opts.write) this._write = opts.write\n if (opts.final) this._final = opts.final\n }\n }\n\n cork () {\n this._duplexState |= WRITE_CORKED\n }\n\n uncork () {\n this._duplexState &= WRITE_NOT_CORKED\n this._writableState.updateNextTick()\n }\n\n _writev (batch, cb) {\n cb(null)\n }\n\n _write (data, cb) {\n this._writableState.autoBatch(data, cb)\n }\n\n _final (cb) {\n cb(null)\n }\n\n write (data) {\n this._writableState.updateNextTick()\n return this._writableState.push(data)\n }\n\n end (data) {\n this._writableState.updateNextTick()\n this._writableState.end(data)\n return this\n }\n}\n\nclass Transform extends Duplex {\n constructor (opts) {\n super(opts)\n this._transformState = new TransformState(this)\n\n if (opts) {\n if (opts.transform) this._transform = opts.transform\n if (opts.flush) this._flush = opts.flush\n }\n }\n\n _write (data, cb) {\n if (this._readableState.buffered >= this._readableState.highWaterMark) {\n this._transformState.data = data\n } else {\n this._transform(data, this._transformState.afterTransform)\n }\n }\n\n _read (cb) {\n if (this._transformState.data !== null) {\n const data = this._transformState.data\n this._transformState.data = null\n cb(null)\n this._transform(data, this._transformState.afterTransform)\n } else {\n cb(null)\n }\n }\n\n destroy (err) {\n super.destroy(err)\n if (this._transformState.data !== null) {\n this._transformState.data = null\n this._transformState.afterTransform()\n }\n }\n\n _transform (data, cb) {\n cb(null, data)\n }\n\n _flush (cb) {\n cb(null)\n }\n\n _final (cb) {\n this._transformState.afterFinal = cb\n this._flush(transformAfterFlush.bind(this))\n }\n}\n\nclass PassThrough extends Transform {}\n\nfunction transformAfterFlush (err, data) {\n const cb = this._transformState.afterFinal\n if (err) return cb(err)\n if (data !== null && data !== undefined) this.push(data)\n this.push(null)\n cb(null)\n}\n\nfunction pipelinePromise (...streams) {\n return new Promise((resolve, reject) => {\n return pipeline(...streams, (err) => {\n if (err) return reject(err)\n resolve()\n })\n })\n}\n\nfunction pipeline (stream, ...streams) {\n const all = Array.isArray(stream) ? [...stream, ...streams] : [stream, ...streams]\n const done = (all.length && typeof all[all.length - 1] === 'function') ? all.pop() : null\n\n if (all.length < 2) throw new Error('Pipeline requires at least 2 streams')\n\n let src = all[0]\n let dest = null\n let error = null\n\n for (let i = 1; i < all.length; i++) {\n dest = all[i]\n\n if (isStreamx(src)) {\n src.pipe(dest, onerror)\n } else {\n errorHandle(src, true, i > 1, onerror)\n src.pipe(dest)\n }\n\n src = dest\n }\n\n if (done) {\n let fin = false\n\n const autoDestroy = isStreamx(dest) || !!(dest._writableState && dest._writableState.autoDestroy)\n\n dest.on('error', (err) => {\n if (error === null) error = err\n })\n\n dest.on('finish', () => {\n fin = true\n if (!autoDestroy) done(error)\n })\n\n if (autoDestroy) {\n dest.on('close', () => done(error || (fin ? null : PREMATURE_CLOSE)))\n }\n }\n\n return dest\n\n function errorHandle (s, rd, wr, onerror) {\n s.on('error', onerror)\n s.on('close', onclose)\n\n function onclose () {\n if (rd && s._readableState && !s._readableState.ended) return onerror(PREMATURE_CLOSE)\n if (wr && s._writableState && !s._writableState.ended) return onerror(PREMATURE_CLOSE)\n }\n }\n\n function onerror (err) {\n if (!err || error) return\n error = err\n\n for (const s of all) {\n s.destroy(err)\n }\n }\n}\n\nfunction echo (s) {\n return s\n}\n\nfunction isStream (stream) {\n return !!stream._readableState || !!stream._writableState\n}\n\nfunction isStreamx (stream) {\n return typeof stream._duplexState === 'number' && isStream(stream)\n}\n\nfunction getStreamError (stream, opts = {}) {\n const err = (stream._readableState && stream._readableState.error) || (stream._writableState && stream._writableState.error)\n\n // avoid implicit errors by default\n return (!opts.all && err === STREAM_DESTROYED) ? null : err\n}\n\nfunction isReadStreamx (stream) {\n return isStreamx(stream) && stream.readable\n}\n\nfunction isTypedArray (data) {\n return typeof data === 'object' && data !== null && typeof data.byteLength === 'number'\n}\n\nfunction defaultByteLength (data) {\n return isTypedArray(data) ? data.byteLength : 1024\n}\n\nfunction noop () {}\n\nfunction abort () {\n this.destroy(new Error('Stream aborted.'))\n}\n\nfunction isWritev (s) {\n return s._writev !== Writable.prototype._writev && s._writev !== Duplex.prototype._writev\n}\n\nmodule.exports = {\n pipeline,\n pipelinePromise,\n isStream,\n isStreamx,\n getStreamError,\n Stream,\n Writable,\n Readable,\n Duplex,\n Transform,\n // Export PassThrough for compatibility with Node.js core's stream module\n PassThrough\n}\n","const b4a = require('b4a')\n\nconst ZEROS = '0000000000000000000'\nconst SEVENS = '7777777777777777777'\nconst ZERO_OFFSET = '0'.charCodeAt(0)\nconst USTAR_MAGIC = b4a.from([0x75, 0x73, 0x74, 0x61, 0x72, 0x00]) // ustar\\x00\nconst USTAR_VER = b4a.from([ZERO_OFFSET, ZERO_OFFSET])\nconst GNU_MAGIC = b4a.from([0x75, 0x73, 0x74, 0x61, 0x72, 0x20]) // ustar\\x20\nconst GNU_VER = b4a.from([0x20, 0x00])\nconst MASK = 0o7777\nconst MAGIC_OFFSET = 257\nconst VERSION_OFFSET = 263\n\nexports.decodeLongPath = function decodeLongPath (buf, encoding) {\n return decodeStr(buf, 0, buf.length, encoding)\n}\n\nexports.encodePax = function encodePax (opts) { // TODO: encode more stuff in pax\n let result = ''\n if (opts.name) result += addLength(' path=' + opts.name + '\\n')\n if (opts.linkname) result += addLength(' linkpath=' + opts.linkname + '\\n')\n const pax = opts.pax\n if (pax) {\n for (const key in pax) {\n result += addLength(' ' + key + '=' + pax[key] + '\\n')\n }\n }\n return b4a.from(result)\n}\n\nexports.decodePax = function decodePax (buf) {\n const result = {}\n\n while (buf.length) {\n let i = 0\n while (i < buf.length && buf[i] !== 32) i++\n const len = parseInt(b4a.toString(buf.subarray(0, i)), 10)\n if (!len) return result\n\n const b = b4a.toString(buf.subarray(i + 1, len - 1))\n const keyIndex = b.indexOf('=')\n if (keyIndex === -1) return result\n result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1)\n\n buf = buf.subarray(len)\n }\n\n return result\n}\n\nexports.encode = function encode (opts) {\n const buf = b4a.alloc(512)\n let name = opts.name\n let prefix = ''\n\n if (opts.typeflag === 5 && name[name.length - 1] !== '/') name += '/'\n if (b4a.byteLength(name) !== name.length) return null // utf-8\n\n while (b4a.byteLength(name) > 100) {\n const i = name.indexOf('/')\n if (i === -1) return null\n prefix += prefix ? '/' + name.slice(0, i) : name.slice(0, i)\n name = name.slice(i + 1)\n }\n\n if (b4a.byteLength(name) > 100 || b4a.byteLength(prefix) > 155) return null\n if (opts.linkname && b4a.byteLength(opts.linkname) > 100) return null\n\n b4a.write(buf, name)\n b4a.write(buf, encodeOct(opts.mode & MASK, 6), 100)\n b4a.write(buf, encodeOct(opts.uid, 6), 108)\n b4a.write(buf, encodeOct(opts.gid, 6), 116)\n encodeSize(opts.size, buf, 124)\n b4a.write(buf, encodeOct((opts.mtime.getTime() / 1000) | 0, 11), 136)\n\n buf[156] = ZERO_OFFSET + toTypeflag(opts.type)\n\n if (opts.linkname) b4a.write(buf, opts.linkname, 157)\n\n b4a.copy(USTAR_MAGIC, buf, MAGIC_OFFSET)\n b4a.copy(USTAR_VER, buf, VERSION_OFFSET)\n if (opts.uname) b4a.write(buf, opts.uname, 265)\n if (opts.gname) b4a.write(buf, opts.gname, 297)\n b4a.write(buf, encodeOct(opts.devmajor || 0, 6), 329)\n b4a.write(buf, encodeOct(opts.devminor || 0, 6), 337)\n\n if (prefix) b4a.write(buf, prefix, 345)\n\n b4a.write(buf, encodeOct(cksum(buf), 6), 148)\n\n return buf\n}\n\nexports.decode = function decode (buf, filenameEncoding, allowUnknownFormat) {\n let typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET\n\n let name = decodeStr(buf, 0, 100, filenameEncoding)\n const mode = decodeOct(buf, 100, 8)\n const uid = decodeOct(buf, 108, 8)\n const gid = decodeOct(buf, 116, 8)\n const size = decodeOct(buf, 124, 12)\n const mtime = decodeOct(buf, 136, 12)\n const type = toType(typeflag)\n const linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding)\n const uname = decodeStr(buf, 265, 32)\n const gname = decodeStr(buf, 297, 32)\n const devmajor = decodeOct(buf, 329, 8)\n const devminor = decodeOct(buf, 337, 8)\n\n const c = cksum(buf)\n\n // checksum is still initial value if header was null.\n if (c === 8 * 32) return null\n\n // valid checksum\n if (c !== decodeOct(buf, 148, 8)) throw new Error('Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?')\n\n if (isUSTAR(buf)) {\n // ustar (posix) format.\n // prepend prefix, if present.\n if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name\n } else if (isGNU(buf)) {\n // 'gnu'/'oldgnu' format. Similar to ustar, but has support for incremental and\n // multi-volume tarballs.\n } else {\n if (!allowUnknownFormat) {\n throw new Error('Invalid tar header: unknown format.')\n }\n }\n\n // to support old tar versions that use trailing / to indicate dirs\n if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5\n\n return {\n name,\n mode,\n uid,\n gid,\n size,\n mtime: new Date(1000 * mtime),\n type,\n linkname,\n uname,\n gname,\n devmajor,\n devminor,\n pax: null\n }\n}\n\nfunction isUSTAR (buf) {\n return b4a.equals(USTAR_MAGIC, buf.subarray(MAGIC_OFFSET, MAGIC_OFFSET + 6))\n}\n\nfunction isGNU (buf) {\n return b4a.equals(GNU_MAGIC, buf.subarray(MAGIC_OFFSET, MAGIC_OFFSET + 6)) &&\n b4a.equals(GNU_VER, buf.subarray(VERSION_OFFSET, VERSION_OFFSET + 2))\n}\n\nfunction clamp (index, len, defaultValue) {\n if (typeof index !== 'number') return defaultValue\n index = ~~index // Coerce to integer.\n if (index >= len) return len\n if (index >= 0) return index\n index += len\n if (index >= 0) return index\n return 0\n}\n\nfunction toType (flag) {\n switch (flag) {\n case 0:\n return 'file'\n case 1:\n return 'link'\n case 2:\n return 'symlink'\n case 3:\n return 'character-device'\n case 4:\n return 'block-device'\n case 5:\n return 'directory'\n case 6:\n return 'fifo'\n case 7:\n return 'contiguous-file'\n case 72:\n return 'pax-header'\n case 55:\n return 'pax-global-header'\n case 27:\n return 'gnu-long-link-path'\n case 28:\n case 30:\n return 'gnu-long-path'\n }\n\n return null\n}\n\nfunction toTypeflag (flag) {\n switch (flag) {\n case 'file':\n return 0\n case 'link':\n return 1\n case 'symlink':\n return 2\n case 'character-device':\n return 3\n case 'block-device':\n return 4\n case 'directory':\n return 5\n case 'fifo':\n return 6\n case 'contiguous-file':\n return 7\n case 'pax-header':\n return 72\n }\n\n return 0\n}\n\nfunction indexOf (block, num, offset, end) {\n for (; offset < end; offset++) {\n if (block[offset] === num) return offset\n }\n return end\n}\n\nfunction cksum (block) {\n let sum = 8 * 32\n for (let i = 0; i < 148; i++) sum += block[i]\n for (let j = 156; j < 512; j++) sum += block[j]\n return sum\n}\n\nfunction encodeOct (val, n) {\n val = val.toString(8)\n if (val.length > n) return SEVENS.slice(0, n) + ' '\n return ZEROS.slice(0, n - val.length) + val + ' '\n}\n\nfunction encodeSizeBin (num, buf, off) {\n buf[off] = 0x80\n for (let i = 11; i > 0; i--) {\n buf[off + i] = num & 0xff\n num = Math.floor(num / 0x100)\n }\n}\n\nfunction encodeSize (num, buf, off) {\n if (num.toString(8).length > 11) {\n encodeSizeBin(num, buf, off)\n } else {\n b4a.write(buf, encodeOct(num, 11), off)\n }\n}\n\n/* Copied from the node-tar repo and modified to meet\n * tar-stream coding standard.\n *\n * Source: https://github.com/npm/node-tar/blob/51b6627a1f357d2eb433e7378e5f05e83b7aa6cd/lib/header.js#L349\n */\nfunction parse256 (buf) {\n // first byte MUST be either 80 or FF\n // 80 for positive, FF for 2's comp\n let positive\n if (buf[0] === 0x80) positive = true\n else if (buf[0] === 0xFF) positive = false\n else return null\n\n // build up a base-256 tuple from the least sig to the highest\n const tuple = []\n let i\n for (i = buf.length - 1; i > 0; i--) {\n const byte = buf[i]\n if (positive) tuple.push(byte)\n else tuple.push(0xFF - byte)\n }\n\n let sum = 0\n const l = tuple.length\n for (i = 0; i < l; i++) {\n sum += tuple[i] * Math.pow(256, i)\n }\n\n return positive ? sum : -1 * sum\n}\n\nfunction decodeOct (val, offset, length) {\n val = val.subarray(offset, offset + length)\n offset = 0\n\n // If prefixed with 0x80 then parse as a base-256 integer\n if (val[offset] & 0x80) {\n return parse256(val)\n } else {\n // Older versions of tar can prefix with spaces\n while (offset < val.length && val[offset] === 32) offset++\n const end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length)\n while (offset < end && val[offset] === 0) offset++\n if (end === offset) return 0\n return parseInt(b4a.toString(val.subarray(offset, end)), 8)\n }\n}\n\nfunction decodeStr (val, offset, length, encoding) {\n return b4a.toString(val.subarray(offset, indexOf(val, 0, offset, offset + length)), encoding)\n}\n\nfunction addLength (str) {\n const len = b4a.byteLength(str)\n let digits = Math.floor(Math.log(len) / Math.log(10)) + 1\n if (len + digits >= Math.pow(10, digits)) digits++\n\n return (len + digits) + str\n}\n","const { Writable, Readable, getStreamError } = require('streamx')\nconst FIFO = require('fast-fifo')\nconst b4a = require('b4a')\nconst headers = require('./headers')\n\nconst EMPTY = b4a.alloc(0)\n\nclass BufferList {\n constructor () {\n this.buffered = 0\n this.shifted = 0\n this.queue = new FIFO()\n\n this._offset = 0\n }\n\n push (buffer) {\n this.buffered += buffer.byteLength\n this.queue.push(buffer)\n }\n\n shiftFirst (size) {\n return this._buffered === 0 ? null : this._next(size)\n }\n\n shift (size) {\n if (size > this.buffered) return null\n if (size === 0) return EMPTY\n\n let chunk = this._next(size)\n\n if (size === chunk.byteLength) return chunk // likely case\n\n const chunks = [chunk]\n\n while ((size -= chunk.byteLength) > 0) {\n chunk = this._next(size)\n chunks.push(chunk)\n }\n\n return b4a.concat(chunks)\n }\n\n _next (size) {\n const buf = this.queue.peek()\n const rem = buf.byteLength - this._offset\n\n if (size >= rem) {\n const sub = this._offset ? buf.subarray(this._offset, buf.byteLength) : buf\n this.queue.shift()\n this._offset = 0\n this.buffered -= rem\n this.shifted += rem\n return sub\n }\n\n this.buffered -= size\n this.shifted += size\n\n return buf.subarray(this._offset, (this._offset += size))\n }\n}\n\nclass Source extends Readable {\n constructor (self, header, offset) {\n super()\n\n this.header = header\n this.offset = offset\n\n this._parent = self\n }\n\n _read (cb) {\n if (this.header.size === 0) {\n this.push(null)\n }\n if (this._parent._stream === this) {\n this._parent._update()\n }\n cb(null)\n }\n\n _predestroy () {\n this._parent.destroy(getStreamError(this))\n }\n\n _detach () {\n if (this._parent._stream === this) {\n this._parent._stream = null\n this._parent._missing = overflow(this.header.size)\n this._parent._update()\n }\n }\n\n _destroy (cb) {\n this._detach()\n cb(null)\n }\n}\n\nclass Extract extends Writable {\n constructor (opts) {\n super(opts)\n\n if (!opts) opts = {}\n\n this._buffer = new BufferList()\n this._offset = 0\n this._header = null\n this._stream = null\n this._missing = 0\n this._longHeader = false\n this._callback = noop\n this._locked = false\n this._finished = false\n this._pax = null\n this._paxGlobal = null\n this._gnuLongPath = null\n this._gnuLongLinkPath = null\n this._filenameEncoding = opts.filenameEncoding || 'utf-8'\n this._allowUnknownFormat = !!opts.allowUnknownFormat\n this._unlockBound = this._unlock.bind(this)\n }\n\n _unlock (err) {\n this._locked = false\n\n if (err) {\n this.destroy(err)\n this._continueWrite(err)\n return\n }\n\n this._update()\n }\n\n _consumeHeader () {\n if (this._locked) return false\n\n this._offset = this._buffer.shifted\n\n try {\n this._header = headers.decode(this._buffer.shift(512), this._filenameEncoding, this._allowUnknownFormat)\n } catch (err) {\n this._continueWrite(err)\n return false\n }\n\n if (!this._header) return true\n\n switch (this._header.type) {\n case 'gnu-long-path':\n case 'gnu-long-link-path':\n case 'pax-global-header':\n case 'pax-header':\n this._longHeader = true\n this._missing = this._header.size\n return true\n }\n\n this._locked = true\n this._applyLongHeaders()\n\n if (this._header.size === 0 || this._header.type === 'directory') {\n this.emit('entry', this._header, this._createStream(), this._unlockBound)\n return true\n }\n\n this._stream = this._createStream()\n this._missing = this._header.size\n\n this.emit('entry', this._header, this._stream, this._unlockBound)\n return true\n }\n\n _applyLongHeaders () {\n if (this._gnuLongPath) {\n this._header.name = this._gnuLongPath\n this._gnuLongPath = null\n }\n\n if (this._gnuLongLinkPath) {\n this._header.linkname = this._gnuLongLinkPath\n this._gnuLongLinkPath = null\n }\n\n if (this._pax) {\n if (this._pax.path) this._header.name = this._pax.path\n if (this._pax.linkpath) this._header.linkname = this._pax.linkpath\n if (this._pax.size) this._header.size = parseInt(this._pax.size, 10)\n this._header.pax = this._pax\n this._pax = null\n }\n }\n\n _decodeLongHeader (buf) {\n switch (this._header.type) {\n case 'gnu-long-path':\n this._gnuLongPath = headers.decodeLongPath(buf, this._filenameEncoding)\n break\n case 'gnu-long-link-path':\n this._gnuLongLinkPath = headers.decodeLongPath(buf, this._filenameEncoding)\n break\n case 'pax-global-header':\n this._paxGlobal = headers.decodePax(buf)\n break\n case 'pax-header':\n this._pax = this._paxGlobal === null\n ? headers.decodePax(buf)\n : Object.assign({}, this._paxGlobal, headers.decodePax(buf))\n break\n }\n }\n\n _consumeLongHeader () {\n this._longHeader = false\n this._missing = overflow(this._header.size)\n\n const buf = this._buffer.shift(this._header.size)\n\n try {\n this._decodeLongHeader(buf)\n } catch (err) {\n this._continueWrite(err)\n return false\n }\n\n return true\n }\n\n _consumeStream () {\n const buf = this._buffer.shiftFirst(this._missing)\n if (buf === null) return false\n\n this._missing -= buf.byteLength\n const drained = this._stream.push(buf)\n\n if (this._missing === 0) {\n this._stream.push(null)\n if (drained) this._stream._detach()\n return drained && this._locked === false\n }\n\n return drained\n }\n\n _createStream () {\n return new Source(this, this._header, this._offset)\n }\n\n _update () {\n while (this._buffer.buffered > 0 && !this.destroying) {\n if (this._missing > 0) {\n if (this._stream !== null) {\n if (this._consumeStream() === false) return\n continue\n }\n\n if (this._longHeader === true) {\n if (this._missing > this._buffer.buffered) break\n if (this._consumeLongHeader() === false) return false\n continue\n }\n\n const ignore = this._buffer.shiftFirst(this._missing)\n if (ignore !== null) this._missing -= ignore.byteLength\n continue\n }\n\n if (this._buffer.buffered < 512) break\n if (this._stream !== null || this._consumeHeader() === false) return\n }\n\n this._continueWrite(null)\n }\n\n _continueWrite (err) {\n const cb = this._callback\n this._callback = noop\n cb(err)\n }\n\n _write (data, cb) {\n this._callback = cb\n this._buffer.push(data)\n this._update()\n }\n\n _final (cb) {\n this._finished = this._missing === 0 && this._buffer.buffered === 0\n cb(this._finished ? null : new Error('Unexpected end of data'))\n }\n\n _predestroy () {\n this._continueWrite(null)\n }\n\n _destroy (cb) {\n if (this._stream) this._stream.destroy(getStreamError(this))\n cb(null)\n }\n\n [Symbol.asyncIterator] () {\n let error = null\n\n let promiseResolve = null\n let promiseReject = null\n\n let entryStream = null\n let entryCallback = null\n\n const extract = this\n\n this.on('entry', onentry)\n this.on('error', (err) => { error = err })\n this.on('close', onclose)\n\n return {\n [Symbol.asyncIterator] () {\n return this\n },\n next () {\n return new Promise(onnext)\n },\n return () {\n return destroy(null)\n },\n throw (err) {\n return destroy(err)\n }\n }\n\n function consumeCallback (err) {\n if (!entryCallback) return\n const cb = entryCallback\n entryCallback = null\n cb(err)\n }\n\n function onnext (resolve, reject) {\n if (error) {\n return reject(error)\n }\n\n if (entryStream) {\n resolve({ value: entryStream, done: false })\n entryStream = null\n return\n }\n\n promiseResolve = resolve\n promiseReject = reject\n\n consumeCallback(null)\n\n if (extract._finished && promiseResolve) {\n promiseResolve({ value: undefined, done: true })\n promiseResolve = promiseReject = null\n }\n }\n\n function onentry (header, stream, callback) {\n entryCallback = callback\n stream.on('error', noop) // no way around this due to tick sillyness\n\n if (promiseResolve) {\n promiseResolve({ value: stream, done: false })\n promiseResolve = promiseReject = null\n } else {\n entryStream = stream\n }\n }\n\n function onclose () {\n consumeCallback(error)\n if (!promiseResolve) return\n if (error) promiseReject(error)\n else promiseResolve({ value: undefined, done: true })\n promiseResolve = promiseReject = null\n }\n\n function destroy (err) {\n extract.destroy(err)\n consumeCallback(err)\n return new Promise((resolve, reject) => {\n if (extract.destroyed) return resolve({ value: undefined, done: true })\n extract.once('close', function () {\n if (err) reject(err)\n else resolve({ value: undefined, done: true })\n })\n })\n }\n }\n}\n\nmodule.exports = function extract (opts) {\n return new Extract(opts)\n}\n\nfunction noop () {}\n\nfunction overflow (size) {\n size &= 511\n return size && 512 - size\n}\n","const constants = { // just for envs without fs\n S_IFMT: 61440,\n S_IFDIR: 16384,\n S_IFCHR: 8192,\n S_IFBLK: 24576,\n S_IFIFO: 4096,\n S_IFLNK: 40960\n}\n\ntry {\n module.exports = require('fs').constants || constants\n} catch {\n module.exports = constants\n}\n","const { Readable, Writable, getStreamError } = require('streamx')\nconst b4a = require('b4a')\n\nconst constants = require('./constants')\nconst headers = require('./headers')\n\nconst DMODE = 0o755\nconst FMODE = 0o644\n\nconst END_OF_TAR = b4a.alloc(1024)\n\nclass Sink extends Writable {\n constructor (pack, header, callback) {\n super({ mapWritable, eagerOpen: true })\n\n this.written = 0\n this.header = header\n\n this._callback = callback\n this._linkname = null\n this._isLinkname = header.type === 'symlink' && !header.linkname\n this._isVoid = header.type !== 'file' && header.type !== 'contiguous-file'\n this._finished = false\n this._pack = pack\n this._openCallback = null\n\n if (this._pack._stream === null) this._pack._stream = this\n else this._pack._pending.push(this)\n }\n\n _open (cb) {\n this._openCallback = cb\n if (this._pack._stream === this) this._continueOpen()\n }\n\n _continuePack (err) {\n if (this._callback === null) return\n\n const callback = this._callback\n this._callback = null\n\n callback(err)\n }\n\n _continueOpen () {\n if (this._pack._stream === null) this._pack._stream = this\n\n const cb = this._openCallback\n this._openCallback = null\n if (cb === null) return\n\n if (this._pack.destroying) return cb(new Error('pack stream destroyed'))\n if (this._pack._finalized) return cb(new Error('pack stream is already finalized'))\n\n this._pack._stream = this\n\n if (!this._isLinkname) {\n this._pack._encode(this.header)\n }\n\n if (this._isVoid) {\n this._finish()\n this._continuePack(null)\n }\n\n cb(null)\n }\n\n _write (data, cb) {\n if (this._isLinkname) {\n this._linkname = this._linkname ? b4a.concat([this._linkname, data]) : data\n return cb(null)\n }\n\n if (this._isVoid) {\n if (data.byteLength > 0) {\n return cb(new Error('No body allowed for this entry'))\n }\n return cb()\n }\n\n this.written += data.byteLength\n if (this._pack.push(data)) return cb()\n this._pack._drain = cb\n }\n\n _finish () {\n if (this._finished) return\n this._finished = true\n\n if (this._isLinkname) {\n this.header.linkname = this._linkname ? b4a.toString(this._linkname, 'utf-8') : ''\n this._pack._encode(this.header)\n }\n\n overflow(this._pack, this.header.size)\n\n this._pack._done(this)\n }\n\n _final (cb) {\n if (this.written !== this.header.size) { // corrupting tar\n return cb(new Error('Size mismatch'))\n }\n\n this._finish()\n cb(null)\n }\n\n _getError () {\n return getStreamError(this) || new Error('tar entry destroyed')\n }\n\n _predestroy () {\n this._pack.destroy(this._getError())\n }\n\n _destroy (cb) {\n this._pack._done(this)\n\n this._continuePack(this._finished ? null : this._getError())\n\n cb()\n }\n}\n\nclass Pack extends Readable {\n constructor (opts) {\n super(opts)\n this._drain = noop\n this._finalized = false\n this._finalizing = false\n this._pending = []\n this._stream = null\n }\n\n entry (header, buffer, callback) {\n if (this._finalized || this.destroying) throw new Error('already finalized or destroyed')\n\n if (typeof buffer === 'function') {\n callback = buffer\n buffer = null\n }\n\n if (!callback) callback = noop\n\n if (!header.size || header.type === 'symlink') header.size = 0\n if (!header.type) header.type = modeToType(header.mode)\n if (!header.mode) header.mode = header.type === 'directory' ? DMODE : FMODE\n if (!header.uid) header.uid = 0\n if (!header.gid) header.gid = 0\n if (!header.mtime) header.mtime = new Date()\n\n if (typeof buffer === 'string') buffer = b4a.from(buffer)\n\n const sink = new Sink(this, header, callback)\n\n if (b4a.isBuffer(buffer)) {\n header.size = buffer.byteLength\n sink.write(buffer)\n sink.end()\n return sink\n }\n\n if (sink._isVoid) {\n return sink\n }\n\n return sink\n }\n\n finalize () {\n if (this._stream || this._pending.length > 0) {\n this._finalizing = true\n return\n }\n\n if (this._finalized) return\n this._finalized = true\n\n this.push(END_OF_TAR)\n this.push(null)\n }\n\n _done (stream) {\n if (stream !== this._stream) return\n\n this._stream = null\n\n if (this._finalizing) this.finalize()\n if (this._pending.length) this._pending.shift()._continueOpen()\n }\n\n _encode (header) {\n if (!header.pax) {\n const buf = headers.encode(header)\n if (buf) {\n this.push(buf)\n return\n }\n }\n this._encodePax(header)\n }\n\n _encodePax (header) {\n const paxHeader = headers.encodePax({\n name: header.name,\n linkname: header.linkname,\n pax: header.pax\n })\n\n const newHeader = {\n name: 'PaxHeader',\n mode: header.mode,\n uid: header.uid,\n gid: header.gid,\n size: paxHeader.byteLength,\n mtime: header.mtime,\n type: 'pax-header',\n linkname: header.linkname && 'PaxHeader',\n uname: header.uname,\n gname: header.gname,\n devmajor: header.devmajor,\n devminor: header.devminor\n }\n\n this.push(headers.encode(newHeader))\n this.push(paxHeader)\n overflow(this, paxHeader.byteLength)\n\n newHeader.size = header.size\n newHeader.type = header.type\n this.push(headers.encode(newHeader))\n }\n\n _doDrain () {\n const drain = this._drain\n this._drain = noop\n drain()\n }\n\n _predestroy () {\n const err = getStreamError(this)\n\n if (this._stream) this._stream.destroy(err)\n\n while (this._pending.length) {\n const stream = this._pending.shift()\n stream.destroy(err)\n stream._continueOpen()\n }\n\n this._doDrain()\n }\n\n _read (cb) {\n this._doDrain()\n cb()\n }\n}\n\nmodule.exports = function pack (opts) {\n return new Pack(opts)\n}\n\nfunction modeToType (mode) {\n switch (mode & constants.S_IFMT) {\n case constants.S_IFBLK: return 'block-device'\n case constants.S_IFCHR: return 'character-device'\n case constants.S_IFDIR: return 'directory'\n case constants.S_IFIFO: return 'fifo'\n case constants.S_IFLNK: return 'symlink'\n }\n\n return 'file'\n}\n\nfunction noop () {}\n\nfunction overflow (self, size) {\n size &= 511\n if (size) self.push(END_OF_TAR.subarray(0, 512 - size))\n}\n\nfunction mapWritable (buf) {\n return b4a.isBuffer(buf) ? buf : b4a.from(buf)\n}\n","exports.extract = require('./extract')\nexports.pack = require('./pack')\n","/**\n * TAR Format Plugin\n *\n * @module plugins/tar\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar zlib = require('zlib');\n\nvar engine = require('tar-stream');\nvar util = require('archiver-utils');\n\n/**\n * @constructor\n * @param {TarOptions} options\n */\nvar Tar = function(options) {\n if (!(this instanceof Tar)) {\n return new Tar(options);\n }\n\n options = this.options = util.defaults(options, {\n gzip: false\n });\n\n if (typeof options.gzipOptions !== 'object') {\n options.gzipOptions = {};\n }\n\n this.supports = {\n directory: true,\n symlink: true\n };\n\n this.engine = engine.pack(options);\n this.compressor = false;\n\n if (options.gzip) {\n this.compressor = zlib.createGzip(options.gzipOptions);\n this.compressor.on('error', this._onCompressorError.bind(this));\n }\n};\n\n/**\n * [_onCompressorError description]\n *\n * @private\n * @param {Error} err\n * @return void\n */\nTar.prototype._onCompressorError = function(err) {\n this.engine.emit('error', err);\n};\n\n/**\n * [append description]\n *\n * @param {(Buffer|Stream)} source\n * @param {TarEntryData} data\n * @param {Function} callback\n * @return void\n */\nTar.prototype.append = function(source, data, callback) {\n var self = this;\n\n data.mtime = data.date;\n\n function append(err, sourceBuffer) {\n if (err) {\n callback(err);\n return;\n }\n\n self.engine.entry(data, sourceBuffer, function(err) {\n callback(err, data);\n });\n }\n\n if (data.sourceType === 'buffer') {\n append(null, source);\n } else if (data.sourceType === 'stream' && data.stats) {\n data.size = data.stats.size;\n\n var entry = self.engine.entry(data, function(err) {\n callback(err, data);\n });\n\n source.pipe(entry);\n } else if (data.sourceType === 'stream') {\n util.collectStream(source, append);\n }\n};\n\n/**\n * [finalize description]\n *\n * @return void\n */\nTar.prototype.finalize = function() {\n this.engine.finalize();\n};\n\n/**\n * [on description]\n *\n * @return this.engine\n */\nTar.prototype.on = function() {\n return this.engine.on.apply(this.engine, arguments);\n};\n\n/**\n * [pipe description]\n *\n * @param {String} destination\n * @param {Object} options\n * @return this.engine\n */\nTar.prototype.pipe = function(destination, options) {\n if (this.compressor) {\n return this.engine.pipe.apply(this.engine, [this.compressor]).pipe(destination, options);\n } else {\n return this.engine.pipe.apply(this.engine, arguments);\n }\n};\n\n/**\n * [unpipe description]\n *\n * @return this.engine\n */\nTar.prototype.unpipe = function() {\n if (this.compressor) {\n return this.compressor.unpipe.apply(this.compressor, arguments);\n } else {\n return this.engine.unpipe.apply(this.engine, arguments);\n }\n};\n\nmodule.exports = Tar;\n\n/**\n * @typedef {Object} TarOptions\n * @global\n * @property {Boolean} [gzip=false] Compress the tar archive using gzip.\n * @property {Object} [gzipOptions] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}\n * to control compression.\n * @property {*} [*] See [tar-stream]{@link https://github.com/mafintosh/tar-stream} documentation for additional properties.\n */\n\n/**\n * @typedef {Object} TarEntryData\n * @global\n * @property {String} name Sets the entry name including internal path.\n * @property {(String|Date)} [date=NOW()] Sets the entry date.\n * @property {Number} [mode=D:0755/F:0644] Sets the entry permissions.\n * @property {String} [prefix] Sets a path prefix for the entry name. Useful\n * when working with methods like `directory` or `glob`.\n * @property {fs.Stats} [stats] Sets the fs stat data for this entry allowing\n * for reduction of fs stat calls when stat data is already known.\n */\n\n/**\n * TarStream Module\n * @external TarStream\n * @see {@link https://github.com/mafintosh/tar-stream}\n */\n","'use strict';\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nconst CRC_TABLE = new Int32Array([\n 0,\n 1996959894,\n 3993919788,\n 2567524794,\n 124634137,\n 1886057615,\n 3915621685,\n 2657392035,\n 249268274,\n 2044508324,\n 3772115230,\n 2547177864,\n 162941995,\n 2125561021,\n 3887607047,\n 2428444049,\n 498536548,\n 1789927666,\n 4089016648,\n 2227061214,\n 450548861,\n 1843258603,\n 4107580753,\n 2211677639,\n 325883990,\n 1684777152,\n 4251122042,\n 2321926636,\n 335633487,\n 1661365465,\n 4195302755,\n 2366115317,\n 997073096,\n 1281953886,\n 3579855332,\n 2724688242,\n 1006888145,\n 1258607687,\n 3524101629,\n 2768942443,\n 901097722,\n 1119000684,\n 3686517206,\n 2898065728,\n 853044451,\n 1172266101,\n 3705015759,\n 2882616665,\n 651767980,\n 1373503546,\n 3369554304,\n 3218104598,\n 565507253,\n 1454621731,\n 3485111705,\n 3099436303,\n 671266974,\n 1594198024,\n 3322730930,\n 2970347812,\n 795835527,\n 1483230225,\n 3244367275,\n 3060149565,\n 1994146192,\n 31158534,\n 2563907772,\n 4023717930,\n 1907459465,\n 112637215,\n 2680153253,\n 3904427059,\n 2013776290,\n 251722036,\n 2517215374,\n 3775830040,\n 2137656763,\n 141376813,\n 2439277719,\n 3865271297,\n 1802195444,\n 476864866,\n 2238001368,\n 4066508878,\n 1812370925,\n 453092731,\n 2181625025,\n 4111451223,\n 1706088902,\n 314042704,\n 2344532202,\n 4240017532,\n 1658658271,\n 366619977,\n 2362670323,\n 4224994405,\n 1303535960,\n 984961486,\n 2747007092,\n 3569037538,\n 1256170817,\n 1037604311,\n 2765210733,\n 3554079995,\n 1131014506,\n 879679996,\n 2909243462,\n 3663771856,\n 1141124467,\n 855842277,\n 2852801631,\n 3708648649,\n 1342533948,\n 654459306,\n 3188396048,\n 3373015174,\n 1466479909,\n 544179635,\n 3110523913,\n 3462522015,\n 1591671054,\n 702138776,\n 2966460450,\n 3352799412,\n 1504918807,\n 783551873,\n 3082640443,\n 3233442989,\n 3988292384,\n 2596254646,\n 62317068,\n 1957810842,\n 3939845945,\n 2647816111,\n 81470997,\n 1943803523,\n 3814918930,\n 2489596804,\n 225274430,\n 2053790376,\n 3826175755,\n 2466906013,\n 167816743,\n 2097651377,\n 4027552580,\n 2265490386,\n 503444072,\n 1762050814,\n 4150417245,\n 2154129355,\n 426522225,\n 1852507879,\n 4275313526,\n 2312317920,\n 282753626,\n 1742555852,\n 4189708143,\n 2394877945,\n 397917763,\n 1622183637,\n 3604390888,\n 2714866558,\n 953729732,\n 1340076626,\n 3518719985,\n 2797360999,\n 1068828381,\n 1219638859,\n 3624741850,\n 2936675148,\n 906185462,\n 1090812512,\n 3747672003,\n 2825379669,\n 829329135,\n 1181335161,\n 3412177804,\n 3160834842,\n 628085408,\n 1382605366,\n 3423369109,\n 3138078467,\n 570562233,\n 1426400815,\n 3317316542,\n 2998733608,\n 733239954,\n 1555261956,\n 3268935591,\n 3050360625,\n 752459403,\n 1541320221,\n 2607071920,\n 3965973030,\n 1969922972,\n 40735498,\n 2617837225,\n 3943577151,\n 1913087877,\n 83908371,\n 2512341634,\n 3803740692,\n 2075208622,\n 213261112,\n 2463272603,\n 3855990285,\n 2094854071,\n 198958881,\n 2262029012,\n 4057260610,\n 1759359992,\n 534414190,\n 2176718541,\n 4139329115,\n 1873836001,\n 414664567,\n 2282248934,\n 4279200368,\n 1711684554,\n 285281116,\n 2405801727,\n 4167216745,\n 1634467795,\n 376229701,\n 2685067896,\n 3608007406,\n 1308918612,\n 956543938,\n 2808555105,\n 3495958263,\n 1231636301,\n 1047427035,\n 2932959818,\n 3654703836,\n 1088359270,\n 936918e3,\n 2847714899,\n 3736837829,\n 1202900863,\n 817233897,\n 3183342108,\n 3401237130,\n 1404277552,\n 615818150,\n 3134207493,\n 3453421203,\n 1423857449,\n 601450431,\n 3009837614,\n 3294710456,\n 1567103746,\n 711928724,\n 3020668471,\n 3272380065,\n 1510334235,\n 755167117\n]);\nfunction ensureBuffer(input) {\n if (Buffer.isBuffer(input)) {\n return input;\n }\n if (typeof input === \"number\") {\n return Buffer.alloc(input);\n } else if (typeof input === \"string\") {\n return Buffer.from(input);\n } else {\n throw new Error(\"input must be buffer, number, or string, received \" + typeof input);\n }\n}\nfunction bufferizeInt(num) {\n const tmp = ensureBuffer(4);\n tmp.writeInt32BE(num, 0);\n return tmp;\n}\nfunction _crc32(buf, previous) {\n buf = ensureBuffer(buf);\n if (Buffer.isBuffer(previous)) {\n previous = previous.readUInt32BE(0);\n }\n let crc = ~~previous ^ -1;\n for (var n = 0; n < buf.length; n++) {\n crc = CRC_TABLE[(crc ^ buf[n]) & 255] ^ crc >>> 8;\n }\n return crc ^ -1;\n}\nfunction crc32() {\n return bufferizeInt(_crc32.apply(null, arguments));\n}\ncrc32.signed = function() {\n return _crc32.apply(null, arguments);\n};\ncrc32.unsigned = function() {\n return _crc32.apply(null, arguments) >>> 0;\n};\nvar bufferCrc32 = crc32;\n\nconst index = /*@__PURE__*/getDefaultExportFromCjs(bufferCrc32);\n\nmodule.exports = index;\n","/**\n * JSON Format Plugin\n *\n * @module plugins/json\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar inherits = require('util').inherits;\nvar Transform = require('readable-stream').Transform;\n\nvar crc32 = require('buffer-crc32');\nvar util = require('archiver-utils');\n\n/**\n * @constructor\n * @param {(JsonOptions|TransformOptions)} options\n */\nvar Json = function(options) {\n if (!(this instanceof Json)) {\n return new Json(options);\n }\n\n options = this.options = util.defaults(options, {});\n\n Transform.call(this, options);\n\n this.supports = {\n directory: true,\n symlink: true\n };\n\n this.files = [];\n};\n\ninherits(Json, Transform);\n\n/**\n * [_transform description]\n *\n * @private\n * @param {Buffer} chunk\n * @param {String} encoding\n * @param {Function} callback\n * @return void\n */\nJson.prototype._transform = function(chunk, encoding, callback) {\n callback(null, chunk);\n};\n\n/**\n * [_writeStringified description]\n *\n * @private\n * @return void\n */\nJson.prototype._writeStringified = function() {\n var fileString = JSON.stringify(this.files);\n this.write(fileString);\n};\n\n/**\n * [append description]\n *\n * @param {(Buffer|Stream)} source\n * @param {EntryData} data\n * @param {Function} callback\n * @return void\n */\nJson.prototype.append = function(source, data, callback) {\n var self = this;\n\n data.crc32 = 0;\n\n function onend(err, sourceBuffer) {\n if (err) {\n callback(err);\n return;\n }\n\n data.size = sourceBuffer.length || 0;\n data.crc32 = crc32.unsigned(sourceBuffer);\n\n self.files.push(data);\n\n callback(null, data);\n }\n\n if (data.sourceType === 'buffer') {\n onend(null, source);\n } else if (data.sourceType === 'stream') {\n util.collectStream(source, onend);\n }\n};\n\n/**\n * [finalize description]\n *\n * @return void\n */\nJson.prototype.finalize = function() {\n this._writeStringified();\n this.end();\n};\n\nmodule.exports = Json;\n\n/**\n * @typedef {Object} JsonOptions\n * @global\n */\n","/**\n * Archiver Vending\n *\n * @ignore\n * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}\n * @copyright (c) 2012-2014 Chris Talkington, contributors.\n */\nvar Archiver = require('./lib/core');\n\nvar formats = {};\n\n/**\n * Dispenses a new Archiver instance.\n *\n * @constructor\n * @param {String} format The archive format to use.\n * @param {Object} options See [Archiver]{@link Archiver}\n * @return {Archiver}\n */\nvar vending = function(format, options) {\n return vending.create(format, options);\n};\n\n/**\n * Creates a new Archiver instance.\n *\n * @param {String} format The archive format to use.\n * @param {Object} options See [Archiver]{@link Archiver}\n * @return {Archiver}\n */\nvending.create = function(format, options) {\n if (formats[format]) {\n var instance = new Archiver(format, options);\n instance.setFormat(format);\n instance.setModule(new formats[format](options));\n\n return instance;\n } else {\n throw new Error('create(' + format + '): format not registered');\n }\n};\n\n/**\n * Registers a format for use with archiver.\n *\n * @param {String} format The name of the format.\n * @param {Function} module The function for archiver to interact with.\n * @return void\n */\nvending.registerFormat = function(format, module) {\n if (formats[format]) {\n throw new Error('register(' + format + '): format already registered');\n }\n\n if (typeof module !== 'function') {\n throw new Error('register(' + format + '): format module invalid');\n }\n\n if (typeof module.prototype.append !== 'function' || typeof module.prototype.finalize !== 'function') {\n throw new Error('register(' + format + '): format module missing methods');\n }\n\n formats[format] = module;\n};\n\n/**\n * Check if the format is already registered.\n * \n * @param {String} format the name of the format.\n * @return boolean\n */\nvending.isRegisteredFormat = function (format) {\n if (formats[format]) {\n return true;\n }\n \n return false;\n};\n\nvending.registerFormat('zip', require('./lib/plugins/zip'));\nvending.registerFormat('tar', require('./lib/plugins/tar'));\nvending.registerFormat('json', require('./lib/plugins/json'));\n\nmodule.exports = vending;","import type {\n Reporter,\n FullConfig,\n Suite,\n TestCase,\n TestResult,\n FullResult,\n TestError,\n} from '@playwright/test/reporter';\nimport { readFileSync } from 'fs';\nimport * as fs from 'fs';\nimport archiver from 'archiver';\nimport path from 'path';\nimport { TestTracerFeature, TestTracerOptions } from './Types';\nimport { TestResult as TestTracerResult } from './TestResult';\n\nclass TestTracerReporter implements Reporter {\n private options: TestTracerOptions | null = null;\n\n private testCount = 0;\n\n private testTracerBaseUrl = 'https://api.testtracer.io';\n\n private uploadKey = '';\n\n private results: TestTracerResult[] = [];\n\n private featureUniqueName = '';\n\n private featureDisplayName = '';\n\n private resultsDir = 'test-tracer';\n\n // steps: [];\n\n constructor() {\n fs.rmSync(this.resultsDir, { recursive: true, force: true });\n fs.mkdir(this.resultsDir, (error) => {\n if (error) {\n console.error('Failed to create the Test Tracer directory');\n }\n });\n // this.steps = [];\n }\n\n onBegin(config: FullConfig, suite: Suite): void {\n this.validateParams(\n config.reporter.find((x) =>\n x[0].includes('test-tracer-reporter.ts')\n )?.[1] || {}\n );\n\n this.testCount = suite.allTests().length;\n }\n\n validateParams(options: TestTracerOptions) {\n this.options = options;\n\n this.options.branch = process.env.TEST_TRACER_BRANCH;\n this.options.environment = process.env.TEST_TRACER_ENVIRONMENT;\n this.options.noUpload = process.env.TEST_TRACER_NO_UPLOAD === 'true';\n this.options.revision = process.env.TEST_TRACER_REVISION;\n this.options.version = process.env.TEST_TRACER_VERSION;\n this.options.runAlias = process.env.TEST_TRACER_RUN_ALIAS;\n this.options.projectName = process.env.TEST_TRACER_PROJECT_NAME;\n this.uploadKey = process.env.TEST_TRACER_UPLOAD_TOKEN || '';\n }\n\n onTestEnd(test: TestCase, result: TestResult) {\n test.results.forEach((res) => {\n if (\n this.results.findIndex(\n (x) => x.uniqueName === test.id && x.startTime === res.startTime\n ) > -1\n )\n return;\n\n const report = new TestTracerResult(this.options);\n\n // res.steps.forEach((step) => {\n // report.steps.push({\n // name: step.title,\n // status: step.error ? 'failed' : 'passed',\n // duration: step.duration,\n // });\n // });\n\n report.testCount = this.testCount;\n report.displayName = test.title;\n report.uniqueName = test.id;\n report.feature = this.calculateFeatureName(test);\n report.startTime = res.startTime;\n report.duration = res.duration;\n\n switch (res.status) {\n case 'timedOut':\n report.result = 'failed';\n break;\n default:\n report.result = res.status;\n break;\n }\n\n this.results.push(report);\n\n if (res.error) {\n report.failure = {\n reason: res.error.message || '',\n trace: res.error.stack || '',\n };\n }\n\n fs.writeFileSync(\n `${this.resultsDir}/${report.testCaseRunId}.json`,\n JSON.stringify(report)\n );\n });\n }\n\n async onEnd(\n result: FullResult\n ): Promise<void | { status?: FullResult['status'] } | undefined> {\n await this.zipResults();\n await this.uploadResults();\n await this.processResults();\n }\n\n async onError(error: TestError): Promise<void> {\n await this.zipResults();\n await this.uploadResults();\n await this.processResults();\n }\n\n findName = (suite: Suite) => {\n this.featureUniqueName = suite.title + this.featureUniqueName;\n\n if (suite.location?.file.endsWith(suite.title)) {\n return;\n }\n\n this.featureDisplayName = `${suite.title} > ${this.featureDisplayName}`;\n\n if (suite.parent) this.findName(suite.parent);\n };\n\n calculateFeatureName(test: TestCase): TestTracerFeature {\n this.featureUniqueName = '';\n this.featureDisplayName = '';\n this.findName(test.parent);\n\n return {\n displayName: this.featureDisplayName.slice(0, -3),\n uniqueName: this.featureUniqueName,\n };\n }\n\n zipResults = () =>\n new Promise<void>((resolve, reject) => {\n const output = fs.createWriteStream(`${this.resultsDir}/results.zip`);\n\n const archive = archiver('zip', { zlib: { level: 9 } });\n\n output.on('close', () => {\n resolve();\n });\n\n archive.on('error', (err: Error) => {\n console.log({ err });\n reject(err);\n });\n\n archive.pipe(output);\n\n const files = fs.readdirSync(this.resultsDir);\n\n files.forEach((file) => {\n const filePath = path.join(this.resultsDir, file);\n if (fs.statSync(filePath).isFile()) {\n const fileName = path.basename(filePath);\n archive.file(filePath, { name: fileName });\n }\n });\n\n archive.finalize();\n });\n\n processResults = async (): Promise<void> => {\n await fetch(`${this.testTracerBaseUrl}/test-data/process`, {\n method: 'POST',\n headers: {\n 'x-api-key': this.uploadKey,\n },\n });\n };\n\n uploadResults = async (): Promise<void> => {\n const form = new FormData();\n const data = readFileSync(`${this.resultsDir}/results.zip`);\n\n const blob = new Blob([data]);\n form.set('file', blob, `${this.resultsDir}/results.zip`);\n\n await fetch(`${this.testTracerBaseUrl}/test-data/upload`, {\n method: 'POST',\n body: form,\n headers: {\n 'x-api-key': this.uploadKey,\n 'Accept-Encoding': 'gzip, deflate',\n },\n });\n };\n}\n\nexport default TestTracerReporter;\n","import validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n //\n // Note to future-self: No, you can't remove the `toLowerCase()` call.\n // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;","import crypto from 'node:crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","import crypto from 'node:crypto';\nexport default {\n randomUUID: crypto.randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n offset = offset || 0;\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;","import { v4 as uuidv4 } from 'uuid';\nimport os from 'os';\nimport {\n TestTracerFailure,\n TestTracerFeature,\n TestTracerOptions,\n TestTracerStep,\n} from './Types';\n\nexport class TestResult {\n readonly externalReference: string;\n\n readonly buildVersion?: string;\n\n readonly machineName: string;\n\n readonly environment?: string;\n\n readonly runAlias?: string;\n\n readonly branch?: string;\n\n readonly project?: string;\n\n readonly testCaseRunId: string;\n\n readonly metadata?: object;\n\n testCount: number;\n\n readonly buildRevision: string | undefined;\n\n displayName?: string;\n\n uniqueName?: string;\n\n feature: TestTracerFeature | null = null;\n\n startTime?: Date;\n\n duration?: number;\n\n result?: string;\n steps: TestTracerStep[];\n\n failure: TestTracerFailure | null = null;\n\n constructor(options: TestTracerOptions | null) {\n this.externalReference = options?.externalReference || uuidv4();\n this.buildVersion = options?.version;\n this.machineName = os.hostname();\n this.testCount = 0;\n this.buildRevision = options?.revision;\n this.environment = options?.environment;\n this.runAlias = options?.runAlias;\n this.branch = options?.branch;\n this.project = options?.projectName;\n this.testCaseRunId = uuidv4();\n this.metadata = options?.metaData\n ? (JSON.parse(options?.metaData) as object)\n : undefined;\n this.steps = [];\n }\n}\n"],"mappings":"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MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,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","names":["range","path","set","_","fs","dir","resolve","reject","path","reject","applyEach","_","index","once","promiseCallback","filter","fs","path","_","err","err2","er","er2","fs","path","self","index","fs","queue","createWriteStream","path","options","cb","data","src","dest","flags","go$readdir","mode","retry","nextTick","Buffer","Buffer","concat","err","self","Buffer","_","keys","self","Buffer","self","Buffer","index","self","n","path","apply","apply","transform","index","constant","Symbol","Symbol","Symbol","constant","isArrayLike","isArrayLike","index","index","Buffer","isArrayLike","index","self","EventTarget","defineEventAttribute","require_util","Blob","isBlob","reject","range","String","ERR_INVALID_ARG_TYPE","isAsync","process","ERR_INVALID_ARG_TYPE","once","Promise","reject","require_destroy","process","Symbol","self","err","ERR_INVALID_ARG_TYPE","Uint8Array","Buffer","_","process","Buffer","ERR_INVALID_ARG_TYPE","isAsync","require_readable","process","Promise","Symbol","Buffer","ERR_INVALID_ARG_TYPE","reject","index","self","process","Error","Symbol","Buffer","ERR_INVALID_ARG_TYPE","stream","state","process","ERR_INVALID_ARG_TYPE","Blob","isBlob","then","Symbol","require_passthrough","process","Promise","once","ERR_INVALID_ARG_TYPE","reject","err","onError","endFn","compose","writable","readable","ERR_INVALID_ARG_TYPE","Boolean","Number","Promise","Symbol","compose","map","queue","asIndexedPairs","index","some","filter","every","options","reduce","flatMap","drop","take","Promise","reject","require_stream","Buffer","compose","fn","index","Symbol","index","index","index","index","index","index","Map","Map","map","index","index","index","index","index","index","index","isArrayLike","Set","index","Set","index","transform","parent","i","acc","_","start","final","ext","path","filter","parent","_","_","index","v","bf","_","p","ret","reject","res","path","dir","p","index","_","fs","filter","queue","process","index","path","rest","parent","path","abs","_","target","fs","path","destBase","result","fs","path","err","fs","path","self","reject","module","require_util","require_util","module","CRC32","process","fill","concat","map","data","reject","onerror","index","self","reject","require_constants","self","self","err","index","self","module","crypto","reject","archiver"]}