From 14c59cb0f2a3b6399d6b0847784f695868738bd6 Mon Sep 17 00:00:00 2001 From: exoego Date: Sat, 11 May 2024 23:27:20 +0900 Subject: [PATCH] Minify --- dist/index.mjs | 6910 +----------------------------------------------- esbuild.mjs | 1 + 2 files changed, 22 insertions(+), 6889 deletions(-) diff --git a/dist/index.mjs b/dist/index.mjs index 7009a1b..0ba77b3 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -1,6902 +1,34 @@ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); - -// node_modules/balanced-match/index.js -var require_balanced_match = __commonJS({ - "node_modules/balanced-match/index.js"(exports, module) { - "use strict"; - module.exports = balanced; - function balanced(a, b, str) { - if (a instanceof RegExp) - a = maybeMatch(a, str); - if (b instanceof RegExp) - b = maybeMatch(b, str); - var r = range(a, b, str); - return r && { - start: r[0], - end: r[1], - pre: str.slice(0, r[0]), - body: str.slice(r[0] + a.length, r[1]), - post: str.slice(r[1] + b.length) - }; - } - function maybeMatch(reg, str) { - var m = str.match(reg); - return m ? m[0] : null; - } - balanced.range = range; - function range(a, b, str) { - var begs, beg, left, right, result; - var ai = str.indexOf(a); - var bi = str.indexOf(b, ai + 1); - var i = ai; - if (ai >= 0 && bi > 0) { - if (a === b) { - return [ai, bi]; - } - begs = []; - left = str.length; - while (i >= 0 && !result) { - if (i == ai) { - begs.push(i); - ai = str.indexOf(a, i + 1); - } else if (begs.length == 1) { - result = [begs.pop(), bi]; - } else { - beg = begs.pop(); - if (beg < left) { - left = beg; - right = bi; - } - bi = str.indexOf(b, i + 1); - } - i = ai < bi && ai >= 0 ? ai : bi; - } - if (begs.length) { - result = [left, right]; - } - } - return result; - } - } -}); - -// node_modules/brace-expansion/index.js -var require_brace_expansion = __commonJS({ - "node_modules/brace-expansion/index.js"(exports, module) { - var balanced = require_balanced_match(); - module.exports = expandTop; - var escSlash = "\0SLASH" + Math.random() + "\0"; - var escOpen = "\0OPEN" + Math.random() + "\0"; - var escClose = "\0CLOSE" + Math.random() + "\0"; - var escComma = "\0COMMA" + Math.random() + "\0"; - var escPeriod = "\0PERIOD" + Math.random() + "\0"; - function numeric(str) { - return parseInt(str, 10) == str ? parseInt(str, 10) : str.charCodeAt(0); - } - function escapeBraces(str) { - return str.split("\\\\").join(escSlash).split("\\{").join(escOpen).split("\\}").join(escClose).split("\\,").join(escComma).split("\\.").join(escPeriod); - } - function unescapeBraces(str) { - return str.split(escSlash).join("\\").split(escOpen).join("{").split(escClose).join("}").split(escComma).join(",").split(escPeriod).join("."); - } - function parseCommaParts(str) { - if (!str) - return [""]; - var parts = []; - var m = balanced("{", "}", str); - if (!m) - return str.split(","); - var pre = m.pre; - var body = m.body; - var post = m.post; - var p = pre.split(","); - p[p.length - 1] += "{" + body + "}"; - var postParts = parseCommaParts(post); - if (post.length) { - p[p.length - 1] += postParts.shift(); - p.push.apply(p, postParts); - } - parts.push.apply(parts, p); - return parts; - } - function expandTop(str) { - if (!str) - return []; - if (str.substr(0, 2) === "{}") { - str = "\\{\\}" + str.substr(2); - } - return expand2(escapeBraces(str), true).map(unescapeBraces); - } - function embrace(str) { - return "{" + str + "}"; - } - function isPadded(el) { - return /^-?0\d/.test(el); - } - function lte(i, y) { - return i <= y; - } - function gte(i, y) { - return i >= y; - } - function expand2(str, isTop) { - var expansions = []; - var m = balanced("{", "}", str); - if (!m) - return [str]; - var pre = m.pre; - var post = m.post.length ? expand2(m.post, false) : [""]; - if (/\$$/.test(m.pre)) { - for (var k = 0; k < post.length; k++) { - var expansion = pre + "{" + m.body + "}" + post[k]; - expansions.push(expansion); - } - } else { - var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); - var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); - var isSequence = isNumericSequence || isAlphaSequence; - var isOptions = m.body.indexOf(",") >= 0; - if (!isSequence && !isOptions) { - if (m.post.match(/,.*\}/)) { - str = m.pre + "{" + m.body + escClose + m.post; - return expand2(str); - } - return [str]; - } - var n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts(m.body); - if (n.length === 1) { - n = expand2(n[0], false).map(embrace); - if (n.length === 1) { - return post.map(function(p) { - return m.pre + n[0] + p; - }); - } - } - } - var N; - if (isSequence) { - var x = numeric(n[0]); - var y = numeric(n[1]); - var width = Math.max(n[0].length, n[1].length); - var incr = n.length == 3 ? Math.abs(numeric(n[2])) : 1; - var test = lte; - var reverse = y < x; - if (reverse) { - incr *= -1; - test = gte; - } - var pad = n.some(isPadded); - N = []; - for (var i = x; test(i, y); i += incr) { - var c; - if (isAlphaSequence) { - c = String.fromCharCode(i); - if (c === "\\") - c = ""; - } else { - c = String(i); - if (pad) { - var need = width - c.length; - if (need > 0) { - var z = new Array(need + 1).join("0"); - if (i < 0) - c = "-" + z + c.slice(1); - else - c = z + c; - } - } - } - N.push(c); - } - } else { - N = []; - for (var j = 0; j < n.length; j++) { - N.push.apply(N, expand2(n[j], false)); - } - } - for (var j = 0; j < N.length; j++) { - for (var k = 0; k < post.length; k++) { - var expansion = pre + N[j] + post[k]; - if (!isTop || isSequence || expansion) - expansions.push(expansion); - } - } - } - return expansions; - } - } -}); - -// src/index.ts -import { pathToFileURL } from "node:url"; - -// src/compare.ts -import fs3 from "node:fs"; -import path3 from "node:path"; - -// src/report.ts -import fs2 from "node:fs"; -import path2 from "node:path"; -import process2 from "node:process"; -import * as console2 from "node:console"; - -// node_modules/minimatch/dist/esm/index.js -var import_brace_expansion = __toESM(require_brace_expansion(), 1); - -// node_modules/minimatch/dist/esm/assert-valid-pattern.js -var MAX_PATTERN_LENGTH = 1024 * 64; -var assertValidPattern = (pattern) => { - if (typeof pattern !== "string") { - throw new TypeError("invalid pattern"); - } - if (pattern.length > MAX_PATTERN_LENGTH) { - throw new TypeError("pattern is too long"); - } -}; - -// node_modules/minimatch/dist/esm/brace-expressions.js -var posixClasses = { - "[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true], - "[:alpha:]": ["\\p{L}\\p{Nl}", true], - "[:ascii:]": ["\\x00-\\x7f", false], - "[:blank:]": ["\\p{Zs}\\t", true], - "[:cntrl:]": ["\\p{Cc}", true], - "[:digit:]": ["\\p{Nd}", true], - "[:graph:]": ["\\p{Z}\\p{C}", true, true], - "[:lower:]": ["\\p{Ll}", true], - "[:print:]": ["\\p{C}", true], - "[:punct:]": ["\\p{P}", true], - "[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", true], - "[:upper:]": ["\\p{Lu}", true], - "[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true], - "[:xdigit:]": ["A-Fa-f0-9", false] -}; -var braceEscape = (s) => s.replace(/[[\]\\-]/g, "\\$&"); -var regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); -var rangesToString = (ranges) => ranges.join(""); -var parseClass = (glob2, position) => { - const pos = position; - if (glob2.charAt(pos) !== "[") { - throw new Error("not in a brace expression"); - } - const ranges = []; - const negs = []; - let i = pos + 1; - let sawStart = false; - let uflag = false; - let escaping = false; - let negate = false; - let endPos = pos; - let rangeStart = ""; - WHILE: - while (i < glob2.length) { - const c = glob2.charAt(i); - if ((c === "!" || c === "^") && i === pos + 1) { - negate = true; - i++; - continue; - } - if (c === "]" && sawStart && !escaping) { - endPos = i + 1; - break; - } - sawStart = true; - if (c === "\\") { - if (!escaping) { - escaping = true; - i++; - continue; - } - } - if (c === "[" && !escaping) { - for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) { - if (glob2.startsWith(cls, i)) { - if (rangeStart) { - return ["$.", false, glob2.length - pos, true]; - } - i += cls.length; - if (neg) - negs.push(unip); - else - ranges.push(unip); - uflag = uflag || u; - continue WHILE; - } - } - } - escaping = false; - if (rangeStart) { - if (c > rangeStart) { - ranges.push(braceEscape(rangeStart) + "-" + braceEscape(c)); - } else if (c === rangeStart) { - ranges.push(braceEscape(c)); - } - rangeStart = ""; - i++; - continue; - } - if (glob2.startsWith("-]", i + 1)) { - ranges.push(braceEscape(c + "-")); - i += 2; - continue; - } - if (glob2.startsWith("-", i + 1)) { - rangeStart = c; - i += 2; - continue; - } - ranges.push(braceEscape(c)); - i++; - } - if (endPos < i) { - return ["", false, 0, false]; - } - if (!ranges.length && !negs.length) { - return ["$.", false, glob2.length - pos, true]; - } - if (negs.length === 0 && ranges.length === 1 && /^\\?.$/.test(ranges[0]) && !negate) { - const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]; - return [regexpEscape(r), false, endPos - pos, false]; - } - const sranges = "[" + (negate ? "^" : "") + rangesToString(ranges) + "]"; - const snegs = "[" + (negate ? "" : "^") + rangesToString(negs) + "]"; - const comb = ranges.length && negs.length ? "(" + sranges + "|" + snegs + ")" : ranges.length ? sranges : snegs; - return [comb, uflag, endPos - pos, true]; -}; - -// node_modules/minimatch/dist/esm/unescape.js -var unescape = (s, { windowsPathsNoEscape = false } = {}) => { - return windowsPathsNoEscape ? s.replace(/\[([^\/\\])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, "$1$2").replace(/\\([^\/])/g, "$1"); -}; - -// node_modules/minimatch/dist/esm/ast.js -var types = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]); -var isExtglobType = (c) => types.has(c); -var startNoTraversal = "(?!(?:^|/)\\.\\.?(?:$|/))"; -var startNoDot = "(?!\\.)"; -var addPatternStart = /* @__PURE__ */ new Set(["[", "."]); -var justDots = /* @__PURE__ */ new Set(["..", "."]); -var reSpecials = new Set("().*{}+?[]^$\\!"); -var regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); -var qmark = "[^/]"; -var star = qmark + "*?"; -var starNoEmpty = qmark + "+?"; -var AST = class _AST { - type; - #root; - #hasMagic; - #uflag = false; - #parts = []; - #parent; - #parentIndex; - #negs; - #filledNegs = false; - #options; - #toString; - // set to true if it's an extglob with no children - // (which really means one child of '') - #emptyExt = false; - constructor(type, parent, options = {}) { - this.type = type; - if (type) - this.#hasMagic = true; - this.#parent = parent; - this.#root = this.#parent ? this.#parent.#root : this; - this.#options = this.#root === this ? options : this.#root.#options; - this.#negs = this.#root === this ? [] : this.#root.#negs; - if (type === "!" && !this.#root.#filledNegs) - this.#negs.push(this); - this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0; - } - get hasMagic() { - if (this.#hasMagic !== void 0) - return this.#hasMagic; - for (const p of this.#parts) { - if (typeof p === "string") - continue; - if (p.type || p.hasMagic) - return this.#hasMagic = true; - } - return this.#hasMagic; - } - // reconstructs the pattern - toString() { - if (this.#toString !== void 0) - return this.#toString; - if (!this.type) { - return this.#toString = this.#parts.map((p) => String(p)).join(""); - } else { - return this.#toString = this.type + "(" + this.#parts.map((p) => String(p)).join("|") + ")"; - } - } - #fillNegs() { - if (this !== this.#root) - throw new Error("should only call on root"); - if (this.#filledNegs) - return this; - this.toString(); - this.#filledNegs = true; - let n; - while (n = this.#negs.pop()) { - if (n.type !== "!") - continue; - let p = n; - let pp = p.#parent; - while (pp) { - for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) { - for (const part of n.#parts) { - if (typeof part === "string") { - throw new Error("string part in extglob AST??"); - } - part.copyIn(pp.#parts[i]); - } - } - p = pp; - pp = p.#parent; - } - } - return this; - } - push(...parts) { - for (const p of parts) { - if (p === "") - continue; - if (typeof p !== "string" && !(p instanceof _AST && p.#parent === this)) { - throw new Error("invalid part: " + p); - } - this.#parts.push(p); - } - } - toJSON() { - const ret = this.type === null ? this.#parts.slice().map((p) => typeof p === "string" ? p : p.toJSON()) : [this.type, ...this.#parts.map((p) => p.toJSON())]; - if (this.isStart() && !this.type) - ret.unshift([]); - if (this.isEnd() && (this === this.#root || this.#root.#filledNegs && this.#parent?.type === "!")) { - ret.push({}); - } - return ret; - } - isStart() { - if (this.#root === this) - return true; - if (!this.#parent?.isStart()) - return false; - if (this.#parentIndex === 0) - return true; - const p = this.#parent; - for (let i = 0; i < this.#parentIndex; i++) { - const pp = p.#parts[i]; - if (!(pp instanceof _AST && pp.type === "!")) { - return false; - } - } - return true; - } - isEnd() { - if (this.#root === this) - return true; - if (this.#parent?.type === "!") - return true; - if (!this.#parent?.isEnd()) - return false; - if (!this.type) - return this.#parent?.isEnd(); - const pl = this.#parent ? this.#parent.#parts.length : 0; - return this.#parentIndex === pl - 1; - } - copyIn(part) { - if (typeof part === "string") - this.push(part); - else - this.push(part.clone(this)); - } - clone(parent) { - const c = new _AST(this.type, parent); - for (const p of this.#parts) { - c.copyIn(p); - } - return c; - } - static #parseAST(str, ast, pos, opt) { - let escaping = false; - let inBrace = false; - let braceStart = -1; - let braceNeg = false; - if (ast.type === null) { - let i2 = pos; - let acc2 = ""; - while (i2 < str.length) { - const c = str.charAt(i2++); - if (escaping || c === "\\") { - escaping = !escaping; - acc2 += c; - continue; - } - if (inBrace) { - if (i2 === braceStart + 1) { - if (c === "^" || c === "!") { - braceNeg = true; - } - } else if (c === "]" && !(i2 === braceStart + 2 && braceNeg)) { - inBrace = false; - } - acc2 += c; - continue; - } else if (c === "[") { - inBrace = true; - braceStart = i2; - braceNeg = false; - acc2 += c; - continue; - } - if (!opt.noext && isExtglobType(c) && str.charAt(i2) === "(") { - ast.push(acc2); - acc2 = ""; - const ext2 = new _AST(c, ast); - i2 = _AST.#parseAST(str, ext2, i2, opt); - ast.push(ext2); - continue; - } - acc2 += c; - } - ast.push(acc2); - return i2; - } - let i = pos + 1; - let part = new _AST(null, ast); - const parts = []; - let acc = ""; - while (i < str.length) { - const c = str.charAt(i++); - if (escaping || c === "\\") { - escaping = !escaping; - acc += c; - continue; - } - if (inBrace) { - if (i === braceStart + 1) { - if (c === "^" || c === "!") { - braceNeg = true; - } - } else if (c === "]" && !(i === braceStart + 2 && braceNeg)) { - inBrace = false; - } - acc += c; - continue; - } else if (c === "[") { - inBrace = true; - braceStart = i; - braceNeg = false; - acc += c; - continue; - } - if (isExtglobType(c) && str.charAt(i) === "(") { - part.push(acc); - acc = ""; - const ext2 = new _AST(c, part); - part.push(ext2); - i = _AST.#parseAST(str, ext2, i, opt); - continue; - } - if (c === "|") { - part.push(acc); - acc = ""; - parts.push(part); - part = new _AST(null, ast); - continue; - } - if (c === ")") { - if (acc === "" && ast.#parts.length === 0) { - ast.#emptyExt = true; - } - part.push(acc); - acc = ""; - ast.push(...parts, part); - return i; - } - acc += c; - } - ast.type = null; - ast.#hasMagic = void 0; - ast.#parts = [str.substring(pos - 1)]; - return i; - } - static fromGlob(pattern, options = {}) { - const ast = new _AST(null, void 0, options); - _AST.#parseAST(pattern, ast, 0, options); - return ast; - } - // returns the regular expression if there's magic, or the unescaped - // string if not. - toMMPattern() { - if (this !== this.#root) - return this.#root.toMMPattern(); - const glob2 = this.toString(); - const [re, body, hasMagic2, uflag] = this.toRegExpSource(); - const anyMagic = hasMagic2 || this.#hasMagic || this.#options.nocase && !this.#options.nocaseMagicOnly && glob2.toUpperCase() !== glob2.toLowerCase(); - if (!anyMagic) { - return body; - } - const flags = (this.#options.nocase ? "i" : "") + (uflag ? "u" : ""); - return Object.assign(new RegExp(`^${re}$`, flags), { - _src: re, - _glob: glob2 - }); - } - get options() { - return this.#options; - } - // returns the string match, the regexp source, whether there's magic - // in the regexp (so a regular expression is required) and whether or - // not the uflag is needed for the regular expression (for posix classes) - // TODO: instead of injecting the start/end at this point, just return - // the BODY of the regexp, along with the start/end portions suitable - // for binding the start/end in either a joined full-path makeRe context - // (where we bind to (^|/), or a standalone matchPart context (where - // we bind to ^, and not /). Otherwise slashes get duped! - // - // In part-matching mode, the start is: - // - if not isStart: nothing - // - if traversal possible, but not allowed: ^(?!\.\.?$) - // - if dots allowed or not possible: ^ - // - if dots possible and not allowed: ^(?!\.) - // end is: - // - if not isEnd(): nothing - // - else: $ - // - // In full-path matching mode, we put the slash at the START of the - // pattern, so start is: - // - if first pattern: same as part-matching mode - // - if not isStart(): nothing - // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/)) - // - if dots allowed or not possible: / - // - if dots possible and not allowed: /(?!\.) - // end is: - // - if last pattern, same as part-matching mode - // - else nothing - // - // Always put the (?:$|/) on negated tails, though, because that has to be - // there to bind the end of the negated pattern portion, and it's easier to - // just stick it in now rather than try to inject it later in the middle of - // the pattern. - // - // We can just always return the same end, and leave it up to the caller - // to know whether it's going to be used joined or in parts. - // And, if the start is adjusted slightly, can do the same there: - // - if not isStart: nothing - // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$) - // - if dots allowed or not possible: (?:/|^) - // - if dots possible and not allowed: (?:/|^)(?!\.) - // - // But it's better to have a simpler binding without a conditional, for - // performance, so probably better to return both start options. - // - // Then the caller just ignores the end if it's not the first pattern, - // and the start always gets applied. - // - // But that's always going to be $ if it's the ending pattern, or nothing, - // so the caller can just attach $ at the end of the pattern when building. - // - // So the todo is: - // - better detect what kind of start is needed - // - return both flavors of starting pattern - // - attach $ at the end of the pattern when creating the actual RegExp - // - // Ah, but wait, no, that all only applies to the root when the first pattern - // is not an extglob. If the first pattern IS an extglob, then we need all - // that dot prevention biz to live in the extglob portions, because eg - // +(*|.x*) can match .xy but not .yx. - // - // So, return the two flavors if it's #root and the first child is not an - // AST, otherwise leave it to the child AST to handle it, and there, - // use the (?:^|/) style of start binding. - // - // Even simplified further: - // - Since the start for a join is eg /(?!\.) and the start for a part - // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root - // or start or whatever) and prepend ^ or / at the Regexp construction. - toRegExpSource(allowDot) { - const dot = allowDot ?? !!this.#options.dot; - if (this.#root === this) - this.#fillNegs(); - if (!this.type) { - const noEmpty = this.isStart() && this.isEnd(); - const src = this.#parts.map((p) => { - const [re, _, hasMagic2, uflag] = typeof p === "string" ? _AST.#parseGlob(p, this.#hasMagic, noEmpty) : p.toRegExpSource(allowDot); - this.#hasMagic = this.#hasMagic || hasMagic2; - this.#uflag = this.#uflag || uflag; - return re; - }).join(""); - let start2 = ""; - if (this.isStart()) { - if (typeof this.#parts[0] === "string") { - const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]); - if (!dotTravAllowed) { - const aps = addPatternStart; - const needNoTrav = ( - // dots are allowed, and the pattern starts with [ or . - dot && aps.has(src.charAt(0)) || // the pattern starts with \., and then [ or . - src.startsWith("\\.") && aps.has(src.charAt(2)) || // the pattern starts with \.\., and then [ or . - src.startsWith("\\.\\.") && aps.has(src.charAt(4)) - ); - const needNoDot = !dot && !allowDot && aps.has(src.charAt(0)); - start2 = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ""; - } - } - } - let end = ""; - if (this.isEnd() && this.#root.#filledNegs && this.#parent?.type === "!") { - end = "(?:$|\\/)"; - } - const final2 = start2 + src + end; - return [ - final2, - unescape(src), - this.#hasMagic = !!this.#hasMagic, - this.#uflag - ]; - } - const repeated = this.type === "*" || this.type === "+"; - const start = this.type === "!" ? "(?:(?!(?:" : "(?:"; - let body = this.#partsToRegExp(dot); - if (this.isStart() && this.isEnd() && !body && this.type !== "!") { - const s = this.toString(); - this.#parts = [s]; - this.type = null; - this.#hasMagic = void 0; - return [s, unescape(this.toString()), false, false]; - } - let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ? "" : this.#partsToRegExp(true); - if (bodyDotAllowed === body) { - bodyDotAllowed = ""; - } - if (bodyDotAllowed) { - body = `(?:${body})(?:${bodyDotAllowed})*?`; - } - let final = ""; - if (this.type === "!" && this.#emptyExt) { - final = (this.isStart() && !dot ? startNoDot : "") + starNoEmpty; - } else { - const close = this.type === "!" ? ( - // !() must match something,but !(x) can match '' - "))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + star + ")" - ) : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`; - final = start + body + close; - } - return [ - final, - unescape(body), - this.#hasMagic = !!this.#hasMagic, - this.#uflag - ]; - } - #partsToRegExp(dot) { - return this.#parts.map((p) => { - if (typeof p === "string") { - throw new Error("string type in extglob ast??"); - } - const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot); - this.#uflag = this.#uflag || uflag; - return re; - }).filter((p) => !(this.isStart() && this.isEnd()) || !!p).join("|"); - } - static #parseGlob(glob2, hasMagic2, noEmpty = false) { - let escaping = false; - let re = ""; - let uflag = false; - for (let i = 0; i < glob2.length; i++) { - const c = glob2.charAt(i); - if (escaping) { - escaping = false; - re += (reSpecials.has(c) ? "\\" : "") + c; - continue; - } - if (c === "\\") { - if (i === glob2.length - 1) { - re += "\\\\"; - } else { - escaping = true; - } - continue; - } - if (c === "[") { - const [src, needUflag, consumed, magic] = parseClass(glob2, i); - if (consumed) { - re += src; - uflag = uflag || needUflag; - i += consumed - 1; - hasMagic2 = hasMagic2 || magic; - continue; - } - } - if (c === "*") { - if (noEmpty && glob2 === "*") - re += starNoEmpty; - else - re += star; - hasMagic2 = true; - continue; - } - if (c === "?") { - re += qmark; - hasMagic2 = true; - continue; - } - re += regExpEscape(c); - } - return [re, unescape(glob2), !!hasMagic2, uflag]; - } -}; - -// node_modules/minimatch/dist/esm/escape.js -var escape = (s, { windowsPathsNoEscape = false } = {}) => { - return windowsPathsNoEscape ? s.replace(/[?*()[\]]/g, "[$&]") : s.replace(/[?*()[\]\\]/g, "\\$&"); -}; - -// node_modules/minimatch/dist/esm/index.js -var minimatch = (p, pattern, options = {}) => { - assertValidPattern(pattern); - if (!options.nocomment && pattern.charAt(0) === "#") { - return false; - } - return new Minimatch(pattern, options).match(p); -}; -var starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/; -var starDotExtTest = (ext2) => (f) => !f.startsWith(".") && f.endsWith(ext2); -var starDotExtTestDot = (ext2) => (f) => f.endsWith(ext2); -var starDotExtTestNocase = (ext2) => { - ext2 = ext2.toLowerCase(); - return (f) => !f.startsWith(".") && f.toLowerCase().endsWith(ext2); -}; -var starDotExtTestNocaseDot = (ext2) => { - ext2 = ext2.toLowerCase(); - return (f) => f.toLowerCase().endsWith(ext2); -}; -var starDotStarRE = /^\*+\.\*+$/; -var starDotStarTest = (f) => !f.startsWith(".") && f.includes("."); -var starDotStarTestDot = (f) => f !== "." && f !== ".." && f.includes("."); -var dotStarRE = /^\.\*+$/; -var dotStarTest = (f) => f !== "." && f !== ".." && f.startsWith("."); -var starRE = /^\*+$/; -var starTest = (f) => f.length !== 0 && !f.startsWith("."); -var starTestDot = (f) => f.length !== 0 && f !== "." && f !== ".."; -var qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/; -var qmarksTestNocase = ([$0, ext2 = ""]) => { - const noext = qmarksTestNoExt([$0]); - if (!ext2) - return noext; - ext2 = ext2.toLowerCase(); - return (f) => noext(f) && f.toLowerCase().endsWith(ext2); -}; -var qmarksTestNocaseDot = ([$0, ext2 = ""]) => { - const noext = qmarksTestNoExtDot([$0]); - if (!ext2) - return noext; - ext2 = ext2.toLowerCase(); - return (f) => noext(f) && f.toLowerCase().endsWith(ext2); -}; -var qmarksTestDot = ([$0, ext2 = ""]) => { - const noext = qmarksTestNoExtDot([$0]); - return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2); -}; -var qmarksTest = ([$0, ext2 = ""]) => { - const noext = qmarksTestNoExt([$0]); - return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2); -}; -var qmarksTestNoExt = ([$0]) => { - const len = $0.length; - return (f) => f.length === len && !f.startsWith("."); -}; -var qmarksTestNoExtDot = ([$0]) => { - const len = $0.length; - return (f) => f.length === len && f !== "." && f !== ".."; -}; -var defaultPlatform = typeof process === "object" && process ? typeof process.env === "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; -var path = { - win32: { sep: "\\" }, - posix: { sep: "/" } -}; -var sep = defaultPlatform === "win32" ? path.win32.sep : path.posix.sep; -minimatch.sep = sep; -var GLOBSTAR = Symbol("globstar **"); -minimatch.GLOBSTAR = GLOBSTAR; -var qmark2 = "[^/]"; -var star2 = qmark2 + "*?"; -var twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?"; -var twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?"; -var filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options); -minimatch.filter = filter; -var ext = (a, b = {}) => Object.assign({}, a, b); -var defaults = (def) => { - if (!def || typeof def !== "object" || !Object.keys(def).length) { - return minimatch; - } - const orig = minimatch; - const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options)); - return Object.assign(m, { - Minimatch: class Minimatch extends orig.Minimatch { - constructor(pattern, options = {}) { - super(pattern, ext(def, options)); - } - static defaults(options) { - return orig.defaults(ext(def, options)).Minimatch; - } - }, - AST: class AST extends orig.AST { - /* c8 ignore start */ - constructor(type, parent, options = {}) { - super(type, parent, ext(def, options)); - } - /* c8 ignore stop */ - static fromGlob(pattern, options = {}) { - return orig.AST.fromGlob(pattern, ext(def, options)); - } - }, - unescape: (s, options = {}) => orig.unescape(s, ext(def, options)), - escape: (s, options = {}) => orig.escape(s, ext(def, options)), - filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)), - defaults: (options) => orig.defaults(ext(def, options)), - makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)), - braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)), - match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)), - sep: orig.sep, - GLOBSTAR - }); -}; -minimatch.defaults = defaults; -var braceExpand = (pattern, options = {}) => { - assertValidPattern(pattern); - if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { - return [pattern]; - } - return (0, import_brace_expansion.default)(pattern); -}; -minimatch.braceExpand = braceExpand; -var makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe(); -minimatch.makeRe = makeRe; -var match = (list, pattern, options = {}) => { - const mm = new Minimatch(pattern, options); - list = list.filter((f) => mm.match(f)); - if (mm.options.nonull && !list.length) { - list.push(pattern); - } - return list; -}; -minimatch.match = match; -var globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/; -var regExpEscape2 = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); -var Minimatch = class { - options; - set; - pattern; - windowsPathsNoEscape; - nonegate; - negate; - comment; - empty; - preserveMultipleSlashes; - partial; - globSet; - globParts; - nocase; - isWindows; - platform; - windowsNoMagicRoot; - regexp; - constructor(pattern, options = {}) { - assertValidPattern(pattern); - options = options || {}; - this.options = options; - this.pattern = pattern; - this.platform = options.platform || defaultPlatform; - this.isWindows = this.platform === "win32"; - this.windowsPathsNoEscape = !!options.windowsPathsNoEscape || options.allowWindowsEscape === false; - if (this.windowsPathsNoEscape) { - this.pattern = this.pattern.replace(/\\/g, "/"); - } - this.preserveMultipleSlashes = !!options.preserveMultipleSlashes; - this.regexp = null; - this.negate = false; - this.nonegate = !!options.nonegate; - this.comment = false; - this.empty = false; - this.partial = !!options.partial; - this.nocase = !!this.options.nocase; - this.windowsNoMagicRoot = options.windowsNoMagicRoot !== void 0 ? options.windowsNoMagicRoot : !!(this.isWindows && this.nocase); - this.globSet = []; - this.globParts = []; - this.set = []; - this.make(); - } - hasMagic() { - if (this.options.magicalBraces && this.set.length > 1) { - return true; - } - for (const pattern of this.set) { - for (const part of pattern) { - if (typeof part !== "string") - return true; - } - } - return false; - } - debug(..._) { - } - make() { - const pattern = this.pattern; - const options = this.options; - if (!options.nocomment && pattern.charAt(0) === "#") { - this.comment = true; - return; - } - if (!pattern) { - this.empty = true; - return; - } - this.parseNegate(); - this.globSet = [...new Set(this.braceExpand())]; - if (options.debug) { - this.debug = (...args) => console.error(...args); - } - this.debug(this.pattern, this.globSet); - const rawGlobParts = this.globSet.map((s) => this.slashSplit(s)); - this.globParts = this.preprocess(rawGlobParts); - this.debug(this.pattern, this.globParts); - let set = this.globParts.map((s, _, __) => { - if (this.isWindows && this.windowsNoMagicRoot) { - const isUNC = s[0] === "" && s[1] === "" && (s[2] === "?" || !globMagic.test(s[2])) && !globMagic.test(s[3]); - const isDrive = /^[a-z]:/i.test(s[0]); - if (isUNC) { - return [...s.slice(0, 4), ...s.slice(4).map((ss) => this.parse(ss))]; - } else if (isDrive) { - return [s[0], ...s.slice(1).map((ss) => this.parse(ss))]; - } - } - return s.map((ss) => this.parse(ss)); - }); - this.debug(this.pattern, set); - this.set = set.filter((s) => s.indexOf(false) === -1); - if (this.isWindows) { - for (let i = 0; i < this.set.length; i++) { - const p = this.set[i]; - if (p[0] === "" && p[1] === "" && this.globParts[i][2] === "?" && typeof p[3] === "string" && /^[a-z]:$/i.test(p[3])) { - p[2] = "?"; - } - } - } - this.debug(this.pattern, this.set); - } - // various transforms to equivalent pattern sets that are - // faster to process in a filesystem walk. The goal is to - // eliminate what we can, and push all ** patterns as far - // to the right as possible, even if it increases the number - // of patterns that we have to process. - preprocess(globParts) { - if (this.options.noglobstar) { - for (let i = 0; i < globParts.length; i++) { - for (let j = 0; j < globParts[i].length; j++) { - if (globParts[i][j] === "**") { - globParts[i][j] = "*"; - } - } - } - } - const { optimizationLevel = 1 } = this.options; - if (optimizationLevel >= 2) { - globParts = this.firstPhasePreProcess(globParts); - globParts = this.secondPhasePreProcess(globParts); - } else if (optimizationLevel >= 1) { - globParts = this.levelOneOptimize(globParts); - } else { - globParts = this.adjascentGlobstarOptimize(globParts); - } - return globParts; - } - // just get rid of adjascent ** portions - adjascentGlobstarOptimize(globParts) { - return globParts.map((parts) => { - let gs = -1; - while (-1 !== (gs = parts.indexOf("**", gs + 1))) { - let i = gs; - while (parts[i + 1] === "**") { - i++; - } - if (i !== gs) { - parts.splice(gs, i - gs); - } - } - return parts; - }); - } - // get rid of adjascent ** and resolve .. portions - levelOneOptimize(globParts) { - return globParts.map((parts) => { - parts = parts.reduce((set, part) => { - const prev = set[set.length - 1]; - if (part === "**" && prev === "**") { - return set; - } - if (part === "..") { - if (prev && prev !== ".." && prev !== "." && prev !== "**") { - set.pop(); - return set; - } - } - set.push(part); - return set; - }, []); - return parts.length === 0 ? [""] : parts; - }); - } - levelTwoFileOptimize(parts) { - if (!Array.isArray(parts)) { - parts = this.slashSplit(parts); - } - let didSomething = false; - do { - didSomething = false; - if (!this.preserveMultipleSlashes) { - for (let i = 1; i < parts.length - 1; i++) { - const p = parts[i]; - if (i === 1 && p === "" && parts[0] === "") - continue; - if (p === "." || p === "") { - didSomething = true; - parts.splice(i, 1); - i--; - } - } - if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) { - didSomething = true; - parts.pop(); - } - } - let dd = 0; - while (-1 !== (dd = parts.indexOf("..", dd + 1))) { - const p = parts[dd - 1]; - if (p && p !== "." && p !== ".." && p !== "**") { - didSomething = true; - parts.splice(dd - 1, 2); - dd -= 2; - } - } - } while (didSomething); - return parts.length === 0 ? [""] : parts; - } - // First phase: single-pattern processing - //
 is 1 or more portions
-  //  is 1 or more portions
-  // 

is any portion other than ., .., '', or ** - // is . or '' - // - // **/.. is *brutal* for filesystem walking performance, because - // it effectively resets the recursive walk each time it occurs, - // and ** cannot be reduced out by a .. pattern part like a regexp - // or most strings (other than .., ., and '') can be. - // - //

/**/../

/

/ -> {

/../

/

/,

/**/

/

/} - //

// -> 
/
-  // 
/

/../ ->

/
-  // **/**/ -> **/
-  //
-  // **/*/ -> */**/ <== not valid because ** doesn't follow
-  // this WOULD be allowed if ** did follow symlinks, or * didn't
-  firstPhasePreProcess(globParts) {
-    let didSomething = false;
-    do {
-      didSomething = false;
-      for (let parts of globParts) {
-        let gs = -1;
-        while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
-          let gss = gs;
-          while (parts[gss + 1] === "**") {
-            gss++;
-          }
-          if (gss > gs) {
-            parts.splice(gs + 1, gss - gs);
-          }
-          let next = parts[gs + 1];
-          const p = parts[gs + 2];
-          const p2 = parts[gs + 3];
-          if (next !== "..")
-            continue;
-          if (!p || p === "." || p === ".." || !p2 || p2 === "." || p2 === "..") {
-            continue;
-          }
-          didSomething = true;
-          parts.splice(gs, 1);
-          const other = parts.slice(0);
-          other[gs] = "**";
-          globParts.push(other);
-          gs--;
-        }
-        if (!this.preserveMultipleSlashes) {
-          for (let i = 1; i < parts.length - 1; i++) {
-            const p = parts[i];
-            if (i === 1 && p === "" && parts[0] === "")
-              continue;
-            if (p === "." || p === "") {
-              didSomething = true;
-              parts.splice(i, 1);
-              i--;
-            }
-          }
-          if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
-            didSomething = true;
-            parts.pop();
-          }
-        }
-        let dd = 0;
-        while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
-          const p = parts[dd - 1];
-          if (p && p !== "." && p !== ".." && p !== "**") {
-            didSomething = true;
-            const needDot = dd === 1 && parts[dd + 1] === "**";
-            const splin = needDot ? ["."] : [];
-            parts.splice(dd - 1, 2, ...splin);
-            if (parts.length === 0)
-              parts.push("");
-            dd -= 2;
-          }
-        }
-      }
-    } while (didSomething);
-    return globParts;
-  }
-  // second phase: multi-pattern dedupes
-  // {
/*/,
/

/} ->

/*/
-  // {
/,
/} -> 
/
-  // {
/**/,
/} -> 
/**/
-  //
-  // {
/**/,
/**/

/} ->

/**/
-  // ^-- not valid because ** doens't follow symlinks
-  secondPhasePreProcess(globParts) {
-    for (let i = 0; i < globParts.length - 1; i++) {
-      for (let j = i + 1; j < globParts.length; j++) {
-        const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
-        if (!matched)
-          continue;
-        globParts[i] = matched;
-        globParts[j] = [];
-      }
-    }
-    return globParts.filter((gs) => gs.length);
-  }
-  partsMatch(a, b, emptyGSMatch = false) {
-    let ai = 0;
-    let bi = 0;
-    let result = [];
-    let which = "";
-    while (ai < a.length && bi < b.length) {
-      if (a[ai] === b[bi]) {
-        result.push(which === "b" ? b[bi] : a[ai]);
-        ai++;
-        bi++;
-      } else if (emptyGSMatch && a[ai] === "**" && b[bi] === a[ai + 1]) {
-        result.push(a[ai]);
-        ai++;
-      } else if (emptyGSMatch && b[bi] === "**" && a[ai] === b[bi + 1]) {
-        result.push(b[bi]);
-        bi++;
-      } else if (a[ai] === "*" && b[bi] && (this.options.dot || !b[bi].startsWith(".")) && b[bi] !== "**") {
-        if (which === "b")
-          return false;
-        which = "a";
-        result.push(a[ai]);
-        ai++;
-        bi++;
-      } else if (b[bi] === "*" && a[ai] && (this.options.dot || !a[ai].startsWith(".")) && a[ai] !== "**") {
-        if (which === "a")
-          return false;
-        which = "b";
-        result.push(b[bi]);
-        ai++;
-        bi++;
-      } else {
-        return false;
-      }
-    }
-    return a.length === b.length && result;
-  }
-  parseNegate() {
-    if (this.nonegate)
-      return;
-    const pattern = this.pattern;
-    let negate = false;
-    let negateOffset = 0;
-    for (let i = 0; i < pattern.length && pattern.charAt(i) === "!"; i++) {
-      negate = !negate;
-      negateOffset++;
-    }
-    if (negateOffset)
-      this.pattern = pattern.slice(negateOffset);
-    this.negate = negate;
-  }
-  // set partial to true to test if, for example,
-  // "/a/b" matches the start of "/*/b/*/d"
-  // Partial means, if you run out of file before you run
-  // out of pattern, then that's fine, as long as all
-  // the parts match.
-  matchOne(file, pattern, partial = false) {
-    const options = this.options;
-    if (this.isWindows) {
-      const fileDrive = typeof file[0] === "string" && /^[a-z]:$/i.test(file[0]);
-      const fileUNC = !fileDrive && file[0] === "" && file[1] === "" && file[2] === "?" && /^[a-z]:$/i.test(file[3]);
-      const patternDrive = typeof pattern[0] === "string" && /^[a-z]:$/i.test(pattern[0]);
-      const patternUNC = !patternDrive && pattern[0] === "" && pattern[1] === "" && pattern[2] === "?" && typeof pattern[3] === "string" && /^[a-z]:$/i.test(pattern[3]);
-      const fdi = fileUNC ? 3 : fileDrive ? 0 : void 0;
-      const pdi = patternUNC ? 3 : patternDrive ? 0 : void 0;
-      if (typeof fdi === "number" && typeof pdi === "number") {
-        const [fd, pd] = [file[fdi], pattern[pdi]];
-        if (fd.toLowerCase() === pd.toLowerCase()) {
-          pattern[pdi] = fd;
-          if (pdi > fdi) {
-            pattern = pattern.slice(pdi);
-          } else if (fdi > pdi) {
-            file = file.slice(fdi);
-          }
-        }
-      }
-    }
-    const { optimizationLevel = 1 } = this.options;
-    if (optimizationLevel >= 2) {
-      file = this.levelTwoFileOptimize(file);
-    }
-    this.debug("matchOne", this, { file, pattern });
-    this.debug("matchOne", file.length, pattern.length);
-    for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
-      this.debug("matchOne loop");
-      var p = pattern[pi];
-      var f = file[fi];
-      this.debug(pattern, p, f);
-      if (p === false) {
-        return false;
-      }
-      if (p === GLOBSTAR) {
-        this.debug("GLOBSTAR", [pattern, p, f]);
-        var fr = fi;
-        var pr = pi + 1;
-        if (pr === pl) {
-          this.debug("** at the end");
-          for (; fi < fl; fi++) {
-            if (file[fi] === "." || file[fi] === ".." || !options.dot && file[fi].charAt(0) === ".")
-              return false;
-          }
-          return true;
-        }
-        while (fr < fl) {
-          var swallowee = file[fr];
-          this.debug("\nglobstar while", file, fr, pattern, pr, swallowee);
-          if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
-            this.debug("globstar found match!", fr, fl, swallowee);
-            return true;
-          } else {
-            if (swallowee === "." || swallowee === ".." || !options.dot && swallowee.charAt(0) === ".") {
-              this.debug("dot detected!", file, fr, pattern, pr);
-              break;
-            }
-            this.debug("globstar swallow a segment, and continue");
-            fr++;
-          }
-        }
-        if (partial) {
-          this.debug("\n>>> no match, partial?", file, fr, pattern, pr);
-          if (fr === fl) {
-            return true;
-          }
-        }
-        return false;
-      }
-      let hit;
-      if (typeof p === "string") {
-        hit = f === p;
-        this.debug("string match", p, f, hit);
-      } else {
-        hit = p.test(f);
-        this.debug("pattern match", p, f, hit);
-      }
-      if (!hit)
-        return false;
-    }
-    if (fi === fl && pi === pl) {
-      return true;
-    } else if (fi === fl) {
-      return partial;
-    } else if (pi === pl) {
-      return fi === fl - 1 && file[fi] === "";
-    } else {
-      throw new Error("wtf?");
-    }
-  }
-  braceExpand() {
-    return braceExpand(this.pattern, this.options);
-  }
-  parse(pattern) {
-    assertValidPattern(pattern);
-    const options = this.options;
-    if (pattern === "**")
-      return GLOBSTAR;
-    if (pattern === "")
-      return "";
-    let m;
-    let fastTest = null;
-    if (m = pattern.match(starRE)) {
-      fastTest = options.dot ? starTestDot : starTest;
-    } else if (m = pattern.match(starDotExtRE)) {
-      fastTest = (options.nocase ? options.dot ? starDotExtTestNocaseDot : starDotExtTestNocase : options.dot ? starDotExtTestDot : starDotExtTest)(m[1]);
-    } else if (m = pattern.match(qmarksRE)) {
-      fastTest = (options.nocase ? options.dot ? qmarksTestNocaseDot : qmarksTestNocase : options.dot ? qmarksTestDot : qmarksTest)(m);
-    } else if (m = pattern.match(starDotStarRE)) {
-      fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
-    } else if (m = pattern.match(dotStarRE)) {
-      fastTest = dotStarTest;
-    }
-    const re = AST.fromGlob(pattern, this.options).toMMPattern();
-    if (fastTest && typeof re === "object") {
-      Reflect.defineProperty(re, "test", { value: fastTest });
-    }
-    return re;
-  }
-  makeRe() {
-    if (this.regexp || this.regexp === false)
-      return this.regexp;
-    const set = this.set;
-    if (!set.length) {
-      this.regexp = false;
-      return this.regexp;
-    }
-    const options = this.options;
-    const twoStar = options.noglobstar ? star2 : options.dot ? twoStarDot : twoStarNoDot;
-    const flags = new Set(options.nocase ? ["i"] : []);
-    let re = set.map((pattern) => {
-      const pp = pattern.map((p) => {
-        if (p instanceof RegExp) {
-          for (const f of p.flags.split(""))
-            flags.add(f);
-        }
-        return typeof p === "string" ? regExpEscape2(p) : p === GLOBSTAR ? GLOBSTAR : p._src;
-      });
-      pp.forEach((p, i) => {
-        const next = pp[i + 1];
-        const prev = pp[i - 1];
-        if (p !== GLOBSTAR || prev === GLOBSTAR) {
-          return;
-        }
-        if (prev === void 0) {
-          if (next !== void 0 && next !== GLOBSTAR) {
-            pp[i + 1] = "(?:\\/|" + twoStar + "\\/)?" + next;
-          } else {
-            pp[i] = twoStar;
-          }
-        } else if (next === void 0) {
-          pp[i - 1] = prev + "(?:\\/|" + twoStar + ")?";
-        } else if (next !== GLOBSTAR) {
-          pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + "\\/)" + next;
-          pp[i + 1] = GLOBSTAR;
-        }
-      });
-      return pp.filter((p) => p !== GLOBSTAR).join("/");
-    }).join("|");
-    const [open, close] = set.length > 1 ? ["(?:", ")"] : ["", ""];
-    re = "^" + open + re + close + "$";
-    if (this.negate)
-      re = "^(?!" + re + ").+$";
-    try {
-      this.regexp = new RegExp(re, [...flags].join(""));
-    } catch (ex) {
-      this.regexp = false;
-    }
-    return this.regexp;
-  }
-  slashSplit(p) {
-    if (this.preserveMultipleSlashes) {
-      return p.split("/");
-    } else if (this.isWindows && /^\/\/[^\/]+/.test(p)) {
-      return ["", ...p.split(/\/+/)];
-    } else {
-      return p.split(/\/+/);
-    }
-  }
-  match(f, partial = this.partial) {
-    this.debug("match", f, this.pattern);
-    if (this.comment) {
-      return false;
-    }
-    if (this.empty) {
-      return f === "";
-    }
-    if (f === "/" && partial) {
-      return true;
-    }
-    const options = this.options;
-    if (this.isWindows) {
-      f = f.split("\\").join("/");
-    }
-    const ff = this.slashSplit(f);
-    this.debug(this.pattern, "split", ff);
-    const set = this.set;
-    this.debug(this.pattern, "set", set);
-    let filename = ff[ff.length - 1];
-    if (!filename) {
-      for (let i = ff.length - 2; !filename && i >= 0; i--) {
-        filename = ff[i];
-      }
-    }
-    for (let i = 0; i < set.length; i++) {
-      const pattern = set[i];
-      let file = ff;
-      if (options.matchBase && pattern.length === 1) {
-        file = [filename];
-      }
-      const hit = this.matchOne(file, pattern, partial);
-      if (hit) {
-        if (options.flipNegate) {
-          return true;
-        }
-        return !this.negate;
-      }
-    }
-    if (options.flipNegate) {
-      return false;
-    }
-    return this.negate;
-  }
-  static defaults(def) {
-    return minimatch.defaults(def).Minimatch;
-  }
-};
-minimatch.AST = AST;
-minimatch.Minimatch = Minimatch;
-minimatch.escape = escape;
-minimatch.unescape = unescape;
-
-// node_modules/lru-cache/dist/esm/index.js
-var perf = typeof performance === "object" && performance && typeof performance.now === "function" ? performance : Date;
-var warned = /* @__PURE__ */ new Set();
-var PROCESS = typeof process === "object" && !!process ? process : {};
-var emitWarning = (msg, type, code, fn) => {
-  typeof PROCESS.emitWarning === "function" ? PROCESS.emitWarning(msg, type, code, fn) : console.error(`[${code}] ${type}: ${msg}`);
-};
-var AC = globalThis.AbortController;
-var AS = globalThis.AbortSignal;
-if (typeof AC === "undefined") {
-  AS = class AbortSignal {
-    onabort;
-    _onabort = [];
-    reason;
-    aborted = false;
-    addEventListener(_, fn) {
-      this._onabort.push(fn);
-    }
-  };
-  AC = class AbortController {
-    constructor() {
-      warnACPolyfill();
-    }
-    signal = new AS();
-    abort(reason) {
-      if (this.signal.aborted)
-        return;
-      this.signal.reason = reason;
-      this.signal.aborted = true;
-      for (const fn of this.signal._onabort) {
-        fn(reason);
-      }
-      this.signal.onabort?.(reason);
-    }
-  };
-  let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== "1";
-  const warnACPolyfill = () => {
-    if (!printACPolyfillWarning)
-      return;
-    printACPolyfillWarning = false;
-    emitWarning("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", warnACPolyfill);
-  };
-}
-var shouldWarn = (code) => !warned.has(code);
-var TYPE = Symbol("type");
-var isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);
-var getUintArray = (max) => !isPosInt(max) ? null : max <= Math.pow(2, 8) ? Uint8Array : max <= Math.pow(2, 16) ? Uint16Array : max <= Math.pow(2, 32) ? Uint32Array : max <= Number.MAX_SAFE_INTEGER ? ZeroArray : null;
-var ZeroArray = class extends Array {
-  constructor(size) {
-    super(size);
-    this.fill(0);
-  }
-};
-var Stack = class _Stack {
-  heap;
-  length;
-  // private constructor
-  static #constructing = false;
-  static create(max) {
-    const HeapCls = getUintArray(max);
-    if (!HeapCls)
-      return [];
-    _Stack.#constructing = true;
-    const s = new _Stack(max, HeapCls);
-    _Stack.#constructing = false;
-    return s;
-  }
-  constructor(max, HeapCls) {
-    if (!_Stack.#constructing) {
-      throw new TypeError("instantiate Stack using Stack.create(n)");
-    }
-    this.heap = new HeapCls(max);
-    this.length = 0;
-  }
-  push(n) {
-    this.heap[this.length++] = n;
-  }
-  pop() {
-    return this.heap[--this.length];
-  }
-};
-var LRUCache = class _LRUCache {
-  // properties coming in from the options of these, only max and maxSize
-  // really *need* to be protected. The rest can be modified, as they just
-  // set defaults for various methods.
-  #max;
-  #maxSize;
-  #dispose;
-  #disposeAfter;
-  #fetchMethod;
-  /**
-   * {@link LRUCache.OptionsBase.ttl}
-   */
-  ttl;
-  /**
-   * {@link LRUCache.OptionsBase.ttlResolution}
-   */
-  ttlResolution;
-  /**
-   * {@link LRUCache.OptionsBase.ttlAutopurge}
-   */
-  ttlAutopurge;
-  /**
-   * {@link LRUCache.OptionsBase.updateAgeOnGet}
-   */
-  updateAgeOnGet;
-  /**
-   * {@link LRUCache.OptionsBase.updateAgeOnHas}
-   */
-  updateAgeOnHas;
-  /**
-   * {@link LRUCache.OptionsBase.allowStale}
-   */
-  allowStale;
-  /**
-   * {@link LRUCache.OptionsBase.noDisposeOnSet}
-   */
-  noDisposeOnSet;
-  /**
-   * {@link LRUCache.OptionsBase.noUpdateTTL}
-   */
-  noUpdateTTL;
-  /**
-   * {@link LRUCache.OptionsBase.maxEntrySize}
-   */
-  maxEntrySize;
-  /**
-   * {@link LRUCache.OptionsBase.sizeCalculation}
-   */
-  sizeCalculation;
-  /**
-   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}
-   */
-  noDeleteOnFetchRejection;
-  /**
-   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}
-   */
-  noDeleteOnStaleGet;
-  /**
-   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}
-   */
-  allowStaleOnFetchAbort;
-  /**
-   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}
-   */
-  allowStaleOnFetchRejection;
-  /**
-   * {@link LRUCache.OptionsBase.ignoreFetchAbort}
-   */
-  ignoreFetchAbort;
-  // computed properties
-  #size;
-  #calculatedSize;
-  #keyMap;
-  #keyList;
-  #valList;
-  #next;
-  #prev;
-  #head;
-  #tail;
-  #free;
-  #disposed;
-  #sizes;
-  #starts;
-  #ttls;
-  #hasDispose;
-  #hasFetchMethod;
-  #hasDisposeAfter;
-  /**
-   * Do not call this method unless you need to inspect the
-   * inner workings of the cache.  If anything returned by this
-   * object is modified in any way, strange breakage may occur.
-   *
-   * These fields are private for a reason!
-   *
-   * @internal
-   */
-  static unsafeExposeInternals(c) {
-    return {
-      // properties
-      starts: c.#starts,
-      ttls: c.#ttls,
-      sizes: c.#sizes,
-      keyMap: c.#keyMap,
-      keyList: c.#keyList,
-      valList: c.#valList,
-      next: c.#next,
-      prev: c.#prev,
-      get head() {
-        return c.#head;
-      },
-      get tail() {
-        return c.#tail;
-      },
-      free: c.#free,
-      // methods
-      isBackgroundFetch: (p) => c.#isBackgroundFetch(p),
-      backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),
-      moveToTail: (index) => c.#moveToTail(index),
-      indexes: (options) => c.#indexes(options),
-      rindexes: (options) => c.#rindexes(options),
-      isStale: (index) => c.#isStale(index)
-    };
-  }
-  // Protected read-only members
-  /**
-   * {@link LRUCache.OptionsBase.max} (read-only)
-   */
-  get max() {
-    return this.#max;
-  }
-  /**
-   * {@link LRUCache.OptionsBase.maxSize} (read-only)
-   */
-  get maxSize() {
-    return this.#maxSize;
-  }
-  /**
-   * The total computed size of items in the cache (read-only)
-   */
-  get calculatedSize() {
-    return this.#calculatedSize;
-  }
-  /**
-   * The number of items stored in the cache (read-only)
-   */
-  get size() {
-    return this.#size;
-  }
-  /**
-   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)
-   */
-  get fetchMethod() {
-    return this.#fetchMethod;
-  }
-  /**
-   * {@link LRUCache.OptionsBase.dispose} (read-only)
-   */
-  get dispose() {
-    return this.#dispose;
-  }
-  /**
-   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)
-   */
-  get disposeAfter() {
-    return this.#disposeAfter;
-  }
-  constructor(options) {
-    const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort } = options;
-    if (max !== 0 && !isPosInt(max)) {
-      throw new TypeError("max option must be a nonnegative integer");
-    }
-    const UintArray = max ? getUintArray(max) : Array;
-    if (!UintArray) {
-      throw new Error("invalid max value: " + max);
-    }
-    this.#max = max;
-    this.#maxSize = maxSize;
-    this.maxEntrySize = maxEntrySize || this.#maxSize;
-    this.sizeCalculation = sizeCalculation;
-    if (this.sizeCalculation) {
-      if (!this.#maxSize && !this.maxEntrySize) {
-        throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");
-      }
-      if (typeof this.sizeCalculation !== "function") {
-        throw new TypeError("sizeCalculation set to non-function");
-      }
-    }
-    if (fetchMethod !== void 0 && typeof fetchMethod !== "function") {
-      throw new TypeError("fetchMethod must be a function if specified");
-    }
-    this.#fetchMethod = fetchMethod;
-    this.#hasFetchMethod = !!fetchMethod;
-    this.#keyMap = /* @__PURE__ */ new Map();
-    this.#keyList = new Array(max).fill(void 0);
-    this.#valList = new Array(max).fill(void 0);
-    this.#next = new UintArray(max);
-    this.#prev = new UintArray(max);
-    this.#head = 0;
-    this.#tail = 0;
-    this.#free = Stack.create(max);
-    this.#size = 0;
-    this.#calculatedSize = 0;
-    if (typeof dispose === "function") {
-      this.#dispose = dispose;
-    }
-    if (typeof disposeAfter === "function") {
-      this.#disposeAfter = disposeAfter;
-      this.#disposed = [];
-    } else {
-      this.#disposeAfter = void 0;
-      this.#disposed = void 0;
-    }
-    this.#hasDispose = !!this.#dispose;
-    this.#hasDisposeAfter = !!this.#disposeAfter;
-    this.noDisposeOnSet = !!noDisposeOnSet;
-    this.noUpdateTTL = !!noUpdateTTL;
-    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;
-    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;
-    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;
-    this.ignoreFetchAbort = !!ignoreFetchAbort;
-    if (this.maxEntrySize !== 0) {
-      if (this.#maxSize !== 0) {
-        if (!isPosInt(this.#maxSize)) {
-          throw new TypeError("maxSize must be a positive integer if specified");
-        }
-      }
-      if (!isPosInt(this.maxEntrySize)) {
-        throw new TypeError("maxEntrySize must be a positive integer if specified");
-      }
-      this.#initializeSizeTracking();
-    }
-    this.allowStale = !!allowStale;
-    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;
-    this.updateAgeOnGet = !!updateAgeOnGet;
-    this.updateAgeOnHas = !!updateAgeOnHas;
-    this.ttlResolution = isPosInt(ttlResolution) || ttlResolution === 0 ? ttlResolution : 1;
-    this.ttlAutopurge = !!ttlAutopurge;
-    this.ttl = ttl || 0;
-    if (this.ttl) {
-      if (!isPosInt(this.ttl)) {
-        throw new TypeError("ttl must be a positive integer if specified");
-      }
-      this.#initializeTTLTracking();
-    }
-    if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {
-      throw new TypeError("At least one of max, maxSize, or ttl is required");
-    }
-    if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {
-      const code = "LRU_CACHE_UNBOUNDED";
-      if (shouldWarn(code)) {
-        warned.add(code);
-        const msg = "TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.";
-        emitWarning(msg, "UnboundedCacheWarning", code, _LRUCache);
-      }
-    }
-  }
-  /**
-   * Return the remaining TTL time for a given entry key
-   */
-  getRemainingTTL(key) {
-    return this.#keyMap.has(key) ? Infinity : 0;
-  }
-  #initializeTTLTracking() {
-    const ttls = new ZeroArray(this.#max);
-    const starts = new ZeroArray(this.#max);
-    this.#ttls = ttls;
-    this.#starts = starts;
-    this.#setItemTTL = (index, ttl, start = perf.now()) => {
-      starts[index] = ttl !== 0 ? start : 0;
-      ttls[index] = ttl;
-      if (ttl !== 0 && this.ttlAutopurge) {
-        const t = setTimeout(() => {
-          if (this.#isStale(index)) {
-            this.delete(this.#keyList[index]);
-          }
-        }, ttl + 1);
-        if (t.unref) {
-          t.unref();
-        }
-      }
-    };
-    this.#updateItemAge = (index) => {
-      starts[index] = ttls[index] !== 0 ? perf.now() : 0;
-    };
-    this.#statusTTL = (status, index) => {
-      if (ttls[index]) {
-        const ttl = ttls[index];
-        const start = starts[index];
-        if (!ttl || !start)
-          return;
-        status.ttl = ttl;
-        status.start = start;
-        status.now = cachedNow || getNow();
-        const age = status.now - start;
-        status.remainingTTL = ttl - age;
-      }
-    };
-    let cachedNow = 0;
-    const getNow = () => {
-      const n = perf.now();
-      if (this.ttlResolution > 0) {
-        cachedNow = n;
-        const t = setTimeout(() => cachedNow = 0, this.ttlResolution);
-        if (t.unref) {
-          t.unref();
-        }
-      }
-      return n;
-    };
-    this.getRemainingTTL = (key) => {
-      const index = this.#keyMap.get(key);
-      if (index === void 0) {
-        return 0;
-      }
-      const ttl = ttls[index];
-      const start = starts[index];
-      if (!ttl || !start) {
-        return Infinity;
-      }
-      const age = (cachedNow || getNow()) - start;
-      return ttl - age;
-    };
-    this.#isStale = (index) => {
-      const s = starts[index];
-      const t = ttls[index];
-      return !!t && !!s && (cachedNow || getNow()) - s > t;
-    };
-  }
-  // conditionally set private methods related to TTL
-  #updateItemAge = () => {
-  };
-  #statusTTL = () => {
-  };
-  #setItemTTL = () => {
-  };
-  /* c8 ignore stop */
-  #isStale = () => false;
-  #initializeSizeTracking() {
-    const sizes = new ZeroArray(this.#max);
-    this.#calculatedSize = 0;
-    this.#sizes = sizes;
-    this.#removeItemSize = (index) => {
-      this.#calculatedSize -= sizes[index];
-      sizes[index] = 0;
-    };
-    this.#requireSize = (k, v, size, sizeCalculation) => {
-      if (this.#isBackgroundFetch(v)) {
-        return 0;
-      }
-      if (!isPosInt(size)) {
-        if (sizeCalculation) {
-          if (typeof sizeCalculation !== "function") {
-            throw new TypeError("sizeCalculation must be a function");
-          }
-          size = sizeCalculation(v, k);
-          if (!isPosInt(size)) {
-            throw new TypeError("sizeCalculation return invalid (expect positive integer)");
-          }
-        } else {
-          throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");
-        }
-      }
-      return size;
-    };
-    this.#addItemSize = (index, size, status) => {
-      sizes[index] = size;
-      if (this.#maxSize) {
-        const maxSize = this.#maxSize - sizes[index];
-        while (this.#calculatedSize > maxSize) {
-          this.#evict(true);
-        }
-      }
-      this.#calculatedSize += sizes[index];
-      if (status) {
-        status.entrySize = size;
-        status.totalCalculatedSize = this.#calculatedSize;
-      }
-    };
-  }
-  #removeItemSize = (_i) => {
-  };
-  #addItemSize = (_i, _s, _st) => {
-  };
-  #requireSize = (_k, _v, size, sizeCalculation) => {
-    if (size || sizeCalculation) {
-      throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");
-    }
-    return 0;
-  };
-  *#indexes({ allowStale = this.allowStale } = {}) {
-    if (this.#size) {
-      for (let i = this.#tail; true; ) {
-        if (!this.#isValidIndex(i)) {
-          break;
-        }
-        if (allowStale || !this.#isStale(i)) {
-          yield i;
-        }
-        if (i === this.#head) {
-          break;
-        } else {
-          i = this.#prev[i];
-        }
-      }
-    }
-  }
-  *#rindexes({ allowStale = this.allowStale } = {}) {
-    if (this.#size) {
-      for (let i = this.#head; true; ) {
-        if (!this.#isValidIndex(i)) {
-          break;
-        }
-        if (allowStale || !this.#isStale(i)) {
-          yield i;
-        }
-        if (i === this.#tail) {
-          break;
-        } else {
-          i = this.#next[i];
-        }
-      }
-    }
-  }
-  #isValidIndex(index) {
-    return index !== void 0 && this.#keyMap.get(this.#keyList[index]) === index;
-  }
-  /**
-   * Return a generator yielding `[key, value]` pairs,
-   * in order from most recently used to least recently used.
-   */
-  *entries() {
-    for (const i of this.#indexes()) {
-      if (this.#valList[i] !== void 0 && this.#keyList[i] !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
-        yield [this.#keyList[i], this.#valList[i]];
-      }
-    }
-  }
-  /**
-   * Inverse order version of {@link LRUCache.entries}
-   *
-   * Return a generator yielding `[key, value]` pairs,
-   * in order from least recently used to most recently used.
-   */
-  *rentries() {
-    for (const i of this.#rindexes()) {
-      if (this.#valList[i] !== void 0 && this.#keyList[i] !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
-        yield [this.#keyList[i], this.#valList[i]];
-      }
-    }
-  }
-  /**
-   * Return a generator yielding the keys in the cache,
-   * in order from most recently used to least recently used.
-   */
-  *keys() {
-    for (const i of this.#indexes()) {
-      const k = this.#keyList[i];
-      if (k !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
-        yield k;
-      }
-    }
-  }
-  /**
-   * Inverse order version of {@link LRUCache.keys}
-   *
-   * Return a generator yielding the keys in the cache,
-   * in order from least recently used to most recently used.
-   */
-  *rkeys() {
-    for (const i of this.#rindexes()) {
-      const k = this.#keyList[i];
-      if (k !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
-        yield k;
-      }
-    }
-  }
-  /**
-   * Return a generator yielding the values in the cache,
-   * in order from most recently used to least recently used.
-   */
-  *values() {
-    for (const i of this.#indexes()) {
-      const v = this.#valList[i];
-      if (v !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
-        yield this.#valList[i];
-      }
-    }
-  }
-  /**
-   * Inverse order version of {@link LRUCache.values}
-   *
-   * Return a generator yielding the values in the cache,
-   * in order from least recently used to most recently used.
-   */
-  *rvalues() {
-    for (const i of this.#rindexes()) {
-      const v = this.#valList[i];
-      if (v !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) {
-        yield this.#valList[i];
-      }
-    }
-  }
-  /**
-   * Iterating over the cache itself yields the same results as
-   * {@link LRUCache.entries}
-   */
-  [Symbol.iterator]() {
-    return this.entries();
-  }
-  /**
-   * A String value that is used in the creation of the default string description of an object.
-   * Called by the built-in method Object.prototype.toString.
-   */
-  [Symbol.toStringTag] = "LRUCache";
-  /**
-   * Find a value for which the supplied fn method returns a truthy value,
-   * similar to Array.find().  fn is called as fn(value, key, cache).
-   */
-  find(fn, getOptions = {}) {
-    for (const i of this.#indexes()) {
-      const v = this.#valList[i];
-      const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
-      if (value === void 0)
-        continue;
-      if (fn(value, this.#keyList[i], this)) {
-        return this.get(this.#keyList[i], getOptions);
-      }
-    }
-  }
-  /**
-   * Call the supplied function on each item in the cache, in order from
-   * most recently used to least recently used.  fn is called as
-   * fn(value, key, cache).  Does not update age or recenty of use.
-   * Does not iterate over stale values.
-   */
-  forEach(fn, thisp = this) {
-    for (const i of this.#indexes()) {
-      const v = this.#valList[i];
-      const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
-      if (value === void 0)
-        continue;
-      fn.call(thisp, value, this.#keyList[i], this);
-    }
-  }
-  /**
-   * The same as {@link LRUCache.forEach} but items are iterated over in
-   * reverse order.  (ie, less recently used items are iterated over first.)
-   */
-  rforEach(fn, thisp = this) {
-    for (const i of this.#rindexes()) {
-      const v = this.#valList[i];
-      const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
-      if (value === void 0)
-        continue;
-      fn.call(thisp, value, this.#keyList[i], this);
-    }
-  }
-  /**
-   * Delete any stale entries. Returns true if anything was removed,
-   * false otherwise.
-   */
-  purgeStale() {
-    let deleted = false;
-    for (const i of this.#rindexes({ allowStale: true })) {
-      if (this.#isStale(i)) {
-        this.delete(this.#keyList[i]);
-        deleted = true;
-      }
-    }
-    return deleted;
-  }
-  /**
-   * Get the extended info about a given entry, to get its value, size, and
-   * TTL info simultaneously. Like {@link LRUCache#dump}, but just for a
-   * single key. Always returns stale values, if their info is found in the
-   * cache, so be sure to check for expired TTLs if relevant.
-   */
-  info(key) {
-    const i = this.#keyMap.get(key);
-    if (i === void 0)
-      return void 0;
-    const v = this.#valList[i];
-    const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
-    if (value === void 0)
-      return void 0;
-    const entry = { value };
-    if (this.#ttls && this.#starts) {
-      const ttl = this.#ttls[i];
-      const start = this.#starts[i];
-      if (ttl && start) {
-        const remain = ttl - (perf.now() - start);
-        entry.ttl = remain;
-        entry.start = Date.now();
-      }
-    }
-    if (this.#sizes) {
-      entry.size = this.#sizes[i];
-    }
-    return entry;
-  }
-  /**
-   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be
-   * passed to cache.load()
-   */
-  dump() {
-    const arr = [];
-    for (const i of this.#indexes({ allowStale: true })) {
-      const key = this.#keyList[i];
-      const v = this.#valList[i];
-      const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
-      if (value === void 0 || key === void 0)
-        continue;
-      const entry = { value };
-      if (this.#ttls && this.#starts) {
-        entry.ttl = this.#ttls[i];
-        const age = perf.now() - this.#starts[i];
-        entry.start = Math.floor(Date.now() - age);
-      }
-      if (this.#sizes) {
-        entry.size = this.#sizes[i];
-      }
-      arr.unshift([key, entry]);
-    }
-    return arr;
-  }
-  /**
-   * Reset the cache and load in the items in entries in the order listed.
-   * Note that the shape of the resulting cache may be different if the
-   * same options are not used in both caches.
-   */
-  load(arr) {
-    this.clear();
-    for (const [key, entry] of arr) {
-      if (entry.start) {
-        const age = Date.now() - entry.start;
-        entry.start = perf.now() - age;
-      }
-      this.set(key, entry.value, entry);
-    }
-  }
-  /**
-   * Add a value to the cache.
-   *
-   * Note: if `undefined` is specified as a value, this is an alias for
-   * {@link LRUCache#delete}
-   */
-  set(k, v, setOptions = {}) {
-    if (v === void 0) {
-      this.delete(k);
-      return this;
-    }
-    const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status } = setOptions;
-    let { noUpdateTTL = this.noUpdateTTL } = setOptions;
-    const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);
-    if (this.maxEntrySize && size > this.maxEntrySize) {
-      if (status) {
-        status.set = "miss";
-        status.maxEntrySizeExceeded = true;
-      }
-      this.delete(k);
-      return this;
-    }
-    let index = this.#size === 0 ? void 0 : this.#keyMap.get(k);
-    if (index === void 0) {
-      index = this.#size === 0 ? this.#tail : this.#free.length !== 0 ? this.#free.pop() : this.#size === this.#max ? this.#evict(false) : this.#size;
-      this.#keyList[index] = k;
-      this.#valList[index] = v;
-      this.#keyMap.set(k, index);
-      this.#next[this.#tail] = index;
-      this.#prev[index] = this.#tail;
-      this.#tail = index;
-      this.#size++;
-      this.#addItemSize(index, size, status);
-      if (status)
-        status.set = "add";
-      noUpdateTTL = false;
-    } else {
-      this.#moveToTail(index);
-      const oldVal = this.#valList[index];
-      if (v !== oldVal) {
-        if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {
-          oldVal.__abortController.abort(new Error("replaced"));
-          const { __staleWhileFetching: s } = oldVal;
-          if (s !== void 0 && !noDisposeOnSet) {
-            if (this.#hasDispose) {
-              this.#dispose?.(s, k, "set");
-            }
-            if (this.#hasDisposeAfter) {
-              this.#disposed?.push([s, k, "set"]);
-            }
-          }
-        } else if (!noDisposeOnSet) {
-          if (this.#hasDispose) {
-            this.#dispose?.(oldVal, k, "set");
-          }
-          if (this.#hasDisposeAfter) {
-            this.#disposed?.push([oldVal, k, "set"]);
-          }
-        }
-        this.#removeItemSize(index);
-        this.#addItemSize(index, size, status);
-        this.#valList[index] = v;
-        if (status) {
-          status.set = "replace";
-          const oldValue = oldVal && this.#isBackgroundFetch(oldVal) ? oldVal.__staleWhileFetching : oldVal;
-          if (oldValue !== void 0)
-            status.oldValue = oldValue;
-        }
-      } else if (status) {
-        status.set = "update";
-      }
-    }
-    if (ttl !== 0 && !this.#ttls) {
-      this.#initializeTTLTracking();
-    }
-    if (this.#ttls) {
-      if (!noUpdateTTL) {
-        this.#setItemTTL(index, ttl, start);
-      }
-      if (status)
-        this.#statusTTL(status, index);
-    }
-    if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {
-      const dt = this.#disposed;
-      let task;
-      while (task = dt?.shift()) {
-        this.#disposeAfter?.(...task);
-      }
-    }
-    return this;
-  }
-  /**
-   * Evict the least recently used item, returning its value or
-   * `undefined` if cache is empty.
-   */
-  pop() {
-    try {
-      while (this.#size) {
-        const val = this.#valList[this.#head];
-        this.#evict(true);
-        if (this.#isBackgroundFetch(val)) {
-          if (val.__staleWhileFetching) {
-            return val.__staleWhileFetching;
-          }
-        } else if (val !== void 0) {
-          return val;
-        }
-      }
-    } finally {
-      if (this.#hasDisposeAfter && this.#disposed) {
-        const dt = this.#disposed;
-        let task;
-        while (task = dt?.shift()) {
-          this.#disposeAfter?.(...task);
-        }
-      }
-    }
-  }
-  #evict(free) {
-    const head = this.#head;
-    const k = this.#keyList[head];
-    const v = this.#valList[head];
-    if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {
-      v.__abortController.abort(new Error("evicted"));
-    } else if (this.#hasDispose || this.#hasDisposeAfter) {
-      if (this.#hasDispose) {
-        this.#dispose?.(v, k, "evict");
-      }
-      if (this.#hasDisposeAfter) {
-        this.#disposed?.push([v, k, "evict"]);
-      }
-    }
-    this.#removeItemSize(head);
-    if (free) {
-      this.#keyList[head] = void 0;
-      this.#valList[head] = void 0;
-      this.#free.push(head);
-    }
-    if (this.#size === 1) {
-      this.#head = this.#tail = 0;
-      this.#free.length = 0;
-    } else {
-      this.#head = this.#next[head];
-    }
-    this.#keyMap.delete(k);
-    this.#size--;
-    return head;
-  }
-  /**
-   * Check if a key is in the cache, without updating the recency of use.
-   * Will return false if the item is stale, even though it is technically
-   * in the cache.
-   *
-   * Will not update item age unless
-   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
-   */
-  has(k, hasOptions = {}) {
-    const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;
-    const index = this.#keyMap.get(k);
-    if (index !== void 0) {
-      const v = this.#valList[index];
-      if (this.#isBackgroundFetch(v) && v.__staleWhileFetching === void 0) {
-        return false;
-      }
-      if (!this.#isStale(index)) {
-        if (updateAgeOnHas) {
-          this.#updateItemAge(index);
-        }
-        if (status) {
-          status.has = "hit";
-          this.#statusTTL(status, index);
-        }
-        return true;
-      } else if (status) {
-        status.has = "stale";
-        this.#statusTTL(status, index);
-      }
-    } else if (status) {
-      status.has = "miss";
-    }
-    return false;
-  }
-  /**
-   * Like {@link LRUCache#get} but doesn't update recency or delete stale
-   * items.
-   *
-   * Returns `undefined` if the item is stale, unless
-   * {@link LRUCache.OptionsBase.allowStale} is set.
-   */
-  peek(k, peekOptions = {}) {
-    const { allowStale = this.allowStale } = peekOptions;
-    const index = this.#keyMap.get(k);
-    if (index === void 0 || !allowStale && this.#isStale(index)) {
-      return;
-    }
-    const v = this.#valList[index];
-    return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
-  }
-  #backgroundFetch(k, index, options, context) {
-    const v = index === void 0 ? void 0 : this.#valList[index];
-    if (this.#isBackgroundFetch(v)) {
-      return v;
-    }
-    const ac = new AC();
-    const { signal } = options;
-    signal?.addEventListener("abort", () => ac.abort(signal.reason), {
-      signal: ac.signal
-    });
-    const fetchOpts = {
-      signal: ac.signal,
-      options,
-      context
-    };
-    const cb = (v2, updateCache = false) => {
-      const { aborted } = ac.signal;
-      const ignoreAbort = options.ignoreFetchAbort && v2 !== void 0;
-      if (options.status) {
-        if (aborted && !updateCache) {
-          options.status.fetchAborted = true;
-          options.status.fetchError = ac.signal.reason;
-          if (ignoreAbort)
-            options.status.fetchAbortIgnored = true;
-        } else {
-          options.status.fetchResolved = true;
-        }
-      }
-      if (aborted && !ignoreAbort && !updateCache) {
-        return fetchFail(ac.signal.reason);
-      }
-      const bf2 = p;
-      if (this.#valList[index] === p) {
-        if (v2 === void 0) {
-          if (bf2.__staleWhileFetching) {
-            this.#valList[index] = bf2.__staleWhileFetching;
-          } else {
-            this.delete(k);
-          }
-        } else {
-          if (options.status)
-            options.status.fetchUpdated = true;
-          this.set(k, v2, fetchOpts.options);
-        }
-      }
-      return v2;
-    };
-    const eb = (er) => {
-      if (options.status) {
-        options.status.fetchRejected = true;
-        options.status.fetchError = er;
-      }
-      return fetchFail(er);
-    };
-    const fetchFail = (er) => {
-      const { aborted } = ac.signal;
-      const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;
-      const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;
-      const noDelete = allowStale || options.noDeleteOnFetchRejection;
-      const bf2 = p;
-      if (this.#valList[index] === p) {
-        const del = !noDelete || bf2.__staleWhileFetching === void 0;
-        if (del) {
-          this.delete(k);
-        } else if (!allowStaleAborted) {
-          this.#valList[index] = bf2.__staleWhileFetching;
-        }
-      }
-      if (allowStale) {
-        if (options.status && bf2.__staleWhileFetching !== void 0) {
-          options.status.returnedStale = true;
-        }
-        return bf2.__staleWhileFetching;
-      } else if (bf2.__returned === bf2) {
-        throw er;
-      }
-    };
-    const pcall = (res, rej) => {
-      const fmp = this.#fetchMethod?.(k, v, fetchOpts);
-      if (fmp && fmp instanceof Promise) {
-        fmp.then((v2) => res(v2 === void 0 ? void 0 : v2), rej);
-      }
-      ac.signal.addEventListener("abort", () => {
-        if (!options.ignoreFetchAbort || options.allowStaleOnFetchAbort) {
-          res(void 0);
-          if (options.allowStaleOnFetchAbort) {
-            res = (v2) => cb(v2, true);
-          }
-        }
-      });
-    };
-    if (options.status)
-      options.status.fetchDispatched = true;
-    const p = new Promise(pcall).then(cb, eb);
-    const bf = Object.assign(p, {
-      __abortController: ac,
-      __staleWhileFetching: v,
-      __returned: void 0
-    });
-    if (index === void 0) {
-      this.set(k, bf, { ...fetchOpts.options, status: void 0 });
-      index = this.#keyMap.get(k);
-    } else {
-      this.#valList[index] = bf;
-    }
-    return bf;
-  }
-  #isBackgroundFetch(p) {
-    if (!this.#hasFetchMethod)
-      return false;
-    const b = p;
-    return !!b && b instanceof Promise && b.hasOwnProperty("__staleWhileFetching") && b.__abortController instanceof AC;
-  }
-  async fetch(k, fetchOptions = {}) {
-    const {
-      // get options
-      allowStale = this.allowStale,
-      updateAgeOnGet = this.updateAgeOnGet,
-      noDeleteOnStaleGet = this.noDeleteOnStaleGet,
-      // set options
-      ttl = this.ttl,
-      noDisposeOnSet = this.noDisposeOnSet,
-      size = 0,
-      sizeCalculation = this.sizeCalculation,
-      noUpdateTTL = this.noUpdateTTL,
-      // fetch exclusive options
-      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,
-      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,
-      ignoreFetchAbort = this.ignoreFetchAbort,
-      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,
-      context,
-      forceRefresh = false,
-      status,
-      signal
-    } = fetchOptions;
-    if (!this.#hasFetchMethod) {
-      if (status)
-        status.fetch = "get";
-      return this.get(k, {
-        allowStale,
-        updateAgeOnGet,
-        noDeleteOnStaleGet,
-        status
-      });
-    }
-    const options = {
-      allowStale,
-      updateAgeOnGet,
-      noDeleteOnStaleGet,
-      ttl,
-      noDisposeOnSet,
-      size,
-      sizeCalculation,
-      noUpdateTTL,
-      noDeleteOnFetchRejection,
-      allowStaleOnFetchRejection,
-      allowStaleOnFetchAbort,
-      ignoreFetchAbort,
-      status,
-      signal
-    };
-    let index = this.#keyMap.get(k);
-    if (index === void 0) {
-      if (status)
-        status.fetch = "miss";
-      const p = this.#backgroundFetch(k, index, options, context);
-      return p.__returned = p;
-    } else {
-      const v = this.#valList[index];
-      if (this.#isBackgroundFetch(v)) {
-        const stale = allowStale && v.__staleWhileFetching !== void 0;
-        if (status) {
-          status.fetch = "inflight";
-          if (stale)
-            status.returnedStale = true;
-        }
-        return stale ? v.__staleWhileFetching : v.__returned = v;
-      }
-      const isStale = this.#isStale(index);
-      if (!forceRefresh && !isStale) {
-        if (status)
-          status.fetch = "hit";
-        this.#moveToTail(index);
-        if (updateAgeOnGet) {
-          this.#updateItemAge(index);
-        }
-        if (status)
-          this.#statusTTL(status, index);
-        return v;
-      }
-      const p = this.#backgroundFetch(k, index, options, context);
-      const hasStale = p.__staleWhileFetching !== void 0;
-      const staleVal = hasStale && allowStale;
-      if (status) {
-        status.fetch = isStale ? "stale" : "refresh";
-        if (staleVal && isStale)
-          status.returnedStale = true;
-      }
-      return staleVal ? p.__staleWhileFetching : p.__returned = p;
-    }
-  }
-  /**
-   * Return a value from the cache. Will update the recency of the cache
-   * entry found.
-   *
-   * If the key is not found, get() will return `undefined`.
-   */
-  get(k, getOptions = {}) {
-    const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status } = getOptions;
-    const index = this.#keyMap.get(k);
-    if (index !== void 0) {
-      const value = this.#valList[index];
-      const fetching = this.#isBackgroundFetch(value);
-      if (status)
-        this.#statusTTL(status, index);
-      if (this.#isStale(index)) {
-        if (status)
-          status.get = "stale";
-        if (!fetching) {
-          if (!noDeleteOnStaleGet) {
-            this.delete(k);
-          }
-          if (status && allowStale)
-            status.returnedStale = true;
-          return allowStale ? value : void 0;
-        } else {
-          if (status && allowStale && value.__staleWhileFetching !== void 0) {
-            status.returnedStale = true;
-          }
-          return allowStale ? value.__staleWhileFetching : void 0;
-        }
-      } else {
-        if (status)
-          status.get = "hit";
-        if (fetching) {
-          return value.__staleWhileFetching;
-        }
-        this.#moveToTail(index);
-        if (updateAgeOnGet) {
-          this.#updateItemAge(index);
-        }
-        return value;
-      }
-    } else if (status) {
-      status.get = "miss";
-    }
-  }
-  #connect(p, n) {
-    this.#prev[n] = p;
-    this.#next[p] = n;
-  }
-  #moveToTail(index) {
-    if (index !== this.#tail) {
-      if (index === this.#head) {
-        this.#head = this.#next[index];
-      } else {
-        this.#connect(this.#prev[index], this.#next[index]);
-      }
-      this.#connect(this.#tail, index);
-      this.#tail = index;
-    }
-  }
-  /**
-   * Deletes a key out of the cache.
-   * Returns true if the key was deleted, false otherwise.
-   */
-  delete(k) {
-    let deleted = false;
-    if (this.#size !== 0) {
-      const index = this.#keyMap.get(k);
-      if (index !== void 0) {
-        deleted = true;
-        if (this.#size === 1) {
-          this.clear();
-        } else {
-          this.#removeItemSize(index);
-          const v = this.#valList[index];
-          if (this.#isBackgroundFetch(v)) {
-            v.__abortController.abort(new Error("deleted"));
-          } else if (this.#hasDispose || this.#hasDisposeAfter) {
-            if (this.#hasDispose) {
-              this.#dispose?.(v, k, "delete");
-            }
-            if (this.#hasDisposeAfter) {
-              this.#disposed?.push([v, k, "delete"]);
-            }
-          }
-          this.#keyMap.delete(k);
-          this.#keyList[index] = void 0;
-          this.#valList[index] = void 0;
-          if (index === this.#tail) {
-            this.#tail = this.#prev[index];
-          } else if (index === this.#head) {
-            this.#head = this.#next[index];
-          } else {
-            const pi = this.#prev[index];
-            this.#next[pi] = this.#next[index];
-            const ni = this.#next[index];
-            this.#prev[ni] = this.#prev[index];
-          }
-          this.#size--;
-          this.#free.push(index);
-        }
-      }
-    }
-    if (this.#hasDisposeAfter && this.#disposed?.length) {
-      const dt = this.#disposed;
-      let task;
-      while (task = dt?.shift()) {
-        this.#disposeAfter?.(...task);
-      }
-    }
-    return deleted;
-  }
-  /**
-   * Clear the cache entirely, throwing away all values.
-   */
-  clear() {
-    for (const index of this.#rindexes({ allowStale: true })) {
-      const v = this.#valList[index];
-      if (this.#isBackgroundFetch(v)) {
-        v.__abortController.abort(new Error("deleted"));
-      } else {
-        const k = this.#keyList[index];
-        if (this.#hasDispose) {
-          this.#dispose?.(v, k, "delete");
-        }
-        if (this.#hasDisposeAfter) {
-          this.#disposed?.push([v, k, "delete"]);
-        }
-      }
-    }
-    this.#keyMap.clear();
-    this.#valList.fill(void 0);
-    this.#keyList.fill(void 0);
-    if (this.#ttls && this.#starts) {
-      this.#ttls.fill(0);
-      this.#starts.fill(0);
-    }
-    if (this.#sizes) {
-      this.#sizes.fill(0);
-    }
-    this.#head = 0;
-    this.#tail = 0;
-    this.#free.length = 0;
-    this.#calculatedSize = 0;
-    this.#size = 0;
-    if (this.#hasDisposeAfter && this.#disposed) {
-      const dt = this.#disposed;
-      let task;
-      while (task = dt?.shift()) {
-        this.#disposeAfter?.(...task);
-      }
-    }
-  }
-};
-
-// node_modules/path-scurry/dist/esm/index.js
-import { posix, win32 } from "path";
-import { fileURLToPath } from "url";
-import * as actualFS from "fs";
-import { lstatSync, readdir as readdirCB, readdirSync, readlinkSync, realpathSync as rps } from "fs";
-import { lstat, readdir, readlink, realpath } from "fs/promises";
-
-// node_modules/minipass/dist/esm/index.js
-import { EventEmitter } from "events";
-import Stream from "stream";
-import { StringDecoder } from "string_decoder";
-var proc = typeof process === "object" && process ? process : {
-  stdout: null,
-  stderr: null
-};
-var isStream = (s) => !!s && typeof s === "object" && (s instanceof Minipass || s instanceof Stream || isReadable(s) || isWritable(s));
-var isReadable = (s) => !!s && typeof s === "object" && s instanceof EventEmitter && typeof s.pipe === "function" && // node core Writable streams have a pipe() method, but it throws
-s.pipe !== Stream.Writable.prototype.pipe;
-var isWritable = (s) => !!s && typeof s === "object" && s instanceof EventEmitter && typeof s.write === "function" && typeof s.end === "function";
-var EOF = Symbol("EOF");
-var MAYBE_EMIT_END = Symbol("maybeEmitEnd");
-var EMITTED_END = Symbol("emittedEnd");
-var EMITTING_END = Symbol("emittingEnd");
-var EMITTED_ERROR = Symbol("emittedError");
-var CLOSED = Symbol("closed");
-var READ = Symbol("read");
-var FLUSH = Symbol("flush");
-var FLUSHCHUNK = Symbol("flushChunk");
-var ENCODING = Symbol("encoding");
-var DECODER = Symbol("decoder");
-var FLOWING = Symbol("flowing");
-var PAUSED = Symbol("paused");
-var RESUME = Symbol("resume");
-var BUFFER = Symbol("buffer");
-var PIPES = Symbol("pipes");
-var BUFFERLENGTH = Symbol("bufferLength");
-var BUFFERPUSH = Symbol("bufferPush");
-var BUFFERSHIFT = Symbol("bufferShift");
-var OBJECTMODE = Symbol("objectMode");
-var DESTROYED = Symbol("destroyed");
-var ERROR = Symbol("error");
-var EMITDATA = Symbol("emitData");
-var EMITEND = Symbol("emitEnd");
-var EMITEND2 = Symbol("emitEnd2");
-var ASYNC = Symbol("async");
-var ABORT = Symbol("abort");
-var ABORTED = Symbol("aborted");
-var SIGNAL = Symbol("signal");
-var DATALISTENERS = Symbol("dataListeners");
-var DISCARDED = Symbol("discarded");
-var defer = (fn) => Promise.resolve().then(fn);
-var nodefer = (fn) => fn();
-var isEndish = (ev) => ev === "end" || ev === "finish" || ev === "prefinish";
-var isArrayBufferLike = (b) => b instanceof ArrayBuffer || !!b && typeof b === "object" && b.constructor && b.constructor.name === "ArrayBuffer" && b.byteLength >= 0;
-var isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);
-var Pipe = class {
-  src;
-  dest;
-  opts;
-  ondrain;
-  constructor(src, dest, opts) {
-    this.src = src;
-    this.dest = dest;
-    this.opts = opts;
-    this.ondrain = () => src[RESUME]();
-    this.dest.on("drain", this.ondrain);
-  }
-  unpipe() {
-    this.dest.removeListener("drain", this.ondrain);
-  }
-  // only here for the prototype
-  /* c8 ignore start */
-  proxyErrors(_er) {
-  }
-  /* c8 ignore stop */
-  end() {
-    this.unpipe();
-    if (this.opts.end)
-      this.dest.end();
-  }
-};
-var PipeProxyErrors = class extends Pipe {
-  unpipe() {
-    this.src.removeListener("error", this.proxyErrors);
-    super.unpipe();
-  }
-  constructor(src, dest, opts) {
-    super(src, dest, opts);
-    this.proxyErrors = (er) => dest.emit("error", er);
-    src.on("error", this.proxyErrors);
-  }
-};
-var isObjectModeOptions = (o) => !!o.objectMode;
-var isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== "buffer";
-var Minipass = class extends EventEmitter {
-  [FLOWING] = false;
-  [PAUSED] = false;
-  [PIPES] = [];
-  [BUFFER] = [];
-  [OBJECTMODE];
-  [ENCODING];
-  [ASYNC];
-  [DECODER];
-  [EOF] = false;
-  [EMITTED_END] = false;
-  [EMITTING_END] = false;
-  [CLOSED] = false;
-  [EMITTED_ERROR] = null;
-  [BUFFERLENGTH] = 0;
-  [DESTROYED] = false;
-  [SIGNAL];
-  [ABORTED] = false;
-  [DATALISTENERS] = 0;
-  [DISCARDED] = false;
-  /**
-   * true if the stream can be written
-   */
-  writable = true;
-  /**
-   * true if the stream can be read
-   */
-  readable = true;
-  /**
-   * If `RType` is Buffer, then options do not need to be provided.
-   * Otherwise, an options object must be provided to specify either
-   * {@link Minipass.SharedOptions.objectMode} or
-   * {@link Minipass.SharedOptions.encoding}, as appropriate.
-   */
-  constructor(...args) {
-    const options = args[0] || {};
-    super();
-    if (options.objectMode && typeof options.encoding === "string") {
-      throw new TypeError("Encoding and objectMode may not be used together");
-    }
-    if (isObjectModeOptions(options)) {
-      this[OBJECTMODE] = true;
-      this[ENCODING] = null;
-    } else if (isEncodingOptions(options)) {
-      this[ENCODING] = options.encoding;
-      this[OBJECTMODE] = false;
-    } else {
-      this[OBJECTMODE] = false;
-      this[ENCODING] = null;
-    }
-    this[ASYNC] = !!options.async;
-    this[DECODER] = this[ENCODING] ? new StringDecoder(this[ENCODING]) : null;
-    if (options && options.debugExposeBuffer === true) {
-      Object.defineProperty(this, "buffer", { get: () => this[BUFFER] });
-    }
-    if (options && options.debugExposePipes === true) {
-      Object.defineProperty(this, "pipes", { get: () => this[PIPES] });
-    }
-    const { signal } = options;
-    if (signal) {
-      this[SIGNAL] = signal;
-      if (signal.aborted) {
-        this[ABORT]();
-      } else {
-        signal.addEventListener("abort", () => this[ABORT]());
-      }
-    }
-  }
-  /**
-   * The amount of data stored in the buffer waiting to be read.
-   *
-   * For Buffer strings, this will be the total byte length.
-   * For string encoding streams, this will be the string character length,
-   * according to JavaScript's `string.length` logic.
-   * For objectMode streams, this is a count of the items waiting to be
-   * emitted.
-   */
-  get bufferLength() {
-    return this[BUFFERLENGTH];
-  }
-  /**
-   * The `BufferEncoding` currently in use, or `null`
-   */
-  get encoding() {
-    return this[ENCODING];
-  }
-  /**
-   * @deprecated - This is a read only property
-   */
-  set encoding(_enc) {
-    throw new Error("Encoding must be set at instantiation time");
-  }
-  /**
-   * @deprecated - Encoding may only be set at instantiation time
-   */
-  setEncoding(_enc) {
-    throw new Error("Encoding must be set at instantiation time");
-  }
-  /**
-   * True if this is an objectMode stream
-   */
-  get objectMode() {
-    return this[OBJECTMODE];
-  }
-  /**
-   * @deprecated - This is a read-only property
-   */
-  set objectMode(_om) {
-    throw new Error("objectMode must be set at instantiation time");
-  }
-  /**
-   * true if this is an async stream
-   */
-  get ["async"]() {
-    return this[ASYNC];
-  }
-  /**
-   * Set to true to make this stream async.
-   *
-   * Once set, it cannot be unset, as this would potentially cause incorrect
-   * behavior.  Ie, a sync stream can be made async, but an async stream
-   * cannot be safely made sync.
-   */
-  set ["async"](a) {
-    this[ASYNC] = this[ASYNC] || !!a;
-  }
-  // drop everything and get out of the flow completely
-  [ABORT]() {
-    this[ABORTED] = true;
-    this.emit("abort", this[SIGNAL]?.reason);
-    this.destroy(this[SIGNAL]?.reason);
-  }
-  /**
-   * True if the stream has been aborted.
-   */
-  get aborted() {
-    return this[ABORTED];
-  }
-  /**
-   * No-op setter. Stream aborted status is set via the AbortSignal provided
-   * in the constructor options.
-   */
-  set aborted(_) {
-  }
-  write(chunk, encoding, cb) {
-    if (this[ABORTED])
-      return false;
-    if (this[EOF])
-      throw new Error("write after end");
-    if (this[DESTROYED]) {
-      this.emit("error", Object.assign(new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" }));
-      return true;
-    }
-    if (typeof encoding === "function") {
-      cb = encoding;
-      encoding = "utf8";
-    }
-    if (!encoding)
-      encoding = "utf8";
-    const fn = this[ASYNC] ? defer : nodefer;
-    if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
-      if (isArrayBufferView(chunk)) {
-        chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
-      } else if (isArrayBufferLike(chunk)) {
-        chunk = Buffer.from(chunk);
-      } else if (typeof chunk !== "string") {
-        throw new Error("Non-contiguous data written to non-objectMode stream");
-      }
-    }
-    if (this[OBJECTMODE]) {
-      if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
-        this[FLUSH](true);
-      if (this[FLOWING])
-        this.emit("data", chunk);
-      else
-        this[BUFFERPUSH](chunk);
-      if (this[BUFFERLENGTH] !== 0)
-        this.emit("readable");
-      if (cb)
-        fn(cb);
-      return this[FLOWING];
-    }
-    if (!chunk.length) {
-      if (this[BUFFERLENGTH] !== 0)
-        this.emit("readable");
-      if (cb)
-        fn(cb);
-      return this[FLOWING];
-    }
-    if (typeof chunk === "string" && // unless it is a string already ready for us to use
-    !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) {
-      chunk = Buffer.from(chunk, encoding);
-    }
-    if (Buffer.isBuffer(chunk) && this[ENCODING]) {
-      chunk = this[DECODER].write(chunk);
-    }
-    if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
-      this[FLUSH](true);
-    if (this[FLOWING])
-      this.emit("data", chunk);
-    else
-      this[BUFFERPUSH](chunk);
-    if (this[BUFFERLENGTH] !== 0)
-      this.emit("readable");
-    if (cb)
-      fn(cb);
-    return this[FLOWING];
-  }
-  /**
-   * Low-level explicit read method.
-   *
-   * In objectMode, the argument is ignored, and one item is returned if
-   * available.
-   *
-   * `n` is the number of bytes (or in the case of encoding streams,
-   * characters) to consume. If `n` is not provided, then the entire buffer
-   * is returned, or `null` is returned if no data is available.
-   *
-   * If `n` is greater that the amount of data in the internal buffer,
-   * then `null` is returned.
-   */
-  read(n) {
-    if (this[DESTROYED])
-      return null;
-    this[DISCARDED] = false;
-    if (this[BUFFERLENGTH] === 0 || n === 0 || n && n > this[BUFFERLENGTH]) {
-      this[MAYBE_EMIT_END]();
-      return null;
-    }
-    if (this[OBJECTMODE])
-      n = null;
-    if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {
-      this[BUFFER] = [
-        this[ENCODING] ? this[BUFFER].join("") : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])
-      ];
-    }
-    const ret = this[READ](n || null, this[BUFFER][0]);
-    this[MAYBE_EMIT_END]();
-    return ret;
-  }
-  [READ](n, chunk) {
-    if (this[OBJECTMODE])
-      this[BUFFERSHIFT]();
-    else {
-      const c = chunk;
-      if (n === c.length || n === null)
-        this[BUFFERSHIFT]();
-      else if (typeof c === "string") {
-        this[BUFFER][0] = c.slice(n);
-        chunk = c.slice(0, n);
-        this[BUFFERLENGTH] -= n;
-      } else {
-        this[BUFFER][0] = c.subarray(n);
-        chunk = c.subarray(0, n);
-        this[BUFFERLENGTH] -= n;
-      }
-    }
-    this.emit("data", chunk);
-    if (!this[BUFFER].length && !this[EOF])
-      this.emit("drain");
-    return chunk;
-  }
-  end(chunk, encoding, cb) {
-    if (typeof chunk === "function") {
-      cb = chunk;
-      chunk = void 0;
-    }
-    if (typeof encoding === "function") {
-      cb = encoding;
-      encoding = "utf8";
-    }
-    if (chunk !== void 0)
-      this.write(chunk, encoding);
-    if (cb)
-      this.once("end", cb);
-    this[EOF] = true;
-    this.writable = false;
-    if (this[FLOWING] || !this[PAUSED])
-      this[MAYBE_EMIT_END]();
-    return this;
-  }
-  // don't let the internal resume be overwritten
-  [RESUME]() {
-    if (this[DESTROYED])
-      return;
-    if (!this[DATALISTENERS] && !this[PIPES].length) {
-      this[DISCARDED] = true;
-    }
-    this[PAUSED] = false;
-    this[FLOWING] = true;
-    this.emit("resume");
-    if (this[BUFFER].length)
-      this[FLUSH]();
-    else if (this[EOF])
-      this[MAYBE_EMIT_END]();
-    else
-      this.emit("drain");
-  }
-  /**
-   * Resume the stream if it is currently in a paused state
-   *
-   * If called when there are no pipe destinations or `data` event listeners,
-   * this will place the stream in a "discarded" state, where all data will
-   * be thrown away. The discarded state is removed if a pipe destination or
-   * data handler is added, if pause() is called, or if any synchronous or
-   * asynchronous iteration is started.
-   */
-  resume() {
-    return this[RESUME]();
-  }
-  /**
-   * Pause the stream
-   */
-  pause() {
-    this[FLOWING] = false;
-    this[PAUSED] = true;
-    this[DISCARDED] = false;
-  }
-  /**
-   * true if the stream has been forcibly destroyed
-   */
-  get destroyed() {
-    return this[DESTROYED];
-  }
-  /**
-   * true if the stream is currently in a flowing state, meaning that
-   * any writes will be immediately emitted.
-   */
-  get flowing() {
-    return this[FLOWING];
-  }
-  /**
-   * true if the stream is currently in a paused state
-   */
-  get paused() {
-    return this[PAUSED];
-  }
-  [BUFFERPUSH](chunk) {
-    if (this[OBJECTMODE])
-      this[BUFFERLENGTH] += 1;
-    else
-      this[BUFFERLENGTH] += chunk.length;
-    this[BUFFER].push(chunk);
-  }
-  [BUFFERSHIFT]() {
-    if (this[OBJECTMODE])
-      this[BUFFERLENGTH] -= 1;
-    else
-      this[BUFFERLENGTH] -= this[BUFFER][0].length;
-    return this[BUFFER].shift();
-  }
-  [FLUSH](noDrain = false) {
-    do {
-    } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && this[BUFFER].length);
-    if (!noDrain && !this[BUFFER].length && !this[EOF])
-      this.emit("drain");
-  }
-  [FLUSHCHUNK](chunk) {
-    this.emit("data", chunk);
-    return this[FLOWING];
-  }
-  /**
-   * Pipe all data emitted by this stream into the destination provided.
-   *
-   * Triggers the flow of data.
-   */
-  pipe(dest, opts) {
-    if (this[DESTROYED])
-      return dest;
-    this[DISCARDED] = false;
-    const ended = this[EMITTED_END];
-    opts = opts || {};
-    if (dest === proc.stdout || dest === proc.stderr)
-      opts.end = false;
-    else
-      opts.end = opts.end !== false;
-    opts.proxyErrors = !!opts.proxyErrors;
-    if (ended) {
-      if (opts.end)
-        dest.end();
-    } else {
-      this[PIPES].push(!opts.proxyErrors ? new Pipe(this, dest, opts) : new PipeProxyErrors(this, dest, opts));
-      if (this[ASYNC])
-        defer(() => this[RESUME]());
-      else
-        this[RESUME]();
-    }
-    return dest;
-  }
-  /**
-   * Fully unhook a piped destination stream.
-   *
-   * If the destination stream was the only consumer of this stream (ie,
-   * there are no other piped destinations or `'data'` event listeners)
-   * then the flow of data will stop until there is another consumer or
-   * {@link Minipass#resume} is explicitly called.
-   */
-  unpipe(dest) {
-    const p = this[PIPES].find((p2) => p2.dest === dest);
-    if (p) {
-      if (this[PIPES].length === 1) {
-        if (this[FLOWING] && this[DATALISTENERS] === 0) {
-          this[FLOWING] = false;
-        }
-        this[PIPES] = [];
-      } else
-        this[PIPES].splice(this[PIPES].indexOf(p), 1);
-      p.unpipe();
-    }
-  }
-  /**
-   * Alias for {@link Minipass#on}
-   */
-  addListener(ev, handler) {
-    return this.on(ev, handler);
-  }
-  /**
-   * Mostly identical to `EventEmitter.on`, with the following
-   * behavior differences to prevent data loss and unnecessary hangs:
-   *
-   * - Adding a 'data' event handler will trigger the flow of data
-   *
-   * - Adding a 'readable' event handler when there is data waiting to be read
-   *   will cause 'readable' to be emitted immediately.
-   *
-   * - Adding an 'endish' event handler ('end', 'finish', etc.) which has
-   *   already passed will cause the event to be emitted immediately and all
-   *   handlers removed.
-   *
-   * - Adding an 'error' event handler after an error has been emitted will
-   *   cause the event to be re-emitted immediately with the error previously
-   *   raised.
-   */
-  on(ev, handler) {
-    const ret = super.on(ev, handler);
-    if (ev === "data") {
-      this[DISCARDED] = false;
-      this[DATALISTENERS]++;
-      if (!this[PIPES].length && !this[FLOWING]) {
-        this[RESUME]();
-      }
-    } else if (ev === "readable" && this[BUFFERLENGTH] !== 0) {
-      super.emit("readable");
-    } else if (isEndish(ev) && this[EMITTED_END]) {
-      super.emit(ev);
-      this.removeAllListeners(ev);
-    } else if (ev === "error" && this[EMITTED_ERROR]) {
-      const h = handler;
-      if (this[ASYNC])
-        defer(() => h.call(this, this[EMITTED_ERROR]));
-      else
-        h.call(this, this[EMITTED_ERROR]);
-    }
-    return ret;
-  }
-  /**
-   * Alias for {@link Minipass#off}
-   */
-  removeListener(ev, handler) {
-    return this.off(ev, handler);
-  }
-  /**
-   * Mostly identical to `EventEmitter.off`
-   *
-   * If a 'data' event handler is removed, and it was the last consumer
-   * (ie, there are no pipe destinations or other 'data' event listeners),
-   * then the flow of data will stop until there is another consumer or
-   * {@link Minipass#resume} is explicitly called.
-   */
-  off(ev, handler) {
-    const ret = super.off(ev, handler);
-    if (ev === "data") {
-      this[DATALISTENERS] = this.listeners("data").length;
-      if (this[DATALISTENERS] === 0 && !this[DISCARDED] && !this[PIPES].length) {
-        this[FLOWING] = false;
-      }
-    }
-    return ret;
-  }
-  /**
-   * Mostly identical to `EventEmitter.removeAllListeners`
-   *
-   * If all 'data' event handlers are removed, and they were the last consumer
-   * (ie, there are no pipe destinations), then the flow of data will stop
-   * until there is another consumer or {@link Minipass#resume} is explicitly
-   * called.
-   */
-  removeAllListeners(ev) {
-    const ret = super.removeAllListeners(ev);
-    if (ev === "data" || ev === void 0) {
-      this[DATALISTENERS] = 0;
-      if (!this[DISCARDED] && !this[PIPES].length) {
-        this[FLOWING] = false;
-      }
-    }
-    return ret;
-  }
-  /**
-   * true if the 'end' event has been emitted
-   */
-  get emittedEnd() {
-    return this[EMITTED_END];
-  }
-  [MAYBE_EMIT_END]() {
-    if (!this[EMITTING_END] && !this[EMITTED_END] && !this[DESTROYED] && this[BUFFER].length === 0 && this[EOF]) {
-      this[EMITTING_END] = true;
-      this.emit("end");
-      this.emit("prefinish");
-      this.emit("finish");
-      if (this[CLOSED])
-        this.emit("close");
-      this[EMITTING_END] = false;
-    }
-  }
-  /**
-   * Mostly identical to `EventEmitter.emit`, with the following
-   * behavior differences to prevent data loss and unnecessary hangs:
-   *
-   * If the stream has been destroyed, and the event is something other
-   * than 'close' or 'error', then `false` is returned and no handlers
-   * are called.
-   *
-   * If the event is 'end', and has already been emitted, then the event
-   * is ignored. If the stream is in a paused or non-flowing state, then
-   * the event will be deferred until data flow resumes. If the stream is
-   * async, then handlers will be called on the next tick rather than
-   * immediately.
-   *
-   * If the event is 'close', and 'end' has not yet been emitted, then
-   * the event will be deferred until after 'end' is emitted.
-   *
-   * If the event is 'error', and an AbortSignal was provided for the stream,
-   * and there are no listeners, then the event is ignored, matching the
-   * behavior of node core streams in the presense of an AbortSignal.
-   *
-   * If the event is 'finish' or 'prefinish', then all listeners will be
-   * removed after emitting the event, to prevent double-firing.
-   */
-  emit(ev, ...args) {
-    const data = args[0];
-    if (ev !== "error" && ev !== "close" && ev !== DESTROYED && this[DESTROYED]) {
-      return false;
-    } else if (ev === "data") {
-      return !this[OBJECTMODE] && !data ? false : this[ASYNC] ? (defer(() => this[EMITDATA](data)), true) : this[EMITDATA](data);
-    } else if (ev === "end") {
-      return this[EMITEND]();
-    } else if (ev === "close") {
-      this[CLOSED] = true;
-      if (!this[EMITTED_END] && !this[DESTROYED])
-        return false;
-      const ret2 = super.emit("close");
-      this.removeAllListeners("close");
-      return ret2;
-    } else if (ev === "error") {
-      this[EMITTED_ERROR] = data;
-      super.emit(ERROR, data);
-      const ret2 = !this[SIGNAL] || this.listeners("error").length ? super.emit("error", data) : false;
-      this[MAYBE_EMIT_END]();
-      return ret2;
-    } else if (ev === "resume") {
-      const ret2 = super.emit("resume");
-      this[MAYBE_EMIT_END]();
-      return ret2;
-    } else if (ev === "finish" || ev === "prefinish") {
-      const ret2 = super.emit(ev);
-      this.removeAllListeners(ev);
-      return ret2;
-    }
-    const ret = super.emit(ev, ...args);
-    this[MAYBE_EMIT_END]();
-    return ret;
-  }
-  [EMITDATA](data) {
-    for (const p of this[PIPES]) {
-      if (p.dest.write(data) === false)
-        this.pause();
-    }
-    const ret = this[DISCARDED] ? false : super.emit("data", data);
-    this[MAYBE_EMIT_END]();
-    return ret;
-  }
-  [EMITEND]() {
-    if (this[EMITTED_END])
-      return false;
-    this[EMITTED_END] = true;
-    this.readable = false;
-    return this[ASYNC] ? (defer(() => this[EMITEND2]()), true) : this[EMITEND2]();
-  }
-  [EMITEND2]() {
-    if (this[DECODER]) {
-      const data = this[DECODER].end();
-      if (data) {
-        for (const p of this[PIPES]) {
-          p.dest.write(data);
-        }
-        if (!this[DISCARDED])
-          super.emit("data", data);
-      }
-    }
-    for (const p of this[PIPES]) {
-      p.end();
-    }
-    const ret = super.emit("end");
-    this.removeAllListeners("end");
-    return ret;
-  }
-  /**
-   * Return a Promise that resolves to an array of all emitted data once
-   * the stream ends.
-   */
-  async collect() {
-    const buf = Object.assign([], {
-      dataLength: 0
-    });
-    if (!this[OBJECTMODE])
-      buf.dataLength = 0;
-    const p = this.promise();
-    this.on("data", (c) => {
-      buf.push(c);
-      if (!this[OBJECTMODE])
-        buf.dataLength += c.length;
-    });
-    await p;
-    return buf;
-  }
-  /**
-   * Return a Promise that resolves to the concatenation of all emitted data
-   * once the stream ends.
-   *
-   * Not allowed on objectMode streams.
-   */
-  async concat() {
-    if (this[OBJECTMODE]) {
-      throw new Error("cannot concat in objectMode");
-    }
-    const buf = await this.collect();
-    return this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength);
-  }
-  /**
-   * Return a void Promise that resolves once the stream ends.
-   */
-  async promise() {
-    return new Promise((resolve, reject) => {
-      this.on(DESTROYED, () => reject(new Error("stream destroyed")));
-      this.on("error", (er) => reject(er));
-      this.on("end", () => resolve());
-    });
-  }
-  /**
-   * Asynchronous `for await of` iteration.
-   *
-   * This will continue emitting all chunks until the stream terminates.
-   */
-  [Symbol.asyncIterator]() {
-    this[DISCARDED] = false;
-    let stopped = false;
-    const stop = async () => {
-      this.pause();
-      stopped = true;
-      return { value: void 0, done: true };
-    };
-    const next = () => {
-      if (stopped)
-        return stop();
-      const res = this.read();
-      if (res !== null)
-        return Promise.resolve({ done: false, value: res });
-      if (this[EOF])
-        return stop();
-      let resolve;
-      let reject;
-      const onerr = (er) => {
-        this.off("data", ondata);
-        this.off("end", onend);
-        this.off(DESTROYED, ondestroy);
-        stop();
-        reject(er);
-      };
-      const ondata = (value) => {
-        this.off("error", onerr);
-        this.off("end", onend);
-        this.off(DESTROYED, ondestroy);
-        this.pause();
-        resolve({ value, done: !!this[EOF] });
-      };
-      const onend = () => {
-        this.off("error", onerr);
-        this.off("data", ondata);
-        this.off(DESTROYED, ondestroy);
-        stop();
-        resolve({ done: true, value: void 0 });
-      };
-      const ondestroy = () => onerr(new Error("stream destroyed"));
-      return new Promise((res2, rej) => {
-        reject = rej;
-        resolve = res2;
-        this.once(DESTROYED, ondestroy);
-        this.once("error", onerr);
-        this.once("end", onend);
-        this.once("data", ondata);
-      });
-    };
-    return {
-      next,
-      throw: stop,
-      return: stop,
-      [Symbol.asyncIterator]() {
-        return this;
-      }
-    };
-  }
-  /**
-   * Synchronous `for of` iteration.
-   *
-   * The iteration will terminate when the internal buffer runs out, even
-   * if the stream has not yet terminated.
-   */
-  [Symbol.iterator]() {
-    this[DISCARDED] = false;
-    let stopped = false;
-    const stop = () => {
-      this.pause();
-      this.off(ERROR, stop);
-      this.off(DESTROYED, stop);
-      this.off("end", stop);
-      stopped = true;
-      return { done: true, value: void 0 };
-    };
-    const next = () => {
-      if (stopped)
-        return stop();
-      const value = this.read();
-      return value === null ? stop() : { done: false, value };
-    };
-    this.once("end", stop);
-    this.once(ERROR, stop);
-    this.once(DESTROYED, stop);
-    return {
-      next,
-      throw: stop,
-      return: stop,
-      [Symbol.iterator]() {
-        return this;
-      }
-    };
-  }
-  /**
-   * Destroy a stream, preventing it from being used for any further purpose.
-   *
-   * If the stream has a `close()` method, then it will be called on
-   * destruction.
-   *
-   * After destruction, any attempt to write data, read data, or emit most
-   * events will be ignored.
-   *
-   * If an error argument is provided, then it will be emitted in an
-   * 'error' event.
-   */
-  destroy(er) {
-    if (this[DESTROYED]) {
-      if (er)
-        this.emit("error", er);
-      else
-        this.emit(DESTROYED);
-      return this;
-    }
-    this[DESTROYED] = true;
-    this[DISCARDED] = true;
-    this[BUFFER].length = 0;
-    this[BUFFERLENGTH] = 0;
-    const wc = this;
-    if (typeof wc.close === "function" && !this[CLOSED])
-      wc.close();
-    if (er)
-      this.emit("error", er);
-    else
-      this.emit(DESTROYED);
-    return this;
-  }
-  /**
-   * Alias for {@link isStream}
-   *
-   * Former export location, maintained for backwards compatibility.
-   *
-   * @deprecated
-   */
-  static get isStream() {
-    return isStream;
-  }
-};
-
-// node_modules/path-scurry/dist/esm/index.js
-var realpathSync = rps.native;
-var defaultFS = {
-  lstatSync,
-  readdir: readdirCB,
-  readdirSync,
-  readlinkSync,
-  realpathSync,
-  promises: {
-    lstat,
-    readdir,
-    readlink,
-    realpath
-  }
-};
-var fsFromOption = (fsOption) => !fsOption || fsOption === defaultFS || fsOption === actualFS ? defaultFS : {
-  ...defaultFS,
-  ...fsOption,
-  promises: {
-    ...defaultFS.promises,
-    ...fsOption.promises || {}
-  }
-};
-var uncDriveRegexp = /^\\\\\?\\([a-z]:)\\?$/i;
-var uncToDrive = (rootPath) => rootPath.replace(/\//g, "\\").replace(uncDriveRegexp, "$1\\");
-var eitherSep = /[\\\/]/;
-var UNKNOWN = 0;
-var IFIFO = 1;
-var IFCHR = 2;
-var IFDIR = 4;
-var IFBLK = 6;
-var IFREG = 8;
-var IFLNK = 10;
-var IFSOCK = 12;
-var IFMT = 15;
-var IFMT_UNKNOWN = ~IFMT;
-var READDIR_CALLED = 16;
-var LSTAT_CALLED = 32;
-var ENOTDIR = 64;
-var ENOENT = 128;
-var ENOREADLINK = 256;
-var ENOREALPATH = 512;
-var ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH;
-var TYPEMASK = 1023;
-var entToType = (s) => s.isFile() ? IFREG : s.isDirectory() ? IFDIR : s.isSymbolicLink() ? IFLNK : s.isCharacterDevice() ? IFCHR : s.isBlockDevice() ? IFBLK : s.isSocket() ? IFSOCK : s.isFIFO() ? IFIFO : UNKNOWN;
-var normalizeCache = /* @__PURE__ */ new Map();
-var normalize = (s) => {
-  const c = normalizeCache.get(s);
-  if (c)
-    return c;
-  const n = s.normalize("NFKD");
-  normalizeCache.set(s, n);
-  return n;
-};
-var normalizeNocaseCache = /* @__PURE__ */ new Map();
-var normalizeNocase = (s) => {
-  const c = normalizeNocaseCache.get(s);
-  if (c)
-    return c;
-  const n = normalize(s.toLowerCase());
-  normalizeNocaseCache.set(s, n);
-  return n;
-};
-var ResolveCache = class extends LRUCache {
-  constructor() {
-    super({ max: 256 });
-  }
-};
-var ChildrenCache = class extends LRUCache {
-  constructor(maxSize = 16 * 1024) {
-    super({
-      maxSize,
-      // parent + children
-      sizeCalculation: (a) => a.length + 1
-    });
-  }
-};
-var setAsCwd = Symbol("PathScurry setAsCwd");
-var PathBase = class {
-  /**
-   * the basename of this path
-   *
-   * **Important**: *always* test the path name against any test string
-   * usingthe {@link isNamed} method, and not by directly comparing this
-   * string. Otherwise, unicode path strings that the system sees as identical
-   * will not be properly treated as the same path, leading to incorrect
-   * behavior and possible security issues.
-   */
-  name;
-  /**
-   * the Path entry corresponding to the path root.
-   *
-   * @internal
-   */
-  root;
-  /**
-   * All roots found within the current PathScurry family
-   *
-   * @internal
-   */
-  roots;
-  /**
-   * a reference to the parent path, or undefined in the case of root entries
-   *
-   * @internal
-   */
-  parent;
-  /**
-   * boolean indicating whether paths are compared case-insensitively
-   * @internal
-   */
-  nocase;
-  // potential default fs override
-  #fs;
-  // Stats fields
-  #dev;
-  get dev() {
-    return this.#dev;
-  }
-  #mode;
-  get mode() {
-    return this.#mode;
-  }
-  #nlink;
-  get nlink() {
-    return this.#nlink;
-  }
-  #uid;
-  get uid() {
-    return this.#uid;
-  }
-  #gid;
-  get gid() {
-    return this.#gid;
-  }
-  #rdev;
-  get rdev() {
-    return this.#rdev;
-  }
-  #blksize;
-  get blksize() {
-    return this.#blksize;
-  }
-  #ino;
-  get ino() {
-    return this.#ino;
-  }
-  #size;
-  get size() {
-    return this.#size;
-  }
-  #blocks;
-  get blocks() {
-    return this.#blocks;
-  }
-  #atimeMs;
-  get atimeMs() {
-    return this.#atimeMs;
-  }
-  #mtimeMs;
-  get mtimeMs() {
-    return this.#mtimeMs;
-  }
-  #ctimeMs;
-  get ctimeMs() {
-    return this.#ctimeMs;
-  }
-  #birthtimeMs;
-  get birthtimeMs() {
-    return this.#birthtimeMs;
-  }
-  #atime;
-  get atime() {
-    return this.#atime;
-  }
-  #mtime;
-  get mtime() {
-    return this.#mtime;
-  }
-  #ctime;
-  get ctime() {
-    return this.#ctime;
-  }
-  #birthtime;
-  get birthtime() {
-    return this.#birthtime;
-  }
-  #matchName;
-  #depth;
-  #fullpath;
-  #fullpathPosix;
-  #relative;
-  #relativePosix;
-  #type;
-  #children;
-  #linkTarget;
-  #realpath;
-  /**
-   * This property is for compatibility with the Dirent class as of
-   * Node v20, where Dirent['path'] refers to the path of the directory
-   * that was passed to readdir.  So, somewhat counterintuitively, this
-   * property refers to the *parent* path, not the path object itself.
-   * For root entries, it's the path to the entry itself.
-   */
-  get path() {
-    return (this.parent || this).fullpath();
-  }
-  /**
-   * Do not create new Path objects directly.  They should always be accessed
-   * via the PathScurry class or other methods on the Path class.
-   *
-   * @internal
-   */
-  constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
-    this.name = name;
-    this.#matchName = nocase ? normalizeNocase(name) : normalize(name);
-    this.#type = type & TYPEMASK;
-    this.nocase = nocase;
-    this.roots = roots;
-    this.root = root || this;
-    this.#children = children;
-    this.#fullpath = opts.fullpath;
-    this.#relative = opts.relative;
-    this.#relativePosix = opts.relativePosix;
-    this.parent = opts.parent;
-    if (this.parent) {
-      this.#fs = this.parent.#fs;
-    } else {
-      this.#fs = fsFromOption(opts.fs);
-    }
-  }
-  /**
-   * Returns the depth of the Path object from its root.
-   *
-   * For example, a path at `/foo/bar` would have a depth of 2.
-   */
-  depth() {
-    if (this.#depth !== void 0)
-      return this.#depth;
-    if (!this.parent)
-      return this.#depth = 0;
-    return this.#depth = this.parent.depth() + 1;
-  }
-  /**
-   * @internal
-   */
-  childrenCache() {
-    return this.#children;
-  }
-  /**
-   * Get the Path object referenced by the string path, resolved from this Path
-   */
-  resolve(path4) {
-    if (!path4) {
-      return this;
-    }
-    const rootPath = this.getRootString(path4);
-    const dir = path4.substring(rootPath.length);
-    const dirParts = dir.split(this.splitSep);
-    const result = rootPath ? this.getRoot(rootPath).#resolveParts(dirParts) : this.#resolveParts(dirParts);
-    return result;
-  }
-  #resolveParts(dirParts) {
-    let p = this;
-    for (const part of dirParts) {
-      p = p.child(part);
-    }
-    return p;
-  }
-  /**
-   * Returns the cached children Path objects, if still available.  If they
-   * have fallen out of the cache, then returns an empty array, and resets the
-   * READDIR_CALLED bit, so that future calls to readdir() will require an fs
-   * lookup.
-   *
-   * @internal
-   */
-  children() {
-    const cached = this.#children.get(this);
-    if (cached) {
-      return cached;
-    }
-    const children = Object.assign([], { provisional: 0 });
-    this.#children.set(this, children);
-    this.#type &= ~READDIR_CALLED;
-    return children;
-  }
-  /**
-   * Resolves a path portion and returns or creates the child Path.
-   *
-   * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is
-   * `'..'`.
-   *
-   * This should not be called directly.  If `pathPart` contains any path
-   * separators, it will lead to unsafe undefined behavior.
-   *
-   * Use `Path.resolve()` instead.
-   *
-   * @internal
-   */
-  child(pathPart, opts) {
-    if (pathPart === "" || pathPart === ".") {
-      return this;
-    }
-    if (pathPart === "..") {
-      return this.parent || this;
-    }
-    const children = this.children();
-    const name = this.nocase ? normalizeNocase(pathPart) : normalize(pathPart);
-    for (const p of children) {
-      if (p.#matchName === name) {
-        return p;
-      }
-    }
-    const s = this.parent ? this.sep : "";
-    const fullpath = this.#fullpath ? this.#fullpath + s + pathPart : void 0;
-    const pchild = this.newChild(pathPart, UNKNOWN, {
-      ...opts,
-      parent: this,
-      fullpath
-    });
-    if (!this.canReaddir()) {
-      pchild.#type |= ENOENT;
-    }
-    children.push(pchild);
-    return pchild;
-  }
-  /**
-   * The relative path from the cwd. If it does not share an ancestor with
-   * the cwd, then this ends up being equivalent to the fullpath()
-   */
-  relative() {
-    if (this.#relative !== void 0) {
-      return this.#relative;
-    }
-    const name = this.name;
-    const p = this.parent;
-    if (!p) {
-      return this.#relative = this.name;
-    }
-    const pv = p.relative();
-    return pv + (!pv || !p.parent ? "" : this.sep) + name;
-  }
-  /**
-   * The relative path from the cwd, using / as the path separator.
-   * If it does not share an ancestor with
-   * the cwd, then this ends up being equivalent to the fullpathPosix()
-   * On posix systems, this is identical to relative().
-   */
-  relativePosix() {
-    if (this.sep === "/")
-      return this.relative();
-    if (this.#relativePosix !== void 0)
-      return this.#relativePosix;
-    const name = this.name;
-    const p = this.parent;
-    if (!p) {
-      return this.#relativePosix = this.fullpathPosix();
-    }
-    const pv = p.relativePosix();
-    return pv + (!pv || !p.parent ? "" : "/") + name;
-  }
-  /**
-   * The fully resolved path string for this Path entry
-   */
-  fullpath() {
-    if (this.#fullpath !== void 0) {
-      return this.#fullpath;
-    }
-    const name = this.name;
-    const p = this.parent;
-    if (!p) {
-      return this.#fullpath = this.name;
-    }
-    const pv = p.fullpath();
-    const fp = pv + (!p.parent ? "" : this.sep) + name;
-    return this.#fullpath = fp;
-  }
-  /**
-   * On platforms other than windows, this is identical to fullpath.
-   *
-   * On windows, this is overridden to return the forward-slash form of the
-   * full UNC path.
-   */
-  fullpathPosix() {
-    if (this.#fullpathPosix !== void 0)
-      return this.#fullpathPosix;
-    if (this.sep === "/")
-      return this.#fullpathPosix = this.fullpath();
-    if (!this.parent) {
-      const p2 = this.fullpath().replace(/\\/g, "/");
-      if (/^[a-z]:\//i.test(p2)) {
-        return this.#fullpathPosix = `//?/${p2}`;
-      } else {
-        return this.#fullpathPosix = p2;
-      }
-    }
-    const p = this.parent;
-    const pfpp = p.fullpathPosix();
-    const fpp = pfpp + (!pfpp || !p.parent ? "" : "/") + this.name;
-    return this.#fullpathPosix = fpp;
-  }
-  /**
-   * Is the Path of an unknown type?
-   *
-   * Note that we might know *something* about it if there has been a previous
-   * filesystem operation, for example that it does not exist, or is not a
-   * link, or whether it has child entries.
-   */
-  isUnknown() {
-    return (this.#type & IFMT) === UNKNOWN;
-  }
-  isType(type) {
-    return this[`is${type}`]();
-  }
-  getType() {
-    return this.isUnknown() ? "Unknown" : this.isDirectory() ? "Directory" : this.isFile() ? "File" : this.isSymbolicLink() ? "SymbolicLink" : this.isFIFO() ? "FIFO" : this.isCharacterDevice() ? "CharacterDevice" : this.isBlockDevice() ? "BlockDevice" : (
-      /* c8 ignore start */
-      this.isSocket() ? "Socket" : "Unknown"
-    );
-  }
-  /**
-   * Is the Path a regular file?
-   */
-  isFile() {
-    return (this.#type & IFMT) === IFREG;
-  }
-  /**
-   * Is the Path a directory?
-   */
-  isDirectory() {
-    return (this.#type & IFMT) === IFDIR;
-  }
-  /**
-   * Is the path a character device?
-   */
-  isCharacterDevice() {
-    return (this.#type & IFMT) === IFCHR;
-  }
-  /**
-   * Is the path a block device?
-   */
-  isBlockDevice() {
-    return (this.#type & IFMT) === IFBLK;
-  }
-  /**
-   * Is the path a FIFO pipe?
-   */
-  isFIFO() {
-    return (this.#type & IFMT) === IFIFO;
-  }
-  /**
-   * Is the path a socket?
-   */
-  isSocket() {
-    return (this.#type & IFMT) === IFSOCK;
-  }
-  /**
-   * Is the path a symbolic link?
-   */
-  isSymbolicLink() {
-    return (this.#type & IFLNK) === IFLNK;
-  }
-  /**
-   * Return the entry if it has been subject of a successful lstat, or
-   * undefined otherwise.
-   *
-   * Does not read the filesystem, so an undefined result *could* simply
-   * mean that we haven't called lstat on it.
-   */
-  lstatCached() {
-    return this.#type & LSTAT_CALLED ? this : void 0;
-  }
-  /**
-   * Return the cached link target if the entry has been the subject of a
-   * successful readlink, or undefined otherwise.
-   *
-   * Does not read the filesystem, so an undefined result *could* just mean we
-   * don't have any cached data. Only use it if you are very sure that a
-   * readlink() has been called at some point.
-   */
-  readlinkCached() {
-    return this.#linkTarget;
-  }
-  /**
-   * Returns the cached realpath target if the entry has been the subject
-   * of a successful realpath, or undefined otherwise.
-   *
-   * Does not read the filesystem, so an undefined result *could* just mean we
-   * don't have any cached data. Only use it if you are very sure that a
-   * realpath() has been called at some point.
-   */
-  realpathCached() {
-    return this.#realpath;
-  }
-  /**
-   * Returns the cached child Path entries array if the entry has been the
-   * subject of a successful readdir(), or [] otherwise.
-   *
-   * Does not read the filesystem, so an empty array *could* just mean we
-   * don't have any cached data. Only use it if you are very sure that a
-   * readdir() has been called recently enough to still be valid.
-   */
-  readdirCached() {
-    const children = this.children();
-    return children.slice(0, children.provisional);
-  }
-  /**
-   * Return true if it's worth trying to readlink.  Ie, we don't (yet) have
-   * any indication that readlink will definitely fail.
-   *
-   * Returns false if the path is known to not be a symlink, if a previous
-   * readlink failed, or if the entry does not exist.
-   */
-  canReadlink() {
-    if (this.#linkTarget)
-      return true;
-    if (!this.parent)
-      return false;
-    const ifmt = this.#type & IFMT;
-    return !(ifmt !== UNKNOWN && ifmt !== IFLNK || this.#type & ENOREADLINK || this.#type & ENOENT);
-  }
-  /**
-   * Return true if readdir has previously been successfully called on this
-   * path, indicating that cachedReaddir() is likely valid.
-   */
-  calledReaddir() {
-    return !!(this.#type & READDIR_CALLED);
-  }
-  /**
-   * Returns true if the path is known to not exist. That is, a previous lstat
-   * or readdir failed to verify its existence when that would have been
-   * expected, or a parent entry was marked either enoent or enotdir.
-   */
-  isENOENT() {
-    return !!(this.#type & ENOENT);
-  }
-  /**
-   * Return true if the path is a match for the given path name.  This handles
-   * case sensitivity and unicode normalization.
-   *
-   * Note: even on case-sensitive systems, it is **not** safe to test the
-   * equality of the `.name` property to determine whether a given pathname
-   * matches, due to unicode normalization mismatches.
-   *
-   * Always use this method instead of testing the `path.name` property
-   * directly.
-   */
-  isNamed(n) {
-    return !this.nocase ? this.#matchName === normalize(n) : this.#matchName === normalizeNocase(n);
-  }
-  /**
-   * Return the Path object corresponding to the target of a symbolic link.
-   *
-   * If the Path is not a symbolic link, or if the readlink call fails for any
-   * reason, `undefined` is returned.
-   *
-   * Result is cached, and thus may be outdated if the filesystem is mutated.
-   */
-  async readlink() {
-    const target = this.#linkTarget;
-    if (target) {
-      return target;
-    }
-    if (!this.canReadlink()) {
-      return void 0;
-    }
-    if (!this.parent) {
-      return void 0;
-    }
-    try {
-      const read = await this.#fs.promises.readlink(this.fullpath());
-      const linkTarget = (await this.parent.realpath())?.resolve(read);
-      if (linkTarget) {
-        return this.#linkTarget = linkTarget;
-      }
-    } catch (er) {
-      this.#readlinkFail(er.code);
-      return void 0;
-    }
-  }
-  /**
-   * Synchronous {@link PathBase.readlink}
-   */
-  readlinkSync() {
-    const target = this.#linkTarget;
-    if (target) {
-      return target;
-    }
-    if (!this.canReadlink()) {
-      return void 0;
-    }
-    if (!this.parent) {
-      return void 0;
-    }
-    try {
-      const read = this.#fs.readlinkSync(this.fullpath());
-      const linkTarget = this.parent.realpathSync()?.resolve(read);
-      if (linkTarget) {
-        return this.#linkTarget = linkTarget;
-      }
-    } catch (er) {
-      this.#readlinkFail(er.code);
-      return void 0;
-    }
-  }
-  #readdirSuccess(children) {
-    this.#type |= READDIR_CALLED;
-    for (let p = children.provisional; p < children.length; p++) {
-      const c = children[p];
-      if (c)
-        c.#markENOENT();
-    }
-  }
-  #markENOENT() {
-    if (this.#type & ENOENT)
-      return;
-    this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN;
-    this.#markChildrenENOENT();
-  }
-  #markChildrenENOENT() {
-    const children = this.children();
-    children.provisional = 0;
-    for (const p of children) {
-      p.#markENOENT();
-    }
-  }
-  #markENOREALPATH() {
-    this.#type |= ENOREALPATH;
-    this.#markENOTDIR();
-  }
-  // save the information when we know the entry is not a dir
-  #markENOTDIR() {
-    if (this.#type & ENOTDIR)
-      return;
-    let t = this.#type;
-    if ((t & IFMT) === IFDIR)
-      t &= IFMT_UNKNOWN;
-    this.#type = t | ENOTDIR;
-    this.#markChildrenENOENT();
-  }
-  #readdirFail(code = "") {
-    if (code === "ENOTDIR" || code === "EPERM") {
-      this.#markENOTDIR();
-    } else if (code === "ENOENT") {
-      this.#markENOENT();
-    } else {
-      this.children().provisional = 0;
-    }
-  }
-  #lstatFail(code = "") {
-    if (code === "ENOTDIR") {
-      const p = this.parent;
-      p.#markENOTDIR();
-    } else if (code === "ENOENT") {
-      this.#markENOENT();
-    }
-  }
-  #readlinkFail(code = "") {
-    let ter = this.#type;
-    ter |= ENOREADLINK;
-    if (code === "ENOENT")
-      ter |= ENOENT;
-    if (code === "EINVAL" || code === "UNKNOWN") {
-      ter &= IFMT_UNKNOWN;
-    }
-    this.#type = ter;
-    if (code === "ENOTDIR" && this.parent) {
-      this.parent.#markENOTDIR();
-    }
-  }
-  #readdirAddChild(e, c) {
-    return this.#readdirMaybePromoteChild(e, c) || this.#readdirAddNewChild(e, c);
-  }
-  #readdirAddNewChild(e, c) {
-    const type = entToType(e);
-    const child = this.newChild(e.name, type, { parent: this });
-    const ifmt = child.#type & IFMT;
-    if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {
-      child.#type |= ENOTDIR;
-    }
-    c.unshift(child);
-    c.provisional++;
-    return child;
-  }
-  #readdirMaybePromoteChild(e, c) {
-    for (let p = c.provisional; p < c.length; p++) {
-      const pchild = c[p];
-      const name = this.nocase ? normalizeNocase(e.name) : normalize(e.name);
-      if (name !== pchild.#matchName) {
-        continue;
-      }
-      return this.#readdirPromoteChild(e, pchild, p, c);
-    }
-  }
-  #readdirPromoteChild(e, p, index, c) {
-    const v = p.name;
-    p.#type = p.#type & IFMT_UNKNOWN | entToType(e);
-    if (v !== e.name)
-      p.name = e.name;
-    if (index !== c.provisional) {
-      if (index === c.length - 1)
-        c.pop();
-      else
-        c.splice(index, 1);
-      c.unshift(p);
-    }
-    c.provisional++;
-    return p;
-  }
-  /**
-   * Call lstat() on this Path, and update all known information that can be
-   * determined.
-   *
-   * Note that unlike `fs.lstat()`, the returned value does not contain some
-   * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
-   * information is required, you will need to call `fs.lstat` yourself.
-   *
-   * If the Path refers to a nonexistent file, or if the lstat call fails for
-   * any reason, `undefined` is returned.  Otherwise the updated Path object is
-   * returned.
-   *
-   * Results are cached, and thus may be out of date if the filesystem is
-   * mutated.
-   */
-  async lstat() {
-    if ((this.#type & ENOENT) === 0) {
-      try {
-        this.#applyStat(await this.#fs.promises.lstat(this.fullpath()));
-        return this;
-      } catch (er) {
-        this.#lstatFail(er.code);
-      }
-    }
-  }
-  /**
-   * synchronous {@link PathBase.lstat}
-   */
-  lstatSync() {
-    if ((this.#type & ENOENT) === 0) {
-      try {
-        this.#applyStat(this.#fs.lstatSync(this.fullpath()));
-        return this;
-      } catch (er) {
-        this.#lstatFail(er.code);
-      }
-    }
-  }
-  #applyStat(st) {
-    const { atime, atimeMs, birthtime, birthtimeMs, blksize, blocks: blocks2, ctime, ctimeMs, dev, gid, ino, mode, mtime, mtimeMs, nlink, rdev, size, uid } = st;
-    this.#atime = atime;
-    this.#atimeMs = atimeMs;
-    this.#birthtime = birthtime;
-    this.#birthtimeMs = birthtimeMs;
-    this.#blksize = blksize;
-    this.#blocks = blocks2;
-    this.#ctime = ctime;
-    this.#ctimeMs = ctimeMs;
-    this.#dev = dev;
-    this.#gid = gid;
-    this.#ino = ino;
-    this.#mode = mode;
-    this.#mtime = mtime;
-    this.#mtimeMs = mtimeMs;
-    this.#nlink = nlink;
-    this.#rdev = rdev;
-    this.#size = size;
-    this.#uid = uid;
-    const ifmt = entToType(st);
-    this.#type = this.#type & IFMT_UNKNOWN | ifmt | LSTAT_CALLED;
-    if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {
-      this.#type |= ENOTDIR;
-    }
-  }
-  #onReaddirCB = [];
-  #readdirCBInFlight = false;
-  #callOnReaddirCB(children) {
-    this.#readdirCBInFlight = false;
-    const cbs = this.#onReaddirCB.slice();
-    this.#onReaddirCB.length = 0;
-    cbs.forEach((cb) => cb(null, children));
-  }
-  /**
-   * Standard node-style callback interface to get list of directory entries.
-   *
-   * If the Path cannot or does not contain any children, then an empty array
-   * is returned.
-   *
-   * Results are cached, and thus may be out of date if the filesystem is
-   * mutated.
-   *
-   * @param cb The callback called with (er, entries).  Note that the `er`
-   * param is somewhat extraneous, as all readdir() errors are handled and
-   * simply result in an empty set of entries being returned.
-   * @param allowZalgo Boolean indicating that immediately known results should
-   * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release
-   * zalgo at your peril, the dark pony lord is devious and unforgiving.
-   */
-  readdirCB(cb, allowZalgo = false) {
-    if (!this.canReaddir()) {
-      if (allowZalgo)
-        cb(null, []);
-      else
-        queueMicrotask(() => cb(null, []));
-      return;
-    }
-    const children = this.children();
-    if (this.calledReaddir()) {
-      const c = children.slice(0, children.provisional);
-      if (allowZalgo)
-        cb(null, c);
-      else
-        queueMicrotask(() => cb(null, c));
-      return;
-    }
-    this.#onReaddirCB.push(cb);
-    if (this.#readdirCBInFlight) {
-      return;
-    }
-    this.#readdirCBInFlight = true;
-    const fullpath = this.fullpath();
-    this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {
-      if (er) {
-        this.#readdirFail(er.code);
-        children.provisional = 0;
-      } else {
-        for (const e of entries) {
-          this.#readdirAddChild(e, children);
-        }
-        this.#readdirSuccess(children);
-      }
-      this.#callOnReaddirCB(children.slice(0, children.provisional));
-      return;
-    });
-  }
-  #asyncReaddirInFlight;
-  /**
-   * Return an array of known child entries.
-   *
-   * If the Path cannot or does not contain any children, then an empty array
-   * is returned.
-   *
-   * Results are cached, and thus may be out of date if the filesystem is
-   * mutated.
-   */
-  async readdir() {
-    if (!this.canReaddir()) {
-      return [];
-    }
-    const children = this.children();
-    if (this.calledReaddir()) {
-      return children.slice(0, children.provisional);
-    }
-    const fullpath = this.fullpath();
-    if (this.#asyncReaddirInFlight) {
-      await this.#asyncReaddirInFlight;
-    } else {
-      let resolve = () => {
-      };
-      this.#asyncReaddirInFlight = new Promise((res) => resolve = res);
-      try {
-        for (const e of await this.#fs.promises.readdir(fullpath, {
-          withFileTypes: true
-        })) {
-          this.#readdirAddChild(e, children);
-        }
-        this.#readdirSuccess(children);
-      } catch (er) {
-        this.#readdirFail(er.code);
-        children.provisional = 0;
-      }
-      this.#asyncReaddirInFlight = void 0;
-      resolve();
-    }
-    return children.slice(0, children.provisional);
-  }
-  /**
-   * synchronous {@link PathBase.readdir}
-   */
-  readdirSync() {
-    if (!this.canReaddir()) {
-      return [];
-    }
-    const children = this.children();
-    if (this.calledReaddir()) {
-      return children.slice(0, children.provisional);
-    }
-    const fullpath = this.fullpath();
-    try {
-      for (const e of this.#fs.readdirSync(fullpath, {
-        withFileTypes: true
-      })) {
-        this.#readdirAddChild(e, children);
-      }
-      this.#readdirSuccess(children);
-    } catch (er) {
-      this.#readdirFail(er.code);
-      children.provisional = 0;
-    }
-    return children.slice(0, children.provisional);
-  }
-  canReaddir() {
-    if (this.#type & ENOCHILD)
-      return false;
-    const ifmt = IFMT & this.#type;
-    if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {
-      return false;
-    }
-    return true;
-  }
-  shouldWalk(dirs, walkFilter) {
-    return (this.#type & IFDIR) === IFDIR && !(this.#type & ENOCHILD) && !dirs.has(this) && (!walkFilter || walkFilter(this));
-  }
-  /**
-   * Return the Path object corresponding to path as resolved
-   * by realpath(3).
-   *
-   * If the realpath call fails for any reason, `undefined` is returned.
-   *
-   * Result is cached, and thus may be outdated if the filesystem is mutated.
-   * On success, returns a Path object.
-   */
-  async realpath() {
-    if (this.#realpath)
-      return this.#realpath;
-    if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
-      return void 0;
-    try {
-      const rp = await this.#fs.promises.realpath(this.fullpath());
-      return this.#realpath = this.resolve(rp);
-    } catch (_) {
-      this.#markENOREALPATH();
-    }
-  }
-  /**
-   * Synchronous {@link realpath}
-   */
-  realpathSync() {
-    if (this.#realpath)
-      return this.#realpath;
-    if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
-      return void 0;
-    try {
-      const rp = this.#fs.realpathSync(this.fullpath());
-      return this.#realpath = this.resolve(rp);
-    } catch (_) {
-      this.#markENOREALPATH();
-    }
-  }
-  /**
-   * Internal method to mark this Path object as the scurry cwd,
-   * called by {@link PathScurry#chdir}
-   *
-   * @internal
-   */
-  [setAsCwd](oldCwd) {
-    if (oldCwd === this)
-      return;
-    const changed = /* @__PURE__ */ new Set([]);
-    let rp = [];
-    let p = this;
-    while (p && p.parent) {
-      changed.add(p);
-      p.#relative = rp.join(this.sep);
-      p.#relativePosix = rp.join("/");
-      p = p.parent;
-      rp.push("..");
-    }
-    p = oldCwd;
-    while (p && p.parent && !changed.has(p)) {
-      p.#relative = void 0;
-      p.#relativePosix = void 0;
-      p = p.parent;
-    }
-  }
-};
-var PathWin32 = class _PathWin32 extends PathBase {
-  /**
-   * Separator for generating path strings.
-   */
-  sep = "\\";
-  /**
-   * Separator for parsing path strings.
-   */
-  splitSep = eitherSep;
-  /**
-   * Do not create new Path objects directly.  They should always be accessed
-   * via the PathScurry class or other methods on the Path class.
-   *
-   * @internal
-   */
-  constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
-    super(name, type, root, roots, nocase, children, opts);
-  }
-  /**
-   * @internal
-   */
-  newChild(name, type = UNKNOWN, opts = {}) {
-    return new _PathWin32(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
-  }
-  /**
-   * @internal
-   */
-  getRootString(path4) {
-    return win32.parse(path4).root;
-  }
-  /**
-   * @internal
-   */
-  getRoot(rootPath) {
-    rootPath = uncToDrive(rootPath.toUpperCase());
-    if (rootPath === this.root.name) {
-      return this.root;
-    }
-    for (const [compare2, root] of Object.entries(this.roots)) {
-      if (this.sameRoot(rootPath, compare2)) {
-        return this.roots[rootPath] = root;
-      }
-    }
-    return this.roots[rootPath] = new PathScurryWin32(rootPath, this).root;
-  }
-  /**
-   * @internal
-   */
-  sameRoot(rootPath, compare2 = this.root.name) {
-    rootPath = rootPath.toUpperCase().replace(/\//g, "\\").replace(uncDriveRegexp, "$1\\");
-    return rootPath === compare2;
-  }
-};
-var PathPosix = class _PathPosix extends PathBase {
-  /**
-   * separator for parsing path strings
-   */
-  splitSep = "/";
-  /**
-   * separator for generating path strings
-   */
-  sep = "/";
-  /**
-   * Do not create new Path objects directly.  They should always be accessed
-   * via the PathScurry class or other methods on the Path class.
-   *
-   * @internal
-   */
-  constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
-    super(name, type, root, roots, nocase, children, opts);
-  }
-  /**
-   * @internal
-   */
-  getRootString(path4) {
-    return path4.startsWith("/") ? "/" : "";
-  }
-  /**
-   * @internal
-   */
-  getRoot(_rootPath) {
-    return this.root;
-  }
-  /**
-   * @internal
-   */
-  newChild(name, type = UNKNOWN, opts = {}) {
-    return new _PathPosix(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
-  }
-};
-var PathScurryBase = class {
-  /**
-   * The root Path entry for the current working directory of this Scurry
-   */
-  root;
-  /**
-   * The string path for the root of this Scurry's current working directory
-   */
-  rootPath;
-  /**
-   * A collection of all roots encountered, referenced by rootPath
-   */
-  roots;
-  /**
-   * The Path entry corresponding to this PathScurry's current working directory.
-   */
-  cwd;
-  #resolveCache;
-  #resolvePosixCache;
-  #children;
-  /**
-   * Perform path comparisons case-insensitively.
-   *
-   * Defaults true on Darwin and Windows systems, false elsewhere.
-   */
-  nocase;
-  #fs;
-  /**
-   * This class should not be instantiated directly.
-   *
-   * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry
-   *
-   * @internal
-   */
-  constructor(cwd = process.cwd(), pathImpl, sep2, { nocase, childrenCacheSize = 16 * 1024, fs: fs4 = defaultFS } = {}) {
-    this.#fs = fsFromOption(fs4);
-    if (cwd instanceof URL || cwd.startsWith("file://")) {
-      cwd = fileURLToPath(cwd);
-    }
-    const cwdPath = pathImpl.resolve(cwd);
-    this.roots = /* @__PURE__ */ Object.create(null);
-    this.rootPath = this.parseRootPath(cwdPath);
-    this.#resolveCache = new ResolveCache();
-    this.#resolvePosixCache = new ResolveCache();
-    this.#children = new ChildrenCache(childrenCacheSize);
-    const split = cwdPath.substring(this.rootPath.length).split(sep2);
-    if (split.length === 1 && !split[0]) {
-      split.pop();
-    }
-    if (nocase === void 0) {
-      throw new TypeError("must provide nocase setting to PathScurryBase ctor");
-    }
-    this.nocase = nocase;
-    this.root = this.newRoot(this.#fs);
-    this.roots[this.rootPath] = this.root;
-    let prev = this.root;
-    let len = split.length - 1;
-    const joinSep = pathImpl.sep;
-    let abs = this.rootPath;
-    let sawFirst = false;
-    for (const part of split) {
-      const l = len--;
-      prev = prev.child(part, {
-        relative: new Array(l).fill("..").join(joinSep),
-        relativePosix: new Array(l).fill("..").join("/"),
-        fullpath: abs += (sawFirst ? "" : joinSep) + part
-      });
-      sawFirst = true;
-    }
-    this.cwd = prev;
-  }
-  /**
-   * Get the depth of a provided path, string, or the cwd
-   */
-  depth(path4 = this.cwd) {
-    if (typeof path4 === "string") {
-      path4 = this.cwd.resolve(path4);
-    }
-    return path4.depth();
-  }
-  /**
-   * Return the cache of child entries.  Exposed so subclasses can create
-   * child Path objects in a platform-specific way.
-   *
-   * @internal
-   */
-  childrenCache() {
-    return this.#children;
-  }
-  /**
-   * Resolve one or more path strings to a resolved string
-   *
-   * Same interface as require('path').resolve.
-   *
-   * Much faster than path.resolve() when called multiple times for the same
-   * path, because the resolved Path objects are cached.  Much slower
-   * otherwise.
-   */
-  resolve(...paths) {
-    let r = "";
-    for (let i = paths.length - 1; i >= 0; i--) {
-      const p = paths[i];
-      if (!p || p === ".")
-        continue;
-      r = r ? `${p}/${r}` : p;
-      if (this.isAbsolute(p)) {
-        break;
-      }
-    }
-    const cached = this.#resolveCache.get(r);
-    if (cached !== void 0) {
-      return cached;
-    }
-    const result = this.cwd.resolve(r).fullpath();
-    this.#resolveCache.set(r, result);
-    return result;
-  }
-  /**
-   * Resolve one or more path strings to a resolved string, returning
-   * the posix path.  Identical to .resolve() on posix systems, but on
-   * windows will return a forward-slash separated UNC path.
-   *
-   * Same interface as require('path').resolve.
-   *
-   * Much faster than path.resolve() when called multiple times for the same
-   * path, because the resolved Path objects are cached.  Much slower
-   * otherwise.
-   */
-  resolvePosix(...paths) {
-    let r = "";
-    for (let i = paths.length - 1; i >= 0; i--) {
-      const p = paths[i];
-      if (!p || p === ".")
-        continue;
-      r = r ? `${p}/${r}` : p;
-      if (this.isAbsolute(p)) {
-        break;
-      }
-    }
-    const cached = this.#resolvePosixCache.get(r);
-    if (cached !== void 0) {
-      return cached;
-    }
-    const result = this.cwd.resolve(r).fullpathPosix();
-    this.#resolvePosixCache.set(r, result);
-    return result;
-  }
-  /**
-   * find the relative path from the cwd to the supplied path string or entry
-   */
-  relative(entry = this.cwd) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    }
-    return entry.relative();
-  }
-  /**
-   * find the relative path from the cwd to the supplied path string or
-   * entry, using / as the path delimiter, even on Windows.
-   */
-  relativePosix(entry = this.cwd) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    }
-    return entry.relativePosix();
-  }
-  /**
-   * Return the basename for the provided string or Path object
-   */
-  basename(entry = this.cwd) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    }
-    return entry.name;
-  }
-  /**
-   * Return the dirname for the provided string or Path object
-   */
-  dirname(entry = this.cwd) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    }
-    return (entry.parent || entry).fullpath();
-  }
-  async readdir(entry = this.cwd, opts = {
-    withFileTypes: true
-  }) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      opts = entry;
-      entry = this.cwd;
-    }
-    const { withFileTypes } = opts;
-    if (!entry.canReaddir()) {
-      return [];
-    } else {
-      const p = await entry.readdir();
-      return withFileTypes ? p : p.map((e) => e.name);
-    }
-  }
-  readdirSync(entry = this.cwd, opts = {
-    withFileTypes: true
-  }) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      opts = entry;
-      entry = this.cwd;
-    }
-    const { withFileTypes = true } = opts;
-    if (!entry.canReaddir()) {
-      return [];
-    } else if (withFileTypes) {
-      return entry.readdirSync();
-    } else {
-      return entry.readdirSync().map((e) => e.name);
-    }
-  }
-  /**
-   * Call lstat() on the string or Path object, and update all known
-   * information that can be determined.
-   *
-   * Note that unlike `fs.lstat()`, the returned value does not contain some
-   * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
-   * information is required, you will need to call `fs.lstat` yourself.
-   *
-   * If the Path refers to a nonexistent file, or if the lstat call fails for
-   * any reason, `undefined` is returned.  Otherwise the updated Path object is
-   * returned.
-   *
-   * Results are cached, and thus may be out of date if the filesystem is
-   * mutated.
-   */
-  async lstat(entry = this.cwd) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    }
-    return entry.lstat();
-  }
-  /**
-   * synchronous {@link PathScurryBase.lstat}
-   */
-  lstatSync(entry = this.cwd) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    }
-    return entry.lstatSync();
-  }
-  async readlink(entry = this.cwd, { withFileTypes } = {
-    withFileTypes: false
-  }) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      withFileTypes = entry.withFileTypes;
-      entry = this.cwd;
-    }
-    const e = await entry.readlink();
-    return withFileTypes ? e : e?.fullpath();
-  }
-  readlinkSync(entry = this.cwd, { withFileTypes } = {
-    withFileTypes: false
-  }) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      withFileTypes = entry.withFileTypes;
-      entry = this.cwd;
-    }
-    const e = entry.readlinkSync();
-    return withFileTypes ? e : e?.fullpath();
-  }
-  async realpath(entry = this.cwd, { withFileTypes } = {
-    withFileTypes: false
-  }) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      withFileTypes = entry.withFileTypes;
-      entry = this.cwd;
-    }
-    const e = await entry.realpath();
-    return withFileTypes ? e : e?.fullpath();
-  }
-  realpathSync(entry = this.cwd, { withFileTypes } = {
-    withFileTypes: false
-  }) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      withFileTypes = entry.withFileTypes;
-      entry = this.cwd;
-    }
-    const e = entry.realpathSync();
-    return withFileTypes ? e : e?.fullpath();
-  }
-  async walk(entry = this.cwd, opts = {}) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      opts = entry;
-      entry = this.cwd;
-    }
-    const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts;
-    const results = [];
-    if (!filter2 || filter2(entry)) {
-      results.push(withFileTypes ? entry : entry.fullpath());
-    }
-    const dirs = /* @__PURE__ */ new Set();
-    const walk = (dir, cb) => {
-      dirs.add(dir);
-      dir.readdirCB((er, entries) => {
-        if (er) {
-          return cb(er);
-        }
-        let len = entries.length;
-        if (!len)
-          return cb();
-        const next = () => {
-          if (--len === 0) {
-            cb();
-          }
-        };
-        for (const e of entries) {
-          if (!filter2 || filter2(e)) {
-            results.push(withFileTypes ? e : e.fullpath());
-          }
-          if (follow && e.isSymbolicLink()) {
-            e.realpath().then((r) => r?.isUnknown() ? r.lstat() : r).then((r) => r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next());
-          } else {
-            if (e.shouldWalk(dirs, walkFilter)) {
-              walk(e, next);
-            } else {
-              next();
-            }
-          }
-        }
-      }, true);
-    };
-    const start = entry;
-    return new Promise((res, rej) => {
-      walk(start, (er) => {
-        if (er)
-          return rej(er);
-        res(results);
-      });
-    });
-  }
-  walkSync(entry = this.cwd, opts = {}) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      opts = entry;
-      entry = this.cwd;
-    }
-    const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts;
-    const results = [];
-    if (!filter2 || filter2(entry)) {
-      results.push(withFileTypes ? entry : entry.fullpath());
-    }
-    const dirs = /* @__PURE__ */ new Set([entry]);
-    for (const dir of dirs) {
-      const entries = dir.readdirSync();
-      for (const e of entries) {
-        if (!filter2 || filter2(e)) {
-          results.push(withFileTypes ? e : e.fullpath());
-        }
-        let r = e;
-        if (e.isSymbolicLink()) {
-          if (!(follow && (r = e.realpathSync())))
-            continue;
-          if (r.isUnknown())
-            r.lstatSync();
-        }
-        if (r.shouldWalk(dirs, walkFilter)) {
-          dirs.add(r);
-        }
-      }
-    }
-    return results;
-  }
-  /**
-   * Support for `for await`
-   *
-   * Alias for {@link PathScurryBase.iterate}
-   *
-   * Note: As of Node 19, this is very slow, compared to other methods of
-   * walking.  Consider using {@link PathScurryBase.stream} if memory overhead
-   * and backpressure are concerns, or {@link PathScurryBase.walk} if not.
-   */
-  [Symbol.asyncIterator]() {
-    return this.iterate();
-  }
-  iterate(entry = this.cwd, options = {}) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      options = entry;
-      entry = this.cwd;
-    }
-    return this.stream(entry, options)[Symbol.asyncIterator]();
-  }
-  /**
-   * Iterating over a PathScurry performs a synchronous walk.
-   *
-   * Alias for {@link PathScurryBase.iterateSync}
-   */
-  [Symbol.iterator]() {
-    return this.iterateSync();
-  }
-  *iterateSync(entry = this.cwd, opts = {}) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      opts = entry;
-      entry = this.cwd;
-    }
-    const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts;
-    if (!filter2 || filter2(entry)) {
-      yield withFileTypes ? entry : entry.fullpath();
-    }
-    const dirs = /* @__PURE__ */ new Set([entry]);
-    for (const dir of dirs) {
-      const entries = dir.readdirSync();
-      for (const e of entries) {
-        if (!filter2 || filter2(e)) {
-          yield withFileTypes ? e : e.fullpath();
-        }
-        let r = e;
-        if (e.isSymbolicLink()) {
-          if (!(follow && (r = e.realpathSync())))
-            continue;
-          if (r.isUnknown())
-            r.lstatSync();
-        }
-        if (r.shouldWalk(dirs, walkFilter)) {
-          dirs.add(r);
-        }
-      }
-    }
-  }
-  stream(entry = this.cwd, opts = {}) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      opts = entry;
-      entry = this.cwd;
-    }
-    const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts;
-    const results = new Minipass({ objectMode: true });
-    if (!filter2 || filter2(entry)) {
-      results.write(withFileTypes ? entry : entry.fullpath());
-    }
-    const dirs = /* @__PURE__ */ new Set();
-    const queue = [entry];
-    let processing = 0;
-    const process3 = () => {
-      let paused = false;
-      while (!paused) {
-        const dir = queue.shift();
-        if (!dir) {
-          if (processing === 0)
-            results.end();
-          return;
-        }
-        processing++;
-        dirs.add(dir);
-        const onReaddir = (er, entries, didRealpaths = false) => {
-          if (er)
-            return results.emit("error", er);
-          if (follow && !didRealpaths) {
-            const promises = [];
-            for (const e of entries) {
-              if (e.isSymbolicLink()) {
-                promises.push(e.realpath().then((r) => r?.isUnknown() ? r.lstat() : r));
-              }
-            }
-            if (promises.length) {
-              Promise.all(promises).then(() => onReaddir(null, entries, true));
-              return;
-            }
-          }
-          for (const e of entries) {
-            if (e && (!filter2 || filter2(e))) {
-              if (!results.write(withFileTypes ? e : e.fullpath())) {
-                paused = true;
-              }
-            }
-          }
-          processing--;
-          for (const e of entries) {
-            const r = e.realpathCached() || e;
-            if (r.shouldWalk(dirs, walkFilter)) {
-              queue.push(r);
-            }
-          }
-          if (paused && !results.flowing) {
-            results.once("drain", process3);
-          } else if (!sync2) {
-            process3();
-          }
-        };
-        let sync2 = true;
-        dir.readdirCB(onReaddir, true);
-        sync2 = false;
-      }
-    };
-    process3();
-    return results;
-  }
-  streamSync(entry = this.cwd, opts = {}) {
-    if (typeof entry === "string") {
-      entry = this.cwd.resolve(entry);
-    } else if (!(entry instanceof PathBase)) {
-      opts = entry;
-      entry = this.cwd;
-    }
-    const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts;
-    const results = new Minipass({ objectMode: true });
-    const dirs = /* @__PURE__ */ new Set();
-    if (!filter2 || filter2(entry)) {
-      results.write(withFileTypes ? entry : entry.fullpath());
-    }
-    const queue = [entry];
-    let processing = 0;
-    const process3 = () => {
-      let paused = false;
-      while (!paused) {
-        const dir = queue.shift();
-        if (!dir) {
-          if (processing === 0)
-            results.end();
-          return;
-        }
-        processing++;
-        dirs.add(dir);
-        const entries = dir.readdirSync();
-        for (const e of entries) {
-          if (!filter2 || filter2(e)) {
-            if (!results.write(withFileTypes ? e : e.fullpath())) {
-              paused = true;
-            }
-          }
-        }
-        processing--;
-        for (const e of entries) {
-          let r = e;
-          if (e.isSymbolicLink()) {
-            if (!(follow && (r = e.realpathSync())))
-              continue;
-            if (r.isUnknown())
-              r.lstatSync();
-          }
-          if (r.shouldWalk(dirs, walkFilter)) {
-            queue.push(r);
-          }
-        }
-      }
-      if (paused && !results.flowing)
-        results.once("drain", process3);
-    };
-    process3();
-    return results;
-  }
-  chdir(path4 = this.cwd) {
-    const oldCwd = this.cwd;
-    this.cwd = typeof path4 === "string" ? this.cwd.resolve(path4) : path4;
-    this.cwd[setAsCwd](oldCwd);
-  }
-};
-var PathScurryWin32 = class extends PathScurryBase {
-  /**
-   * separator for generating path strings
-   */
-  sep = "\\";
-  constructor(cwd = process.cwd(), opts = {}) {
-    const { nocase = true } = opts;
-    super(cwd, win32, "\\", { ...opts, nocase });
-    this.nocase = nocase;
-    for (let p = this.cwd; p; p = p.parent) {
-      p.nocase = this.nocase;
-    }
-  }
-  /**
-   * @internal
-   */
-  parseRootPath(dir) {
-    return win32.parse(dir).root.toUpperCase();
-  }
-  /**
-   * @internal
-   */
-  newRoot(fs4) {
-    return new PathWin32(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs: fs4 });
-  }
-  /**
-   * Return true if the provided path string is an absolute path
-   */
-  isAbsolute(p) {
-    return p.startsWith("/") || p.startsWith("\\") || /^[a-z]:(\/|\\)/i.test(p);
-  }
-};
-var PathScurryPosix = class extends PathScurryBase {
-  /**
-   * separator for generating path strings
-   */
-  sep = "/";
-  constructor(cwd = process.cwd(), opts = {}) {
-    const { nocase = false } = opts;
-    super(cwd, posix, "/", { ...opts, nocase });
-    this.nocase = nocase;
-  }
-  /**
-   * @internal
-   */
-  parseRootPath(_dir) {
-    return "/";
-  }
-  /**
-   * @internal
-   */
-  newRoot(fs4) {
-    return new PathPosix(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs: fs4 });
-  }
-  /**
-   * Return true if the provided path string is an absolute path
-   */
-  isAbsolute(p) {
-    return p.startsWith("/");
-  }
-};
-var PathScurryDarwin = class extends PathScurryPosix {
-  constructor(cwd = process.cwd(), opts = {}) {
-    const { nocase = true } = opts;
-    super(cwd, { ...opts, nocase });
-  }
-};
-var Path = process.platform === "win32" ? PathWin32 : PathPosix;
-var PathScurry = process.platform === "win32" ? PathScurryWin32 : process.platform === "darwin" ? PathScurryDarwin : PathScurryPosix;
-
-// node_modules/glob/dist/esm/glob.js
-import { fileURLToPath as fileURLToPath2 } from "url";
-
-// node_modules/glob/dist/esm/pattern.js
-var isPatternList = (pl) => pl.length >= 1;
-var isGlobList = (gl) => gl.length >= 1;
-var Pattern = class _Pattern {
-  #patternList;
-  #globList;
-  #index;
-  length;
-  #platform;
-  #rest;
-  #globString;
-  #isDrive;
-  #isUNC;
-  #isAbsolute;
-  #followGlobstar = true;
-  constructor(patternList, globList, index, platform) {
-    if (!isPatternList(patternList)) {
-      throw new TypeError("empty pattern list");
-    }
-    if (!isGlobList(globList)) {
-      throw new TypeError("empty glob list");
-    }
-    if (globList.length !== patternList.length) {
-      throw new TypeError("mismatched pattern list and glob list lengths");
-    }
-    this.length = patternList.length;
-    if (index < 0 || index >= this.length) {
-      throw new TypeError("index out of range");
-    }
-    this.#patternList = patternList;
-    this.#globList = globList;
-    this.#index = index;
-    this.#platform = platform;
-    if (this.#index === 0) {
-      if (this.isUNC()) {
-        const [p0, p1, p2, p3, ...prest] = this.#patternList;
-        const [g0, g1, g2, g3, ...grest] = this.#globList;
-        if (prest[0] === "") {
-          prest.shift();
-          grest.shift();
-        }
-        const p = [p0, p1, p2, p3, ""].join("/");
-        const g = [g0, g1, g2, g3, ""].join("/");
-        this.#patternList = [p, ...prest];
-        this.#globList = [g, ...grest];
-        this.length = this.#patternList.length;
-      } else if (this.isDrive() || this.isAbsolute()) {
-        const [p1, ...prest] = this.#patternList;
-        const [g1, ...grest] = this.#globList;
-        if (prest[0] === "") {
-          prest.shift();
-          grest.shift();
-        }
-        const p = p1 + "/";
-        const g = g1 + "/";
-        this.#patternList = [p, ...prest];
-        this.#globList = [g, ...grest];
-        this.length = this.#patternList.length;
-      }
-    }
-  }
-  /**
-   * The first entry in the parsed list of patterns
-   */
-  pattern() {
-    return this.#patternList[this.#index];
-  }
-  /**
-   * true of if pattern() returns a string
-   */
-  isString() {
-    return typeof this.#patternList[this.#index] === "string";
-  }
-  /**
-   * true of if pattern() returns GLOBSTAR
-   */
-  isGlobstar() {
-    return this.#patternList[this.#index] === GLOBSTAR;
-  }
-  /**
-   * true if pattern() returns a regexp
-   */
-  isRegExp() {
-    return this.#patternList[this.#index] instanceof RegExp;
-  }
-  /**
-   * The /-joined set of glob parts that make up this pattern
-   */
-  globString() {
-    return this.#globString = this.#globString || (this.#index === 0 ? this.isAbsolute() ? this.#globList[0] + this.#globList.slice(1).join("/") : this.#globList.join("/") : this.#globList.slice(this.#index).join("/"));
-  }
-  /**
-   * true if there are more pattern parts after this one
-   */
-  hasMore() {
-    return this.length > this.#index + 1;
-  }
-  /**
-   * The rest of the pattern after this part, or null if this is the end
-   */
-  rest() {
-    if (this.#rest !== void 0)
-      return this.#rest;
-    if (!this.hasMore())
-      return this.#rest = null;
-    this.#rest = new _Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform);
-    this.#rest.#isAbsolute = this.#isAbsolute;
-    this.#rest.#isUNC = this.#isUNC;
-    this.#rest.#isDrive = this.#isDrive;
-    return this.#rest;
-  }
-  /**
-   * true if the pattern represents a //unc/path/ on windows
-   */
-  isUNC() {
-    const pl = this.#patternList;
-    return this.#isUNC !== void 0 ? this.#isUNC : this.#isUNC = this.#platform === "win32" && this.#index === 0 && pl[0] === "" && pl[1] === "" && typeof pl[2] === "string" && !!pl[2] && typeof pl[3] === "string" && !!pl[3];
-  }
-  // pattern like C:/...
-  // split = ['C:', ...]
-  // XXX: would be nice to handle patterns like `c:*` to test the cwd
-  // in c: for *, but I don't know of a way to even figure out what that
-  // cwd is without actually chdir'ing into it?
-  /**
-   * True if the pattern starts with a drive letter on Windows
-   */
-  isDrive() {
-    const pl = this.#patternList;
-    return this.#isDrive !== void 0 ? this.#isDrive : this.#isDrive = this.#platform === "win32" && this.#index === 0 && this.length > 1 && typeof pl[0] === "string" && /^[a-z]:$/i.test(pl[0]);
-  }
-  // pattern = '/' or '/...' or '/x/...'
-  // split = ['', ''] or ['', ...] or ['', 'x', ...]
-  // Drive and UNC both considered absolute on windows
-  /**
-   * True if the pattern is rooted on an absolute path
-   */
-  isAbsolute() {
-    const pl = this.#patternList;
-    return this.#isAbsolute !== void 0 ? this.#isAbsolute : this.#isAbsolute = pl[0] === "" && pl.length > 1 || this.isDrive() || this.isUNC();
-  }
-  /**
-   * consume the root of the pattern, and return it
-   */
-  root() {
-    const p = this.#patternList[0];
-    return typeof p === "string" && this.isAbsolute() && this.#index === 0 ? p : "";
-  }
-  /**
-   * Check to see if the current globstar pattern is allowed to follow
-   * a symbolic link.
-   */
-  checkFollowGlobstar() {
-    return !(this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar);
-  }
-  /**
-   * Mark that the current globstar pattern is following a symbolic link
-   */
-  markFollowGlobstar() {
-    if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)
-      return false;
-    this.#followGlobstar = false;
-    return true;
-  }
-};
-
-// node_modules/glob/dist/esm/ignore.js
-var defaultPlatform2 = typeof process === "object" && process && typeof process.platform === "string" ? process.platform : "linux";
-var Ignore = class {
-  relative;
-  relativeChildren;
-  absolute;
-  absoluteChildren;
-  constructor(ignored, { nobrace, nocase, noext, noglobstar, platform = defaultPlatform2 }) {
-    this.relative = [];
-    this.absolute = [];
-    this.relativeChildren = [];
-    this.absoluteChildren = [];
-    const mmopts = {
-      dot: true,
-      nobrace,
-      nocase,
-      noext,
-      noglobstar,
-      optimizationLevel: 2,
-      platform,
-      nocomment: true,
-      nonegate: true
-    };
-    for (const ign of ignored) {
-      const mm = new Minimatch(ign, mmopts);
-      for (let i = 0; i < mm.set.length; i++) {
-        const parsed = mm.set[i];
-        const globParts = mm.globParts[i];
-        if (!parsed || !globParts) {
-          throw new Error("invalid pattern object");
-        }
-        while (parsed[0] === "." && globParts[0] === ".") {
-          parsed.shift();
-          globParts.shift();
-        }
-        const p = new Pattern(parsed, globParts, 0, platform);
-        const m = new Minimatch(p.globString(), mmopts);
-        const children = globParts[globParts.length - 1] === "**";
-        const absolute = p.isAbsolute();
-        if (absolute)
-          this.absolute.push(m);
-        else
-          this.relative.push(m);
-        if (children) {
-          if (absolute)
-            this.absoluteChildren.push(m);
-          else
-            this.relativeChildren.push(m);
-        }
-      }
-    }
-  }
-  ignored(p) {
-    const fullpath = p.fullpath();
-    const fullpaths = `${fullpath}/`;
-    const relative = p.relative() || ".";
-    const relatives = `${relative}/`;
-    for (const m of this.relative) {
-      if (m.match(relative) || m.match(relatives))
-        return true;
-    }
-    for (const m of this.absolute) {
-      if (m.match(fullpath) || m.match(fullpaths))
-        return true;
-    }
-    return false;
-  }
-  childrenIgnored(p) {
-    const fullpath = p.fullpath() + "/";
-    const relative = (p.relative() || ".") + "/";
-    for (const m of this.relativeChildren) {
-      if (m.match(relative))
-        return true;
-    }
-    for (const m of this.absoluteChildren) {
-      if (m.match(fullpath))
-        return true;
-    }
-    return false;
-  }
-};
-
-// node_modules/glob/dist/esm/processor.js
-var HasWalkedCache = class _HasWalkedCache {
-  store;
-  constructor(store = /* @__PURE__ */ new Map()) {
-    this.store = store;
-  }
-  copy() {
-    return new _HasWalkedCache(new Map(this.store));
-  }
-  hasWalked(target, pattern) {
-    return this.store.get(target.fullpath())?.has(pattern.globString());
-  }
-  storeWalked(target, pattern) {
-    const fullpath = target.fullpath();
-    const cached = this.store.get(fullpath);
-    if (cached)
-      cached.add(pattern.globString());
-    else
-      this.store.set(fullpath, /* @__PURE__ */ new Set([pattern.globString()]));
-  }
-};
-var MatchRecord = class {
-  store = /* @__PURE__ */ new Map();
-  add(target, absolute, ifDir) {
-    const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0);
-    const current = this.store.get(target);
-    this.store.set(target, current === void 0 ? n : n & current);
-  }
-  // match, absolute, ifdir
-  entries() {
-    return [...this.store.entries()].map(([path4, n]) => [
-      path4,
-      !!(n & 2),
-      !!(n & 1)
-    ]);
-  }
-};
-var SubWalks = class {
-  store = /* @__PURE__ */ new Map();
-  add(target, pattern) {
-    if (!target.canReaddir()) {
-      return;
-    }
-    const subs = this.store.get(target);
-    if (subs) {
-      if (!subs.find((p) => p.globString() === pattern.globString())) {
-        subs.push(pattern);
-      }
-    } else
-      this.store.set(target, [pattern]);
-  }
-  get(target) {
-    const subs = this.store.get(target);
-    if (!subs) {
-      throw new Error("attempting to walk unknown path");
-    }
-    return subs;
-  }
-  entries() {
-    return this.keys().map((k) => [k, this.store.get(k)]);
-  }
-  keys() {
-    return [...this.store.keys()].filter((t) => t.canReaddir());
-  }
-};
-var Processor = class _Processor {
-  hasWalkedCache;
-  matches = new MatchRecord();
-  subwalks = new SubWalks();
-  patterns;
-  follow;
-  dot;
-  opts;
-  constructor(opts, hasWalkedCache) {
-    this.opts = opts;
-    this.follow = !!opts.follow;
-    this.dot = !!opts.dot;
-    this.hasWalkedCache = hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache();
-  }
-  processPatterns(target, patterns) {
-    this.patterns = patterns;
-    const processingSet = patterns.map((p) => [target, p]);
-    for (let [t, pattern] of processingSet) {
-      this.hasWalkedCache.storeWalked(t, pattern);
-      const root = pattern.root();
-      const absolute = pattern.isAbsolute() && this.opts.absolute !== false;
-      if (root) {
-        t = t.resolve(root === "/" && this.opts.root !== void 0 ? this.opts.root : root);
-        const rest2 = pattern.rest();
-        if (!rest2) {
-          this.matches.add(t, true, false);
-          continue;
-        } else {
-          pattern = rest2;
-        }
-      }
-      if (t.isENOENT())
-        continue;
-      let p;
-      let rest;
-      let changed = false;
-      while (typeof (p = pattern.pattern()) === "string" && (rest = pattern.rest())) {
-        const c = t.resolve(p);
-        t = c;
-        pattern = rest;
-        changed = true;
-      }
-      p = pattern.pattern();
-      rest = pattern.rest();
-      if (changed) {
-        if (this.hasWalkedCache.hasWalked(t, pattern))
-          continue;
-        this.hasWalkedCache.storeWalked(t, pattern);
-      }
-      if (typeof p === "string") {
-        const ifDir = p === ".." || p === "" || p === ".";
-        this.matches.add(t.resolve(p), absolute, ifDir);
-        continue;
-      } else if (p === GLOBSTAR) {
-        if (!t.isSymbolicLink() || this.follow || pattern.checkFollowGlobstar()) {
-          this.subwalks.add(t, pattern);
-        }
-        const rp = rest?.pattern();
-        const rrest = rest?.rest();
-        if (!rest || (rp === "" || rp === ".") && !rrest) {
-          this.matches.add(t, absolute, rp === "" || rp === ".");
-        } else {
-          if (rp === "..") {
-            const tp = t.parent || t;
-            if (!rrest)
-              this.matches.add(tp, absolute, true);
-            else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {
-              this.subwalks.add(tp, rrest);
-            }
-          }
-        }
-      } else if (p instanceof RegExp) {
-        this.subwalks.add(t, pattern);
-      }
-    }
-    return this;
-  }
-  subwalkTargets() {
-    return this.subwalks.keys();
-  }
-  child() {
-    return new _Processor(this.opts, this.hasWalkedCache);
-  }
-  // return a new Processor containing the subwalks for each
-  // child entry, and a set of matches, and
-  // a hasWalkedCache that's a copy of this one
-  // then we're going to call
-  filterEntries(parent, entries) {
-    const patterns = this.subwalks.get(parent);
-    const results = this.child();
-    for (const e of entries) {
-      for (const pattern of patterns) {
-        const absolute = pattern.isAbsolute();
-        const p = pattern.pattern();
-        const rest = pattern.rest();
-        if (p === GLOBSTAR) {
-          results.testGlobstar(e, pattern, rest, absolute);
-        } else if (p instanceof RegExp) {
-          results.testRegExp(e, p, rest, absolute);
-        } else {
-          results.testString(e, p, rest, absolute);
-        }
-      }
-    }
-    return results;
-  }
-  testGlobstar(e, pattern, rest, absolute) {
-    if (this.dot || !e.name.startsWith(".")) {
-      if (!pattern.hasMore()) {
-        this.matches.add(e, absolute, false);
-      }
-      if (e.canReaddir()) {
-        if (this.follow || !e.isSymbolicLink()) {
-          this.subwalks.add(e, pattern);
-        } else if (e.isSymbolicLink()) {
-          if (rest && pattern.checkFollowGlobstar()) {
-            this.subwalks.add(e, rest);
-          } else if (pattern.markFollowGlobstar()) {
-            this.subwalks.add(e, pattern);
-          }
-        }
-      }
-    }
-    if (rest) {
-      const rp = rest.pattern();
-      if (typeof rp === "string" && // dots and empty were handled already
-      rp !== ".." && rp !== "" && rp !== ".") {
-        this.testString(e, rp, rest.rest(), absolute);
-      } else if (rp === "..") {
-        const ep = e.parent || e;
-        this.subwalks.add(ep, rest);
-      } else if (rp instanceof RegExp) {
-        this.testRegExp(e, rp, rest.rest(), absolute);
-      }
-    }
-  }
-  testRegExp(e, p, rest, absolute) {
-    if (!p.test(e.name))
-      return;
-    if (!rest) {
-      this.matches.add(e, absolute, false);
-    } else {
-      this.subwalks.add(e, rest);
-    }
-  }
-  testString(e, p, rest, absolute) {
-    if (!e.isNamed(p))
-      return;
-    if (!rest) {
-      this.matches.add(e, absolute, false);
-    } else {
-      this.subwalks.add(e, rest);
-    }
-  }
-};
-
-// node_modules/glob/dist/esm/walker.js
-var makeIgnore = (ignore, opts) => typeof ignore === "string" ? new Ignore([ignore], opts) : Array.isArray(ignore) ? new Ignore(ignore, opts) : ignore;
-var GlobUtil = class {
-  path;
-  patterns;
-  opts;
-  seen = /* @__PURE__ */ new Set();
-  paused = false;
-  aborted = false;
-  #onResume = [];
-  #ignore;
-  #sep;
-  signal;
-  maxDepth;
-  constructor(patterns, path4, opts) {
-    this.patterns = patterns;
-    this.path = path4;
-    this.opts = opts;
-    this.#sep = !opts.posix && opts.platform === "win32" ? "\\" : "/";
-    if (opts.ignore) {
-      this.#ignore = makeIgnore(opts.ignore, opts);
-    }
-    this.maxDepth = opts.maxDepth || Infinity;
-    if (opts.signal) {
-      this.signal = opts.signal;
-      this.signal.addEventListener("abort", () => {
-        this.#onResume.length = 0;
-      });
-    }
-  }
-  #ignored(path4) {
-    return this.seen.has(path4) || !!this.#ignore?.ignored?.(path4);
-  }
-  #childrenIgnored(path4) {
-    return !!this.#ignore?.childrenIgnored?.(path4);
-  }
-  // backpressure mechanism
-  pause() {
-    this.paused = true;
-  }
-  resume() {
-    if (this.signal?.aborted)
-      return;
-    this.paused = false;
-    let fn = void 0;
-    while (!this.paused && (fn = this.#onResume.shift())) {
-      fn();
-    }
-  }
-  onResume(fn) {
-    if (this.signal?.aborted)
-      return;
-    if (!this.paused) {
-      fn();
-    } else {
-      this.#onResume.push(fn);
-    }
-  }
-  // do the requisite realpath/stat checking, and return the path
-  // to add or undefined to filter it out.
-  async matchCheck(e, ifDir) {
-    if (ifDir && this.opts.nodir)
-      return void 0;
-    let rpc;
-    if (this.opts.realpath) {
-      rpc = e.realpathCached() || await e.realpath();
-      if (!rpc)
-        return void 0;
-      e = rpc;
-    }
-    const needStat = e.isUnknown() || this.opts.stat;
-    const s = needStat ? await e.lstat() : e;
-    if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
-      const target = await s.realpath();
-      if (target && (target.isUnknown() || this.opts.stat)) {
-        await target.lstat();
-      }
-    }
-    return this.matchCheckTest(s, ifDir);
-  }
-  matchCheckTest(e, ifDir) {
-    return e && (this.maxDepth === Infinity || e.depth() <= this.maxDepth) && (!ifDir || e.canReaddir()) && (!this.opts.nodir || !e.isDirectory()) && (!this.opts.nodir || !this.opts.follow || !e.isSymbolicLink() || !e.realpathCached()?.isDirectory()) && !this.#ignored(e) ? e : void 0;
-  }
-  matchCheckSync(e, ifDir) {
-    if (ifDir && this.opts.nodir)
-      return void 0;
-    let rpc;
-    if (this.opts.realpath) {
-      rpc = e.realpathCached() || e.realpathSync();
-      if (!rpc)
-        return void 0;
-      e = rpc;
-    }
-    const needStat = e.isUnknown() || this.opts.stat;
-    const s = needStat ? e.lstatSync() : e;
-    if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {
-      const target = s.realpathSync();
-      if (target && (target?.isUnknown() || this.opts.stat)) {
-        target.lstatSync();
-      }
-    }
-    return this.matchCheckTest(s, ifDir);
-  }
-  matchFinish(e, absolute) {
-    if (this.#ignored(e))
-      return;
-    const abs = this.opts.absolute === void 0 ? absolute : this.opts.absolute;
-    this.seen.add(e);
-    const mark = this.opts.mark && e.isDirectory() ? this.#sep : "";
-    if (this.opts.withFileTypes) {
-      this.matchEmit(e);
-    } else if (abs) {
-      const abs2 = this.opts.posix ? e.fullpathPosix() : e.fullpath();
-      this.matchEmit(abs2 + mark);
-    } else {
-      const rel = this.opts.posix ? e.relativePosix() : e.relative();
-      const pre = this.opts.dotRelative && !rel.startsWith(".." + this.#sep) ? "." + this.#sep : "";
-      this.matchEmit(!rel ? "." + mark : pre + rel + mark);
-    }
-  }
-  async match(e, absolute, ifDir) {
-    const p = await this.matchCheck(e, ifDir);
-    if (p)
-      this.matchFinish(p, absolute);
-  }
-  matchSync(e, absolute, ifDir) {
-    const p = this.matchCheckSync(e, ifDir);
-    if (p)
-      this.matchFinish(p, absolute);
-  }
-  walkCB(target, patterns, cb) {
-    if (this.signal?.aborted)
-      cb();
-    this.walkCB2(target, patterns, new Processor(this.opts), cb);
-  }
-  walkCB2(target, patterns, processor, cb) {
-    if (this.#childrenIgnored(target))
-      return cb();
-    if (this.signal?.aborted)
-      cb();
-    if (this.paused) {
-      this.onResume(() => this.walkCB2(target, patterns, processor, cb));
-      return;
-    }
-    processor.processPatterns(target, patterns);
-    let tasks = 1;
-    const next = () => {
-      if (--tasks === 0)
-        cb();
-    };
-    for (const [m, absolute, ifDir] of processor.matches.entries()) {
-      if (this.#ignored(m))
-        continue;
-      tasks++;
-      this.match(m, absolute, ifDir).then(() => next());
-    }
-    for (const t of processor.subwalkTargets()) {
-      if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
-        continue;
-      }
-      tasks++;
-      const childrenCached = t.readdirCached();
-      if (t.calledReaddir())
-        this.walkCB3(t, childrenCached, processor, next);
-      else {
-        t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true);
-      }
-    }
-    next();
-  }
-  walkCB3(target, entries, processor, cb) {
-    processor = processor.filterEntries(target, entries);
-    let tasks = 1;
-    const next = () => {
-      if (--tasks === 0)
-        cb();
-    };
-    for (const [m, absolute, ifDir] of processor.matches.entries()) {
-      if (this.#ignored(m))
-        continue;
-      tasks++;
-      this.match(m, absolute, ifDir).then(() => next());
-    }
-    for (const [target2, patterns] of processor.subwalks.entries()) {
-      tasks++;
-      this.walkCB2(target2, patterns, processor.child(), next);
-    }
-    next();
-  }
-  walkCBSync(target, patterns, cb) {
-    if (this.signal?.aborted)
-      cb();
-    this.walkCB2Sync(target, patterns, new Processor(this.opts), cb);
-  }
-  walkCB2Sync(target, patterns, processor, cb) {
-    if (this.#childrenIgnored(target))
-      return cb();
-    if (this.signal?.aborted)
-      cb();
-    if (this.paused) {
-      this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb));
-      return;
-    }
-    processor.processPatterns(target, patterns);
-    let tasks = 1;
-    const next = () => {
-      if (--tasks === 0)
-        cb();
-    };
-    for (const [m, absolute, ifDir] of processor.matches.entries()) {
-      if (this.#ignored(m))
-        continue;
-      this.matchSync(m, absolute, ifDir);
-    }
-    for (const t of processor.subwalkTargets()) {
-      if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {
-        continue;
-      }
-      tasks++;
-      const children = t.readdirSync();
-      this.walkCB3Sync(t, children, processor, next);
-    }
-    next();
-  }
-  walkCB3Sync(target, entries, processor, cb) {
-    processor = processor.filterEntries(target, entries);
-    let tasks = 1;
-    const next = () => {
-      if (--tasks === 0)
-        cb();
-    };
-    for (const [m, absolute, ifDir] of processor.matches.entries()) {
-      if (this.#ignored(m))
-        continue;
-      this.matchSync(m, absolute, ifDir);
-    }
-    for (const [target2, patterns] of processor.subwalks.entries()) {
-      tasks++;
-      this.walkCB2Sync(target2, patterns, processor.child(), next);
-    }
-    next();
-  }
-};
-var GlobWalker = class extends GlobUtil {
-  matches;
-  constructor(patterns, path4, opts) {
-    super(patterns, path4, opts);
-    this.matches = /* @__PURE__ */ new Set();
-  }
-  matchEmit(e) {
-    this.matches.add(e);
-  }
-  async walk() {
-    if (this.signal?.aborted)
-      throw this.signal.reason;
-    if (this.path.isUnknown()) {
-      await this.path.lstat();
-    }
-    await new Promise((res, rej) => {
-      this.walkCB(this.path, this.patterns, () => {
-        if (this.signal?.aborted) {
-          rej(this.signal.reason);
-        } else {
-          res(this.matches);
-        }
-      });
-    });
-    return this.matches;
-  }
-  walkSync() {
-    if (this.signal?.aborted)
-      throw this.signal.reason;
-    if (this.path.isUnknown()) {
-      this.path.lstatSync();
-    }
-    this.walkCBSync(this.path, this.patterns, () => {
-      if (this.signal?.aborted)
-        throw this.signal.reason;
-    });
-    return this.matches;
-  }
-};
-var GlobStream = class extends GlobUtil {
-  results;
-  constructor(patterns, path4, opts) {
-    super(patterns, path4, opts);
-    this.results = new Minipass({
-      signal: this.signal,
-      objectMode: true
-    });
-    this.results.on("drain", () => this.resume());
-    this.results.on("resume", () => this.resume());
-  }
-  matchEmit(e) {
-    this.results.write(e);
-    if (!this.results.flowing)
-      this.pause();
-  }
-  stream() {
-    const target = this.path;
-    if (target.isUnknown()) {
-      target.lstat().then(() => {
-        this.walkCB(target, this.patterns, () => this.results.end());
-      });
-    } else {
-      this.walkCB(target, this.patterns, () => this.results.end());
-    }
-    return this.results;
-  }
-  streamSync() {
-    if (this.path.isUnknown()) {
-      this.path.lstatSync();
-    }
-    this.walkCBSync(this.path, this.patterns, () => this.results.end());
-    return this.results;
-  }
-};
-
-// node_modules/glob/dist/esm/glob.js
-var defaultPlatform3 = typeof process === "object" && process && typeof process.platform === "string" ? process.platform : "linux";
-var Glob = class {
-  absolute;
-  cwd;
-  root;
-  dot;
-  dotRelative;
-  follow;
-  ignore;
-  magicalBraces;
-  mark;
-  matchBase;
-  maxDepth;
-  nobrace;
-  nocase;
-  nodir;
-  noext;
-  noglobstar;
-  pattern;
-  platform;
-  realpath;
-  scurry;
-  stat;
-  signal;
-  windowsPathsNoEscape;
-  withFileTypes;
-  /**
-   * The options provided to the constructor.
-   */
-  opts;
-  /**
-   * An array of parsed immutable {@link Pattern} objects.
-   */
-  patterns;
-  /**
-   * All options are stored as properties on the `Glob` object.
-   *
-   * See {@link GlobOptions} for full options descriptions.
-   *
-   * Note that a previous `Glob` object can be passed as the
-   * `GlobOptions` to another `Glob` instantiation to re-use settings
-   * and caches with a new pattern.
-   *
-   * Traversal functions can be called multiple times to run the walk
-   * again.
-   */
-  constructor(pattern, opts) {
-    if (!opts)
-      throw new TypeError("glob options required");
-    this.withFileTypes = !!opts.withFileTypes;
-    this.signal = opts.signal;
-    this.follow = !!opts.follow;
-    this.dot = !!opts.dot;
-    this.dotRelative = !!opts.dotRelative;
-    this.nodir = !!opts.nodir;
-    this.mark = !!opts.mark;
-    if (!opts.cwd) {
-      this.cwd = "";
-    } else if (opts.cwd instanceof URL || opts.cwd.startsWith("file://")) {
-      opts.cwd = fileURLToPath2(opts.cwd);
-    }
-    this.cwd = opts.cwd || "";
-    this.root = opts.root;
-    this.magicalBraces = !!opts.magicalBraces;
-    this.nobrace = !!opts.nobrace;
-    this.noext = !!opts.noext;
-    this.realpath = !!opts.realpath;
-    this.absolute = opts.absolute;
-    this.noglobstar = !!opts.noglobstar;
-    this.matchBase = !!opts.matchBase;
-    this.maxDepth = typeof opts.maxDepth === "number" ? opts.maxDepth : Infinity;
-    this.stat = !!opts.stat;
-    this.ignore = opts.ignore;
-    if (this.withFileTypes && this.absolute !== void 0) {
-      throw new Error("cannot set absolute and withFileTypes:true");
-    }
-    if (typeof pattern === "string") {
-      pattern = [pattern];
-    }
-    this.windowsPathsNoEscape = !!opts.windowsPathsNoEscape || opts.allowWindowsEscape === false;
-    if (this.windowsPathsNoEscape) {
-      pattern = pattern.map((p) => p.replace(/\\/g, "/"));
-    }
-    if (this.matchBase) {
-      if (opts.noglobstar) {
-        throw new TypeError("base matching requires globstar");
-      }
-      pattern = pattern.map((p) => p.includes("/") ? p : `./**/${p}`);
-    }
-    this.pattern = pattern;
-    this.platform = opts.platform || defaultPlatform3;
-    this.opts = { ...opts, platform: this.platform };
-    if (opts.scurry) {
-      this.scurry = opts.scurry;
-      if (opts.nocase !== void 0 && opts.nocase !== opts.scurry.nocase) {
-        throw new Error("nocase option contradicts provided scurry option");
-      }
-    } else {
-      const Scurry = opts.platform === "win32" ? PathScurryWin32 : opts.platform === "darwin" ? PathScurryDarwin : opts.platform ? PathScurryPosix : PathScurry;
-      this.scurry = new Scurry(this.cwd, {
-        nocase: opts.nocase,
-        fs: opts.fs
-      });
-    }
-    this.nocase = this.scurry.nocase;
-    const nocaseMagicOnly = this.platform === "darwin" || this.platform === "win32";
-    const mmo = {
-      // default nocase based on platform
-      ...opts,
-      dot: this.dot,
-      matchBase: this.matchBase,
-      nobrace: this.nobrace,
-      nocase: this.nocase,
-      nocaseMagicOnly,
-      nocomment: true,
-      noext: this.noext,
-      nonegate: true,
-      optimizationLevel: 2,
-      platform: this.platform,
-      windowsPathsNoEscape: this.windowsPathsNoEscape,
-      debug: !!this.opts.debug
-    };
-    const mms = this.pattern.map((p) => new Minimatch(p, mmo));
-    const [matchSet, globParts] = mms.reduce((set, m) => {
-      set[0].push(...m.set);
-      set[1].push(...m.globParts);
-      return set;
-    }, [[], []]);
-    this.patterns = matchSet.map((set, i) => {
-      const g = globParts[i];
-      if (!g)
-        throw new Error("invalid pattern object");
-      return new Pattern(set, g, 0, this.platform);
-    });
-  }
-  async walk() {
-    return [
-      ...await new GlobWalker(this.patterns, this.scurry.cwd, {
-        ...this.opts,
-        maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
-        platform: this.platform,
-        nocase: this.nocase
-      }).walk()
-    ];
-  }
-  walkSync() {
-    return [
-      ...new GlobWalker(this.patterns, this.scurry.cwd, {
-        ...this.opts,
-        maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
-        platform: this.platform,
-        nocase: this.nocase
-      }).walkSync()
-    ];
-  }
-  stream() {
-    return new GlobStream(this.patterns, this.scurry.cwd, {
-      ...this.opts,
-      maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
-      platform: this.platform,
-      nocase: this.nocase
-    }).stream();
-  }
-  streamSync() {
-    return new GlobStream(this.patterns, this.scurry.cwd, {
-      ...this.opts,
-      maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
-      platform: this.platform,
-      nocase: this.nocase
-    }).streamSync();
-  }
-  /**
-   * Default sync iteration function. Returns a Generator that
-   * iterates over the results.
-   */
-  iterateSync() {
-    return this.streamSync()[Symbol.iterator]();
-  }
-  [Symbol.iterator]() {
-    return this.iterateSync();
-  }
-  /**
-   * Default async iteration function. Returns an AsyncGenerator that
-   * iterates over the results.
-   */
-  iterate() {
-    return this.stream()[Symbol.asyncIterator]();
-  }
-  [Symbol.asyncIterator]() {
-    return this.iterate();
-  }
-};
-
-// node_modules/glob/dist/esm/has-magic.js
-var hasMagic = (pattern, options = {}) => {
-  if (!Array.isArray(pattern)) {
-    pattern = [pattern];
-  }
-  for (const p of pattern) {
-    if (new Minimatch(p, options).hasMagic())
-      return true;
-  }
-  return false;
-};
-
-// node_modules/glob/dist/esm/index.js
-function globStreamSync(pattern, options = {}) {
-  return new Glob(pattern, options).streamSync();
-}
-function globStream(pattern, options = {}) {
-  return new Glob(pattern, options).stream();
-}
-function globSync(pattern, options = {}) {
-  return new Glob(pattern, options).walkSync();
-}
-async function glob_(pattern, options = {}) {
-  return new Glob(pattern, options).walk();
-}
-function globIterateSync(pattern, options = {}) {
-  return new Glob(pattern, options).iterateSync();
-}
-function globIterate(pattern, options = {}) {
-  return new Glob(pattern, options).iterate();
-}
-var streamSync = globStreamSync;
-var stream = Object.assign(globStream, { sync: globStreamSync });
-var iterateSync = globIterateSync;
-var iterate = Object.assign(globIterate, {
-  sync: globIterateSync
-});
-var sync = Object.assign(globSync, {
-  stream: globStreamSync,
-  iterate: globIterateSync
-});
-var glob = Object.assign(glob_, {
-  glob: glob_,
-  globSync,
-  sync,
-  globStream,
-  stream,
-  globStreamSync,
-  streamSync,
-  globIterate,
-  iterate,
-  globIterateSync,
-  iterateSync,
-  Glob,
-  hasMagic,
-  escape,
-  unescape
-});
-glob.glob = glob;
-
-// src/utils.ts
-import fs from "node:fs";
-function loadJsonFile(path4) {
-  return JSON.parse(fs.readFileSync(path4).toString("utf-8"));
-}
-function loadMetaFile(path4) {
-  return loadJsonFile(path4);
-}
-function loadAnalysisJson(path4) {
-  return loadJsonFile(path4);
-}
-function getSingleInput(name) {
-  const val = process.env[`INPUT_${name.toUpperCase()}`] || "";
-  return val.trim();
-}
-
-// src/report.ts
-function report(input) {
-  const allPageSizes = getAllPageSizes(input);
-  fs2.mkdirSync(path2.join(process2.cwd(), input.analyzerDirectory), {
-    recursive: true
-  });
-  const resultJsonPath = path2.join(
-    process2.cwd(),
-    input.analyzerDirectory,
-    "bundle_analysis.json"
-  );
-  fs2.writeFileSync(resultJsonPath, JSON.stringify(allPageSizes, null, 2));
-  console2.log(`Wrote ${resultJsonPath}`);
-}
-function findMetafiles(input) {
-  return input.metafiles.flatMap((metafile) => {
-    return globSync(path2.join(process2.cwd(), metafile), {
-      nodir: true
-    }).map((metaFilePath) => {
-      return {
-        relativePath: path2.relative(process2.cwd(), metaFilePath),
-        absolutePath: metaFilePath
-      };
-    });
-  });
-}
-function getAllPageSizes(input) {
-  const acc = {};
-  return findMetafiles(input).reduce((acc2, { relativePath, absolutePath }) => {
-    try {
-      fs2.accessSync(absolutePath, fs2.constants.R_OK);
-    } catch (err) {
-      console2.error(
-        `No meta file found at "${absolutePath}" - a path to meta file may be wrong, or esbuild is not executed.`
-      );
-      process2.exit(1);
-    }
-    const metaFileJson = loadMetaFile(absolutePath);
-    Object.entries(metaFileJson.outputs).reduce((acc3, output) => {
-      const [outfile, buildMeta] = output;
-      if (!input.includeExtensions.some(
-        (ext2) => outfile.toLowerCase().endsWith(ext2)
-      )) {
-        return acc3;
-      }
-      acc3[`${relativePath} -> ${outfile}`] = {
-        bytes: buildMeta.bytes,
-        metafile: relativePath,
-        outfile
-      };
-      return acc3;
-    }, acc2);
-    return acc2;
-  }, acc);
-}
-
-// src/compare.ts
-function compare(input) {
-  let hasAnyChange = false;
-  let output = `## \u{1F4E6} esbuild Bundle Analysis for ${input.name}
+var Ds=Object.create;var Te=Object.defineProperty;var Ms=Object.getOwnPropertyDescriptor;var Ns=Object.getOwnPropertyNames;var _s=Object.getPrototypeOf,Ls=Object.prototype.hasOwnProperty;var Ae=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports);var js=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ns(t))!Ls.call(r,i)&&i!==e&&Te(r,i,{get:()=>t[i],enumerable:!(s=Ms(t,i))||s.enumerable});return r};var zs=(r,t,e)=>(e=r!=null?Ds(_s(r)):{},js(t||!r||!r.__esModule?Te(e,"default",{value:r,enumerable:!0}):e,r));var Fe=Ae((Cr,Oe)=>{"use strict";Oe.exports=ke;function ke(r,t,e){r instanceof RegExp&&(r=Re(r,e)),t instanceof RegExp&&(t=Re(t,e));var s=Ce(r,t,e);return s&&{start:s[0],end:s[1],pre:e.slice(0,s[0]),body:e.slice(s[0]+r.length,s[1]),post:e.slice(s[1]+t.length)}}function Re(r,t){var e=t.match(r);return e?e[0]:null}ke.range=Ce;function Ce(r,t,e){var s,i,n,o,h,a=e.indexOf(r),l=e.indexOf(t,a+1),c=a;if(a>=0&&l>0){if(r===t)return[a,l];for(s=[],n=e.length;c>=0&&!h;)c==a?(s.push(c),a=e.indexOf(r,c+1)):s.length==1?h=[s.pop(),l]:(i=s.pop(),i=0?a:l;s.length&&(h=[n,o])}return h}});var Ie=Ae((Or,ze)=>{var De=Fe();ze.exports=$s;var Me="\0SLASH"+Math.random()+"\0",Ne="\0OPEN"+Math.random()+"\0",te="\0CLOSE"+Math.random()+"\0",_e="\0COMMA"+Math.random()+"\0",Le="\0PERIOD"+Math.random()+"\0";function Qt(r){return parseInt(r,10)==r?parseInt(r,10):r.charCodeAt(0)}function Is(r){return r.split("\\\\").join(Me).split("\\{").join(Ne).split("\\}").join(te).split("\\,").join(_e).split("\\.").join(Le)}function Ps(r){return r.split(Me).join("\\").split(Ne).join("{").split(te).join("}").split(_e).join(",").split(Le).join(".")}function je(r){if(!r)return[""];var t=[],e=De("{","}",r);if(!e)return r.split(",");var s=e.pre,i=e.body,n=e.post,o=s.split(",");o[o.length-1]+="{"+i+"}";var h=je(n);return n.length&&(o[o.length-1]+=h.shift(),o.push.apply(o,h)),t.push.apply(t,o),t}function $s(r){return r?(r.substr(0,2)==="{}"&&(r="\\{\\}"+r.substr(2)),at(Is(r),!0).map(Ps)):[]}function Ws(r){return"{"+r+"}"}function Bs(r){return/^-?0\d/.test(r)}function Us(r,t){return r<=t}function Gs(r,t){return r>=t}function at(r,t){var e=[],s=De("{","}",r);if(!s)return[r];var i=s.pre,n=s.post.length?at(s.post,!1):[""];if(/\$$/.test(s.pre))for(var o=0;o=0;if(!c&&!f)return s.post.match(/,.*\}/)?(r=s.pre+"{"+s.body+te+s.post,at(r)):[r];var u;if(c)u=s.body.split(/\.\./);else if(u=je(s.body),u.length===1&&(u=at(u[0],!1).map(Ws),u.length===1))return n.map(function(Ct){return s.pre+u[0]+Ct});var d;if(c){var m=Qt(u[0]),p=Qt(u[1]),w=Math.max(u[0].length,u[1].length),g=u.length==3?Math.abs(Qt(u[2])):1,S=Us,b=p0){var kt=new Array(z+1).join("0");E<0?x="-"+kt+x.slice(1):x=kt+x}}d.push(x)}}else{d=[];for(var B=0;B{if(typeof r!="string")throw new TypeError("invalid pattern");if(r.length>65536)throw new TypeError("pattern is too long")};var Hs={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},ct=r=>r.replace(/[[\]\\-]/g,"\\$&"),qs=r=>r.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Pe=r=>r.join(""),$e=(r,t)=>{let e=t;if(r.charAt(e)!=="[")throw new Error("not in a brace expression");let s=[],i=[],n=e+1,o=!1,h=!1,a=!1,l=!1,c=e,f="";t:for(;nf?s.push(ct(f)+"-"+ct(p)):p===f&&s.push(ct(p)),f="",n++;continue}if(r.startsWith("-]",n+1)){s.push(ct(p+"-")),n+=2;continue}if(r.startsWith("-",n+1)){f=p,n+=2;continue}s.push(ct(p)),n++}if(ct?r.replace(/\[([^\/\\])\]/g,"$1"):r.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");var Js=new Set(["!","?","+","*","@"]),We=r=>Js.has(r),Ks="(?!(?:^|/)\\.\\.?(?:$|/))",Ot="(?!\\.)",Vs=new Set(["[","."]),Ys=new Set(["..","."]),Xs=new Set("().*{}+?[]^$\\!"),Zs=r=>r.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),ee="[^/]",Be=ee+"*?",Ue=ee+"+?",Q=class r{type;#t;#s;#n=!1;#i=[];#h;#l;#f;#a=!1;#o;#e;#m=!1;constructor(t,e,s={}){this.type=t,t&&(this.#s=!0),this.#h=e,this.#t=this.#h?this.#h.#t:this,this.#o=this.#t===this?s:this.#t.#o,this.#f=this.#t===this?[]:this.#t.#f,t==="!"&&!this.#t.#a&&this.#f.push(this),this.#l=this.#h?this.#h.#i.length:0}get hasMagic(){if(this.#s!==void 0)return this.#s;for(let t of this.#i)if(typeof t!="string"&&(t.type||t.hasMagic))return this.#s=!0;return this.#s}toString(){return this.#e!==void 0?this.#e:this.type?this.#e=this.type+"("+this.#i.map(t=>String(t)).join("|")+")":this.#e=this.#i.map(t=>String(t)).join("")}#w(){if(this!==this.#t)throw new Error("should only call on root");if(this.#a)return this;this.toString(),this.#a=!0;let t;for(;t=this.#f.pop();){if(t.type!=="!")continue;let e=t,s=e.#h;for(;s;){for(let i=e.#l+1;!s.type&&itypeof e=="string"?e:e.toJSON()):[this.type,...this.#i.map(e=>e.toJSON())];return this.isStart()&&!this.type&&t.unshift([]),this.isEnd()&&(this===this.#t||this.#t.#a&&this.#h?.type==="!")&&t.push({}),t}isStart(){if(this.#t===this)return!0;if(!this.#h?.isStart())return!1;if(this.#l===0)return!0;let t=this.#h;for(let e=0;e{let[m,p,w,g]=typeof d=="string"?r.#S(d,this.#s,a):d.toRegExpSource(t);return this.#s=this.#s||w,this.#n=this.#n||g,m}).join(""),c="";if(this.isStart()&&typeof this.#i[0]=="string"&&!(this.#i.length===1&&Ys.has(this.#i[0]))){let m=Vs,p=e&&m.has(l.charAt(0))||l.startsWith("\\.")&&m.has(l.charAt(2))||l.startsWith("\\.\\.")&&m.has(l.charAt(4)),w=!e&&!t&&m.has(l.charAt(0));c=p?Ks:w?Ot:""}let f="";return this.isEnd()&&this.#t.#a&&this.#h?.type==="!"&&(f="(?:$|\\/)"),[c+l+f,I(l),this.#s=!!this.#s,this.#n]}let s=this.type==="*"||this.type==="+",i=this.type==="!"?"(?:(?!(?:":"(?:",n=this.#u(e);if(this.isStart()&&this.isEnd()&&!n&&this.type!=="!"){let a=this.toString();return this.#i=[a],this.type=null,this.#s=void 0,[a,I(this.toString()),!1,!1]}let o=!s||t||e||!Ot?"":this.#u(!0);o===n&&(o=""),o&&(n=`(?:${n})(?:${o})*?`);let h="";if(this.type==="!"&&this.#m)h=(this.isStart()&&!e?Ot:"")+Ue;else{let a=this.type==="!"?"))"+(this.isStart()&&!e&&!t?Ot:"")+Be+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&o?")":this.type==="*"&&o?")?":`)${this.type}`;h=i+n+a}return[h,I(n),this.#s=!!this.#s,this.#n]}#u(t){return this.#i.map(e=>{if(typeof e=="string")throw new Error("string type in extglob ast??");let[s,i,n,o]=e.toRegExpSource(t);return this.#n=this.#n||o,s}).filter(e=>!(this.isStart()&&this.isEnd())||!!e).join("|")}static#S(t,e,s=!1){let i=!1,n="",o=!1;for(let h=0;ht?r.replace(/[?*()[\]]/g,"[$&]"):r.replace(/[?*()[\]\\]/g,"\\$&");var F=(r,t,e={})=>(lt(t),!e.nocomment&&t.charAt(0)==="#"?!1:new M(t,e).match(r)),Qs=/^\*+([^+@!?\*\[\(]*)$/,ti=r=>t=>!t.startsWith(".")&&t.endsWith(r),ei=r=>t=>t.endsWith(r),si=r=>(r=r.toLowerCase(),t=>!t.startsWith(".")&&t.toLowerCase().endsWith(r)),ii=r=>(r=r.toLowerCase(),t=>t.toLowerCase().endsWith(r)),ri=/^\*+\.\*+$/,ni=r=>!r.startsWith(".")&&r.includes("."),oi=r=>r!=="."&&r!==".."&&r.includes("."),hi=/^\.\*+$/,ai=r=>r!=="."&&r!==".."&&r.startsWith("."),li=/^\*+$/,ci=r=>r.length!==0&&!r.startsWith("."),fi=r=>r.length!==0&&r!=="."&&r!=="..",ui=/^\?+([^+@!?\*\[\(]*)?$/,di=([r,t=""])=>{let e=Je([r]);return t?(t=t.toLowerCase(),s=>e(s)&&s.toLowerCase().endsWith(t)):e},pi=([r,t=""])=>{let e=Ke([r]);return t?(t=t.toLowerCase(),s=>e(s)&&s.toLowerCase().endsWith(t)):e},mi=([r,t=""])=>{let e=Ke([r]);return t?s=>e(s)&&s.endsWith(t):e},gi=([r,t=""])=>{let e=Je([r]);return t?s=>e(s)&&s.endsWith(t):e},Je=([r])=>{let t=r.length;return e=>e.length===t&&!e.startsWith(".")},Ke=([r])=>{let t=r.length;return e=>e.length===t&&e!=="."&&e!==".."},Ve=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",Ge={win32:{sep:"\\"},posix:{sep:"/"}},wi=Ve==="win32"?Ge.win32.sep:Ge.posix.sep;F.sep=wi;var k=Symbol("globstar **");F.GLOBSTAR=k;var yi="[^/]",bi=yi+"*?",Si="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",Ei="(?:(?!(?:\\/|^)\\.).)*?",vi=(r,t={})=>e=>F(e,r,t);F.filter=vi;var _=(r,t={})=>Object.assign({},r,t),xi=r=>{if(!r||typeof r!="object"||!Object.keys(r).length)return F;let t=F;return Object.assign((s,i,n={})=>t(s,i,_(r,n)),{Minimatch:class extends t.Minimatch{constructor(i,n={}){super(i,_(r,n))}static defaults(i){return t.defaults(_(r,i)).Minimatch}},AST:class extends t.AST{constructor(i,n,o={}){super(i,n,_(r,o))}static fromGlob(i,n={}){return t.AST.fromGlob(i,_(r,n))}},unescape:(s,i={})=>t.unescape(s,_(r,i)),escape:(s,i={})=>t.escape(s,_(r,i)),filter:(s,i={})=>t.filter(s,_(r,i)),defaults:s=>t.defaults(_(r,s)),makeRe:(s,i={})=>t.makeRe(s,_(r,i)),braceExpand:(s,i={})=>t.braceExpand(s,_(r,i)),match:(s,i,n={})=>t.match(s,i,_(r,n)),sep:t.sep,GLOBSTAR:k})};F.defaults=xi;var Ye=(r,t={})=>(lt(r),t.nobrace||!/\{(?:(?!\{).)*\}/.test(r)?[r]:(0,qe.default)(r));F.braceExpand=Ye;var Ti=(r,t={})=>new M(r,t).makeRe();F.makeRe=Ti;var Ai=(r,t,e={})=>{let s=new M(t,e);return r=r.filter(i=>s.match(i)),s.options.nonull&&!r.length&&r.push(t),r};F.match=Ai;var He=/[?*]|[+@!]\(.*?\)|\[|\]/,Ri=r=>r.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),M=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,e={}){lt(t),e=e||{},this.options=e,this.pattern=t,this.platform=e.platform||Ve,this.isWindows=this.platform==="win32",this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||e.allowWindowsEscape===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=e.windowsNoMagicRoot!==void 0?e.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let t of this.set)for(let e of t)if(typeof e!="string")return!0;return!1}debug(...t){}make(){let t=this.pattern,e=this.options;if(!e.nocomment&&t.charAt(0)==="#"){this.comment=!0;return}if(!t){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug&&(this.debug=(...n)=>console.error(...n)),this.debug(this.pattern,this.globSet);let s=this.globSet.map(n=>this.slashSplit(n));this.globParts=this.preprocess(s),this.debug(this.pattern,this.globParts);let i=this.globParts.map((n,o,h)=>{if(this.isWindows&&this.windowsNoMagicRoot){let a=n[0]===""&&n[1]===""&&(n[2]==="?"||!He.test(n[2]))&&!He.test(n[3]),l=/^[a-z]:/i.test(n[0]);if(a)return[...n.slice(0,4),...n.slice(4).map(c=>this.parse(c))];if(l)return[n[0],...n.slice(1).map(c=>this.parse(c))]}return n.map(a=>this.parse(a))});if(this.debug(this.pattern,i),this.set=i.filter(n=>n.indexOf(!1)===-1),this.isWindows)for(let n=0;n=2?(t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t)):e>=1?t=this.levelOneOptimize(t):t=this.adjascentGlobstarOptimize(t),t}adjascentGlobstarOptimize(t){return t.map(e=>{let s=-1;for(;(s=e.indexOf("**",s+1))!==-1;){let i=s;for(;e[i+1]==="**";)i++;i!==s&&e.splice(s,i-s)}return e})}levelOneOptimize(t){return t.map(e=>(e=e.reduce((s,i)=>{let n=s[s.length-1];return i==="**"&&n==="**"?s:i===".."&&n&&n!==".."&&n!=="."&&n!=="**"?(s.pop(),s):(s.push(i),s)},[]),e.length===0?[""]:e))}levelTwoFileOptimize(t){Array.isArray(t)||(t=this.slashSplit(t));let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let i=1;ii&&s.splice(i+1,o-i);let h=s[i+1],a=s[i+2],l=s[i+3];if(h!==".."||!a||a==="."||a===".."||!l||l==="."||l==="..")continue;e=!0,s.splice(i,1);let c=s.slice(0);c[i]="**",t.push(c),i--}if(!this.preserveMultipleSlashes){for(let o=1;oe.length)}partsMatch(t,e,s=!1){let i=0,n=0,o=[],h="";for(;ib?e=e.slice(y):b>y&&(t=t.slice(b)))}}let{optimizationLevel:n=1}=this.options;n>=2&&(t=this.levelTwoFileOptimize(t)),this.debug("matchOne",this,{file:t,pattern:e}),this.debug("matchOne",t.length,e.length);for(var o=0,h=0,a=t.length,l=e.length;o>> no match, partial?`,t,u,e,d),u===a))}let p;if(typeof c=="string"?(p=f===c,this.debug("string match",c,f,p)):(p=c.test(f),this.debug("pattern match",c,f,p)),!p)return!1}if(o===a&&h===l)return!0;if(o===a)return s;if(h===l)return o===a-1&&t[o]==="";throw new Error("wtf?")}braceExpand(){return Ye(this.pattern,this.options)}parse(t){lt(t);let e=this.options;if(t==="**")return k;if(t==="")return"";let s,i=null;(s=t.match(li))?i=e.dot?fi:ci:(s=t.match(Qs))?i=(e.nocase?e.dot?ii:si:e.dot?ei:ti)(s[1]):(s=t.match(ui))?i=(e.nocase?e.dot?pi:di:e.dot?mi:gi)(s):(s=t.match(ri))?i=e.dot?oi:ni:(s=t.match(hi))&&(i=ai);let n=Q.fromGlob(t,this.options).toMMPattern();return i&&typeof n=="object"&&Reflect.defineProperty(n,"test",{value:i}),n}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let t=this.set;if(!t.length)return this.regexp=!1,this.regexp;let e=this.options,s=e.noglobstar?bi:e.dot?Si:Ei,i=new Set(e.nocase?["i"]:[]),n=t.map(a=>{let l=a.map(c=>{if(c instanceof RegExp)for(let f of c.flags.split(""))i.add(f);return typeof c=="string"?Ri(c):c===k?k:c._src});return l.forEach((c,f)=>{let u=l[f+1],d=l[f-1];c!==k||d===k||(d===void 0?u!==void 0&&u!==k?l[f+1]="(?:\\/|"+s+"\\/)?"+u:l[f]=s:u===void 0?l[f-1]=d+"(?:\\/|"+s+")?":u!==k&&(l[f-1]=d+"(?:\\/|\\/"+s+"\\/)"+u,l[f+1]=k))}),l.filter(c=>c!==k).join("/")}).join("|"),[o,h]=t.length>1?["(?:",")"]:["",""];n="^"+o+n+h+"$",this.negate&&(n="^(?!"+n+").+$");try{this.regexp=new RegExp(n,[...i].join(""))}catch{this.regexp=!1}return this.regexp}slashSplit(t){return this.preserveMultipleSlashes?t.split("/"):this.isWindows&&/^\/\/[^\/]+/.test(t)?["",...t.split(/\/+/)]:t.split(/\/+/)}match(t,e=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return t==="";if(t==="/"&&e)return!0;let s=this.options;this.isWindows&&(t=t.split("\\").join("/"));let i=this.slashSplit(t);this.debug(this.pattern,"split",i);let n=this.set;this.debug(this.pattern,"set",n);let o=i[i.length-1];if(!o)for(let h=i.length-2;!o&&h>=0;h--)o=i[h];for(let h=0;h{typeof se.emitWarning=="function"?se.emitWarning(r,t,e,s):console.error(`[${e}] ${t}: ${r}`)},Ft=globalThis.AbortController,Xe=globalThis.AbortSignal;if(typeof Ft>"u"){Xe=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(s,i){this._onabort.push(i)}},Ft=class{constructor(){t()}signal=new Xe;abort(s){if(!this.signal.aborted){this.signal.reason=s,this.signal.aborted=!0;for(let i of this.signal._onabort)i(s);this.signal.onabort?.(s)}}};let r=se.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{r&&(r=!1,Qe("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}var ki=r=>!Ze.has(r),Vr=Symbol("type"),J=r=>r&&r===Math.floor(r)&&r>0&&isFinite(r),ts=r=>J(r)?r<=Math.pow(2,8)?Uint8Array:r<=Math.pow(2,16)?Uint16Array:r<=Math.pow(2,32)?Uint32Array:r<=Number.MAX_SAFE_INTEGER?st:null:null,st=class extends Array{constructor(t){super(t),this.fill(0)}},ie=class r{heap;length;static#t=!1;static create(t){let e=ts(t);if(!e)return[];r.#t=!0;let s=new r(t,e);return r.#t=!1,s}constructor(t,e){if(!r.#t)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}},ft=class r{#t;#s;#n;#i;#h;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#l;#f;#a;#o;#e;#m;#w;#d;#u;#S;#g;#A;#R;#E;#b;#C;#p;static unsafeExposeInternals(t){return{starts:t.#R,ttls:t.#E,sizes:t.#A,keyMap:t.#a,keyList:t.#o,valList:t.#e,next:t.#m,prev:t.#w,get head(){return t.#d},get tail(){return t.#u},free:t.#S,isBackgroundFetch:e=>t.#c(e),backgroundFetch:(e,s,i,n)=>t.#_(e,s,i,n),moveToTail:e=>t.#N(e),indexes:e=>t.#T(e),rindexes:e=>t.#O(e),isStale:e=>t.#y(e)}}get max(){return this.#t}get maxSize(){return this.#s}get calculatedSize(){return this.#f}get size(){return this.#l}get fetchMethod(){return this.#h}get dispose(){return this.#n}get disposeAfter(){return this.#i}constructor(t){let{max:e=0,ttl:s,ttlResolution:i=1,ttlAutopurge:n,updateAgeOnGet:o,updateAgeOnHas:h,allowStale:a,dispose:l,disposeAfter:c,noDisposeOnSet:f,noUpdateTTL:u,maxSize:d=0,maxEntrySize:m=0,sizeCalculation:p,fetchMethod:w,noDeleteOnFetchRejection:g,noDeleteOnStaleGet:S,allowStaleOnFetchRejection:b,allowStaleOnFetchAbort:y,ignoreFetchAbort:E}=t;if(e!==0&&!J(e))throw new TypeError("max option must be a nonnegative integer");let x=e?ts(e):Array;if(!x)throw new Error("invalid max value: "+e);if(this.#t=e,this.#s=d,this.maxEntrySize=m||this.#s,this.sizeCalculation=p,this.sizeCalculation){if(!this.#s&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(w!==void 0&&typeof w!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#h=w,this.#C=!!w,this.#a=new Map,this.#o=new Array(e).fill(void 0),this.#e=new Array(e).fill(void 0),this.#m=new x(e),this.#w=new x(e),this.#d=0,this.#u=0,this.#S=ie.create(e),this.#l=0,this.#f=0,typeof l=="function"&&(this.#n=l),typeof c=="function"?(this.#i=c,this.#g=[]):(this.#i=void 0,this.#g=void 0),this.#b=!!this.#n,this.#p=!!this.#i,this.noDisposeOnSet=!!f,this.noUpdateTTL=!!u,this.noDeleteOnFetchRejection=!!g,this.allowStaleOnFetchRejection=!!b,this.allowStaleOnFetchAbort=!!y,this.ignoreFetchAbort=!!E,this.maxEntrySize!==0){if(this.#s!==0&&!J(this.#s))throw new TypeError("maxSize must be a positive integer if specified");if(!J(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#D()}if(this.allowStale=!!a,this.noDeleteOnStaleGet=!!S,this.updateAgeOnGet=!!o,this.updateAgeOnHas=!!h,this.ttlResolution=J(i)||i===0?i:1,this.ttlAutopurge=!!n,this.ttl=s||0,this.ttl){if(!J(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#F()}if(this.#t===0&&this.ttl===0&&this.#s===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#t&&!this.#s){let z="LRU_CACHE_UNBOUNDED";ki(z)&&(Ze.add(z),Qe("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",z,r))}}getRemainingTTL(t){return this.#a.has(t)?1/0:0}#F(){let t=new st(this.#t),e=new st(this.#t);this.#E=t,this.#R=e,this.#r=(n,o,h=et.now())=>{if(e[n]=o!==0?h:0,t[n]=o,o!==0&&this.ttlAutopurge){let a=setTimeout(()=>{this.#y(n)&&this.delete(this.#o[n])},o+1);a.unref&&a.unref()}},this.#k=n=>{e[n]=t[n]!==0?et.now():0},this.#v=(n,o)=>{if(t[o]){let h=t[o],a=e[o];if(!h||!a)return;n.ttl=h,n.start=a,n.now=s||i();let l=n.now-a;n.remainingTTL=h-l}};let s=0,i=()=>{let n=et.now();if(this.ttlResolution>0){s=n;let o=setTimeout(()=>s=0,this.ttlResolution);o.unref&&o.unref()}return n};this.getRemainingTTL=n=>{let o=this.#a.get(n);if(o===void 0)return 0;let h=t[o],a=e[o];if(!h||!a)return 1/0;let l=(s||i())-a;return h-l},this.#y=n=>{let o=e[n],h=t[n];return!!h&&!!o&&(s||i())-o>h}}#k=()=>{};#v=()=>{};#r=()=>{};#y=()=>!1;#D(){let t=new st(this.#t);this.#f=0,this.#A=t,this.#x=e=>{this.#f-=t[e],t[e]=0},this.#j=(e,s,i,n)=>{if(this.#c(s))return 0;if(!J(i))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(i=n(s,e),!J(i))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return i},this.#L=(e,s,i)=>{if(t[e]=s,this.#s){let n=this.#s-t[e];for(;this.#f>n;)this.#M(!0)}this.#f+=t[e],i&&(i.entrySize=s,i.totalCalculatedSize=this.#f)}}#x=t=>{};#L=(t,e,s)=>{};#j=(t,e,s,i)=>{if(s||i)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#T({allowStale:t=this.allowStale}={}){if(this.#l)for(let e=this.#u;!(!this.#z(e)||((t||!this.#y(e))&&(yield e),e===this.#d));)e=this.#w[e]}*#O({allowStale:t=this.allowStale}={}){if(this.#l)for(let e=this.#d;!(!this.#z(e)||((t||!this.#y(e))&&(yield e),e===this.#u));)e=this.#m[e]}#z(t){return t!==void 0&&this.#a.get(this.#o[t])===t}*entries(){for(let t of this.#T())this.#e[t]!==void 0&&this.#o[t]!==void 0&&!this.#c(this.#e[t])&&(yield[this.#o[t],this.#e[t]])}*rentries(){for(let t of this.#O())this.#e[t]!==void 0&&this.#o[t]!==void 0&&!this.#c(this.#e[t])&&(yield[this.#o[t],this.#e[t]])}*keys(){for(let t of this.#T()){let e=this.#o[t];e!==void 0&&!this.#c(this.#e[t])&&(yield e)}}*rkeys(){for(let t of this.#O()){let e=this.#o[t];e!==void 0&&!this.#c(this.#e[t])&&(yield e)}}*values(){for(let t of this.#T())this.#e[t]!==void 0&&!this.#c(this.#e[t])&&(yield this.#e[t])}*rvalues(){for(let t of this.#O())this.#e[t]!==void 0&&!this.#c(this.#e[t])&&(yield this.#e[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,e={}){for(let s of this.#T()){let i=this.#e[s],n=this.#c(i)?i.__staleWhileFetching:i;if(n!==void 0&&t(n,this.#o[s],this))return this.get(this.#o[s],e)}}forEach(t,e=this){for(let s of this.#T()){let i=this.#e[s],n=this.#c(i)?i.__staleWhileFetching:i;n!==void 0&&t.call(e,n,this.#o[s],this)}}rforEach(t,e=this){for(let s of this.#O()){let i=this.#e[s],n=this.#c(i)?i.__staleWhileFetching:i;n!==void 0&&t.call(e,n,this.#o[s],this)}}purgeStale(){let t=!1;for(let e of this.#O({allowStale:!0}))this.#y(e)&&(this.delete(this.#o[e]),t=!0);return t}info(t){let e=this.#a.get(t);if(e===void 0)return;let s=this.#e[e],i=this.#c(s)?s.__staleWhileFetching:s;if(i===void 0)return;let n={value:i};if(this.#E&&this.#R){let o=this.#E[e],h=this.#R[e];if(o&&h){let a=o-(et.now()-h);n.ttl=a,n.start=Date.now()}}return this.#A&&(n.size=this.#A[e]),n}dump(){let t=[];for(let e of this.#T({allowStale:!0})){let s=this.#o[e],i=this.#e[e],n=this.#c(i)?i.__staleWhileFetching:i;if(n===void 0||s===void 0)continue;let o={value:n};if(this.#E&&this.#R){o.ttl=this.#E[e];let h=et.now()-this.#R[e];o.start=Math.floor(Date.now()-h)}this.#A&&(o.size=this.#A[e]),t.unshift([s,o])}return t}load(t){this.clear();for(let[e,s]of t){if(s.start){let i=Date.now()-s.start;s.start=et.now()-i}this.set(e,s.value,s)}}set(t,e,s={}){if(e===void 0)return this.delete(t),this;let{ttl:i=this.ttl,start:n,noDisposeOnSet:o=this.noDisposeOnSet,sizeCalculation:h=this.sizeCalculation,status:a}=s,{noUpdateTTL:l=this.noUpdateTTL}=s,c=this.#j(t,e,s.size||0,h);if(this.maxEntrySize&&c>this.maxEntrySize)return a&&(a.set="miss",a.maxEntrySizeExceeded=!0),this.delete(t),this;let f=this.#l===0?void 0:this.#a.get(t);if(f===void 0)f=this.#l===0?this.#u:this.#S.length!==0?this.#S.pop():this.#l===this.#t?this.#M(!1):this.#l,this.#o[f]=t,this.#e[f]=e,this.#a.set(t,f),this.#m[this.#u]=f,this.#w[f]=this.#u,this.#u=f,this.#l++,this.#L(f,c,a),a&&(a.set="add"),l=!1;else{this.#N(f);let u=this.#e[f];if(e!==u){if(this.#C&&this.#c(u)){u.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:d}=u;d!==void 0&&!o&&(this.#b&&this.#n?.(d,t,"set"),this.#p&&this.#g?.push([d,t,"set"]))}else o||(this.#b&&this.#n?.(u,t,"set"),this.#p&&this.#g?.push([u,t,"set"]));if(this.#x(f),this.#L(f,c,a),this.#e[f]=e,a){a.set="replace";let d=u&&this.#c(u)?u.__staleWhileFetching:u;d!==void 0&&(a.oldValue=d)}}else a&&(a.set="update")}if(i!==0&&!this.#E&&this.#F(),this.#E&&(l||this.#r(f,i,n),a&&this.#v(a,f)),!o&&this.#p&&this.#g){let u=this.#g,d;for(;d=u?.shift();)this.#i?.(...d)}return this}pop(){try{for(;this.#l;){let t=this.#e[this.#d];if(this.#M(!0),this.#c(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(t!==void 0)return t}}finally{if(this.#p&&this.#g){let t=this.#g,e;for(;e=t?.shift();)this.#i?.(...e)}}}#M(t){let e=this.#d,s=this.#o[e],i=this.#e[e];return this.#C&&this.#c(i)?i.__abortController.abort(new Error("evicted")):(this.#b||this.#p)&&(this.#b&&this.#n?.(i,s,"evict"),this.#p&&this.#g?.push([i,s,"evict"])),this.#x(e),t&&(this.#o[e]=void 0,this.#e[e]=void 0,this.#S.push(e)),this.#l===1?(this.#d=this.#u=0,this.#S.length=0):this.#d=this.#m[e],this.#a.delete(s),this.#l--,e}has(t,e={}){let{updateAgeOnHas:s=this.updateAgeOnHas,status:i}=e,n=this.#a.get(t);if(n!==void 0){let o=this.#e[n];if(this.#c(o)&&o.__staleWhileFetching===void 0)return!1;if(this.#y(n))i&&(i.has="stale",this.#v(i,n));else return s&&this.#k(n),i&&(i.has="hit",this.#v(i,n)),!0}else i&&(i.has="miss");return!1}peek(t,e={}){let{allowStale:s=this.allowStale}=e,i=this.#a.get(t);if(i===void 0||!s&&this.#y(i))return;let n=this.#e[i];return this.#c(n)?n.__staleWhileFetching:n}#_(t,e,s,i){let n=e===void 0?void 0:this.#e[e];if(this.#c(n))return n;let o=new Ft,{signal:h}=s;h?.addEventListener("abort",()=>o.abort(h.reason),{signal:o.signal});let a={signal:o.signal,options:s,context:i},l=(p,w=!1)=>{let{aborted:g}=o.signal,S=s.ignoreFetchAbort&&p!==void 0;if(s.status&&(g&&!w?(s.status.fetchAborted=!0,s.status.fetchError=o.signal.reason,S&&(s.status.fetchAbortIgnored=!0)):s.status.fetchResolved=!0),g&&!S&&!w)return f(o.signal.reason);let b=d;return this.#e[e]===d&&(p===void 0?b.__staleWhileFetching?this.#e[e]=b.__staleWhileFetching:this.delete(t):(s.status&&(s.status.fetchUpdated=!0),this.set(t,p,a.options))),p},c=p=>(s.status&&(s.status.fetchRejected=!0,s.status.fetchError=p),f(p)),f=p=>{let{aborted:w}=o.signal,g=w&&s.allowStaleOnFetchAbort,S=g||s.allowStaleOnFetchRejection,b=S||s.noDeleteOnFetchRejection,y=d;if(this.#e[e]===d&&(!b||y.__staleWhileFetching===void 0?this.delete(t):g||(this.#e[e]=y.__staleWhileFetching)),S)return s.status&&y.__staleWhileFetching!==void 0&&(s.status.returnedStale=!0),y.__staleWhileFetching;if(y.__returned===y)throw p},u=(p,w)=>{let g=this.#h?.(t,n,a);g&&g instanceof Promise&&g.then(S=>p(S===void 0?void 0:S),w),o.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(p(void 0),s.allowStaleOnFetchAbort&&(p=S=>l(S,!0)))})};s.status&&(s.status.fetchDispatched=!0);let d=new Promise(u).then(l,c),m=Object.assign(d,{__abortController:o,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.set(t,m,{...a.options,status:void 0}),e=this.#a.get(t)):this.#e[e]=m,m}#c(t){if(!this.#C)return!1;let e=t;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof Ft}async fetch(t,e={}){let{allowStale:s=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:o=this.ttl,noDisposeOnSet:h=this.noDisposeOnSet,size:a=0,sizeCalculation:l=this.sizeCalculation,noUpdateTTL:c=this.noUpdateTTL,noDeleteOnFetchRejection:f=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:u=this.allowStaleOnFetchRejection,ignoreFetchAbort:d=this.ignoreFetchAbort,allowStaleOnFetchAbort:m=this.allowStaleOnFetchAbort,context:p,forceRefresh:w=!1,status:g,signal:S}=e;if(!this.#C)return g&&(g.fetch="get"),this.get(t,{allowStale:s,updateAgeOnGet:i,noDeleteOnStaleGet:n,status:g});let b={allowStale:s,updateAgeOnGet:i,noDeleteOnStaleGet:n,ttl:o,noDisposeOnSet:h,size:a,sizeCalculation:l,noUpdateTTL:c,noDeleteOnFetchRejection:f,allowStaleOnFetchRejection:u,allowStaleOnFetchAbort:m,ignoreFetchAbort:d,status:g,signal:S},y=this.#a.get(t);if(y===void 0){g&&(g.fetch="miss");let E=this.#_(t,y,b,p);return E.__returned=E}else{let E=this.#e[y];if(this.#c(E)){let Ct=s&&E.__staleWhileFetching!==void 0;return g&&(g.fetch="inflight",Ct&&(g.returnedStale=!0)),Ct?E.__staleWhileFetching:E.__returned=E}let x=this.#y(y);if(!w&&!x)return g&&(g.fetch="hit"),this.#N(y),i&&this.#k(y),g&&this.#v(g,y),E;let z=this.#_(t,y,b,p),B=z.__staleWhileFetching!==void 0&&s;return g&&(g.fetch=x?"stale":"refresh",B&&x&&(g.returnedStale=!0)),B?z.__staleWhileFetching:z.__returned=z}}get(t,e={}){let{allowStale:s=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:o}=e,h=this.#a.get(t);if(h!==void 0){let a=this.#e[h],l=this.#c(a);return o&&this.#v(o,h),this.#y(h)?(o&&(o.get="stale"),l?(o&&s&&a.__staleWhileFetching!==void 0&&(o.returnedStale=!0),s?a.__staleWhileFetching:void 0):(n||this.delete(t),o&&s&&(o.returnedStale=!0),s?a:void 0)):(o&&(o.get="hit"),l?a.__staleWhileFetching:(this.#N(h),i&&this.#k(h),a))}else o&&(o.get="miss")}#I(t,e){this.#w[e]=t,this.#m[t]=e}#N(t){t!==this.#u&&(t===this.#d?this.#d=this.#m[t]:this.#I(this.#w[t],this.#m[t]),this.#I(this.#u,t),this.#u=t)}delete(t){let e=!1;if(this.#l!==0){let s=this.#a.get(t);if(s!==void 0)if(e=!0,this.#l===1)this.clear();else{this.#x(s);let i=this.#e[s];if(this.#c(i)?i.__abortController.abort(new Error("deleted")):(this.#b||this.#p)&&(this.#b&&this.#n?.(i,t,"delete"),this.#p&&this.#g?.push([i,t,"delete"])),this.#a.delete(t),this.#o[s]=void 0,this.#e[s]=void 0,s===this.#u)this.#u=this.#w[s];else if(s===this.#d)this.#d=this.#m[s];else{let n=this.#w[s];this.#m[n]=this.#m[s];let o=this.#m[s];this.#w[o]=this.#w[s]}this.#l--,this.#S.push(s)}}if(this.#p&&this.#g?.length){let s=this.#g,i;for(;i=s?.shift();)this.#i?.(...i)}return e}clear(){for(let t of this.#O({allowStale:!0})){let e=this.#e[t];if(this.#c(e))e.__abortController.abort(new Error("deleted"));else{let s=this.#o[t];this.#b&&this.#n?.(e,s,"delete"),this.#p&&this.#g?.push([e,s,"delete"])}}if(this.#a.clear(),this.#e.fill(void 0),this.#o.fill(void 0),this.#E&&this.#R&&(this.#E.fill(0),this.#R.fill(0)),this.#A&&this.#A.fill(0),this.#d=0,this.#u=0,this.#S.length=0,this.#f=0,this.#l=0,this.#p&&this.#g){let t=this.#g,e;for(;e=t?.shift();)this.#i?.(...e)}}};import{posix as Ii,win32 as de}from"path";import{fileURLToPath as Pi}from"url";import*as $i from"fs";import{lstatSync as Wi,readdir as Bi,readdirSync as Ui,readlinkSync as Gi,realpathSync as Hi}from"fs";import{lstat as Ji,readdir as Ki,readlink as Vi,realpath as Yi}from"fs/promises";import{EventEmitter as ce}from"events";import ns from"stream";import{StringDecoder as Ci}from"string_decoder";var es=typeof process=="object"&&process?process:{stdout:null,stderr:null},Oi=r=>!!r&&typeof r=="object"&&(r instanceof V||r instanceof ns||Fi(r)||Di(r)),Fi=r=>!!r&&typeof r=="object"&&r instanceof ce&&typeof r.pipe=="function"&&r.pipe!==ns.Writable.prototype.pipe,Di=r=>!!r&&typeof r=="object"&&r instanceof ce&&typeof r.write=="function"&&typeof r.end=="function",H=Symbol("EOF"),q=Symbol("maybeEmitEnd"),K=Symbol("emittedEnd"),Dt=Symbol("emittingEnd"),ut=Symbol("emittedError"),Mt=Symbol("closed"),ss=Symbol("read"),Nt=Symbol("flush"),is=Symbol("flushChunk"),P=Symbol("encoding"),it=Symbol("decoder"),T=Symbol("flowing"),dt=Symbol("paused"),rt=Symbol("resume"),A=Symbol("buffer"),D=Symbol("pipes"),R=Symbol("bufferLength"),re=Symbol("bufferPush"),_t=Symbol("bufferShift"),C=Symbol("objectMode"),v=Symbol("destroyed"),ne=Symbol("error"),oe=Symbol("emitData"),rs=Symbol("emitEnd"),he=Symbol("emitEnd2"),U=Symbol("async"),ae=Symbol("abort"),Lt=Symbol("aborted"),pt=Symbol("signal"),X=Symbol("dataListeners"),N=Symbol("discarded"),mt=r=>Promise.resolve().then(r),Mi=r=>r(),Ni=r=>r==="end"||r==="finish"||r==="prefinish",_i=r=>r instanceof ArrayBuffer||!!r&&typeof r=="object"&&r.constructor&&r.constructor.name==="ArrayBuffer"&&r.byteLength>=0,Li=r=>!Buffer.isBuffer(r)&&ArrayBuffer.isView(r),jt=class{src;dest;opts;ondrain;constructor(t,e,s){this.src=t,this.dest=e,this.opts=s,this.ondrain=()=>t[rt](),this.dest.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(t){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},le=class extends jt{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(t,e,s){super(t,e,s),this.proxyErrors=i=>e.emit("error",i),t.on("error",this.proxyErrors)}},ji=r=>!!r.objectMode,zi=r=>!r.objectMode&&!!r.encoding&&r.encoding!=="buffer",V=class extends ce{[T]=!1;[dt]=!1;[D]=[];[A]=[];[C];[P];[U];[it];[H]=!1;[K]=!1;[Dt]=!1;[Mt]=!1;[ut]=null;[R]=0;[v]=!1;[pt];[Lt]=!1;[X]=0;[N]=!1;writable=!0;readable=!0;constructor(...t){let e=t[0]||{};if(super(),e.objectMode&&typeof e.encoding=="string")throw new TypeError("Encoding and objectMode may not be used together");ji(e)?(this[C]=!0,this[P]=null):zi(e)?(this[P]=e.encoding,this[C]=!1):(this[C]=!1,this[P]=null),this[U]=!!e.async,this[it]=this[P]?new Ci(this[P]):null,e&&e.debugExposeBuffer===!0&&Object.defineProperty(this,"buffer",{get:()=>this[A]}),e&&e.debugExposePipes===!0&&Object.defineProperty(this,"pipes",{get:()=>this[D]});let{signal:s}=e;s&&(this[pt]=s,s.aborted?this[ae]():s.addEventListener("abort",()=>this[ae]()))}get bufferLength(){return this[R]}get encoding(){return this[P]}set encoding(t){throw new Error("Encoding must be set at instantiation time")}setEncoding(t){throw new Error("Encoding must be set at instantiation time")}get objectMode(){return this[C]}set objectMode(t){throw new Error("objectMode must be set at instantiation time")}get async(){return this[U]}set async(t){this[U]=this[U]||!!t}[ae](){this[Lt]=!0,this.emit("abort",this[pt]?.reason),this.destroy(this[pt]?.reason)}get aborted(){return this[Lt]}set aborted(t){}write(t,e,s){if(this[Lt])return!1;if(this[H])throw new Error("write after end");if(this[v])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof e=="function"&&(s=e,e="utf8"),e||(e="utf8");let i=this[U]?mt:Mi;if(!this[C]&&!Buffer.isBuffer(t)){if(Li(t))t=Buffer.from(t.buffer,t.byteOffset,t.byteLength);else if(_i(t))t=Buffer.from(t);else if(typeof t!="string")throw new Error("Non-contiguous data written to non-objectMode stream")}return this[C]?(this[T]&&this[R]!==0&&this[Nt](!0),this[T]?this.emit("data",t):this[re](t),this[R]!==0&&this.emit("readable"),s&&i(s),this[T]):t.length?(typeof t=="string"&&!(e===this[P]&&!this[it]?.lastNeed)&&(t=Buffer.from(t,e)),Buffer.isBuffer(t)&&this[P]&&(t=this[it].write(t)),this[T]&&this[R]!==0&&this[Nt](!0),this[T]?this.emit("data",t):this[re](t),this[R]!==0&&this.emit("readable"),s&&i(s),this[T]):(this[R]!==0&&this.emit("readable"),s&&i(s),this[T])}read(t){if(this[v])return null;if(this[N]=!1,this[R]===0||t===0||t&&t>this[R])return this[q](),null;this[C]&&(t=null),this[A].length>1&&!this[C]&&(this[A]=[this[P]?this[A].join(""):Buffer.concat(this[A],this[R])]);let e=this[ss](t||null,this[A][0]);return this[q](),e}[ss](t,e){if(this[C])this[_t]();else{let s=e;t===s.length||t===null?this[_t]():typeof s=="string"?(this[A][0]=s.slice(t),e=s.slice(0,t),this[R]-=t):(this[A][0]=s.subarray(t),e=s.subarray(0,t),this[R]-=t)}return this.emit("data",e),!this[A].length&&!this[H]&&this.emit("drain"),e}end(t,e,s){return typeof t=="function"&&(s=t,t=void 0),typeof e=="function"&&(s=e,e="utf8"),t!==void 0&&this.write(t,e),s&&this.once("end",s),this[H]=!0,this.writable=!1,(this[T]||!this[dt])&&this[q](),this}[rt](){this[v]||(!this[X]&&!this[D].length&&(this[N]=!0),this[dt]=!1,this[T]=!0,this.emit("resume"),this[A].length?this[Nt]():this[H]?this[q]():this.emit("drain"))}resume(){return this[rt]()}pause(){this[T]=!1,this[dt]=!0,this[N]=!1}get destroyed(){return this[v]}get flowing(){return this[T]}get paused(){return this[dt]}[re](t){this[C]?this[R]+=1:this[R]+=t.length,this[A].push(t)}[_t](){return this[C]?this[R]-=1:this[R]-=this[A][0].length,this[A].shift()}[Nt](t=!1){do;while(this[is](this[_t]())&&this[A].length);!t&&!this[A].length&&!this[H]&&this.emit("drain")}[is](t){return this.emit("data",t),this[T]}pipe(t,e){if(this[v])return t;this[N]=!1;let s=this[K];return e=e||{},t===es.stdout||t===es.stderr?e.end=!1:e.end=e.end!==!1,e.proxyErrors=!!e.proxyErrors,s?e.end&&t.end():(this[D].push(e.proxyErrors?new le(this,t,e):new jt(this,t,e)),this[U]?mt(()=>this[rt]()):this[rt]()),t}unpipe(t){let e=this[D].find(s=>s.dest===t);e&&(this[D].length===1?(this[T]&&this[X]===0&&(this[T]=!1),this[D]=[]):this[D].splice(this[D].indexOf(e),1),e.unpipe())}addListener(t,e){return this.on(t,e)}on(t,e){let s=super.on(t,e);if(t==="data")this[N]=!1,this[X]++,!this[D].length&&!this[T]&&this[rt]();else if(t==="readable"&&this[R]!==0)super.emit("readable");else if(Ni(t)&&this[K])super.emit(t),this.removeAllListeners(t);else if(t==="error"&&this[ut]){let i=e;this[U]?mt(()=>i.call(this,this[ut])):i.call(this,this[ut])}return s}removeListener(t,e){return this.off(t,e)}off(t,e){let s=super.off(t,e);return t==="data"&&(this[X]=this.listeners("data").length,this[X]===0&&!this[N]&&!this[D].length&&(this[T]=!1)),s}removeAllListeners(t){let e=super.removeAllListeners(t);return(t==="data"||t===void 0)&&(this[X]=0,!this[N]&&!this[D].length&&(this[T]=!1)),e}get emittedEnd(){return this[K]}[q](){!this[Dt]&&!this[K]&&!this[v]&&this[A].length===0&&this[H]&&(this[Dt]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[Mt]&&this.emit("close"),this[Dt]=!1)}emit(t,...e){let s=e[0];if(t!=="error"&&t!=="close"&&t!==v&&this[v])return!1;if(t==="data")return!this[C]&&!s?!1:this[U]?(mt(()=>this[oe](s)),!0):this[oe](s);if(t==="end")return this[rs]();if(t==="close"){if(this[Mt]=!0,!this[K]&&!this[v])return!1;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(t==="error"){this[ut]=s,super.emit(ne,s);let n=!this[pt]||this.listeners("error").length?super.emit("error",s):!1;return this[q](),n}else if(t==="resume"){let n=super.emit("resume");return this[q](),n}else if(t==="finish"||t==="prefinish"){let n=super.emit(t);return this.removeAllListeners(t),n}let i=super.emit(t,...e);return this[q](),i}[oe](t){for(let s of this[D])s.dest.write(t)===!1&&this.pause();let e=this[N]?!1:super.emit("data",t);return this[q](),e}[rs](){return this[K]?!1:(this[K]=!0,this.readable=!1,this[U]?(mt(()=>this[he]()),!0):this[he]())}[he](){if(this[it]){let e=this[it].end();if(e){for(let s of this[D])s.dest.write(e);this[N]||super.emit("data",e)}}for(let e of this[D])e.end();let t=super.emit("end");return this.removeAllListeners("end"),t}async collect(){let t=Object.assign([],{dataLength:0});this[C]||(t.dataLength=0);let e=this.promise();return this.on("data",s=>{t.push(s),this[C]||(t.dataLength+=s.length)}),await e,t}async concat(){if(this[C])throw new Error("cannot concat in objectMode");let t=await this.collect();return this[P]?t.join(""):Buffer.concat(t,t.dataLength)}async promise(){return new Promise((t,e)=>{this.on(v,()=>e(new Error("stream destroyed"))),this.on("error",s=>e(s)),this.on("end",()=>t())})}[Symbol.asyncIterator](){this[N]=!1;let t=!1,e=async()=>(this.pause(),t=!0,{value:void 0,done:!0});return{next:()=>{if(t)return e();let i=this.read();if(i!==null)return Promise.resolve({done:!1,value:i});if(this[H])return e();let n,o,h=f=>{this.off("data",a),this.off("end",l),this.off(v,c),e(),o(f)},a=f=>{this.off("error",h),this.off("end",l),this.off(v,c),this.pause(),n({value:f,done:!!this[H]})},l=()=>{this.off("error",h),this.off("data",a),this.off(v,c),e(),n({done:!0,value:void 0})},c=()=>h(new Error("stream destroyed"));return new Promise((f,u)=>{o=u,n=f,this.once(v,c),this.once("error",h),this.once("end",l),this.once("data",a)})},throw:e,return:e,[Symbol.asyncIterator](){return this}}}[Symbol.iterator](){this[N]=!1;let t=!1,e=()=>(this.pause(),this.off(ne,e),this.off(v,e),this.off("end",e),t=!0,{done:!0,value:void 0}),s=()=>{if(t)return e();let i=this.read();return i===null?e():{done:!1,value:i}};return this.once("end",e),this.once(ne,e),this.once(v,e),{next:s,throw:e,return:e,[Symbol.iterator](){return this}}}destroy(t){if(this[v])return t?this.emit("error",t):this.emit(v),this;this[v]=!0,this[N]=!0,this[A].length=0,this[R]=0;let e=this;return typeof e.close=="function"&&!this[Mt]&&e.close(),t?this.emit("error",t):this.emit(v),this}static get isStream(){return Oi}};var qi=Hi.native,wt={lstatSync:Wi,readdir:Bi,readdirSync:Ui,readlinkSync:Gi,realpathSync:qi,promises:{lstat:Ji,readdir:Ki,readlink:Vi,realpath:Yi}},cs=r=>!r||r===wt||r===$i?wt:{...wt,...r,promises:{...wt.promises,...r.promises||{}}},fs=/^\\\\\?\\([a-z]:)\\?$/i,Xi=r=>r.replace(/\//g,"\\").replace(fs,"$1\\"),Zi=/[\\\/]/,j=0,us=1,ds=2,G=4,ps=6,ms=8,Z=10,gs=12,L=15,gt=~L,fe=16,os=32,yt=64,$=128,zt=256,Pt=512,hs=yt|$|Pt,Qi=1023,ue=r=>r.isFile()?ms:r.isDirectory()?G:r.isSymbolicLink()?Z:r.isCharacterDevice()?ds:r.isBlockDevice()?ps:r.isSocket()?gs:r.isFIFO()?us:j,as=new Map,bt=r=>{let t=as.get(r);if(t)return t;let e=r.normalize("NFKD");return as.set(r,e),e},ls=new Map,It=r=>{let t=ls.get(r);if(t)return t;let e=bt(r.toLowerCase());return ls.set(r,e),e},$t=class extends ft{constructor(){super({max:256})}},pe=class extends ft{constructor(t=16*1024){super({maxSize:t,sizeCalculation:e=>e.length+1})}},ws=Symbol("PathScurry setAsCwd"),O=class{name;root;roots;parent;nocase;#t;#s;get dev(){return this.#s}#n;get mode(){return this.#n}#i;get nlink(){return this.#i}#h;get uid(){return this.#h}#l;get gid(){return this.#l}#f;get rdev(){return this.#f}#a;get blksize(){return this.#a}#o;get ino(){return this.#o}#e;get size(){return this.#e}#m;get blocks(){return this.#m}#w;get atimeMs(){return this.#w}#d;get mtimeMs(){return this.#d}#u;get ctimeMs(){return this.#u}#S;get birthtimeMs(){return this.#S}#g;get atime(){return this.#g}#A;get mtime(){return this.#A}#R;get ctime(){return this.#R}#E;get birthtime(){return this.#E}#b;#C;#p;#F;#k;#v;#r;#y;#D;#x;get path(){return(this.parent||this).fullpath()}constructor(t,e=j,s,i,n,o,h){this.name=t,this.#b=n?It(t):bt(t),this.#r=e&Qi,this.nocase=n,this.roots=i,this.root=s||this,this.#y=o,this.#p=h.fullpath,this.#k=h.relative,this.#v=h.relativePosix,this.parent=h.parent,this.parent?this.#t=this.parent.#t:this.#t=cs(h.fs)}depth(){return this.#C!==void 0?this.#C:this.parent?this.#C=this.parent.depth()+1:this.#C=0}childrenCache(){return this.#y}resolve(t){if(!t)return this;let e=this.getRootString(t),i=t.substring(e.length).split(this.splitSep);return e?this.getRoot(e).#L(i):this.#L(i)}#L(t){let e=this;for(let s of t)e=e.child(s);return e}children(){let t=this.#y.get(this);if(t)return t;let e=Object.assign([],{provisional:0});return this.#y.set(this,e),this.#r&=~fe,e}child(t,e){if(t===""||t===".")return this;if(t==="..")return this.parent||this;let s=this.children(),i=this.nocase?It(t):bt(t);for(let a of s)if(a.#b===i)return a;let n=this.parent?this.sep:"",o=this.#p?this.#p+n+t:void 0,h=this.newChild(t,j,{...e,parent:this,fullpath:o});return this.canReaddir()||(h.#r|=$),s.push(h),h}relative(){if(this.#k!==void 0)return this.#k;let t=this.name,e=this.parent;if(!e)return this.#k=this.name;let s=e.relative();return s+(!s||!e.parent?"":this.sep)+t}relativePosix(){if(this.sep==="/")return this.relative();if(this.#v!==void 0)return this.#v;let t=this.name,e=this.parent;if(!e)return this.#v=this.fullpathPosix();let s=e.relativePosix();return s+(!s||!e.parent?"":"/")+t}fullpath(){if(this.#p!==void 0)return this.#p;let t=this.name,e=this.parent;if(!e)return this.#p=this.name;let i=e.fullpath()+(e.parent?this.sep:"")+t;return this.#p=i}fullpathPosix(){if(this.#F!==void 0)return this.#F;if(this.sep==="/")return this.#F=this.fullpath();if(!this.parent){let i=this.fullpath().replace(/\\/g,"/");return/^[a-z]:\//i.test(i)?this.#F=`//?/${i}`:this.#F=i}let t=this.parent,e=t.fullpathPosix(),s=e+(!e||!t.parent?"":"/")+this.name;return this.#F=s}isUnknown(){return(this.#r&L)===j}isType(t){return this[`is${t}`]()}getType(){return this.isUnknown()?"Unknown":this.isDirectory()?"Directory":this.isFile()?"File":this.isSymbolicLink()?"SymbolicLink":this.isFIFO()?"FIFO":this.isCharacterDevice()?"CharacterDevice":this.isBlockDevice()?"BlockDevice":this.isSocket()?"Socket":"Unknown"}isFile(){return(this.#r&L)===ms}isDirectory(){return(this.#r&L)===G}isCharacterDevice(){return(this.#r&L)===ds}isBlockDevice(){return(this.#r&L)===ps}isFIFO(){return(this.#r&L)===us}isSocket(){return(this.#r&L)===gs}isSymbolicLink(){return(this.#r&Z)===Z}lstatCached(){return this.#r&os?this:void 0}readlinkCached(){return this.#D}realpathCached(){return this.#x}readdirCached(){let t=this.children();return t.slice(0,t.provisional)}canReadlink(){if(this.#D)return!0;if(!this.parent)return!1;let t=this.#r&L;return!(t!==j&&t!==Z||this.#r&zt||this.#r&$)}calledReaddir(){return!!(this.#r&fe)}isENOENT(){return!!(this.#r&$)}isNamed(t){return this.nocase?this.#b===It(t):this.#b===bt(t)}async readlink(){let t=this.#D;if(t)return t;if(this.canReadlink()&&this.parent)try{let e=await this.#t.promises.readlink(this.fullpath()),s=(await this.parent.realpath())?.resolve(e);if(s)return this.#D=s}catch(e){this.#I(e.code);return}}readlinkSync(){let t=this.#D;if(t)return t;if(this.canReadlink()&&this.parent)try{let e=this.#t.readlinkSync(this.fullpath()),s=this.parent.realpathSync()?.resolve(e);if(s)return this.#D=s}catch(e){this.#I(e.code);return}}#j(t){this.#r|=fe;for(let e=t.provisional;es(null,t))}readdirCB(t,e=!1){if(!this.canReaddir()){e?t(null,[]):queueMicrotask(()=>t(null,[]));return}let s=this.children();if(this.calledReaddir()){let n=s.slice(0,s.provisional);e?t(null,n):queueMicrotask(()=>t(null,n));return}if(this.#$.push(t),this.#W)return;this.#W=!0;let i=this.fullpath();this.#t.readdir(i,{withFileTypes:!0},(n,o)=>{if(n)this.#_(n.code),s.provisional=0;else{for(let h of o)this.#N(h,s);this.#j(s)}this.#q(s.slice(0,s.provisional))})}#P;async readdir(){if(!this.canReaddir())return[];let t=this.children();if(this.calledReaddir())return t.slice(0,t.provisional);let e=this.fullpath();if(this.#P)await this.#P;else{let s=()=>{};this.#P=new Promise(i=>s=i);try{for(let i of await this.#t.promises.readdir(e,{withFileTypes:!0}))this.#N(i,t);this.#j(t)}catch(i){this.#_(i.code),t.provisional=0}this.#P=void 0,s()}return t.slice(0,t.provisional)}readdirSync(){if(!this.canReaddir())return[];let t=this.children();if(this.calledReaddir())return t.slice(0,t.provisional);let e=this.fullpath();try{for(let s of this.#t.readdirSync(e,{withFileTypes:!0}))this.#N(s,t);this.#j(t)}catch(s){this.#_(s.code),t.provisional=0}return t.slice(0,t.provisional)}canReaddir(){if(this.#r&hs)return!1;let t=L&this.#r;return t===j||t===G||t===Z}shouldWalk(t,e){return(this.#r&G)===G&&!(this.#r&hs)&&!t.has(this)&&(!e||e(this))}async realpath(){if(this.#x)return this.#x;if(!((Pt|zt|$)&this.#r))try{let t=await this.#t.promises.realpath(this.fullpath());return this.#x=this.resolve(t)}catch{this.#z()}}realpathSync(){if(this.#x)return this.#x;if(!((Pt|zt|$)&this.#r))try{let t=this.#t.realpathSync(this.fullpath());return this.#x=this.resolve(t)}catch{this.#z()}}[ws](t){if(t===this)return;let e=new Set([]),s=[],i=this;for(;i&&i.parent;)e.add(i),i.#k=s.join(this.sep),i.#v=s.join("/"),i=i.parent,s.push("..");for(i=t;i&&i.parent&&!e.has(i);)i.#k=void 0,i.#v=void 0,i=i.parent}},Wt=class r extends O{sep="\\";splitSep=Zi;constructor(t,e=j,s,i,n,o,h){super(t,e,s,i,n,o,h)}newChild(t,e=j,s={}){return new r(t,e,this.root,this.roots,this.nocase,this.childrenCache(),s)}getRootString(t){return de.parse(t).root}getRoot(t){if(t=Xi(t.toUpperCase()),t===this.root.name)return this.root;for(let[e,s]of Object.entries(this.roots))if(this.sameRoot(t,e))return this.roots[t]=s;return this.roots[t]=new nt(t,this).root}sameRoot(t,e=this.root.name){return t=t.toUpperCase().replace(/\//g,"\\").replace(fs,"$1\\"),t===e}},Bt=class r extends O{splitSep="/";sep="/";constructor(t,e=j,s,i,n,o,h){super(t,e,s,i,n,o,h)}getRootString(t){return t.startsWith("/")?"/":""}getRoot(t){return this.root}newChild(t,e=j,s={}){return new r(t,e,this.root,this.roots,this.nocase,this.childrenCache(),s)}},Ut=class{root;rootPath;roots;cwd;#t;#s;#n;nocase;#i;constructor(t=process.cwd(),e,s,{nocase:i,childrenCacheSize:n=16*1024,fs:o=wt}={}){this.#i=cs(o),(t instanceof URL||t.startsWith("file://"))&&(t=Pi(t));let h=e.resolve(t);this.roots=Object.create(null),this.rootPath=this.parseRootPath(h),this.#t=new $t,this.#s=new $t,this.#n=new pe(n);let a=h.substring(this.rootPath.length).split(s);if(a.length===1&&!a[0]&&a.pop(),i===void 0)throw new TypeError("must provide nocase setting to PathScurryBase ctor");this.nocase=i,this.root=this.newRoot(this.#i),this.roots[this.rootPath]=this.root;let l=this.root,c=a.length-1,f=e.sep,u=this.rootPath,d=!1;for(let m of a){let p=c--;l=l.child(m,{relative:new Array(p).fill("..").join(f),relativePosix:new Array(p).fill("..").join("/"),fullpath:u+=(d?"":f)+m}),d=!0}this.cwd=l}depth(t=this.cwd){return typeof t=="string"&&(t=this.cwd.resolve(t)),t.depth()}childrenCache(){return this.#n}resolve(...t){let e="";for(let n=t.length-1;n>=0;n--){let o=t[n];if(!(!o||o===".")&&(e=e?`${o}/${e}`:o,this.isAbsolute(o)))break}let s=this.#t.get(e);if(s!==void 0)return s;let i=this.cwd.resolve(e).fullpath();return this.#t.set(e,i),i}resolvePosix(...t){let e="";for(let n=t.length-1;n>=0;n--){let o=t[n];if(!(!o||o===".")&&(e=e?`${o}/${e}`:o,this.isAbsolute(o)))break}let s=this.#s.get(e);if(s!==void 0)return s;let i=this.cwd.resolve(e).fullpathPosix();return this.#s.set(e,i),i}relative(t=this.cwd){return typeof t=="string"&&(t=this.cwd.resolve(t)),t.relative()}relativePosix(t=this.cwd){return typeof t=="string"&&(t=this.cwd.resolve(t)),t.relativePosix()}basename(t=this.cwd){return typeof t=="string"&&(t=this.cwd.resolve(t)),t.name}dirname(t=this.cwd){return typeof t=="string"&&(t=this.cwd.resolve(t)),(t.parent||t).fullpath()}async readdir(t=this.cwd,e={withFileTypes:!0}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t,t=this.cwd);let{withFileTypes:s}=e;if(t.canReaddir()){let i=await t.readdir();return s?i:i.map(n=>n.name)}else return[]}readdirSync(t=this.cwd,e={withFileTypes:!0}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t,t=this.cwd);let{withFileTypes:s=!0}=e;return t.canReaddir()?s?t.readdirSync():t.readdirSync().map(i=>i.name):[]}async lstat(t=this.cwd){return typeof t=="string"&&(t=this.cwd.resolve(t)),t.lstat()}lstatSync(t=this.cwd){return typeof t=="string"&&(t=this.cwd.resolve(t)),t.lstatSync()}async readlink(t=this.cwd,{withFileTypes:e}={withFileTypes:!1}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t.withFileTypes,t=this.cwd);let s=await t.readlink();return e?s:s?.fullpath()}readlinkSync(t=this.cwd,{withFileTypes:e}={withFileTypes:!1}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t.withFileTypes,t=this.cwd);let s=t.readlinkSync();return e?s:s?.fullpath()}async realpath(t=this.cwd,{withFileTypes:e}={withFileTypes:!1}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t.withFileTypes,t=this.cwd);let s=await t.realpath();return e?s:s?.fullpath()}realpathSync(t=this.cwd,{withFileTypes:e}={withFileTypes:!1}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t.withFileTypes,t=this.cwd);let s=t.realpathSync();return e?s:s?.fullpath()}async walk(t=this.cwd,e={}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t,t=this.cwd);let{withFileTypes:s=!0,follow:i=!1,filter:n,walkFilter:o}=e,h=[];(!n||n(t))&&h.push(s?t:t.fullpath());let a=new Set,l=(f,u)=>{a.add(f),f.readdirCB((d,m)=>{if(d)return u(d);let p=m.length;if(!p)return u();let w=()=>{--p===0&&u()};for(let g of m)(!n||n(g))&&h.push(s?g:g.fullpath()),i&&g.isSymbolicLink()?g.realpath().then(S=>S?.isUnknown()?S.lstat():S).then(S=>S?.shouldWalk(a,o)?l(S,w):w()):g.shouldWalk(a,o)?l(g,w):w()},!0)},c=t;return new Promise((f,u)=>{l(c,d=>{if(d)return u(d);f(h)})})}walkSync(t=this.cwd,e={}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t,t=this.cwd);let{withFileTypes:s=!0,follow:i=!1,filter:n,walkFilter:o}=e,h=[];(!n||n(t))&&h.push(s?t:t.fullpath());let a=new Set([t]);for(let l of a){let c=l.readdirSync();for(let f of c){(!n||n(f))&&h.push(s?f:f.fullpath());let u=f;if(f.isSymbolicLink()){if(!(i&&(u=f.realpathSync())))continue;u.isUnknown()&&u.lstatSync()}u.shouldWalk(a,o)&&a.add(u)}}return h}[Symbol.asyncIterator](){return this.iterate()}iterate(t=this.cwd,e={}){return typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t,t=this.cwd),this.stream(t,e)[Symbol.asyncIterator]()}[Symbol.iterator](){return this.iterateSync()}*iterateSync(t=this.cwd,e={}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t,t=this.cwd);let{withFileTypes:s=!0,follow:i=!1,filter:n,walkFilter:o}=e;(!n||n(t))&&(yield s?t:t.fullpath());let h=new Set([t]);for(let a of h){let l=a.readdirSync();for(let c of l){(!n||n(c))&&(yield s?c:c.fullpath());let f=c;if(c.isSymbolicLink()){if(!(i&&(f=c.realpathSync())))continue;f.isUnknown()&&f.lstatSync()}f.shouldWalk(h,o)&&h.add(f)}}}stream(t=this.cwd,e={}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t,t=this.cwd);let{withFileTypes:s=!0,follow:i=!1,filter:n,walkFilter:o}=e,h=new V({objectMode:!0});(!n||n(t))&&h.write(s?t:t.fullpath());let a=new Set,l=[t],c=0,f=()=>{let u=!1;for(;!u;){let d=l.shift();if(!d){c===0&&h.end();return}c++,a.add(d);let m=(w,g,S=!1)=>{if(w)return h.emit("error",w);if(i&&!S){let b=[];for(let y of g)y.isSymbolicLink()&&b.push(y.realpath().then(E=>E?.isUnknown()?E.lstat():E));if(b.length){Promise.all(b).then(()=>m(null,g,!0));return}}for(let b of g)b&&(!n||n(b))&&(h.write(s?b:b.fullpath())||(u=!0));c--;for(let b of g){let y=b.realpathCached()||b;y.shouldWalk(a,o)&&l.push(y)}u&&!h.flowing?h.once("drain",f):p||f()},p=!0;d.readdirCB(m,!0),p=!1}};return f(),h}streamSync(t=this.cwd,e={}){typeof t=="string"?t=this.cwd.resolve(t):t instanceof O||(e=t,t=this.cwd);let{withFileTypes:s=!0,follow:i=!1,filter:n,walkFilter:o}=e,h=new V({objectMode:!0}),a=new Set;(!n||n(t))&&h.write(s?t:t.fullpath());let l=[t],c=0,f=()=>{let u=!1;for(;!u;){let d=l.shift();if(!d){c===0&&h.end();return}c++,a.add(d);let m=d.readdirSync();for(let p of m)(!n||n(p))&&(h.write(s?p:p.fullpath())||(u=!0));c--;for(let p of m){let w=p;if(p.isSymbolicLink()){if(!(i&&(w=p.realpathSync())))continue;w.isUnknown()&&w.lstatSync()}w.shouldWalk(a,o)&&l.push(w)}}u&&!h.flowing&&h.once("drain",f)};return f(),h}chdir(t=this.cwd){let e=this.cwd;this.cwd=typeof t=="string"?this.cwd.resolve(t):t,this.cwd[ws](e)}},nt=class extends Ut{sep="\\";constructor(t=process.cwd(),e={}){let{nocase:s=!0}=e;super(t,de,"\\",{...e,nocase:s}),this.nocase=s;for(let i=this.cwd;i;i=i.parent)i.nocase=this.nocase}parseRootPath(t){return de.parse(t).root.toUpperCase()}newRoot(t){return new Wt(this.rootPath,G,void 0,this.roots,this.nocase,this.childrenCache(),{fs:t})}isAbsolute(t){return t.startsWith("/")||t.startsWith("\\")||/^[a-z]:(\/|\\)/i.test(t)}},ot=class extends Ut{sep="/";constructor(t=process.cwd(),e={}){let{nocase:s=!1}=e;super(t,Ii,"/",{...e,nocase:s}),this.nocase=s}parseRootPath(t){return"/"}newRoot(t){return new Bt(this.rootPath,G,void 0,this.roots,this.nocase,this.childrenCache(),{fs:t})}isAbsolute(t){return t.startsWith("/")}},St=class extends ot{constructor(t=process.cwd(),e={}){let{nocase:s=!0}=e;super(t,{...e,nocase:s})}},an=process.platform==="win32"?Wt:Bt,ys=process.platform==="win32"?nt:process.platform==="darwin"?St:ot;import{fileURLToPath as rr}from"url";var tr=r=>r.length>=1,er=r=>r.length>=1,ht=class r{#t;#s;#n;length;#i;#h;#l;#f;#a;#o;#e=!0;constructor(t,e,s,i){if(!tr(t))throw new TypeError("empty pattern list");if(!er(e))throw new TypeError("empty glob list");if(e.length!==t.length)throw new TypeError("mismatched pattern list and glob list lengths");if(this.length=t.length,s<0||s>=this.length)throw new TypeError("index out of range");if(this.#t=t,this.#s=e,this.#n=s,this.#i=i,this.#n===0){if(this.isUNC()){let[n,o,h,a,...l]=this.#t,[c,f,u,d,...m]=this.#s;l[0]===""&&(l.shift(),m.shift());let p=[n,o,h,a,""].join("/"),w=[c,f,u,d,""].join("/");this.#t=[p,...l],this.#s=[w,...m],this.length=this.#t.length}else if(this.isDrive()||this.isAbsolute()){let[n,...o]=this.#t,[h,...a]=this.#s;o[0]===""&&(o.shift(),a.shift());let l=n+"/",c=h+"/";this.#t=[l,...o],this.#s=[c,...a],this.length=this.#t.length}}}pattern(){return this.#t[this.#n]}isString(){return typeof this.#t[this.#n]=="string"}isGlobstar(){return this.#t[this.#n]===k}isRegExp(){return this.#t[this.#n]instanceof RegExp}globString(){return this.#l=this.#l||(this.#n===0?this.isAbsolute()?this.#s[0]+this.#s.slice(1).join("/"):this.#s.join("/"):this.#s.slice(this.#n).join("/"))}hasMore(){return this.length>this.#n+1}rest(){return this.#h!==void 0?this.#h:this.hasMore()?(this.#h=new r(this.#t,this.#s,this.#n+1,this.#i),this.#h.#o=this.#o,this.#h.#a=this.#a,this.#h.#f=this.#f,this.#h):this.#h=null}isUNC(){let t=this.#t;return this.#a!==void 0?this.#a:this.#a=this.#i==="win32"&&this.#n===0&&t[0]===""&&t[1]===""&&typeof t[2]=="string"&&!!t[2]&&typeof t[3]=="string"&&!!t[3]}isDrive(){let t=this.#t;return this.#f!==void 0?this.#f:this.#f=this.#i==="win32"&&this.#n===0&&this.length>1&&typeof t[0]=="string"&&/^[a-z]:$/i.test(t[0])}isAbsolute(){let t=this.#t;return this.#o!==void 0?this.#o:this.#o=t[0]===""&&t.length>1||this.isDrive()||this.isUNC()}root(){let t=this.#t[0];return typeof t=="string"&&this.isAbsolute()&&this.#n===0?t:""}checkFollowGlobstar(){return!(this.#n===0||!this.isGlobstar()||!this.#e)}markFollowGlobstar(){return this.#n===0||!this.isGlobstar()||!this.#e?!1:(this.#e=!1,!0)}};var sr=typeof process=="object"&&process&&typeof process.platform=="string"?process.platform:"linux",Et=class{relative;relativeChildren;absolute;absoluteChildren;constructor(t,{nobrace:e,nocase:s,noext:i,noglobstar:n,platform:o=sr}){this.relative=[],this.absolute=[],this.relativeChildren=[],this.absoluteChildren=[];let h={dot:!0,nobrace:e,nocase:s,noext:i,noglobstar:n,optimizationLevel:2,platform:o,nocomment:!0,nonegate:!0};for(let a of t){let l=new M(a,h);for(let c=0;c[t,!!(e&2),!!(e&1)])}},we=class{store=new Map;add(t,e){if(!t.canReaddir())return;let s=this.store.get(t);s?s.find(i=>i.globString()===e.globString())||s.push(e):this.store.set(t,[e])}get(t){let e=this.store.get(t);if(!e)throw new Error("attempting to walk unknown path");return e}entries(){return this.keys().map(t=>[t,this.store.get(t)])}keys(){return[...this.store.keys()].filter(t=>t.canReaddir())}},vt=class r{hasWalkedCache;matches=new ge;subwalks=new we;patterns;follow;dot;opts;constructor(t,e){this.opts=t,this.follow=!!t.follow,this.dot=!!t.dot,this.hasWalkedCache=e?e.copy():new me}processPatterns(t,e){this.patterns=e;let s=e.map(i=>[t,i]);for(let[i,n]of s){this.hasWalkedCache.storeWalked(i,n);let o=n.root(),h=n.isAbsolute()&&this.opts.absolute!==!1;if(o){i=i.resolve(o==="/"&&this.opts.root!==void 0?this.opts.root:o);let f=n.rest();if(f)n=f;else{this.matches.add(i,!0,!1);continue}}if(i.isENOENT())continue;let a,l,c=!1;for(;typeof(a=n.pattern())=="string"&&(l=n.rest());)i=i.resolve(a),n=l,c=!0;if(a=n.pattern(),l=n.rest(),c){if(this.hasWalkedCache.hasWalked(i,n))continue;this.hasWalkedCache.storeWalked(i,n)}if(typeof a=="string"){let f=a===".."||a===""||a===".";this.matches.add(i.resolve(a),h,f);continue}else if(a===k){(!i.isSymbolicLink()||this.follow||n.checkFollowGlobstar())&&this.subwalks.add(i,n);let f=l?.pattern(),u=l?.rest();if(!l||(f===""||f===".")&&!u)this.matches.add(i,h,f===""||f===".");else if(f===".."){let d=i.parent||i;u?this.hasWalkedCache.hasWalked(d,u)||this.subwalks.add(d,u):this.matches.add(d,h,!0)}}else a instanceof RegExp&&this.subwalks.add(i,n)}return this}subwalkTargets(){return this.subwalks.keys()}child(){return new r(this.opts,this.hasWalkedCache)}filterEntries(t,e){let s=this.subwalks.get(t),i=this.child();for(let n of e)for(let o of s){let h=o.isAbsolute(),a=o.pattern(),l=o.rest();a===k?i.testGlobstar(n,o,l,h):a instanceof RegExp?i.testRegExp(n,a,l,h):i.testString(n,a,l,h)}return i}testGlobstar(t,e,s,i){if((this.dot||!t.name.startsWith("."))&&(e.hasMore()||this.matches.add(t,i,!1),t.canReaddir()&&(this.follow||!t.isSymbolicLink()?this.subwalks.add(t,e):t.isSymbolicLink()&&(s&&e.checkFollowGlobstar()?this.subwalks.add(t,s):e.markFollowGlobstar()&&this.subwalks.add(t,e)))),s){let n=s.pattern();if(typeof n=="string"&&n!==".."&&n!==""&&n!==".")this.testString(t,n,s.rest(),i);else if(n===".."){let o=t.parent||t;this.subwalks.add(o,s)}else n instanceof RegExp&&this.testRegExp(t,n,s.rest(),i)}}testRegExp(t,e,s,i){e.test(t.name)&&(s?this.subwalks.add(t,s):this.matches.add(t,i,!1))}testString(t,e,s,i){t.isNamed(e)&&(s?this.subwalks.add(t,s):this.matches.add(t,i,!1))}};var ir=(r,t)=>typeof r=="string"?new Et([r],t):Array.isArray(r)?new Et(r,t):r,Gt=class{path;patterns;opts;seen=new Set;paused=!1;aborted=!1;#t=[];#s;#n;signal;maxDepth;constructor(t,e,s){this.patterns=t,this.path=e,this.opts=s,this.#n=!s.posix&&s.platform==="win32"?"\\":"/",s.ignore&&(this.#s=ir(s.ignore,s)),this.maxDepth=s.maxDepth||1/0,s.signal&&(this.signal=s.signal,this.signal.addEventListener("abort",()=>{this.#t.length=0}))}#i(t){return this.seen.has(t)||!!this.#s?.ignored?.(t)}#h(t){return!!this.#s?.childrenIgnored?.(t)}pause(){this.paused=!0}resume(){if(this.signal?.aborted)return;this.paused=!1;let t;for(;!this.paused&&(t=this.#t.shift());)t()}onResume(t){this.signal?.aborted||(this.paused?this.#t.push(t):t())}async matchCheck(t,e){if(e&&this.opts.nodir)return;let s;if(this.opts.realpath){if(s=t.realpathCached()||await t.realpath(),!s)return;t=s}let n=t.isUnknown()||this.opts.stat?await t.lstat():t;if(this.opts.follow&&this.opts.nodir&&n?.isSymbolicLink()){let o=await n.realpath();o&&(o.isUnknown()||this.opts.stat)&&await o.lstat()}return this.matchCheckTest(n,e)}matchCheckTest(t,e){return t&&(this.maxDepth===1/0||t.depth()<=this.maxDepth)&&(!e||t.canReaddir())&&(!this.opts.nodir||!t.isDirectory())&&(!this.opts.nodir||!this.opts.follow||!t.isSymbolicLink()||!t.realpathCached()?.isDirectory())&&!this.#i(t)?t:void 0}matchCheckSync(t,e){if(e&&this.opts.nodir)return;let s;if(this.opts.realpath){if(s=t.realpathCached()||t.realpathSync(),!s)return;t=s}let n=t.isUnknown()||this.opts.stat?t.lstatSync():t;if(this.opts.follow&&this.opts.nodir&&n?.isSymbolicLink()){let o=n.realpathSync();o&&(o?.isUnknown()||this.opts.stat)&&o.lstatSync()}return this.matchCheckTest(n,e)}matchFinish(t,e){if(this.#i(t))return;let s=this.opts.absolute===void 0?e:this.opts.absolute;this.seen.add(t);let i=this.opts.mark&&t.isDirectory()?this.#n:"";if(this.opts.withFileTypes)this.matchEmit(t);else if(s){let n=this.opts.posix?t.fullpathPosix():t.fullpath();this.matchEmit(n+i)}else{let n=this.opts.posix?t.relativePosix():t.relative(),o=this.opts.dotRelative&&!n.startsWith(".."+this.#n)?"."+this.#n:"";this.matchEmit(n?o+n+i:"."+i)}}async match(t,e,s){let i=await this.matchCheck(t,s);i&&this.matchFinish(i,e)}matchSync(t,e,s){let i=this.matchCheckSync(t,s);i&&this.matchFinish(i,e)}walkCB(t,e,s){this.signal?.aborted&&s(),this.walkCB2(t,e,new vt(this.opts),s)}walkCB2(t,e,s,i){if(this.#h(t))return i();if(this.signal?.aborted&&i(),this.paused){this.onResume(()=>this.walkCB2(t,e,s,i));return}s.processPatterns(t,e);let n=1,o=()=>{--n===0&&i()};for(let[h,a,l]of s.matches.entries())this.#i(h)||(n++,this.match(h,a,l).then(()=>o()));for(let h of s.subwalkTargets()){if(this.maxDepth!==1/0&&h.depth()>=this.maxDepth)continue;n++;let a=h.readdirCached();h.calledReaddir()?this.walkCB3(h,a,s,o):h.readdirCB((l,c)=>this.walkCB3(h,c,s,o),!0)}o()}walkCB3(t,e,s,i){s=s.filterEntries(t,e);let n=1,o=()=>{--n===0&&i()};for(let[h,a,l]of s.matches.entries())this.#i(h)||(n++,this.match(h,a,l).then(()=>o()));for(let[h,a]of s.subwalks.entries())n++,this.walkCB2(h,a,s.child(),o);o()}walkCBSync(t,e,s){this.signal?.aborted&&s(),this.walkCB2Sync(t,e,new vt(this.opts),s)}walkCB2Sync(t,e,s,i){if(this.#h(t))return i();if(this.signal?.aborted&&i(),this.paused){this.onResume(()=>this.walkCB2Sync(t,e,s,i));return}s.processPatterns(t,e);let n=1,o=()=>{--n===0&&i()};for(let[h,a,l]of s.matches.entries())this.#i(h)||this.matchSync(h,a,l);for(let h of s.subwalkTargets()){if(this.maxDepth!==1/0&&h.depth()>=this.maxDepth)continue;n++;let a=h.readdirSync();this.walkCB3Sync(h,a,s,o)}o()}walkCB3Sync(t,e,s,i){s=s.filterEntries(t,e);let n=1,o=()=>{--n===0&&i()};for(let[h,a,l]of s.matches.entries())this.#i(h)||this.matchSync(h,a,l);for(let[h,a]of s.subwalks.entries())n++,this.walkCB2Sync(h,a,s.child(),o);o()}},xt=class extends Gt{matches;constructor(t,e,s){super(t,e,s),this.matches=new Set}matchEmit(t){this.matches.add(t)}async walk(){if(this.signal?.aborted)throw this.signal.reason;return this.path.isUnknown()&&await this.path.lstat(),await new Promise((t,e)=>{this.walkCB(this.path,this.patterns,()=>{this.signal?.aborted?e(this.signal.reason):t(this.matches)})}),this.matches}walkSync(){if(this.signal?.aborted)throw this.signal.reason;return this.path.isUnknown()&&this.path.lstatSync(),this.walkCBSync(this.path,this.patterns,()=>{if(this.signal?.aborted)throw this.signal.reason}),this.matches}},Tt=class extends Gt{results;constructor(t,e,s){super(t,e,s),this.results=new V({signal:this.signal,objectMode:!0}),this.results.on("drain",()=>this.resume()),this.results.on("resume",()=>this.resume())}matchEmit(t){this.results.write(t),this.results.flowing||this.pause()}stream(){let t=this.path;return t.isUnknown()?t.lstat().then(()=>{this.walkCB(t,this.patterns,()=>this.results.end())}):this.walkCB(t,this.patterns,()=>this.results.end()),this.results}streamSync(){return this.path.isUnknown()&&this.path.lstatSync(),this.walkCBSync(this.path,this.patterns,()=>this.results.end()),this.results}};var nr=typeof process=="object"&&process&&typeof process.platform=="string"?process.platform:"linux",W=class{absolute;cwd;root;dot;dotRelative;follow;ignore;magicalBraces;mark;matchBase;maxDepth;nobrace;nocase;nodir;noext;noglobstar;pattern;platform;realpath;scurry;stat;signal;windowsPathsNoEscape;withFileTypes;opts;patterns;constructor(t,e){if(!e)throw new TypeError("glob options required");if(this.withFileTypes=!!e.withFileTypes,this.signal=e.signal,this.follow=!!e.follow,this.dot=!!e.dot,this.dotRelative=!!e.dotRelative,this.nodir=!!e.nodir,this.mark=!!e.mark,e.cwd?(e.cwd instanceof URL||e.cwd.startsWith("file://"))&&(e.cwd=rr(e.cwd)):this.cwd="",this.cwd=e.cwd||"",this.root=e.root,this.magicalBraces=!!e.magicalBraces,this.nobrace=!!e.nobrace,this.noext=!!e.noext,this.realpath=!!e.realpath,this.absolute=e.absolute,this.noglobstar=!!e.noglobstar,this.matchBase=!!e.matchBase,this.maxDepth=typeof e.maxDepth=="number"?e.maxDepth:1/0,this.stat=!!e.stat,this.ignore=e.ignore,this.withFileTypes&&this.absolute!==void 0)throw new Error("cannot set absolute and withFileTypes:true");if(typeof t=="string"&&(t=[t]),this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||e.allowWindowsEscape===!1,this.windowsPathsNoEscape&&(t=t.map(a=>a.replace(/\\/g,"/"))),this.matchBase){if(e.noglobstar)throw new TypeError("base matching requires globstar");t=t.map(a=>a.includes("/")?a:`./**/${a}`)}if(this.pattern=t,this.platform=e.platform||nr,this.opts={...e,platform:this.platform},e.scurry){if(this.scurry=e.scurry,e.nocase!==void 0&&e.nocase!==e.scurry.nocase)throw new Error("nocase option contradicts provided scurry option")}else{let a=e.platform==="win32"?nt:e.platform==="darwin"?St:e.platform?ot:ys;this.scurry=new a(this.cwd,{nocase:e.nocase,fs:e.fs})}this.nocase=this.scurry.nocase;let s=this.platform==="darwin"||this.platform==="win32",i={...e,dot:this.dot,matchBase:this.matchBase,nobrace:this.nobrace,nocase:this.nocase,nocaseMagicOnly:s,nocomment:!0,noext:this.noext,nonegate:!0,optimizationLevel:2,platform:this.platform,windowsPathsNoEscape:this.windowsPathsNoEscape,debug:!!this.opts.debug},n=this.pattern.map(a=>new M(a,i)),[o,h]=n.reduce((a,l)=>(a[0].push(...l.set),a[1].push(...l.globParts),a),[[],[]]);this.patterns=o.map((a,l)=>{let c=h[l];if(!c)throw new Error("invalid pattern object");return new ht(a,c,0,this.platform)})}async walk(){return[...await new xt(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase}).walk()]}walkSync(){return[...new xt(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase}).walkSync()]}stream(){return new Tt(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase}).stream()}streamSync(){return new Tt(this.patterns,this.scurry.cwd,{...this.opts,maxDepth:this.maxDepth!==1/0?this.maxDepth+this.scurry.cwd.depth():1/0,platform:this.platform,nocase:this.nocase}).streamSync()}iterateSync(){return this.streamSync()[Symbol.iterator]()}[Symbol.iterator](){return this.iterateSync()}iterate(){return this.stream()[Symbol.asyncIterator]()}[Symbol.asyncIterator](){return this.iterate()}};var ye=(r,t={})=>{Array.isArray(r)||(r=[r]);for(let e of r)if(new M(e,t).hasMagic())return!0;return!1};function Ht(r,t={}){return new W(r,t).streamSync()}function Es(r,t={}){return new W(r,t).stream()}function qt(r,t={}){return new W(r,t).walkSync()}async function bs(r,t={}){return new W(r,t).walk()}function Jt(r,t={}){return new W(r,t).iterateSync()}function vs(r,t={}){return new W(r,t).iterate()}var or=Ht,hr=Object.assign(Es,{sync:Ht}),ar=Jt,lr=Object.assign(vs,{sync:Jt}),cr=Object.assign(qt,{stream:Ht,iterate:Jt}),Ss=Object.assign(bs,{glob:bs,globSync:qt,sync:cr,globStream:Es,stream:hr,globStreamSync:Ht,streamSync:or,globIterate:vs,iterate:lr,globIterateSync:Jt,iterateSync:ar,Glob:W,hasMagic:ye,escape:tt,unescape:I});Ss.glob=Ss;import fr from"node:fs";function xs(r){return JSON.parse(fr.readFileSync(r).toString("utf-8"))}function Kt(r){return xs(r)}function be(r){return xs(r)}function Y(r){return(process.env[`INPUT_${r.toUpperCase()}`]||"").trim()}function Ts(r){let t=ur(r);Vt.mkdirSync(Yt.join(At.cwd(),r.analyzerDirectory),{recursive:!0});let e=Yt.join(At.cwd(),r.analyzerDirectory,"bundle_analysis.json");Vt.writeFileSync(e,JSON.stringify(t,null,2)),Xt.log(`Wrote ${e}`)}function Se(r){return r.metafiles.flatMap(t=>qt(Yt.join(At.cwd(),t),{nodir:!0}).map(e=>({relativePath:Yt.relative(At.cwd(),e),absolutePath:e})))}function ur(r){let t={};return Se(r).reduce((e,{relativePath:s,absolutePath:i})=>{try{Vt.accessSync(i,Vt.constants.R_OK)}catch{Xt.error(`No meta file found at "${i}" - a path to meta file may be wrong, or esbuild is not executed.`),At.exit(1)}let n=Kt(i);return Object.entries(n.outputs).reduce((o,h)=>{let[a,l]=h;return r.includeExtensions.some(c=>a.toLowerCase().endsWith(c))&&(o[`${s} -> ${a}`]={bytes:l.bytes,metafile:s,outfile:a}),o},e),e},t)}function ks(r){let t=!1,e=`## \u{1F4E6} esbuild Bundle Analysis for ${r.name}
 
 This analysis was generated by [esbuild-bundle-analyzer](https://github.com/exoego/esbuild-bundle-analyzer). \u{1F916}
-`;
-  const current = loadAnalysisJson(
-    path3.join(process.cwd(), input.analyzerDirectory, "bundle_analysis.json")
-  );
-  const base = loadBaseAnalysisJson(input);
-  const fileTree = buildFileTree(input);
-  const allOutFiles = [
-    .../* @__PURE__ */ new Set([...Object.keys(current), ...Object.keys(base)])
-  ].sort();
-  const comparison = allOutFiles.map((outfile) => {
-    const currentStats = current[outfile];
-    const baseStats = base[outfile];
-    if (!currentStats) {
-      hasAnyChange = true;
-      return {
-        ...baseStats,
-        baseBytes: -1,
-        remark: "deleted",
-        tree: void 0
-      };
-    }
-    const tree = fileTree.get(
-      treeKey(currentStats.metafile, currentStats.outfile)
-    );
-    if (!baseStats) {
-      hasAnyChange = true;
-      return { ...currentStats, baseBytes: -1, remark: "added", tree };
-    }
-    const diff = currentStats.bytes - baseStats.bytes;
-    if (diff !== 0) {
-      hasAnyChange = true;
-    }
-    return {
-      ...currentStats,
-      baseBytes: baseStats.bytes,
-      tree,
-      remark: Math.sign(diff) ? "increased" : "decreased"
-    };
-  });
-  if (hasAnyChange) {
-    output += markdownTable(comparison, input.percentExtraAttention);
-    output += fileSizeTable(comparison, input.topNLargestPaths);
-    output += detail(input);
-  } else {
-    output += "This PR introduced no changes to the esbuild bundle! \u{1F64C}";
-  }
-  output += ``;
-  writeComment(input, output);
-}
-function treeKey(metafile, outfile) {
-  return `${metafile} -> ${outfile}`;
-}
-function writeComment(input, output) {
-  fs3.mkdirSync(path3.join(process.cwd(), input.analyzerDirectory), {
-    recursive: true
-  });
-  fs3.writeFileSync(
-    path3.join(
-      process.cwd(),
-      input.analyzerDirectory,
-      "bundle_analysis_comment.txt"
-    ),
-    output.trim()
-  );
-}
-function detail(input) {
-  if (!input.showDetails) {
-    return "";
-  }
-  return `
+`,s=be(Rt.join(process.cwd(),r.analyzerDirectory,"bundle_analysis.json")),i=mr(r),n=gr(r),h=[...new Set([...Object.keys(s),...Object.keys(i)])].sort().map(a=>{let l=s[a],c=i[a];if(!l)return t=!0,{...c,baseBytes:-1,remark:"deleted",tree:void 0};let f=n.get(Cs(l.metafile,l.outfile));if(!c)return t=!0,{...l,baseBytes:-1,remark:"added",tree:f};let u=l.bytes-c.bytes;return u!==0&&(t=!0),{...l,baseBytes:c.bytes,tree:f,remark:Math.sign(u)?"increased":"decreased"}});t?(e+=wr(h,r.percentExtraAttention),e+=br(h,r.topNLargestPaths),e+=pr(r)):e+="This PR introduced no changes to the esbuild bundle! \u{1F64C}",e+=``,dr(r,e)}function Cs(r,t){return`${r} -> ${t}`}function dr(r,t){ve.mkdirSync(Rt.join(process.cwd(),r.analyzerDirectory),{recursive:!0}),ve.writeFileSync(Rt.join(process.cwd(),r.analyzerDirectory,"bundle_analysis_comment.txt"),t.trim())}function pr(r){return r.showDetails?`
 
Details

Next to the size is how much the size has increased or decreased compared with the base branch of this PR.

    -
  • \u203C\uFE0F: Size increased by ${input.percentExtraAttention}% or more. Special attention should be given to this.
  • -
  • \u26A0\uFE0F: Size increased in acceptable range (lower than ${input.percentExtraAttention}%).
  • +
  • \u203C\uFE0F: Size increased by ${r.percentExtraAttention}% or more. Special attention should be given to this.
  • +
  • \u26A0\uFE0F: Size increased in acceptable range (lower than ${r.percentExtraAttention}%).
  • \u2705: No change or even downsized.
  • \u{1F5D1}\uFE0F: The out file is deleted: not found in base branch.
  • \u{1F195}: The out file is newly found: will be added to base branch.
-`; -} -function loadBaseAnalysisJson(input) { - try { - return loadAnalysisJson( - path3.join( - process.cwd(), - input.analyzerDirectory, - "base/bundle/bundle_analysis.json" - ) - ); - } catch (e) { - return {}; - } -} -function buildFileTree(input) { - function buildRoot(input2) { - const root = { name: "", path: "", value: 0, children: [] }; - for (const [filePath, { bytesInOutput }] of Object.entries(input2)) { - const directories = filePath.split("/"); - buildNode(root, directories, bytesInOutput); - } - return root; - } - function buildNode(node, paths, value) { - const first = paths.shift(); - if (first === void 0) { - node.value += value; - return; - } - let child = node.children.find((child2) => child2.name === first); - if (!child) { - child = { - name: first, - path: `${node.path}/${first}`.replace(/^\//, ""), - value: 0, - children: [] - }; - node.children.push(child); - } - node.value += value; - buildNode(child, paths, value); - } - const trees = /* @__PURE__ */ new Map(); - if (input.topNLargestPaths <= 0) { - return trees; - } - for (const { relativePath, absolutePath } of findMetafiles(input)) { - const metafileJson = loadMetaFile(absolutePath); - for (const [outfile, buildMeta] of Object.entries(metafileJson.outputs)) { - const tree = buildRoot(buildMeta.inputs); - trees.set(treeKey(relativePath, outfile), tree); - fs3.writeFileSync( - path3.join(process.cwd(), input.analyzerDirectory, "tree.json"), - JSON.stringify(tree, null, 2) - ); - } - } - return trees; -} -var spacer = "\xA0"; -function filesize(bytes) { - const sign2 = bytes < 0 ? "-" : ""; - const n = Math.abs(bytes); - if (n < 1e3) { - return `${sign2}${n}${spacer}B`; - } - if (n < 1e3 * 1e3) { - return `${sign2}${(n / 1e3).toFixed(2)}${spacer}KB`; - } - if (n < 1e3 * 1e3 * 1e3) { - return `${sign2}${(n / 1e3 / 1e3).toFixed(2)}${spacer}MB`; - } - if (n < 1e3 * 1e3 * 1e3 * 1e3) { - return `${sign2}${(n / 1e3 / 1e3 / 1e3).toFixed(2)}${spacer}GB`; - } - throw new Error("Too large file size!! Are you sure?"); -} -function markdownTable(data, redThreshold) { - const rows = data.map((d) => { - return `${d.metafile} | ${d.outfile} | ${renderSize(d)} | ${renderNote( - d, - redThreshold - )} -`; - }).join(""); - return ` +`:""}function mr(r){try{return be(Rt.join(process.cwd(),r.analyzerDirectory,"base/bundle/bundle_analysis.json"))}catch{return{}}}function gr(r){function t(i){let n={name:"",path:"",value:0,children:[]};for(let[o,{bytesInOutput:h}]of Object.entries(i)){let a=o.split("/");e(n,a,h)}return n}function e(i,n,o){let h=n.shift();if(h===void 0){i.value+=o;return}let a=i.children.find(l=>l.name===h);a||(a={name:h,path:`${i.path}/${h}`.replace(/^\//,""),value:0,children:[]},i.children.push(a)),i.value+=o,e(a,n,o)}let s=new Map;if(r.topNLargestPaths<=0)return s;for(let{relativePath:i,absolutePath:n}of Se(r)){let o=Kt(n);for(let[h,a]of Object.entries(o.outputs)){let l=t(a.inputs);s.set(Cs(i,h),l),ve.writeFileSync(Rt.join(process.cwd(),r.analyzerDirectory,"tree.json"),JSON.stringify(l,null,2))}}return s}var Zt="\xA0";function xe(r){let t=r<0?"-":"",e=Math.abs(r);if(e<1e3)return`${t}${e}${Zt}B`;if(e<1e3*1e3)return`${t}${(e/1e3).toFixed(2)}${Zt}KB`;if(e<1e3*1e3*1e3)return`${t}${(e/1e3/1e3).toFixed(2)}${Zt}MB`;if(e<1e3*1e3*1e3*1e3)return`${t}${(e/1e3/1e3/1e3).toFixed(2)}${Zt}GB`;throw new Error("Too large file size!! Are you sure?")}function wr(r,t){return` Meta File | Out File | Size (raw) | Note ----------|----------|-----------:|------ -${rows}`; -} -function findLargeDirectories(root, N) { - const nodes = []; - const queue = [ - { node: root, depth: 0 } - ]; - while (queue.length > 0) { - const shift = queue.shift(); - if (!shift) { - break; - } - const { node, depth } = shift; - if (depth === 3) { - nodes.push(node); - continue; - } - if (node.children.length === 0) { - nodes.push(node); - } else { - for (const item of node.children) { - queue.push({ node: item, depth: depth + 1 }); - } - } - } - const largeNodes = nodes.sort((a, b) => b.value - a.value).slice(0, N); - return { - largeNodes, - hasOther: nodes.length > N - }; -} -function fixedPercent(n, d) { - return Number.parseFloat((n / d * 100).toFixed(1)); -} -function fileSizeTable(data, topNLargestPaths) { - if (data.length === 0 || topNLargestPaths <= 0) { - return ""; - } - let output = ""; - output += "
\n"; - output += "Largest paths\n"; - output += `These visualization shows top ${topNLargestPaths} largest paths in the bundle. -`; - for (const d of data) { - output += "\n"; - output += `## Meta file: ${d.metafile}, Out file: ${d.outfile} -`; - if (!d.tree) { - output += "\uFE0F\uFE0F\u{1F5D1}\uFE0FDeleted\n"; - continue; - } - output += "| Path | Size |\n"; - output += "|------|-------|\n"; - const totalSize = d.tree.value; - const { largeNodes, hasOther } = findLargeDirectories( - d.tree, - topNLargestPaths - ); - for (const { path: path4, value } of largeNodes) { - const percent = fixedPercent(value, totalSize); - output += `| ${path4} | ${renderBar(percent, value)} | -`; - } - if (hasOther) { - const otherSize = totalSize - largeNodes[0].value; - const otherPercent = fixedPercent(otherSize, totalSize); - output += `| (other) | ${renderBar(otherPercent, otherSize)} | -`; - } - } - output += "
\n"; - return output; -} -function renderBar(percent, bytes) { - const bar = progress(percent / 100); - return `\${{\\color{Goldenrod}{ ${bar} }}}$ ${percent.toFixed( - 1 - )}%, ${filesize(bytes)}`; -} -var blocks = ["", "\u258F", "\u258E", "\u258D", "\u258C", "\u258B", "\u258A", "\u2589", "\u2588"]; -var progression = 1 / (blocks.length - 1); -function progress(value, length = 25, vmin = 0, vmax = 1) { - const v = value * length; - const integerPart = Math.floor(v); - const fractionalPart = v - integerPart; - const i = Math.round( - progression * Math.floor(fractionalPart / progression) / progression - ); - return "\u2588".repeat(integerPart) + blocks[i]; -} -function renderSize(d) { - return filesize(d.bytes); -} -function renderNote(d, redThreshold) { - if (d.remark === "deleted") { - return "\u{1F5D1}\uFE0F Deleted"; - } - if (d.remark === "added") { - return "\u{1F195} Added"; - } - const diff = d.bytes - d.baseBytes; - if (diff !== 0) { - const percentChange = diff / d.baseBytes * 100; - return `${renderStatusIndicator(percentChange, redThreshold)}${filesize( - diff - )} (${sign(percentChange)}${percentChange.toFixed(1)}%)`; - } - return "\u2705 No change"; -} -function sign(num) { - return num < 0 ? "" : "+"; -} -function renderStatusIndicator(percentChange, redThreshold) { - let res; - if (percentChange > 0 && percentChange < redThreshold) { - res = "\u26A0\uFE0F"; - } else if (percentChange >= redThreshold) { - res = "\u203C\uFE0F"; - } else { - res = "\u2705 "; - } - return `${res} ${sign(percentChange)}`; -} - -// src/index.ts -function getInput() { - const rawMetafiles = getSingleInput("metafiles"); - if (!rawMetafiles) { - throw new Error("metafiles is not specified"); - } - const name = getSingleInput("name"); - if (!name) { - throw new Error("name is not specified"); - } - return { - percentExtraAttention: Number.parseInt( - getSingleInput("percent_extra_attention") || "20", - 10 - ), - showDetails: ["true", "True", "TRUE"].includes( - getSingleInput("show_details") || "true" - ), - topNLargestPaths: Number.parseInt( - getSingleInput("top_n_largest_paths") || "20", - 10 - ), - includeExtensions: (getSingleInput("include_extensions") || ".js,.mjs,.cjs").split(","), - name, - analyzerDirectory: getSingleInput("analyze_directory") || ".analyzer", - metafiles: rawMetafiles.split(",") - }; -} -function run(input = getInput()) { - report(input); - compare(input); -} -if (import.meta.url === pathToFileURL(process.argv[1]).href) { - run(); -} -export { - run -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb21wYXJlLnRzIiwgIi4uL3NyYy9yZXBvcnQudHMiLCAiLi4vc3JjL3V0aWxzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBjb21wYXJlIH0gZnJvbSBcIi4vY29tcGFyZVwiO1xuaW1wb3J0IHsgcmVwb3J0IH0gZnJvbSBcIi4vcmVwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGdldFNpbmdsZUlucHV0IH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gZ2V0SW5wdXQoKTogSW5wdXQge1xuXHRjb25zdCByYXdNZXRhZmlsZXMgPSBnZXRTaW5nbGVJbnB1dChcIm1ldGFmaWxlc1wiKTtcblx0aWYgKCFyYXdNZXRhZmlsZXMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtZXRhZmlsZXMgaXMgbm90IHNwZWNpZmllZFwiKTtcblx0fVxuXHRjb25zdCBuYW1lID0gZ2V0U2luZ2xlSW5wdXQoXCJuYW1lXCIpO1xuXHRpZiAoIW5hbWUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGlzIG5vdCBzcGVjaWZpZWRcIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRwZXJjZW50RXh0cmFBdHRlbnRpb246IE51bWJlci5wYXJzZUludChcblx0XHRcdGdldFNpbmdsZUlucHV0KFwicGVyY2VudF9leHRyYV9hdHRlbnRpb25cIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRzaG93RGV0YWlsczogW1widHJ1ZVwiLCBcIlRydWVcIiwgXCJUUlVFXCJdLmluY2x1ZGVzKFxuXHRcdFx0Z2V0U2luZ2xlSW5wdXQoXCJzaG93X2RldGFpbHNcIikgfHwgXCJ0cnVlXCIsXG5cdFx0KSxcblx0XHR0b3BOTGFyZ2VzdFBhdGhzOiBOdW1iZXIucGFyc2VJbnQoXG5cdFx0XHRnZXRTaW5nbGVJbnB1dChcInRvcF9uX2xhcmdlc3RfcGF0aHNcIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRpbmNsdWRlRXh0ZW5zaW9uczogKFxuXHRcdFx0Z2V0U2luZ2xlSW5wdXQoXCJpbmNsdWRlX2V4dGVuc2lvbnNcIikgfHwgXCIuanMsLm1qcywuY2pzXCJcblx0XHQpLnNwbGl0KFwiLFwiKSxcblx0XHRuYW1lLFxuXHRcdGFuYWx5emVyRGlyZWN0b3J5OiBnZXRTaW5nbGVJbnB1dChcImFuYWx5emVfZGlyZWN0b3J5XCIpIHx8IFwiLmFuYWx5emVyXCIsXG5cdFx0bWV0YWZpbGVzOiByYXdNZXRhZmlsZXMuc3BsaXQoXCIsXCIpLFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuKGlucHV0OiBJbnB1dCA9IGdldElucHV0KCkpOiB2b2lkIHtcblx0cmVwb3J0KGlucHV0KTtcblx0Y29tcGFyZShpbnB1dCk7XG59XG5cbmlmIChpbXBvcnQubWV0YS51cmwgPT09IHBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5hcmd2WzFdKS5ocmVmKSB7XG5cdHJ1bigpO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmluZE1ldGFmaWxlcyB9IGZyb20gXCIuL3JlcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wYXJlUmVzdWx0LCBJbnB1dCwgUmVwb3J0LCBUcmVlTWFwTm9kZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2FkQW5hbHlzaXNKc29uLCBsb2FkTWV0YUZpbGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShpbnB1dDogSW5wdXQpOiB2b2lkIHtcblx0bGV0IGhhc0FueUNoYW5nZSA9IGZhbHNlO1xuXHRsZXQgb3V0cHV0ID0gYCMjIFx1RDgzRFx1RENFNiBlc2J1aWxkIEJ1bmRsZSBBbmFseXNpcyBmb3IgJHtpbnB1dC5uYW1lfVxuXG5UaGlzIGFuYWx5c2lzIHdhcyBnZW5lcmF0ZWQgYnkgW2VzYnVpbGQtYnVuZGxlLWFuYWx5emVyXShodHRwczovL2dpdGh1Yi5jb20vZXhvZWdvL2VzYnVpbGQtYnVuZGxlLWFuYWx5emVyKS4gXHVEODNFXHVERDE2XG5gO1xuXG5cdGNvbnN0IGN1cnJlbnQgPSBsb2FkQW5hbHlzaXNKc29uKFxuXHRcdHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSwgXCJidW5kbGVfYW5hbHlzaXMuanNvblwiKSxcblx0KTtcblx0Y29uc3QgYmFzZSA9IGxvYWRCYXNlQW5hbHlzaXNKc29uKGlucHV0KTtcblxuXHRjb25zdCBmaWxlVHJlZSA9IGJ1aWxkRmlsZVRyZWUoaW5wdXQpO1xuXG5cdGNvbnN0IGFsbE91dEZpbGVzOiBzdHJpbmdbXSA9IFtcblx0XHQuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhjdXJyZW50KSwgLi4uT2JqZWN0LmtleXMoYmFzZSldKSxcblx0XS5zb3J0KCk7XG5cblx0Y29uc3QgY29tcGFyaXNvbjogQXJyYXk8Q29tcGFyZVJlc3VsdD4gPSBhbGxPdXRGaWxlcy5tYXAoKG91dGZpbGUpID0+IHtcblx0XHRjb25zdCBjdXJyZW50U3RhdHMgPSBjdXJyZW50W291dGZpbGVdO1xuXHRcdGNvbnN0IGJhc2VTdGF0cyA9IGJhc2Vbb3V0ZmlsZV07XG5cblx0XHRpZiAoIWN1cnJlbnRTdGF0cykge1xuXHRcdFx0aGFzQW55Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdC4uLmJhc2VTdGF0cyxcblx0XHRcdFx0YmFzZUJ5dGVzOiAtMSxcblx0XHRcdFx0cmVtYXJrOiBcImRlbGV0ZWRcIixcblx0XHRcdFx0dHJlZTogdW5kZWZpbmVkLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjb25zdCB0cmVlID0gZmlsZVRyZWUuZ2V0KFxuXHRcdFx0dHJlZUtleShjdXJyZW50U3RhdHMubWV0YWZpbGUsIGN1cnJlbnRTdGF0cy5vdXRmaWxlKSxcblx0XHQpO1xuXHRcdGlmICghYmFzZVN0YXRzKSB7XG5cdFx0XHRoYXNBbnlDaGFuZ2UgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHsgLi4uY3VycmVudFN0YXRzLCBiYXNlQnl0ZXM6IC0xLCByZW1hcms6IFwiYWRkZWRcIiwgdHJlZSB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpZmYgPSBjdXJyZW50U3RhdHMuYnl0ZXMgLSBiYXNlU3RhdHMuYnl0ZXM7XG5cdFx0aWYgKGRpZmYgIT09IDApIHtcblx0XHRcdGhhc0FueUNoYW5nZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5jdXJyZW50U3RhdHMsXG5cdFx0XHRiYXNlQnl0ZXM6IGJhc2VTdGF0cy5ieXRlcyxcblx0XHRcdHRyZWUsXG5cdFx0XHRyZW1hcms6IE1hdGguc2lnbihkaWZmKSA/IFwiaW5jcmVhc2VkXCIgOiBcImRlY3JlYXNlZFwiLFxuXHRcdH07XG5cdH0pO1xuXG5cdGlmIChoYXNBbnlDaGFuZ2UpIHtcblx0XHRvdXRwdXQgKz0gbWFya2Rvd25UYWJsZShjb21wYXJpc29uLCBpbnB1dC5wZXJjZW50RXh0cmFBdHRlbnRpb24pO1xuXHRcdG91dHB1dCArPSBmaWxlU2l6ZVRhYmxlKGNvbXBhcmlzb24sIGlucHV0LnRvcE5MYXJnZXN0UGF0aHMpO1xuXHRcdG91dHB1dCArPSBkZXRhaWwoaW5wdXQpO1xuXHR9IGVsc2Uge1xuXHRcdG91dHB1dCArPSBcIlRoaXMgUFIgaW50cm9kdWNlZCBubyBjaGFuZ2VzIHRvIHRoZSBlc2J1aWxkIGJ1bmRsZSEgXHVEODNEXHVERTRDXCI7XG5cdH1cblxuXHQvLyB3ZSBhZGQgdGhpcyB0YWcgc28gdGhhdCBvdXIgYWN0aW9uIGNhbiBiZSBhYmxlIHRvIGVhc2lseSBhbmRcblx0Ly8gY29uc2lzdGVudGx5IGZpbmQgdGhlIHJpZ2h0IGNvbW1lbnQgdG8gZWRpdCBhcyBtb3JlIGNvbW1pdHMgYXJlIHB1c2hlZC5cblx0b3V0cHV0ICs9IGA8IS0tIF9fRVNCVUlMRF9CVU5ETEVfJHtpbnB1dC5uYW1lfSAtLT5gO1xuXG5cdHdyaXRlQ29tbWVudChpbnB1dCwgb3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gdHJlZUtleShtZXRhZmlsZTogc3RyaW5nLCBvdXRmaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7bWV0YWZpbGV9IC0+ICR7b3V0ZmlsZX1gO1xufVxuXG4vLyBXcml0ZSB0aGUgb3V0cHV0IHRvIGEgZmlsZSB3aGljaCBpcyBsYXRlciByZWFkIGluXG4vLyBhcyBjb21tZW50IGNvbnRlbnRzIGJ5IHRoZSBhY3Rpb25zIHdvcmtmbG93LlxuZnVuY3Rpb24gd3JpdGVDb21tZW50KGlucHV0OiBJbnB1dCwgb3V0cHV0OiBzdHJpbmcpOiB2b2lkIHtcblx0ZnMubWtkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSksIHtcblx0XHRyZWN1cnNpdmU6IHRydWUsXG5cdH0pO1xuXHRmcy53cml0ZUZpbGVTeW5jKFxuXHRcdHBhdGguam9pbihcblx0XHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0XHRpbnB1dC5hbmFseXplckRpcmVjdG9yeSxcblx0XHRcdFwiYnVuZGxlX2FuYWx5c2lzX2NvbW1lbnQudHh0XCIsXG5cdFx0KSxcblx0XHRvdXRwdXQudHJpbSgpLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBkZXRhaWwoaW5wdXQ6IElucHV0KTogc3RyaW5nIHtcblx0aWYgKCFpbnB1dC5zaG93RGV0YWlscykge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHJldHVybiBgXFxuPGRldGFpbHM+XG48c3VtbWFyeT5EZXRhaWxzPC9zdW1tYXJ5PlxuPHA+TmV4dCB0byB0aGUgc2l6ZSBpcyBob3cgbXVjaCB0aGUgc2l6ZSBoYXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBjb21wYXJlZCB3aXRoIHRoZSBiYXNlIGJyYW5jaCBvZiB0aGlzIFBSLjwvcD5cbjx1bD5cbjxsaT5cdTIwM0NcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGJ5ICR7aW5wdXQucGVyY2VudEV4dHJhQXR0ZW50aW9ufSUgb3IgbW9yZS4gU3BlY2lhbCBhdHRlbnRpb24gc2hvdWxkIGJlIGdpdmVuIHRvIHRoaXMuPC9saT5cbjxsaT5cdTI2QTBcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGluIGFjY2VwdGFibGUgcmFuZ2UgKGxvd2VyIHRoYW4gJHtpbnB1dC5wZXJjZW50RXh0cmFBdHRlbnRpb259JSkuPC9saT5cbjxsaT5cdTI3MDU6IE5vIGNoYW5nZSBvciBldmVuIGRvd25zaXplZC48L2xpPlxuPGxpPlx1RDgzRFx1REREMVx1RkUwRjogVGhlIG91dCBmaWxlIGlzIGRlbGV0ZWQ6IG5vdCBmb3VuZCBpbiBiYXNlIGJyYW5jaC48L2xpPlxuPGxpPlx1RDgzQ1x1REQ5NTogVGhlIG91dCBmaWxlIGlzIG5ld2x5IGZvdW5kOiB3aWxsIGJlIGFkZGVkIHRvIGJhc2UgYnJhbmNoLjwvbGk+XG48L3VsPlxuPC9kZXRhaWxzPlxcbmA7XG59XG5cbmZ1bmN0aW9uIGxvYWRCYXNlQW5hbHlzaXNKc29uKGlucHV0OiBJbnB1dCk6IFJlcG9ydCB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGxvYWRBbmFseXNpc0pzb24oXG5cdFx0XHRwYXRoLmpvaW4oXG5cdFx0XHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0XHRcdGlucHV0LmFuYWx5emVyRGlyZWN0b3J5LFxuXHRcdFx0XHRcImJhc2UvYnVuZGxlL2J1bmRsZV9hbmFseXNpcy5qc29uXCIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBFbXB0eSBpZiBubyBiYXNlIGFuYWx5c2lzIGZvdW5kLlxuXHRcdC8vIFRoaXMgaXMgYSBjYXNlIHdoZW4gYW5hbHl6ZXIgaXMgZmlyc3Qgc2V0IHVwIG9yIGFsbCBhcnRpZmFjdHMgYXJlIGV4cGlyZWQuXG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmlsZVRyZWUoaW5wdXQ6IElucHV0KSB7XG5cdGZ1bmN0aW9uIGJ1aWxkUm9vdChcblx0XHRpbnB1dDogUmVjb3JkPHN0cmluZywgeyBieXRlc0luT3V0cHV0OiBudW1iZXIgfT4sXG5cdCk6IFRyZWVNYXBOb2RlIHtcblx0XHRjb25zdCByb290OiBUcmVlTWFwTm9kZSA9IHsgbmFtZTogXCJcIiwgcGF0aDogXCJcIiwgdmFsdWU6IDAsIGNoaWxkcmVuOiBbXSB9O1xuXHRcdGZvciAoY29uc3QgW2ZpbGVQYXRoLCB7IGJ5dGVzSW5PdXRwdXQgfV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG5cdFx0XHRjb25zdCBkaXJlY3RvcmllcyA9IGZpbGVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGJ1aWxkTm9kZShyb290LCBkaXJlY3RvcmllcywgYnl0ZXNJbk91dHB1dCk7XG5cdFx0fVxuXHRcdHJldHVybiByb290O1xuXHR9XG5cblx0ZnVuY3Rpb24gYnVpbGROb2RlKFxuXHRcdG5vZGU6IFRyZWVNYXBOb2RlLFxuXHRcdHBhdGhzOiBBcnJheTxzdHJpbmc+LFxuXHRcdHZhbHVlOiBudW1iZXIsXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0ID0gcGF0aHMuc2hpZnQoKTtcblx0XHRpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gbGVhZiBub2RlIChmaWxlKVxuXHRcdFx0bm9kZS52YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGNoaWxkID0gbm9kZS5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PT0gZmlyc3QpO1xuXHRcdGlmICghY2hpbGQpIHtcblx0XHRcdGNoaWxkID0ge1xuXHRcdFx0XHRuYW1lOiBmaXJzdCxcblx0XHRcdFx0cGF0aDogYCR7bm9kZS5wYXRofS8ke2ZpcnN0fWAucmVwbGFjZSgvXlxcLy8sIFwiXCIpLFxuXHRcdFx0XHR2YWx1ZTogMCxcblx0XHRcdFx0Y2hpbGRyZW46IFtdLFxuXHRcdFx0fTtcblx0XHRcdG5vZGUuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cdFx0fVxuXHRcdG5vZGUudmFsdWUgKz0gdmFsdWU7XG5cdFx0YnVpbGROb2RlKGNoaWxkLCBwYXRocywgdmFsdWUpO1xuXHR9XG5cblx0Y29uc3QgdHJlZXMgPSBuZXcgTWFwPHN0cmluZywgVHJlZU1hcE5vZGU+KCk7XG5cdGlmIChpbnB1dC50b3BOTGFyZ2VzdFBhdGhzIDw9IDApIHtcblx0XHQvLyBTa2lwIGJ1aWxkaW5nIHRyZWUgaWYgd2UgZG9uJ3QgbmVlZCBpdC5cblx0XHRyZXR1cm4gdHJlZXM7XG5cdH1cblx0Zm9yIChjb25zdCB7IHJlbGF0aXZlUGF0aCwgYWJzb2x1dGVQYXRoIH0gb2YgZmluZE1ldGFmaWxlcyhpbnB1dCkpIHtcblx0XHRjb25zdCBtZXRhZmlsZUpzb24gPSBsb2FkTWV0YUZpbGUoYWJzb2x1dGVQYXRoKTtcblx0XHRmb3IgKGNvbnN0IFtvdXRmaWxlLCBidWlsZE1ldGFdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFmaWxlSnNvbi5vdXRwdXRzKSkge1xuXHRcdFx0Y29uc3QgdHJlZSA9IGJ1aWxkUm9vdChidWlsZE1ldGEuaW5wdXRzKTtcblx0XHRcdHRyZWVzLnNldCh0cmVlS2V5KHJlbGF0aXZlUGF0aCwgb3V0ZmlsZSksIHRyZWUpO1xuXG5cdFx0XHRmcy53cml0ZUZpbGVTeW5jKFxuXHRcdFx0XHRwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgaW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnksIFwidHJlZS5qc29uXCIpLFxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeSh0cmVlLCBudWxsLCAyKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cmVlcztcbn1cblxuY29uc3Qgc3BhY2VyID0gXCJcdTAwQTBcIjtcbmZ1bmN0aW9uIGZpbGVzaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuXHRjb25zdCBzaWduID0gYnl0ZXMgPCAwID8gXCItXCIgOiBcIlwiO1xuXHRjb25zdCBuID0gTWF0aC5hYnMoYnl0ZXMpO1xuXHRpZiAobiA8IDEwMDApIHtcblx0XHRyZXR1cm4gYCR7c2lnbn0ke259JHtzcGFjZXJ9QmA7XG5cdH1cblx0aWYgKG4gPCAxMDAwICogMTAwMCkge1xuXHRcdHJldHVybiBgJHtzaWdufSR7KG4gLyAxMDAwKS50b0ZpeGVkKDIpfSR7c3BhY2VyfUtCYDtcblx0fVxuXHRpZiAobiA8IDEwMDAgKiAxMDAwICogMTAwMCkge1xuXHRcdHJldHVybiBgJHtzaWdufSR7KG4gLyAxMDAwIC8gMTAwMCkudG9GaXhlZCgyKX0ke3NwYWNlcn1NQmA7XG5cdH1cblx0aWYgKG4gPCAxMDAwICogMTAwMCAqIDEwMDAgKiAxMDAwKSB7XG5cdFx0cmV0dXJuIGAke3NpZ259JHsobiAvIDEwMDAgLyAxMDAwIC8gMTAwMCkudG9GaXhlZCgyKX0ke3NwYWNlcn1HQmA7XG5cdH1cblx0dGhyb3cgbmV3IEVycm9yKFwiVG9vIGxhcmdlIGZpbGUgc2l6ZSEhIEFyZSB5b3Ugc3VyZT9cIik7XG59XG5cbmZ1bmN0aW9uIG1hcmtkb3duVGFibGUoXG5cdGRhdGE6IEFycmF5PENvbXBhcmVSZXN1bHQ+LFxuXHRyZWRUaHJlc2hvbGQ6IG51bWJlcixcbik6IHN0cmluZyB7XG5cdGNvbnN0IHJvd3MgPSBkYXRhXG5cdFx0Lm1hcCgoZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGAke2QubWV0YWZpbGV9IHwgJHtkLm91dGZpbGV9IHwgJHtyZW5kZXJTaXplKGQpfSB8ICR7cmVuZGVyTm90ZShcblx0XHRcdFx0ZCxcblx0XHRcdFx0cmVkVGhyZXNob2xkLFxuXHRcdFx0KX1cXG5gO1xuXHRcdH0pXG5cdFx0LmpvaW4oXCJcIik7XG5cblx0cmV0dXJuIGBcbk1ldGEgRmlsZSB8IE91dCBGaWxlICB8IFNpemUgKHJhdykgfCBOb3RlIFxuLS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tOnwtLS0tLS1cbiR7cm93c31gO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHRvcCBOIGxhcmdlc3Qgbm9kZXMgaW4gcm9vdCB0cmVlLlxuICogRGlnIG5vZGVzIHVudGlsIHRoZSBkZXB0aCBvZiAzLlxuICovXG5mdW5jdGlvbiBmaW5kTGFyZ2VEaXJlY3Rvcmllcyhyb290OiBUcmVlTWFwTm9kZSwgTjogbnVtYmVyKSB7XG5cdGNvbnN0IG5vZGVzOiBUcmVlTWFwTm9kZVtdID0gW107XG5cdGNvbnN0IHF1ZXVlOiBBcnJheTx7IG5vZGU6IFRyZWVNYXBOb2RlOyBkZXB0aDogbnVtYmVyIH0+ID0gW1xuXHRcdHsgbm9kZTogcm9vdCwgZGVwdGg6IDAgfSxcblx0XTtcblx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBzaGlmdCA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0aWYgKCFzaGlmdCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IHsgbm9kZSwgZGVwdGggfSA9IHNoaWZ0O1xuXHRcdGlmIChkZXB0aCA9PT0gMykge1xuXHRcdFx0bm9kZXMucHVzaChub2RlKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcblx0XHRcdG5vZGVzLnB1c2gobm9kZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBub2RlLmNoaWxkcmVuKSB7XG5cdFx0XHRcdHF1ZXVlLnB1c2goeyBub2RlOiBpdGVtLCBkZXB0aDogZGVwdGggKyAxIH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCBsYXJnZU5vZGVzID0gbm9kZXMuc29ydCgoYSwgYikgPT4gYi52YWx1ZSAtIGEudmFsdWUpLnNsaWNlKDAsIE4pO1xuXHRyZXR1cm4ge1xuXHRcdGxhcmdlTm9kZXMsXG5cdFx0aGFzT3RoZXI6IG5vZGVzLmxlbmd0aCA+IE4sXG5cdH07XG59XG5cbmZ1bmN0aW9uIGZpeGVkUGVyY2VudChuOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XG5cdHJldHVybiBOdW1iZXIucGFyc2VGbG9hdCgoKG4gLyBkKSAqIDEwMCkudG9GaXhlZCgxKSk7XG59XG5cbmZ1bmN0aW9uIGZpbGVTaXplVGFibGUoXG5cdGRhdGE6IEFycmF5PENvbXBhcmVSZXN1bHQ+LFxuXHR0b3BOTGFyZ2VzdFBhdGhzOiBudW1iZXIsXG4pOiBzdHJpbmcge1xuXHRpZiAoZGF0YS5sZW5ndGggPT09IDAgfHwgdG9wTkxhcmdlc3RQYXRocyA8PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0bGV0IG91dHB1dCA9IFwiXCI7XG5cdG91dHB1dCArPSBcIjxkZXRhaWxzPlxcblwiO1xuXHRvdXRwdXQgKz0gXCI8c3VtbWFyeT5MYXJnZXN0IHBhdGhzPC9zdW1tYXJ5PlxcblwiO1xuXHRvdXRwdXQgKz0gYFRoZXNlIHZpc3VhbGl6YXRpb24gc2hvd3MgdG9wICR7dG9wTkxhcmdlc3RQYXRoc30gbGFyZ2VzdCBwYXRocyBpbiB0aGUgYnVuZGxlLlxcbmA7XG5cdGZvciAoY29uc3QgZCBvZiBkYXRhKSB7XG5cdFx0b3V0cHV0ICs9IFwiXFxuXCI7XG5cdFx0b3V0cHV0ICs9IGAjIyBNZXRhIGZpbGU6ICR7ZC5tZXRhZmlsZX0sIE91dCBmaWxlOiAke2Qub3V0ZmlsZX1cXG5gO1xuXHRcdGlmICghZC50cmVlKSB7XG5cdFx0XHRvdXRwdXQgKz0gXCJcdUZFMEZcdUZFMEZcdUQ4M0RcdURERDFcdUZFMEZEZWxldGVkXFxuXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0b3V0cHV0ICs9IFwifCBQYXRoIHwgU2l6ZSB8XFxuXCI7XG5cdFx0b3V0cHV0ICs9IFwifC0tLS0tLXwtLS0tLS0tfFxcblwiO1xuXHRcdGNvbnN0IHRvdGFsU2l6ZSA9IGQudHJlZS52YWx1ZTtcblx0XHRjb25zdCB7IGxhcmdlTm9kZXMsIGhhc090aGVyIH0gPSBmaW5kTGFyZ2VEaXJlY3Rvcmllcyhcblx0XHRcdGQudHJlZSxcblx0XHRcdHRvcE5MYXJnZXN0UGF0aHMsXG5cdFx0KTtcblx0XHRmb3IgKGNvbnN0IHsgcGF0aCwgdmFsdWUgfSBvZiBsYXJnZU5vZGVzKSB7XG5cdFx0XHRjb25zdCBwZXJjZW50ID0gZml4ZWRQZXJjZW50KHZhbHVlLCB0b3RhbFNpemUpO1xuXHRcdFx0b3V0cHV0ICs9IGB8ICR7cGF0aH0gfCAke3JlbmRlckJhcihwZXJjZW50LCB2YWx1ZSl9IHxcXG5gO1xuXHRcdH1cblx0XHRpZiAoaGFzT3RoZXIpIHtcblx0XHRcdGNvbnN0IG90aGVyU2l6ZSA9IHRvdGFsU2l6ZSAtIGxhcmdlTm9kZXNbMF0udmFsdWU7XG5cdFx0XHRjb25zdCBvdGhlclBlcmNlbnQgPSBmaXhlZFBlcmNlbnQob3RoZXJTaXplLCB0b3RhbFNpemUpO1xuXHRcdFx0b3V0cHV0ICs9IGB8IChvdGhlcikgfCAke3JlbmRlckJhcihvdGhlclBlcmNlbnQsIG90aGVyU2l6ZSl9IHxcXG5gO1xuXHRcdH1cblx0fVxuXHRvdXRwdXQgKz0gXCI8L2RldGFpbHM+XFxuXCI7XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhcihwZXJjZW50OiBudW1iZXIsIGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuXHRjb25zdCBiYXIgPSBwcm9ncmVzcyhwZXJjZW50IC8gMTAwKTtcblx0cmV0dXJuIGBcXCR7e1xcXFxjb2xvcntHb2xkZW5yb2R9eyAke2Jhcn0gfX19XFwkICR7cGVyY2VudC50b0ZpeGVkKFxuXHRcdDEsXG5cdCl9JSwgJHtmaWxlc2l6ZShieXRlcyl9YDtcbn1cblxuLy8gQmxvY2sgcHJvZ3Jlc3Npb24gaXMgMS84ID0gMC4xMjVcbmNvbnN0IGJsb2NrcyA9IFtcIlwiLCBcIlx1MjU4RlwiLCBcIlx1MjU4RVwiLCBcIlx1MjU4RFwiLCBcIlx1MjU4Q1wiLCBcIlx1MjU4QlwiLCBcIlx1MjU4QVwiLCBcIlx1MjU4OVwiLCBcIlx1MjU4OFwiXTtcbmNvbnN0IHByb2dyZXNzaW9uID0gMSAvIChibG9ja3MubGVuZ3RoIC0gMSk7XG5mdW5jdGlvbiBwcm9ncmVzcyh2YWx1ZTogbnVtYmVyLCBsZW5ndGggPSAyNSwgdm1pbiA9IDAuMCwgdm1heCA9IDEuMCkge1xuXHRjb25zdCB2ID0gdmFsdWUgKiBsZW5ndGg7XG5cdGNvbnN0IGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcih2KTtcblx0Y29uc3QgZnJhY3Rpb25hbFBhcnQgPSB2IC0gaW50ZWdlclBhcnQ7XG5cdGNvbnN0IGkgPSBNYXRoLnJvdW5kKFxuXHRcdChwcm9ncmVzc2lvbiAqIE1hdGguZmxvb3IoZnJhY3Rpb25hbFBhcnQgLyBwcm9ncmVzc2lvbikpIC8gcHJvZ3Jlc3Npb24sXG5cdCk7XG5cdHJldHVybiBcIlx1MjU4OFwiLnJlcGVhdChpbnRlZ2VyUGFydCkgKyBibG9ja3NbaV07XG59XG5cbmZ1bmN0aW9uIHJlbmRlclNpemUoZDogQ29tcGFyZVJlc3VsdCk6IHN0cmluZyB7XG5cdHJldHVybiBmaWxlc2l6ZShkLmJ5dGVzKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTm90ZShkOiBDb21wYXJlUmVzdWx0LCByZWRUaHJlc2hvbGQ6IG51bWJlcik6IHN0cmluZyB7XG5cdGlmIChkLnJlbWFyayA9PT0gXCJkZWxldGVkXCIpIHtcblx0XHRyZXR1cm4gXCJcdUQ4M0RcdURERDFcdUZFMEYgRGVsZXRlZFwiO1xuXHR9XG5cdGlmIChkLnJlbWFyayA9PT0gXCJhZGRlZFwiKSB7XG5cdFx0cmV0dXJuIFwiXHVEODNDXHVERDk1IEFkZGVkXCI7XG5cdH1cblx0Y29uc3QgZGlmZiA9IGQuYnl0ZXMgLSBkLmJhc2VCeXRlcztcblx0aWYgKGRpZmYgIT09IDApIHtcblx0XHRjb25zdCBwZXJjZW50Q2hhbmdlID0gKGRpZmYgLyBkLmJhc2VCeXRlcykgKiAxMDA7XG5cdFx0cmV0dXJuIGAke3JlbmRlclN0YXR1c0luZGljYXRvcihwZXJjZW50Q2hhbmdlLCByZWRUaHJlc2hvbGQpfSR7ZmlsZXNpemUoXG5cdFx0XHRkaWZmLFxuXHRcdCl9ICgke3NpZ24ocGVyY2VudENoYW5nZSl9JHtwZXJjZW50Q2hhbmdlLnRvRml4ZWQoMSl9JSlgO1xuXHR9XG5cdHJldHVybiBcIlx1MjcwNSAgTm8gY2hhbmdlXCI7XG59XG5cbmZ1bmN0aW9uIHNpZ24obnVtOiBudW1iZXIpOiBzdHJpbmcge1xuXHRyZXR1cm4gbnVtIDwgMCA/IFwiXCIgOiBcIitcIjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3RhdHVzSW5kaWNhdG9yKFxuXHRwZXJjZW50Q2hhbmdlOiBudW1iZXIsXG5cdHJlZFRocmVzaG9sZDogbnVtYmVyLFxuKTogc3RyaW5nIHtcblx0bGV0IHJlczogc3RyaW5nO1xuXHRpZiAocGVyY2VudENoYW5nZSA+IDAgJiYgcGVyY2VudENoYW5nZSA8IHJlZFRocmVzaG9sZCkge1xuXHRcdHJlcyA9IFwiXHUyNkEwXHVGRTBGXCI7XG5cdH0gZWxzZSBpZiAocGVyY2VudENoYW5nZSA+PSByZWRUaHJlc2hvbGQpIHtcblx0XHRyZXMgPSBcIlx1MjAzQ1x1RkUwRlwiO1xuXHR9IGVsc2Uge1xuXHRcdHJlcyA9IFwiXHUyNzA1IFwiO1xuXHR9XG5cdHJldHVybiBgJHtyZXN9ICR7c2lnbihwZXJjZW50Q2hhbmdlKX1gO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuXG5pbXBvcnQgKiBhcyBjb25zb2xlIGZyb20gXCJub2RlOmNvbnNvbGVcIjtcbmltcG9ydCB7IGdsb2JTeW5jIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQsIFJlcG9ydCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2FkTWV0YUZpbGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0KGlucHV0OiBJbnB1dCk6IHZvaWQge1xuXHRjb25zdCBhbGxQYWdlU2l6ZXMgPSBnZXRBbGxQYWdlU2l6ZXMoaW5wdXQpO1xuXHRmcy5ta2RpclN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGlucHV0LmFuYWx5emVyRGlyZWN0b3J5KSwge1xuXHRcdHJlY3Vyc2l2ZTogdHJ1ZSxcblx0fSk7XG5cdGNvbnN0IHJlc3VsdEpzb25QYXRoID0gcGF0aC5qb2luKFxuXHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0aW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnksXG5cdFx0XCJidW5kbGVfYW5hbHlzaXMuanNvblwiLFxuXHQpO1xuXHRmcy53cml0ZUZpbGVTeW5jKHJlc3VsdEpzb25QYXRoLCBKU09OLnN0cmluZ2lmeShhbGxQYWdlU2l6ZXMsIG51bGwsIDIpKTtcblx0Y29uc29sZS5sb2coYFdyb3RlICR7cmVzdWx0SnNvblBhdGh9YCk7XG59XG5cbmludGVyZmFjZSBNZXRhZmlsZVBhdGgge1xuXHRyZWFkb25seSByZWxhdGl2ZVBhdGg6IHN0cmluZztcblx0cmVhZG9ubHkgYWJzb2x1dGVQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTWV0YWZpbGVzKGlucHV0OiBJbnB1dCk6IE1ldGFmaWxlUGF0aFtdIHtcblx0cmV0dXJuIGlucHV0Lm1ldGFmaWxlcy5mbGF0TWFwKChtZXRhZmlsZSkgPT4ge1xuXHRcdHJldHVybiBnbG9iU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbWV0YWZpbGUpLCB7XG5cdFx0XHRub2RpcjogdHJ1ZSxcblx0XHR9KS5tYXAoKG1ldGFGaWxlUGF0aCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIG1ldGFGaWxlUGF0aCksXG5cdFx0XHRcdGFic29sdXRlUGF0aDogbWV0YUZpbGVQYXRoLFxuXHRcdFx0fTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldEFsbFBhZ2VTaXplcyhpbnB1dDogSW5wdXQpOiBSZXBvcnQge1xuXHRjb25zdCBhY2M6IFJlcG9ydCA9IHt9O1xuXHRyZXR1cm4gZmluZE1ldGFmaWxlcyhpbnB1dCkucmVkdWNlKChhY2MsIHsgcmVsYXRpdmVQYXRoLCBhYnNvbHV0ZVBhdGggfSkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRmcy5hY2Nlc3NTeW5jKGFic29sdXRlUGF0aCwgZnMuY29uc3RhbnRzLlJfT0spO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0YE5vIG1ldGEgZmlsZSBmb3VuZCBhdCBcIiR7YWJzb2x1dGVQYXRofVwiIC0gYSBwYXRoIHRvIG1ldGEgZmlsZSBtYXkgYmUgd3JvbmcsIG9yIGVzYnVpbGQgaXMgbm90IGV4ZWN1dGVkLmAsXG5cdFx0XHQpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1ldGFGaWxlSnNvbiA9IGxvYWRNZXRhRmlsZShhYnNvbHV0ZVBhdGgpO1xuXHRcdE9iamVjdC5lbnRyaWVzKG1ldGFGaWxlSnNvbi5vdXRwdXRzKS5yZWR1Y2UoKGFjYywgb3V0cHV0KSA9PiB7XG5cdFx0XHRjb25zdCBbb3V0ZmlsZSwgYnVpbGRNZXRhXSA9IG91dHB1dDtcblx0XHRcdGlmIChcblx0XHRcdFx0IWlucHV0LmluY2x1ZGVFeHRlbnNpb25zLnNvbWUoKGV4dCkgPT5cblx0XHRcdFx0XHRvdXRmaWxlLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KSxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBhY2M7XG5cdFx0XHR9XG5cdFx0XHRhY2NbYCR7cmVsYXRpdmVQYXRofSAtPiAke291dGZpbGV9YF0gPSB7XG5cdFx0XHRcdGJ5dGVzOiBidWlsZE1ldGEuYnl0ZXMsXG5cdFx0XHRcdG1ldGFmaWxlOiByZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdG91dGZpbGUsXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIGFjYztcblx0XHR9LCBhY2MpO1xuXHRcdHJldHVybiBhY2M7XG5cdH0sIGFjYyk7XG59XG4iLCAiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5cbmltcG9ydCB0eXBlIHsgTWV0YWZpbGUgfSBmcm9tIFwiZXNidWlsZFwiO1xuaW1wb3J0IHR5cGUgeyBSZXBvcnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5mdW5jdGlvbiBsb2FkSnNvbkZpbGUocGF0aDogc3RyaW5nKSB7XG5cdHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoKS50b1N0cmluZyhcInV0Zi04XCIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNZXRhRmlsZShwYXRoOiBzdHJpbmcpOiBNZXRhZmlsZSB7XG5cdHJldHVybiBsb2FkSnNvbkZpbGUocGF0aCkgYXMgTWV0YWZpbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQW5hbHlzaXNKc29uKHBhdGg6IHN0cmluZyk6IFJlcG9ydCB7XG5cdHJldHVybiBsb2FkSnNvbkZpbGUocGF0aCkgYXMgUmVwb3J0O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvODFhNzNhYmE4YmVkZDUzMmY2ZWRkY2M0MWVkM2EwZmFkOGIxY2ZlYi9wYWNrYWdlcy9jb3JlL3NyYy9jb3JlLnRzI0wxMjZcbmV4cG9ydCBmdW5jdGlvbiBnZXRTaW5nbGVJbnB1dChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCB2YWwgPSBwcm9jZXNzLmVudltgSU5QVVRfJHtuYW1lLnRvVXBwZXJDYXNlKCl9YF0gfHwgXCJcIjtcblx0cmV0dXJuIHZhbC50cmltKCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxxQkFBcUI7OztBQ0E5QixPQUFPQSxTQUFRO0FBQ2YsT0FBT0MsV0FBVTs7O0FDRGpCLE9BQU9DLFNBQVE7QUFDZixPQUFPQyxXQUFVO0FBQ2pCLE9BQU9DLGNBQWE7QUFFcEIsWUFBWUMsY0FBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QixPQUFPO0FBQUEsTUFDeEIsZUFBZSxxQkFBcUIsS0FBSztBQUFBLE1BQ3pDO0FBQUEsSUFDRDtBQUFBLElBQ0Esb0JBQ0MsZUFBZSxvQkFBb0IsS0FBSyxpQkFDdkMsTUFBTSxHQUFHO0FBQUEsSUFDWDtBQUFBLElBQ0EsbUJBQW1CLGVBQWUsbUJBQW1CLEtBQUs7QUFBQSxJQUMxRCxXQUFXLGFBQWEsTUFBTSxHQUFHO0FBQUEsRUFDbEM7QUFDRDtBQUVPLFNBQVMsSUFBSSxRQUFlLFNBQVMsR0FBUztBQUNwRCxTQUFPLEtBQUs7QUFDWixVQUFRLEtBQUs7QUFDZDtBQUVBLElBQUksWUFBWSxRQUFRLGNBQWMsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU07QUFDNUQsTUFBSTtBQUNMOyIsCiAgIm5hbWVzIjogWyJmcyIsICJwYXRoIiwgImZzIiwgInBhdGgiLCAicHJvY2VzcyIsICJjb25zb2xlIiwgInBhdGgiLCAiZnMiLCAicGF0aCIsICJwcm9jZXNzIiwgImFjYyIsICJleHQiLCAicGF0aCIsICJmcyIsICJpbnB1dCIsICJjaGlsZCIsICJzaWduIl0KfQo= +${r.map(s=>`${s.metafile} | ${s.outfile} | ${Er(s)} | ${vr(s,t)} +`).join("")}`}function yr(r,t){let e=[],s=[{node:r,depth:0}];for(;s.length>0;){let n=s.shift();if(!n)break;let{node:o,depth:h}=n;if(h===3){e.push(o);continue}if(o.children.length===0)e.push(o);else for(let a of o.children)s.push({node:a,depth:h+1})}return{largeNodes:e.sort((n,o)=>o.value-n.value).slice(0,t),hasOther:e.length>t}}function As(r,t){return Number.parseFloat((r/t*100).toFixed(1))}function br(r,t){if(r.length===0||t<=0)return"";let e="";e+=`
+`,e+=`Largest paths +`,e+=`These visualization shows top ${t} largest paths in the bundle. +`;for(let s of r){if(e+=` +`,e+=`## Meta file: ${s.metafile}, Out file: ${s.outfile} +`,!s.tree){e+=`\uFE0F\uFE0F\u{1F5D1}\uFE0FDeleted +`;continue}e+=`| Path | Size | +`,e+=`|------|-------| +`;let i=s.tree.value,{largeNodes:n,hasOther:o}=yr(s.tree,t);for(let{path:h,value:a}of n){let l=As(a,i);e+=`| ${h} | ${Rs(l,a)} | +`}if(o){let h=i-n[0].value,a=As(h,i);e+=`| (other) | ${Rs(a,h)} | +`}}return e+=`
+`,e}function Rs(r,t){return`\${{\\color{Goldenrod}{ ${Sr(r/100)} }}}$ ${r.toFixed(1)}%, ${xe(t)}`}var Os=["","\u258F","\u258E","\u258D","\u258C","\u258B","\u258A","\u2589","\u2588"],Ee=1/(Os.length-1);function Sr(r,t=25,e=0,s=1){let i=r*t,n=Math.floor(i),o=i-n,h=Math.round(Ee*Math.floor(o/Ee)/Ee);return"\u2588".repeat(n)+Os[h]}function Er(r){return xe(r.bytes)}function vr(r,t){if(r.remark==="deleted")return"\u{1F5D1}\uFE0F Deleted";if(r.remark==="added")return"\u{1F195} Added";let e=r.bytes-r.baseBytes;if(e!==0){let s=e/r.baseBytes*100;return`${xr(s,t)}${xe(e)} (${Fs(s)}${s.toFixed(1)}%)`}return"\u2705 No change"}function Fs(r){return r<0?"":"+"}function xr(r,t){let e;return r>0&&r=t?e="\u203C\uFE0F":e="\u2705 ",`${e} ${Fs(r)}`}function Ar(){let r=Y("metafiles");if(!r)throw new Error("metafiles is not specified");let t=Y("name");if(!t)throw new Error("name is not specified");return{percentExtraAttention:Number.parseInt(Y("percent_extra_attention")||"20",10),showDetails:["true","True","TRUE"].includes(Y("show_details")||"true"),topNLargestPaths:Number.parseInt(Y("top_n_largest_paths")||"20",10),includeExtensions:(Y("include_extensions")||".js,.mjs,.cjs").split(","),name:t,analyzerDirectory:Y("analyze_directory")||".analyzer",metafiles:r.split(",")}}function Rr(r=Ar()){Ts(r),ks(r)}import.meta.url===Tr(process.argv[1]).href&&Rr();export{Rr as run}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb21wYXJlLnRzIiwgIi4uL3NyYy9yZXBvcnQudHMiLCAiLi4vc3JjL3V0aWxzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBjb21wYXJlIH0gZnJvbSBcIi4vY29tcGFyZVwiO1xuaW1wb3J0IHsgcmVwb3J0IH0gZnJvbSBcIi4vcmVwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGdldFNpbmdsZUlucHV0IH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZnVuY3Rpb24gZ2V0SW5wdXQoKTogSW5wdXQge1xuXHRjb25zdCByYXdNZXRhZmlsZXMgPSBnZXRTaW5nbGVJbnB1dChcIm1ldGFmaWxlc1wiKTtcblx0aWYgKCFyYXdNZXRhZmlsZXMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtZXRhZmlsZXMgaXMgbm90IHNwZWNpZmllZFwiKTtcblx0fVxuXHRjb25zdCBuYW1lID0gZ2V0U2luZ2xlSW5wdXQoXCJuYW1lXCIpO1xuXHRpZiAoIW5hbWUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGlzIG5vdCBzcGVjaWZpZWRcIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRwZXJjZW50RXh0cmFBdHRlbnRpb246IE51bWJlci5wYXJzZUludChcblx0XHRcdGdldFNpbmdsZUlucHV0KFwicGVyY2VudF9leHRyYV9hdHRlbnRpb25cIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRzaG93RGV0YWlsczogW1widHJ1ZVwiLCBcIlRydWVcIiwgXCJUUlVFXCJdLmluY2x1ZGVzKFxuXHRcdFx0Z2V0U2luZ2xlSW5wdXQoXCJzaG93X2RldGFpbHNcIikgfHwgXCJ0cnVlXCIsXG5cdFx0KSxcblx0XHR0b3BOTGFyZ2VzdFBhdGhzOiBOdW1iZXIucGFyc2VJbnQoXG5cdFx0XHRnZXRTaW5nbGVJbnB1dChcInRvcF9uX2xhcmdlc3RfcGF0aHNcIikgfHwgXCIyMFwiLFxuXHRcdFx0MTAsXG5cdFx0KSxcblx0XHRpbmNsdWRlRXh0ZW5zaW9uczogKFxuXHRcdFx0Z2V0U2luZ2xlSW5wdXQoXCJpbmNsdWRlX2V4dGVuc2lvbnNcIikgfHwgXCIuanMsLm1qcywuY2pzXCJcblx0XHQpLnNwbGl0KFwiLFwiKSxcblx0XHRuYW1lLFxuXHRcdGFuYWx5emVyRGlyZWN0b3J5OiBnZXRTaW5nbGVJbnB1dChcImFuYWx5emVfZGlyZWN0b3J5XCIpIHx8IFwiLmFuYWx5emVyXCIsXG5cdFx0bWV0YWZpbGVzOiByYXdNZXRhZmlsZXMuc3BsaXQoXCIsXCIpLFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuKGlucHV0OiBJbnB1dCA9IGdldElucHV0KCkpOiB2b2lkIHtcblx0cmVwb3J0KGlucHV0KTtcblx0Y29tcGFyZShpbnB1dCk7XG59XG5cbmlmIChpbXBvcnQubWV0YS51cmwgPT09IHBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5hcmd2WzFdKS5ocmVmKSB7XG5cdHJ1bigpO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmluZE1ldGFmaWxlcyB9IGZyb20gXCIuL3JlcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wYXJlUmVzdWx0LCBJbnB1dCwgUmVwb3J0LCBUcmVlTWFwTm9kZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2FkQW5hbHlzaXNKc29uLCBsb2FkTWV0YUZpbGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShpbnB1dDogSW5wdXQpOiB2b2lkIHtcblx0bGV0IGhhc0FueUNoYW5nZSA9IGZhbHNlO1xuXHRsZXQgb3V0cHV0ID0gYCMjIFx1RDgzRFx1RENFNiBlc2J1aWxkIEJ1bmRsZSBBbmFseXNpcyBmb3IgJHtpbnB1dC5uYW1lfVxuXG5UaGlzIGFuYWx5c2lzIHdhcyBnZW5lcmF0ZWQgYnkgW2VzYnVpbGQtYnVuZGxlLWFuYWx5emVyXShodHRwczovL2dpdGh1Yi5jb20vZXhvZWdvL2VzYnVpbGQtYnVuZGxlLWFuYWx5emVyKS4gXHVEODNFXHVERDE2XG5gO1xuXG5cdGNvbnN0IGN1cnJlbnQgPSBsb2FkQW5hbHlzaXNKc29uKFxuXHRcdHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSwgXCJidW5kbGVfYW5hbHlzaXMuanNvblwiKSxcblx0KTtcblx0Y29uc3QgYmFzZSA9IGxvYWRCYXNlQW5hbHlzaXNKc29uKGlucHV0KTtcblxuXHRjb25zdCBmaWxlVHJlZSA9IGJ1aWxkRmlsZVRyZWUoaW5wdXQpO1xuXG5cdGNvbnN0IGFsbE91dEZpbGVzOiBzdHJpbmdbXSA9IFtcblx0XHQuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhjdXJyZW50KSwgLi4uT2JqZWN0LmtleXMoYmFzZSldKSxcblx0XS5zb3J0KCk7XG5cblx0Y29uc3QgY29tcGFyaXNvbjogQXJyYXk8Q29tcGFyZVJlc3VsdD4gPSBhbGxPdXRGaWxlcy5tYXAoKG91dGZpbGUpID0+IHtcblx0XHRjb25zdCBjdXJyZW50U3RhdHMgPSBjdXJyZW50W291dGZpbGVdO1xuXHRcdGNvbnN0IGJhc2VTdGF0cyA9IGJhc2Vbb3V0ZmlsZV07XG5cblx0XHRpZiAoIWN1cnJlbnRTdGF0cykge1xuXHRcdFx0aGFzQW55Q2hhbmdlID0gdHJ1ZTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdC4uLmJhc2VTdGF0cyxcblx0XHRcdFx0YmFzZUJ5dGVzOiAtMSxcblx0XHRcdFx0cmVtYXJrOiBcImRlbGV0ZWRcIixcblx0XHRcdFx0dHJlZTogdW5kZWZpbmVkLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjb25zdCB0cmVlID0gZmlsZVRyZWUuZ2V0KFxuXHRcdFx0dHJlZUtleShjdXJyZW50U3RhdHMubWV0YWZpbGUsIGN1cnJlbnRTdGF0cy5vdXRmaWxlKSxcblx0XHQpO1xuXHRcdGlmICghYmFzZVN0YXRzKSB7XG5cdFx0XHRoYXNBbnlDaGFuZ2UgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHsgLi4uY3VycmVudFN0YXRzLCBiYXNlQnl0ZXM6IC0xLCByZW1hcms6IFwiYWRkZWRcIiwgdHJlZSB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRpZmYgPSBjdXJyZW50U3RhdHMuYnl0ZXMgLSBiYXNlU3RhdHMuYnl0ZXM7XG5cdFx0aWYgKGRpZmYgIT09IDApIHtcblx0XHRcdGhhc0FueUNoYW5nZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5jdXJyZW50U3RhdHMsXG5cdFx0XHRiYXNlQnl0ZXM6IGJhc2VTdGF0cy5ieXRlcyxcblx0XHRcdHRyZWUsXG5cdFx0XHRyZW1hcms6IE1hdGguc2lnbihkaWZmKSA/IFwiaW5jcmVhc2VkXCIgOiBcImRlY3JlYXNlZFwiLFxuXHRcdH07XG5cdH0pO1xuXG5cdGlmIChoYXNBbnlDaGFuZ2UpIHtcblx0XHRvdXRwdXQgKz0gbWFya2Rvd25UYWJsZShjb21wYXJpc29uLCBpbnB1dC5wZXJjZW50RXh0cmFBdHRlbnRpb24pO1xuXHRcdG91dHB1dCArPSBmaWxlU2l6ZVRhYmxlKGNvbXBhcmlzb24sIGlucHV0LnRvcE5MYXJnZXN0UGF0aHMpO1xuXHRcdG91dHB1dCArPSBkZXRhaWwoaW5wdXQpO1xuXHR9IGVsc2Uge1xuXHRcdG91dHB1dCArPSBcIlRoaXMgUFIgaW50cm9kdWNlZCBubyBjaGFuZ2VzIHRvIHRoZSBlc2J1aWxkIGJ1bmRsZSEgXHVEODNEXHVERTRDXCI7XG5cdH1cblxuXHQvLyB3ZSBhZGQgdGhpcyB0YWcgc28gdGhhdCBvdXIgYWN0aW9uIGNhbiBiZSBhYmxlIHRvIGVhc2lseSBhbmRcblx0Ly8gY29uc2lzdGVudGx5IGZpbmQgdGhlIHJpZ2h0IGNvbW1lbnQgdG8gZWRpdCBhcyBtb3JlIGNvbW1pdHMgYXJlIHB1c2hlZC5cblx0b3V0cHV0ICs9IGA8IS0tIF9fRVNCVUlMRF9CVU5ETEVfJHtpbnB1dC5uYW1lfSAtLT5gO1xuXG5cdHdyaXRlQ29tbWVudChpbnB1dCwgb3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gdHJlZUtleShtZXRhZmlsZTogc3RyaW5nLCBvdXRmaWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7bWV0YWZpbGV9IC0+ICR7b3V0ZmlsZX1gO1xufVxuXG4vLyBXcml0ZSB0aGUgb3V0cHV0IHRvIGEgZmlsZSB3aGljaCBpcyBsYXRlciByZWFkIGluXG4vLyBhcyBjb21tZW50IGNvbnRlbnRzIGJ5IHRoZSBhY3Rpb25zIHdvcmtmbG93LlxuZnVuY3Rpb24gd3JpdGVDb21tZW50KGlucHV0OiBJbnB1dCwgb3V0cHV0OiBzdHJpbmcpOiB2b2lkIHtcblx0ZnMubWtkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBpbnB1dC5hbmFseXplckRpcmVjdG9yeSksIHtcblx0XHRyZWN1cnNpdmU6IHRydWUsXG5cdH0pO1xuXHRmcy53cml0ZUZpbGVTeW5jKFxuXHRcdHBhdGguam9pbihcblx0XHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0XHRpbnB1dC5hbmFseXplckRpcmVjdG9yeSxcblx0XHRcdFwiYnVuZGxlX2FuYWx5c2lzX2NvbW1lbnQudHh0XCIsXG5cdFx0KSxcblx0XHRvdXRwdXQudHJpbSgpLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBkZXRhaWwoaW5wdXQ6IElucHV0KTogc3RyaW5nIHtcblx0aWYgKCFpbnB1dC5zaG93RGV0YWlscykge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHJldHVybiBgXFxuPGRldGFpbHM+XG48c3VtbWFyeT5EZXRhaWxzPC9zdW1tYXJ5PlxuPHA+TmV4dCB0byB0aGUgc2l6ZSBpcyBob3cgbXVjaCB0aGUgc2l6ZSBoYXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBjb21wYXJlZCB3aXRoIHRoZSBiYXNlIGJyYW5jaCBvZiB0aGlzIFBSLjwvcD5cbjx1bD5cbjxsaT5cdTIwM0NcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGJ5ICR7aW5wdXQucGVyY2VudEV4dHJhQXR0ZW50aW9ufSUgb3IgbW9yZS4gU3BlY2lhbCBhdHRlbnRpb24gc2hvdWxkIGJlIGdpdmVuIHRvIHRoaXMuPC9saT5cbjxsaT5cdTI2QTBcdUZFMEY6IFNpemUgaW5jcmVhc2VkIGluIGFjY2VwdGFibGUgcmFuZ2UgKGxvd2VyIHRoYW4gJHtpbnB1dC5wZXJjZW50RXh0cmFBdHRlbnRpb259JSkuPC9saT5cbjxsaT5cdTI3MDU6IE5vIGNoYW5nZSBvciBldmVuIGRvd25zaXplZC48L2xpPlxuPGxpPlx1RDgzRFx1REREMVx1RkUwRjogVGhlIG91dCBmaWxlIGlzIGRlbGV0ZWQ6IG5vdCBmb3VuZCBpbiBiYXNlIGJyYW5jaC48L2xpPlxuPGxpPlx1RDgzQ1x1REQ5NTogVGhlIG91dCBmaWxlIGlzIG5ld2x5IGZvdW5kOiB3aWxsIGJlIGFkZGVkIHRvIGJhc2UgYnJhbmNoLjwvbGk+XG48L3VsPlxuPC9kZXRhaWxzPlxcbmA7XG59XG5cbmZ1bmN0aW9uIGxvYWRCYXNlQW5hbHlzaXNKc29uKGlucHV0OiBJbnB1dCk6IFJlcG9ydCB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGxvYWRBbmFseXNpc0pzb24oXG5cdFx0XHRwYXRoLmpvaW4oXG5cdFx0XHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0XHRcdGlucHV0LmFuYWx5emVyRGlyZWN0b3J5LFxuXHRcdFx0XHRcImJhc2UvYnVuZGxlL2J1bmRsZV9hbmFseXNpcy5qc29uXCIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBFbXB0eSBpZiBubyBiYXNlIGFuYWx5c2lzIGZvdW5kLlxuXHRcdC8vIFRoaXMgaXMgYSBjYXNlIHdoZW4gYW5hbHl6ZXIgaXMgZmlyc3Qgc2V0IHVwIG9yIGFsbCBhcnRpZmFjdHMgYXJlIGV4cGlyZWQuXG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmlsZVRyZWUoaW5wdXQ6IElucHV0KSB7XG5cdGZ1bmN0aW9uIGJ1aWxkUm9vdChcblx0XHRpbnB1dDogUmVjb3JkPHN0cmluZywgeyBieXRlc0luT3V0cHV0OiBudW1iZXIgfT4sXG5cdCk6IFRyZWVNYXBOb2RlIHtcblx0XHRjb25zdCByb290OiBUcmVlTWFwTm9kZSA9IHsgbmFtZTogXCJcIiwgcGF0aDogXCJcIiwgdmFsdWU6IDAsIGNoaWxkcmVuOiBbXSB9O1xuXHRcdGZvciAoY29uc3QgW2ZpbGVQYXRoLCB7IGJ5dGVzSW5PdXRwdXQgfV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG5cdFx0XHRjb25zdCBkaXJlY3RvcmllcyA9IGZpbGVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGJ1aWxkTm9kZShyb290LCBkaXJlY3RvcmllcywgYnl0ZXNJbk91dHB1dCk7XG5cdFx0fVxuXHRcdHJldHVybiByb290O1xuXHR9XG5cblx0ZnVuY3Rpb24gYnVpbGROb2RlKFxuXHRcdG5vZGU6IFRyZWVNYXBOb2RlLFxuXHRcdHBhdGhzOiBBcnJheTxzdHJpbmc+LFxuXHRcdHZhbHVlOiBudW1iZXIsXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0ID0gcGF0aHMuc2hpZnQoKTtcblx0XHRpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gbGVhZiBub2RlIChmaWxlKVxuXHRcdFx0bm9kZS52YWx1ZSArPSB2YWx1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGNoaWxkID0gbm9kZS5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PT0gZmlyc3QpO1xuXHRcdGlmICghY2hpbGQpIHtcblx0XHRcdGNoaWxkID0ge1xuXHRcdFx0XHRuYW1lOiBmaXJzdCxcblx0XHRcdFx0cGF0aDogYCR7bm9kZS5wYXRofS8ke2ZpcnN0fWAucmVwbGFjZSgvXlxcLy8sIFwiXCIpLFxuXHRcdFx0XHR2YWx1ZTogMCxcblx0XHRcdFx0Y2hpbGRyZW46IFtdLFxuXHRcdFx0fTtcblx0XHRcdG5vZGUuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cdFx0fVxuXHRcdG5vZGUudmFsdWUgKz0gdmFsdWU7XG5cdFx0YnVpbGROb2RlKGNoaWxkLCBwYXRocywgdmFsdWUpO1xuXHR9XG5cblx0Y29uc3QgdHJlZXMgPSBuZXcgTWFwPHN0cmluZywgVHJlZU1hcE5vZGU+KCk7XG5cdGlmIChpbnB1dC50b3BOTGFyZ2VzdFBhdGhzIDw9IDApIHtcblx0XHQvLyBTa2lwIGJ1aWxkaW5nIHRyZWUgaWYgd2UgZG9uJ3QgbmVlZCBpdC5cblx0XHRyZXR1cm4gdHJlZXM7XG5cdH1cblx0Zm9yIChjb25zdCB7IHJlbGF0aXZlUGF0aCwgYWJzb2x1dGVQYXRoIH0gb2YgZmluZE1ldGFmaWxlcyhpbnB1dCkpIHtcblx0XHRjb25zdCBtZXRhZmlsZUpzb24gPSBsb2FkTWV0YUZpbGUoYWJzb2x1dGVQYXRoKTtcblx0XHRmb3IgKGNvbnN0IFtvdXRmaWxlLCBidWlsZE1ldGFdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFmaWxlSnNvbi5vdXRwdXRzKSkge1xuXHRcdFx0Y29uc3QgdHJlZSA9IGJ1aWxkUm9vdChidWlsZE1ldGEuaW5wdXRzKTtcblx0XHRcdHRyZWVzLnNldCh0cmVlS2V5KHJlbGF0aXZlUGF0aCwgb3V0ZmlsZSksIHRyZWUpO1xuXG5cdFx0XHRmcy53cml0ZUZpbGVTeW5jKFxuXHRcdFx0XHRwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgaW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnksIFwidHJlZS5qc29uXCIpLFxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeSh0cmVlLCBudWxsLCAyKSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cmVlcztcbn1cblxuY29uc3Qgc3BhY2VyID0gXCJcdTAwQTBcIjtcbmZ1bmN0aW9uIGZpbGVzaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuXHRjb25zdCBzaWduID0gYnl0ZXMgPCAwID8gXCItXCIgOiBcIlwiO1xuXHRjb25zdCBuID0gTWF0aC5hYnMoYnl0ZXMpO1xuXHRpZiAobiA8IDEwMDApIHtcblx0XHRyZXR1cm4gYCR7c2lnbn0ke259JHtzcGFjZXJ9QmA7XG5cdH1cblx0aWYgKG4gPCAxMDAwICogMTAwMCkge1xuXHRcdHJldHVybiBgJHtzaWdufSR7KG4gLyAxMDAwKS50b0ZpeGVkKDIpfSR7c3BhY2VyfUtCYDtcblx0fVxuXHRpZiAobiA8IDEwMDAgKiAxMDAwICogMTAwMCkge1xuXHRcdHJldHVybiBgJHtzaWdufSR7KG4gLyAxMDAwIC8gMTAwMCkudG9GaXhlZCgyKX0ke3NwYWNlcn1NQmA7XG5cdH1cblx0aWYgKG4gPCAxMDAwICogMTAwMCAqIDEwMDAgKiAxMDAwKSB7XG5cdFx0cmV0dXJuIGAke3NpZ259JHsobiAvIDEwMDAgLyAxMDAwIC8gMTAwMCkudG9GaXhlZCgyKX0ke3NwYWNlcn1HQmA7XG5cdH1cblx0dGhyb3cgbmV3IEVycm9yKFwiVG9vIGxhcmdlIGZpbGUgc2l6ZSEhIEFyZSB5b3Ugc3VyZT9cIik7XG59XG5cbmZ1bmN0aW9uIG1hcmtkb3duVGFibGUoXG5cdGRhdGE6IEFycmF5PENvbXBhcmVSZXN1bHQ+LFxuXHRyZWRUaHJlc2hvbGQ6IG51bWJlcixcbik6IHN0cmluZyB7XG5cdGNvbnN0IHJvd3MgPSBkYXRhXG5cdFx0Lm1hcCgoZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGAke2QubWV0YWZpbGV9IHwgJHtkLm91dGZpbGV9IHwgJHtyZW5kZXJTaXplKGQpfSB8ICR7cmVuZGVyTm90ZShcblx0XHRcdFx0ZCxcblx0XHRcdFx0cmVkVGhyZXNob2xkLFxuXHRcdFx0KX1cXG5gO1xuXHRcdH0pXG5cdFx0LmpvaW4oXCJcIik7XG5cblx0cmV0dXJuIGBcbk1ldGEgRmlsZSB8IE91dCBGaWxlICB8IFNpemUgKHJhdykgfCBOb3RlIFxuLS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tOnwtLS0tLS1cbiR7cm93c31gO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHRvcCBOIGxhcmdlc3Qgbm9kZXMgaW4gcm9vdCB0cmVlLlxuICogRGlnIG5vZGVzIHVudGlsIHRoZSBkZXB0aCBvZiAzLlxuICovXG5mdW5jdGlvbiBmaW5kTGFyZ2VEaXJlY3Rvcmllcyhyb290OiBUcmVlTWFwTm9kZSwgTjogbnVtYmVyKSB7XG5cdGNvbnN0IG5vZGVzOiBUcmVlTWFwTm9kZVtdID0gW107XG5cdGNvbnN0IHF1ZXVlOiBBcnJheTx7IG5vZGU6IFRyZWVNYXBOb2RlOyBkZXB0aDogbnVtYmVyIH0+ID0gW1xuXHRcdHsgbm9kZTogcm9vdCwgZGVwdGg6IDAgfSxcblx0XTtcblx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBzaGlmdCA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0aWYgKCFzaGlmdCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IHsgbm9kZSwgZGVwdGggfSA9IHNoaWZ0O1xuXHRcdGlmIChkZXB0aCA9PT0gMykge1xuXHRcdFx0bm9kZXMucHVzaChub2RlKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcblx0XHRcdG5vZGVzLnB1c2gobm9kZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBub2RlLmNoaWxkcmVuKSB7XG5cdFx0XHRcdHF1ZXVlLnB1c2goeyBub2RlOiBpdGVtLCBkZXB0aDogZGVwdGggKyAxIH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCBsYXJnZU5vZGVzID0gbm9kZXMuc29ydCgoYSwgYikgPT4gYi52YWx1ZSAtIGEudmFsdWUpLnNsaWNlKDAsIE4pO1xuXHRyZXR1cm4ge1xuXHRcdGxhcmdlTm9kZXMsXG5cdFx0aGFzT3RoZXI6IG5vZGVzLmxlbmd0aCA+IE4sXG5cdH07XG59XG5cbmZ1bmN0aW9uIGZpeGVkUGVyY2VudChuOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XG5cdHJldHVybiBOdW1iZXIucGFyc2VGbG9hdCgoKG4gLyBkKSAqIDEwMCkudG9GaXhlZCgxKSk7XG59XG5cbmZ1bmN0aW9uIGZpbGVTaXplVGFibGUoXG5cdGRhdGE6IEFycmF5PENvbXBhcmVSZXN1bHQ+LFxuXHR0b3BOTGFyZ2VzdFBhdGhzOiBudW1iZXIsXG4pOiBzdHJpbmcge1xuXHRpZiAoZGF0YS5sZW5ndGggPT09IDAgfHwgdG9wTkxhcmdlc3RQYXRocyA8PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0bGV0IG91dHB1dCA9IFwiXCI7XG5cdG91dHB1dCArPSBcIjxkZXRhaWxzPlxcblwiO1xuXHRvdXRwdXQgKz0gXCI8c3VtbWFyeT5MYXJnZXN0IHBhdGhzPC9zdW1tYXJ5PlxcblwiO1xuXHRvdXRwdXQgKz0gYFRoZXNlIHZpc3VhbGl6YXRpb24gc2hvd3MgdG9wICR7dG9wTkxhcmdlc3RQYXRoc30gbGFyZ2VzdCBwYXRocyBpbiB0aGUgYnVuZGxlLlxcbmA7XG5cdGZvciAoY29uc3QgZCBvZiBkYXRhKSB7XG5cdFx0b3V0cHV0ICs9IFwiXFxuXCI7XG5cdFx0b3V0cHV0ICs9IGAjIyBNZXRhIGZpbGU6ICR7ZC5tZXRhZmlsZX0sIE91dCBmaWxlOiAke2Qub3V0ZmlsZX1cXG5gO1xuXHRcdGlmICghZC50cmVlKSB7XG5cdFx0XHRvdXRwdXQgKz0gXCJcdUZFMEZcdUZFMEZcdUQ4M0RcdURERDFcdUZFMEZEZWxldGVkXFxuXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0b3V0cHV0ICs9IFwifCBQYXRoIHwgU2l6ZSB8XFxuXCI7XG5cdFx0b3V0cHV0ICs9IFwifC0tLS0tLXwtLS0tLS0tfFxcblwiO1xuXHRcdGNvbnN0IHRvdGFsU2l6ZSA9IGQudHJlZS52YWx1ZTtcblx0XHRjb25zdCB7IGxhcmdlTm9kZXMsIGhhc090aGVyIH0gPSBmaW5kTGFyZ2VEaXJlY3Rvcmllcyhcblx0XHRcdGQudHJlZSxcblx0XHRcdHRvcE5MYXJnZXN0UGF0aHMsXG5cdFx0KTtcblx0XHRmb3IgKGNvbnN0IHsgcGF0aCwgdmFsdWUgfSBvZiBsYXJnZU5vZGVzKSB7XG5cdFx0XHRjb25zdCBwZXJjZW50ID0gZml4ZWRQZXJjZW50KHZhbHVlLCB0b3RhbFNpemUpO1xuXHRcdFx0b3V0cHV0ICs9IGB8ICR7cGF0aH0gfCAke3JlbmRlckJhcihwZXJjZW50LCB2YWx1ZSl9IHxcXG5gO1xuXHRcdH1cblx0XHRpZiAoaGFzT3RoZXIpIHtcblx0XHRcdGNvbnN0IG90aGVyU2l6ZSA9IHRvdGFsU2l6ZSAtIGxhcmdlTm9kZXNbMF0udmFsdWU7XG5cdFx0XHRjb25zdCBvdGhlclBlcmNlbnQgPSBmaXhlZFBlcmNlbnQob3RoZXJTaXplLCB0b3RhbFNpemUpO1xuXHRcdFx0b3V0cHV0ICs9IGB8IChvdGhlcikgfCAke3JlbmRlckJhcihvdGhlclBlcmNlbnQsIG90aGVyU2l6ZSl9IHxcXG5gO1xuXHRcdH1cblx0fVxuXHRvdXRwdXQgKz0gXCI8L2RldGFpbHM+XFxuXCI7XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhcihwZXJjZW50OiBudW1iZXIsIGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuXHRjb25zdCBiYXIgPSBwcm9ncmVzcyhwZXJjZW50IC8gMTAwKTtcblx0cmV0dXJuIGBcXCR7e1xcXFxjb2xvcntHb2xkZW5yb2R9eyAke2Jhcn0gfX19XFwkICR7cGVyY2VudC50b0ZpeGVkKFxuXHRcdDEsXG5cdCl9JSwgJHtmaWxlc2l6ZShieXRlcyl9YDtcbn1cblxuLy8gQmxvY2sgcHJvZ3Jlc3Npb24gaXMgMS84ID0gMC4xMjVcbmNvbnN0IGJsb2NrcyA9IFtcIlwiLCBcIlx1MjU4RlwiLCBcIlx1MjU4RVwiLCBcIlx1MjU4RFwiLCBcIlx1MjU4Q1wiLCBcIlx1MjU4QlwiLCBcIlx1MjU4QVwiLCBcIlx1MjU4OVwiLCBcIlx1MjU4OFwiXTtcbmNvbnN0IHByb2dyZXNzaW9uID0gMSAvIChibG9ja3MubGVuZ3RoIC0gMSk7XG5mdW5jdGlvbiBwcm9ncmVzcyh2YWx1ZTogbnVtYmVyLCBsZW5ndGggPSAyNSwgdm1pbiA9IDAuMCwgdm1heCA9IDEuMCkge1xuXHRjb25zdCB2ID0gdmFsdWUgKiBsZW5ndGg7XG5cdGNvbnN0IGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcih2KTtcblx0Y29uc3QgZnJhY3Rpb25hbFBhcnQgPSB2IC0gaW50ZWdlclBhcnQ7XG5cdGNvbnN0IGkgPSBNYXRoLnJvdW5kKFxuXHRcdChwcm9ncmVzc2lvbiAqIE1hdGguZmxvb3IoZnJhY3Rpb25hbFBhcnQgLyBwcm9ncmVzc2lvbikpIC8gcHJvZ3Jlc3Npb24sXG5cdCk7XG5cdHJldHVybiBcIlx1MjU4OFwiLnJlcGVhdChpbnRlZ2VyUGFydCkgKyBibG9ja3NbaV07XG59XG5cbmZ1bmN0aW9uIHJlbmRlclNpemUoZDogQ29tcGFyZVJlc3VsdCk6IHN0cmluZyB7XG5cdHJldHVybiBmaWxlc2l6ZShkLmJ5dGVzKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTm90ZShkOiBDb21wYXJlUmVzdWx0LCByZWRUaHJlc2hvbGQ6IG51bWJlcik6IHN0cmluZyB7XG5cdGlmIChkLnJlbWFyayA9PT0gXCJkZWxldGVkXCIpIHtcblx0XHRyZXR1cm4gXCJcdUQ4M0RcdURERDFcdUZFMEYgRGVsZXRlZFwiO1xuXHR9XG5cdGlmIChkLnJlbWFyayA9PT0gXCJhZGRlZFwiKSB7XG5cdFx0cmV0dXJuIFwiXHVEODNDXHVERDk1IEFkZGVkXCI7XG5cdH1cblx0Y29uc3QgZGlmZiA9IGQuYnl0ZXMgLSBkLmJhc2VCeXRlcztcblx0aWYgKGRpZmYgIT09IDApIHtcblx0XHRjb25zdCBwZXJjZW50Q2hhbmdlID0gKGRpZmYgLyBkLmJhc2VCeXRlcykgKiAxMDA7XG5cdFx0cmV0dXJuIGAke3JlbmRlclN0YXR1c0luZGljYXRvcihwZXJjZW50Q2hhbmdlLCByZWRUaHJlc2hvbGQpfSR7ZmlsZXNpemUoXG5cdFx0XHRkaWZmLFxuXHRcdCl9ICgke3NpZ24ocGVyY2VudENoYW5nZSl9JHtwZXJjZW50Q2hhbmdlLnRvRml4ZWQoMSl9JSlgO1xuXHR9XG5cdHJldHVybiBcIlx1MjcwNSAgTm8gY2hhbmdlXCI7XG59XG5cbmZ1bmN0aW9uIHNpZ24obnVtOiBudW1iZXIpOiBzdHJpbmcge1xuXHRyZXR1cm4gbnVtIDwgMCA/IFwiXCIgOiBcIitcIjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3RhdHVzSW5kaWNhdG9yKFxuXHRwZXJjZW50Q2hhbmdlOiBudW1iZXIsXG5cdHJlZFRocmVzaG9sZDogbnVtYmVyLFxuKTogc3RyaW5nIHtcblx0bGV0IHJlczogc3RyaW5nO1xuXHRpZiAocGVyY2VudENoYW5nZSA+IDAgJiYgcGVyY2VudENoYW5nZSA8IHJlZFRocmVzaG9sZCkge1xuXHRcdHJlcyA9IFwiXHUyNkEwXHVGRTBGXCI7XG5cdH0gZWxzZSBpZiAocGVyY2VudENoYW5nZSA+PSByZWRUaHJlc2hvbGQpIHtcblx0XHRyZXMgPSBcIlx1MjAzQ1x1RkUwRlwiO1xuXHR9IGVsc2Uge1xuXHRcdHJlcyA9IFwiXHUyNzA1IFwiO1xuXHR9XG5cdHJldHVybiBgJHtyZXN9ICR7c2lnbihwZXJjZW50Q2hhbmdlKX1gO1xufVxuIiwgImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuXG5pbXBvcnQgKiBhcyBjb25zb2xlIGZyb20gXCJub2RlOmNvbnNvbGVcIjtcbmltcG9ydCB7IGdsb2JTeW5jIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQsIFJlcG9ydCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBsb2FkTWV0YUZpbGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0KGlucHV0OiBJbnB1dCk6IHZvaWQge1xuXHRjb25zdCBhbGxQYWdlU2l6ZXMgPSBnZXRBbGxQYWdlU2l6ZXMoaW5wdXQpO1xuXHRmcy5ta2RpclN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGlucHV0LmFuYWx5emVyRGlyZWN0b3J5KSwge1xuXHRcdHJlY3Vyc2l2ZTogdHJ1ZSxcblx0fSk7XG5cdGNvbnN0IHJlc3VsdEpzb25QYXRoID0gcGF0aC5qb2luKFxuXHRcdHByb2Nlc3MuY3dkKCksXG5cdFx0aW5wdXQuYW5hbHl6ZXJEaXJlY3RvcnksXG5cdFx0XCJidW5kbGVfYW5hbHlzaXMuanNvblwiLFxuXHQpO1xuXHRmcy53cml0ZUZpbGVTeW5jKHJlc3VsdEpzb25QYXRoLCBKU09OLnN0cmluZ2lmeShhbGxQYWdlU2l6ZXMsIG51bGwsIDIpKTtcblx0Y29uc29sZS5sb2coYFdyb3RlICR7cmVzdWx0SnNvblBhdGh9YCk7XG59XG5cbmludGVyZmFjZSBNZXRhZmlsZVBhdGgge1xuXHRyZWFkb25seSByZWxhdGl2ZVBhdGg6IHN0cmluZztcblx0cmVhZG9ubHkgYWJzb2x1dGVQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTWV0YWZpbGVzKGlucHV0OiBJbnB1dCk6IE1ldGFmaWxlUGF0aFtdIHtcblx0cmV0dXJuIGlucHV0Lm1ldGFmaWxlcy5mbGF0TWFwKChtZXRhZmlsZSkgPT4ge1xuXHRcdHJldHVybiBnbG9iU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbWV0YWZpbGUpLCB7XG5cdFx0XHRub2RpcjogdHJ1ZSxcblx0XHR9KS5tYXAoKG1ldGFGaWxlUGF0aCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIG1ldGFGaWxlUGF0aCksXG5cdFx0XHRcdGFic29sdXRlUGF0aDogbWV0YUZpbGVQYXRoLFxuXHRcdFx0fTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldEFsbFBhZ2VTaXplcyhpbnB1dDogSW5wdXQpOiBSZXBvcnQge1xuXHRjb25zdCBhY2M6IFJlcG9ydCA9IHt9O1xuXHRyZXR1cm4gZmluZE1ldGFmaWxlcyhpbnB1dCkucmVkdWNlKChhY2MsIHsgcmVsYXRpdmVQYXRoLCBhYnNvbHV0ZVBhdGggfSkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRmcy5hY2Nlc3NTeW5jKGFic29sdXRlUGF0aCwgZnMuY29uc3RhbnRzLlJfT0spO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0YE5vIG1ldGEgZmlsZSBmb3VuZCBhdCBcIiR7YWJzb2x1dGVQYXRofVwiIC0gYSBwYXRoIHRvIG1ldGEgZmlsZSBtYXkgYmUgd3JvbmcsIG9yIGVzYnVpbGQgaXMgbm90IGV4ZWN1dGVkLmAsXG5cdFx0XHQpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1ldGFGaWxlSnNvbiA9IGxvYWRNZXRhRmlsZShhYnNvbHV0ZVBhdGgpO1xuXHRcdE9iamVjdC5lbnRyaWVzKG1ldGFGaWxlSnNvbi5vdXRwdXRzKS5yZWR1Y2UoKGFjYywgb3V0cHV0KSA9PiB7XG5cdFx0XHRjb25zdCBbb3V0ZmlsZSwgYnVpbGRNZXRhXSA9IG91dHB1dDtcblx0XHRcdGlmIChcblx0XHRcdFx0IWlucHV0LmluY2x1ZGVFeHRlbnNpb25zLnNvbWUoKGV4dCkgPT5cblx0XHRcdFx0XHRvdXRmaWxlLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KSxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBhY2M7XG5cdFx0XHR9XG5cdFx0XHRhY2NbYCR7cmVsYXRpdmVQYXRofSAtPiAke291dGZpbGV9YF0gPSB7XG5cdFx0XHRcdGJ5dGVzOiBidWlsZE1ldGEuYnl0ZXMsXG5cdFx0XHRcdG1ldGFmaWxlOiByZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdG91dGZpbGUsXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIGFjYztcblx0XHR9LCBhY2MpO1xuXHRcdHJldHVybiBhY2M7XG5cdH0sIGFjYyk7XG59XG4iLCAiaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5cbmltcG9ydCB0eXBlIHsgTWV0YWZpbGUgfSBmcm9tIFwiZXNidWlsZFwiO1xuaW1wb3J0IHR5cGUgeyBSZXBvcnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5mdW5jdGlvbiBsb2FkSnNvbkZpbGUocGF0aDogc3RyaW5nKSB7XG5cdHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoKS50b1N0cmluZyhcInV0Zi04XCIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNZXRhRmlsZShwYXRoOiBzdHJpbmcpOiBNZXRhZmlsZSB7XG5cdHJldHVybiBsb2FkSnNvbkZpbGUocGF0aCkgYXMgTWV0YWZpbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQW5hbHlzaXNKc29uKHBhdGg6IHN0cmluZyk6IFJlcG9ydCB7XG5cdHJldHVybiBsb2FkSnNvbkZpbGUocGF0aCkgYXMgUmVwb3J0O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy90b29sa2l0L2Jsb2IvODFhNzNhYmE4YmVkZDUzMmY2ZWRkY2M0MWVkM2EwZmFkOGIxY2ZlYi9wYWNrYWdlcy9jb3JlL3NyYy9jb3JlLnRzI0wxMjZcbmV4cG9ydCBmdW5jdGlvbiBnZXRTaW5nbGVJbnB1dChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCB2YWwgPSBwcm9jZXNzLmVudltgSU5QVVRfJHtuYW1lLnRvVXBwZXJDYXNlKCl9YF0gfHwgXCJcIjtcblx0cmV0dXJuIHZhbC50cmltKCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAic3NHQUFBLE9BQVMsaUJBQUFBLE9BQXFCLFdDQTlCLE9BQU9DLE9BQVEsVUFDZixPQUFPQyxPQUFVLFlDRGpCLE9BQU9DLE9BQVEsVUFDZixPQUFPQyxPQUFVLFlBQ2pCLE9BQU9DLE9BQWEsZUFFcEIsVUFBWUMsT0FBYTs7NDAyRENKekIsT0FBT0MsT0FBUSxVQUtmLFNBQVNDLEdBQWFDLEVBQWMsQ0FDbkMsT0FBTyxLQUFLLE1BQU1GLEdBQUcsYUFBYUUsQ0FBSSxFQUFFLFNBQVMsT0FBTyxDQUFDLENBQzFELENBRU8sU0FBU0MsR0FBYUQsRUFBd0IsQ0FDcEQsT0FBT0Qs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Q3JDQSxFQUFlLGNBQWMsR0FBSyxNQUNuQyxFQUNBLGlCQUFrQixPQUFPLFNBQ3hCQSxFQUFlLHFCQUFxQixHQUFLLEtBQ3pDLEVBQ0QsRUFDQSxtQkFDQ0EsRUFBZSxvQkFBb0IsR0FBSyxpQkFDdkMsTUFBTSxHQUFHLEVBQ1gsS0FBQUMsRUFDQSxrQkFBbUJELEVBQWUsbUJBQW1CLEdBQUssWUFDMUQsVUFBV0QsRUFBYSxNQUFNLEdBQUcsQ0FDbEMsQ0FDRCxDQUVPLFNBQVNHLEdBQUlDLEVBQWVMLEdBQVMsRUFBUyxDQUNwRE0sR0FBT0QsQ0FBSyxFQUNaRSxHQUFRRixDQUFLLENBQ2QsQ0FFSSxZQUFZLE1BQVFHLEdBQWMsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQ3RESixHQUFJIiwKICAibmFtZXMiOiBbInBhdGhUb0ZpbGVVUkwiLCAiZnMiLCAicGF0aCIsICJmcyIsICJwYXRoIiwgInByb2Nlc3MiLCAiY29uc29sZSIsICJmcyIsICJsb2FkSnNvbkZpbGUiLCAicGF0aCIsICJsb2FkTWV0YUZpbGUiLCAibG9hZEFuYWx5c2lzSnNvbiIsICJnZXRTaW5nbGVJbnB1dCIsICJuYW1lIiwgInJlcG9ydCIsICJpbnB1dCIsICJhbGxQYWdlU2l6ZXMiLCAiZ2V0QWxsUGFnZVNpemVzIiwgImZzIiwgInBhdGgiLCAicHJvY2VzcyIsICJyZXN1bHRKc29uUGF0aCIsICJmaW5kTWV0YWZpbGVzIiwgIm1ldGFmaWxlIiwgImdsb2JTeW5jIiwgIm1ldGFGaWxlUGF0aCIsICJhY2MiLCAicmVsYXRpdmVQYXRoIiwgImFic29sdXRlUGF0aCIsICJtZXRhRmlsZUpzb24iLCAibG9hZE1ldGFGaWxlIiwgIm91dHB1dCIsICJvdXRmaWxlIiwgImJ1aWxkTWV0YSIsICJleHQiLCAiY29tcGFyZSIsICJpbnB1dCIsICJoYXNBbnlDaGFuZ2UiLCAib3V0cHV0IiwgImN1cnJlbnQiLCAibG9hZEFuYWx5c2lzSnNvbiIsICJwYXRoIiwgImJhc2UiLCAibG9hZEJhc2VBbmFseXNpc0pzb24iLCAiZmlsZVRyZWUiLCAiYnVpbGRGaWxlVHJlZSIsICJjb21wYXJpc29uIiwgIm91dGZpbGUiLCAiY3VycmVudFN0YXRzIiwgImJhc2VTdGF0cyIsICJ0cmVlIiwgInRyZWVLZXkiLCAiZGlmZiIsICJtYXJrZG93blRhYmxlIiwgImZpbGVTaXplVGFibGUiLCAiZGV0YWlsIiwgIndyaXRlQ29tbWVudCIsICJtZXRhZmlsZSIsICJmcyIsICJidWlsZFJvb3QiLCAicm9vdCIsICJmaWxlUGF0aCIsICJieXRlc0luT3V0cHV0IiwgImRpcmVjdG9yaWVzIiwgImJ1aWxkTm9kZSIsICJub2RlIiwgInBhdGhzIiwgInZhbHVlIiwgImZpcnN0IiwgImNoaWxkIiwgInRyZWVzIiwgInJlbGF0aXZlUGF0aCIsICJhYnNvbHV0ZVBhdGgiLCAiZmluZE1ldGFmaWxlcyIsICJtZXRhZmlsZUpzb24iLCAibG9hZE1ldGFGaWxlIiwgImJ1aWxkTWV0YSIsICJzcGFjZXIiLCAiZmlsZXNpemUiLCAiYnl0ZXMiLCAic2lnbiIsICJuIiwgImRhdGEiLCAicmVkVGhyZXNob2xkIiwgImQiLCAicmVuZGVyU2l6ZSIsICJyZW5kZXJOb3RlIiwgImZpbmRMYXJnZURpcmVjdG9yaWVzIiwgIk4iLCAibm9kZXMiLCAicXVldWUiLCAic2hpZnQiLCAiZGVwdGgiLCAiaXRlbSIsICJhIiwgImIiLCAiZml4ZWRQZXJjZW50IiwgInRvcE5MYXJnZXN0UGF0aHMiLCAidG90YWxTaXplIiwgImxhcmdlTm9kZXMiLCAiaGFzT3RoZXIiLCAicGVyY2VudCIsICJyZW5kZXJCYXIiLCAib3RoZXJTaXplIiwgIm90aGVyUGVyY2VudCIsICJwcm9ncmVzcyIsICJibG9ja3MiLCAicHJvZ3Jlc3Npb24iLCAibGVuZ3RoIiwgInZtaW4iLCAidm1heCIsICJ2IiwgImludGVnZXJQYXJ0IiwgImZyYWN0aW9uYWxQYXJ0IiwgImkiLCAicGVyY2VudENoYW5nZSIsICJyZW5kZXJTdGF0dXNJbmRpY2F0b3IiLCAibnVtIiwgInJlcyIsICJnZXRJbnB1dCIsICJyYXdNZXRhZmlsZXMiLCAiZ2V0U2luZ2xlSW5wdXQiLCAibmFtZSIsICJydW4iLCAiaW5wdXQiLCAicmVwb3J0IiwgImNvbXBhcmUiLCAicGF0aFRvRmlsZVVSTCJdCn0K diff --git a/esbuild.mjs b/esbuild.mjs index 4eced02..6f217cb 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -23,6 +23,7 @@ const result = await esbuild.build({ outfile: `dist/index.mjs`, format: 'esm', metafile: true, + minify: true, mainFields: ['module', 'main'], platform: 'node', target: 'node18',